From f0ac14ce97c4fa7f10ddd0d74a6dfade0a04cbc1 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Thu, 30 Jan 2025 22:06:18 -0500 Subject: [PATCH] x86_64: rewrite scalar `@intCast` --- src/arch/x86_64/CodeGen.zig | 1444 ++++++++---- test/behavior/x86_64/math.zig | 4033 +++++++++++++-------------------- 2 files changed, 2654 insertions(+), 2823 deletions(-) diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 24fcf31064..b1b4b68df9 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -2499,7 +2499,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .cmp_lt_errors_len => try cg.airCmpLtErrorsLen(inst), .bitcast => try cg.airBitCast(inst), - .intcast => try cg.airIntCast(inst), .trunc => try cg.airTrunc(inst), .is_non_null => try cg.airIsNonNull(inst), .is_null => try cg.airIsNull(inst), @@ -2589,7 +2588,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leaa(.none, .src0, .add_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leaa(.src0, .add_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 1 }}, @@ -2598,7 +2597,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 2 }}, @@ -2607,7 +2606,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"2", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"2", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 2 + 1 }}, @@ -2616,8 +2615,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"2", .src1), ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"2", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 4 }}, @@ -2626,7 +2625,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"4", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"4", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 4 + 1 }}, @@ -2635,8 +2634,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .ref = .src1 }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"4", .src1), ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"4", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -2646,7 +2645,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"8", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"8", .src1), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -2656,8 +2655,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .ref = .src1 }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"8", .src1), ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"8", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .dst_constraints = .{.po2_elem_size}, @@ -2668,7 +2667,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._l, .sh, .src1p, .sa(.none, .add_log2_src0_elem_size), ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .src1), ._, ._ }, } }, }, .{ .patterns = &.{ @@ -2678,7 +2677,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, .i_, .mul, .dst0p, .src1p, .sa(.none, .add_src0_elem_size), ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, } }) catch |err| switch (err) { error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ @@ -2705,7 +2704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leaa(.none, .src0, .sub_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leaa(.src0, .sub_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 1 }}, @@ -2716,7 +2715,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .neg, .src1p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 2 }}, @@ -2727,7 +2726,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .neg, .src1p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"2", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"2", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 2 + 1 }}, @@ -2737,9 +2736,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .general_purpose }}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"2", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"2", .src1), ._, ._ }, .{ ._, ._, .neg, .dst0p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 4 }}, @@ -2750,7 +2749,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .neg, .src1p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"4", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"4", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 4 + 1 }}, @@ -2760,9 +2759,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .general_purpose }}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"4", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"4", .src1), ._, ._ }, .{ ._, ._, .neg, .dst0p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -2774,7 +2773,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .neg, .src1p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"8", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"8", .src1), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -2785,9 +2784,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .general_purpose }}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"8", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"8", .src1), ._, ._ }, .{ ._, ._, .neg, .dst0p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .dst_constraints = .{.po2_elem_size}, @@ -2799,7 +2798,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .each = .{ .once = &.{ .{ ._, ._l, .sa, .src1p, .sa(.none, .add_log2_src0_elem_size), ._, ._ }, .{ ._, ._, .neg, .src1p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .src1), ._, ._ }, } }, }, .{ .patterns = &.{ @@ -2809,7 +2808,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, .i_, .mul, .dst0p, .src1p, .sa(.none, .sub_src0_elem_size), ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, } }) catch |err| switch (err) { error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ @@ -4540,7 +4539,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._dqa, .mov, .dst0x, .lea(.tmp0x), ._, ._ }, .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ }, .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .src1x, ._, ._ }, @@ -4678,7 +4677,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, @@ -4997,7 +4996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ }, .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ }, .{ ._, .vp_q, .cmpgt, .dst0x, .tmp2x, .dst0x, ._ }, @@ -5028,7 +5027,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ }, @@ -5060,7 +5059,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ }, .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ }, .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ }, .{ ._, .vp_q, .cmpgt, .dst0y, .tmp2y, .dst0y, ._ }, @@ -5090,7 +5089,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, @@ -5126,7 +5125,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, @@ -5162,7 +5161,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ }, @@ -5264,7 +5263,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, @@ -5303,7 +5302,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, @@ -5342,7 +5341,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, @@ -5379,7 +5378,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, @@ -8380,7 +8379,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._dqa, .mov, .dst0x, .lea(.tmp0x), ._, ._ }, .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ }, .{ ._, .p_, .xor, .dst0x, .src1x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, @@ -8518,7 +8517,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, @@ -8841,7 +8840,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ }, .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ }, .{ ._, .vp_q, .cmpgt, .dst0x, .dst0x, .tmp2x, ._ }, @@ -8872,7 +8871,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ }, @@ -8904,7 +8903,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ }, .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ }, .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ }, .{ ._, .vp_q, .cmpgt, .dst0y, .dst0y, .tmp2y, ._ }, @@ -8934,7 +8933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, @@ -8970,7 +8969,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, @@ -9006,7 +9005,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ }, @@ -9108,7 +9107,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, @@ -9147,7 +9146,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, @@ -9186,7 +9185,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, @@ -9223,7 +9222,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, @@ -10997,7 +10996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .p_, .xor, .dst0q, .lea(.tmp0q), ._, ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -11031,7 +11030,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, + .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ }, } }, }, .{ .required_features = .{ .sse2, null, null, null }, @@ -11065,7 +11064,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .sse, null, null, null }, @@ -11087,7 +11086,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .avx2, null, null, null }, @@ -11121,7 +11120,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -11155,7 +11154,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx2, null, null, null }, @@ -11812,7 +11811,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .p_, .xor, .dst0q, .lea(.tmp0q), ._, ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -11846,7 +11845,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, + .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ }, } }, }, .{ .required_features = .{ .sse2, null, null, null }, @@ -11880,7 +11879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .sse, null, null, null }, @@ -11902,7 +11901,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .avx2, null, null, null }, @@ -11936,7 +11935,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -11970,7 +11969,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -11993,9 +11992,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp0), ._, ._ }, - .{ ._, ._, .xor, .tmp2q, .leai(.qword, .tmp1, .tmp0), ._, ._ }, + .{ ._, ._, .xor, .tmp2q, .leai(.tmp1q, .tmp0), ._, ._ }, .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp2q, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, } }, @@ -12019,9 +12018,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp0), ._, ._ }, - .{ ._, ._, .xor, .tmp2d, .leai(.dword, .tmp1, .tmp0), ._, ._ }, + .{ ._, ._, .xor, .tmp2d, .leai(.tmp1d, .tmp0), ._, ._ }, .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp2d, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 4), ._, ._ }, .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, } }, @@ -13161,7 +13160,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, @@ -13190,7 +13189,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, @@ -13220,7 +13219,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -13250,7 +13249,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -13281,7 +13280,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, @@ -13310,7 +13309,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, @@ -13340,7 +13339,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -13370,7 +13369,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -13404,7 +13403,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, @@ -13436,7 +13435,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -13467,7 +13466,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -13501,7 +13500,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, @@ -13533,7 +13532,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -13564,7 +13563,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -14581,7 +14580,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, @@ -14590,9 +14589,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -14621,7 +14620,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, @@ -14629,9 +14628,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -14660,17 +14659,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, - .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .tmp3b, ._, ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -14699,7 +14698,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, @@ -14708,9 +14707,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -14739,7 +14738,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, @@ -14747,9 +14746,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -14778,17 +14777,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, - .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .tmp3b, ._, ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -14817,7 +14816,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, @@ -14826,9 +14825,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -14857,7 +14856,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, @@ -14865,9 +14864,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -14896,17 +14895,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, - .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .tmp3d, ._, ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -14935,7 +14934,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, @@ -14944,9 +14943,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -14975,7 +14974,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, @@ -14983,9 +14982,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -15014,17 +15013,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, - .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .tmp3d, ._, ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -15524,7 +15523,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15536,7 +15535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15570,7 +15569,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15583,7 +15582,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15616,7 +15615,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15628,7 +15627,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15663,7 +15662,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15687,7 +15686,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15730,7 +15729,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15742,7 +15741,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15776,7 +15775,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15789,7 +15788,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15824,7 +15823,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15848,7 +15847,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15893,7 +15892,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15917,7 +15916,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15960,7 +15959,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15972,7 +15971,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -16006,7 +16005,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -16019,7 +16018,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -16054,7 +16053,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -16078,7 +16077,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -16123,7 +16122,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -16147,7 +16146,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -16190,7 +16189,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -16202,7 +16201,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -16239,7 +16238,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -16265,7 +16264,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp4b, .si(0b1111), ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -16313,7 +16312,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -16340,7 +16339,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp4b, .si(0b11), ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -17281,8 +17280,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .ne => .neq, }) }, .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -17319,7 +17318,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .ne => .neq, }) }, .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ }, .{ ._, ._c, .in, .tmp1p, ._, ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, @@ -17642,7 +17641,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, @@ -17751,7 +17750,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, @@ -17863,7 +17862,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, @@ -17966,8 +17965,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .ne => .neq, }) }, .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18003,7 +18002,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .ne => .neq, }) }, .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ }, .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, @@ -18048,8 +18047,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ }, .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ }, .{ ._, .p_b, .movmsk, .tmp4d, .tmp2x, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18094,8 +18093,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18134,8 +18133,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) { else => unreachable, @@ -18145,7 +18144,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ }, } }, }, .{ .required_features = .{ .avx, .slow_incdec, null, null }, @@ -18188,8 +18187,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ }, .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18234,7 +18233,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ }, .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ }, .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, @@ -18274,7 +18273,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -18323,7 +18322,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -18382,7 +18381,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .tmp3b, .tmp4b, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -18550,7 +18549,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .tmp3b, .tmp4b, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -18714,7 +18713,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18804,7 +18803,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18894,7 +18893,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18983,7 +18982,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, @@ -19091,7 +19090,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, @@ -19199,7 +19198,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, @@ -20245,7 +20244,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .sbb, .tmp4q, .tmp2q, ._, ._ }, .{ ._, ._c, .set, .tmp3b, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp4q, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._, .sub, .tmp1d, .si(8), ._, ._ }, .{ ._, ._a, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, @@ -20271,7 +20270,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, + .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ }, } }, }, .{ .required_features = .{ .sse, null, null, null }, @@ -20293,7 +20292,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .@"and", .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -20315,7 +20314,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -20337,7 +20336,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, + .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ }, } }, }, .{ .required_features = .{ .sse2, null, null, null }, @@ -20359,7 +20358,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._pd, .@"and", .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -20381,7 +20380,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .x87, null, null, null }, @@ -20427,7 +20426,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, + .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ }, } }, }, .{ .required_features = .{ .sse2, null, null, null }, @@ -20449,7 +20448,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .p_, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .sse, null, null, null }, @@ -20471,7 +20470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .@"and", .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .avx2, null, null, null }, @@ -20493,7 +20492,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -20515,7 +20514,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -20537,7 +20536,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_ps, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, + .{ ._, .v_ps, .mova, .tmp2y, .lea(.tmp0y), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_ps, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, @@ -20564,7 +20563,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, .{ ._, ._ps, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, @@ -20592,7 +20591,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, + .{ ._, .v_pd, .mova, .tmp2y, .lea(.tmp0y), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_pd, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, @@ -20619,7 +20618,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._pd, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._pd, .mova, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, .{ ._, ._pd, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, @@ -20647,7 +20646,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_dqa, .mov, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, + .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .vp_, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, @@ -20674,7 +20673,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, + .{ ._, .v_pd, .mova, .tmp2y, .lea(.tmp0y), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_pd, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, @@ -20701,7 +20700,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, .{ ._, .p_, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, @@ -20729,7 +20728,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, .{ ._, ._ps, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, @@ -24537,6 +24536,683 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }; try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); }, + .intcast => |air_tag| if (use_old) try cg.airIntCast(inst) else fallback: { + const ty_op = air_datas[@intFromEnum(inst)].ty_op; + const dst_ty = ty_op.ty.toType(); + if (dst_ty.isVector(zcu)) break :fallback try cg.airIntCast(inst); + const src_ty = cg.typeOf(ty_op.operand); + var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); + var res: [1]Temp = undefined; + cg.select(&res, &.{dst_ty}, &ops, if (dst_ty.scalarType(zcu).abiSize(zcu) <= src_ty.scalarType(zcu).abiSize(zcu)) comptime &.{ .{ + .dst_constraints = .{.{ .int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0d, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0q, .src0q, ._, ._ }, + } }, + }, .{ + .dst_constraints = .{.{ .int = .byte }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0b, .mem(.src0b), ._, ._ }, + } }, + }, .{ + .dst_constraints = .{.{ .int = .word }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0w, .mem(.src0w), ._, ._ }, + } }, + }, .{ + .dst_constraints = .{.{ .int = .dword }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0d, .mem(.src0d), ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0q, .mem(.src0q), ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + } }, + } } else comptime &.{ .{ + .src_constraints = .{ .{ .signed_int = .byte }, .any }, + .dst_constraints = .{.{ .signed_int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .dst0d, .src0b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .int = .byte }, .any }, + .dst_constraints = .{.{ .int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .byte }, .any }, + .dst_constraints = .{.{ .signed_int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .dst0q, .src0b, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .byte }, .any }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .byte }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .tmp0q, .src0b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .byte }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .byte }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .ui(31), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .int = .byte }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sd", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .word }, .any }, + .dst_constraints = .{.{ .signed_int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .dst0d, .src0w, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .int = .word }, .any }, + .dst_constraints = .{.{ .int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .dst0d, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .word }, .any }, + .dst_constraints = .{.{ .signed_int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .dst0q, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .word }, .any }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .dst0d, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .word }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .tmp0q, .src0w, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .word }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .word }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .ui(31), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .int = .word }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sd", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .dword }, .any }, + .dst_constraints = .{.{ .signed_int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._d, .movsx, .dst0q, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .dword }, .any }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0d, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .dword }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._d, .movsx, .tmp0q, .src0d, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .dword }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .dword }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .ui(31), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .int = .dword }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sd", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .qword }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .qword }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + .{ ._, ._sq, .lod, ._, ._, ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sa2(.dst0, .src0, .add_delta_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sa2(.dst0, .src0, .add_delta_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + } }) catch |err| switch (err) { + error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ + @tagName(air_tag), + dst_ty.fmt(pt), + src_ty.fmt(pt), + ops[0].tracking(cg), + }), + else => |e| return e, + }; + try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); + }, .optional_payload_ptr => if (use_old) try cg.airOptionalPayloadPtr(inst) else { const ty_op = air_datas[@intFromEnum(inst)].ty_op; const ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); @@ -24716,7 +25392,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .movzx, .dst0d, .leaa(.byte, .src0, .add_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .movzx, .dst0d, .leaa(.src0b, .add_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .byte }}, @@ -24725,7 +25401,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .movzx, .dst0d, .leai(.byte, .src0, .src1), ._, ._ }, + .{ ._, ._, .movzx, .dst0d, .leai(.src0b, .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .word }}, @@ -24734,7 +25410,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .movzx, .dst0d, .leaa(.word, .src0, .add_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .movzx, .dst0d, .leaa(.src0w, .add_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .word }}, @@ -24743,7 +25419,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .movzx, .dst0d, .leasi(.word, .src0, .@"2", .src1), ._, ._ }, + .{ ._, ._, .movzx, .dst0d, .leasi(.src0w, .@"2", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .dword }}, @@ -24752,7 +25428,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .mov, .dst0d, .leaa(.dword, .src0, .add_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .leaa(.src0d, .add_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .dword }}, @@ -24761,7 +25437,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .mov, .dst0d, .leasi(.dword, .src0, .@"4", .src1), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .leasi(.src0d, .@"4", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .qword }}, @@ -24770,7 +25446,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .mov, .dst0q, .leaa(.qword, .src0, .add_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .mov, .dst0q, .leaa(.src0q, .add_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -24780,7 +25456,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .mov, .dst0q, .leasi(.qword, .src0, .@"8", .src1), ._, ._ }, + .{ ._, ._, .mov, .dst0q, .leasi(.src0q, .@"8", .src1), ._, ._ }, } }, } }) catch |err| switch (err) { error.SelectFailed => { @@ -45924,16 +46600,19 @@ const Select = struct { }; const Label = enum { @"0:", @"1:", @"2:", @"_", pseudo }; const Operand = struct { - tag: Tag, + flags: packed struct(u16) { + tag: Tag, + adjust: Adjust = .none, + unused: u4 = 0, + }, base: Ref.Sized = .none, index: packed struct(u6) { ref: Ref, - scale: Memory.Scale, - } = .{ .ref = .none, .scale = .@"1" }, - adjust: Adjust = .none, + scale: Memory.Scale = .@"1", + } = .{ .ref = .none }, imm: i32 = 0, - const Tag = enum { + const Tag = enum(u3) { none, backward_label, forward_label, @@ -45943,13 +46622,14 @@ const Select = struct { lea, mem, }; - const Adjust = packed struct(u8) { + const Adjust = packed struct(u9) { sign: enum(u1) { neg, pos }, - lhs: enum(u4) { + lhs: enum(u5) { none, ptr_size, ptr_bit_size, size, + delta_size, size_sub_elem_size, unaligned_size, bit_size, @@ -45970,10 +46650,12 @@ const Select = struct { const sub_ptr_size: Adjust = .{ .sign = .neg, .lhs = .ptr_size, .op = .mul, .rhs = .@"1" }; const add_ptr_bit_size: Adjust = .{ .sign = .pos, .lhs = .ptr_bit_size, .op = .mul, .rhs = .@"1" }; const add_size: Adjust = .{ .sign = .pos, .lhs = .size, .op = .mul, .rhs = .@"1" }; + const add_size_div_4: Adjust = .{ .sign = .pos, .lhs = .size, .op = .div, .rhs = .@"4" }; const add_size_div_8: Adjust = .{ .sign = .pos, .lhs = .size, .op = .div, .rhs = .@"8" }; const sub_size_div_8: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"8" }; const sub_size_div_4: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"4" }; const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" }; + const add_delta_size_div_8: Adjust = .{ .sign = .pos, .lhs = .delta_size, .op = .div, .rhs = .@"8" }; const add_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .size_sub_elem_size, .op = .mul, .rhs = .@"1" }; const add_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" }; const sub_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" }; @@ -46147,298 +46829,293 @@ const Select = struct { } }; - const @"_": Select.Operand = .{ .tag = .none }; + const @"_": Select.Operand = .{ .flags = .{ .tag = .none } }; - const @"0b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp0, .size = .none } }; - const @"0f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp0, .size = .none } }; - const @"1b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp1, .size = .none } }; - const @"1f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp1, .size = .none } }; - const @"2b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp2, .size = .none } }; - const @"2f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp2, .size = .none } }; + const @"0b": Select.Operand = .{ .flags = .{ .tag = .backward_label }, .base = .{ .ref = .tmp0, .size = .none } }; + const @"0f": Select.Operand = .{ .flags = .{ .tag = .forward_label }, .base = .{ .ref = .tmp0, .size = .none } }; + const @"1b": Select.Operand = .{ .flags = .{ .tag = .backward_label }, .base = .{ .ref = .tmp1, .size = .none } }; + const @"1f": Select.Operand = .{ .flags = .{ .tag = .forward_label }, .base = .{ .ref = .tmp1, .size = .none } }; + const @"2b": Select.Operand = .{ .flags = .{ .tag = .backward_label }, .base = .{ .ref = .tmp2, .size = .none } }; + const @"2f": Select.Operand = .{ .flags = .{ .tag = .forward_label }, .base = .{ .ref = .tmp2, .size = .none } }; - const tmp0b: Select.Operand = .{ .tag = .ref, .base = .tmp0b }; - const tmp0w: Select.Operand = .{ .tag = .ref, .base = .tmp0w }; - const tmp0d: Select.Operand = .{ .tag = .ref, .base = .tmp0d }; - const tmp0p: Select.Operand = .{ .tag = .ref, .base = .tmp0p }; - const tmp0q: Select.Operand = .{ .tag = .ref, .base = .tmp0q }; - const tmp0t: Select.Operand = .{ .tag = .ref, .base = .tmp0t }; - const tmp0x: Select.Operand = .{ .tag = .ref, .base = .tmp0x }; - const tmp0y: Select.Operand = .{ .tag = .ref, .base = .tmp0y }; + const tmp0b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0b }; + const tmp0w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0w }; + const tmp0d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0d }; + const tmp0p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0p }; + const tmp0q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0q }; + const tmp0t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0t }; + const tmp0x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0x }; + const tmp0y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0y }; - const tmp1b: Select.Operand = .{ .tag = .ref, .base = .tmp1b }; - const tmp1w: Select.Operand = .{ .tag = .ref, .base = .tmp1w }; - const tmp1d: Select.Operand = .{ .tag = .ref, .base = .tmp1d }; - const tmp1p: Select.Operand = .{ .tag = .ref, .base = .tmp1p }; - const tmp1q: Select.Operand = .{ .tag = .ref, .base = .tmp1q }; - const tmp1t: Select.Operand = .{ .tag = .ref, .base = .tmp1t }; - const tmp1x: Select.Operand = .{ .tag = .ref, .base = .tmp1x }; - const tmp1y: Select.Operand = .{ .tag = .ref, .base = .tmp1y }; + const tmp1b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1b }; + const tmp1w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1w }; + const tmp1d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1d }; + const tmp1p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1p }; + const tmp1q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1q }; + const tmp1t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1t }; + const tmp1x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1x }; + const tmp1y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1y }; - const tmp2b: Select.Operand = .{ .tag = .ref, .base = .tmp2b }; - const tmp2w: Select.Operand = .{ .tag = .ref, .base = .tmp2w }; - const tmp2d: Select.Operand = .{ .tag = .ref, .base = .tmp2d }; - const tmp2p: Select.Operand = .{ .tag = .ref, .base = .tmp2p }; - const tmp2q: Select.Operand = .{ .tag = .ref, .base = .tmp2q }; - const tmp2t: Select.Operand = .{ .tag = .ref, .base = .tmp2t }; - const tmp2x: Select.Operand = .{ .tag = .ref, .base = .tmp2x }; - const tmp2y: Select.Operand = .{ .tag = .ref, .base = .tmp2y }; + const tmp2b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2b }; + const tmp2w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2w }; + const tmp2d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2d }; + const tmp2p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2p }; + const tmp2q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2q }; + const tmp2t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2t }; + const tmp2x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2x }; + const tmp2y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2y }; - const tmp3b: Select.Operand = .{ .tag = .ref, .base = .tmp3b }; - const tmp3w: Select.Operand = .{ .tag = .ref, .base = .tmp3w }; - const tmp3d: Select.Operand = .{ .tag = .ref, .base = .tmp3d }; - const tmp3p: Select.Operand = .{ .tag = .ref, .base = .tmp3p }; - const tmp3q: Select.Operand = .{ .tag = .ref, .base = .tmp3q }; - const tmp3t: Select.Operand = .{ .tag = .ref, .base = .tmp3t }; - const tmp3x: Select.Operand = .{ .tag = .ref, .base = .tmp3x }; - const tmp3y: Select.Operand = .{ .tag = .ref, .base = .tmp3y }; + const tmp3b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3b }; + const tmp3w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3w }; + const tmp3d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3d }; + const tmp3p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3p }; + const tmp3q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3q }; + const tmp3t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3t }; + const tmp3x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3x }; + const tmp3y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3y }; - const tmp4b: Select.Operand = .{ .tag = .ref, .base = .tmp4b }; - const tmp4w: Select.Operand = .{ .tag = .ref, .base = .tmp4w }; - const tmp4d: Select.Operand = .{ .tag = .ref, .base = .tmp4d }; - const tmp4p: Select.Operand = .{ .tag = .ref, .base = .tmp4p }; - const tmp4q: Select.Operand = .{ .tag = .ref, .base = .tmp4q }; - const tmp4t: Select.Operand = .{ .tag = .ref, .base = .tmp4t }; - const tmp4x: Select.Operand = .{ .tag = .ref, .base = .tmp4x }; - const tmp4y: Select.Operand = .{ .tag = .ref, .base = .tmp4y }; + const tmp4b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4b }; + const tmp4w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4w }; + const tmp4d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4d }; + const tmp4p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4p }; + const tmp4q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4q }; + const tmp4t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4t }; + const tmp4x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4x }; + const tmp4y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4y }; - const tmp5b: Select.Operand = .{ .tag = .ref, .base = .tmp5b }; - const tmp5w: Select.Operand = .{ .tag = .ref, .base = .tmp5w }; - const tmp5d: Select.Operand = .{ .tag = .ref, .base = .tmp5d }; - const tmp5p: Select.Operand = .{ .tag = .ref, .base = .tmp5p }; - const tmp5q: Select.Operand = .{ .tag = .ref, .base = .tmp5q }; - const tmp5t: Select.Operand = .{ .tag = .ref, .base = .tmp5t }; - const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x }; - const tmp5y: Select.Operand = .{ .tag = .ref, .base = .tmp5y }; + const tmp5b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5b }; + const tmp5w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5w }; + const tmp5d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5d }; + const tmp5p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5p }; + const tmp5q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5q }; + const tmp5t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5t }; + const tmp5x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5x }; + const tmp5y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5y }; - const tmp6b: Select.Operand = .{ .tag = .ref, .base = .tmp6b }; - const tmp6w: Select.Operand = .{ .tag = .ref, .base = .tmp6w }; - const tmp6d: Select.Operand = .{ .tag = .ref, .base = .tmp6d }; - const tmp6p: Select.Operand = .{ .tag = .ref, .base = .tmp6p }; - const tmp6q: Select.Operand = .{ .tag = .ref, .base = .tmp6q }; - const tmp6t: Select.Operand = .{ .tag = .ref, .base = .tmp6t }; - const tmp6x: Select.Operand = .{ .tag = .ref, .base = .tmp6x }; - const tmp6y: Select.Operand = .{ .tag = .ref, .base = .tmp6y }; + const tmp6b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6b }; + const tmp6w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6w }; + const tmp6d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6d }; + const tmp6p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6p }; + const tmp6q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6q }; + const tmp6t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6t }; + const tmp6x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6x }; + const tmp6y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6y }; - const tmp7b: Select.Operand = .{ .tag = .ref, .base = .tmp7b }; - const tmp7w: Select.Operand = .{ .tag = .ref, .base = .tmp7w }; - const tmp7d: Select.Operand = .{ .tag = .ref, .base = .tmp7d }; - const tmp7p: Select.Operand = .{ .tag = .ref, .base = .tmp7p }; - const tmp7q: Select.Operand = .{ .tag = .ref, .base = .tmp7q }; - const tmp7t: Select.Operand = .{ .tag = .ref, .base = .tmp7t }; - const tmp7x: Select.Operand = .{ .tag = .ref, .base = .tmp7x }; - const tmp7y: Select.Operand = .{ .tag = .ref, .base = .tmp7y }; + const tmp7b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7b }; + const tmp7w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7w }; + const tmp7d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7d }; + const tmp7p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7p }; + const tmp7q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7q }; + const tmp7t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7t }; + const tmp7x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7x }; + const tmp7y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7y }; - const tmp8b: Select.Operand = .{ .tag = .ref, .base = .tmp8b }; - const tmp8w: Select.Operand = .{ .tag = .ref, .base = .tmp8w }; - const tmp8d: Select.Operand = .{ .tag = .ref, .base = .tmp8d }; - const tmp8p: Select.Operand = .{ .tag = .ref, .base = .tmp8p }; - const tmp8q: Select.Operand = .{ .tag = .ref, .base = .tmp8q }; - const tmp8t: Select.Operand = .{ .tag = .ref, .base = .tmp8t }; - const tmp8x: Select.Operand = .{ .tag = .ref, .base = .tmp8x }; - const tmp8y: Select.Operand = .{ .tag = .ref, .base = .tmp8y }; + const tmp8b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8b }; + const tmp8w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8w }; + const tmp8d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8d }; + const tmp8p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8p }; + const tmp8q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8q }; + const tmp8t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8t }; + const tmp8x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8x }; + const tmp8y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8y }; - const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b }; - const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w }; - const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d }; - const dst0p: Select.Operand = .{ .tag = .ref, .base = .dst0p }; - const dst0q: Select.Operand = .{ .tag = .ref, .base = .dst0q }; - const dst0t: Select.Operand = .{ .tag = .ref, .base = .dst0t }; - const dst0x: Select.Operand = .{ .tag = .ref, .base = .dst0x }; - const dst0y: Select.Operand = .{ .tag = .ref, .base = .dst0y }; + const dst0b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0b }; + const dst0w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0w }; + const dst0d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0d }; + const dst0p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0p }; + const dst0q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0q }; + const dst0t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0t }; + const dst0x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0x }; + const dst0y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0y }; - const src0b: Select.Operand = .{ .tag = .ref, .base = .src0b }; - const src0w: Select.Operand = .{ .tag = .ref, .base = .src0w }; - const src0d: Select.Operand = .{ .tag = .ref, .base = .src0d }; - const src0p: Select.Operand = .{ .tag = .ref, .base = .src0p }; - const src0q: Select.Operand = .{ .tag = .ref, .base = .src0q }; - const src0t: Select.Operand = .{ .tag = .ref, .base = .src0t }; - const src0x: Select.Operand = .{ .tag = .ref, .base = .src0x }; - const src0y: Select.Operand = .{ .tag = .ref, .base = .src0y }; + const src0b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0b }; + const src0w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0w }; + const src0d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0d }; + const src0p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0p }; + const src0q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0q }; + const src0t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0t }; + const src0x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0x }; + const src0y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0y }; - const src1b: Select.Operand = .{ .tag = .ref, .base = .src1b }; - const src1w: Select.Operand = .{ .tag = .ref, .base = .src1w }; - const src1d: Select.Operand = .{ .tag = .ref, .base = .src1d }; - const src1p: Select.Operand = .{ .tag = .ref, .base = .src1p }; - const src1q: Select.Operand = .{ .tag = .ref, .base = .src1q }; - const src1t: Select.Operand = .{ .tag = .ref, .base = .src1t }; - const src1x: Select.Operand = .{ .tag = .ref, .base = .src1x }; - const src1y: Select.Operand = .{ .tag = .ref, .base = .src1y }; + const src1b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1b }; + const src1w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1w }; + const src1d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1d }; + const src1p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1p }; + const src1q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1q }; + const src1t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1t }; + const src1x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1x }; + const src1y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1y }; fn si(imm: i32) Select.Operand { - return .{ .tag = .simm, .imm = imm }; + return .{ .flags = .{ .tag = .simm }, .imm = imm }; } fn sa(base: Ref.Sized, adjust: Adjust) Select.Operand { - return .{ .tag = .simm, .base = base, .adjust = adjust }; + return .{ .flags = .{ .tag = .simm, .adjust = adjust }, .base = base }; + } + fn sa2(base: Ref.Sized, index: Ref, adjust: Adjust) Select.Operand { + return .{ .flags = .{ .tag = .simm, .adjust = adjust }, .base = base, .index = .{ .ref = index } }; } fn sia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand { - return .{ .tag = .simm, .base = base, .adjust = adjust, .imm = imm }; + return .{ .flags = .{ .tag = .simm, .adjust = adjust }, .base = base, .imm = imm }; } fn ui(imm: u32) Select.Operand { - return .{ .tag = .uimm, .imm = @bitCast(imm) }; + return .{ .flags = .{ .tag = .uimm }, .imm = @bitCast(imm) }; } fn ua(base: Ref.Sized, adjust: Adjust) Select.Operand { - return .{ .tag = .uimm, .base = base, .adjust = adjust }; + return .{ .flags = .{ .tag = .uimm, .adjust = adjust }, .base = base }; } fn uia(imm: u32, base: Ref.Sized, adjust: Adjust) Select.Operand { - return .{ .tag = .uimm, .base = base, .adjust = adjust, .imm = @bitCast(imm) }; + return .{ .flags = .{ .tag = .uimm, .adjust = adjust }, .base = base, .imm = @bitCast(imm) }; } fn rm(mode: bits.RoundMode) Select.Operand { - return .{ .tag = .uimm, .imm = @intCast(mode.imm().unsigned) }; + return .{ .flags = .{ .tag = .uimm }, .imm = @intCast(mode.imm().unsigned) }; } fn sp(pred: bits.SseFloatPredicate) Select.Operand { - return .{ .tag = .uimm, .imm = @intCast(pred.imm().unsigned) }; + return .{ .flags = .{ .tag = .uimm }, .imm = @intCast(pred.imm().unsigned) }; } fn vp(pred: bits.VexFloatPredicate) Select.Operand { - return .{ .tag = .uimm, .imm = @intCast(pred.imm().unsigned) }; + return .{ .flags = .{ .tag = .uimm }, .imm = @intCast(pred.imm().unsigned) }; } - fn lea(size: Memory.Size, base: Ref) Select.Operand { + fn lea(base: Ref.Sized) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, + .flags = .{ .tag = .lea }, + .base = base, }; } - fn leaa(size: Memory.Size, base: Ref, adjust: Adjust) Select.Operand { + fn leaa(base: Ref.Sized, adjust: Adjust) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, - .adjust = adjust, + .flags = .{ .tag = .lea, .adjust = adjust }, + .base = base, }; } - fn lead(size: Memory.Size, base: Ref, disp: i32) Select.Operand { + fn lead(base: Ref.Sized, disp: i32) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, + .flags = .{ .tag = .lea }, + .base = base, .imm = disp, }; } - fn leai(size: Memory.Size, base: Ref, index: Ref) Select.Operand { + fn leai(base: Ref.Sized, index: Ref) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, - .index = .{ .ref = index, .scale = .@"1" }, + .flags = .{ .tag = .lea }, + .base = base, + .index = .{ .ref = index }, }; } - fn leaia(size: Memory.Size, base: Ref, index: Ref, adjust: Adjust) Select.Operand { + fn leaia(base: Ref.Sized, index: Ref, adjust: Adjust) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, - .index = .{ .ref = index, .scale = .@"1" }, - .adjust = adjust, + .flags = .{ .tag = .lea, .adjust = adjust }, + .base = base, + .index = .{ .ref = index }, }; } - fn leaid(size: Memory.Size, base: Ref, index: Ref, disp: i32) Select.Operand { + fn leaid(base: Ref.Sized, index: Ref, disp: i32) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, - .index = .{ .ref = index, .scale = .@"1" }, + .flags = .{ .tag = .lea }, + .base = base, + .index = .{ .ref = index }, .imm = disp, }; } - fn leasi(size: Memory.Size, base: Ref, scale: Memory.Scale, index: Ref) Select.Operand { + fn leasi(base: Ref.Sized, scale: Memory.Scale, index: Ref) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, + .flags = .{ .tag = .lea }, + .base = base, .index = .{ .ref = index, .scale = scale }, }; } - fn leasid(size: Memory.Size, base: Ref, scale: Memory.Scale, index: Ref, disp: i32) Select.Operand { + fn leasid(base: Ref.Sized, scale: Memory.Scale, index: Ref, disp: i32) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, + .flags = .{ .tag = .lea }, + .base = base, .index = .{ .ref = index, .scale = scale }, .imm = disp, }; } - fn leasiad(size: Memory.Size, base: Ref, scale: Memory.Scale, index: Ref, adjust: Adjust, disp: i32) Select.Operand { + fn leasiad(base: Ref.Sized, scale: Memory.Scale, index: Ref, adjust: Adjust, disp: i32) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, + .flags = .{ .tag = .lea, .adjust = adjust }, + .base = base, .index = .{ .ref = index, .scale = scale }, - .adjust = adjust, .imm = disp, }; } fn mem(base: Ref.Sized) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, }; } fn memd(base: Ref.Sized, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, .imm = disp, }; } fn mema(base: Ref.Sized, adjust: Adjust) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, - .adjust = adjust, }; } fn memad(base: Ref.Sized, adjust: Adjust, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, - .adjust = adjust, .imm = disp, }; } fn memi(base: Ref.Sized, index: Ref) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, - .index = .{ .ref = index, .scale = .@"1" }, + .index = .{ .ref = index }, }; } fn memia(base: Ref.Sized, index: Ref, adjust: Adjust) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, - .index = .{ .ref = index, .scale = .@"1" }, - .adjust = adjust, + .index = .{ .ref = index }, }; } fn memiad(base: Ref.Sized, index: Ref, adjust: Adjust, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, - .index = .{ .ref = index, .scale = .@"1" }, - .adjust = adjust, + .index = .{ .ref = index }, .imm = disp, }; } fn memid(base: Ref.Sized, index: Ref, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, - .index = .{ .ref = index, .scale = .@"1" }, + .index = .{ .ref = index }, .imm = disp, }; } fn memsi(base: Ref.Sized, scale: Memory.Scale, index: Ref) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, .index = .{ .ref = index, .scale = scale }, }; } fn memsia(base: Ref.Sized, scale: Memory.Scale, index: Ref, adjust: Adjust) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, .index = .{ .ref = index, .scale = scale }, - .adjust = adjust, }; } fn memsid(base: Ref.Sized, scale: Memory.Scale, index: Ref, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, .index = .{ .ref = index, .scale = scale }, .imm = disp, @@ -46446,10 +47123,9 @@ const Select = struct { } fn memsiad(base: Ref.Sized, scale: Memory.Scale, index: Ref, adjust: Adjust, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, .index = .{ .ref = index, .scale = scale }, - .adjust = adjust, .imm = disp, }; } @@ -46458,11 +47134,13 @@ const Select = struct { const UnsignedImm = @Type(.{ .int = .{ .signedness = .unsigned, .bits = @typeInfo(SignedImm).int.bits }, }); - const lhs: SignedImm = lhs: switch (op.adjust.lhs) { + const lhs: SignedImm = lhs: switch (op.flags.adjust.lhs) { .none => 0, .ptr_size => @divExact(s.cg.target.ptrBitWidth(), 8), .ptr_bit_size => s.cg.target.ptrBitWidth(), .size => @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu)), + .delta_size => @intCast(@as(SignedImm, @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu))) - + @as(SignedImm, @intCast(op.index.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu)))), .size_sub_elem_size => { const ty = op.base.ref.deref(s).typeOf(s.cg); break :lhs @intCast(ty.abiSize(s.cg.pt.zcu) - ty.elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu)); @@ -46489,8 +47167,8 @@ const Select = struct { -%op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu), )), }; - const rhs = op.adjust.rhs.toLog2(); - const res = res: switch (op.adjust.op) { + const rhs = op.flags.adjust.rhs.toLog2(); + const res = res: switch (op.flags.adjust.op) { .mul => { const res = @shlWithOverflow(lhs, rhs); assert(res[1] == 0); @@ -46498,14 +47176,14 @@ const Select = struct { }, .div => @shrExact(lhs, rhs), }; - return switch (op.adjust.sign) { + return switch (op.flags.adjust.sign) { .neg => op.imm - res, .pos => op.imm + res, }; } fn lower(op: Select.Operand, s: *Select) !CodeGen.Operand { - return switch (op.tag) { + return switch (op.flags.tag) { .none => .none, .backward_label => .{ .inst = s.labels[@intFromEnum(op.base.ref)].backward.? }, .forward_label => for (&s.labels[@intFromEnum(op.base.ref)].forward) |*label| { diff --git a/test/behavior/x86_64/math.zig b/test/behavior/x86_64/math.zig index 4642f822a3..9cc957614c 100644 --- a/test/behavior/x86_64/math.zig +++ b/test/behavior/x86_64/math.zig @@ -1680,165 +1680,85 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty imm_arg, ); } - fn testInts() !void { + fn testSameSignednessInts() !void { try testArgs(i8, i1, -1); try testArgs(i8, i1, 0); - try testArgs(u8, i1, -1); - try testArgs(u8, i1, 0); try testArgs(i16, i1, -1); try testArgs(i16, i1, 0); - try testArgs(u16, i1, -1); - try testArgs(u16, i1, 0); try testArgs(i32, i1, -1); try testArgs(i32, i1, 0); - try testArgs(u32, i1, -1); - try testArgs(u32, i1, 0); try testArgs(i64, i1, -1); try testArgs(i64, i1, 0); - try testArgs(u64, i1, -1); - try testArgs(u64, i1, 0); try testArgs(i128, i1, -1); try testArgs(i128, i1, 0); - try testArgs(u128, i1, -1); - try testArgs(u128, i1, 0); try testArgs(i256, i1, -1); try testArgs(i256, i1, 0); - try testArgs(u256, i1, -1); - try testArgs(u256, i1, 0); try testArgs(i512, i1, -1); try testArgs(i512, i1, 0); - try testArgs(u512, i1, -1); - try testArgs(u512, i1, 0); try testArgs(i1024, i1, -1); try testArgs(i1024, i1, 0); - try testArgs(u1024, i1, -1); - try testArgs(u1024, i1, 0); - try testArgs(i8, u1, 0); - try testArgs(i8, u1, 1 << 0); try testArgs(u8, u1, 0); try testArgs(u8, u1, 1 << 0); - try testArgs(i16, u1, 0); - try testArgs(i16, u1, 1 << 0); try testArgs(u16, u1, 0); try testArgs(u16, u1, 1 << 0); - try testArgs(i32, u1, 0); - try testArgs(i32, u1, 1 << 0); try testArgs(u32, u1, 0); try testArgs(u32, u1, 1 << 0); - try testArgs(i64, u1, 0); - try testArgs(i64, u1, 1 << 0); try testArgs(u64, u1, 0); try testArgs(u64, u1, 1 << 0); - try testArgs(i128, u1, 0); - try testArgs(i128, u1, 1 << 0); try testArgs(u128, u1, 0); try testArgs(u128, u1, 1 << 0); - try testArgs(i256, u1, 0); - try testArgs(i256, u1, 1 << 0); try testArgs(u256, u1, 0); try testArgs(u256, u1, 1 << 0); - try testArgs(i512, u1, 0); - try testArgs(i512, u1, 1 << 0); try testArgs(u512, u1, 0); try testArgs(u512, u1, 1 << 0); - try testArgs(i1024, u1, 0); - try testArgs(i1024, u1, 1 << 0); try testArgs(u1024, u1, 0); try testArgs(u1024, u1, 1 << 0); try testArgs(i8, i2, -1 << 1); try testArgs(i8, i2, -1); try testArgs(i8, i2, 0); - try testArgs(u8, i2, -1 << 1); - try testArgs(u8, i2, -1); - try testArgs(u8, i2, 0); try testArgs(i16, i2, -1 << 1); try testArgs(i16, i2, -1); try testArgs(i16, i2, 0); - try testArgs(u16, i2, -1 << 1); - try testArgs(u16, i2, -1); - try testArgs(u16, i2, 0); try testArgs(i32, i2, -1 << 1); try testArgs(i32, i2, -1); try testArgs(i32, i2, 0); - try testArgs(u32, i2, -1 << 1); - try testArgs(u32, i2, -1); - try testArgs(u32, i2, 0); try testArgs(i64, i2, -1 << 1); try testArgs(i64, i2, -1); try testArgs(i64, i2, 0); - try testArgs(u64, i2, -1 << 1); - try testArgs(u64, i2, -1); - try testArgs(u64, i2, 0); try testArgs(i128, i2, -1 << 1); try testArgs(i128, i2, -1); try testArgs(i128, i2, 0); - try testArgs(u128, i2, -1 << 1); - try testArgs(u128, i2, -1); - try testArgs(u128, i2, 0); try testArgs(i256, i2, -1 << 1); try testArgs(i256, i2, -1); try testArgs(i256, i2, 0); - try testArgs(u256, i2, -1 << 1); - try testArgs(u256, i2, -1); - try testArgs(u256, i2, 0); try testArgs(i512, i2, -1 << 1); try testArgs(i512, i2, -1); try testArgs(i512, i2, 0); - try testArgs(u512, i2, -1 << 1); - try testArgs(u512, i2, -1); - try testArgs(u512, i2, 0); try testArgs(i1024, i2, -1 << 1); try testArgs(i1024, i2, -1); try testArgs(i1024, i2, 0); - try testArgs(u1024, i2, -1 << 1); - try testArgs(u1024, i2, -1); - try testArgs(u1024, i2, 0); - try testArgs(i8, u2, 0); - try testArgs(i8, u2, 1 << 0); - try testArgs(i8, u2, 1 << 1); try testArgs(u8, u2, 0); try testArgs(u8, u2, 1 << 0); try testArgs(u8, u2, 1 << 1); - try testArgs(i16, u2, 0); - try testArgs(i16, u2, 1 << 0); - try testArgs(i16, u2, 1 << 1); try testArgs(u16, u2, 0); try testArgs(u16, u2, 1 << 0); try testArgs(u16, u2, 1 << 1); - try testArgs(i32, u2, 0); - try testArgs(i32, u2, 1 << 0); - try testArgs(i32, u2, 1 << 1); try testArgs(u32, u2, 0); try testArgs(u32, u2, 1 << 0); try testArgs(u32, u2, 1 << 1); - try testArgs(i64, u2, 0); - try testArgs(i64, u2, 1 << 0); - try testArgs(i64, u2, 1 << 1); try testArgs(u64, u2, 0); try testArgs(u64, u2, 1 << 0); try testArgs(u64, u2, 1 << 1); - try testArgs(i128, u2, 0); - try testArgs(i128, u2, 1 << 0); - try testArgs(i128, u2, 1 << 1); try testArgs(u128, u2, 0); try testArgs(u128, u2, 1 << 0); try testArgs(u128, u2, 1 << 1); - try testArgs(i256, u2, 0); - try testArgs(i256, u2, 1 << 0); - try testArgs(i256, u2, 1 << 1); try testArgs(u256, u2, 0); try testArgs(u256, u2, 1 << 0); try testArgs(u256, u2, 1 << 1); - try testArgs(i512, u2, 0); - try testArgs(i512, u2, 1 << 0); - try testArgs(i512, u2, 1 << 1); try testArgs(u512, u2, 0); try testArgs(u512, u2, 1 << 0); try testArgs(u512, u2, 1 << 1); - try testArgs(i1024, u2, 0); - try testArgs(i1024, u2, 1 << 0); - try testArgs(i1024, u2, 1 << 1); try testArgs(u1024, u2, 0); try testArgs(u1024, u2, 1 << 0); try testArgs(u1024, u2, 1 << 1); @@ -1846,96 +1766,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i3, -1 << 2); try testArgs(i8, i3, -1); try testArgs(i8, i3, 0); - try testArgs(u8, i3, -1 << 2); - try testArgs(u8, i3, -1); - try testArgs(u8, i3, 0); try testArgs(i16, i3, -1 << 2); try testArgs(i16, i3, -1); try testArgs(i16, i3, 0); - try testArgs(u16, i3, -1 << 2); - try testArgs(u16, i3, -1); - try testArgs(u16, i3, 0); try testArgs(i32, i3, -1 << 2); try testArgs(i32, i3, -1); try testArgs(i32, i3, 0); - try testArgs(u32, i3, -1 << 2); - try testArgs(u32, i3, -1); - try testArgs(u32, i3, 0); try testArgs(i64, i3, -1 << 2); try testArgs(i64, i3, -1); try testArgs(i64, i3, 0); - try testArgs(u64, i3, -1 << 2); - try testArgs(u64, i3, -1); - try testArgs(u64, i3, 0); try testArgs(i128, i3, -1 << 2); try testArgs(i128, i3, -1); try testArgs(i128, i3, 0); - try testArgs(u128, i3, -1 << 2); - try testArgs(u128, i3, -1); - try testArgs(u128, i3, 0); try testArgs(i256, i3, -1 << 2); try testArgs(i256, i3, -1); try testArgs(i256, i3, 0); - try testArgs(u256, i3, -1 << 2); - try testArgs(u256, i3, -1); - try testArgs(u256, i3, 0); try testArgs(i512, i3, -1 << 2); try testArgs(i512, i3, -1); try testArgs(i512, i3, 0); - try testArgs(u512, i3, -1 << 2); - try testArgs(u512, i3, -1); - try testArgs(u512, i3, 0); try testArgs(i1024, i3, -1 << 2); try testArgs(i1024, i3, -1); try testArgs(i1024, i3, 0); - try testArgs(u1024, i3, -1 << 2); - try testArgs(u1024, i3, -1); - try testArgs(u1024, i3, 0); - try testArgs(i8, u3, 0); - try testArgs(i8, u3, 1 << 0); - try testArgs(i8, u3, 1 << 2); try testArgs(u8, u3, 0); try testArgs(u8, u3, 1 << 0); try testArgs(u8, u3, 1 << 2); - try testArgs(i16, u3, 0); - try testArgs(i16, u3, 1 << 0); - try testArgs(i16, u3, 1 << 2); try testArgs(u16, u3, 0); try testArgs(u16, u3, 1 << 0); try testArgs(u16, u3, 1 << 2); - try testArgs(i32, u3, 0); - try testArgs(i32, u3, 1 << 0); - try testArgs(i32, u3, 1 << 2); try testArgs(u32, u3, 0); try testArgs(u32, u3, 1 << 0); try testArgs(u32, u3, 1 << 2); - try testArgs(i64, u3, 0); - try testArgs(i64, u3, 1 << 0); - try testArgs(i64, u3, 1 << 2); try testArgs(u64, u3, 0); try testArgs(u64, u3, 1 << 0); try testArgs(u64, u3, 1 << 2); - try testArgs(i128, u3, 0); - try testArgs(i128, u3, 1 << 0); - try testArgs(i128, u3, 1 << 2); try testArgs(u128, u3, 0); try testArgs(u128, u3, 1 << 0); try testArgs(u128, u3, 1 << 2); - try testArgs(i256, u3, 0); - try testArgs(i256, u3, 1 << 0); - try testArgs(i256, u3, 1 << 2); try testArgs(u256, u3, 0); try testArgs(u256, u3, 1 << 0); try testArgs(u256, u3, 1 << 2); - try testArgs(i512, u3, 0); - try testArgs(i512, u3, 1 << 0); - try testArgs(i512, u3, 1 << 2); try testArgs(u512, u3, 0); try testArgs(u512, u3, 1 << 0); try testArgs(u512, u3, 1 << 2); - try testArgs(i1024, u3, 0); - try testArgs(i1024, u3, 1 << 0); - try testArgs(i1024, u3, 1 << 2); try testArgs(u1024, u3, 0); try testArgs(u1024, u3, 1 << 0); try testArgs(u1024, u3, 1 << 2); @@ -1943,96 +1815,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i4, -1 << 3); try testArgs(i8, i4, -1); try testArgs(i8, i4, 0); - try testArgs(u8, i4, -1 << 3); - try testArgs(u8, i4, -1); - try testArgs(u8, i4, 0); try testArgs(i16, i4, -1 << 3); try testArgs(i16, i4, -1); try testArgs(i16, i4, 0); - try testArgs(u16, i4, -1 << 3); - try testArgs(u16, i4, -1); - try testArgs(u16, i4, 0); try testArgs(i32, i4, -1 << 3); try testArgs(i32, i4, -1); try testArgs(i32, i4, 0); - try testArgs(u32, i4, -1 << 3); - try testArgs(u32, i4, -1); - try testArgs(u32, i4, 0); try testArgs(i64, i4, -1 << 3); try testArgs(i64, i4, -1); try testArgs(i64, i4, 0); - try testArgs(u64, i4, -1 << 3); - try testArgs(u64, i4, -1); - try testArgs(u64, i4, 0); try testArgs(i128, i4, -1 << 3); try testArgs(i128, i4, -1); try testArgs(i128, i4, 0); - try testArgs(u128, i4, -1 << 3); - try testArgs(u128, i4, -1); - try testArgs(u128, i4, 0); try testArgs(i256, i4, -1 << 3); try testArgs(i256, i4, -1); try testArgs(i256, i4, 0); - try testArgs(u256, i4, -1 << 3); - try testArgs(u256, i4, -1); - try testArgs(u256, i4, 0); try testArgs(i512, i4, -1 << 3); try testArgs(i512, i4, -1); try testArgs(i512, i4, 0); - try testArgs(u512, i4, -1 << 3); - try testArgs(u512, i4, -1); - try testArgs(u512, i4, 0); try testArgs(i1024, i4, -1 << 3); try testArgs(i1024, i4, -1); try testArgs(i1024, i4, 0); - try testArgs(u1024, i4, -1 << 3); - try testArgs(u1024, i4, -1); - try testArgs(u1024, i4, 0); - try testArgs(i8, u4, 0); - try testArgs(i8, u4, 1 << 0); - try testArgs(i8, u4, 1 << 3); try testArgs(u8, u4, 0); try testArgs(u8, u4, 1 << 0); try testArgs(u8, u4, 1 << 3); - try testArgs(i16, u4, 0); - try testArgs(i16, u4, 1 << 0); - try testArgs(i16, u4, 1 << 3); try testArgs(u16, u4, 0); try testArgs(u16, u4, 1 << 0); try testArgs(u16, u4, 1 << 3); - try testArgs(i32, u4, 0); - try testArgs(i32, u4, 1 << 0); - try testArgs(i32, u4, 1 << 3); try testArgs(u32, u4, 0); try testArgs(u32, u4, 1 << 0); try testArgs(u32, u4, 1 << 3); - try testArgs(i64, u4, 0); - try testArgs(i64, u4, 1 << 0); - try testArgs(i64, u4, 1 << 3); try testArgs(u64, u4, 0); try testArgs(u64, u4, 1 << 0); try testArgs(u64, u4, 1 << 3); - try testArgs(i128, u4, 0); - try testArgs(i128, u4, 1 << 0); - try testArgs(i128, u4, 1 << 3); try testArgs(u128, u4, 0); try testArgs(u128, u4, 1 << 0); try testArgs(u128, u4, 1 << 3); - try testArgs(i256, u4, 0); - try testArgs(i256, u4, 1 << 0); - try testArgs(i256, u4, 1 << 3); try testArgs(u256, u4, 0); try testArgs(u256, u4, 1 << 0); try testArgs(u256, u4, 1 << 3); - try testArgs(i512, u4, 0); - try testArgs(i512, u4, 1 << 0); - try testArgs(i512, u4, 1 << 3); try testArgs(u512, u4, 0); try testArgs(u512, u4, 1 << 0); try testArgs(u512, u4, 1 << 3); - try testArgs(i1024, u4, 0); - try testArgs(i1024, u4, 1 << 0); - try testArgs(i1024, u4, 1 << 3); try testArgs(u1024, u4, 0); try testArgs(u1024, u4, 1 << 0); try testArgs(u1024, u4, 1 << 3); @@ -2040,96 +1864,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i5, -1 << 4); try testArgs(i8, i5, -1); try testArgs(i8, i5, 0); - try testArgs(u8, i5, -1 << 4); - try testArgs(u8, i5, -1); - try testArgs(u8, i5, 0); try testArgs(i16, i5, -1 << 4); try testArgs(i16, i5, -1); try testArgs(i16, i5, 0); - try testArgs(u16, i5, -1 << 4); - try testArgs(u16, i5, -1); - try testArgs(u16, i5, 0); try testArgs(i32, i5, -1 << 4); try testArgs(i32, i5, -1); try testArgs(i32, i5, 0); - try testArgs(u32, i5, -1 << 4); - try testArgs(u32, i5, -1); - try testArgs(u32, i5, 0); try testArgs(i64, i5, -1 << 4); try testArgs(i64, i5, -1); try testArgs(i64, i5, 0); - try testArgs(u64, i5, -1 << 4); - try testArgs(u64, i5, -1); - try testArgs(u64, i5, 0); try testArgs(i128, i5, -1 << 4); try testArgs(i128, i5, -1); try testArgs(i128, i5, 0); - try testArgs(u128, i5, -1 << 4); - try testArgs(u128, i5, -1); - try testArgs(u128, i5, 0); try testArgs(i256, i5, -1 << 4); try testArgs(i256, i5, -1); try testArgs(i256, i5, 0); - try testArgs(u256, i5, -1 << 4); - try testArgs(u256, i5, -1); - try testArgs(u256, i5, 0); try testArgs(i512, i5, -1 << 4); try testArgs(i512, i5, -1); try testArgs(i512, i5, 0); - try testArgs(u512, i5, -1 << 4); - try testArgs(u512, i5, -1); - try testArgs(u512, i5, 0); try testArgs(i1024, i5, -1 << 4); try testArgs(i1024, i5, -1); try testArgs(i1024, i5, 0); - try testArgs(u1024, i5, -1 << 4); - try testArgs(u1024, i5, -1); - try testArgs(u1024, i5, 0); - try testArgs(i8, u5, 0); - try testArgs(i8, u5, 1 << 0); - try testArgs(i8, u5, 1 << 4); try testArgs(u8, u5, 0); try testArgs(u8, u5, 1 << 0); try testArgs(u8, u5, 1 << 4); - try testArgs(i16, u5, 0); - try testArgs(i16, u5, 1 << 0); - try testArgs(i16, u5, 1 << 4); try testArgs(u16, u5, 0); try testArgs(u16, u5, 1 << 0); try testArgs(u16, u5, 1 << 4); - try testArgs(i32, u5, 0); - try testArgs(i32, u5, 1 << 0); - try testArgs(i32, u5, 1 << 4); try testArgs(u32, u5, 0); try testArgs(u32, u5, 1 << 0); try testArgs(u32, u5, 1 << 4); - try testArgs(i64, u5, 0); - try testArgs(i64, u5, 1 << 0); - try testArgs(i64, u5, 1 << 4); try testArgs(u64, u5, 0); try testArgs(u64, u5, 1 << 0); try testArgs(u64, u5, 1 << 4); - try testArgs(i128, u5, 0); - try testArgs(i128, u5, 1 << 0); - try testArgs(i128, u5, 1 << 4); try testArgs(u128, u5, 0); try testArgs(u128, u5, 1 << 0); try testArgs(u128, u5, 1 << 4); - try testArgs(i256, u5, 0); - try testArgs(i256, u5, 1 << 0); - try testArgs(i256, u5, 1 << 4); try testArgs(u256, u5, 0); try testArgs(u256, u5, 1 << 0); try testArgs(u256, u5, 1 << 4); - try testArgs(i512, u5, 0); - try testArgs(i512, u5, 1 << 0); - try testArgs(i512, u5, 1 << 4); try testArgs(u512, u5, 0); try testArgs(u512, u5, 1 << 0); try testArgs(u512, u5, 1 << 4); - try testArgs(i1024, u5, 0); - try testArgs(i1024, u5, 1 << 0); - try testArgs(i1024, u5, 1 << 4); try testArgs(u1024, u5, 0); try testArgs(u1024, u5, 1 << 0); try testArgs(u1024, u5, 1 << 4); @@ -2137,96 +1913,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i7, -1 << 6); try testArgs(i8, i7, -1); try testArgs(i8, i7, 0); - try testArgs(u8, i7, -1 << 6); - try testArgs(u8, i7, -1); - try testArgs(u8, i7, 0); try testArgs(i16, i7, -1 << 6); try testArgs(i16, i7, -1); try testArgs(i16, i7, 0); - try testArgs(u16, i7, -1 << 6); - try testArgs(u16, i7, -1); - try testArgs(u16, i7, 0); try testArgs(i32, i7, -1 << 6); try testArgs(i32, i7, -1); try testArgs(i32, i7, 0); - try testArgs(u32, i7, -1 << 6); - try testArgs(u32, i7, -1); - try testArgs(u32, i7, 0); try testArgs(i64, i7, -1 << 6); try testArgs(i64, i7, -1); try testArgs(i64, i7, 0); - try testArgs(u64, i7, -1 << 6); - try testArgs(u64, i7, -1); - try testArgs(u64, i7, 0); try testArgs(i128, i7, -1 << 6); try testArgs(i128, i7, -1); try testArgs(i128, i7, 0); - try testArgs(u128, i7, -1 << 6); - try testArgs(u128, i7, -1); - try testArgs(u128, i7, 0); try testArgs(i256, i7, -1 << 6); try testArgs(i256, i7, -1); try testArgs(i256, i7, 0); - try testArgs(u256, i7, -1 << 6); - try testArgs(u256, i7, -1); - try testArgs(u256, i7, 0); try testArgs(i512, i7, -1 << 6); try testArgs(i512, i7, -1); try testArgs(i512, i7, 0); - try testArgs(u512, i7, -1 << 6); - try testArgs(u512, i7, -1); - try testArgs(u512, i7, 0); try testArgs(i1024, i7, -1 << 6); try testArgs(i1024, i7, -1); try testArgs(i1024, i7, 0); - try testArgs(u1024, i7, -1 << 6); - try testArgs(u1024, i7, -1); - try testArgs(u1024, i7, 0); - try testArgs(i8, u7, 0); - try testArgs(i8, u7, 1 << 0); - try testArgs(i8, u7, 1 << 6); try testArgs(u8, u7, 0); try testArgs(u8, u7, 1 << 0); try testArgs(u8, u7, 1 << 6); - try testArgs(i16, u7, 0); - try testArgs(i16, u7, 1 << 0); - try testArgs(i16, u7, 1 << 6); try testArgs(u16, u7, 0); try testArgs(u16, u7, 1 << 0); try testArgs(u16, u7, 1 << 6); - try testArgs(i32, u7, 0); - try testArgs(i32, u7, 1 << 0); - try testArgs(i32, u7, 1 << 6); try testArgs(u32, u7, 0); try testArgs(u32, u7, 1 << 0); try testArgs(u32, u7, 1 << 6); - try testArgs(i64, u7, 0); - try testArgs(i64, u7, 1 << 0); - try testArgs(i64, u7, 1 << 6); try testArgs(u64, u7, 0); try testArgs(u64, u7, 1 << 0); try testArgs(u64, u7, 1 << 6); - try testArgs(i128, u7, 0); - try testArgs(i128, u7, 1 << 0); - try testArgs(i128, u7, 1 << 6); try testArgs(u128, u7, 0); try testArgs(u128, u7, 1 << 0); try testArgs(u128, u7, 1 << 6); - try testArgs(i256, u7, 0); - try testArgs(i256, u7, 1 << 0); - try testArgs(i256, u7, 1 << 6); try testArgs(u256, u7, 0); try testArgs(u256, u7, 1 << 0); try testArgs(u256, u7, 1 << 6); - try testArgs(i512, u7, 0); - try testArgs(i512, u7, 1 << 0); - try testArgs(i512, u7, 1 << 6); try testArgs(u512, u7, 0); try testArgs(u512, u7, 1 << 0); try testArgs(u512, u7, 1 << 6); - try testArgs(i1024, u7, 0); - try testArgs(i1024, u7, 1 << 0); - try testArgs(i1024, u7, 1 << 6); try testArgs(u1024, u7, 0); try testArgs(u1024, u7, 1 << 0); try testArgs(u1024, u7, 1 << 6); @@ -2234,96 +1962,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i8, -1 << 7); try testArgs(i8, i8, -1); try testArgs(i8, i8, 0); - try testArgs(u8, i8, -1 << 7); - try testArgs(u8, i8, -1); - try testArgs(u8, i8, 0); try testArgs(i16, i8, -1 << 7); try testArgs(i16, i8, -1); try testArgs(i16, i8, 0); - try testArgs(u16, i8, -1 << 7); - try testArgs(u16, i8, -1); - try testArgs(u16, i8, 0); try testArgs(i32, i8, -1 << 7); try testArgs(i32, i8, -1); try testArgs(i32, i8, 0); - try testArgs(u32, i8, -1 << 7); - try testArgs(u32, i8, -1); - try testArgs(u32, i8, 0); try testArgs(i64, i8, -1 << 7); try testArgs(i64, i8, -1); try testArgs(i64, i8, 0); - try testArgs(u64, i8, -1 << 7); - try testArgs(u64, i8, -1); - try testArgs(u64, i8, 0); try testArgs(i128, i8, -1 << 7); try testArgs(i128, i8, -1); try testArgs(i128, i8, 0); - try testArgs(u128, i8, -1 << 7); - try testArgs(u128, i8, -1); - try testArgs(u128, i8, 0); try testArgs(i256, i8, -1 << 7); try testArgs(i256, i8, -1); try testArgs(i256, i8, 0); - try testArgs(u256, i8, -1 << 7); - try testArgs(u256, i8, -1); - try testArgs(u256, i8, 0); try testArgs(i512, i8, -1 << 7); try testArgs(i512, i8, -1); try testArgs(i512, i8, 0); - try testArgs(u512, i8, -1 << 7); - try testArgs(u512, i8, -1); - try testArgs(u512, i8, 0); try testArgs(i1024, i8, -1 << 7); try testArgs(i1024, i8, -1); try testArgs(i1024, i8, 0); - try testArgs(u1024, i8, -1 << 7); - try testArgs(u1024, i8, -1); - try testArgs(u1024, i8, 0); - try testArgs(i8, u8, 0); - try testArgs(i8, u8, 1 << 0); - try testArgs(i8, u8, 1 << 7); try testArgs(u8, u8, 0); try testArgs(u8, u8, 1 << 0); try testArgs(u8, u8, 1 << 7); - try testArgs(i16, u8, 0); - try testArgs(i16, u8, 1 << 0); - try testArgs(i16, u8, 1 << 7); try testArgs(u16, u8, 0); try testArgs(u16, u8, 1 << 0); try testArgs(u16, u8, 1 << 7); - try testArgs(i32, u8, 0); - try testArgs(i32, u8, 1 << 0); - try testArgs(i32, u8, 1 << 7); try testArgs(u32, u8, 0); try testArgs(u32, u8, 1 << 0); try testArgs(u32, u8, 1 << 7); - try testArgs(i64, u8, 0); - try testArgs(i64, u8, 1 << 0); - try testArgs(i64, u8, 1 << 7); try testArgs(u64, u8, 0); try testArgs(u64, u8, 1 << 0); try testArgs(u64, u8, 1 << 7); - try testArgs(i128, u8, 0); - try testArgs(i128, u8, 1 << 0); - try testArgs(i128, u8, 1 << 7); try testArgs(u128, u8, 0); try testArgs(u128, u8, 1 << 0); try testArgs(u128, u8, 1 << 7); - try testArgs(i256, u8, 0); - try testArgs(i256, u8, 1 << 0); - try testArgs(i256, u8, 1 << 7); try testArgs(u256, u8, 0); try testArgs(u256, u8, 1 << 0); try testArgs(u256, u8, 1 << 7); - try testArgs(i512, u8, 0); - try testArgs(i512, u8, 1 << 0); - try testArgs(i512, u8, 1 << 7); try testArgs(u512, u8, 0); try testArgs(u512, u8, 1 << 0); try testArgs(u512, u8, 1 << 7); - try testArgs(i1024, u8, 0); - try testArgs(i1024, u8, 1 << 0); - try testArgs(i1024, u8, 1 << 7); try testArgs(u1024, u8, 0); try testArgs(u1024, u8, 1 << 0); try testArgs(u1024, u8, 1 << 7); @@ -2331,96 +2011,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i9, -1 << 8); try testArgs(i8, i9, -1); try testArgs(i8, i9, 0); - try testArgs(u8, i9, -1 << 8); - try testArgs(u8, i9, -1); - try testArgs(u8, i9, 0); try testArgs(i16, i9, -1 << 8); try testArgs(i16, i9, -1); try testArgs(i16, i9, 0); - try testArgs(u16, i9, -1 << 8); - try testArgs(u16, i9, -1); - try testArgs(u16, i9, 0); try testArgs(i32, i9, -1 << 8); try testArgs(i32, i9, -1); try testArgs(i32, i9, 0); - try testArgs(u32, i9, -1 << 8); - try testArgs(u32, i9, -1); - try testArgs(u32, i9, 0); try testArgs(i64, i9, -1 << 8); try testArgs(i64, i9, -1); try testArgs(i64, i9, 0); - try testArgs(u64, i9, -1 << 8); - try testArgs(u64, i9, -1); - try testArgs(u64, i9, 0); try testArgs(i128, i9, -1 << 8); try testArgs(i128, i9, -1); try testArgs(i128, i9, 0); - try testArgs(u128, i9, -1 << 8); - try testArgs(u128, i9, -1); - try testArgs(u128, i9, 0); try testArgs(i256, i9, -1 << 8); try testArgs(i256, i9, -1); try testArgs(i256, i9, 0); - try testArgs(u256, i9, -1 << 8); - try testArgs(u256, i9, -1); - try testArgs(u256, i9, 0); try testArgs(i512, i9, -1 << 8); try testArgs(i512, i9, -1); try testArgs(i512, i9, 0); - try testArgs(u512, i9, -1 << 8); - try testArgs(u512, i9, -1); - try testArgs(u512, i9, 0); try testArgs(i1024, i9, -1 << 8); try testArgs(i1024, i9, -1); try testArgs(i1024, i9, 0); - try testArgs(u1024, i9, -1 << 8); - try testArgs(u1024, i9, -1); - try testArgs(u1024, i9, 0); - try testArgs(i8, u9, 0); - try testArgs(i8, u9, 1 << 0); - try testArgs(i8, u9, 1 << 8); try testArgs(u8, u9, 0); try testArgs(u8, u9, 1 << 0); try testArgs(u8, u9, 1 << 8); - try testArgs(i16, u9, 0); - try testArgs(i16, u9, 1 << 0); - try testArgs(i16, u9, 1 << 8); try testArgs(u16, u9, 0); try testArgs(u16, u9, 1 << 0); try testArgs(u16, u9, 1 << 8); - try testArgs(i32, u9, 0); - try testArgs(i32, u9, 1 << 0); - try testArgs(i32, u9, 1 << 8); try testArgs(u32, u9, 0); try testArgs(u32, u9, 1 << 0); try testArgs(u32, u9, 1 << 8); - try testArgs(i64, u9, 0); - try testArgs(i64, u9, 1 << 0); - try testArgs(i64, u9, 1 << 8); try testArgs(u64, u9, 0); try testArgs(u64, u9, 1 << 0); try testArgs(u64, u9, 1 << 8); - try testArgs(i128, u9, 0); - try testArgs(i128, u9, 1 << 0); - try testArgs(i128, u9, 1 << 8); try testArgs(u128, u9, 0); try testArgs(u128, u9, 1 << 0); try testArgs(u128, u9, 1 << 8); - try testArgs(i256, u9, 0); - try testArgs(i256, u9, 1 << 0); - try testArgs(i256, u9, 1 << 8); try testArgs(u256, u9, 0); try testArgs(u256, u9, 1 << 0); try testArgs(u256, u9, 1 << 8); - try testArgs(i512, u9, 0); - try testArgs(i512, u9, 1 << 0); - try testArgs(i512, u9, 1 << 8); try testArgs(u512, u9, 0); try testArgs(u512, u9, 1 << 0); try testArgs(u512, u9, 1 << 8); - try testArgs(i1024, u9, 0); - try testArgs(i1024, u9, 1 << 0); - try testArgs(i1024, u9, 1 << 8); try testArgs(u1024, u9, 0); try testArgs(u1024, u9, 1 << 0); try testArgs(u1024, u9, 1 << 8); @@ -2428,96 +2060,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i15, -1 << 14); try testArgs(i8, i15, -1); try testArgs(i8, i15, 0); - try testArgs(u8, i15, -1 << 14); - try testArgs(u8, i15, -1); - try testArgs(u8, i15, 0); try testArgs(i16, i15, -1 << 14); try testArgs(i16, i15, -1); try testArgs(i16, i15, 0); - try testArgs(u16, i15, -1 << 14); - try testArgs(u16, i15, -1); - try testArgs(u16, i15, 0); try testArgs(i32, i15, -1 << 14); try testArgs(i32, i15, -1); try testArgs(i32, i15, 0); - try testArgs(u32, i15, -1 << 14); - try testArgs(u32, i15, -1); - try testArgs(u32, i15, 0); try testArgs(i64, i15, -1 << 14); try testArgs(i64, i15, -1); try testArgs(i64, i15, 0); - try testArgs(u64, i15, -1 << 14); - try testArgs(u64, i15, -1); - try testArgs(u64, i15, 0); try testArgs(i128, i15, -1 << 14); try testArgs(i128, i15, -1); try testArgs(i128, i15, 0); - try testArgs(u128, i15, -1 << 14); - try testArgs(u128, i15, -1); - try testArgs(u128, i15, 0); try testArgs(i256, i15, -1 << 14); try testArgs(i256, i15, -1); try testArgs(i256, i15, 0); - try testArgs(u256, i15, -1 << 14); - try testArgs(u256, i15, -1); - try testArgs(u256, i15, 0); try testArgs(i512, i15, -1 << 14); try testArgs(i512, i15, -1); try testArgs(i512, i15, 0); - try testArgs(u512, i15, -1 << 14); - try testArgs(u512, i15, -1); - try testArgs(u512, i15, 0); try testArgs(i1024, i15, -1 << 14); try testArgs(i1024, i15, -1); try testArgs(i1024, i15, 0); - try testArgs(u1024, i15, -1 << 14); - try testArgs(u1024, i15, -1); - try testArgs(u1024, i15, 0); - try testArgs(i8, u15, 0); - try testArgs(i8, u15, 1 << 0); - try testArgs(i8, u15, 1 << 14); try testArgs(u8, u15, 0); try testArgs(u8, u15, 1 << 0); try testArgs(u8, u15, 1 << 14); - try testArgs(i16, u15, 0); - try testArgs(i16, u15, 1 << 0); - try testArgs(i16, u15, 1 << 14); try testArgs(u16, u15, 0); try testArgs(u16, u15, 1 << 0); try testArgs(u16, u15, 1 << 14); - try testArgs(i32, u15, 0); - try testArgs(i32, u15, 1 << 0); - try testArgs(i32, u15, 1 << 14); try testArgs(u32, u15, 0); try testArgs(u32, u15, 1 << 0); try testArgs(u32, u15, 1 << 14); - try testArgs(i64, u15, 0); - try testArgs(i64, u15, 1 << 0); - try testArgs(i64, u15, 1 << 14); try testArgs(u64, u15, 0); try testArgs(u64, u15, 1 << 0); try testArgs(u64, u15, 1 << 14); - try testArgs(i128, u15, 0); - try testArgs(i128, u15, 1 << 0); - try testArgs(i128, u15, 1 << 14); try testArgs(u128, u15, 0); try testArgs(u128, u15, 1 << 0); try testArgs(u128, u15, 1 << 14); - try testArgs(i256, u15, 0); - try testArgs(i256, u15, 1 << 0); - try testArgs(i256, u15, 1 << 14); try testArgs(u256, u15, 0); try testArgs(u256, u15, 1 << 0); try testArgs(u256, u15, 1 << 14); - try testArgs(i512, u15, 0); - try testArgs(i512, u15, 1 << 0); - try testArgs(i512, u15, 1 << 14); try testArgs(u512, u15, 0); try testArgs(u512, u15, 1 << 0); try testArgs(u512, u15, 1 << 14); - try testArgs(i1024, u15, 0); - try testArgs(i1024, u15, 1 << 0); - try testArgs(i1024, u15, 1 << 14); try testArgs(u1024, u15, 0); try testArgs(u1024, u15, 1 << 0); try testArgs(u1024, u15, 1 << 14); @@ -2525,96 +2109,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i16, -1 << 15); try testArgs(i8, i16, -1); try testArgs(i8, i16, 0); - try testArgs(u8, i16, -1 << 15); - try testArgs(u8, i16, -1); - try testArgs(u8, i16, 0); try testArgs(i16, i16, -1 << 15); try testArgs(i16, i16, -1); try testArgs(i16, i16, 0); - try testArgs(u16, i16, -1 << 15); - try testArgs(u16, i16, -1); - try testArgs(u16, i16, 0); try testArgs(i32, i16, -1 << 15); try testArgs(i32, i16, -1); try testArgs(i32, i16, 0); - try testArgs(u32, i16, -1 << 15); - try testArgs(u32, i16, -1); - try testArgs(u32, i16, 0); try testArgs(i64, i16, -1 << 15); try testArgs(i64, i16, -1); try testArgs(i64, i16, 0); - try testArgs(u64, i16, -1 << 15); - try testArgs(u64, i16, -1); - try testArgs(u64, i16, 0); try testArgs(i128, i16, -1 << 15); try testArgs(i128, i16, -1); try testArgs(i128, i16, 0); - try testArgs(u128, i16, -1 << 15); - try testArgs(u128, i16, -1); - try testArgs(u128, i16, 0); try testArgs(i256, i16, -1 << 15); try testArgs(i256, i16, -1); try testArgs(i256, i16, 0); - try testArgs(u256, i16, -1 << 15); - try testArgs(u256, i16, -1); - try testArgs(u256, i16, 0); try testArgs(i512, i16, -1 << 15); try testArgs(i512, i16, -1); try testArgs(i512, i16, 0); - try testArgs(u512, i16, -1 << 15); - try testArgs(u512, i16, -1); - try testArgs(u512, i16, 0); try testArgs(i1024, i16, -1 << 15); try testArgs(i1024, i16, -1); try testArgs(i1024, i16, 0); - try testArgs(u1024, i16, -1 << 15); - try testArgs(u1024, i16, -1); - try testArgs(u1024, i16, 0); - try testArgs(i8, u16, 0); - try testArgs(i8, u16, 1 << 0); - try testArgs(i8, u16, 1 << 15); try testArgs(u8, u16, 0); try testArgs(u8, u16, 1 << 0); try testArgs(u8, u16, 1 << 15); - try testArgs(i16, u16, 0); - try testArgs(i16, u16, 1 << 0); - try testArgs(i16, u16, 1 << 15); try testArgs(u16, u16, 0); try testArgs(u16, u16, 1 << 0); try testArgs(u16, u16, 1 << 15); - try testArgs(i32, u16, 0); - try testArgs(i32, u16, 1 << 0); - try testArgs(i32, u16, 1 << 15); try testArgs(u32, u16, 0); try testArgs(u32, u16, 1 << 0); try testArgs(u32, u16, 1 << 15); - try testArgs(i64, u16, 0); - try testArgs(i64, u16, 1 << 0); - try testArgs(i64, u16, 1 << 15); try testArgs(u64, u16, 0); try testArgs(u64, u16, 1 << 0); try testArgs(u64, u16, 1 << 15); - try testArgs(i128, u16, 0); - try testArgs(i128, u16, 1 << 0); - try testArgs(i128, u16, 1 << 15); try testArgs(u128, u16, 0); try testArgs(u128, u16, 1 << 0); try testArgs(u128, u16, 1 << 15); - try testArgs(i256, u16, 0); - try testArgs(i256, u16, 1 << 0); - try testArgs(i256, u16, 1 << 15); try testArgs(u256, u16, 0); try testArgs(u256, u16, 1 << 0); try testArgs(u256, u16, 1 << 15); - try testArgs(i512, u16, 0); - try testArgs(i512, u16, 1 << 0); - try testArgs(i512, u16, 1 << 15); try testArgs(u512, u16, 0); try testArgs(u512, u16, 1 << 0); try testArgs(u512, u16, 1 << 15); - try testArgs(i1024, u16, 0); - try testArgs(i1024, u16, 1 << 0); - try testArgs(i1024, u16, 1 << 15); try testArgs(u1024, u16, 0); try testArgs(u1024, u16, 1 << 0); try testArgs(u1024, u16, 1 << 15); @@ -2622,96 +2158,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i17, -1 << 16); try testArgs(i8, i17, -1); try testArgs(i8, i17, 0); - try testArgs(u8, i17, -1 << 16); - try testArgs(u8, i17, -1); - try testArgs(u8, i17, 0); try testArgs(i16, i17, -1 << 16); try testArgs(i16, i17, -1); try testArgs(i16, i17, 0); - try testArgs(u16, i17, -1 << 16); - try testArgs(u16, i17, -1); - try testArgs(u16, i17, 0); try testArgs(i32, i17, -1 << 16); try testArgs(i32, i17, -1); try testArgs(i32, i17, 0); - try testArgs(u32, i17, -1 << 16); - try testArgs(u32, i17, -1); - try testArgs(u32, i17, 0); try testArgs(i64, i17, -1 << 16); try testArgs(i64, i17, -1); try testArgs(i64, i17, 0); - try testArgs(u64, i17, -1 << 16); - try testArgs(u64, i17, -1); - try testArgs(u64, i17, 0); try testArgs(i128, i17, -1 << 16); try testArgs(i128, i17, -1); try testArgs(i128, i17, 0); - try testArgs(u128, i17, -1 << 16); - try testArgs(u128, i17, -1); - try testArgs(u128, i17, 0); try testArgs(i256, i17, -1 << 16); try testArgs(i256, i17, -1); try testArgs(i256, i17, 0); - try testArgs(u256, i17, -1 << 16); - try testArgs(u256, i17, -1); - try testArgs(u256, i17, 0); try testArgs(i512, i17, -1 << 16); try testArgs(i512, i17, -1); try testArgs(i512, i17, 0); - try testArgs(u512, i17, -1 << 16); - try testArgs(u512, i17, -1); - try testArgs(u512, i17, 0); try testArgs(i1024, i17, -1 << 16); try testArgs(i1024, i17, -1); try testArgs(i1024, i17, 0); - try testArgs(u1024, i17, -1 << 16); - try testArgs(u1024, i17, -1); - try testArgs(u1024, i17, 0); - try testArgs(i8, u17, 0); - try testArgs(i8, u17, 1 << 0); - try testArgs(i8, u17, 1 << 16); try testArgs(u8, u17, 0); try testArgs(u8, u17, 1 << 0); try testArgs(u8, u17, 1 << 16); - try testArgs(i16, u17, 0); - try testArgs(i16, u17, 1 << 0); - try testArgs(i16, u17, 1 << 16); try testArgs(u16, u17, 0); try testArgs(u16, u17, 1 << 0); try testArgs(u16, u17, 1 << 16); - try testArgs(i32, u17, 0); - try testArgs(i32, u17, 1 << 0); - try testArgs(i32, u17, 1 << 16); try testArgs(u32, u17, 0); try testArgs(u32, u17, 1 << 0); try testArgs(u32, u17, 1 << 16); - try testArgs(i64, u17, 0); - try testArgs(i64, u17, 1 << 0); - try testArgs(i64, u17, 1 << 16); try testArgs(u64, u17, 0); try testArgs(u64, u17, 1 << 0); try testArgs(u64, u17, 1 << 16); - try testArgs(i128, u17, 0); - try testArgs(i128, u17, 1 << 0); - try testArgs(i128, u17, 1 << 16); try testArgs(u128, u17, 0); try testArgs(u128, u17, 1 << 0); try testArgs(u128, u17, 1 << 16); - try testArgs(i256, u17, 0); - try testArgs(i256, u17, 1 << 0); - try testArgs(i256, u17, 1 << 16); try testArgs(u256, u17, 0); try testArgs(u256, u17, 1 << 0); try testArgs(u256, u17, 1 << 16); - try testArgs(i512, u17, 0); - try testArgs(i512, u17, 1 << 0); - try testArgs(i512, u17, 1 << 16); try testArgs(u512, u17, 0); try testArgs(u512, u17, 1 << 0); try testArgs(u512, u17, 1 << 16); - try testArgs(i1024, u17, 0); - try testArgs(i1024, u17, 1 << 0); - try testArgs(i1024, u17, 1 << 16); try testArgs(u1024, u17, 0); try testArgs(u1024, u17, 1 << 0); try testArgs(u1024, u17, 1 << 16); @@ -2719,96 +2207,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i31, -1 << 30); try testArgs(i8, i31, -1); try testArgs(i8, i31, 0); - try testArgs(u8, i31, -1 << 30); - try testArgs(u8, i31, -1); - try testArgs(u8, i31, 0); try testArgs(i16, i31, -1 << 30); try testArgs(i16, i31, -1); try testArgs(i16, i31, 0); - try testArgs(u16, i31, -1 << 30); - try testArgs(u16, i31, -1); - try testArgs(u16, i31, 0); try testArgs(i32, i31, -1 << 30); try testArgs(i32, i31, -1); try testArgs(i32, i31, 0); - try testArgs(u32, i31, -1 << 30); - try testArgs(u32, i31, -1); - try testArgs(u32, i31, 0); try testArgs(i64, i31, -1 << 30); try testArgs(i64, i31, -1); try testArgs(i64, i31, 0); - try testArgs(u64, i31, -1 << 30); - try testArgs(u64, i31, -1); - try testArgs(u64, i31, 0); try testArgs(i128, i31, -1 << 30); try testArgs(i128, i31, -1); try testArgs(i128, i31, 0); - try testArgs(u128, i31, -1 << 30); - try testArgs(u128, i31, -1); - try testArgs(u128, i31, 0); try testArgs(i256, i31, -1 << 30); try testArgs(i256, i31, -1); try testArgs(i256, i31, 0); - try testArgs(u256, i31, -1 << 30); - try testArgs(u256, i31, -1); - try testArgs(u256, i31, 0); try testArgs(i512, i31, -1 << 30); try testArgs(i512, i31, -1); try testArgs(i512, i31, 0); - try testArgs(u512, i31, -1 << 30); - try testArgs(u512, i31, -1); - try testArgs(u512, i31, 0); try testArgs(i1024, i31, -1 << 30); try testArgs(i1024, i31, -1); try testArgs(i1024, i31, 0); - try testArgs(u1024, i31, -1 << 30); - try testArgs(u1024, i31, -1); - try testArgs(u1024, i31, 0); - try testArgs(i8, u31, 0); - try testArgs(i8, u31, 1 << 0); - try testArgs(i8, u31, 1 << 30); try testArgs(u8, u31, 0); try testArgs(u8, u31, 1 << 0); try testArgs(u8, u31, 1 << 30); - try testArgs(i16, u31, 0); - try testArgs(i16, u31, 1 << 0); - try testArgs(i16, u31, 1 << 30); try testArgs(u16, u31, 0); try testArgs(u16, u31, 1 << 0); try testArgs(u16, u31, 1 << 30); - try testArgs(i32, u31, 0); - try testArgs(i32, u31, 1 << 0); - try testArgs(i32, u31, 1 << 30); try testArgs(u32, u31, 0); try testArgs(u32, u31, 1 << 0); try testArgs(u32, u31, 1 << 30); - try testArgs(i64, u31, 0); - try testArgs(i64, u31, 1 << 0); - try testArgs(i64, u31, 1 << 30); try testArgs(u64, u31, 0); try testArgs(u64, u31, 1 << 0); try testArgs(u64, u31, 1 << 30); - try testArgs(i128, u31, 0); - try testArgs(i128, u31, 1 << 0); - try testArgs(i128, u31, 1 << 30); try testArgs(u128, u31, 0); try testArgs(u128, u31, 1 << 0); try testArgs(u128, u31, 1 << 30); - try testArgs(i256, u31, 0); - try testArgs(i256, u31, 1 << 0); - try testArgs(i256, u31, 1 << 30); try testArgs(u256, u31, 0); try testArgs(u256, u31, 1 << 0); try testArgs(u256, u31, 1 << 30); - try testArgs(i512, u31, 0); - try testArgs(i512, u31, 1 << 0); - try testArgs(i512, u31, 1 << 30); try testArgs(u512, u31, 0); try testArgs(u512, u31, 1 << 0); try testArgs(u512, u31, 1 << 30); - try testArgs(i1024, u31, 0); - try testArgs(i1024, u31, 1 << 0); - try testArgs(i1024, u31, 1 << 30); try testArgs(u1024, u31, 0); try testArgs(u1024, u31, 1 << 0); try testArgs(u1024, u31, 1 << 30); @@ -2816,96 +2256,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i32, -1 << 31); try testArgs(i8, i32, -1); try testArgs(i8, i32, 0); - try testArgs(u8, i32, -1 << 31); - try testArgs(u8, i32, -1); - try testArgs(u8, i32, 0); try testArgs(i16, i32, -1 << 31); try testArgs(i16, i32, -1); try testArgs(i16, i32, 0); - try testArgs(u16, i32, -1 << 31); - try testArgs(u16, i32, -1); - try testArgs(u16, i32, 0); try testArgs(i32, i32, -1 << 31); try testArgs(i32, i32, -1); try testArgs(i32, i32, 0); - try testArgs(u32, i32, -1 << 31); - try testArgs(u32, i32, -1); - try testArgs(u32, i32, 0); try testArgs(i64, i32, -1 << 31); try testArgs(i64, i32, -1); try testArgs(i64, i32, 0); - try testArgs(u64, i32, -1 << 31); - try testArgs(u64, i32, -1); - try testArgs(u64, i32, 0); try testArgs(i128, i32, -1 << 31); try testArgs(i128, i32, -1); try testArgs(i128, i32, 0); - try testArgs(u128, i32, -1 << 31); - try testArgs(u128, i32, -1); - try testArgs(u128, i32, 0); try testArgs(i256, i32, -1 << 31); try testArgs(i256, i32, -1); try testArgs(i256, i32, 0); - try testArgs(u256, i32, -1 << 31); - try testArgs(u256, i32, -1); - try testArgs(u256, i32, 0); try testArgs(i512, i32, -1 << 31); try testArgs(i512, i32, -1); try testArgs(i512, i32, 0); - try testArgs(u512, i32, -1 << 31); - try testArgs(u512, i32, -1); - try testArgs(u512, i32, 0); try testArgs(i1024, i32, -1 << 31); try testArgs(i1024, i32, -1); try testArgs(i1024, i32, 0); - try testArgs(u1024, i32, -1 << 31); - try testArgs(u1024, i32, -1); - try testArgs(u1024, i32, 0); - try testArgs(i8, u32, 0); - try testArgs(i8, u32, 1 << 0); - try testArgs(i8, u32, 1 << 31); try testArgs(u8, u32, 0); try testArgs(u8, u32, 1 << 0); try testArgs(u8, u32, 1 << 31); - try testArgs(i16, u32, 0); - try testArgs(i16, u32, 1 << 0); - try testArgs(i16, u32, 1 << 31); try testArgs(u16, u32, 0); try testArgs(u16, u32, 1 << 0); try testArgs(u16, u32, 1 << 31); - try testArgs(i32, u32, 0); - try testArgs(i32, u32, 1 << 0); - try testArgs(i32, u32, 1 << 31); try testArgs(u32, u32, 0); try testArgs(u32, u32, 1 << 0); try testArgs(u32, u32, 1 << 31); - try testArgs(i64, u32, 0); - try testArgs(i64, u32, 1 << 0); - try testArgs(i64, u32, 1 << 31); try testArgs(u64, u32, 0); try testArgs(u64, u32, 1 << 0); try testArgs(u64, u32, 1 << 31); - try testArgs(i128, u32, 0); - try testArgs(i128, u32, 1 << 0); - try testArgs(i128, u32, 1 << 31); try testArgs(u128, u32, 0); try testArgs(u128, u32, 1 << 0); try testArgs(u128, u32, 1 << 31); - try testArgs(i256, u32, 0); - try testArgs(i256, u32, 1 << 0); - try testArgs(i256, u32, 1 << 31); try testArgs(u256, u32, 0); try testArgs(u256, u32, 1 << 0); try testArgs(u256, u32, 1 << 31); - try testArgs(i512, u32, 0); - try testArgs(i512, u32, 1 << 0); - try testArgs(i512, u32, 1 << 31); try testArgs(u512, u32, 0); try testArgs(u512, u32, 1 << 0); try testArgs(u512, u32, 1 << 31); - try testArgs(i1024, u32, 0); - try testArgs(i1024, u32, 1 << 0); - try testArgs(i1024, u32, 1 << 31); try testArgs(u1024, u32, 0); try testArgs(u1024, u32, 1 << 0); try testArgs(u1024, u32, 1 << 31); @@ -2913,96 +2305,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i33, -1 << 32); try testArgs(i8, i33, -1); try testArgs(i8, i33, 0); - try testArgs(u8, i33, -1 << 32); - try testArgs(u8, i33, -1); - try testArgs(u8, i33, 0); try testArgs(i16, i33, -1 << 32); try testArgs(i16, i33, -1); try testArgs(i16, i33, 0); - try testArgs(u16, i33, -1 << 32); - try testArgs(u16, i33, -1); - try testArgs(u16, i33, 0); try testArgs(i32, i33, -1 << 32); try testArgs(i32, i33, -1); try testArgs(i32, i33, 0); - try testArgs(u32, i33, -1 << 32); - try testArgs(u32, i33, -1); - try testArgs(u32, i33, 0); try testArgs(i64, i33, -1 << 32); try testArgs(i64, i33, -1); try testArgs(i64, i33, 0); - try testArgs(u64, i33, -1 << 32); - try testArgs(u64, i33, -1); - try testArgs(u64, i33, 0); try testArgs(i128, i33, -1 << 32); try testArgs(i128, i33, -1); try testArgs(i128, i33, 0); - try testArgs(u128, i33, -1 << 32); - try testArgs(u128, i33, -1); - try testArgs(u128, i33, 0); try testArgs(i256, i33, -1 << 32); try testArgs(i256, i33, -1); try testArgs(i256, i33, 0); - try testArgs(u256, i33, -1 << 32); - try testArgs(u256, i33, -1); - try testArgs(u256, i33, 0); try testArgs(i512, i33, -1 << 32); try testArgs(i512, i33, -1); try testArgs(i512, i33, 0); - try testArgs(u512, i33, -1 << 32); - try testArgs(u512, i33, -1); - try testArgs(u512, i33, 0); try testArgs(i1024, i33, -1 << 32); try testArgs(i1024, i33, -1); try testArgs(i1024, i33, 0); - try testArgs(u1024, i33, -1 << 32); - try testArgs(u1024, i33, -1); - try testArgs(u1024, i33, 0); - try testArgs(i8, u33, 0); - try testArgs(i8, u33, 1 << 0); - try testArgs(i8, u33, 1 << 32); try testArgs(u8, u33, 0); try testArgs(u8, u33, 1 << 0); try testArgs(u8, u33, 1 << 32); - try testArgs(i16, u33, 0); - try testArgs(i16, u33, 1 << 0); - try testArgs(i16, u33, 1 << 32); try testArgs(u16, u33, 0); try testArgs(u16, u33, 1 << 0); try testArgs(u16, u33, 1 << 32); - try testArgs(i32, u33, 0); - try testArgs(i32, u33, 1 << 0); - try testArgs(i32, u33, 1 << 32); try testArgs(u32, u33, 0); try testArgs(u32, u33, 1 << 0); try testArgs(u32, u33, 1 << 32); - try testArgs(i64, u33, 0); - try testArgs(i64, u33, 1 << 0); - try testArgs(i64, u33, 1 << 32); try testArgs(u64, u33, 0); try testArgs(u64, u33, 1 << 0); try testArgs(u64, u33, 1 << 32); - try testArgs(i128, u33, 0); - try testArgs(i128, u33, 1 << 0); - try testArgs(i128, u33, 1 << 32); try testArgs(u128, u33, 0); try testArgs(u128, u33, 1 << 0); try testArgs(u128, u33, 1 << 32); - try testArgs(i256, u33, 0); - try testArgs(i256, u33, 1 << 0); - try testArgs(i256, u33, 1 << 32); try testArgs(u256, u33, 0); try testArgs(u256, u33, 1 << 0); try testArgs(u256, u33, 1 << 32); - try testArgs(i512, u33, 0); - try testArgs(i512, u33, 1 << 0); - try testArgs(i512, u33, 1 << 32); try testArgs(u512, u33, 0); try testArgs(u512, u33, 1 << 0); try testArgs(u512, u33, 1 << 32); - try testArgs(i1024, u33, 0); - try testArgs(i1024, u33, 1 << 0); - try testArgs(i1024, u33, 1 << 32); try testArgs(u1024, u33, 0); try testArgs(u1024, u33, 1 << 0); try testArgs(u1024, u33, 1 << 32); @@ -3010,96 +2354,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i63, -1 << 62); try testArgs(i8, i63, -1); try testArgs(i8, i63, 0); - try testArgs(u8, i63, -1 << 62); - try testArgs(u8, i63, -1); - try testArgs(u8, i63, 0); try testArgs(i16, i63, -1 << 62); try testArgs(i16, i63, -1); try testArgs(i16, i63, 0); - try testArgs(u16, i63, -1 << 62); - try testArgs(u16, i63, -1); - try testArgs(u16, i63, 0); try testArgs(i32, i63, -1 << 62); try testArgs(i32, i63, -1); try testArgs(i32, i63, 0); - try testArgs(u32, i63, -1 << 62); - try testArgs(u32, i63, -1); - try testArgs(u32, i63, 0); try testArgs(i64, i63, -1 << 62); try testArgs(i64, i63, -1); try testArgs(i64, i63, 0); - try testArgs(u64, i63, -1 << 62); - try testArgs(u64, i63, -1); - try testArgs(u64, i63, 0); try testArgs(i128, i63, -1 << 62); try testArgs(i128, i63, -1); try testArgs(i128, i63, 0); - try testArgs(u128, i63, -1 << 62); - try testArgs(u128, i63, -1); - try testArgs(u128, i63, 0); try testArgs(i256, i63, -1 << 62); try testArgs(i256, i63, -1); try testArgs(i256, i63, 0); - try testArgs(u256, i63, -1 << 62); - try testArgs(u256, i63, -1); - try testArgs(u256, i63, 0); try testArgs(i512, i63, -1 << 62); try testArgs(i512, i63, -1); try testArgs(i512, i63, 0); - try testArgs(u512, i63, -1 << 62); - try testArgs(u512, i63, -1); - try testArgs(u512, i63, 0); try testArgs(i1024, i63, -1 << 62); try testArgs(i1024, i63, -1); try testArgs(i1024, i63, 0); - try testArgs(u1024, i63, -1 << 62); - try testArgs(u1024, i63, -1); - try testArgs(u1024, i63, 0); - try testArgs(i8, u63, 0); - try testArgs(i8, u63, 1 << 0); - try testArgs(i8, u63, 1 << 62); try testArgs(u8, u63, 0); try testArgs(u8, u63, 1 << 0); try testArgs(u8, u63, 1 << 62); - try testArgs(i16, u63, 0); - try testArgs(i16, u63, 1 << 0); - try testArgs(i16, u63, 1 << 62); try testArgs(u16, u63, 0); try testArgs(u16, u63, 1 << 0); try testArgs(u16, u63, 1 << 62); - try testArgs(i32, u63, 0); - try testArgs(i32, u63, 1 << 0); - try testArgs(i32, u63, 1 << 62); try testArgs(u32, u63, 0); try testArgs(u32, u63, 1 << 0); try testArgs(u32, u63, 1 << 62); - try testArgs(i64, u63, 0); - try testArgs(i64, u63, 1 << 0); - try testArgs(i64, u63, 1 << 62); try testArgs(u64, u63, 0); try testArgs(u64, u63, 1 << 0); try testArgs(u64, u63, 1 << 62); - try testArgs(i128, u63, 0); - try testArgs(i128, u63, 1 << 0); - try testArgs(i128, u63, 1 << 62); try testArgs(u128, u63, 0); try testArgs(u128, u63, 1 << 0); try testArgs(u128, u63, 1 << 62); - try testArgs(i256, u63, 0); - try testArgs(i256, u63, 1 << 0); - try testArgs(i256, u63, 1 << 62); try testArgs(u256, u63, 0); try testArgs(u256, u63, 1 << 0); try testArgs(u256, u63, 1 << 62); - try testArgs(i512, u63, 0); - try testArgs(i512, u63, 1 << 0); - try testArgs(i512, u63, 1 << 62); try testArgs(u512, u63, 0); try testArgs(u512, u63, 1 << 0); try testArgs(u512, u63, 1 << 62); - try testArgs(i1024, u63, 0); - try testArgs(i1024, u63, 1 << 0); - try testArgs(i1024, u63, 1 << 62); try testArgs(u1024, u63, 0); try testArgs(u1024, u63, 1 << 0); try testArgs(u1024, u63, 1 << 62); @@ -3107,96 +2403,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i64, -1 << 63); try testArgs(i8, i64, -1); try testArgs(i8, i64, 0); - try testArgs(u8, i64, -1 << 63); - try testArgs(u8, i64, -1); - try testArgs(u8, i64, 0); try testArgs(i16, i64, -1 << 63); try testArgs(i16, i64, -1); try testArgs(i16, i64, 0); - try testArgs(u16, i64, -1 << 63); - try testArgs(u16, i64, -1); - try testArgs(u16, i64, 0); try testArgs(i32, i64, -1 << 63); try testArgs(i32, i64, -1); try testArgs(i32, i64, 0); - try testArgs(u32, i64, -1 << 63); - try testArgs(u32, i64, -1); - try testArgs(u32, i64, 0); try testArgs(i64, i64, -1 << 63); try testArgs(i64, i64, -1); try testArgs(i64, i64, 0); - try testArgs(u64, i64, -1 << 63); - try testArgs(u64, i64, -1); - try testArgs(u64, i64, 0); try testArgs(i128, i64, -1 << 63); try testArgs(i128, i64, -1); try testArgs(i128, i64, 0); - try testArgs(u128, i64, -1 << 63); - try testArgs(u128, i64, -1); - try testArgs(u128, i64, 0); try testArgs(i256, i64, -1 << 63); try testArgs(i256, i64, -1); try testArgs(i256, i64, 0); - try testArgs(u256, i64, -1 << 63); - try testArgs(u256, i64, -1); - try testArgs(u256, i64, 0); try testArgs(i512, i64, -1 << 63); try testArgs(i512, i64, -1); try testArgs(i512, i64, 0); - try testArgs(u512, i64, -1 << 63); - try testArgs(u512, i64, -1); - try testArgs(u512, i64, 0); try testArgs(i1024, i64, -1 << 63); try testArgs(i1024, i64, -1); try testArgs(i1024, i64, 0); - try testArgs(u1024, i64, -1 << 63); - try testArgs(u1024, i64, -1); - try testArgs(u1024, i64, 0); - try testArgs(i8, u64, 0); - try testArgs(i8, u64, 1 << 0); - try testArgs(i8, u64, 1 << 63); try testArgs(u8, u64, 0); try testArgs(u8, u64, 1 << 0); try testArgs(u8, u64, 1 << 63); - try testArgs(i16, u64, 0); - try testArgs(i16, u64, 1 << 0); - try testArgs(i16, u64, 1 << 63); try testArgs(u16, u64, 0); try testArgs(u16, u64, 1 << 0); try testArgs(u16, u64, 1 << 63); - try testArgs(i32, u64, 0); - try testArgs(i32, u64, 1 << 0); - try testArgs(i32, u64, 1 << 63); try testArgs(u32, u64, 0); try testArgs(u32, u64, 1 << 0); try testArgs(u32, u64, 1 << 63); - try testArgs(i64, u64, 0); - try testArgs(i64, u64, 1 << 0); - try testArgs(i64, u64, 1 << 63); try testArgs(u64, u64, 0); try testArgs(u64, u64, 1 << 0); try testArgs(u64, u64, 1 << 63); - try testArgs(i128, u64, 0); - try testArgs(i128, u64, 1 << 0); - try testArgs(i128, u64, 1 << 63); try testArgs(u128, u64, 0); try testArgs(u128, u64, 1 << 0); try testArgs(u128, u64, 1 << 63); - try testArgs(i256, u64, 0); - try testArgs(i256, u64, 1 << 0); - try testArgs(i256, u64, 1 << 63); try testArgs(u256, u64, 0); try testArgs(u256, u64, 1 << 0); try testArgs(u256, u64, 1 << 63); - try testArgs(i512, u64, 0); - try testArgs(i512, u64, 1 << 0); - try testArgs(i512, u64, 1 << 63); try testArgs(u512, u64, 0); try testArgs(u512, u64, 1 << 0); try testArgs(u512, u64, 1 << 63); - try testArgs(i1024, u64, 0); - try testArgs(i1024, u64, 1 << 0); - try testArgs(i1024, u64, 1 << 63); try testArgs(u1024, u64, 0); try testArgs(u1024, u64, 1 << 0); try testArgs(u1024, u64, 1 << 63); @@ -3204,96 +2452,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i65, -1 << 64); try testArgs(i8, i65, -1); try testArgs(i8, i65, 0); - try testArgs(u8, i65, -1 << 64); - try testArgs(u8, i65, -1); - try testArgs(u8, i65, 0); try testArgs(i16, i65, -1 << 64); try testArgs(i16, i65, -1); try testArgs(i16, i65, 0); - try testArgs(u16, i65, -1 << 64); - try testArgs(u16, i65, -1); - try testArgs(u16, i65, 0); try testArgs(i32, i65, -1 << 64); try testArgs(i32, i65, -1); try testArgs(i32, i65, 0); - try testArgs(u32, i65, -1 << 64); - try testArgs(u32, i65, -1); - try testArgs(u32, i65, 0); try testArgs(i64, i65, -1 << 64); try testArgs(i64, i65, -1); try testArgs(i64, i65, 0); - try testArgs(u64, i65, -1 << 64); - try testArgs(u64, i65, -1); - try testArgs(u64, i65, 0); try testArgs(i128, i65, -1 << 64); try testArgs(i128, i65, -1); try testArgs(i128, i65, 0); - try testArgs(u128, i65, -1 << 64); - try testArgs(u128, i65, -1); - try testArgs(u128, i65, 0); try testArgs(i256, i65, -1 << 64); try testArgs(i256, i65, -1); try testArgs(i256, i65, 0); - try testArgs(u256, i65, -1 << 64); - try testArgs(u256, i65, -1); - try testArgs(u256, i65, 0); try testArgs(i512, i65, -1 << 64); try testArgs(i512, i65, -1); try testArgs(i512, i65, 0); - try testArgs(u512, i65, -1 << 64); - try testArgs(u512, i65, -1); - try testArgs(u512, i65, 0); try testArgs(i1024, i65, -1 << 64); try testArgs(i1024, i65, -1); try testArgs(i1024, i65, 0); - try testArgs(u1024, i65, -1 << 64); - try testArgs(u1024, i65, -1); - try testArgs(u1024, i65, 0); - try testArgs(i8, u65, 0); - try testArgs(i8, u65, 1 << 0); - try testArgs(i8, u65, 1 << 64); try testArgs(u8, u65, 0); try testArgs(u8, u65, 1 << 0); try testArgs(u8, u65, 1 << 64); - try testArgs(i16, u65, 0); - try testArgs(i16, u65, 1 << 0); - try testArgs(i16, u65, 1 << 64); try testArgs(u16, u65, 0); try testArgs(u16, u65, 1 << 0); try testArgs(u16, u65, 1 << 64); - try testArgs(i32, u65, 0); - try testArgs(i32, u65, 1 << 0); - try testArgs(i32, u65, 1 << 64); try testArgs(u32, u65, 0); try testArgs(u32, u65, 1 << 0); try testArgs(u32, u65, 1 << 64); - try testArgs(i64, u65, 0); - try testArgs(i64, u65, 1 << 0); - try testArgs(i64, u65, 1 << 64); try testArgs(u64, u65, 0); try testArgs(u64, u65, 1 << 0); try testArgs(u64, u65, 1 << 64); - try testArgs(i128, u65, 0); - try testArgs(i128, u65, 1 << 0); - try testArgs(i128, u65, 1 << 64); try testArgs(u128, u65, 0); try testArgs(u128, u65, 1 << 0); try testArgs(u128, u65, 1 << 64); - try testArgs(i256, u65, 0); - try testArgs(i256, u65, 1 << 0); - try testArgs(i256, u65, 1 << 64); try testArgs(u256, u65, 0); try testArgs(u256, u65, 1 << 0); try testArgs(u256, u65, 1 << 64); - try testArgs(i512, u65, 0); - try testArgs(i512, u65, 1 << 0); - try testArgs(i512, u65, 1 << 64); try testArgs(u512, u65, 0); try testArgs(u512, u65, 1 << 0); try testArgs(u512, u65, 1 << 64); - try testArgs(i1024, u65, 0); - try testArgs(i1024, u65, 1 << 0); - try testArgs(i1024, u65, 1 << 64); try testArgs(u1024, u65, 0); try testArgs(u1024, u65, 1 << 0); try testArgs(u1024, u65, 1 << 64); @@ -3301,290 +2501,97 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i95, -1 << 94); try testArgs(i8, i95, -1); try testArgs(i8, i95, 0); - try testArgs(u8, i95, -1 << 94); - try testArgs(u8, i95, -1); - try testArgs(u8, i95, 0); try testArgs(i16, i95, -1 << 94); try testArgs(i16, i95, -1); try testArgs(i16, i95, 0); - try testArgs(u16, i95, -1 << 94); - try testArgs(u16, i95, -1); - try testArgs(u16, i95, 0); try testArgs(i32, i95, -1 << 94); try testArgs(i32, i95, -1); try testArgs(i32, i95, 0); - try testArgs(u32, i95, -1 << 94); - try testArgs(u32, i95, -1); - try testArgs(u32, i95, 0); try testArgs(i64, i95, -1 << 94); try testArgs(i64, i95, -1); try testArgs(i64, i95, 0); - try testArgs(u64, i95, -1 << 94); - try testArgs(u64, i95, -1); - try testArgs(u64, i95, 0); try testArgs(i128, i95, -1 << 94); try testArgs(i128, i95, -1); try testArgs(i128, i95, 0); - try testArgs(u128, i95, -1 << 94); - try testArgs(u128, i95, -1); - try testArgs(u128, i95, 0); try testArgs(i256, i95, -1 << 94); try testArgs(i256, i95, -1); try testArgs(i256, i95, 0); - try testArgs(u256, i95, -1 << 94); - try testArgs(u256, i95, -1); - try testArgs(u256, i95, 0); try testArgs(i512, i95, -1 << 94); try testArgs(i512, i95, -1); try testArgs(i512, i95, 0); - try testArgs(u512, i95, -1 << 94); - try testArgs(u512, i95, -1); - try testArgs(u512, i95, 0); try testArgs(i1024, i95, -1 << 94); try testArgs(i1024, i95, -1); try testArgs(i1024, i95, 0); - try testArgs(u1024, i95, -1 << 94); - try testArgs(u1024, i95, -1); - try testArgs(u1024, i95, 0); - try testArgs(i8, u95, 0); - try testArgs(i8, u95, 1 << 0); - try testArgs(i8, u95, 1 << 94); try testArgs(u8, u95, 0); try testArgs(u8, u95, 1 << 0); try testArgs(u8, u95, 1 << 94); - try testArgs(i16, u95, 0); - try testArgs(i16, u95, 1 << 0); - try testArgs(i16, u95, 1 << 94); try testArgs(u16, u95, 0); try testArgs(u16, u95, 1 << 0); try testArgs(u16, u95, 1 << 94); - try testArgs(i32, u95, 0); - try testArgs(i32, u95, 1 << 0); - try testArgs(i32, u95, 1 << 94); try testArgs(u32, u95, 0); try testArgs(u32, u95, 1 << 0); try testArgs(u32, u95, 1 << 94); - try testArgs(i64, u95, 0); - try testArgs(i64, u95, 1 << 0); - try testArgs(i64, u95, 1 << 94); try testArgs(u64, u95, 0); try testArgs(u64, u95, 1 << 0); try testArgs(u64, u95, 1 << 94); - try testArgs(i128, u95, 0); - try testArgs(i128, u95, 1 << 0); - try testArgs(i128, u95, 1 << 94); try testArgs(u128, u95, 0); try testArgs(u128, u95, 1 << 0); try testArgs(u128, u95, 1 << 94); - try testArgs(i256, u95, 0); - try testArgs(i256, u95, 1 << 0); - try testArgs(i256, u95, 1 << 94); try testArgs(u256, u95, 0); try testArgs(u256, u95, 1 << 0); try testArgs(u256, u95, 1 << 94); - try testArgs(i512, u95, 0); - try testArgs(i512, u95, 1 << 0); - try testArgs(i512, u95, 1 << 94); try testArgs(u512, u95, 0); try testArgs(u512, u95, 1 << 0); try testArgs(u512, u95, 1 << 94); - try testArgs(i1024, u95, 0); - try testArgs(i1024, u95, 1 << 0); - try testArgs(i1024, u95, 1 << 94); try testArgs(u1024, u95, 0); try testArgs(u1024, u95, 1 << 0); try testArgs(u1024, u95, 1 << 94); - try testArgs(i8, i96, -1 << 95); - try testArgs(i8, i96, -1); - try testArgs(i8, i96, 0); - try testArgs(u8, i96, -1 << 95); - try testArgs(u8, i96, -1); - try testArgs(u8, i96, 0); - try testArgs(i16, i96, -1 << 95); - try testArgs(i16, i96, -1); - try testArgs(i16, i96, 0); - try testArgs(u16, i96, -1 << 95); - try testArgs(u16, i96, -1); - try testArgs(u16, i96, 0); - try testArgs(i32, i96, -1 << 95); - try testArgs(i32, i96, -1); - try testArgs(i32, i96, 0); - try testArgs(u32, i96, -1 << 95); - try testArgs(u32, i96, -1); - try testArgs(u32, i96, 0); - try testArgs(i64, i96, -1 << 95); - try testArgs(i64, i96, -1); - try testArgs(i64, i96, 0); - try testArgs(u64, i96, -1 << 95); - try testArgs(u64, i96, -1); - try testArgs(u64, i96, 0); - try testArgs(i128, i96, -1 << 95); - try testArgs(i128, i96, -1); - try testArgs(i128, i96, 0); - try testArgs(u128, i96, -1 << 95); - try testArgs(u128, i96, -1); - try testArgs(u128, i96, 0); - try testArgs(i256, i96, -1 << 95); - try testArgs(i256, i96, -1); - try testArgs(i256, i96, 0); - try testArgs(u256, i96, -1 << 95); - try testArgs(u256, i96, -1); - try testArgs(u256, i96, 0); - try testArgs(i512, i96, -1 << 95); - try testArgs(i512, i96, -1); - try testArgs(i512, i96, 0); - try testArgs(u512, i96, -1 << 95); - try testArgs(u512, i96, -1); - try testArgs(u512, i96, 0); - try testArgs(i1024, i96, -1 << 95); - try testArgs(i1024, i96, -1); - try testArgs(i1024, i96, 0); - try testArgs(u1024, i96, -1 << 95); - try testArgs(u1024, i96, -1); - try testArgs(u1024, i96, 0); - try testArgs(i8, u96, 0); - try testArgs(i8, u96, 1 << 0); - try testArgs(i8, u96, 1 << 95); - try testArgs(u8, u96, 0); - try testArgs(u8, u96, 1 << 0); - try testArgs(u8, u96, 1 << 95); - try testArgs(i16, u96, 0); - try testArgs(i16, u96, 1 << 0); - try testArgs(i16, u96, 1 << 95); - try testArgs(u16, u96, 0); - try testArgs(u16, u96, 1 << 0); - try testArgs(u16, u96, 1 << 95); - try testArgs(i32, u96, 0); - try testArgs(i32, u96, 1 << 0); - try testArgs(i32, u96, 1 << 95); - try testArgs(u32, u96, 0); - try testArgs(u32, u96, 1 << 0); - try testArgs(u32, u96, 1 << 95); - try testArgs(i64, u96, 0); - try testArgs(i64, u96, 1 << 0); - try testArgs(i64, u96, 1 << 95); - try testArgs(u64, u96, 0); - try testArgs(u64, u96, 1 << 0); - try testArgs(u64, u96, 1 << 95); - try testArgs(i128, u96, 0); - try testArgs(i128, u96, 1 << 0); - try testArgs(i128, u96, 1 << 95); - try testArgs(u128, u96, 0); - try testArgs(u128, u96, 1 << 0); - try testArgs(u128, u96, 1 << 95); - try testArgs(i256, u96, 0); - try testArgs(i256, u96, 1 << 0); - try testArgs(i256, u96, 1 << 95); - try testArgs(u256, u96, 0); - try testArgs(u256, u96, 1 << 0); - try testArgs(u256, u96, 1 << 95); - try testArgs(i512, u96, 0); - try testArgs(i512, u96, 1 << 0); - try testArgs(i512, u96, 1 << 95); - try testArgs(u512, u96, 0); - try testArgs(u512, u96, 1 << 0); - try testArgs(u512, u96, 1 << 95); - try testArgs(i1024, u96, 0); - try testArgs(i1024, u96, 1 << 0); - try testArgs(i1024, u96, 1 << 95); - try testArgs(u1024, u96, 0); - try testArgs(u1024, u96, 1 << 0); - try testArgs(u1024, u96, 1 << 95); - try testArgs(i8, i97, -1 << 96); try testArgs(i8, i97, -1); try testArgs(i8, i97, 0); - try testArgs(u8, i97, -1 << 96); - try testArgs(u8, i97, -1); - try testArgs(u8, i97, 0); try testArgs(i16, i97, -1 << 96); try testArgs(i16, i97, -1); try testArgs(i16, i97, 0); - try testArgs(u16, i97, -1 << 96); - try testArgs(u16, i97, -1); - try testArgs(u16, i97, 0); try testArgs(i32, i97, -1 << 96); try testArgs(i32, i97, -1); try testArgs(i32, i97, 0); - try testArgs(u32, i97, -1 << 96); - try testArgs(u32, i97, -1); - try testArgs(u32, i97, 0); try testArgs(i64, i97, -1 << 96); try testArgs(i64, i97, -1); try testArgs(i64, i97, 0); - try testArgs(u64, i97, -1 << 96); - try testArgs(u64, i97, -1); - try testArgs(u64, i97, 0); try testArgs(i128, i97, -1 << 96); try testArgs(i128, i97, -1); try testArgs(i128, i97, 0); - try testArgs(u128, i97, -1 << 96); - try testArgs(u128, i97, -1); - try testArgs(u128, i97, 0); try testArgs(i256, i97, -1 << 96); try testArgs(i256, i97, -1); try testArgs(i256, i97, 0); - try testArgs(u256, i97, -1 << 96); - try testArgs(u256, i97, -1); - try testArgs(u256, i97, 0); try testArgs(i512, i97, -1 << 96); try testArgs(i512, i97, -1); try testArgs(i512, i97, 0); - try testArgs(u512, i97, -1 << 96); - try testArgs(u512, i97, -1); - try testArgs(u512, i97, 0); try testArgs(i1024, i97, -1 << 96); try testArgs(i1024, i97, -1); try testArgs(i1024, i97, 0); - try testArgs(u1024, i97, -1 << 96); - try testArgs(u1024, i97, -1); - try testArgs(u1024, i97, 0); - try testArgs(i8, u97, 0); - try testArgs(i8, u97, 1 << 0); - try testArgs(i8, u97, 1 << 96); try testArgs(u8, u97, 0); try testArgs(u8, u97, 1 << 0); try testArgs(u8, u97, 1 << 96); - try testArgs(i16, u97, 0); - try testArgs(i16, u97, 1 << 0); - try testArgs(i16, u97, 1 << 96); try testArgs(u16, u97, 0); try testArgs(u16, u97, 1 << 0); try testArgs(u16, u97, 1 << 96); - try testArgs(i32, u97, 0); - try testArgs(i32, u97, 1 << 0); - try testArgs(i32, u97, 1 << 96); try testArgs(u32, u97, 0); try testArgs(u32, u97, 1 << 0); try testArgs(u32, u97, 1 << 96); - try testArgs(i64, u97, 0); - try testArgs(i64, u97, 1 << 0); - try testArgs(i64, u97, 1 << 96); try testArgs(u64, u97, 0); try testArgs(u64, u97, 1 << 0); try testArgs(u64, u97, 1 << 96); - try testArgs(i128, u97, 0); - try testArgs(i128, u97, 1 << 0); - try testArgs(i128, u97, 1 << 96); try testArgs(u128, u97, 0); try testArgs(u128, u97, 1 << 0); try testArgs(u128, u97, 1 << 96); - try testArgs(i256, u97, 0); - try testArgs(i256, u97, 1 << 0); - try testArgs(i256, u97, 1 << 96); try testArgs(u256, u97, 0); try testArgs(u256, u97, 1 << 0); try testArgs(u256, u97, 1 << 96); - try testArgs(i512, u97, 0); - try testArgs(i512, u97, 1 << 0); - try testArgs(i512, u97, 1 << 96); try testArgs(u512, u97, 0); try testArgs(u512, u97, 1 << 0); try testArgs(u512, u97, 1 << 96); - try testArgs(i1024, u97, 0); - try testArgs(i1024, u97, 1 << 0); - try testArgs(i1024, u97, 1 << 96); try testArgs(u1024, u97, 0); try testArgs(u1024, u97, 1 << 0); try testArgs(u1024, u97, 1 << 96); @@ -3592,96 +2599,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i127, -1 << 126); try testArgs(i8, i127, -1); try testArgs(i8, i127, 0); - try testArgs(u8, i127, -1 << 126); - try testArgs(u8, i127, -1); - try testArgs(u8, i127, 0); try testArgs(i16, i127, -1 << 126); try testArgs(i16, i127, -1); try testArgs(i16, i127, 0); - try testArgs(u16, i127, -1 << 126); - try testArgs(u16, i127, -1); - try testArgs(u16, i127, 0); try testArgs(i32, i127, -1 << 126); try testArgs(i32, i127, -1); try testArgs(i32, i127, 0); - try testArgs(u32, i127, -1 << 126); - try testArgs(u32, i127, -1); - try testArgs(u32, i127, 0); try testArgs(i64, i127, -1 << 126); try testArgs(i64, i127, -1); try testArgs(i64, i127, 0); - try testArgs(u64, i127, -1 << 126); - try testArgs(u64, i127, -1); - try testArgs(u64, i127, 0); try testArgs(i128, i127, -1 << 126); try testArgs(i128, i127, -1); try testArgs(i128, i127, 0); - try testArgs(u128, i127, -1 << 126); - try testArgs(u128, i127, -1); - try testArgs(u128, i127, 0); try testArgs(i256, i127, -1 << 126); try testArgs(i256, i127, -1); try testArgs(i256, i127, 0); - try testArgs(u256, i127, -1 << 126); - try testArgs(u256, i127, -1); - try testArgs(u256, i127, 0); try testArgs(i512, i127, -1 << 126); try testArgs(i512, i127, -1); try testArgs(i512, i127, 0); - try testArgs(u512, i127, -1 << 126); - try testArgs(u512, i127, -1); - try testArgs(u512, i127, 0); try testArgs(i1024, i127, -1 << 126); try testArgs(i1024, i127, -1); try testArgs(i1024, i127, 0); - try testArgs(u1024, i127, -1 << 126); - try testArgs(u1024, i127, -1); - try testArgs(u1024, i127, 0); - try testArgs(i8, u127, 0); - try testArgs(i8, u127, 1 << 0); - try testArgs(i8, u127, 1 << 126); try testArgs(u8, u127, 0); try testArgs(u8, u127, 1 << 0); try testArgs(u8, u127, 1 << 126); - try testArgs(i16, u127, 0); - try testArgs(i16, u127, 1 << 0); - try testArgs(i16, u127, 1 << 126); try testArgs(u16, u127, 0); try testArgs(u16, u127, 1 << 0); try testArgs(u16, u127, 1 << 126); - try testArgs(i32, u127, 0); - try testArgs(i32, u127, 1 << 0); - try testArgs(i32, u127, 1 << 126); try testArgs(u32, u127, 0); try testArgs(u32, u127, 1 << 0); try testArgs(u32, u127, 1 << 126); - try testArgs(i64, u127, 0); - try testArgs(i64, u127, 1 << 0); - try testArgs(i64, u127, 1 << 126); try testArgs(u64, u127, 0); try testArgs(u64, u127, 1 << 0); try testArgs(u64, u127, 1 << 126); - try testArgs(i128, u127, 0); - try testArgs(i128, u127, 1 << 0); - try testArgs(i128, u127, 1 << 126); try testArgs(u128, u127, 0); try testArgs(u128, u127, 1 << 0); try testArgs(u128, u127, 1 << 126); - try testArgs(i256, u127, 0); - try testArgs(i256, u127, 1 << 0); - try testArgs(i256, u127, 1 << 126); try testArgs(u256, u127, 0); try testArgs(u256, u127, 1 << 0); try testArgs(u256, u127, 1 << 126); - try testArgs(i512, u127, 0); - try testArgs(i512, u127, 1 << 0); - try testArgs(i512, u127, 1 << 126); try testArgs(u512, u127, 0); try testArgs(u512, u127, 1 << 0); try testArgs(u512, u127, 1 << 126); - try testArgs(i1024, u127, 0); - try testArgs(i1024, u127, 1 << 0); - try testArgs(i1024, u127, 1 << 126); try testArgs(u1024, u127, 0); try testArgs(u1024, u127, 1 << 0); try testArgs(u1024, u127, 1 << 126); @@ -3689,96 +2648,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i128, -1 << 127); try testArgs(i8, i128, -1); try testArgs(i8, i128, 0); - try testArgs(u8, i128, -1 << 127); - try testArgs(u8, i128, -1); - try testArgs(u8, i128, 0); try testArgs(i16, i128, -1 << 127); try testArgs(i16, i128, -1); try testArgs(i16, i128, 0); - try testArgs(u16, i128, -1 << 127); - try testArgs(u16, i128, -1); - try testArgs(u16, i128, 0); try testArgs(i32, i128, -1 << 127); try testArgs(i32, i128, -1); try testArgs(i32, i128, 0); - try testArgs(u32, i128, -1 << 127); - try testArgs(u32, i128, -1); - try testArgs(u32, i128, 0); try testArgs(i64, i128, -1 << 127); try testArgs(i64, i128, -1); try testArgs(i64, i128, 0); - try testArgs(u64, i128, -1 << 127); - try testArgs(u64, i128, -1); - try testArgs(u64, i128, 0); try testArgs(i128, i128, -1 << 127); try testArgs(i128, i128, -1); try testArgs(i128, i128, 0); - try testArgs(u128, i128, -1 << 127); - try testArgs(u128, i128, -1); - try testArgs(u128, i128, 0); try testArgs(i256, i128, -1 << 127); try testArgs(i256, i128, -1); try testArgs(i256, i128, 0); - try testArgs(u256, i128, -1 << 127); - try testArgs(u256, i128, -1); - try testArgs(u256, i128, 0); try testArgs(i512, i128, -1 << 127); try testArgs(i512, i128, -1); try testArgs(i512, i128, 0); - try testArgs(u512, i128, -1 << 127); - try testArgs(u512, i128, -1); - try testArgs(u512, i128, 0); try testArgs(i1024, i128, -1 << 127); try testArgs(i1024, i128, -1); try testArgs(i1024, i128, 0); - try testArgs(u1024, i128, -1 << 127); - try testArgs(u1024, i128, -1); - try testArgs(u1024, i128, 0); - try testArgs(i8, u128, 0); - try testArgs(i8, u128, 1 << 0); - try testArgs(i8, u128, 1 << 127); try testArgs(u8, u128, 0); try testArgs(u8, u128, 1 << 0); try testArgs(u8, u128, 1 << 127); - try testArgs(i16, u128, 0); - try testArgs(i16, u128, 1 << 0); - try testArgs(i16, u128, 1 << 127); try testArgs(u16, u128, 0); try testArgs(u16, u128, 1 << 0); try testArgs(u16, u128, 1 << 127); - try testArgs(i32, u128, 0); - try testArgs(i32, u128, 1 << 0); - try testArgs(i32, u128, 1 << 127); try testArgs(u32, u128, 0); try testArgs(u32, u128, 1 << 0); try testArgs(u32, u128, 1 << 127); - try testArgs(i64, u128, 0); - try testArgs(i64, u128, 1 << 0); - try testArgs(i64, u128, 1 << 127); try testArgs(u64, u128, 0); try testArgs(u64, u128, 1 << 0); try testArgs(u64, u128, 1 << 127); - try testArgs(i128, u128, 0); - try testArgs(i128, u128, 1 << 0); - try testArgs(i128, u128, 1 << 127); try testArgs(u128, u128, 0); try testArgs(u128, u128, 1 << 0); try testArgs(u128, u128, 1 << 127); - try testArgs(i256, u128, 0); - try testArgs(i256, u128, 1 << 0); - try testArgs(i256, u128, 1 << 127); try testArgs(u256, u128, 0); try testArgs(u256, u128, 1 << 0); try testArgs(u256, u128, 1 << 127); - try testArgs(i512, u128, 0); - try testArgs(i512, u128, 1 << 0); - try testArgs(i512, u128, 1 << 127); try testArgs(u512, u128, 0); try testArgs(u512, u128, 1 << 0); try testArgs(u512, u128, 1 << 127); - try testArgs(i1024, u128, 0); - try testArgs(i1024, u128, 1 << 0); - try testArgs(i1024, u128, 1 << 127); try testArgs(u1024, u128, 0); try testArgs(u1024, u128, 1 << 0); try testArgs(u1024, u128, 1 << 127); @@ -3786,1066 +2697,97 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i129, -1 << 128); try testArgs(i8, i129, -1); try testArgs(i8, i129, 0); - try testArgs(u8, i129, -1 << 128); - try testArgs(u8, i129, -1); - try testArgs(u8, i129, 0); try testArgs(i16, i129, -1 << 128); try testArgs(i16, i129, -1); try testArgs(i16, i129, 0); - try testArgs(u16, i129, -1 << 128); - try testArgs(u16, i129, -1); - try testArgs(u16, i129, 0); try testArgs(i32, i129, -1 << 128); try testArgs(i32, i129, -1); try testArgs(i32, i129, 0); - try testArgs(u32, i129, -1 << 128); - try testArgs(u32, i129, -1); - try testArgs(u32, i129, 0); try testArgs(i64, i129, -1 << 128); try testArgs(i64, i129, -1); try testArgs(i64, i129, 0); - try testArgs(u64, i129, -1 << 128); - try testArgs(u64, i129, -1); - try testArgs(u64, i129, 0); try testArgs(i128, i129, -1 << 128); try testArgs(i128, i129, -1); try testArgs(i128, i129, 0); - try testArgs(u128, i129, -1 << 128); - try testArgs(u128, i129, -1); - try testArgs(u128, i129, 0); try testArgs(i256, i129, -1 << 128); try testArgs(i256, i129, -1); try testArgs(i256, i129, 0); - try testArgs(u256, i129, -1 << 128); - try testArgs(u256, i129, -1); - try testArgs(u256, i129, 0); try testArgs(i512, i129, -1 << 128); try testArgs(i512, i129, -1); try testArgs(i512, i129, 0); - try testArgs(u512, i129, -1 << 128); - try testArgs(u512, i129, -1); - try testArgs(u512, i129, 0); try testArgs(i1024, i129, -1 << 128); try testArgs(i1024, i129, -1); try testArgs(i1024, i129, 0); - try testArgs(u1024, i129, -1 << 128); - try testArgs(u1024, i129, -1); - try testArgs(u1024, i129, 0); - try testArgs(i8, u129, 0); - try testArgs(i8, u129, 1 << 0); - try testArgs(i8, u129, 1 << 128); try testArgs(u8, u129, 0); try testArgs(u8, u129, 1 << 0); try testArgs(u8, u129, 1 << 128); - try testArgs(i16, u129, 0); - try testArgs(i16, u129, 1 << 0); - try testArgs(i16, u129, 1 << 128); try testArgs(u16, u129, 0); try testArgs(u16, u129, 1 << 0); try testArgs(u16, u129, 1 << 128); - try testArgs(i32, u129, 0); - try testArgs(i32, u129, 1 << 0); - try testArgs(i32, u129, 1 << 128); try testArgs(u32, u129, 0); try testArgs(u32, u129, 1 << 0); try testArgs(u32, u129, 1 << 128); - try testArgs(i64, u129, 0); - try testArgs(i64, u129, 1 << 0); - try testArgs(i64, u129, 1 << 128); try testArgs(u64, u129, 0); try testArgs(u64, u129, 1 << 0); try testArgs(u64, u129, 1 << 128); - try testArgs(i128, u129, 0); - try testArgs(i128, u129, 1 << 0); - try testArgs(i128, u129, 1 << 128); try testArgs(u128, u129, 0); try testArgs(u128, u129, 1 << 0); try testArgs(u128, u129, 1 << 128); - try testArgs(i256, u129, 0); - try testArgs(i256, u129, 1 << 0); - try testArgs(i256, u129, 1 << 128); try testArgs(u256, u129, 0); try testArgs(u256, u129, 1 << 0); try testArgs(u256, u129, 1 << 128); - try testArgs(i512, u129, 0); - try testArgs(i512, u129, 1 << 0); - try testArgs(i512, u129, 1 << 128); try testArgs(u512, u129, 0); try testArgs(u512, u129, 1 << 0); try testArgs(u512, u129, 1 << 128); - try testArgs(i1024, u129, 0); - try testArgs(i1024, u129, 1 << 0); - try testArgs(i1024, u129, 1 << 128); try testArgs(u1024, u129, 0); try testArgs(u1024, u129, 1 << 0); try testArgs(u1024, u129, 1 << 128); - try testArgs(i8, i159, -1 << 158); - try testArgs(i8, i159, -1); - try testArgs(i8, i159, 0); - try testArgs(u8, i159, -1 << 158); - try testArgs(u8, i159, -1); - try testArgs(u8, i159, 0); - try testArgs(i16, i159, -1 << 158); - try testArgs(i16, i159, -1); - try testArgs(i16, i159, 0); - try testArgs(u16, i159, -1 << 158); - try testArgs(u16, i159, -1); - try testArgs(u16, i159, 0); - try testArgs(i32, i159, -1 << 158); - try testArgs(i32, i159, -1); - try testArgs(i32, i159, 0); - try testArgs(u32, i159, -1 << 158); - try testArgs(u32, i159, -1); - try testArgs(u32, i159, 0); - try testArgs(i64, i159, -1 << 158); - try testArgs(i64, i159, -1); - try testArgs(i64, i159, 0); - try testArgs(u64, i159, -1 << 158); - try testArgs(u64, i159, -1); - try testArgs(u64, i159, 0); - try testArgs(i128, i159, -1 << 158); - try testArgs(i128, i159, -1); - try testArgs(i128, i159, 0); - try testArgs(u128, i159, -1 << 158); - try testArgs(u128, i159, -1); - try testArgs(u128, i159, 0); - try testArgs(i256, i159, -1 << 158); - try testArgs(i256, i159, -1); - try testArgs(i256, i159, 0); - try testArgs(u256, i159, -1 << 158); - try testArgs(u256, i159, -1); - try testArgs(u256, i159, 0); - try testArgs(i512, i159, -1 << 158); - try testArgs(i512, i159, -1); - try testArgs(i512, i159, 0); - try testArgs(u512, i159, -1 << 158); - try testArgs(u512, i159, -1); - try testArgs(u512, i159, 0); - try testArgs(i1024, i159, -1 << 158); - try testArgs(i1024, i159, -1); - try testArgs(i1024, i159, 0); - try testArgs(u1024, i159, -1 << 158); - try testArgs(u1024, i159, -1); - try testArgs(u1024, i159, 0); - try testArgs(i8, u159, 0); - try testArgs(i8, u159, 1 << 0); - try testArgs(i8, u159, 1 << 158); - try testArgs(u8, u159, 0); - try testArgs(u8, u159, 1 << 0); - try testArgs(u8, u159, 1 << 158); - try testArgs(i16, u159, 0); - try testArgs(i16, u159, 1 << 0); - try testArgs(i16, u159, 1 << 158); - try testArgs(u16, u159, 0); - try testArgs(u16, u159, 1 << 0); - try testArgs(u16, u159, 1 << 158); - try testArgs(i32, u159, 0); - try testArgs(i32, u159, 1 << 0); - try testArgs(i32, u159, 1 << 158); - try testArgs(u32, u159, 0); - try testArgs(u32, u159, 1 << 0); - try testArgs(u32, u159, 1 << 158); - try testArgs(i64, u159, 0); - try testArgs(i64, u159, 1 << 0); - try testArgs(i64, u159, 1 << 158); - try testArgs(u64, u159, 0); - try testArgs(u64, u159, 1 << 0); - try testArgs(u64, u159, 1 << 158); - try testArgs(i128, u159, 0); - try testArgs(i128, u159, 1 << 0); - try testArgs(i128, u159, 1 << 158); - try testArgs(u128, u159, 0); - try testArgs(u128, u159, 1 << 0); - try testArgs(u128, u159, 1 << 158); - try testArgs(i256, u159, 0); - try testArgs(i256, u159, 1 << 0); - try testArgs(i256, u159, 1 << 158); - try testArgs(u256, u159, 0); - try testArgs(u256, u159, 1 << 0); - try testArgs(u256, u159, 1 << 158); - try testArgs(i512, u159, 0); - try testArgs(i512, u159, 1 << 0); - try testArgs(i512, u159, 1 << 158); - try testArgs(u512, u159, 0); - try testArgs(u512, u159, 1 << 0); - try testArgs(u512, u159, 1 << 158); - try testArgs(i1024, u159, 0); - try testArgs(i1024, u159, 1 << 0); - try testArgs(i1024, u159, 1 << 158); - try testArgs(u1024, u159, 0); - try testArgs(u1024, u159, 1 << 0); - try testArgs(u1024, u159, 1 << 158); - - try testArgs(i8, i160, -1 << 159); - try testArgs(i8, i160, -1); - try testArgs(i8, i160, 0); - try testArgs(u8, i160, -1 << 159); - try testArgs(u8, i160, -1); - try testArgs(u8, i160, 0); - try testArgs(i16, i160, -1 << 159); - try testArgs(i16, i160, -1); - try testArgs(i16, i160, 0); - try testArgs(u16, i160, -1 << 159); - try testArgs(u16, i160, -1); - try testArgs(u16, i160, 0); - try testArgs(i32, i160, -1 << 159); - try testArgs(i32, i160, -1); - try testArgs(i32, i160, 0); - try testArgs(u32, i160, -1 << 159); - try testArgs(u32, i160, -1); - try testArgs(u32, i160, 0); - try testArgs(i64, i160, -1 << 159); - try testArgs(i64, i160, -1); - try testArgs(i64, i160, 0); - try testArgs(u64, i160, -1 << 159); - try testArgs(u64, i160, -1); - try testArgs(u64, i160, 0); - try testArgs(i128, i160, -1 << 159); - try testArgs(i128, i160, -1); - try testArgs(i128, i160, 0); - try testArgs(u128, i160, -1 << 159); - try testArgs(u128, i160, -1); - try testArgs(u128, i160, 0); - try testArgs(i256, i160, -1 << 159); - try testArgs(i256, i160, -1); - try testArgs(i256, i160, 0); - try testArgs(u256, i160, -1 << 159); - try testArgs(u256, i160, -1); - try testArgs(u256, i160, 0); - try testArgs(i512, i160, -1 << 159); - try testArgs(i512, i160, -1); - try testArgs(i512, i160, 0); - try testArgs(u512, i160, -1 << 159); - try testArgs(u512, i160, -1); - try testArgs(u512, i160, 0); - try testArgs(i1024, i160, -1 << 159); - try testArgs(i1024, i160, -1); - try testArgs(i1024, i160, 0); - try testArgs(u1024, i160, -1 << 159); - try testArgs(u1024, i160, -1); - try testArgs(u1024, i160, 0); - try testArgs(i8, u160, 0); - try testArgs(i8, u160, 1 << 0); - try testArgs(i8, u160, 1 << 159); - try testArgs(u8, u160, 0); - try testArgs(u8, u160, 1 << 0); - try testArgs(u8, u160, 1 << 159); - try testArgs(i16, u160, 0); - try testArgs(i16, u160, 1 << 0); - try testArgs(i16, u160, 1 << 159); - try testArgs(u16, u160, 0); - try testArgs(u16, u160, 1 << 0); - try testArgs(u16, u160, 1 << 159); - try testArgs(i32, u160, 0); - try testArgs(i32, u160, 1 << 0); - try testArgs(i32, u160, 1 << 159); - try testArgs(u32, u160, 0); - try testArgs(u32, u160, 1 << 0); - try testArgs(u32, u160, 1 << 159); - try testArgs(i64, u160, 0); - try testArgs(i64, u160, 1 << 0); - try testArgs(i64, u160, 1 << 159); - try testArgs(u64, u160, 0); - try testArgs(u64, u160, 1 << 0); - try testArgs(u64, u160, 1 << 159); - try testArgs(i128, u160, 0); - try testArgs(i128, u160, 1 << 0); - try testArgs(i128, u160, 1 << 159); - try testArgs(u128, u160, 0); - try testArgs(u128, u160, 1 << 0); - try testArgs(u128, u160, 1 << 159); - try testArgs(i256, u160, 0); - try testArgs(i256, u160, 1 << 0); - try testArgs(i256, u160, 1 << 159); - try testArgs(u256, u160, 0); - try testArgs(u256, u160, 1 << 0); - try testArgs(u256, u160, 1 << 159); - try testArgs(i512, u160, 0); - try testArgs(i512, u160, 1 << 0); - try testArgs(i512, u160, 1 << 159); - try testArgs(u512, u160, 0); - try testArgs(u512, u160, 1 << 0); - try testArgs(u512, u160, 1 << 159); - try testArgs(i1024, u160, 0); - try testArgs(i1024, u160, 1 << 0); - try testArgs(i1024, u160, 1 << 159); - try testArgs(u1024, u160, 0); - try testArgs(u1024, u160, 1 << 0); - try testArgs(u1024, u160, 1 << 159); - - try testArgs(i8, i161, -1 << 160); - try testArgs(i8, i161, -1); - try testArgs(i8, i161, 0); - try testArgs(u8, i161, -1 << 160); - try testArgs(u8, i161, -1); - try testArgs(u8, i161, 0); - try testArgs(i16, i161, -1 << 160); - try testArgs(i16, i161, -1); - try testArgs(i16, i161, 0); - try testArgs(u16, i161, -1 << 160); - try testArgs(u16, i161, -1); - try testArgs(u16, i161, 0); - try testArgs(i32, i161, -1 << 160); - try testArgs(i32, i161, -1); - try testArgs(i32, i161, 0); - try testArgs(u32, i161, -1 << 160); - try testArgs(u32, i161, -1); - try testArgs(u32, i161, 0); - try testArgs(i64, i161, -1 << 160); - try testArgs(i64, i161, -1); - try testArgs(i64, i161, 0); - try testArgs(u64, i161, -1 << 160); - try testArgs(u64, i161, -1); - try testArgs(u64, i161, 0); - try testArgs(i128, i161, -1 << 160); - try testArgs(i128, i161, -1); - try testArgs(i128, i161, 0); - try testArgs(u128, i161, -1 << 160); - try testArgs(u128, i161, -1); - try testArgs(u128, i161, 0); - try testArgs(i256, i161, -1 << 160); - try testArgs(i256, i161, -1); - try testArgs(i256, i161, 0); - try testArgs(u256, i161, -1 << 160); - try testArgs(u256, i161, -1); - try testArgs(u256, i161, 0); - try testArgs(i512, i161, -1 << 160); - try testArgs(i512, i161, -1); - try testArgs(i512, i161, 0); - try testArgs(u512, i161, -1 << 160); - try testArgs(u512, i161, -1); - try testArgs(u512, i161, 0); - try testArgs(i1024, i161, -1 << 160); - try testArgs(i1024, i161, -1); - try testArgs(i1024, i161, 0); - try testArgs(u1024, i161, -1 << 160); - try testArgs(u1024, i161, -1); - try testArgs(u1024, i161, 0); - try testArgs(i8, u161, 0); - try testArgs(i8, u161, 1 << 0); - try testArgs(i8, u161, 1 << 160); - try testArgs(u8, u161, 0); - try testArgs(u8, u161, 1 << 0); - try testArgs(u8, u161, 1 << 160); - try testArgs(i16, u161, 0); - try testArgs(i16, u161, 1 << 0); - try testArgs(i16, u161, 1 << 160); - try testArgs(u16, u161, 0); - try testArgs(u16, u161, 1 << 0); - try testArgs(u16, u161, 1 << 160); - try testArgs(i32, u161, 0); - try testArgs(i32, u161, 1 << 0); - try testArgs(i32, u161, 1 << 160); - try testArgs(u32, u161, 0); - try testArgs(u32, u161, 1 << 0); - try testArgs(u32, u161, 1 << 160); - try testArgs(i64, u161, 0); - try testArgs(i64, u161, 1 << 0); - try testArgs(i64, u161, 1 << 160); - try testArgs(u64, u161, 0); - try testArgs(u64, u161, 1 << 0); - try testArgs(u64, u161, 1 << 160); - try testArgs(i128, u161, 0); - try testArgs(i128, u161, 1 << 0); - try testArgs(i128, u161, 1 << 160); - try testArgs(u128, u161, 0); - try testArgs(u128, u161, 1 << 0); - try testArgs(u128, u161, 1 << 160); - try testArgs(i256, u161, 0); - try testArgs(i256, u161, 1 << 0); - try testArgs(i256, u161, 1 << 160); - try testArgs(u256, u161, 0); - try testArgs(u256, u161, 1 << 0); - try testArgs(u256, u161, 1 << 160); - try testArgs(i512, u161, 0); - try testArgs(i512, u161, 1 << 0); - try testArgs(i512, u161, 1 << 160); - try testArgs(u512, u161, 0); - try testArgs(u512, u161, 1 << 0); - try testArgs(u512, u161, 1 << 160); - try testArgs(i1024, u161, 0); - try testArgs(i1024, u161, 1 << 0); - try testArgs(i1024, u161, 1 << 160); - try testArgs(u1024, u161, 0); - try testArgs(u1024, u161, 1 << 0); - try testArgs(u1024, u161, 1 << 160); - - try testArgs(i8, i191, -1 << 190); - try testArgs(i8, i191, -1); - try testArgs(i8, i191, 0); - try testArgs(u8, i191, -1 << 190); - try testArgs(u8, i191, -1); - try testArgs(u8, i191, 0); - try testArgs(i16, i191, -1 << 190); - try testArgs(i16, i191, -1); - try testArgs(i16, i191, 0); - try testArgs(u16, i191, -1 << 190); - try testArgs(u16, i191, -1); - try testArgs(u16, i191, 0); - try testArgs(i32, i191, -1 << 190); - try testArgs(i32, i191, -1); - try testArgs(i32, i191, 0); - try testArgs(u32, i191, -1 << 190); - try testArgs(u32, i191, -1); - try testArgs(u32, i191, 0); - try testArgs(i64, i191, -1 << 190); - try testArgs(i64, i191, -1); - try testArgs(i64, i191, 0); - try testArgs(u64, i191, -1 << 190); - try testArgs(u64, i191, -1); - try testArgs(u64, i191, 0); - try testArgs(i128, i191, -1 << 190); - try testArgs(i128, i191, -1); - try testArgs(i128, i191, 0); - try testArgs(u128, i191, -1 << 190); - try testArgs(u128, i191, -1); - try testArgs(u128, i191, 0); - try testArgs(i256, i191, -1 << 190); - try testArgs(i256, i191, -1); - try testArgs(i256, i191, 0); - try testArgs(u256, i191, -1 << 190); - try testArgs(u256, i191, -1); - try testArgs(u256, i191, 0); - try testArgs(i512, i191, -1 << 190); - try testArgs(i512, i191, -1); - try testArgs(i512, i191, 0); - try testArgs(u512, i191, -1 << 190); - try testArgs(u512, i191, -1); - try testArgs(u512, i191, 0); - try testArgs(i1024, i191, -1 << 190); - try testArgs(i1024, i191, -1); - try testArgs(i1024, i191, 0); - try testArgs(u1024, i191, -1 << 190); - try testArgs(u1024, i191, -1); - try testArgs(u1024, i191, 0); - try testArgs(i8, u191, 0); - try testArgs(i8, u191, 1 << 0); - try testArgs(i8, u191, 1 << 190); - try testArgs(u8, u191, 0); - try testArgs(u8, u191, 1 << 0); - try testArgs(u8, u191, 1 << 190); - try testArgs(i16, u191, 0); - try testArgs(i16, u191, 1 << 0); - try testArgs(i16, u191, 1 << 190); - try testArgs(u16, u191, 0); - try testArgs(u16, u191, 1 << 0); - try testArgs(u16, u191, 1 << 190); - try testArgs(i32, u191, 0); - try testArgs(i32, u191, 1 << 0); - try testArgs(i32, u191, 1 << 190); - try testArgs(u32, u191, 0); - try testArgs(u32, u191, 1 << 0); - try testArgs(u32, u191, 1 << 190); - try testArgs(i64, u191, 0); - try testArgs(i64, u191, 1 << 0); - try testArgs(i64, u191, 1 << 190); - try testArgs(u64, u191, 0); - try testArgs(u64, u191, 1 << 0); - try testArgs(u64, u191, 1 << 190); - try testArgs(i128, u191, 0); - try testArgs(i128, u191, 1 << 0); - try testArgs(i128, u191, 1 << 190); - try testArgs(u128, u191, 0); - try testArgs(u128, u191, 1 << 0); - try testArgs(u128, u191, 1 << 190); - try testArgs(i256, u191, 0); - try testArgs(i256, u191, 1 << 0); - try testArgs(i256, u191, 1 << 190); - try testArgs(u256, u191, 0); - try testArgs(u256, u191, 1 << 0); - try testArgs(u256, u191, 1 << 190); - try testArgs(i512, u191, 0); - try testArgs(i512, u191, 1 << 0); - try testArgs(i512, u191, 1 << 190); - try testArgs(u512, u191, 0); - try testArgs(u512, u191, 1 << 0); - try testArgs(u512, u191, 1 << 190); - try testArgs(i1024, u191, 0); - try testArgs(i1024, u191, 1 << 0); - try testArgs(i1024, u191, 1 << 190); - try testArgs(u1024, u191, 0); - try testArgs(u1024, u191, 1 << 0); - try testArgs(u1024, u191, 1 << 190); - - try testArgs(i8, i192, -1 << 191); - try testArgs(i8, i192, -1); - try testArgs(i8, i192, 0); - try testArgs(u8, i192, -1 << 191); - try testArgs(u8, i192, -1); - try testArgs(u8, i192, 0); - try testArgs(i16, i192, -1 << 191); - try testArgs(i16, i192, -1); - try testArgs(i16, i192, 0); - try testArgs(u16, i192, -1 << 191); - try testArgs(u16, i192, -1); - try testArgs(u16, i192, 0); - try testArgs(i32, i192, -1 << 191); - try testArgs(i32, i192, -1); - try testArgs(i32, i192, 0); - try testArgs(u32, i192, -1 << 191); - try testArgs(u32, i192, -1); - try testArgs(u32, i192, 0); - try testArgs(i64, i192, -1 << 191); - try testArgs(i64, i192, -1); - try testArgs(i64, i192, 0); - try testArgs(u64, i192, -1 << 191); - try testArgs(u64, i192, -1); - try testArgs(u64, i192, 0); - try testArgs(i128, i192, -1 << 191); - try testArgs(i128, i192, -1); - try testArgs(i128, i192, 0); - try testArgs(u128, i192, -1 << 191); - try testArgs(u128, i192, -1); - try testArgs(u128, i192, 0); - try testArgs(i256, i192, -1 << 191); - try testArgs(i256, i192, -1); - try testArgs(i256, i192, 0); - try testArgs(u256, i192, -1 << 191); - try testArgs(u256, i192, -1); - try testArgs(u256, i192, 0); - try testArgs(i512, i192, -1 << 191); - try testArgs(i512, i192, -1); - try testArgs(i512, i192, 0); - try testArgs(u512, i192, -1 << 191); - try testArgs(u512, i192, -1); - try testArgs(u512, i192, 0); - try testArgs(i1024, i192, -1 << 191); - try testArgs(i1024, i192, -1); - try testArgs(i1024, i192, 0); - try testArgs(u1024, i192, -1 << 191); - try testArgs(u1024, i192, -1); - try testArgs(u1024, i192, 0); - try testArgs(i8, u192, 0); - try testArgs(i8, u192, 1 << 0); - try testArgs(i8, u192, 1 << 191); - try testArgs(u8, u192, 0); - try testArgs(u8, u192, 1 << 0); - try testArgs(u8, u192, 1 << 191); - try testArgs(i16, u192, 0); - try testArgs(i16, u192, 1 << 0); - try testArgs(i16, u192, 1 << 191); - try testArgs(u16, u192, 0); - try testArgs(u16, u192, 1 << 0); - try testArgs(u16, u192, 1 << 191); - try testArgs(i32, u192, 0); - try testArgs(i32, u192, 1 << 0); - try testArgs(i32, u192, 1 << 191); - try testArgs(u32, u192, 0); - try testArgs(u32, u192, 1 << 0); - try testArgs(u32, u192, 1 << 191); - try testArgs(i64, u192, 0); - try testArgs(i64, u192, 1 << 0); - try testArgs(i64, u192, 1 << 191); - try testArgs(u64, u192, 0); - try testArgs(u64, u192, 1 << 0); - try testArgs(u64, u192, 1 << 191); - try testArgs(i128, u192, 0); - try testArgs(i128, u192, 1 << 0); - try testArgs(i128, u192, 1 << 191); - try testArgs(u128, u192, 0); - try testArgs(u128, u192, 1 << 0); - try testArgs(u128, u192, 1 << 191); - try testArgs(i256, u192, 0); - try testArgs(i256, u192, 1 << 0); - try testArgs(i256, u192, 1 << 191); - try testArgs(u256, u192, 0); - try testArgs(u256, u192, 1 << 0); - try testArgs(u256, u192, 1 << 191); - try testArgs(i512, u192, 0); - try testArgs(i512, u192, 1 << 0); - try testArgs(i512, u192, 1 << 191); - try testArgs(u512, u192, 0); - try testArgs(u512, u192, 1 << 0); - try testArgs(u512, u192, 1 << 191); - try testArgs(i1024, u192, 0); - try testArgs(i1024, u192, 1 << 0); - try testArgs(i1024, u192, 1 << 191); - try testArgs(u1024, u192, 0); - try testArgs(u1024, u192, 1 << 0); - try testArgs(u1024, u192, 1 << 191); - - try testArgs(i8, i193, -1 << 192); - try testArgs(i8, i193, -1); - try testArgs(i8, i193, 0); - try testArgs(u8, i193, -1 << 192); - try testArgs(u8, i193, -1); - try testArgs(u8, i193, 0); - try testArgs(i16, i193, -1 << 192); - try testArgs(i16, i193, -1); - try testArgs(i16, i193, 0); - try testArgs(u16, i193, -1 << 192); - try testArgs(u16, i193, -1); - try testArgs(u16, i193, 0); - try testArgs(i32, i193, -1 << 192); - try testArgs(i32, i193, -1); - try testArgs(i32, i193, 0); - try testArgs(u32, i193, -1 << 192); - try testArgs(u32, i193, -1); - try testArgs(u32, i193, 0); - try testArgs(i64, i193, -1 << 192); - try testArgs(i64, i193, -1); - try testArgs(i64, i193, 0); - try testArgs(u64, i193, -1 << 192); - try testArgs(u64, i193, -1); - try testArgs(u64, i193, 0); - try testArgs(i128, i193, -1 << 192); - try testArgs(i128, i193, -1); - try testArgs(i128, i193, 0); - try testArgs(u128, i193, -1 << 192); - try testArgs(u128, i193, -1); - try testArgs(u128, i193, 0); - try testArgs(i256, i193, -1 << 192); - try testArgs(i256, i193, -1); - try testArgs(i256, i193, 0); - try testArgs(u256, i193, -1 << 192); - try testArgs(u256, i193, -1); - try testArgs(u256, i193, 0); - try testArgs(i512, i193, -1 << 192); - try testArgs(i512, i193, -1); - try testArgs(i512, i193, 0); - try testArgs(u512, i193, -1 << 192); - try testArgs(u512, i193, -1); - try testArgs(u512, i193, 0); - try testArgs(i1024, i193, -1 << 192); - try testArgs(i1024, i193, -1); - try testArgs(i1024, i193, 0); - try testArgs(u1024, i193, -1 << 192); - try testArgs(u1024, i193, -1); - try testArgs(u1024, i193, 0); - try testArgs(i8, u193, 0); - try testArgs(i8, u193, 1 << 0); - try testArgs(i8, u193, 1 << 192); - try testArgs(u8, u193, 0); - try testArgs(u8, u193, 1 << 0); - try testArgs(u8, u193, 1 << 192); - try testArgs(i16, u193, 0); - try testArgs(i16, u193, 1 << 0); - try testArgs(i16, u193, 1 << 192); - try testArgs(u16, u193, 0); - try testArgs(u16, u193, 1 << 0); - try testArgs(u16, u193, 1 << 192); - try testArgs(i32, u193, 0); - try testArgs(i32, u193, 1 << 0); - try testArgs(i32, u193, 1 << 192); - try testArgs(u32, u193, 0); - try testArgs(u32, u193, 1 << 0); - try testArgs(u32, u193, 1 << 192); - try testArgs(i64, u193, 0); - try testArgs(i64, u193, 1 << 0); - try testArgs(i64, u193, 1 << 192); - try testArgs(u64, u193, 0); - try testArgs(u64, u193, 1 << 0); - try testArgs(u64, u193, 1 << 192); - try testArgs(i128, u193, 0); - try testArgs(i128, u193, 1 << 0); - try testArgs(i128, u193, 1 << 192); - try testArgs(u128, u193, 0); - try testArgs(u128, u193, 1 << 0); - try testArgs(u128, u193, 1 << 192); - try testArgs(i256, u193, 0); - try testArgs(i256, u193, 1 << 0); - try testArgs(i256, u193, 1 << 192); - try testArgs(u256, u193, 0); - try testArgs(u256, u193, 1 << 0); - try testArgs(u256, u193, 1 << 192); - try testArgs(i512, u193, 0); - try testArgs(i512, u193, 1 << 0); - try testArgs(i512, u193, 1 << 192); - try testArgs(u512, u193, 0); - try testArgs(u512, u193, 1 << 0); - try testArgs(u512, u193, 1 << 192); - try testArgs(i1024, u193, 0); - try testArgs(i1024, u193, 1 << 0); - try testArgs(i1024, u193, 1 << 192); - try testArgs(u1024, u193, 0); - try testArgs(u1024, u193, 1 << 0); - try testArgs(u1024, u193, 1 << 192); - - try testArgs(i8, i223, -1 << 222); - try testArgs(i8, i223, -1); - try testArgs(i8, i223, 0); - try testArgs(u8, i223, -1 << 222); - try testArgs(u8, i223, -1); - try testArgs(u8, i223, 0); - try testArgs(i16, i223, -1 << 222); - try testArgs(i16, i223, -1); - try testArgs(i16, i223, 0); - try testArgs(u16, i223, -1 << 222); - try testArgs(u16, i223, -1); - try testArgs(u16, i223, 0); - try testArgs(i32, i223, -1 << 222); - try testArgs(i32, i223, -1); - try testArgs(i32, i223, 0); - try testArgs(u32, i223, -1 << 222); - try testArgs(u32, i223, -1); - try testArgs(u32, i223, 0); - try testArgs(i64, i223, -1 << 222); - try testArgs(i64, i223, -1); - try testArgs(i64, i223, 0); - try testArgs(u64, i223, -1 << 222); - try testArgs(u64, i223, -1); - try testArgs(u64, i223, 0); - try testArgs(i128, i223, -1 << 222); - try testArgs(i128, i223, -1); - try testArgs(i128, i223, 0); - try testArgs(u128, i223, -1 << 222); - try testArgs(u128, i223, -1); - try testArgs(u128, i223, 0); - try testArgs(i256, i223, -1 << 222); - try testArgs(i256, i223, -1); - try testArgs(i256, i223, 0); - try testArgs(u256, i223, -1 << 222); - try testArgs(u256, i223, -1); - try testArgs(u256, i223, 0); - try testArgs(i512, i223, -1 << 222); - try testArgs(i512, i223, -1); - try testArgs(i512, i223, 0); - try testArgs(u512, i223, -1 << 222); - try testArgs(u512, i223, -1); - try testArgs(u512, i223, 0); - try testArgs(i1024, i223, -1 << 222); - try testArgs(i1024, i223, -1); - try testArgs(i1024, i223, 0); - try testArgs(u1024, i223, -1 << 222); - try testArgs(u1024, i223, -1); - try testArgs(u1024, i223, 0); - try testArgs(i8, u223, 0); - try testArgs(i8, u223, 1 << 0); - try testArgs(i8, u223, 1 << 222); - try testArgs(u8, u223, 0); - try testArgs(u8, u223, 1 << 0); - try testArgs(u8, u223, 1 << 222); - try testArgs(i16, u223, 0); - try testArgs(i16, u223, 1 << 0); - try testArgs(i16, u223, 1 << 222); - try testArgs(u16, u223, 0); - try testArgs(u16, u223, 1 << 0); - try testArgs(u16, u223, 1 << 222); - try testArgs(i32, u223, 0); - try testArgs(i32, u223, 1 << 0); - try testArgs(i32, u223, 1 << 222); - try testArgs(u32, u223, 0); - try testArgs(u32, u223, 1 << 0); - try testArgs(u32, u223, 1 << 222); - try testArgs(i64, u223, 0); - try testArgs(i64, u223, 1 << 0); - try testArgs(i64, u223, 1 << 222); - try testArgs(u64, u223, 0); - try testArgs(u64, u223, 1 << 0); - try testArgs(u64, u223, 1 << 222); - try testArgs(i128, u223, 0); - try testArgs(i128, u223, 1 << 0); - try testArgs(i128, u223, 1 << 222); - try testArgs(u128, u223, 0); - try testArgs(u128, u223, 1 << 0); - try testArgs(u128, u223, 1 << 222); - try testArgs(i256, u223, 0); - try testArgs(i256, u223, 1 << 0); - try testArgs(i256, u223, 1 << 222); - try testArgs(u256, u223, 0); - try testArgs(u256, u223, 1 << 0); - try testArgs(u256, u223, 1 << 222); - try testArgs(i512, u223, 0); - try testArgs(i512, u223, 1 << 0); - try testArgs(i512, u223, 1 << 222); - try testArgs(u512, u223, 0); - try testArgs(u512, u223, 1 << 0); - try testArgs(u512, u223, 1 << 222); - try testArgs(i1024, u223, 0); - try testArgs(i1024, u223, 1 << 0); - try testArgs(i1024, u223, 1 << 222); - try testArgs(u1024, u223, 0); - try testArgs(u1024, u223, 1 << 0); - try testArgs(u1024, u223, 1 << 222); - - try testArgs(i8, i224, -1 << 223); - try testArgs(i8, i224, -1); - try testArgs(i8, i224, 0); - try testArgs(u8, i224, -1 << 223); - try testArgs(u8, i224, -1); - try testArgs(u8, i224, 0); - try testArgs(i16, i224, -1 << 223); - try testArgs(i16, i224, -1); - try testArgs(i16, i224, 0); - try testArgs(u16, i224, -1 << 223); - try testArgs(u16, i224, -1); - try testArgs(u16, i224, 0); - try testArgs(i32, i224, -1 << 223); - try testArgs(i32, i224, -1); - try testArgs(i32, i224, 0); - try testArgs(u32, i224, -1 << 223); - try testArgs(u32, i224, -1); - try testArgs(u32, i224, 0); - try testArgs(i64, i224, -1 << 223); - try testArgs(i64, i224, -1); - try testArgs(i64, i224, 0); - try testArgs(u64, i224, -1 << 223); - try testArgs(u64, i224, -1); - try testArgs(u64, i224, 0); - try testArgs(i128, i224, -1 << 223); - try testArgs(i128, i224, -1); - try testArgs(i128, i224, 0); - try testArgs(u128, i224, -1 << 223); - try testArgs(u128, i224, -1); - try testArgs(u128, i224, 0); - try testArgs(i256, i224, -1 << 223); - try testArgs(i256, i224, -1); - try testArgs(i256, i224, 0); - try testArgs(u256, i224, -1 << 223); - try testArgs(u256, i224, -1); - try testArgs(u256, i224, 0); - try testArgs(i512, i224, -1 << 223); - try testArgs(i512, i224, -1); - try testArgs(i512, i224, 0); - try testArgs(u512, i224, -1 << 223); - try testArgs(u512, i224, -1); - try testArgs(u512, i224, 0); - try testArgs(i1024, i224, -1 << 223); - try testArgs(i1024, i224, -1); - try testArgs(i1024, i224, 0); - try testArgs(u1024, i224, -1 << 223); - try testArgs(u1024, i224, -1); - try testArgs(u1024, i224, 0); - try testArgs(i8, u224, 0); - try testArgs(i8, u224, 1 << 0); - try testArgs(i8, u224, 1 << 223); - try testArgs(u8, u224, 0); - try testArgs(u8, u224, 1 << 0); - try testArgs(u8, u224, 1 << 223); - try testArgs(i16, u224, 0); - try testArgs(i16, u224, 1 << 0); - try testArgs(i16, u224, 1 << 223); - try testArgs(u16, u224, 0); - try testArgs(u16, u224, 1 << 0); - try testArgs(u16, u224, 1 << 223); - try testArgs(i32, u224, 0); - try testArgs(i32, u224, 1 << 0); - try testArgs(i32, u224, 1 << 223); - try testArgs(u32, u224, 0); - try testArgs(u32, u224, 1 << 0); - try testArgs(u32, u224, 1 << 223); - try testArgs(i64, u224, 0); - try testArgs(i64, u224, 1 << 0); - try testArgs(i64, u224, 1 << 223); - try testArgs(u64, u224, 0); - try testArgs(u64, u224, 1 << 0); - try testArgs(u64, u224, 1 << 223); - try testArgs(i128, u224, 0); - try testArgs(i128, u224, 1 << 0); - try testArgs(i128, u224, 1 << 223); - try testArgs(u128, u224, 0); - try testArgs(u128, u224, 1 << 0); - try testArgs(u128, u224, 1 << 223); - try testArgs(i256, u224, 0); - try testArgs(i256, u224, 1 << 0); - try testArgs(i256, u224, 1 << 223); - try testArgs(u256, u224, 0); - try testArgs(u256, u224, 1 << 0); - try testArgs(u256, u224, 1 << 223); - try testArgs(i512, u224, 0); - try testArgs(i512, u224, 1 << 0); - try testArgs(i512, u224, 1 << 223); - try testArgs(u512, u224, 0); - try testArgs(u512, u224, 1 << 0); - try testArgs(u512, u224, 1 << 223); - try testArgs(i1024, u224, 0); - try testArgs(i1024, u224, 1 << 0); - try testArgs(i1024, u224, 1 << 223); - try testArgs(u1024, u224, 0); - try testArgs(u1024, u224, 1 << 0); - try testArgs(u1024, u224, 1 << 223); - - try testArgs(i8, i225, -1 << 224); - try testArgs(i8, i225, -1); - try testArgs(i8, i225, 0); - try testArgs(u8, i225, -1 << 224); - try testArgs(u8, i225, -1); - try testArgs(u8, i225, 0); - try testArgs(i16, i225, -1 << 224); - try testArgs(i16, i225, -1); - try testArgs(i16, i225, 0); - try testArgs(u16, i225, -1 << 224); - try testArgs(u16, i225, -1); - try testArgs(u16, i225, 0); - try testArgs(i32, i225, -1 << 224); - try testArgs(i32, i225, -1); - try testArgs(i32, i225, 0); - try testArgs(u32, i225, -1 << 224); - try testArgs(u32, i225, -1); - try testArgs(u32, i225, 0); - try testArgs(i64, i225, -1 << 224); - try testArgs(i64, i225, -1); - try testArgs(i64, i225, 0); - try testArgs(u64, i225, -1 << 224); - try testArgs(u64, i225, -1); - try testArgs(u64, i225, 0); - try testArgs(i128, i225, -1 << 224); - try testArgs(i128, i225, -1); - try testArgs(i128, i225, 0); - try testArgs(u128, i225, -1 << 224); - try testArgs(u128, i225, -1); - try testArgs(u128, i225, 0); - try testArgs(i256, i225, -1 << 224); - try testArgs(i256, i225, -1); - try testArgs(i256, i225, 0); - try testArgs(u256, i225, -1 << 224); - try testArgs(u256, i225, -1); - try testArgs(u256, i225, 0); - try testArgs(i512, i225, -1 << 224); - try testArgs(i512, i225, -1); - try testArgs(i512, i225, 0); - try testArgs(u512, i225, -1 << 224); - try testArgs(u512, i225, -1); - try testArgs(u512, i225, 0); - try testArgs(i1024, i225, -1 << 224); - try testArgs(i1024, i225, -1); - try testArgs(i1024, i225, 0); - try testArgs(u1024, i225, -1 << 224); - try testArgs(u1024, i225, -1); - try testArgs(u1024, i225, 0); - try testArgs(i8, u225, 0); - try testArgs(i8, u225, 1 << 0); - try testArgs(i8, u225, 1 << 224); - try testArgs(u8, u225, 0); - try testArgs(u8, u225, 1 << 0); - try testArgs(u8, u225, 1 << 224); - try testArgs(i16, u225, 0); - try testArgs(i16, u225, 1 << 0); - try testArgs(i16, u225, 1 << 224); - try testArgs(u16, u225, 0); - try testArgs(u16, u225, 1 << 0); - try testArgs(u16, u225, 1 << 224); - try testArgs(i32, u225, 0); - try testArgs(i32, u225, 1 << 0); - try testArgs(i32, u225, 1 << 224); - try testArgs(u32, u225, 0); - try testArgs(u32, u225, 1 << 0); - try testArgs(u32, u225, 1 << 224); - try testArgs(i64, u225, 0); - try testArgs(i64, u225, 1 << 0); - try testArgs(i64, u225, 1 << 224); - try testArgs(u64, u225, 0); - try testArgs(u64, u225, 1 << 0); - try testArgs(u64, u225, 1 << 224); - try testArgs(i128, u225, 0); - try testArgs(i128, u225, 1 << 0); - try testArgs(i128, u225, 1 << 224); - try testArgs(u128, u225, 0); - try testArgs(u128, u225, 1 << 0); - try testArgs(u128, u225, 1 << 224); - try testArgs(i256, u225, 0); - try testArgs(i256, u225, 1 << 0); - try testArgs(i256, u225, 1 << 224); - try testArgs(u256, u225, 0); - try testArgs(u256, u225, 1 << 0); - try testArgs(u256, u225, 1 << 224); - try testArgs(i512, u225, 0); - try testArgs(i512, u225, 1 << 0); - try testArgs(i512, u225, 1 << 224); - try testArgs(u512, u225, 0); - try testArgs(u512, u225, 1 << 0); - try testArgs(u512, u225, 1 << 224); - try testArgs(i1024, u225, 0); - try testArgs(i1024, u225, 1 << 0); - try testArgs(i1024, u225, 1 << 224); - try testArgs(u1024, u225, 0); - try testArgs(u1024, u225, 1 << 0); - try testArgs(u1024, u225, 1 << 224); - try testArgs(i8, i255, -1 << 254); try testArgs(i8, i255, -1); try testArgs(i8, i255, 0); - try testArgs(u8, i255, -1 << 254); - try testArgs(u8, i255, -1); - try testArgs(u8, i255, 0); try testArgs(i16, i255, -1 << 254); try testArgs(i16, i255, -1); try testArgs(i16, i255, 0); - try testArgs(u16, i255, -1 << 254); - try testArgs(u16, i255, -1); - try testArgs(u16, i255, 0); try testArgs(i32, i255, -1 << 254); try testArgs(i32, i255, -1); try testArgs(i32, i255, 0); - try testArgs(u32, i255, -1 << 254); - try testArgs(u32, i255, -1); - try testArgs(u32, i255, 0); try testArgs(i64, i255, -1 << 254); try testArgs(i64, i255, -1); try testArgs(i64, i255, 0); - try testArgs(u64, i255, -1 << 254); - try testArgs(u64, i255, -1); - try testArgs(u64, i255, 0); try testArgs(i128, i255, -1 << 254); try testArgs(i128, i255, -1); try testArgs(i128, i255, 0); - try testArgs(u128, i255, -1 << 254); - try testArgs(u128, i255, -1); - try testArgs(u128, i255, 0); try testArgs(i256, i255, -1 << 254); try testArgs(i256, i255, -1); try testArgs(i256, i255, 0); - try testArgs(u256, i255, -1 << 254); - try testArgs(u256, i255, -1); - try testArgs(u256, i255, 0); try testArgs(i512, i255, -1 << 254); try testArgs(i512, i255, -1); try testArgs(i512, i255, 0); - try testArgs(u512, i255, -1 << 254); - try testArgs(u512, i255, -1); - try testArgs(u512, i255, 0); try testArgs(i1024, i255, -1 << 254); try testArgs(i1024, i255, -1); try testArgs(i1024, i255, 0); - try testArgs(u1024, i255, -1 << 254); - try testArgs(u1024, i255, -1); - try testArgs(u1024, i255, 0); - try testArgs(i8, u255, 0); - try testArgs(i8, u255, 1 << 0); - try testArgs(i8, u255, 1 << 254); try testArgs(u8, u255, 0); try testArgs(u8, u255, 1 << 0); try testArgs(u8, u255, 1 << 254); - try testArgs(i16, u255, 0); - try testArgs(i16, u255, 1 << 0); - try testArgs(i16, u255, 1 << 254); try testArgs(u16, u255, 0); try testArgs(u16, u255, 1 << 0); try testArgs(u16, u255, 1 << 254); - try testArgs(i32, u255, 0); - try testArgs(i32, u255, 1 << 0); - try testArgs(i32, u255, 1 << 254); try testArgs(u32, u255, 0); try testArgs(u32, u255, 1 << 0); try testArgs(u32, u255, 1 << 254); - try testArgs(i64, u255, 0); - try testArgs(i64, u255, 1 << 0); - try testArgs(i64, u255, 1 << 254); try testArgs(u64, u255, 0); try testArgs(u64, u255, 1 << 0); try testArgs(u64, u255, 1 << 254); - try testArgs(i128, u255, 0); - try testArgs(i128, u255, 1 << 0); - try testArgs(i128, u255, 1 << 254); try testArgs(u128, u255, 0); try testArgs(u128, u255, 1 << 0); try testArgs(u128, u255, 1 << 254); - try testArgs(i256, u255, 0); - try testArgs(i256, u255, 1 << 0); - try testArgs(i256, u255, 1 << 254); try testArgs(u256, u255, 0); try testArgs(u256, u255, 1 << 0); try testArgs(u256, u255, 1 << 254); - try testArgs(i512, u255, 0); - try testArgs(i512, u255, 1 << 0); - try testArgs(i512, u255, 1 << 254); try testArgs(u512, u255, 0); try testArgs(u512, u255, 1 << 0); try testArgs(u512, u255, 1 << 254); - try testArgs(i1024, u255, 0); - try testArgs(i1024, u255, 1 << 0); - try testArgs(i1024, u255, 1 << 254); try testArgs(u1024, u255, 0); try testArgs(u1024, u255, 1 << 0); try testArgs(u1024, u255, 1 << 254); @@ -4853,96 +2795,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i256, -1 << 255); try testArgs(i8, i256, -1); try testArgs(i8, i256, 0); - try testArgs(u8, i256, -1 << 255); - try testArgs(u8, i256, -1); - try testArgs(u8, i256, 0); try testArgs(i16, i256, -1 << 255); try testArgs(i16, i256, -1); try testArgs(i16, i256, 0); - try testArgs(u16, i256, -1 << 255); - try testArgs(u16, i256, -1); - try testArgs(u16, i256, 0); try testArgs(i32, i256, -1 << 255); try testArgs(i32, i256, -1); try testArgs(i32, i256, 0); - try testArgs(u32, i256, -1 << 255); - try testArgs(u32, i256, -1); - try testArgs(u32, i256, 0); try testArgs(i64, i256, -1 << 255); try testArgs(i64, i256, -1); try testArgs(i64, i256, 0); - try testArgs(u64, i256, -1 << 255); - try testArgs(u64, i256, -1); - try testArgs(u64, i256, 0); try testArgs(i128, i256, -1 << 255); try testArgs(i128, i256, -1); try testArgs(i128, i256, 0); - try testArgs(u128, i256, -1 << 255); - try testArgs(u128, i256, -1); - try testArgs(u128, i256, 0); try testArgs(i256, i256, -1 << 255); try testArgs(i256, i256, -1); try testArgs(i256, i256, 0); - try testArgs(u256, i256, -1 << 255); - try testArgs(u256, i256, -1); - try testArgs(u256, i256, 0); try testArgs(i512, i256, -1 << 255); try testArgs(i512, i256, -1); try testArgs(i512, i256, 0); - try testArgs(u512, i256, -1 << 255); - try testArgs(u512, i256, -1); - try testArgs(u512, i256, 0); try testArgs(i1024, i256, -1 << 255); try testArgs(i1024, i256, -1); try testArgs(i1024, i256, 0); - try testArgs(u1024, i256, -1 << 255); - try testArgs(u1024, i256, -1); - try testArgs(u1024, i256, 0); - try testArgs(i8, u256, 0); - try testArgs(i8, u256, 1 << 0); - try testArgs(i8, u256, 1 << 255); try testArgs(u8, u256, 0); try testArgs(u8, u256, 1 << 0); try testArgs(u8, u256, 1 << 255); - try testArgs(i16, u256, 0); - try testArgs(i16, u256, 1 << 0); - try testArgs(i16, u256, 1 << 255); try testArgs(u16, u256, 0); try testArgs(u16, u256, 1 << 0); try testArgs(u16, u256, 1 << 255); - try testArgs(i32, u256, 0); - try testArgs(i32, u256, 1 << 0); - try testArgs(i32, u256, 1 << 255); try testArgs(u32, u256, 0); try testArgs(u32, u256, 1 << 0); try testArgs(u32, u256, 1 << 255); - try testArgs(i64, u256, 0); - try testArgs(i64, u256, 1 << 0); - try testArgs(i64, u256, 1 << 255); try testArgs(u64, u256, 0); try testArgs(u64, u256, 1 << 0); try testArgs(u64, u256, 1 << 255); - try testArgs(i128, u256, 0); - try testArgs(i128, u256, 1 << 0); - try testArgs(i128, u256, 1 << 255); try testArgs(u128, u256, 0); try testArgs(u128, u256, 1 << 0); try testArgs(u128, u256, 1 << 255); - try testArgs(i256, u256, 0); - try testArgs(i256, u256, 1 << 0); - try testArgs(i256, u256, 1 << 255); try testArgs(u256, u256, 0); try testArgs(u256, u256, 1 << 0); try testArgs(u256, u256, 1 << 255); - try testArgs(i512, u256, 0); - try testArgs(i512, u256, 1 << 0); - try testArgs(i512, u256, 1 << 255); try testArgs(u512, u256, 0); try testArgs(u512, u256, 1 << 0); try testArgs(u512, u256, 1 << 255); - try testArgs(i1024, u256, 0); - try testArgs(i1024, u256, 1 << 0); - try testArgs(i1024, u256, 1 << 255); try testArgs(u1024, u256, 0); try testArgs(u1024, u256, 1 << 0); try testArgs(u1024, u256, 1 << 255); @@ -4950,96 +2844,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i257, -1 << 256); try testArgs(i8, i257, -1); try testArgs(i8, i257, 0); - try testArgs(u8, i257, -1 << 256); - try testArgs(u8, i257, -1); - try testArgs(u8, i257, 0); try testArgs(i16, i257, -1 << 256); try testArgs(i16, i257, -1); try testArgs(i16, i257, 0); - try testArgs(u16, i257, -1 << 256); - try testArgs(u16, i257, -1); - try testArgs(u16, i257, 0); try testArgs(i32, i257, -1 << 256); try testArgs(i32, i257, -1); try testArgs(i32, i257, 0); - try testArgs(u32, i257, -1 << 256); - try testArgs(u32, i257, -1); - try testArgs(u32, i257, 0); try testArgs(i64, i257, -1 << 256); try testArgs(i64, i257, -1); try testArgs(i64, i257, 0); - try testArgs(u64, i257, -1 << 256); - try testArgs(u64, i257, -1); - try testArgs(u64, i257, 0); try testArgs(i128, i257, -1 << 256); try testArgs(i128, i257, -1); try testArgs(i128, i257, 0); - try testArgs(u128, i257, -1 << 256); - try testArgs(u128, i257, -1); - try testArgs(u128, i257, 0); try testArgs(i256, i257, -1 << 256); try testArgs(i256, i257, -1); try testArgs(i256, i257, 0); - try testArgs(u256, i257, -1 << 256); - try testArgs(u256, i257, -1); - try testArgs(u256, i257, 0); try testArgs(i512, i257, -1 << 256); try testArgs(i512, i257, -1); try testArgs(i512, i257, 0); - try testArgs(u512, i257, -1 << 256); - try testArgs(u512, i257, -1); - try testArgs(u512, i257, 0); try testArgs(i1024, i257, -1 << 256); try testArgs(i1024, i257, -1); try testArgs(i1024, i257, 0); - try testArgs(u1024, i257, -1 << 256); - try testArgs(u1024, i257, -1); - try testArgs(u1024, i257, 0); - try testArgs(i8, u257, 0); - try testArgs(i8, u257, 1 << 0); - try testArgs(i8, u257, 1 << 256); try testArgs(u8, u257, 0); try testArgs(u8, u257, 1 << 0); try testArgs(u8, u257, 1 << 256); - try testArgs(i16, u257, 0); - try testArgs(i16, u257, 1 << 0); - try testArgs(i16, u257, 1 << 256); try testArgs(u16, u257, 0); try testArgs(u16, u257, 1 << 0); try testArgs(u16, u257, 1 << 256); - try testArgs(i32, u257, 0); - try testArgs(i32, u257, 1 << 0); - try testArgs(i32, u257, 1 << 256); try testArgs(u32, u257, 0); try testArgs(u32, u257, 1 << 0); try testArgs(u32, u257, 1 << 256); - try testArgs(i64, u257, 0); - try testArgs(i64, u257, 1 << 0); - try testArgs(i64, u257, 1 << 256); try testArgs(u64, u257, 0); try testArgs(u64, u257, 1 << 0); try testArgs(u64, u257, 1 << 256); - try testArgs(i128, u257, 0); - try testArgs(i128, u257, 1 << 0); - try testArgs(i128, u257, 1 << 256); try testArgs(u128, u257, 0); try testArgs(u128, u257, 1 << 0); try testArgs(u128, u257, 1 << 256); - try testArgs(i256, u257, 0); - try testArgs(i256, u257, 1 << 0); - try testArgs(i256, u257, 1 << 256); try testArgs(u256, u257, 0); try testArgs(u256, u257, 1 << 0); try testArgs(u256, u257, 1 << 256); - try testArgs(i512, u257, 0); - try testArgs(i512, u257, 1 << 0); - try testArgs(i512, u257, 1 << 256); try testArgs(u512, u257, 0); try testArgs(u512, u257, 1 << 0); try testArgs(u512, u257, 1 << 256); - try testArgs(i1024, u257, 0); - try testArgs(i1024, u257, 1 << 0); - try testArgs(i1024, u257, 1 << 256); try testArgs(u1024, u257, 0); try testArgs(u1024, u257, 1 << 0); try testArgs(u1024, u257, 1 << 256); @@ -5047,96 +2893,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i511, -1 << 510); try testArgs(i8, i511, -1); try testArgs(i8, i511, 0); - try testArgs(u8, i511, -1 << 510); - try testArgs(u8, i511, -1); - try testArgs(u8, i511, 0); try testArgs(i16, i511, -1 << 510); try testArgs(i16, i511, -1); try testArgs(i16, i511, 0); - try testArgs(u16, i511, -1 << 510); - try testArgs(u16, i511, -1); - try testArgs(u16, i511, 0); try testArgs(i32, i511, -1 << 510); try testArgs(i32, i511, -1); try testArgs(i32, i511, 0); - try testArgs(u32, i511, -1 << 510); - try testArgs(u32, i511, -1); - try testArgs(u32, i511, 0); try testArgs(i64, i511, -1 << 510); try testArgs(i64, i511, -1); try testArgs(i64, i511, 0); - try testArgs(u64, i511, -1 << 510); - try testArgs(u64, i511, -1); - try testArgs(u64, i511, 0); try testArgs(i128, i511, -1 << 510); try testArgs(i128, i511, -1); try testArgs(i128, i511, 0); - try testArgs(u128, i511, -1 << 510); - try testArgs(u128, i511, -1); - try testArgs(u128, i511, 0); try testArgs(i256, i511, -1 << 510); try testArgs(i256, i511, -1); try testArgs(i256, i511, 0); - try testArgs(u256, i511, -1 << 510); - try testArgs(u256, i511, -1); - try testArgs(u256, i511, 0); try testArgs(i512, i511, -1 << 510); try testArgs(i512, i511, -1); try testArgs(i512, i511, 0); - try testArgs(u512, i511, -1 << 510); - try testArgs(u512, i511, -1); - try testArgs(u512, i511, 0); try testArgs(i1024, i511, -1 << 510); try testArgs(i1024, i511, -1); try testArgs(i1024, i511, 0); - try testArgs(u1024, i511, -1 << 510); - try testArgs(u1024, i511, -1); - try testArgs(u1024, i511, 0); - try testArgs(i8, u511, 0); - try testArgs(i8, u511, 1 << 0); - try testArgs(i8, u511, 1 << 510); try testArgs(u8, u511, 0); try testArgs(u8, u511, 1 << 0); try testArgs(u8, u511, 1 << 510); - try testArgs(i16, u511, 0); - try testArgs(i16, u511, 1 << 0); - try testArgs(i16, u511, 1 << 510); try testArgs(u16, u511, 0); try testArgs(u16, u511, 1 << 0); try testArgs(u16, u511, 1 << 510); - try testArgs(i32, u511, 0); - try testArgs(i32, u511, 1 << 0); - try testArgs(i32, u511, 1 << 510); try testArgs(u32, u511, 0); try testArgs(u32, u511, 1 << 0); try testArgs(u32, u511, 1 << 510); - try testArgs(i64, u511, 0); - try testArgs(i64, u511, 1 << 0); - try testArgs(i64, u511, 1 << 510); try testArgs(u64, u511, 0); try testArgs(u64, u511, 1 << 0); try testArgs(u64, u511, 1 << 510); - try testArgs(i128, u511, 0); - try testArgs(i128, u511, 1 << 0); - try testArgs(i128, u511, 1 << 510); try testArgs(u128, u511, 0); try testArgs(u128, u511, 1 << 0); try testArgs(u128, u511, 1 << 510); - try testArgs(i256, u511, 0); - try testArgs(i256, u511, 1 << 0); - try testArgs(i256, u511, 1 << 510); try testArgs(u256, u511, 0); try testArgs(u256, u511, 1 << 0); try testArgs(u256, u511, 1 << 510); - try testArgs(i512, u511, 0); - try testArgs(i512, u511, 1 << 0); - try testArgs(i512, u511, 1 << 510); try testArgs(u512, u511, 0); try testArgs(u512, u511, 1 << 0); try testArgs(u512, u511, 1 << 510); - try testArgs(i1024, u511, 0); - try testArgs(i1024, u511, 1 << 0); - try testArgs(i1024, u511, 1 << 510); try testArgs(u1024, u511, 0); try testArgs(u1024, u511, 1 << 0); try testArgs(u1024, u511, 1 << 510); @@ -5144,96 +2942,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i512, -1 << 511); try testArgs(i8, i512, -1); try testArgs(i8, i512, 0); - try testArgs(u8, i512, -1 << 511); - try testArgs(u8, i512, -1); - try testArgs(u8, i512, 0); try testArgs(i16, i512, -1 << 511); try testArgs(i16, i512, -1); try testArgs(i16, i512, 0); - try testArgs(u16, i512, -1 << 511); - try testArgs(u16, i512, -1); - try testArgs(u16, i512, 0); try testArgs(i32, i512, -1 << 511); try testArgs(i32, i512, -1); try testArgs(i32, i512, 0); - try testArgs(u32, i512, -1 << 511); - try testArgs(u32, i512, -1); - try testArgs(u32, i512, 0); try testArgs(i64, i512, -1 << 511); try testArgs(i64, i512, -1); try testArgs(i64, i512, 0); - try testArgs(u64, i512, -1 << 511); - try testArgs(u64, i512, -1); - try testArgs(u64, i512, 0); try testArgs(i128, i512, -1 << 511); try testArgs(i128, i512, -1); try testArgs(i128, i512, 0); - try testArgs(u128, i512, -1 << 511); - try testArgs(u128, i512, -1); - try testArgs(u128, i512, 0); try testArgs(i256, i512, -1 << 511); try testArgs(i256, i512, -1); try testArgs(i256, i512, 0); - try testArgs(u256, i512, -1 << 511); - try testArgs(u256, i512, -1); - try testArgs(u256, i512, 0); try testArgs(i512, i512, -1 << 511); try testArgs(i512, i512, -1); try testArgs(i512, i512, 0); - try testArgs(u512, i512, -1 << 511); - try testArgs(u512, i512, -1); - try testArgs(u512, i512, 0); try testArgs(i1024, i512, -1 << 511); try testArgs(i1024, i512, -1); try testArgs(i1024, i512, 0); - try testArgs(u1024, i512, -1 << 511); - try testArgs(u1024, i512, -1); - try testArgs(u1024, i512, 0); - try testArgs(i8, u512, 0); - try testArgs(i8, u512, 1 << 0); - try testArgs(i8, u512, 1 << 511); try testArgs(u8, u512, 0); try testArgs(u8, u512, 1 << 0); try testArgs(u8, u512, 1 << 511); - try testArgs(i16, u512, 0); - try testArgs(i16, u512, 1 << 0); - try testArgs(i16, u512, 1 << 511); try testArgs(u16, u512, 0); try testArgs(u16, u512, 1 << 0); try testArgs(u16, u512, 1 << 511); - try testArgs(i32, u512, 0); - try testArgs(i32, u512, 1 << 0); - try testArgs(i32, u512, 1 << 511); try testArgs(u32, u512, 0); try testArgs(u32, u512, 1 << 0); try testArgs(u32, u512, 1 << 511); - try testArgs(i64, u512, 0); - try testArgs(i64, u512, 1 << 0); - try testArgs(i64, u512, 1 << 511); try testArgs(u64, u512, 0); try testArgs(u64, u512, 1 << 0); try testArgs(u64, u512, 1 << 511); - try testArgs(i128, u512, 0); - try testArgs(i128, u512, 1 << 0); - try testArgs(i128, u512, 1 << 511); try testArgs(u128, u512, 0); try testArgs(u128, u512, 1 << 0); try testArgs(u128, u512, 1 << 511); - try testArgs(i256, u512, 0); - try testArgs(i256, u512, 1 << 0); - try testArgs(i256, u512, 1 << 511); try testArgs(u256, u512, 0); try testArgs(u256, u512, 1 << 0); try testArgs(u256, u512, 1 << 511); - try testArgs(i512, u512, 0); - try testArgs(i512, u512, 1 << 0); - try testArgs(i512, u512, 1 << 511); try testArgs(u512, u512, 0); try testArgs(u512, u512, 1 << 0); try testArgs(u512, u512, 1 << 511); - try testArgs(i1024, u512, 0); - try testArgs(i1024, u512, 1 << 0); - try testArgs(i1024, u512, 1 << 511); try testArgs(u1024, u512, 0); try testArgs(u1024, u512, 1 << 0); try testArgs(u1024, u512, 1 << 511); @@ -5241,96 +2991,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i513, -1 << 512); try testArgs(i8, i513, -1); try testArgs(i8, i513, 0); - try testArgs(u8, i513, -1 << 512); - try testArgs(u8, i513, -1); - try testArgs(u8, i513, 0); try testArgs(i16, i513, -1 << 512); try testArgs(i16, i513, -1); try testArgs(i16, i513, 0); - try testArgs(u16, i513, -1 << 512); - try testArgs(u16, i513, -1); - try testArgs(u16, i513, 0); try testArgs(i32, i513, -1 << 512); try testArgs(i32, i513, -1); try testArgs(i32, i513, 0); - try testArgs(u32, i513, -1 << 512); - try testArgs(u32, i513, -1); - try testArgs(u32, i513, 0); try testArgs(i64, i513, -1 << 512); try testArgs(i64, i513, -1); try testArgs(i64, i513, 0); - try testArgs(u64, i513, -1 << 512); - try testArgs(u64, i513, -1); - try testArgs(u64, i513, 0); try testArgs(i128, i513, -1 << 512); try testArgs(i128, i513, -1); try testArgs(i128, i513, 0); - try testArgs(u128, i513, -1 << 512); - try testArgs(u128, i513, -1); - try testArgs(u128, i513, 0); try testArgs(i256, i513, -1 << 512); try testArgs(i256, i513, -1); try testArgs(i256, i513, 0); - try testArgs(u256, i513, -1 << 512); - try testArgs(u256, i513, -1); - try testArgs(u256, i513, 0); try testArgs(i512, i513, -1 << 512); try testArgs(i512, i513, -1); try testArgs(i512, i513, 0); - try testArgs(u512, i513, -1 << 512); - try testArgs(u512, i513, -1); - try testArgs(u512, i513, 0); try testArgs(i1024, i513, -1 << 512); try testArgs(i1024, i513, -1); try testArgs(i1024, i513, 0); - try testArgs(u1024, i513, -1 << 512); - try testArgs(u1024, i513, -1); - try testArgs(u1024, i513, 0); - try testArgs(i8, u513, 0); - try testArgs(i8, u513, 1 << 0); - try testArgs(i8, u513, 1 << 512); try testArgs(u8, u513, 0); try testArgs(u8, u513, 1 << 0); try testArgs(u8, u513, 1 << 512); - try testArgs(i16, u513, 0); - try testArgs(i16, u513, 1 << 0); - try testArgs(i16, u513, 1 << 512); try testArgs(u16, u513, 0); try testArgs(u16, u513, 1 << 0); try testArgs(u16, u513, 1 << 512); - try testArgs(i32, u513, 0); - try testArgs(i32, u513, 1 << 0); - try testArgs(i32, u513, 1 << 512); try testArgs(u32, u513, 0); try testArgs(u32, u513, 1 << 0); try testArgs(u32, u513, 1 << 512); - try testArgs(i64, u513, 0); - try testArgs(i64, u513, 1 << 0); - try testArgs(i64, u513, 1 << 512); try testArgs(u64, u513, 0); try testArgs(u64, u513, 1 << 0); try testArgs(u64, u513, 1 << 512); - try testArgs(i128, u513, 0); - try testArgs(i128, u513, 1 << 0); - try testArgs(i128, u513, 1 << 512); try testArgs(u128, u513, 0); try testArgs(u128, u513, 1 << 0); try testArgs(u128, u513, 1 << 512); - try testArgs(i256, u513, 0); - try testArgs(i256, u513, 1 << 0); - try testArgs(i256, u513, 1 << 512); try testArgs(u256, u513, 0); try testArgs(u256, u513, 1 << 0); try testArgs(u256, u513, 1 << 512); - try testArgs(i512, u513, 0); - try testArgs(i512, u513, 1 << 0); - try testArgs(i512, u513, 1 << 512); try testArgs(u512, u513, 0); try testArgs(u512, u513, 1 << 0); try testArgs(u512, u513, 1 << 512); - try testArgs(i1024, u513, 0); - try testArgs(i1024, u513, 1 << 0); - try testArgs(i1024, u513, 1 << 512); try testArgs(u1024, u513, 0); try testArgs(u1024, u513, 1 << 0); try testArgs(u1024, u513, 1 << 512); @@ -5338,96 +3040,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i1023, -1 << 1022); try testArgs(i8, i1023, -1); try testArgs(i8, i1023, 0); - try testArgs(u8, i1023, -1 << 1022); - try testArgs(u8, i1023, -1); - try testArgs(u8, i1023, 0); try testArgs(i16, i1023, -1 << 1022); try testArgs(i16, i1023, -1); try testArgs(i16, i1023, 0); - try testArgs(u16, i1023, -1 << 1022); - try testArgs(u16, i1023, -1); - try testArgs(u16, i1023, 0); try testArgs(i32, i1023, -1 << 1022); try testArgs(i32, i1023, -1); try testArgs(i32, i1023, 0); - try testArgs(u32, i1023, -1 << 1022); - try testArgs(u32, i1023, -1); - try testArgs(u32, i1023, 0); try testArgs(i64, i1023, -1 << 1022); try testArgs(i64, i1023, -1); try testArgs(i64, i1023, 0); - try testArgs(u64, i1023, -1 << 1022); - try testArgs(u64, i1023, -1); - try testArgs(u64, i1023, 0); try testArgs(i128, i1023, -1 << 1022); try testArgs(i128, i1023, -1); try testArgs(i128, i1023, 0); - try testArgs(u128, i1023, -1 << 1022); - try testArgs(u128, i1023, -1); - try testArgs(u128, i1023, 0); try testArgs(i256, i1023, -1 << 1022); try testArgs(i256, i1023, -1); try testArgs(i256, i1023, 0); - try testArgs(u256, i1023, -1 << 1022); - try testArgs(u256, i1023, -1); - try testArgs(u256, i1023, 0); try testArgs(i512, i1023, -1 << 1022); try testArgs(i512, i1023, -1); try testArgs(i512, i1023, 0); - try testArgs(u512, i1023, -1 << 1022); - try testArgs(u512, i1023, -1); - try testArgs(u512, i1023, 0); try testArgs(i1024, i1023, -1 << 1022); try testArgs(i1024, i1023, -1); try testArgs(i1024, i1023, 0); - try testArgs(u1024, i1023, -1 << 1022); - try testArgs(u1024, i1023, -1); - try testArgs(u1024, i1023, 0); - try testArgs(i8, u1023, 0); - try testArgs(i8, u1023, 1 << 0); - try testArgs(i8, u1023, 1 << 1022); try testArgs(u8, u1023, 0); try testArgs(u8, u1023, 1 << 0); try testArgs(u8, u1023, 1 << 1022); - try testArgs(i16, u1023, 0); - try testArgs(i16, u1023, 1 << 0); - try testArgs(i16, u1023, 1 << 1022); try testArgs(u16, u1023, 0); try testArgs(u16, u1023, 1 << 0); try testArgs(u16, u1023, 1 << 1022); - try testArgs(i32, u1023, 0); - try testArgs(i32, u1023, 1 << 0); - try testArgs(i32, u1023, 1 << 1022); try testArgs(u32, u1023, 0); try testArgs(u32, u1023, 1 << 0); try testArgs(u32, u1023, 1 << 1022); - try testArgs(i64, u1023, 0); - try testArgs(i64, u1023, 1 << 0); - try testArgs(i64, u1023, 1 << 1022); try testArgs(u64, u1023, 0); try testArgs(u64, u1023, 1 << 0); try testArgs(u64, u1023, 1 << 1022); - try testArgs(i128, u1023, 0); - try testArgs(i128, u1023, 1 << 0); - try testArgs(i128, u1023, 1 << 1022); try testArgs(u128, u1023, 0); try testArgs(u128, u1023, 1 << 0); try testArgs(u128, u1023, 1 << 1022); - try testArgs(i256, u1023, 0); - try testArgs(i256, u1023, 1 << 0); - try testArgs(i256, u1023, 1 << 1022); try testArgs(u256, u1023, 0); try testArgs(u256, u1023, 1 << 0); try testArgs(u256, u1023, 1 << 1022); - try testArgs(i512, u1023, 0); - try testArgs(i512, u1023, 1 << 0); - try testArgs(i512, u1023, 1 << 1022); try testArgs(u512, u1023, 0); try testArgs(u512, u1023, 1 << 0); try testArgs(u512, u1023, 1 << 1022); - try testArgs(i1024, u1023, 0); - try testArgs(i1024, u1023, 1 << 0); - try testArgs(i1024, u1023, 1 << 1022); try testArgs(u1024, u1023, 0); try testArgs(u1024, u1023, 1 << 0); try testArgs(u1024, u1023, 1 << 1022); @@ -5435,96 +3089,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i1024, -1 << 1023); try testArgs(i8, i1024, -1); try testArgs(i8, i1024, 0); - try testArgs(u8, i1024, -1 << 1023); - try testArgs(u8, i1024, -1); - try testArgs(u8, i1024, 0); try testArgs(i16, i1024, -1 << 1023); try testArgs(i16, i1024, -1); try testArgs(i16, i1024, 0); - try testArgs(u16, i1024, -1 << 1023); - try testArgs(u16, i1024, -1); - try testArgs(u16, i1024, 0); try testArgs(i32, i1024, -1 << 1023); try testArgs(i32, i1024, -1); try testArgs(i32, i1024, 0); - try testArgs(u32, i1024, -1 << 1023); - try testArgs(u32, i1024, -1); - try testArgs(u32, i1024, 0); try testArgs(i64, i1024, -1 << 1023); try testArgs(i64, i1024, -1); try testArgs(i64, i1024, 0); - try testArgs(u64, i1024, -1 << 1023); - try testArgs(u64, i1024, -1); - try testArgs(u64, i1024, 0); try testArgs(i128, i1024, -1 << 1023); try testArgs(i128, i1024, -1); try testArgs(i128, i1024, 0); - try testArgs(u128, i1024, -1 << 1023); - try testArgs(u128, i1024, -1); - try testArgs(u128, i1024, 0); try testArgs(i256, i1024, -1 << 1023); try testArgs(i256, i1024, -1); try testArgs(i256, i1024, 0); - try testArgs(u256, i1024, -1 << 1023); - try testArgs(u256, i1024, -1); - try testArgs(u256, i1024, 0); try testArgs(i512, i1024, -1 << 1023); try testArgs(i512, i1024, -1); try testArgs(i512, i1024, 0); - try testArgs(u512, i1024, -1 << 1023); - try testArgs(u512, i1024, -1); - try testArgs(u512, i1024, 0); try testArgs(i1024, i1024, -1 << 1023); try testArgs(i1024, i1024, -1); try testArgs(i1024, i1024, 0); - try testArgs(u1024, i1024, -1 << 1023); - try testArgs(u1024, i1024, -1); - try testArgs(u1024, i1024, 0); - try testArgs(i8, u1024, 0); - try testArgs(i8, u1024, 1 << 0); - try testArgs(i8, u1024, 1 << 1023); try testArgs(u8, u1024, 0); try testArgs(u8, u1024, 1 << 0); try testArgs(u8, u1024, 1 << 1023); - try testArgs(i16, u1024, 0); - try testArgs(i16, u1024, 1 << 0); - try testArgs(i16, u1024, 1 << 1023); try testArgs(u16, u1024, 0); try testArgs(u16, u1024, 1 << 0); try testArgs(u16, u1024, 1 << 1023); - try testArgs(i32, u1024, 0); - try testArgs(i32, u1024, 1 << 0); - try testArgs(i32, u1024, 1 << 1023); try testArgs(u32, u1024, 0); try testArgs(u32, u1024, 1 << 0); try testArgs(u32, u1024, 1 << 1023); - try testArgs(i64, u1024, 0); - try testArgs(i64, u1024, 1 << 0); - try testArgs(i64, u1024, 1 << 1023); try testArgs(u64, u1024, 0); try testArgs(u64, u1024, 1 << 0); try testArgs(u64, u1024, 1 << 1023); - try testArgs(i128, u1024, 0); - try testArgs(i128, u1024, 1 << 0); - try testArgs(i128, u1024, 1 << 1023); try testArgs(u128, u1024, 0); try testArgs(u128, u1024, 1 << 0); try testArgs(u128, u1024, 1 << 1023); - try testArgs(i256, u1024, 0); - try testArgs(i256, u1024, 1 << 0); - try testArgs(i256, u1024, 1 << 1023); try testArgs(u256, u1024, 0); try testArgs(u256, u1024, 1 << 0); try testArgs(u256, u1024, 1 << 1023); - try testArgs(i512, u1024, 0); - try testArgs(i512, u1024, 1 << 0); - try testArgs(i512, u1024, 1 << 1023); try testArgs(u512, u1024, 0); try testArgs(u512, u1024, 1 << 0); try testArgs(u512, u1024, 1 << 1023); - try testArgs(i1024, u1024, 0); - try testArgs(i1024, u1024, 1 << 0); - try testArgs(i1024, u1024, 1 << 1023); try testArgs(u1024, u1024, 0); try testArgs(u1024, u1024, 1 << 0); try testArgs(u1024, u1024, 1 << 1023); @@ -5532,99 +3138,1606 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i1025, -1 << 1024); try testArgs(i8, i1025, -1); try testArgs(i8, i1025, 0); - try testArgs(u8, i1025, -1 << 1024); - try testArgs(u8, i1025, -1); - try testArgs(u8, i1025, 0); try testArgs(i16, i1025, -1 << 1024); try testArgs(i16, i1025, -1); try testArgs(i16, i1025, 0); - try testArgs(u16, i1025, -1 << 1024); - try testArgs(u16, i1025, -1); - try testArgs(u16, i1025, 0); try testArgs(i32, i1025, -1 << 1024); try testArgs(i32, i1025, -1); try testArgs(i32, i1025, 0); - try testArgs(u32, i1025, -1 << 1024); - try testArgs(u32, i1025, -1); - try testArgs(u32, i1025, 0); try testArgs(i64, i1025, -1 << 1024); try testArgs(i64, i1025, -1); try testArgs(i64, i1025, 0); - try testArgs(u64, i1025, -1 << 1024); - try testArgs(u64, i1025, -1); - try testArgs(u64, i1025, 0); try testArgs(i128, i1025, -1 << 1024); try testArgs(i128, i1025, -1); try testArgs(i128, i1025, 0); - try testArgs(u128, i1025, -1 << 1024); - try testArgs(u128, i1025, -1); - try testArgs(u128, i1025, 0); try testArgs(i256, i1025, -1 << 1024); try testArgs(i256, i1025, -1); try testArgs(i256, i1025, 0); - try testArgs(u256, i1025, -1 << 1024); - try testArgs(u256, i1025, -1); - try testArgs(u256, i1025, 0); try testArgs(i512, i1025, -1 << 1024); try testArgs(i512, i1025, -1); try testArgs(i512, i1025, 0); - try testArgs(u512, i1025, -1 << 1024); - try testArgs(u512, i1025, -1); - try testArgs(u512, i1025, 0); try testArgs(i1024, i1025, -1 << 1024); try testArgs(i1024, i1025, -1); try testArgs(i1024, i1025, 0); + try testArgs(u8, u1025, 0); + try testArgs(u8, u1025, 1 << 0); + try testArgs(u8, u1025, 1 << 1024); + try testArgs(u16, u1025, 0); + try testArgs(u16, u1025, 1 << 0); + try testArgs(u16, u1025, 1 << 1024); + try testArgs(u32, u1025, 0); + try testArgs(u32, u1025, 1 << 0); + try testArgs(u32, u1025, 1 << 1024); + try testArgs(u64, u1025, 0); + try testArgs(u64, u1025, 1 << 0); + try testArgs(u64, u1025, 1 << 1024); + try testArgs(u128, u1025, 0); + try testArgs(u128, u1025, 1 << 0); + try testArgs(u128, u1025, 1 << 1024); + try testArgs(u256, u1025, 0); + try testArgs(u256, u1025, 1 << 0); + try testArgs(u256, u1025, 1 << 1024); + try testArgs(u512, u1025, 0); + try testArgs(u512, u1025, 1 << 0); + try testArgs(u512, u1025, 1 << 1024); + try testArgs(u1024, u1025, 0); + try testArgs(u1024, u1025, 1 << 0); + try testArgs(u1024, u1025, 1 << 1024); + } + fn testInts() !void { + try testSameSignednessInts(); + + try testArgs(u8, i1, -1); + try testArgs(u8, i1, 0); + try testArgs(u16, i1, -1); + try testArgs(u16, i1, 0); + try testArgs(u32, i1, -1); + try testArgs(u32, i1, 0); + try testArgs(u64, i1, -1); + try testArgs(u64, i1, 0); + try testArgs(u128, i1, -1); + try testArgs(u128, i1, 0); + try testArgs(u256, i1, -1); + try testArgs(u256, i1, 0); + try testArgs(u512, i1, -1); + try testArgs(u512, i1, 0); + try testArgs(u1024, i1, -1); + try testArgs(u1024, i1, 0); + try testArgs(i8, u1, 0); + try testArgs(i8, u1, 1 << 0); + try testArgs(i16, u1, 0); + try testArgs(i16, u1, 1 << 0); + try testArgs(i32, u1, 0); + try testArgs(i32, u1, 1 << 0); + try testArgs(i64, u1, 0); + try testArgs(i64, u1, 1 << 0); + try testArgs(i128, u1, 0); + try testArgs(i128, u1, 1 << 0); + try testArgs(i256, u1, 0); + try testArgs(i256, u1, 1 << 0); + try testArgs(i512, u1, 0); + try testArgs(i512, u1, 1 << 0); + try testArgs(i1024, u1, 0); + try testArgs(i1024, u1, 1 << 0); + + try testArgs(u8, i2, -1 << 1); + try testArgs(u8, i2, -1); + try testArgs(u8, i2, 0); + try testArgs(u16, i2, -1 << 1); + try testArgs(u16, i2, -1); + try testArgs(u16, i2, 0); + try testArgs(u32, i2, -1 << 1); + try testArgs(u32, i2, -1); + try testArgs(u32, i2, 0); + try testArgs(u64, i2, -1 << 1); + try testArgs(u64, i2, -1); + try testArgs(u64, i2, 0); + try testArgs(u128, i2, -1 << 1); + try testArgs(u128, i2, -1); + try testArgs(u128, i2, 0); + try testArgs(u256, i2, -1 << 1); + try testArgs(u256, i2, -1); + try testArgs(u256, i2, 0); + try testArgs(u512, i2, -1 << 1); + try testArgs(u512, i2, -1); + try testArgs(u512, i2, 0); + try testArgs(u1024, i2, -1 << 1); + try testArgs(u1024, i2, -1); + try testArgs(u1024, i2, 0); + try testArgs(i8, u2, 0); + try testArgs(i8, u2, 1 << 0); + try testArgs(i8, u2, 1 << 1); + try testArgs(i16, u2, 0); + try testArgs(i16, u2, 1 << 0); + try testArgs(i16, u2, 1 << 1); + try testArgs(i32, u2, 0); + try testArgs(i32, u2, 1 << 0); + try testArgs(i32, u2, 1 << 1); + try testArgs(i64, u2, 0); + try testArgs(i64, u2, 1 << 0); + try testArgs(i64, u2, 1 << 1); + try testArgs(i128, u2, 0); + try testArgs(i128, u2, 1 << 0); + try testArgs(i128, u2, 1 << 1); + try testArgs(i256, u2, 0); + try testArgs(i256, u2, 1 << 0); + try testArgs(i256, u2, 1 << 1); + try testArgs(i512, u2, 0); + try testArgs(i512, u2, 1 << 0); + try testArgs(i512, u2, 1 << 1); + try testArgs(i1024, u2, 0); + try testArgs(i1024, u2, 1 << 0); + try testArgs(i1024, u2, 1 << 1); + + try testArgs(u8, i3, -1 << 2); + try testArgs(u8, i3, -1); + try testArgs(u8, i3, 0); + try testArgs(u16, i3, -1 << 2); + try testArgs(u16, i3, -1); + try testArgs(u16, i3, 0); + try testArgs(u32, i3, -1 << 2); + try testArgs(u32, i3, -1); + try testArgs(u32, i3, 0); + try testArgs(u64, i3, -1 << 2); + try testArgs(u64, i3, -1); + try testArgs(u64, i3, 0); + try testArgs(u128, i3, -1 << 2); + try testArgs(u128, i3, -1); + try testArgs(u128, i3, 0); + try testArgs(u256, i3, -1 << 2); + try testArgs(u256, i3, -1); + try testArgs(u256, i3, 0); + try testArgs(u512, i3, -1 << 2); + try testArgs(u512, i3, -1); + try testArgs(u512, i3, 0); + try testArgs(u1024, i3, -1 << 2); + try testArgs(u1024, i3, -1); + try testArgs(u1024, i3, 0); + try testArgs(i8, u3, 0); + try testArgs(i8, u3, 1 << 0); + try testArgs(i8, u3, 1 << 2); + try testArgs(i16, u3, 0); + try testArgs(i16, u3, 1 << 0); + try testArgs(i16, u3, 1 << 2); + try testArgs(i32, u3, 0); + try testArgs(i32, u3, 1 << 0); + try testArgs(i32, u3, 1 << 2); + try testArgs(i64, u3, 0); + try testArgs(i64, u3, 1 << 0); + try testArgs(i64, u3, 1 << 2); + try testArgs(i128, u3, 0); + try testArgs(i128, u3, 1 << 0); + try testArgs(i128, u3, 1 << 2); + try testArgs(i256, u3, 0); + try testArgs(i256, u3, 1 << 0); + try testArgs(i256, u3, 1 << 2); + try testArgs(i512, u3, 0); + try testArgs(i512, u3, 1 << 0); + try testArgs(i512, u3, 1 << 2); + try testArgs(i1024, u3, 0); + try testArgs(i1024, u3, 1 << 0); + try testArgs(i1024, u3, 1 << 2); + + try testArgs(u8, i4, -1 << 3); + try testArgs(u8, i4, -1); + try testArgs(u8, i4, 0); + try testArgs(u16, i4, -1 << 3); + try testArgs(u16, i4, -1); + try testArgs(u16, i4, 0); + try testArgs(u32, i4, -1 << 3); + try testArgs(u32, i4, -1); + try testArgs(u32, i4, 0); + try testArgs(u64, i4, -1 << 3); + try testArgs(u64, i4, -1); + try testArgs(u64, i4, 0); + try testArgs(u128, i4, -1 << 3); + try testArgs(u128, i4, -1); + try testArgs(u128, i4, 0); + try testArgs(u256, i4, -1 << 3); + try testArgs(u256, i4, -1); + try testArgs(u256, i4, 0); + try testArgs(u512, i4, -1 << 3); + try testArgs(u512, i4, -1); + try testArgs(u512, i4, 0); + try testArgs(u1024, i4, -1 << 3); + try testArgs(u1024, i4, -1); + try testArgs(u1024, i4, 0); + try testArgs(i8, u4, 0); + try testArgs(i8, u4, 1 << 0); + try testArgs(i8, u4, 1 << 3); + try testArgs(i16, u4, 0); + try testArgs(i16, u4, 1 << 0); + try testArgs(i16, u4, 1 << 3); + try testArgs(i32, u4, 0); + try testArgs(i32, u4, 1 << 0); + try testArgs(i32, u4, 1 << 3); + try testArgs(i64, u4, 0); + try testArgs(i64, u4, 1 << 0); + try testArgs(i64, u4, 1 << 3); + try testArgs(i128, u4, 0); + try testArgs(i128, u4, 1 << 0); + try testArgs(i128, u4, 1 << 3); + try testArgs(i256, u4, 0); + try testArgs(i256, u4, 1 << 0); + try testArgs(i256, u4, 1 << 3); + try testArgs(i512, u4, 0); + try testArgs(i512, u4, 1 << 0); + try testArgs(i512, u4, 1 << 3); + try testArgs(i1024, u4, 0); + try testArgs(i1024, u4, 1 << 0); + try testArgs(i1024, u4, 1 << 3); + + try testArgs(u8, i5, -1 << 4); + try testArgs(u8, i5, -1); + try testArgs(u8, i5, 0); + try testArgs(u16, i5, -1 << 4); + try testArgs(u16, i5, -1); + try testArgs(u16, i5, 0); + try testArgs(u32, i5, -1 << 4); + try testArgs(u32, i5, -1); + try testArgs(u32, i5, 0); + try testArgs(u64, i5, -1 << 4); + try testArgs(u64, i5, -1); + try testArgs(u64, i5, 0); + try testArgs(u128, i5, -1 << 4); + try testArgs(u128, i5, -1); + try testArgs(u128, i5, 0); + try testArgs(u256, i5, -1 << 4); + try testArgs(u256, i5, -1); + try testArgs(u256, i5, 0); + try testArgs(u512, i5, -1 << 4); + try testArgs(u512, i5, -1); + try testArgs(u512, i5, 0); + try testArgs(u1024, i5, -1 << 4); + try testArgs(u1024, i5, -1); + try testArgs(u1024, i5, 0); + try testArgs(i8, u5, 0); + try testArgs(i8, u5, 1 << 0); + try testArgs(i8, u5, 1 << 4); + try testArgs(i16, u5, 0); + try testArgs(i16, u5, 1 << 0); + try testArgs(i16, u5, 1 << 4); + try testArgs(i32, u5, 0); + try testArgs(i32, u5, 1 << 0); + try testArgs(i32, u5, 1 << 4); + try testArgs(i64, u5, 0); + try testArgs(i64, u5, 1 << 0); + try testArgs(i64, u5, 1 << 4); + try testArgs(i128, u5, 0); + try testArgs(i128, u5, 1 << 0); + try testArgs(i128, u5, 1 << 4); + try testArgs(i256, u5, 0); + try testArgs(i256, u5, 1 << 0); + try testArgs(i256, u5, 1 << 4); + try testArgs(i512, u5, 0); + try testArgs(i512, u5, 1 << 0); + try testArgs(i512, u5, 1 << 4); + try testArgs(i1024, u5, 0); + try testArgs(i1024, u5, 1 << 0); + try testArgs(i1024, u5, 1 << 4); + + try testArgs(u8, i7, -1 << 6); + try testArgs(u8, i7, -1); + try testArgs(u8, i7, 0); + try testArgs(u16, i7, -1 << 6); + try testArgs(u16, i7, -1); + try testArgs(u16, i7, 0); + try testArgs(u32, i7, -1 << 6); + try testArgs(u32, i7, -1); + try testArgs(u32, i7, 0); + try testArgs(u64, i7, -1 << 6); + try testArgs(u64, i7, -1); + try testArgs(u64, i7, 0); + try testArgs(u128, i7, -1 << 6); + try testArgs(u128, i7, -1); + try testArgs(u128, i7, 0); + try testArgs(u256, i7, -1 << 6); + try testArgs(u256, i7, -1); + try testArgs(u256, i7, 0); + try testArgs(u512, i7, -1 << 6); + try testArgs(u512, i7, -1); + try testArgs(u512, i7, 0); + try testArgs(u1024, i7, -1 << 6); + try testArgs(u1024, i7, -1); + try testArgs(u1024, i7, 0); + try testArgs(i8, u7, 0); + try testArgs(i8, u7, 1 << 0); + try testArgs(i8, u7, 1 << 6); + try testArgs(i16, u7, 0); + try testArgs(i16, u7, 1 << 0); + try testArgs(i16, u7, 1 << 6); + try testArgs(i32, u7, 0); + try testArgs(i32, u7, 1 << 0); + try testArgs(i32, u7, 1 << 6); + try testArgs(i64, u7, 0); + try testArgs(i64, u7, 1 << 0); + try testArgs(i64, u7, 1 << 6); + try testArgs(i128, u7, 0); + try testArgs(i128, u7, 1 << 0); + try testArgs(i128, u7, 1 << 6); + try testArgs(i256, u7, 0); + try testArgs(i256, u7, 1 << 0); + try testArgs(i256, u7, 1 << 6); + try testArgs(i512, u7, 0); + try testArgs(i512, u7, 1 << 0); + try testArgs(i512, u7, 1 << 6); + try testArgs(i1024, u7, 0); + try testArgs(i1024, u7, 1 << 0); + try testArgs(i1024, u7, 1 << 6); + + try testArgs(u8, i8, -1 << 7); + try testArgs(u8, i8, -1); + try testArgs(u8, i8, 0); + try testArgs(u16, i8, -1 << 7); + try testArgs(u16, i8, -1); + try testArgs(u16, i8, 0); + try testArgs(u32, i8, -1 << 7); + try testArgs(u32, i8, -1); + try testArgs(u32, i8, 0); + try testArgs(u64, i8, -1 << 7); + try testArgs(u64, i8, -1); + try testArgs(u64, i8, 0); + try testArgs(u128, i8, -1 << 7); + try testArgs(u128, i8, -1); + try testArgs(u128, i8, 0); + try testArgs(u256, i8, -1 << 7); + try testArgs(u256, i8, -1); + try testArgs(u256, i8, 0); + try testArgs(u512, i8, -1 << 7); + try testArgs(u512, i8, -1); + try testArgs(u512, i8, 0); + try testArgs(u1024, i8, -1 << 7); + try testArgs(u1024, i8, -1); + try testArgs(u1024, i8, 0); + try testArgs(i8, u8, 0); + try testArgs(i8, u8, 1 << 0); + try testArgs(i8, u8, 1 << 7); + try testArgs(i16, u8, 0); + try testArgs(i16, u8, 1 << 0); + try testArgs(i16, u8, 1 << 7); + try testArgs(i32, u8, 0); + try testArgs(i32, u8, 1 << 0); + try testArgs(i32, u8, 1 << 7); + try testArgs(i64, u8, 0); + try testArgs(i64, u8, 1 << 0); + try testArgs(i64, u8, 1 << 7); + try testArgs(i128, u8, 0); + try testArgs(i128, u8, 1 << 0); + try testArgs(i128, u8, 1 << 7); + try testArgs(i256, u8, 0); + try testArgs(i256, u8, 1 << 0); + try testArgs(i256, u8, 1 << 7); + try testArgs(i512, u8, 0); + try testArgs(i512, u8, 1 << 0); + try testArgs(i512, u8, 1 << 7); + try testArgs(i1024, u8, 0); + try testArgs(i1024, u8, 1 << 0); + try testArgs(i1024, u8, 1 << 7); + + try testArgs(u8, i9, -1 << 8); + try testArgs(u8, i9, -1); + try testArgs(u8, i9, 0); + try testArgs(u16, i9, -1 << 8); + try testArgs(u16, i9, -1); + try testArgs(u16, i9, 0); + try testArgs(u32, i9, -1 << 8); + try testArgs(u32, i9, -1); + try testArgs(u32, i9, 0); + try testArgs(u64, i9, -1 << 8); + try testArgs(u64, i9, -1); + try testArgs(u64, i9, 0); + try testArgs(u128, i9, -1 << 8); + try testArgs(u128, i9, -1); + try testArgs(u128, i9, 0); + try testArgs(u256, i9, -1 << 8); + try testArgs(u256, i9, -1); + try testArgs(u256, i9, 0); + try testArgs(u512, i9, -1 << 8); + try testArgs(u512, i9, -1); + try testArgs(u512, i9, 0); + try testArgs(u1024, i9, -1 << 8); + try testArgs(u1024, i9, -1); + try testArgs(u1024, i9, 0); + try testArgs(i8, u9, 0); + try testArgs(i8, u9, 1 << 0); + try testArgs(i8, u9, 1 << 8); + try testArgs(i16, u9, 0); + try testArgs(i16, u9, 1 << 0); + try testArgs(i16, u9, 1 << 8); + try testArgs(i32, u9, 0); + try testArgs(i32, u9, 1 << 0); + try testArgs(i32, u9, 1 << 8); + try testArgs(i64, u9, 0); + try testArgs(i64, u9, 1 << 0); + try testArgs(i64, u9, 1 << 8); + try testArgs(i128, u9, 0); + try testArgs(i128, u9, 1 << 0); + try testArgs(i128, u9, 1 << 8); + try testArgs(i256, u9, 0); + try testArgs(i256, u9, 1 << 0); + try testArgs(i256, u9, 1 << 8); + try testArgs(i512, u9, 0); + try testArgs(i512, u9, 1 << 0); + try testArgs(i512, u9, 1 << 8); + try testArgs(i1024, u9, 0); + try testArgs(i1024, u9, 1 << 0); + try testArgs(i1024, u9, 1 << 8); + + try testArgs(u8, i15, -1 << 14); + try testArgs(u8, i15, -1); + try testArgs(u8, i15, 0); + try testArgs(u16, i15, -1 << 14); + try testArgs(u16, i15, -1); + try testArgs(u16, i15, 0); + try testArgs(u32, i15, -1 << 14); + try testArgs(u32, i15, -1); + try testArgs(u32, i15, 0); + try testArgs(u64, i15, -1 << 14); + try testArgs(u64, i15, -1); + try testArgs(u64, i15, 0); + try testArgs(u128, i15, -1 << 14); + try testArgs(u128, i15, -1); + try testArgs(u128, i15, 0); + try testArgs(u256, i15, -1 << 14); + try testArgs(u256, i15, -1); + try testArgs(u256, i15, 0); + try testArgs(u512, i15, -1 << 14); + try testArgs(u512, i15, -1); + try testArgs(u512, i15, 0); + try testArgs(u1024, i15, -1 << 14); + try testArgs(u1024, i15, -1); + try testArgs(u1024, i15, 0); + try testArgs(i8, u15, 0); + try testArgs(i8, u15, 1 << 0); + try testArgs(i8, u15, 1 << 14); + try testArgs(i16, u15, 0); + try testArgs(i16, u15, 1 << 0); + try testArgs(i16, u15, 1 << 14); + try testArgs(i32, u15, 0); + try testArgs(i32, u15, 1 << 0); + try testArgs(i32, u15, 1 << 14); + try testArgs(i64, u15, 0); + try testArgs(i64, u15, 1 << 0); + try testArgs(i64, u15, 1 << 14); + try testArgs(i128, u15, 0); + try testArgs(i128, u15, 1 << 0); + try testArgs(i128, u15, 1 << 14); + try testArgs(i256, u15, 0); + try testArgs(i256, u15, 1 << 0); + try testArgs(i256, u15, 1 << 14); + try testArgs(i512, u15, 0); + try testArgs(i512, u15, 1 << 0); + try testArgs(i512, u15, 1 << 14); + try testArgs(i1024, u15, 0); + try testArgs(i1024, u15, 1 << 0); + try testArgs(i1024, u15, 1 << 14); + + try testArgs(u8, i16, -1 << 15); + try testArgs(u8, i16, -1); + try testArgs(u8, i16, 0); + try testArgs(u16, i16, -1 << 15); + try testArgs(u16, i16, -1); + try testArgs(u16, i16, 0); + try testArgs(u32, i16, -1 << 15); + try testArgs(u32, i16, -1); + try testArgs(u32, i16, 0); + try testArgs(u64, i16, -1 << 15); + try testArgs(u64, i16, -1); + try testArgs(u64, i16, 0); + try testArgs(u128, i16, -1 << 15); + try testArgs(u128, i16, -1); + try testArgs(u128, i16, 0); + try testArgs(u256, i16, -1 << 15); + try testArgs(u256, i16, -1); + try testArgs(u256, i16, 0); + try testArgs(u512, i16, -1 << 15); + try testArgs(u512, i16, -1); + try testArgs(u512, i16, 0); + try testArgs(u1024, i16, -1 << 15); + try testArgs(u1024, i16, -1); + try testArgs(u1024, i16, 0); + try testArgs(i8, u16, 0); + try testArgs(i8, u16, 1 << 0); + try testArgs(i8, u16, 1 << 15); + try testArgs(i16, u16, 0); + try testArgs(i16, u16, 1 << 0); + try testArgs(i16, u16, 1 << 15); + try testArgs(i32, u16, 0); + try testArgs(i32, u16, 1 << 0); + try testArgs(i32, u16, 1 << 15); + try testArgs(i64, u16, 0); + try testArgs(i64, u16, 1 << 0); + try testArgs(i64, u16, 1 << 15); + try testArgs(i128, u16, 0); + try testArgs(i128, u16, 1 << 0); + try testArgs(i128, u16, 1 << 15); + try testArgs(i256, u16, 0); + try testArgs(i256, u16, 1 << 0); + try testArgs(i256, u16, 1 << 15); + try testArgs(i512, u16, 0); + try testArgs(i512, u16, 1 << 0); + try testArgs(i512, u16, 1 << 15); + try testArgs(i1024, u16, 0); + try testArgs(i1024, u16, 1 << 0); + try testArgs(i1024, u16, 1 << 15); + + try testArgs(u8, i17, -1 << 16); + try testArgs(u8, i17, -1); + try testArgs(u8, i17, 0); + try testArgs(u16, i17, -1 << 16); + try testArgs(u16, i17, -1); + try testArgs(u16, i17, 0); + try testArgs(u32, i17, -1 << 16); + try testArgs(u32, i17, -1); + try testArgs(u32, i17, 0); + try testArgs(u64, i17, -1 << 16); + try testArgs(u64, i17, -1); + try testArgs(u64, i17, 0); + try testArgs(u128, i17, -1 << 16); + try testArgs(u128, i17, -1); + try testArgs(u128, i17, 0); + try testArgs(u256, i17, -1 << 16); + try testArgs(u256, i17, -1); + try testArgs(u256, i17, 0); + try testArgs(u512, i17, -1 << 16); + try testArgs(u512, i17, -1); + try testArgs(u512, i17, 0); + try testArgs(u1024, i17, -1 << 16); + try testArgs(u1024, i17, -1); + try testArgs(u1024, i17, 0); + try testArgs(i8, u17, 0); + try testArgs(i8, u17, 1 << 0); + try testArgs(i8, u17, 1 << 16); + try testArgs(i16, u17, 0); + try testArgs(i16, u17, 1 << 0); + try testArgs(i16, u17, 1 << 16); + try testArgs(i32, u17, 0); + try testArgs(i32, u17, 1 << 0); + try testArgs(i32, u17, 1 << 16); + try testArgs(i64, u17, 0); + try testArgs(i64, u17, 1 << 0); + try testArgs(i64, u17, 1 << 16); + try testArgs(i128, u17, 0); + try testArgs(i128, u17, 1 << 0); + try testArgs(i128, u17, 1 << 16); + try testArgs(i256, u17, 0); + try testArgs(i256, u17, 1 << 0); + try testArgs(i256, u17, 1 << 16); + try testArgs(i512, u17, 0); + try testArgs(i512, u17, 1 << 0); + try testArgs(i512, u17, 1 << 16); + try testArgs(i1024, u17, 0); + try testArgs(i1024, u17, 1 << 0); + try testArgs(i1024, u17, 1 << 16); + + try testArgs(u8, i31, -1 << 30); + try testArgs(u8, i31, -1); + try testArgs(u8, i31, 0); + try testArgs(u16, i31, -1 << 30); + try testArgs(u16, i31, -1); + try testArgs(u16, i31, 0); + try testArgs(u32, i31, -1 << 30); + try testArgs(u32, i31, -1); + try testArgs(u32, i31, 0); + try testArgs(u64, i31, -1 << 30); + try testArgs(u64, i31, -1); + try testArgs(u64, i31, 0); + try testArgs(u128, i31, -1 << 30); + try testArgs(u128, i31, -1); + try testArgs(u128, i31, 0); + try testArgs(u256, i31, -1 << 30); + try testArgs(u256, i31, -1); + try testArgs(u256, i31, 0); + try testArgs(u512, i31, -1 << 30); + try testArgs(u512, i31, -1); + try testArgs(u512, i31, 0); + try testArgs(u1024, i31, -1 << 30); + try testArgs(u1024, i31, -1); + try testArgs(u1024, i31, 0); + try testArgs(i8, u31, 0); + try testArgs(i8, u31, 1 << 0); + try testArgs(i8, u31, 1 << 30); + try testArgs(i16, u31, 0); + try testArgs(i16, u31, 1 << 0); + try testArgs(i16, u31, 1 << 30); + try testArgs(i32, u31, 0); + try testArgs(i32, u31, 1 << 0); + try testArgs(i32, u31, 1 << 30); + try testArgs(i64, u31, 0); + try testArgs(i64, u31, 1 << 0); + try testArgs(i64, u31, 1 << 30); + try testArgs(i128, u31, 0); + try testArgs(i128, u31, 1 << 0); + try testArgs(i128, u31, 1 << 30); + try testArgs(i256, u31, 0); + try testArgs(i256, u31, 1 << 0); + try testArgs(i256, u31, 1 << 30); + try testArgs(i512, u31, 0); + try testArgs(i512, u31, 1 << 0); + try testArgs(i512, u31, 1 << 30); + try testArgs(i1024, u31, 0); + try testArgs(i1024, u31, 1 << 0); + try testArgs(i1024, u31, 1 << 30); + + try testArgs(u8, i32, -1 << 31); + try testArgs(u8, i32, -1); + try testArgs(u8, i32, 0); + try testArgs(u16, i32, -1 << 31); + try testArgs(u16, i32, -1); + try testArgs(u16, i32, 0); + try testArgs(u32, i32, -1 << 31); + try testArgs(u32, i32, -1); + try testArgs(u32, i32, 0); + try testArgs(u64, i32, -1 << 31); + try testArgs(u64, i32, -1); + try testArgs(u64, i32, 0); + try testArgs(u128, i32, -1 << 31); + try testArgs(u128, i32, -1); + try testArgs(u128, i32, 0); + try testArgs(u256, i32, -1 << 31); + try testArgs(u256, i32, -1); + try testArgs(u256, i32, 0); + try testArgs(u512, i32, -1 << 31); + try testArgs(u512, i32, -1); + try testArgs(u512, i32, 0); + try testArgs(u1024, i32, -1 << 31); + try testArgs(u1024, i32, -1); + try testArgs(u1024, i32, 0); + try testArgs(i8, u32, 0); + try testArgs(i8, u32, 1 << 0); + try testArgs(i8, u32, 1 << 31); + try testArgs(i16, u32, 0); + try testArgs(i16, u32, 1 << 0); + try testArgs(i16, u32, 1 << 31); + try testArgs(i32, u32, 0); + try testArgs(i32, u32, 1 << 0); + try testArgs(i32, u32, 1 << 31); + try testArgs(i64, u32, 0); + try testArgs(i64, u32, 1 << 0); + try testArgs(i64, u32, 1 << 31); + try testArgs(i128, u32, 0); + try testArgs(i128, u32, 1 << 0); + try testArgs(i128, u32, 1 << 31); + try testArgs(i256, u32, 0); + try testArgs(i256, u32, 1 << 0); + try testArgs(i256, u32, 1 << 31); + try testArgs(i512, u32, 0); + try testArgs(i512, u32, 1 << 0); + try testArgs(i512, u32, 1 << 31); + try testArgs(i1024, u32, 0); + try testArgs(i1024, u32, 1 << 0); + try testArgs(i1024, u32, 1 << 31); + + try testArgs(u8, i33, -1 << 32); + try testArgs(u8, i33, -1); + try testArgs(u8, i33, 0); + try testArgs(u16, i33, -1 << 32); + try testArgs(u16, i33, -1); + try testArgs(u16, i33, 0); + try testArgs(u32, i33, -1 << 32); + try testArgs(u32, i33, -1); + try testArgs(u32, i33, 0); + try testArgs(u64, i33, -1 << 32); + try testArgs(u64, i33, -1); + try testArgs(u64, i33, 0); + try testArgs(u128, i33, -1 << 32); + try testArgs(u128, i33, -1); + try testArgs(u128, i33, 0); + try testArgs(u256, i33, -1 << 32); + try testArgs(u256, i33, -1); + try testArgs(u256, i33, 0); + try testArgs(u512, i33, -1 << 32); + try testArgs(u512, i33, -1); + try testArgs(u512, i33, 0); + try testArgs(u1024, i33, -1 << 32); + try testArgs(u1024, i33, -1); + try testArgs(u1024, i33, 0); + try testArgs(i8, u33, 0); + try testArgs(i8, u33, 1 << 0); + try testArgs(i8, u33, 1 << 32); + try testArgs(i16, u33, 0); + try testArgs(i16, u33, 1 << 0); + try testArgs(i16, u33, 1 << 32); + try testArgs(i32, u33, 0); + try testArgs(i32, u33, 1 << 0); + try testArgs(i32, u33, 1 << 32); + try testArgs(i64, u33, 0); + try testArgs(i64, u33, 1 << 0); + try testArgs(i64, u33, 1 << 32); + try testArgs(i128, u33, 0); + try testArgs(i128, u33, 1 << 0); + try testArgs(i128, u33, 1 << 32); + try testArgs(i256, u33, 0); + try testArgs(i256, u33, 1 << 0); + try testArgs(i256, u33, 1 << 32); + try testArgs(i512, u33, 0); + try testArgs(i512, u33, 1 << 0); + try testArgs(i512, u33, 1 << 32); + try testArgs(i1024, u33, 0); + try testArgs(i1024, u33, 1 << 0); + try testArgs(i1024, u33, 1 << 32); + + try testArgs(u8, i63, -1 << 62); + try testArgs(u8, i63, -1); + try testArgs(u8, i63, 0); + try testArgs(u16, i63, -1 << 62); + try testArgs(u16, i63, -1); + try testArgs(u16, i63, 0); + try testArgs(u32, i63, -1 << 62); + try testArgs(u32, i63, -1); + try testArgs(u32, i63, 0); + try testArgs(u64, i63, -1 << 62); + try testArgs(u64, i63, -1); + try testArgs(u64, i63, 0); + try testArgs(u128, i63, -1 << 62); + try testArgs(u128, i63, -1); + try testArgs(u128, i63, 0); + try testArgs(u256, i63, -1 << 62); + try testArgs(u256, i63, -1); + try testArgs(u256, i63, 0); + try testArgs(u512, i63, -1 << 62); + try testArgs(u512, i63, -1); + try testArgs(u512, i63, 0); + try testArgs(u1024, i63, -1 << 62); + try testArgs(u1024, i63, -1); + try testArgs(u1024, i63, 0); + try testArgs(i8, u63, 0); + try testArgs(i8, u63, 1 << 0); + try testArgs(i8, u63, 1 << 62); + try testArgs(i16, u63, 0); + try testArgs(i16, u63, 1 << 0); + try testArgs(i16, u63, 1 << 62); + try testArgs(i32, u63, 0); + try testArgs(i32, u63, 1 << 0); + try testArgs(i32, u63, 1 << 62); + try testArgs(i64, u63, 0); + try testArgs(i64, u63, 1 << 0); + try testArgs(i64, u63, 1 << 62); + try testArgs(i128, u63, 0); + try testArgs(i128, u63, 1 << 0); + try testArgs(i128, u63, 1 << 62); + try testArgs(i256, u63, 0); + try testArgs(i256, u63, 1 << 0); + try testArgs(i256, u63, 1 << 62); + try testArgs(i512, u63, 0); + try testArgs(i512, u63, 1 << 0); + try testArgs(i512, u63, 1 << 62); + try testArgs(i1024, u63, 0); + try testArgs(i1024, u63, 1 << 0); + try testArgs(i1024, u63, 1 << 62); + + try testArgs(u8, i64, -1 << 63); + try testArgs(u8, i64, -1); + try testArgs(u8, i64, 0); + try testArgs(u16, i64, -1 << 63); + try testArgs(u16, i64, -1); + try testArgs(u16, i64, 0); + try testArgs(u32, i64, -1 << 63); + try testArgs(u32, i64, -1); + try testArgs(u32, i64, 0); + try testArgs(u64, i64, -1 << 63); + try testArgs(u64, i64, -1); + try testArgs(u64, i64, 0); + try testArgs(u128, i64, -1 << 63); + try testArgs(u128, i64, -1); + try testArgs(u128, i64, 0); + try testArgs(u256, i64, -1 << 63); + try testArgs(u256, i64, -1); + try testArgs(u256, i64, 0); + try testArgs(u512, i64, -1 << 63); + try testArgs(u512, i64, -1); + try testArgs(u512, i64, 0); + try testArgs(u1024, i64, -1 << 63); + try testArgs(u1024, i64, -1); + try testArgs(u1024, i64, 0); + try testArgs(i8, u64, 0); + try testArgs(i8, u64, 1 << 0); + try testArgs(i8, u64, 1 << 63); + try testArgs(i16, u64, 0); + try testArgs(i16, u64, 1 << 0); + try testArgs(i16, u64, 1 << 63); + try testArgs(i32, u64, 0); + try testArgs(i32, u64, 1 << 0); + try testArgs(i32, u64, 1 << 63); + try testArgs(i64, u64, 0); + try testArgs(i64, u64, 1 << 0); + try testArgs(i64, u64, 1 << 63); + try testArgs(i128, u64, 0); + try testArgs(i128, u64, 1 << 0); + try testArgs(i128, u64, 1 << 63); + try testArgs(i256, u64, 0); + try testArgs(i256, u64, 1 << 0); + try testArgs(i256, u64, 1 << 63); + try testArgs(i512, u64, 0); + try testArgs(i512, u64, 1 << 0); + try testArgs(i512, u64, 1 << 63); + try testArgs(i1024, u64, 0); + try testArgs(i1024, u64, 1 << 0); + try testArgs(i1024, u64, 1 << 63); + + try testArgs(u8, i65, -1 << 64); + try testArgs(u8, i65, -1); + try testArgs(u8, i65, 0); + try testArgs(u16, i65, -1 << 64); + try testArgs(u16, i65, -1); + try testArgs(u16, i65, 0); + try testArgs(u32, i65, -1 << 64); + try testArgs(u32, i65, -1); + try testArgs(u32, i65, 0); + try testArgs(u64, i65, -1 << 64); + try testArgs(u64, i65, -1); + try testArgs(u64, i65, 0); + try testArgs(u128, i65, -1 << 64); + try testArgs(u128, i65, -1); + try testArgs(u128, i65, 0); + try testArgs(u256, i65, -1 << 64); + try testArgs(u256, i65, -1); + try testArgs(u256, i65, 0); + try testArgs(u512, i65, -1 << 64); + try testArgs(u512, i65, -1); + try testArgs(u512, i65, 0); + try testArgs(u1024, i65, -1 << 64); + try testArgs(u1024, i65, -1); + try testArgs(u1024, i65, 0); + try testArgs(i8, u65, 0); + try testArgs(i8, u65, 1 << 0); + try testArgs(i8, u65, 1 << 64); + try testArgs(i16, u65, 0); + try testArgs(i16, u65, 1 << 0); + try testArgs(i16, u65, 1 << 64); + try testArgs(i32, u65, 0); + try testArgs(i32, u65, 1 << 0); + try testArgs(i32, u65, 1 << 64); + try testArgs(i64, u65, 0); + try testArgs(i64, u65, 1 << 0); + try testArgs(i64, u65, 1 << 64); + try testArgs(i128, u65, 0); + try testArgs(i128, u65, 1 << 0); + try testArgs(i128, u65, 1 << 64); + try testArgs(i256, u65, 0); + try testArgs(i256, u65, 1 << 0); + try testArgs(i256, u65, 1 << 64); + try testArgs(i512, u65, 0); + try testArgs(i512, u65, 1 << 0); + try testArgs(i512, u65, 1 << 64); + try testArgs(i1024, u65, 0); + try testArgs(i1024, u65, 1 << 0); + try testArgs(i1024, u65, 1 << 64); + + try testArgs(u8, i95, -1 << 94); + try testArgs(u8, i95, -1); + try testArgs(u8, i95, 0); + try testArgs(u16, i95, -1 << 94); + try testArgs(u16, i95, -1); + try testArgs(u16, i95, 0); + try testArgs(u32, i95, -1 << 94); + try testArgs(u32, i95, -1); + try testArgs(u32, i95, 0); + try testArgs(u64, i95, -1 << 94); + try testArgs(u64, i95, -1); + try testArgs(u64, i95, 0); + try testArgs(u128, i95, -1 << 94); + try testArgs(u128, i95, -1); + try testArgs(u128, i95, 0); + try testArgs(u256, i95, -1 << 94); + try testArgs(u256, i95, -1); + try testArgs(u256, i95, 0); + try testArgs(u512, i95, -1 << 94); + try testArgs(u512, i95, -1); + try testArgs(u512, i95, 0); + try testArgs(u1024, i95, -1 << 94); + try testArgs(u1024, i95, -1); + try testArgs(u1024, i95, 0); + try testArgs(i8, u95, 0); + try testArgs(i8, u95, 1 << 0); + try testArgs(i8, u95, 1 << 94); + try testArgs(i16, u95, 0); + try testArgs(i16, u95, 1 << 0); + try testArgs(i16, u95, 1 << 94); + try testArgs(i32, u95, 0); + try testArgs(i32, u95, 1 << 0); + try testArgs(i32, u95, 1 << 94); + try testArgs(i64, u95, 0); + try testArgs(i64, u95, 1 << 0); + try testArgs(i64, u95, 1 << 94); + try testArgs(i128, u95, 0); + try testArgs(i128, u95, 1 << 0); + try testArgs(i128, u95, 1 << 94); + try testArgs(i256, u95, 0); + try testArgs(i256, u95, 1 << 0); + try testArgs(i256, u95, 1 << 94); + try testArgs(i512, u95, 0); + try testArgs(i512, u95, 1 << 0); + try testArgs(i512, u95, 1 << 94); + try testArgs(i1024, u95, 0); + try testArgs(i1024, u95, 1 << 0); + try testArgs(i1024, u95, 1 << 94); + + try testArgs(u8, i96, -1 << 95); + try testArgs(u8, i96, -1); + try testArgs(u8, i96, 0); + try testArgs(u16, i96, -1 << 95); + try testArgs(u16, i96, -1); + try testArgs(u16, i96, 0); + try testArgs(u32, i96, -1 << 95); + try testArgs(u32, i96, -1); + try testArgs(u32, i96, 0); + try testArgs(u64, i96, -1 << 95); + try testArgs(u64, i96, -1); + try testArgs(u64, i96, 0); + try testArgs(u128, i96, -1 << 95); + try testArgs(u128, i96, -1); + try testArgs(u128, i96, 0); + try testArgs(u256, i96, -1 << 95); + try testArgs(u256, i96, -1); + try testArgs(u256, i96, 0); + try testArgs(u512, i96, -1 << 95); + try testArgs(u512, i96, -1); + try testArgs(u512, i96, 0); + try testArgs(u1024, i96, -1 << 95); + try testArgs(u1024, i96, -1); + try testArgs(u1024, i96, 0); + try testArgs(i8, u96, 0); + try testArgs(i8, u96, 1 << 0); + try testArgs(i8, u96, 1 << 95); + try testArgs(i16, u96, 0); + try testArgs(i16, u96, 1 << 0); + try testArgs(i16, u96, 1 << 95); + try testArgs(i32, u96, 0); + try testArgs(i32, u96, 1 << 0); + try testArgs(i32, u96, 1 << 95); + try testArgs(i64, u96, 0); + try testArgs(i64, u96, 1 << 0); + try testArgs(i64, u96, 1 << 95); + try testArgs(i128, u96, 0); + try testArgs(i128, u96, 1 << 0); + try testArgs(i128, u96, 1 << 95); + try testArgs(i256, u96, 0); + try testArgs(i256, u96, 1 << 0); + try testArgs(i256, u96, 1 << 95); + try testArgs(i512, u96, 0); + try testArgs(i512, u96, 1 << 0); + try testArgs(i512, u96, 1 << 95); + try testArgs(i1024, u96, 0); + try testArgs(i1024, u96, 1 << 0); + try testArgs(i1024, u96, 1 << 95); + + try testArgs(u8, i97, -1 << 96); + try testArgs(u8, i97, -1); + try testArgs(u8, i97, 0); + try testArgs(u16, i97, -1 << 96); + try testArgs(u16, i97, -1); + try testArgs(u16, i97, 0); + try testArgs(u32, i97, -1 << 96); + try testArgs(u32, i97, -1); + try testArgs(u32, i97, 0); + try testArgs(u64, i97, -1 << 96); + try testArgs(u64, i97, -1); + try testArgs(u64, i97, 0); + try testArgs(u128, i97, -1 << 96); + try testArgs(u128, i97, -1); + try testArgs(u128, i97, 0); + try testArgs(u256, i97, -1 << 96); + try testArgs(u256, i97, -1); + try testArgs(u256, i97, 0); + try testArgs(u512, i97, -1 << 96); + try testArgs(u512, i97, -1); + try testArgs(u512, i97, 0); + try testArgs(u1024, i97, -1 << 96); + try testArgs(u1024, i97, -1); + try testArgs(u1024, i97, 0); + try testArgs(i8, u97, 0); + try testArgs(i8, u97, 1 << 0); + try testArgs(i8, u97, 1 << 96); + try testArgs(i16, u97, 0); + try testArgs(i16, u97, 1 << 0); + try testArgs(i16, u97, 1 << 96); + try testArgs(i32, u97, 0); + try testArgs(i32, u97, 1 << 0); + try testArgs(i32, u97, 1 << 96); + try testArgs(i64, u97, 0); + try testArgs(i64, u97, 1 << 0); + try testArgs(i64, u97, 1 << 96); + try testArgs(i128, u97, 0); + try testArgs(i128, u97, 1 << 0); + try testArgs(i128, u97, 1 << 96); + try testArgs(i256, u97, 0); + try testArgs(i256, u97, 1 << 0); + try testArgs(i256, u97, 1 << 96); + try testArgs(i512, u97, 0); + try testArgs(i512, u97, 1 << 0); + try testArgs(i512, u97, 1 << 96); + try testArgs(i1024, u97, 0); + try testArgs(i1024, u97, 1 << 0); + try testArgs(i1024, u97, 1 << 96); + + try testArgs(u8, i127, -1 << 126); + try testArgs(u8, i127, -1); + try testArgs(u8, i127, 0); + try testArgs(u16, i127, -1 << 126); + try testArgs(u16, i127, -1); + try testArgs(u16, i127, 0); + try testArgs(u32, i127, -1 << 126); + try testArgs(u32, i127, -1); + try testArgs(u32, i127, 0); + try testArgs(u64, i127, -1 << 126); + try testArgs(u64, i127, -1); + try testArgs(u64, i127, 0); + try testArgs(u128, i127, -1 << 126); + try testArgs(u128, i127, -1); + try testArgs(u128, i127, 0); + try testArgs(u256, i127, -1 << 126); + try testArgs(u256, i127, -1); + try testArgs(u256, i127, 0); + try testArgs(u512, i127, -1 << 126); + try testArgs(u512, i127, -1); + try testArgs(u512, i127, 0); + try testArgs(u1024, i127, -1 << 126); + try testArgs(u1024, i127, -1); + try testArgs(u1024, i127, 0); + try testArgs(i8, u127, 0); + try testArgs(i8, u127, 1 << 0); + try testArgs(i8, u127, 1 << 126); + try testArgs(i16, u127, 0); + try testArgs(i16, u127, 1 << 0); + try testArgs(i16, u127, 1 << 126); + try testArgs(i32, u127, 0); + try testArgs(i32, u127, 1 << 0); + try testArgs(i32, u127, 1 << 126); + try testArgs(i64, u127, 0); + try testArgs(i64, u127, 1 << 0); + try testArgs(i64, u127, 1 << 126); + try testArgs(i128, u127, 0); + try testArgs(i128, u127, 1 << 0); + try testArgs(i128, u127, 1 << 126); + try testArgs(i256, u127, 0); + try testArgs(i256, u127, 1 << 0); + try testArgs(i256, u127, 1 << 126); + try testArgs(i512, u127, 0); + try testArgs(i512, u127, 1 << 0); + try testArgs(i512, u127, 1 << 126); + try testArgs(i1024, u127, 0); + try testArgs(i1024, u127, 1 << 0); + try testArgs(i1024, u127, 1 << 126); + + try testArgs(u8, i128, -1 << 127); + try testArgs(u8, i128, -1); + try testArgs(u8, i128, 0); + try testArgs(u16, i128, -1 << 127); + try testArgs(u16, i128, -1); + try testArgs(u16, i128, 0); + try testArgs(u32, i128, -1 << 127); + try testArgs(u32, i128, -1); + try testArgs(u32, i128, 0); + try testArgs(u64, i128, -1 << 127); + try testArgs(u64, i128, -1); + try testArgs(u64, i128, 0); + try testArgs(u128, i128, -1 << 127); + try testArgs(u128, i128, -1); + try testArgs(u128, i128, 0); + try testArgs(u256, i128, -1 << 127); + try testArgs(u256, i128, -1); + try testArgs(u256, i128, 0); + try testArgs(u512, i128, -1 << 127); + try testArgs(u512, i128, -1); + try testArgs(u512, i128, 0); + try testArgs(u1024, i128, -1 << 127); + try testArgs(u1024, i128, -1); + try testArgs(u1024, i128, 0); + try testArgs(i8, u128, 0); + try testArgs(i8, u128, 1 << 0); + try testArgs(i8, u128, 1 << 127); + try testArgs(i16, u128, 0); + try testArgs(i16, u128, 1 << 0); + try testArgs(i16, u128, 1 << 127); + try testArgs(i32, u128, 0); + try testArgs(i32, u128, 1 << 0); + try testArgs(i32, u128, 1 << 127); + try testArgs(i64, u128, 0); + try testArgs(i64, u128, 1 << 0); + try testArgs(i64, u128, 1 << 127); + try testArgs(i128, u128, 0); + try testArgs(i128, u128, 1 << 0); + try testArgs(i128, u128, 1 << 127); + try testArgs(i256, u128, 0); + try testArgs(i256, u128, 1 << 0); + try testArgs(i256, u128, 1 << 127); + try testArgs(i512, u128, 0); + try testArgs(i512, u128, 1 << 0); + try testArgs(i512, u128, 1 << 127); + try testArgs(i1024, u128, 0); + try testArgs(i1024, u128, 1 << 0); + try testArgs(i1024, u128, 1 << 127); + + try testArgs(u8, i129, -1 << 128); + try testArgs(u8, i129, -1); + try testArgs(u8, i129, 0); + try testArgs(u16, i129, -1 << 128); + try testArgs(u16, i129, -1); + try testArgs(u16, i129, 0); + try testArgs(u32, i129, -1 << 128); + try testArgs(u32, i129, -1); + try testArgs(u32, i129, 0); + try testArgs(u64, i129, -1 << 128); + try testArgs(u64, i129, -1); + try testArgs(u64, i129, 0); + try testArgs(u128, i129, -1 << 128); + try testArgs(u128, i129, -1); + try testArgs(u128, i129, 0); + try testArgs(u256, i129, -1 << 128); + try testArgs(u256, i129, -1); + try testArgs(u256, i129, 0); + try testArgs(u512, i129, -1 << 128); + try testArgs(u512, i129, -1); + try testArgs(u512, i129, 0); + try testArgs(u1024, i129, -1 << 128); + try testArgs(u1024, i129, -1); + try testArgs(u1024, i129, 0); + try testArgs(i8, u129, 0); + try testArgs(i8, u129, 1 << 0); + try testArgs(i8, u129, 1 << 128); + try testArgs(i16, u129, 0); + try testArgs(i16, u129, 1 << 0); + try testArgs(i16, u129, 1 << 128); + try testArgs(i32, u129, 0); + try testArgs(i32, u129, 1 << 0); + try testArgs(i32, u129, 1 << 128); + try testArgs(i64, u129, 0); + try testArgs(i64, u129, 1 << 0); + try testArgs(i64, u129, 1 << 128); + try testArgs(i128, u129, 0); + try testArgs(i128, u129, 1 << 0); + try testArgs(i128, u129, 1 << 128); + try testArgs(i256, u129, 0); + try testArgs(i256, u129, 1 << 0); + try testArgs(i256, u129, 1 << 128); + try testArgs(i512, u129, 0); + try testArgs(i512, u129, 1 << 0); + try testArgs(i512, u129, 1 << 128); + try testArgs(i1024, u129, 0); + try testArgs(i1024, u129, 1 << 0); + try testArgs(i1024, u129, 1 << 128); + + try testArgs(u8, i255, -1 << 254); + try testArgs(u8, i255, -1); + try testArgs(u8, i255, 0); + try testArgs(u16, i255, -1 << 254); + try testArgs(u16, i255, -1); + try testArgs(u16, i255, 0); + try testArgs(u32, i255, -1 << 254); + try testArgs(u32, i255, -1); + try testArgs(u32, i255, 0); + try testArgs(u64, i255, -1 << 254); + try testArgs(u64, i255, -1); + try testArgs(u64, i255, 0); + try testArgs(u128, i255, -1 << 254); + try testArgs(u128, i255, -1); + try testArgs(u128, i255, 0); + try testArgs(u256, i255, -1 << 254); + try testArgs(u256, i255, -1); + try testArgs(u256, i255, 0); + try testArgs(u512, i255, -1 << 254); + try testArgs(u512, i255, -1); + try testArgs(u512, i255, 0); + try testArgs(u1024, i255, -1 << 254); + try testArgs(u1024, i255, -1); + try testArgs(u1024, i255, 0); + try testArgs(i8, u255, 0); + try testArgs(i8, u255, 1 << 0); + try testArgs(i8, u255, 1 << 254); + try testArgs(i16, u255, 0); + try testArgs(i16, u255, 1 << 0); + try testArgs(i16, u255, 1 << 254); + try testArgs(i32, u255, 0); + try testArgs(i32, u255, 1 << 0); + try testArgs(i32, u255, 1 << 254); + try testArgs(i64, u255, 0); + try testArgs(i64, u255, 1 << 0); + try testArgs(i64, u255, 1 << 254); + try testArgs(i128, u255, 0); + try testArgs(i128, u255, 1 << 0); + try testArgs(i128, u255, 1 << 254); + try testArgs(i256, u255, 0); + try testArgs(i256, u255, 1 << 0); + try testArgs(i256, u255, 1 << 254); + try testArgs(i512, u255, 0); + try testArgs(i512, u255, 1 << 0); + try testArgs(i512, u255, 1 << 254); + try testArgs(i1024, u255, 0); + try testArgs(i1024, u255, 1 << 0); + try testArgs(i1024, u255, 1 << 254); + + try testArgs(u8, i256, -1 << 255); + try testArgs(u8, i256, -1); + try testArgs(u8, i256, 0); + try testArgs(u16, i256, -1 << 255); + try testArgs(u16, i256, -1); + try testArgs(u16, i256, 0); + try testArgs(u32, i256, -1 << 255); + try testArgs(u32, i256, -1); + try testArgs(u32, i256, 0); + try testArgs(u64, i256, -1 << 255); + try testArgs(u64, i256, -1); + try testArgs(u64, i256, 0); + try testArgs(u128, i256, -1 << 255); + try testArgs(u128, i256, -1); + try testArgs(u128, i256, 0); + try testArgs(u256, i256, -1 << 255); + try testArgs(u256, i256, -1); + try testArgs(u256, i256, 0); + try testArgs(u512, i256, -1 << 255); + try testArgs(u512, i256, -1); + try testArgs(u512, i256, 0); + try testArgs(u1024, i256, -1 << 255); + try testArgs(u1024, i256, -1); + try testArgs(u1024, i256, 0); + try testArgs(i8, u256, 0); + try testArgs(i8, u256, 1 << 0); + try testArgs(i8, u256, 1 << 255); + try testArgs(i16, u256, 0); + try testArgs(i16, u256, 1 << 0); + try testArgs(i16, u256, 1 << 255); + try testArgs(i32, u256, 0); + try testArgs(i32, u256, 1 << 0); + try testArgs(i32, u256, 1 << 255); + try testArgs(i64, u256, 0); + try testArgs(i64, u256, 1 << 0); + try testArgs(i64, u256, 1 << 255); + try testArgs(i128, u256, 0); + try testArgs(i128, u256, 1 << 0); + try testArgs(i128, u256, 1 << 255); + try testArgs(i256, u256, 0); + try testArgs(i256, u256, 1 << 0); + try testArgs(i256, u256, 1 << 255); + try testArgs(i512, u256, 0); + try testArgs(i512, u256, 1 << 0); + try testArgs(i512, u256, 1 << 255); + try testArgs(i1024, u256, 0); + try testArgs(i1024, u256, 1 << 0); + try testArgs(i1024, u256, 1 << 255); + + try testArgs(u8, i257, -1 << 256); + try testArgs(u8, i257, -1); + try testArgs(u8, i257, 0); + try testArgs(u16, i257, -1 << 256); + try testArgs(u16, i257, -1); + try testArgs(u16, i257, 0); + try testArgs(u32, i257, -1 << 256); + try testArgs(u32, i257, -1); + try testArgs(u32, i257, 0); + try testArgs(u64, i257, -1 << 256); + try testArgs(u64, i257, -1); + try testArgs(u64, i257, 0); + try testArgs(u128, i257, -1 << 256); + try testArgs(u128, i257, -1); + try testArgs(u128, i257, 0); + try testArgs(u256, i257, -1 << 256); + try testArgs(u256, i257, -1); + try testArgs(u256, i257, 0); + try testArgs(u512, i257, -1 << 256); + try testArgs(u512, i257, -1); + try testArgs(u512, i257, 0); + try testArgs(u1024, i257, -1 << 256); + try testArgs(u1024, i257, -1); + try testArgs(u1024, i257, 0); + try testArgs(i8, u257, 0); + try testArgs(i8, u257, 1 << 0); + try testArgs(i8, u257, 1 << 256); + try testArgs(i16, u257, 0); + try testArgs(i16, u257, 1 << 0); + try testArgs(i16, u257, 1 << 256); + try testArgs(i32, u257, 0); + try testArgs(i32, u257, 1 << 0); + try testArgs(i32, u257, 1 << 256); + try testArgs(i64, u257, 0); + try testArgs(i64, u257, 1 << 0); + try testArgs(i64, u257, 1 << 256); + try testArgs(i128, u257, 0); + try testArgs(i128, u257, 1 << 0); + try testArgs(i128, u257, 1 << 256); + try testArgs(i256, u257, 0); + try testArgs(i256, u257, 1 << 0); + try testArgs(i256, u257, 1 << 256); + try testArgs(i512, u257, 0); + try testArgs(i512, u257, 1 << 0); + try testArgs(i512, u257, 1 << 256); + try testArgs(i1024, u257, 0); + try testArgs(i1024, u257, 1 << 0); + try testArgs(i1024, u257, 1 << 256); + + try testArgs(u8, i511, -1 << 510); + try testArgs(u8, i511, -1); + try testArgs(u8, i511, 0); + try testArgs(u16, i511, -1 << 510); + try testArgs(u16, i511, -1); + try testArgs(u16, i511, 0); + try testArgs(u32, i511, -1 << 510); + try testArgs(u32, i511, -1); + try testArgs(u32, i511, 0); + try testArgs(u64, i511, -1 << 510); + try testArgs(u64, i511, -1); + try testArgs(u64, i511, 0); + try testArgs(u128, i511, -1 << 510); + try testArgs(u128, i511, -1); + try testArgs(u128, i511, 0); + try testArgs(u256, i511, -1 << 510); + try testArgs(u256, i511, -1); + try testArgs(u256, i511, 0); + try testArgs(u512, i511, -1 << 510); + try testArgs(u512, i511, -1); + try testArgs(u512, i511, 0); + try testArgs(u1024, i511, -1 << 510); + try testArgs(u1024, i511, -1); + try testArgs(u1024, i511, 0); + try testArgs(i8, u511, 0); + try testArgs(i8, u511, 1 << 0); + try testArgs(i8, u511, 1 << 510); + try testArgs(i16, u511, 0); + try testArgs(i16, u511, 1 << 0); + try testArgs(i16, u511, 1 << 510); + try testArgs(i32, u511, 0); + try testArgs(i32, u511, 1 << 0); + try testArgs(i32, u511, 1 << 510); + try testArgs(i64, u511, 0); + try testArgs(i64, u511, 1 << 0); + try testArgs(i64, u511, 1 << 510); + try testArgs(i128, u511, 0); + try testArgs(i128, u511, 1 << 0); + try testArgs(i128, u511, 1 << 510); + try testArgs(i256, u511, 0); + try testArgs(i256, u511, 1 << 0); + try testArgs(i256, u511, 1 << 510); + try testArgs(i512, u511, 0); + try testArgs(i512, u511, 1 << 0); + try testArgs(i512, u511, 1 << 510); + try testArgs(i1024, u511, 0); + try testArgs(i1024, u511, 1 << 0); + try testArgs(i1024, u511, 1 << 510); + + try testArgs(u8, i512, -1 << 511); + try testArgs(u8, i512, -1); + try testArgs(u8, i512, 0); + try testArgs(u16, i512, -1 << 511); + try testArgs(u16, i512, -1); + try testArgs(u16, i512, 0); + try testArgs(u32, i512, -1 << 511); + try testArgs(u32, i512, -1); + try testArgs(u32, i512, 0); + try testArgs(u64, i512, -1 << 511); + try testArgs(u64, i512, -1); + try testArgs(u64, i512, 0); + try testArgs(u128, i512, -1 << 511); + try testArgs(u128, i512, -1); + try testArgs(u128, i512, 0); + try testArgs(u256, i512, -1 << 511); + try testArgs(u256, i512, -1); + try testArgs(u256, i512, 0); + try testArgs(u512, i512, -1 << 511); + try testArgs(u512, i512, -1); + try testArgs(u512, i512, 0); + try testArgs(u1024, i512, -1 << 511); + try testArgs(u1024, i512, -1); + try testArgs(u1024, i512, 0); + try testArgs(i8, u512, 0); + try testArgs(i8, u512, 1 << 0); + try testArgs(i8, u512, 1 << 511); + try testArgs(i16, u512, 0); + try testArgs(i16, u512, 1 << 0); + try testArgs(i16, u512, 1 << 511); + try testArgs(i32, u512, 0); + try testArgs(i32, u512, 1 << 0); + try testArgs(i32, u512, 1 << 511); + try testArgs(i64, u512, 0); + try testArgs(i64, u512, 1 << 0); + try testArgs(i64, u512, 1 << 511); + try testArgs(i128, u512, 0); + try testArgs(i128, u512, 1 << 0); + try testArgs(i128, u512, 1 << 511); + try testArgs(i256, u512, 0); + try testArgs(i256, u512, 1 << 0); + try testArgs(i256, u512, 1 << 511); + try testArgs(i512, u512, 0); + try testArgs(i512, u512, 1 << 0); + try testArgs(i512, u512, 1 << 511); + try testArgs(i1024, u512, 0); + try testArgs(i1024, u512, 1 << 0); + try testArgs(i1024, u512, 1 << 511); + + try testArgs(u8, i513, -1 << 512); + try testArgs(u8, i513, -1); + try testArgs(u8, i513, 0); + try testArgs(u16, i513, -1 << 512); + try testArgs(u16, i513, -1); + try testArgs(u16, i513, 0); + try testArgs(u32, i513, -1 << 512); + try testArgs(u32, i513, -1); + try testArgs(u32, i513, 0); + try testArgs(u64, i513, -1 << 512); + try testArgs(u64, i513, -1); + try testArgs(u64, i513, 0); + try testArgs(u128, i513, -1 << 512); + try testArgs(u128, i513, -1); + try testArgs(u128, i513, 0); + try testArgs(u256, i513, -1 << 512); + try testArgs(u256, i513, -1); + try testArgs(u256, i513, 0); + try testArgs(u512, i513, -1 << 512); + try testArgs(u512, i513, -1); + try testArgs(u512, i513, 0); + try testArgs(u1024, i513, -1 << 512); + try testArgs(u1024, i513, -1); + try testArgs(u1024, i513, 0); + try testArgs(i8, u513, 0); + try testArgs(i8, u513, 1 << 0); + try testArgs(i8, u513, 1 << 512); + try testArgs(i16, u513, 0); + try testArgs(i16, u513, 1 << 0); + try testArgs(i16, u513, 1 << 512); + try testArgs(i32, u513, 0); + try testArgs(i32, u513, 1 << 0); + try testArgs(i32, u513, 1 << 512); + try testArgs(i64, u513, 0); + try testArgs(i64, u513, 1 << 0); + try testArgs(i64, u513, 1 << 512); + try testArgs(i128, u513, 0); + try testArgs(i128, u513, 1 << 0); + try testArgs(i128, u513, 1 << 512); + try testArgs(i256, u513, 0); + try testArgs(i256, u513, 1 << 0); + try testArgs(i256, u513, 1 << 512); + try testArgs(i512, u513, 0); + try testArgs(i512, u513, 1 << 0); + try testArgs(i512, u513, 1 << 512); + try testArgs(i1024, u513, 0); + try testArgs(i1024, u513, 1 << 0); + try testArgs(i1024, u513, 1 << 512); + + try testArgs(u8, i1023, -1 << 1022); + try testArgs(u8, i1023, -1); + try testArgs(u8, i1023, 0); + try testArgs(u16, i1023, -1 << 1022); + try testArgs(u16, i1023, -1); + try testArgs(u16, i1023, 0); + try testArgs(u32, i1023, -1 << 1022); + try testArgs(u32, i1023, -1); + try testArgs(u32, i1023, 0); + try testArgs(u64, i1023, -1 << 1022); + try testArgs(u64, i1023, -1); + try testArgs(u64, i1023, 0); + try testArgs(u128, i1023, -1 << 1022); + try testArgs(u128, i1023, -1); + try testArgs(u128, i1023, 0); + try testArgs(u256, i1023, -1 << 1022); + try testArgs(u256, i1023, -1); + try testArgs(u256, i1023, 0); + try testArgs(u512, i1023, -1 << 1022); + try testArgs(u512, i1023, -1); + try testArgs(u512, i1023, 0); + try testArgs(u1024, i1023, -1 << 1022); + try testArgs(u1024, i1023, -1); + try testArgs(u1024, i1023, 0); + try testArgs(i8, u1023, 0); + try testArgs(i8, u1023, 1 << 0); + try testArgs(i8, u1023, 1 << 1022); + try testArgs(i16, u1023, 0); + try testArgs(i16, u1023, 1 << 0); + try testArgs(i16, u1023, 1 << 1022); + try testArgs(i32, u1023, 0); + try testArgs(i32, u1023, 1 << 0); + try testArgs(i32, u1023, 1 << 1022); + try testArgs(i64, u1023, 0); + try testArgs(i64, u1023, 1 << 0); + try testArgs(i64, u1023, 1 << 1022); + try testArgs(i128, u1023, 0); + try testArgs(i128, u1023, 1 << 0); + try testArgs(i128, u1023, 1 << 1022); + try testArgs(i256, u1023, 0); + try testArgs(i256, u1023, 1 << 0); + try testArgs(i256, u1023, 1 << 1022); + try testArgs(i512, u1023, 0); + try testArgs(i512, u1023, 1 << 0); + try testArgs(i512, u1023, 1 << 1022); + try testArgs(i1024, u1023, 0); + try testArgs(i1024, u1023, 1 << 0); + try testArgs(i1024, u1023, 1 << 1022); + + try testArgs(u8, i1024, -1 << 1023); + try testArgs(u8, i1024, -1); + try testArgs(u8, i1024, 0); + try testArgs(u16, i1024, -1 << 1023); + try testArgs(u16, i1024, -1); + try testArgs(u16, i1024, 0); + try testArgs(u32, i1024, -1 << 1023); + try testArgs(u32, i1024, -1); + try testArgs(u32, i1024, 0); + try testArgs(u64, i1024, -1 << 1023); + try testArgs(u64, i1024, -1); + try testArgs(u64, i1024, 0); + try testArgs(u128, i1024, -1 << 1023); + try testArgs(u128, i1024, -1); + try testArgs(u128, i1024, 0); + try testArgs(u256, i1024, -1 << 1023); + try testArgs(u256, i1024, -1); + try testArgs(u256, i1024, 0); + try testArgs(u512, i1024, -1 << 1023); + try testArgs(u512, i1024, -1); + try testArgs(u512, i1024, 0); + try testArgs(u1024, i1024, -1 << 1023); + try testArgs(u1024, i1024, -1); + try testArgs(u1024, i1024, 0); + try testArgs(i8, u1024, 0); + try testArgs(i8, u1024, 1 << 0); + try testArgs(i8, u1024, 1 << 1023); + try testArgs(i16, u1024, 0); + try testArgs(i16, u1024, 1 << 0); + try testArgs(i16, u1024, 1 << 1023); + try testArgs(i32, u1024, 0); + try testArgs(i32, u1024, 1 << 0); + try testArgs(i32, u1024, 1 << 1023); + try testArgs(i64, u1024, 0); + try testArgs(i64, u1024, 1 << 0); + try testArgs(i64, u1024, 1 << 1023); + try testArgs(i128, u1024, 0); + try testArgs(i128, u1024, 1 << 0); + try testArgs(i128, u1024, 1 << 1023); + try testArgs(i256, u1024, 0); + try testArgs(i256, u1024, 1 << 0); + try testArgs(i256, u1024, 1 << 1023); + try testArgs(i512, u1024, 0); + try testArgs(i512, u1024, 1 << 0); + try testArgs(i512, u1024, 1 << 1023); + try testArgs(i1024, u1024, 0); + try testArgs(i1024, u1024, 1 << 0); + try testArgs(i1024, u1024, 1 << 1023); + + try testArgs(u8, i1025, -1 << 1024); + try testArgs(u8, i1025, -1); + try testArgs(u8, i1025, 0); + try testArgs(u16, i1025, -1 << 1024); + try testArgs(u16, i1025, -1); + try testArgs(u16, i1025, 0); + try testArgs(u32, i1025, -1 << 1024); + try testArgs(u32, i1025, -1); + try testArgs(u32, i1025, 0); + try testArgs(u64, i1025, -1 << 1024); + try testArgs(u64, i1025, -1); + try testArgs(u64, i1025, 0); + try testArgs(u128, i1025, -1 << 1024); + try testArgs(u128, i1025, -1); + try testArgs(u128, i1025, 0); + try testArgs(u256, i1025, -1 << 1024); + try testArgs(u256, i1025, -1); + try testArgs(u256, i1025, 0); + try testArgs(u512, i1025, -1 << 1024); + try testArgs(u512, i1025, -1); + try testArgs(u512, i1025, 0); try testArgs(u1024, i1025, -1 << 1024); try testArgs(u1024, i1025, -1); try testArgs(u1024, i1025, 0); try testArgs(i8, u1025, 0); try testArgs(i8, u1025, 1 << 0); try testArgs(i8, u1025, 1 << 1024); - try testArgs(u8, u1025, 0); - try testArgs(u8, u1025, 1 << 0); - try testArgs(u8, u1025, 1 << 1024); try testArgs(i16, u1025, 0); try testArgs(i16, u1025, 1 << 0); try testArgs(i16, u1025, 1 << 1024); - try testArgs(u16, u1025, 0); - try testArgs(u16, u1025, 1 << 0); - try testArgs(u16, u1025, 1 << 1024); try testArgs(i32, u1025, 0); try testArgs(i32, u1025, 1 << 0); try testArgs(i32, u1025, 1 << 1024); - try testArgs(u32, u1025, 0); - try testArgs(u32, u1025, 1 << 0); - try testArgs(u32, u1025, 1 << 1024); try testArgs(i64, u1025, 0); try testArgs(i64, u1025, 1 << 0); try testArgs(i64, u1025, 1 << 1024); - try testArgs(u64, u1025, 0); - try testArgs(u64, u1025, 1 << 0); - try testArgs(u64, u1025, 1 << 1024); try testArgs(i128, u1025, 0); try testArgs(i128, u1025, 1 << 0); try testArgs(i128, u1025, 1 << 1024); - try testArgs(u128, u1025, 0); - try testArgs(u128, u1025, 1 << 0); - try testArgs(u128, u1025, 1 << 1024); try testArgs(i256, u1025, 0); try testArgs(i256, u1025, 1 << 0); try testArgs(i256, u1025, 1 << 1024); - try testArgs(u256, u1025, 0); - try testArgs(u256, u1025, 1 << 0); - try testArgs(u256, u1025, 1 << 1024); try testArgs(i512, u1025, 0); try testArgs(i512, u1025, 1 << 0); try testArgs(i512, u1025, 1 << 1024); - try testArgs(u512, u1025, 0); - try testArgs(u512, u1025, 1 << 0); - try testArgs(u512, u1025, 1 << 1024); try testArgs(i1024, u1025, 0); try testArgs(i1024, u1025, 1 << 0); try testArgs(i1024, u1025, 1 << 1024); - try testArgs(u1024, u1025, 0); - try testArgs(u1024, u1025, 1 << 0); - try testArgs(u1024, u1025, 1 << 1024); } fn testFloats() !void { @setEvalBranchQuota(3_100); @@ -10804,6 +9917,46 @@ test clz { try test_clz.testIntVectors(); } +inline fn intCast(comptime Result: type, comptime Type: type, rhs: Type) Result { + const res_info = switch (@typeInfo(Result)) { + .int => |info| info, + .vector => |info| @typeInfo(info.child).int, + else => @compileError(@typeName(Result)), + }; + const rhs_info = switch (@typeInfo(Type)) { + .int => |info| info, + .vector => |info| @typeInfo(info.child).int, + else => @compileError(@typeName(Type)), + }; + const min_bits = @min(res_info.bits, rhs_info.bits); + return @intCast(switch (@as(union(enum) { + shift: std.math.Log2Int(Type), + mask: std.math.Log2IntCeil(Type), + }, switch (res_info.signedness) { + .signed => switch (rhs_info.signedness) { + .signed => .{ .shift = rhs_info.bits - min_bits }, + .unsigned => .{ .mask = min_bits - @intFromBool(res_info.bits <= rhs_info.bits) }, + }, + .unsigned => switch (rhs_info.signedness) { + .signed => .{ .mask = min_bits - @intFromBool(res_info.bits >= rhs_info.bits) }, + .unsigned => .{ .mask = min_bits }, + }, + })) { + // TODO: if (bits == 0) rhs else rhs >> bits, + .shift => |bits| if (bits == 0) + rhs + else if (rhs < 0) + rhs | std.math.minInt(Type) >> bits + else + rhs & std.math.maxInt(Type) >> bits, + .mask => |bits| if (bits == rhs_info.bits) rhs else rhs & (1 << bits) - 1, + }); +} +test intCast { + const test_int_cast = cast(intCast, .{}); + try test_int_cast.testInts(); +} + inline fn floatCast(comptime Result: type, comptime Type: type, rhs: Type) Result { return @floatCast(rhs); }