authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-01-23 05:31:46-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-01-24 20:56:11-05:00
logb1fa89439ae56001779061c42a08cf9db7906432
tree6fb1bc031d9ae39b9f12d70bc5e8994c1da497c4
parentae3d95fc8dc10c0902dee0605421cec2dbd316b0

x86_64: rewrite float vector `@abs` and equality comparisons


13 files changed, 4100 insertions(+), 503 deletions(-)

lib/std/zig/Zir.zig+7-1
......@@ -2128,7 +2128,7 @@ pub const Inst = struct {
21282128 ref_start_index = static_len,
21292129 _,
21302130
2131 pub const static_len = 70;
2131 pub const static_len = 76;
21322132
21332133 pub fn toRef(i: Index) Inst.Ref {
21342134 return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));
......@@ -2211,6 +2211,12 @@ pub const Inst = struct {
22112211 single_const_pointer_to_comptime_int_type,
22122212 slice_const_u8_type,
22132213 slice_const_u8_sentinel_0_type,
2214 vector_4_f16_type,
2215 vector_8_f16_type,
2216 vector_4_f32_type,
2217 vector_8_f32_type,
2218 vector_2_f64_type,
2219 vector_4_f64_type,
22142220 optional_noreturn_type,
22152221 anyerror_void_error_union_type,
22162222 adhoc_inferred_error_set_type,
src/Air.zig+6
......@@ -984,6 +984,12 @@ pub const Inst = struct {
984984 single_const_pointer_to_comptime_int_type = @intFromEnum(InternPool.Index.single_const_pointer_to_comptime_int_type),
985985 slice_const_u8_type = @intFromEnum(InternPool.Index.slice_const_u8_type),
986986 slice_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.slice_const_u8_sentinel_0_type),
987 vector_4_f16_type = @intFromEnum(InternPool.Index.vector_4_f16_type),
988 vector_8_f16_type = @intFromEnum(InternPool.Index.vector_8_f16_type),
989 vector_4_f32_type = @intFromEnum(InternPool.Index.vector_4_f32_type),
990 vector_8_f32_type = @intFromEnum(InternPool.Index.vector_8_f32_type),
991 vector_2_f64_type = @intFromEnum(InternPool.Index.vector_2_f64_type),
992 vector_4_f64_type = @intFromEnum(InternPool.Index.vector_4_f64_type),
987993 optional_noreturn_type = @intFromEnum(InternPool.Index.optional_noreturn_type),
988994 anyerror_void_error_union_type = @intFromEnum(InternPool.Index.anyerror_void_error_union_type),
989995 adhoc_inferred_error_set_type = @intFromEnum(InternPool.Index.adhoc_inferred_error_set_type),
src/InternPool.zig+36
......@@ -4559,12 +4559,21 @@ pub const Index = enum(u32) {
45594559 null_type,
45604560 undefined_type,
45614561 enum_literal_type,
4562
45624563 manyptr_u8_type,
45634564 manyptr_const_u8_type,
45644565 manyptr_const_u8_sentinel_0_type,
45654566 single_const_pointer_to_comptime_int_type,
45664567 slice_const_u8_type,
45674568 slice_const_u8_sentinel_0_type,
4569
4570 vector_4_f16_type,
4571 vector_8_f16_type,
4572 vector_4_f32_type,
4573 vector_8_f32_type,
4574 vector_2_f64_type,
4575 vector_4_f64_type,
4576
45684577 optional_noreturn_type,
45694578 anyerror_void_error_union_type,
45704579 /// Used for the inferred error set of inline/comptime function calls.
......@@ -5055,6 +5064,19 @@ pub const static_keys = [_]Key{
50555064 },
50565065 } },
50575066
5067 // @Vector(4, f16)
5068 .{ .vector_type = .{ .len = 4, .child = .f16_type } },
5069 // @Vector(8, f16)
5070 .{ .vector_type = .{ .len = 8, .child = .f16_type } },
5071 // @Vector(4, f32)
5072 .{ .vector_type = .{ .len = 4, .child = .f32_type } },
5073 // @Vector(8, f32)
5074 .{ .vector_type = .{ .len = 8, .child = .f32_type } },
5075 // @Vector(2, f64)
5076 .{ .vector_type = .{ .len = 2, .child = .f64_type } },
5077 // @Vector(4, f64)
5078 .{ .vector_type = .{ .len = 4, .child = .f64_type } },
5079
50585080 // ?noreturn
50595081 .{ .opt_type = .noreturn_type },
50605082
......@@ -11681,6 +11703,12 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
1168111703 .single_const_pointer_to_comptime_int_type,
1168211704 .slice_const_u8_type,
1168311705 .slice_const_u8_sentinel_0_type,
11706 .vector_4_f16_type,
11707 .vector_8_f16_type,
11708 .vector_4_f32_type,
11709 .vector_8_f32_type,
11710 .vector_2_f64_type,
11711 .vector_4_f64_type,
1168411712 .optional_noreturn_type,
1168511713 .anyerror_void_error_union_type,
1168611714 .adhoc_inferred_error_set_type,
......@@ -11998,6 +12026,14 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {
1199812026 .slice_const_u8_sentinel_0_type,
1199912027 => .pointer,
1200012028
12029 .vector_4_f16_type,
12030 .vector_8_f16_type,
12031 .vector_4_f32_type,
12032 .vector_8_f32_type,
12033 .vector_2_f64_type,
12034 .vector_4_f64_type,
12035 => .vector,
12036
1200112037 .optional_noreturn_type => .optional,
1200212038 .anyerror_void_error_union_type => .error_union,
1200312039 .empty_tuple_type => .@"struct",
src/Sema.zig+6
......@@ -36611,6 +36611,12 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
3661136611 .single_const_pointer_to_comptime_int_type,
3661236612 .slice_const_u8_type,
3661336613 .slice_const_u8_sentinel_0_type,
36614 .vector_4_f16_type,
36615 .vector_8_f16_type,
36616 .vector_4_f32_type,
36617 .vector_8_f32_type,
36618 .vector_2_f64_type,
36619 .vector_4_f64_type,
3661436620 .anyerror_void_error_union_type,
3661536621 => null,
3661636622 .void_type => Value.void,
src/Type.zig+9-1
......@@ -4174,7 +4174,15 @@ pub const single_const_pointer_to_comptime_int: Type = .{
41744174 .ip_index = .single_const_pointer_to_comptime_int_type,
41754175};
41764176pub const slice_const_u8_sentinel_0: Type = .{ .ip_index = .slice_const_u8_sentinel_0_type };
4177pub const empty_tuple_type: Type = .{ .ip_index = .empty_tuple_type };
4177
4178pub const vector_4_f16: Type = .{ .ip_index = .vector_4_f16_type };
4179pub const vector_8_f16: Type = .{ .ip_index = .vector_8_f16_type };
4180pub const vector_4_f32: Type = .{ .ip_index = .vector_4_f32_type };
4181pub const vector_8_f32: Type = .{ .ip_index = .vector_8_f32_type };
4182pub const vector_2_f64: Type = .{ .ip_index = .vector_2_f64_type };
4183pub const vector_4_f64: Type = .{ .ip_index = .vector_4_f64_type };
4184
4185pub const empty_tuple: Type = .{ .ip_index = .empty_tuple_type };
41784186
41794187pub const generic_poison: Type = .{ .ip_index = .generic_poison_type };
41804188
src/arch/x86_64/CodeGen.zig+3514-226
......@@ -2393,7 +2393,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
23932393}
23942394
23952395fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2396 @setEvalBranchQuota(1_800);
2396 @setEvalBranchQuota(2_700);
23972397 const pt = cg.pt;
23982398 const zcu = pt.zcu;
23992399 const ip = &zcu.intern_pool;
......@@ -2984,6 +2984,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
29842984 .unused,
29852985 .unused,
29862986 .unused,
2987 .unused,
2988 .unused,
2989 .unused,
29872990 },
29882991 .dst_temps = .{.mem},
29892992 .clobbers = .{ .eflags = true },
......@@ -3008,6 +3011,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
30083011 .unused,
30093012 .unused,
30103013 .unused,
3014 .unused,
3015 .unused,
3016 .unused,
30113017 },
30123018 .dst_temps = .{.mem},
30133019 .clobbers = .{ .eflags = true },
......@@ -3032,6 +3038,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
30323038 .unused,
30333039 .unused,
30343040 .unused,
3041 .unused,
3042 .unused,
3043 .unused,
30353044 },
30363045 .dst_temps = .{.mem},
30373046 .clobbers = .{ .eflags = true },
......@@ -3056,6 +3065,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
30563065 .unused,
30573066 .unused,
30583067 .unused,
3068 .unused,
3069 .unused,
3070 .unused,
30593071 },
30603072 .dst_temps = .{.mem},
30613073 .clobbers = .{ .eflags = true },
......@@ -3080,6 +3092,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
30803092 .unused,
30813093 .unused,
30823094 .unused,
3095 .unused,
3096 .unused,
3097 .unused,
30833098 },
30843099 .dst_temps = .{.mem},
30853100 .clobbers = .{ .eflags = true },
......@@ -3104,6 +3119,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
31043119 .unused,
31053120 .unused,
31063121 .unused,
3122 .unused,
3123 .unused,
3124 .unused,
31073125 },
31083126 .dst_temps = .{.mem},
31093127 .clobbers = .{ .eflags = true },
......@@ -3127,6 +3145,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
31273145 .unused,
31283146 .unused,
31293147 .unused,
3148 .unused,
3149 .unused,
3150 .unused,
31303151 },
31313152 .dst_temps = .{.mem},
31323153 .clobbers = .{ .eflags = true },
......@@ -3265,6 +3286,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
32653286 .unused,
32663287 .unused,
32673288 .unused,
3289 .unused,
3290 .unused,
3291 .unused,
32683292 },
32693293 .dst_temps = .{.{ .ref = .src0 }},
32703294 .each = .{ .once = &.{
......@@ -3296,6 +3320,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
32963320 .unused,
32973321 .unused,
32983322 .unused,
3323 .unused,
3324 .unused,
3325 .unused,
32993326 },
33003327 .dst_temps = .{.{ .rc = .sse }},
33013328 .each = .{ .once = &.{
......@@ -3327,6 +3354,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
33273354 .unused,
33283355 .unused,
33293356 .unused,
3357 .unused,
3358 .unused,
3359 .unused,
33303360 },
33313361 .dst_temps = .{.{ .ref = .src0 }},
33323362 .each = .{ .once = &.{
......@@ -3346,6 +3376,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
33463376 .unused,
33473377 .unused,
33483378 .unused,
3379 .unused,
3380 .unused,
3381 .unused,
33493382 },
33503383 .dst_temps = .{.{ .ref = .src0 }},
33513384 .each = .{ .once = &.{
......@@ -3377,6 +3410,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
33773410 .unused,
33783411 .unused,
33793412 .unused,
3413 .unused,
3414 .unused,
3415 .unused,
33803416 },
33813417 .dst_temps = .{.{ .rc = .sse }},
33823418 .each = .{ .once = &.{
......@@ -3392,7 +3428,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
33923428 },
33933429 .dst_temps = .{.{ .rc = .sse }},
33943430 .each = .{ .once = &.{
3395 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .si(0b01111) },
3431 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },
33963432 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
33973433 } },
33983434 }, .{
......@@ -3408,6 +3444,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
34083444 .unused,
34093445 .unused,
34103446 .unused,
3447 .unused,
3448 .unused,
3449 .unused,
34113450 },
34123451 .dst_temps = .{.{ .rc = .sse }},
34133452 .each = .{ .once = &.{
......@@ -3427,6 +3466,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
34273466 .unused,
34283467 .unused,
34293468 .unused,
3469 .unused,
3470 .unused,
3471 .unused,
34303472 },
34313473 .dst_temps = .{.mem},
34323474 .clobbers = .{ .eflags = true },
......@@ -3453,6 +3495,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
34533495 .unused,
34543496 .unused,
34553497 .unused,
3498 .unused,
3499 .unused,
3500 .unused,
34563501 },
34573502 .dst_temps = .{.mem},
34583503 .clobbers = .{ .eflags = true },
......@@ -3477,12 +3522,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
34773522 .unused,
34783523 .unused,
34793524 .unused,
3525 .unused,
3526 .unused,
3527 .unused,
34803528 },
34813529 .dst_temps = .{.mem},
34823530 .clobbers = .{ .eflags = true },
34833531 .each = .{ .once = &.{
34843532 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
3485 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .si(0b01111) },
3533 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) },
34863534 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
34873535 .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
34883536 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
......@@ -3503,12 +3551,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
35033551 .unused,
35043552 .unused,
35053553 .unused,
3554 .unused,
3555 .unused,
3556 .unused,
35063557 },
35073558 .dst_temps = .{.mem},
35083559 .clobbers = .{ .eflags = true },
35093560 .each = .{ .once = &.{
35103561 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3511 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .si(0b01111) },
3562 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) },
35123563 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
35133564 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
35143565 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
......@@ -3527,6 +3578,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
35273578 .unused,
35283579 .unused,
35293580 .unused,
3581 .unused,
3582 .unused,
3583 .unused,
35303584 },
35313585 .dst_temps = .{.mem},
35323586 .clobbers = .{ .eflags = true },
......@@ -3551,6 +3605,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
35513605 .unused,
35523606 .unused,
35533607 .unused,
3608 .unused,
3609 .unused,
3610 .unused,
35543611 },
35553612 .dst_temps = .{.mem},
35563613 .clobbers = .{ .eflags = true },
......@@ -3576,6 +3633,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
35763633 .unused,
35773634 .unused,
35783635 .unused,
3636 .unused,
3637 .unused,
3638 .unused,
35793639 },
35803640 .dst_temps = .{.{ .ref = .src0 }},
35813641 .clobbers = .{ .eflags = true },
......@@ -3599,6 +3659,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
35993659 .unused,
36003660 .unused,
36013661 .unused,
3662 .unused,
3663 .unused,
3664 .unused,
36023665 },
36033666 .dst_temps = .{.mem},
36043667 .clobbers = .{ .eflags = true },
......@@ -3623,6 +3686,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
36233686 .unused,
36243687 .unused,
36253688 .unused,
3689 .unused,
3690 .unused,
3691 .unused,
36263692 },
36273693 .dst_temps = .{.{ .ref = .src0 }},
36283694 .clobbers = .{ .eflags = true },
......@@ -3647,6 +3713,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
36473713 .unused,
36483714 .unused,
36493715 .unused,
3716 .unused,
3717 .unused,
3718 .unused,
36503719 },
36513720 .dst_temps = .{.mem},
36523721 .clobbers = .{ .eflags = true },
......@@ -3676,6 +3745,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
36763745 .unused,
36773746 .unused,
36783747 .unused,
3748 .unused,
3749 .unused,
3750 .unused,
36793751 },
36803752 .dst_temps = .{.{ .ref = .src0 }},
36813753 .clobbers = .{ .eflags = true },
......@@ -3700,6 +3772,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
37003772 .unused,
37013773 .unused,
37023774 .unused,
3775 .unused,
3776 .unused,
3777 .unused,
37033778 },
37043779 .dst_temps = .{.mem},
37053780 .clobbers = .{ .eflags = true },
......@@ -3725,6 +3800,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
37253800 .unused,
37263801 .unused,
37273802 .unused,
3803 .unused,
3804 .unused,
3805 .unused,
37283806 },
37293807 .dst_temps = .{.{ .ref = .src0 }},
37303808 .clobbers = .{ .eflags = true },
......@@ -3748,6 +3826,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
37483826 .unused,
37493827 .unused,
37503828 .unused,
3829 .unused,
3830 .unused,
3831 .unused,
37513832 },
37523833 .dst_temps = .{.mem},
37533834 .clobbers = .{ .eflags = true },
......@@ -3776,6 +3857,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
37763857 .unused,
37773858 .unused,
37783859 .unused,
3860 .unused,
3861 .unused,
3862 .unused,
37793863 },
37803864 .dst_temps = .{.{ .ref = .src0 }},
37813865 .clobbers = .{ .eflags = true },
......@@ -3800,6 +3884,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
38003884 .unused,
38013885 .unused,
38023886 .unused,
3887 .unused,
3888 .unused,
3889 .unused,
38033890 },
38043891 .dst_temps = .{.mem},
38053892 .clobbers = .{ .eflags = true },
......@@ -3829,6 +3916,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
38293916 .unused,
38303917 .unused,
38313918 .unused,
3919 .unused,
3920 .unused,
3921 .unused,
38323922 },
38333923 .dst_temps = .{.{ .ref = .src0 }},
38343924 .clobbers = .{ .eflags = true },
......@@ -3852,6 +3942,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
38523942 .unused,
38533943 .unused,
38543944 .unused,
3945 .unused,
3946 .unused,
3947 .unused,
38553948 },
38563949 .dst_temps = .{.mem},
38573950 .clobbers = .{ .eflags = true },
......@@ -3880,6 +3973,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
38803973 .unused,
38813974 .unused,
38823975 .unused,
3976 .unused,
3977 .unused,
3978 .unused,
38833979 },
38843980 .dst_temps = .{.{ .ref = .src0 }},
38853981 .clobbers = .{ .eflags = true },
......@@ -3905,6 +4001,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
39054001 .unused,
39064002 .unused,
39074003 .unused,
4004 .unused,
4005 .unused,
4006 .unused,
39084007 },
39094008 .dst_temps = .{.mem},
39104009 .clobbers = .{ .eflags = true },
......@@ -3933,6 +4032,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
39334032 .unused,
39344033 .unused,
39354034 .unused,
4035 .unused,
4036 .unused,
4037 .unused,
39364038 },
39374039 .dst_temps = .{.{ .ref = .src0 }},
39384040 .clobbers = .{ .eflags = true },
......@@ -3957,6 +4059,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
39574059 .unused,
39584060 .unused,
39594061 .unused,
4062 .unused,
4063 .unused,
4064 .unused,
39604065 },
39614066 .dst_temps = .{.mem},
39624067 .clobbers = .{ .eflags = true },
......@@ -3996,6 +4101,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
39964101 .unused,
39974102 .unused,
39984103 .unused,
4104 .unused,
4105 .unused,
4106 .unused,
39994107 },
40004108 .dst_temps = .{.{ .ref = .src0 }},
40014109 .each = .{ .once = &.{
......@@ -4027,6 +4135,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
40274135 .unused,
40284136 .unused,
40294137 .unused,
4138 .unused,
4139 .unused,
4140 .unused,
40304141 },
40314142 .dst_temps = .{.{ .rc = .sse }},
40324143 .each = .{ .once = &.{
......@@ -4058,6 +4169,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
40584169 .unused,
40594170 .unused,
40604171 .unused,
4172 .unused,
4173 .unused,
4174 .unused,
40614175 },
40624176 .dst_temps = .{.{ .ref = .src0 }},
40634177 .each = .{ .once = &.{
......@@ -4077,6 +4191,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
40774191 .unused,
40784192 .unused,
40794193 .unused,
4194 .unused,
4195 .unused,
4196 .unused,
40804197 },
40814198 .dst_temps = .{.{ .ref = .src0 }},
40824199 .each = .{ .once = &.{
......@@ -4108,6 +4225,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
41084225 .unused,
41094226 .unused,
41104227 .unused,
4228 .unused,
4229 .unused,
4230 .unused,
41114231 },
41124232 .dst_temps = .{.{ .rc = .sse }},
41134233 .each = .{ .once = &.{
......@@ -4123,7 +4243,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
41234243 },
41244244 .dst_temps = .{.{ .rc = .sse }},
41254245 .each = .{ .once = &.{
4126 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .si(0b01111) },
4246 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },
41274247 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
41284248 } },
41294249 }, .{
......@@ -4139,6 +4259,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
41394259 .unused,
41404260 .unused,
41414261 .unused,
4262 .unused,
4263 .unused,
4264 .unused,
41424265 },
41434266 .dst_temps = .{.{ .rc = .sse }},
41444267 .each = .{ .once = &.{
......@@ -4157,6 +4280,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
41574280 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
41584281 .unused,
41594282 .unused,
4283 .unused,
4284 .unused,
4285 .unused,
41604286 },
41614287 .dst_temps = .{.mem},
41624288 .each = .{ .once = &.{
......@@ -4179,6 +4305,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
41794305 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
41804306 .unused,
41814307 .unused,
4308 .unused,
4309 .unused,
4310 .unused,
41824311 },
41834312 .dst_temps = .{.mem},
41844313 .each = .{ .once = &.{
......@@ -4517,6 +4646,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
45174646 .unused,
45184647 .unused,
45194648 .unused,
4649 .unused,
4650 .unused,
4651 .unused,
45204652 },
45214653 .dst_temps = .{.{ .rc = .general_purpose }},
45224654 .clobbers = .{ .eflags = true },
......@@ -4541,6 +4673,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
45414673 .unused,
45424674 .unused,
45434675 .unused,
4676 .unused,
4677 .unused,
4678 .unused,
45444679 },
45454680 .dst_temps = .{.{ .rc = .general_purpose }},
45464681 .clobbers = .{ .eflags = true },
......@@ -4566,6 +4701,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
45664701 .unused,
45674702 .unused,
45684703 .unused,
4704 .unused,
4705 .unused,
4706 .unused,
45694707 },
45704708 .dst_temps = .{.{ .rc = .general_purpose }},
45714709 .clobbers = .{ .eflags = true },
......@@ -4592,6 +4730,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
45924730 .unused,
45934731 .unused,
45944732 .unused,
4733 .unused,
4734 .unused,
4735 .unused,
45954736 },
45964737 .dst_temps = .{.{ .rc = .general_purpose }},
45974738 .clobbers = .{ .eflags = true },
......@@ -4650,6 +4791,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
46504791 .unused,
46514792 .unused,
46524793 .unused,
4794 .unused,
4795 .unused,
4796 .unused,
46534797 },
46544798 .dst_temps = .{.{ .rc = .general_purpose }},
46554799 .clobbers = .{ .eflags = true },
......@@ -4676,6 +4820,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
46764820 .unused,
46774821 .unused,
46784822 .unused,
4823 .unused,
4824 .unused,
4825 .unused,
46794826 },
46804827 .dst_temps = .{.{ .rc = .general_purpose }},
46814828 .clobbers = .{ .eflags = true },
......@@ -4700,6 +4847,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
47004847 .unused,
47014848 .unused,
47024849 .unused,
4850 .unused,
4851 .unused,
4852 .unused,
47034853 },
47044854 .dst_temps = .{.{ .rc = .general_purpose }},
47054855 .clobbers = .{ .eflags = true },
......@@ -4722,6 +4872,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
47224872 .unused,
47234873 .unused,
47244874 .unused,
4875 .unused,
4876 .unused,
4877 .unused,
47254878 },
47264879 .dst_temps = .{.{ .rc = .general_purpose }},
47274880 .clobbers = .{ .eflags = true },
......@@ -4745,6 +4898,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
47454898 .unused,
47464899 .unused,
47474900 .unused,
4901 .unused,
4902 .unused,
4903 .unused,
47484904 },
47494905 .dst_temps = .{.{ .rc = .general_purpose }},
47504906 .clobbers = .{ .eflags = true },
......@@ -4769,6 +4925,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
47694925 .unused,
47704926 .unused,
47714927 .unused,
4928 .unused,
4929 .unused,
4930 .unused,
47724931 },
47734932 .dst_temps = .{.{ .rc = .general_purpose }},
47744933 .clobbers = .{ .eflags = true },
......@@ -4894,6 +5053,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
48945053 .unused,
48955054 .unused,
48965055 .unused,
5056 .unused,
5057 .unused,
5058 .unused,
48975059 },
48985060 .dst_temps = .{.{ .rc = .general_purpose }},
48995061 .clobbers = .{ .eflags = true },
......@@ -4917,6 +5079,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
49175079 .unused,
49185080 .unused,
49195081 .unused,
5082 .unused,
5083 .unused,
5084 .unused,
49205085 },
49215086 .dst_temps = .{.{ .rc = .general_purpose }},
49225087 .clobbers = .{ .eflags = true },
......@@ -5041,6 +5206,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
50415206 .unused,
50425207 .unused,
50435208 .unused,
5209 .unused,
5210 .unused,
5211 .unused,
50445212 },
50455213 .dst_temps = .{.{ .rc = .general_purpose }},
50465214 .clobbers = .{ .eflags = true },
......@@ -5064,6 +5232,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
50645232 .unused,
50655233 .unused,
50665234 .unused,
5235 .unused,
5236 .unused,
5237 .unused,
50675238 },
50685239 .dst_temps = .{.{ .rc = .general_purpose }},
50695240 .clobbers = .{ .eflags = true },
......@@ -5101,6 +5272,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
51015272 .unused,
51025273 .unused,
51035274 .unused,
5275 .unused,
5276 .unused,
5277 .unused,
51045278 },
51055279 .dst_temps = .{.{ .rc = .general_purpose }},
51065280 .clobbers = .{ .eflags = true },
......@@ -5156,6 +5330,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
51565330 .unused,
51575331 .unused,
51585332 .unused,
5333 .unused,
5334 .unused,
5335 .unused,
51595336 },
51605337 .dst_temps = .{.{ .rc = .general_purpose }},
51615338 .clobbers = .{ .eflags = true },
......@@ -5211,6 +5388,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
52115388 .unused,
52125389 .unused,
52135390 .unused,
5391 .unused,
5392 .unused,
5393 .unused,
52145394 },
52155395 .dst_temps = .{.{ .rc = .general_purpose }},
52165396 .clobbers = .{ .eflags = true },
......@@ -5236,6 +5416,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
52365416 .unused,
52375417 .unused,
52385418 .unused,
5419 .unused,
5420 .unused,
5421 .unused,
52395422 },
52405423 .dst_temps = .{.{ .rc = .general_purpose }},
52415424 .clobbers = .{ .eflags = true },
......@@ -5258,6 +5441,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
52585441 .unused,
52595442 .unused,
52605443 .unused,
5444 .unused,
5445 .unused,
5446 .unused,
52615447 },
52625448 .dst_temps = .{.{ .rc = .general_purpose }},
52635449 .clobbers = .{ .eflags = true },
......@@ -5285,6 +5471,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
52855471 .unused,
52865472 .unused,
52875473 .unused,
5474 .unused,
5475 .unused,
5476 .unused,
52885477 },
52895478 .dst_temps = .{.{ .rc = .general_purpose }},
52905479 .clobbers = .{ .eflags = true },
......@@ -5311,6 +5500,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
53115500 .unused,
53125501 .unused,
53135502 .unused,
5503 .unused,
5504 .unused,
5505 .unused,
53145506 },
53155507 .dst_temps = .{.{ .rc = .general_purpose }},
53165508 .clobbers = .{ .eflags = true },
......@@ -5339,6 +5531,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
53395531 .unused,
53405532 .unused,
53415533 .unused,
5534 .unused,
5535 .unused,
5536 .unused,
53425537 },
53435538 .dst_temps = .{.{ .rc = .general_purpose }},
53445539 .clobbers = .{ .eflags = true },
......@@ -5366,6 +5561,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
53665561 .unused,
53675562 .unused,
53685563 .unused,
5564 .unused,
5565 .unused,
5566 .unused,
53695567 },
53705568 .dst_temps = .{.{ .rc = .general_purpose }},
53715569 .clobbers = .{ .eflags = true },
......@@ -5393,6 +5591,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
53935591 .unused,
53945592 .unused,
53955593 .unused,
5594 .unused,
5595 .unused,
5596 .unused,
53965597 },
53975598 .dst_temps = .{.{ .rc = .general_purpose }},
53985599 .clobbers = .{ .eflags = true },
......@@ -5419,6 +5620,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
54195620 .unused,
54205621 .unused,
54215622 .unused,
5623 .unused,
5624 .unused,
5625 .unused,
54225626 },
54235627 .dst_temps = .{.{ .rc = .general_purpose }},
54245628 .clobbers = .{ .eflags = true },
......@@ -5447,6 +5651,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
54475651 .unused,
54485652 .unused,
54495653 .unused,
5654 .unused,
5655 .unused,
5656 .unused,
54505657 },
54515658 .dst_temps = .{.{ .rc = .general_purpose }},
54525659 .clobbers = .{ .eflags = true },
......@@ -5474,6 +5681,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
54745681 .unused,
54755682 .unused,
54765683 .unused,
5684 .unused,
5685 .unused,
5686 .unused,
54775687 },
54785688 .dst_temps = .{.{ .rc = .general_purpose }},
54795689 .clobbers = .{ .eflags = true },
......@@ -5504,6 +5714,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
55045714 .unused,
55055715 .unused,
55065716 .unused,
5717 .unused,
5718 .unused,
5719 .unused,
55075720 },
55085721 .dst_temps = .{.{ .rc = .general_purpose }},
55095722 .clobbers = .{ .eflags = true },
......@@ -5533,6 +5746,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
55335746 .unused,
55345747 .unused,
55355748 .unused,
5749 .unused,
5750 .unused,
5751 .unused,
55365752 },
55375753 .dst_temps = .{.{ .rc = .general_purpose }},
55385754 .clobbers = .{ .eflags = true },
......@@ -5562,6 +5778,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
55625778 .unused,
55635779 .unused,
55645780 .unused,
5781 .unused,
5782 .unused,
5783 .unused,
55655784 },
55665785 .dst_temps = .{.{ .rc = .general_purpose }},
55675786 .clobbers = .{ .eflags = true },
......@@ -5592,6 +5811,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
55925811 .unused,
55935812 .unused,
55945813 .unused,
5814 .unused,
5815 .unused,
5816 .unused,
55955817 },
55965818 .dst_temps = .{.{ .rc = .general_purpose }},
55975819 .clobbers = .{ .eflags = true },
......@@ -5621,6 +5843,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56215843 .unused,
56225844 .unused,
56235845 .unused,
5846 .unused,
5847 .unused,
5848 .unused,
56245849 },
56255850 .dst_temps = .{.{ .rc = .general_purpose }},
56265851 .clobbers = .{ .eflags = true },
......@@ -5650,6 +5875,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56505875 .unused,
56515876 .unused,
56525877 .unused,
5878 .unused,
5879 .unused,
5880 .unused,
56535881 },
56545882 .dst_temps = .{.mem},
56555883 .clobbers = .{ .eflags = true },
......@@ -5676,6 +5904,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56765904 .unused,
56775905 .unused,
56785906 .unused,
5907 .unused,
5908 .unused,
5909 .unused,
56795910 },
56805911 .dst_temps = .{.mem},
56815912 .clobbers = .{ .eflags = true },
......@@ -5702,6 +5933,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
57025933 .unused,
57035934 .unused,
57045935 .unused,
5936 .unused,
5937 .unused,
5938 .unused,
57055939 },
57065940 .dst_temps = .{.mem},
57075941 .clobbers = .{ .eflags = true },
......@@ -5728,6 +5962,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
57285962 .unused,
57295963 .unused,
57305964 .unused,
5965 .unused,
5966 .unused,
5967 .unused,
57315968 },
57325969 .dst_temps = .{.mem},
57335970 .clobbers = .{ .eflags = true },
......@@ -5754,6 +5991,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
57545991 .unused,
57555992 .unused,
57565993 .unused,
5994 .unused,
5995 .unused,
5996 .unused,
57575997 },
57585998 .dst_temps = .{.mem},
57595999 .clobbers = .{ .eflags = true },
......@@ -5780,6 +6020,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
57806020 .unused,
57816021 .unused,
57826022 .unused,
6023 .unused,
6024 .unused,
6025 .unused,
57836026 },
57846027 .dst_temps = .{.mem},
57856028 .clobbers = .{ .eflags = true },
......@@ -5806,6 +6049,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
58066049 .unused,
58076050 .unused,
58086051 .unused,
6052 .unused,
6053 .unused,
6054 .unused,
58096055 },
58106056 .dst_temps = .{.mem},
58116057 .clobbers = .{ .eflags = true },
......@@ -5832,6 +6078,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
58326078 .unused,
58336079 .unused,
58346080 .unused,
6081 .unused,
6082 .unused,
6083 .unused,
58356084 },
58366085 .dst_temps = .{.mem},
58376086 .clobbers = .{ .eflags = true },
......@@ -5858,6 +6107,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
58586107 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
58596108 .unused,
58606109 .unused,
6110 .unused,
6111 .unused,
6112 .unused,
58616113 },
58626114 .dst_temps = .{.mem},
58636115 .clobbers = .{ .eflags = true },
......@@ -5887,6 +6139,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
58876139 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
58886140 .unused,
58896141 .unused,
6142 .unused,
6143 .unused,
6144 .unused,
58906145 },
58916146 .dst_temps = .{.mem},
58926147 .clobbers = .{ .eflags = true },
......@@ -5916,7 +6171,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59166171 .unused,
59176172 .unused,
59186173 .unused,
5919 },
6174 .unused,
6175 .unused,
6176 .unused,
6177 },
59206178 .dst_temps = .{.mem},
59216179 .clobbers = .{ .eflags = true },
59226180 .each = .{ .once = &.{
......@@ -5945,6 +6203,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59456203 .unused,
59466204 .unused,
59476205 .unused,
6206 .unused,
6207 .unused,
6208 .unused,
59486209 },
59496210 .dst_temps = .{.mem},
59506211 .clobbers = .{ .eflags = true },
......@@ -5974,6 +6235,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59746235 .unused,
59756236 .unused,
59766237 .unused,
6238 .unused,
6239 .unused,
6240 .unused,
59776241 },
59786242 .dst_temps = .{.mem},
59796243 .clobbers = .{ .eflags = true },
......@@ -6001,6 +6265,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
60016265 .unused,
60026266 .unused,
60036267 .unused,
6268 .unused,
6269 .unused,
6270 .unused,
60046271 },
60056272 .dst_temps = .{.mem},
60066273 .clobbers = .{ .eflags = true },
......@@ -6029,6 +6296,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
60296296 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
60306297 .unused,
60316298 .unused,
6299 .unused,
6300 .unused,
6301 .unused,
60326302 },
60336303 .dst_temps = .{.mem},
60346304 .clobbers = .{ .eflags = true },
......@@ -6058,6 +6328,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
60586328 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
60596329 .unused,
60606330 .unused,
6331 .unused,
6332 .unused,
6333 .unused,
60616334 },
60626335 .dst_temps = .{.mem},
60636336 .clobbers = .{ .eflags = true },
......@@ -6087,6 +6360,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
60876360 .unused,
60886361 .unused,
60896362 .unused,
6363 .unused,
6364 .unused,
6365 .unused,
60906366 },
60916367 .dst_temps = .{.mem},
60926368 .clobbers = .{ .eflags = true },
......@@ -6116,6 +6392,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61166392 .unused,
61176393 .unused,
61186394 .unused,
6395 .unused,
6396 .unused,
6397 .unused,
61196398 },
61206399 .dst_temps = .{.mem},
61216400 .clobbers = .{ .eflags = true },
......@@ -6145,6 +6424,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61456424 .unused,
61466425 .unused,
61476426 .unused,
6427 .unused,
6428 .unused,
6429 .unused,
61486430 },
61496431 .dst_temps = .{.mem},
61506432 .clobbers = .{ .eflags = true },
......@@ -6172,6 +6454,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61726454 .unused,
61736455 .unused,
61746456 .unused,
6457 .unused,
6458 .unused,
6459 .unused,
61756460 },
61766461 .dst_temps = .{.mem},
61776462 .clobbers = .{ .eflags = true },
......@@ -6200,6 +6485,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62006485 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
62016486 .unused,
62026487 .unused,
6488 .unused,
6489 .unused,
6490 .unused,
62036491 },
62046492 .dst_temps = .{.mem},
62056493 .clobbers = .{ .eflags = true },
......@@ -6229,6 +6517,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62296517 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
62306518 .unused,
62316519 .unused,
6520 .unused,
6521 .unused,
6522 .unused,
62326523 },
62336524 .dst_temps = .{.mem},
62346525 .clobbers = .{ .eflags = true },
......@@ -6258,6 +6549,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62586549 .unused,
62596550 .unused,
62606551 .unused,
6552 .unused,
6553 .unused,
6554 .unused,
62616555 },
62626556 .dst_temps = .{.mem},
62636557 .clobbers = .{ .eflags = true },
......@@ -6287,6 +6581,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62876581 .unused,
62886582 .unused,
62896583 .unused,
6584 .unused,
6585 .unused,
6586 .unused,
62906587 },
62916588 .dst_temps = .{.mem},
62926589 .clobbers = .{ .eflags = true },
......@@ -6316,6 +6613,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
63166613 .unused,
63176614 .unused,
63186615 .unused,
6616 .unused,
6617 .unused,
6618 .unused,
63196619 },
63206620 .dst_temps = .{.mem},
63216621 .clobbers = .{ .eflags = true },
......@@ -6343,6 +6643,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
63436643 .unused,
63446644 .unused,
63456645 .unused,
6646 .unused,
6647 .unused,
6648 .unused,
63466649 },
63476650 .dst_temps = .{.mem},
63486651 .clobbers = .{ .eflags = true },
......@@ -6371,6 +6674,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
63716674 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
63726675 .unused,
63736676 .unused,
6677 .unused,
6678 .unused,
6679 .unused,
63746680 },
63756681 .dst_temps = .{.mem},
63766682 .clobbers = .{ .eflags = true },
......@@ -6400,6 +6706,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
64006706 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
64016707 .unused,
64026708 .unused,
6709 .unused,
6710 .unused,
6711 .unused,
64036712 },
64046713 .dst_temps = .{.mem},
64056714 .clobbers = .{ .eflags = true },
......@@ -6429,6 +6738,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
64296738 .unused,
64306739 .unused,
64316740 .unused,
6741 .unused,
6742 .unused,
6743 .unused,
64326744 },
64336745 .dst_temps = .{.mem},
64346746 .clobbers = .{ .eflags = true },
......@@ -6458,6 +6770,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
64586770 .unused,
64596771 .unused,
64606772 .unused,
6773 .unused,
6774 .unused,
6775 .unused,
64616776 },
64626777 .dst_temps = .{.mem},
64636778 .clobbers = .{ .eflags = true },
......@@ -6487,6 +6802,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
64876802 .unused,
64886803 .unused,
64896804 .unused,
6805 .unused,
6806 .unused,
6807 .unused,
64906808 },
64916809 .dst_temps = .{.mem},
64926810 .clobbers = .{ .eflags = true },
......@@ -6515,6 +6833,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
65156833 .unused,
65166834 .unused,
65176835 .unused,
6836 .unused,
6837 .unused,
6838 .unused,
65186839 },
65196840 .dst_temps = .{.mem},
65206841 .clobbers = .{ .eflags = true },
......@@ -6544,6 +6865,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
65446865 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
65456866 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
65466867 .unused,
6868 .unused,
6869 .unused,
6870 .unused,
65476871 },
65486872 .dst_temps = .{.mem},
65496873 .clobbers = .{ .eflags = true },
......@@ -6581,6 +6905,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
65816905 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
65826906 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
65836907 .unused,
6908 .unused,
6909 .unused,
6910 .unused,
65846911 },
65856912 .dst_temps = .{.mem},
65866913 .clobbers = .{ .eflags = true },
......@@ -6617,6 +6944,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
66176944 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
66186945 .unused,
66196946 .unused,
6947 .unused,
6948 .unused,
6949 .unused,
66206950 },
66216951 .dst_temps = .{.mem},
66226952 .clobbers = .{ .eflags = true },
......@@ -6653,6 +6983,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
66536983 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
66546984 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
66556985 .unused,
6986 .unused,
6987 .unused,
6988 .unused,
66566989 },
66576990 .dst_temps = .{.mem},
66586991 .clobbers = .{ .eflags = true },
......@@ -6690,6 +7023,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
66907023 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
66917024 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
66927025 .unused,
7026 .unused,
7027 .unused,
7028 .unused,
66937029 },
66947030 .dst_temps = .{.mem},
66957031 .clobbers = .{ .eflags = true },
......@@ -6726,6 +7062,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
67267062 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
67277063 .unused,
67287064 .unused,
7065 .unused,
7066 .unused,
7067 .unused,
67297068 },
67307069 .dst_temps = .{.mem},
67317070 .clobbers = .{ .eflags = true },
......@@ -6762,6 +7101,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
67627101 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
67637102 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
67647103 .unused,
7104 .unused,
7105 .unused,
7106 .unused,
67657107 },
67667108 .dst_temps = .{.mem},
67677109 .clobbers = .{ .eflags = true },
......@@ -6799,6 +7141,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
67997141 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
68007142 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
68017143 .unused,
7144 .unused,
7145 .unused,
7146 .unused,
68027147 },
68037148 .dst_temps = .{.mem},
68047149 .clobbers = .{ .eflags = true },
......@@ -6835,6 +7180,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
68357180 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
68367181 .unused,
68377182 .unused,
7183 .unused,
7184 .unused,
7185 .unused,
68387186 },
68397187 .dst_temps = .{.mem},
68407188 .clobbers = .{ .eflags = true },
......@@ -6871,6 +7219,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
68717219 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
68727220 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
68737221 .unused,
7222 .unused,
7223 .unused,
7224 .unused,
68747225 },
68757226 .dst_temps = .{.mem},
68767227 .clobbers = .{ .eflags = true },
......@@ -6908,6 +7259,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
69087259 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
69097260 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
69107261 .unused,
7262 .unused,
7263 .unused,
7264 .unused,
69117265 },
69127266 .dst_temps = .{.mem},
69137267 .clobbers = .{ .eflags = true },
......@@ -6944,6 +7298,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
69447298 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
69457299 .unused,
69467300 .unused,
7301 .unused,
7302 .unused,
7303 .unused,
69477304 },
69487305 .dst_temps = .{.mem},
69497306 .clobbers = .{ .eflags = true },
......@@ -6981,8 +7338,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
69817338 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
69827339 const extra = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data;
69837340 switch (extra.compareOperator()) {
6984 .eq, .neq => if (cg.typeOf(extra.lhs).scalarType(zcu).isRuntimeFloat())
6985 break :fallback try cg.airCmpVector(inst),
7341 .eq, .neq => {},
69867342 else => break :fallback try cg.airCmpVector(inst),
69877343 }
69887344 var ops = try cg.tempsFromOperands(inst, .{ extra.lhs, extra.rhs });
......@@ -7004,7 +7360,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
70047360 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
70057361 .{ .src = .{ .to_ymm, .to_ymm } },
70067362 },
7007 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7363 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
70087364 .kind = .all,
70097365 .inverted = switch (cc) {
70107366 else => unreachable,
......@@ -7024,7 +7380,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
70247380 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
70257381 .{ .src = .{ .to_ymm, .to_ymm } },
70267382 },
7027 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7383 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
70287384 .kind = .all,
70297385 .inverted = switch (cc) {
70307386 else => unreachable,
......@@ -7044,7 +7400,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
70447400 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
70457401 .{ .src = .{ .to_ymm, .to_ymm } },
70467402 },
7047 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7403 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
70487404 .kind = .all,
70497405 .inverted = switch (cc) {
70507406 else => unreachable,
......@@ -7064,7 +7420,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
70647420 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
70657421 .{ .src = .{ .to_ymm, .to_ymm } },
70667422 },
7067 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7423 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
70687424 .kind = .all,
70697425 .inverted = switch (cc) {
70707426 else => unreachable,
......@@ -7084,7 +7440,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
70847440 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
70857441 .{ .src = .{ .to_xmm, .to_xmm } },
70867442 },
7087 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7443 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
70887444 .kind = .all,
70897445 .inverted = switch (cc) {
70907446 else => unreachable,
......@@ -7104,7 +7460,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
71047460 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
71057461 .{ .src = .{ .to_xmm, .to_xmm } },
71067462 },
7107 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7463 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
71087464 .kind = .all,
71097465 .inverted = switch (cc) {
71107466 else => unreachable,
......@@ -7124,7 +7480,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
71247480 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
71257481 .{ .src = .{ .to_xmm, .to_xmm } },
71267482 },
7127 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7483 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
71287484 .kind = .all,
71297485 .inverted = switch (cc) {
71307486 else => unreachable,
......@@ -7144,7 +7500,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
71447500 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
71457501 .{ .src = .{ .to_xmm, .to_xmm } },
71467502 },
7147 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7503 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
71487504 .kind = .all,
71497505 .inverted = switch (cc) {
71507506 else => unreachable,
......@@ -7409,6 +7765,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
74097765 .unused,
74107766 .unused,
74117767 .unused,
7768 .unused,
7769 .unused,
7770 .unused,
74127771 },
74137772 .dst_temps = .{.mem},
74147773 .clobbers = .{ .eflags = true },
......@@ -7445,6 +7804,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
74457804 .{ .kind = .{ .rc = .sse } },
74467805 .unused,
74477806 .unused,
7807 .unused,
7808 .unused,
7809 .unused,
74487810 },
74497811 .dst_temps = .{.mem},
74507812 .clobbers = .{ .eflags = true },
......@@ -7487,6 +7849,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
74877849 .{ .kind = .{ .rc = .sse } },
74887850 .unused,
74897851 .unused,
7852 .unused,
7853 .unused,
7854 .unused,
74907855 },
74917856 .dst_temps = .{.mem},
74927857 .clobbers = .{ .eflags = true },
......@@ -7531,6 +7896,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
75317896 .{ .kind = .{ .rc = .sse } },
75327897 .unused,
75337898 .unused,
7899 .unused,
7900 .unused,
7901 .unused,
75347902 },
75357903 .dst_temps = .{.mem},
75367904 .clobbers = .{ .eflags = true },
......@@ -7573,6 +7941,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
75737941 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
75747942 .{ .kind = .{ .rc = .sse } },
75757943 .unused,
7944 .unused,
7945 .unused,
7946 .unused,
75767947 },
75777948 .dst_temps = .{.mem},
75787949 .clobbers = .{ .eflags = true },
......@@ -7641,6 +8012,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
76418012 .{ .kind = .{ .rc = .sse } },
76428013 .unused,
76438014 .unused,
8015 .unused,
8016 .unused,
8017 .unused,
76448018 },
76458019 .dst_temps = .{.mem},
76468020 .clobbers = .{ .eflags = true },
......@@ -7683,6 +8057,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
76838057 .{ .kind = .{ .rc = .sse } },
76848058 .unused,
76858059 .unused,
8060 .unused,
8061 .unused,
8062 .unused,
76868063 },
76878064 .dst_temps = .{.mem},
76888065 .clobbers = .{ .eflags = true },
......@@ -7727,6 +8104,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
77278104 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
77288105 .{ .kind = .{ .rc = .sse } },
77298106 .unused,
8107 .unused,
8108 .unused,
8109 .unused,
77308110 },
77318111 .dst_temps = .{.mem},
77328112 .clobbers = .{ .eflags = true },
......@@ -7795,6 +8175,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
77958175 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
77968176 .{ .kind = .{ .rc = .sse } },
77978177 .unused,
8178 .unused,
8179 .unused,
8180 .unused,
77988181 },
77998182 .dst_temps = .{.mem},
78008183 .clobbers = .{ .eflags = true },
......@@ -7863,6 +8246,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
78638246 .{ .kind = .{ .rc = .sse } },
78648247 .unused,
78658248 .unused,
8249 .unused,
8250 .unused,
8251 .unused,
78668252 },
78678253 .dst_temps = .{.mem},
78688254 .clobbers = .{ .eflags = true },
......@@ -7905,6 +8291,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
79058291 .{ .kind = .{ .rc = .sse } },
79068292 .unused,
79078293 .unused,
8294 .unused,
8295 .unused,
8296 .unused,
79088297 },
79098298 .dst_temps = .{.mem},
79108299 .clobbers = .{ .eflags = true },
......@@ -7949,6 +8338,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
79498338 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
79508339 .{ .kind = .{ .rc = .sse } },
79518340 .unused,
8341 .unused,
8342 .unused,
8343 .unused,
79528344 },
79538345 .dst_temps = .{.mem},
79548346 .clobbers = .{ .eflags = true },
......@@ -8017,6 +8409,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
80178409 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
80188410 .{ .kind = .{ .rc = .sse } },
80198411 .unused,
8412 .unused,
8413 .unused,
8414 .unused,
80208415 },
80218416 .dst_temps = .{.mem},
80228417 .clobbers = .{ .eflags = true },
......@@ -8085,6 +8480,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
80858480 .{ .kind = .{ .rc = .mmx } },
80868481 .unused,
80878482 .unused,
8483 .unused,
8484 .unused,
8485 .unused,
80888486 },
80898487 .dst_temps = .{.mem},
80908488 .clobbers = .{ .eflags = true },
......@@ -8127,6 +8525,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
81278525 .{ .kind = .{ .rc = .mmx } },
81288526 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
81298527 .{ .kind = .{ .rc = .mmx } },
8528 .unused,
8529 .unused,
8530 .unused,
81308531 },
81318532 .dst_temps = .{.mem},
81328533 .clobbers = .{ .eflags = true },
......@@ -8199,6 +8600,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
81998600 .{ .kind = .{ .rc = .mmx } },
82008601 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
82018602 .{ .kind = .{ .rc = .mmx } },
8603 .unused,
8604 .unused,
8605 .unused,
82028606 },
82038607 .dst_temps = .{.mem},
82048608 .clobbers = .{ .eflags = true },
......@@ -8273,6 +8677,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
82738677 .unused,
82748678 .unused,
82758679 .unused,
8680 .unused,
8681 .unused,
8682 .unused,
82768683 },
82778684 .dst_temps = .{.{ .rc = .general_purpose }},
82788685 .clobbers = .{ .eflags = true },
......@@ -8302,6 +8709,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
83028709 .unused,
83038710 .unused,
83048711 .unused,
8712 .unused,
8713 .unused,
8714 .unused,
83058715 },
83068716 .dst_temps = .{.{ .rc = .general_purpose }},
83078717 .clobbers = .{ .eflags = true },
......@@ -8331,6 +8741,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
83318741 .unused,
83328742 .unused,
83338743 .unused,
8744 .unused,
8745 .unused,
8746 .unused,
83348747 },
83358748 .dst_temps = .{.{ .rc = .general_purpose }},
83368749 .clobbers = .{ .eflags = true },
......@@ -8361,6 +8774,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
83618774 .unused,
83628775 .unused,
83638776 .unused,
8777 .unused,
8778 .unused,
8779 .unused,
83648780 },
83658781 .dst_temps = .{.{ .rc = .general_purpose }},
83668782 .clobbers = .{ .eflags = true },
......@@ -8390,6 +8806,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
83908806 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
83918807 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
83928808 .unused,
8809 .unused,
8810 .unused,
8811 .unused,
83938812 },
83948813 .dst_temps = .{.{ .rc = .general_purpose }},
83958814 .clobbers = .{ .eflags = true },
......@@ -8426,6 +8845,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
84268845 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
84278846 .unused,
84288847 .unused,
8848 .unused,
8849 .unused,
8850 .unused,
84298851 },
84308852 .dst_temps = .{.{ .rc = .general_purpose }},
84318853 .clobbers = .{ .eflags = true },
......@@ -8456,6 +8878,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
84568878 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
84578879 .unused,
84588880 .unused,
8881 .unused,
8882 .unused,
8883 .unused,
84598884 },
84608885 .dst_temps = .{.{ .rc = .general_purpose }},
84618886 .clobbers = .{ .eflags = true },
......@@ -8486,6 +8911,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
84868911 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
84878912 .unused,
84888913 .unused,
8914 .unused,
8915 .unused,
8916 .unused,
84898917 },
84908918 .dst_temps = .{.{ .rc = .general_purpose }},
84918919 .clobbers = .{ .eflags = true },
......@@ -8517,6 +8945,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
85178945 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
85188946 .unused,
85198947 .unused,
8948 .unused,
8949 .unused,
8950 .unused,
85208951 },
85218952 .dst_temps = .{.{ .rc = .general_purpose }},
85228953 .clobbers = .{ .eflags = true },
......@@ -8547,6 +8978,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
85478978 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
85488979 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
85498980 .unused,
8981 .unused,
8982 .unused,
8983 .unused,
85508984 },
85518985 .dst_temps = .{.{ .rc = .general_purpose }},
85528986 .clobbers = .{ .eflags = true },
......@@ -8585,6 +9019,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
85859019 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
85869020 .unused,
85879021 .unused,
9022 .unused,
9023 .unused,
9024 .unused,
85889025 },
85899026 .dst_temps = .{.{ .rc = .general_purpose }},
85909027 .clobbers = .{ .eflags = true },
......@@ -8616,6 +9053,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
86169053 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
86179054 .unused,
86189055 .unused,
9056 .unused,
9057 .unused,
9058 .unused,
86199059 },
86209060 .dst_temps = .{.{ .rc = .general_purpose }},
86219061 .clobbers = .{ .eflags = true },
......@@ -8646,6 +9086,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
86469086 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
86479087 .unused,
86489088 .unused,
9089 .unused,
9090 .unused,
9091 .unused,
86499092 },
86509093 .dst_temps = .{.{ .rc = .general_purpose }},
86519094 .clobbers = .{ .eflags = true },
......@@ -8677,6 +9120,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
86779120 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
86789121 .unused,
86799122 .unused,
9123 .unused,
9124 .unused,
9125 .unused,
86809126 },
86819127 .dst_temps = .{.{ .rc = .general_purpose }},
86829128 .clobbers = .{ .eflags = true },
......@@ -8708,6 +9154,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
87089154 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
87099155 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
87109156 .unused,
9157 .unused,
9158 .unused,
9159 .unused,
87119160 },
87129161 .dst_temps = .{.{ .rc = .general_purpose }},
87139162 .clobbers = .{ .eflags = true },
......@@ -8744,6 +9193,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
87449193 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
87459194 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
87469195 .unused,
9196 .unused,
9197 .unused,
9198 .unused,
87479199 },
87489200 .dst_temps = .{.mem},
87499201 .clobbers = .{ .eflags = true },
......@@ -8775,8 +9227,42 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
87759227 }, .{
87769228 .required_features = .{ .f16c, null, null, null },
87779229 .src_constraints = .{
8778 .{ .scalar_exact_float = .{ .of = .qword, .is = .word } },
8779 .{ .scalar_exact_float = .{ .of = .qword, .is = .word } },
9230 .{ .scalar_float = .{ .of = .word, .is = .word } },
9231 .{ .scalar_float = .{ .of = .word, .is = .word } },
9232 },
9233 .patterns = &.{
9234 .{ .src = .{ .to_sse, .to_sse } },
9235 },
9236 .extra_temps = .{
9237 .{ .kind = .{ .rc = .sse } },
9238 .unused,
9239 .unused,
9240 .unused,
9241 .unused,
9242 .unused,
9243 .unused,
9244 .unused,
9245 .unused,
9246 },
9247 .dst_temps = .{.{ .mut_rc_mask = .{
9248 .ref = .src0,
9249 .rc = .sse,
9250 .info = .{ .kind = .all, .scalar = .dword },
9251 } }},
9252 .each = .{ .once = &.{
9253 .{ ._, .v_ps, .cvtph2, .dst0x, .src0x, ._, ._ },
9254 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1x, ._, ._ },
9255 .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) {
9256 else => unreachable,
9257 .e => 0b00000,
9258 .ne => 0b00100,
9259 }) },
9260 } },
9261 }, .{
9262 .required_features = .{ .f16c, null, null, null },
9263 .src_constraints = .{
9264 .{ .scalar_float = .{ .of = .qword, .is = .word } },
9265 .{ .scalar_float = .{ .of = .qword, .is = .word } },
87809266 },
87819267 .patterns = &.{
87829268 .{ .src = .{ .mem, .mem } },
......@@ -8791,15 +9277,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
87919277 .unused,
87929278 .unused,
87939279 .unused,
9280 .unused,
9281 .unused,
9282 .unused,
87949283 },
8795 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
8796 .kind = .all,
8797 .scalar = .dword,
8798 } } }},
9284 .dst_temps = .{.{ .mut_rc_mask = .{
9285 .ref = .src0,
9286 .rc = .sse,
9287 .info = .{ .kind = .all, .scalar = .dword },
9288 } }},
87999289 .each = .{ .once = &.{
88009290 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
88019291 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
8802 .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .si(switch (cc) {
9292 .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) {
88039293 else => unreachable,
88049294 .e => 0b00000,
88059295 .ne => 0b00100,
......@@ -8808,8 +9298,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
88089298 }, .{
88099299 .required_features = .{ .f16c, null, null, null },
88109300 .src_constraints = .{
8811 .{ .scalar_exact_float = .{ .of = .xword, .is = .word } },
8812 .{ .scalar_exact_float = .{ .of = .xword, .is = .word } },
9301 .{ .scalar_float = .{ .of = .xword, .is = .word } },
9302 .{ .scalar_float = .{ .of = .xword, .is = .word } },
88139303 },
88149304 .patterns = &.{
88159305 .{ .src = .{ .mem, .mem } },
......@@ -8824,44 +9314,2313 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
88249314 .unused,
88259315 .unused,
88269316 .unused,
9317 .unused,
9318 .unused,
9319 .unused,
88279320 },
8828 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
8829 .kind = .all,
8830 .scalar = .dword,
8831 } } }},
9321 .dst_temps = .{.{ .mut_rc_mask = .{
9322 .ref = .src0,
9323 .rc = .sse,
9324 .info = .{ .kind = .all, .scalar = .dword },
9325 } }},
88329326 .each = .{ .once = &.{
88339327 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
88349328 .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },
8835 .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .si(switch (cc) {
9329 .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .ui(switch (cc) {
88369330 else => unreachable,
88379331 .e => 0b00000,
88389332 .ne => 0b00100,
88399333 }) },
88409334 } },
8841 } },
8842 }) catch |err| switch (err) {
8843 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
8844 @tagName(air_tag),
8845 cg.typeOf(extra.lhs).fmt(pt),
8846 ops[0].tracking(cg),
8847 ops[1].tracking(cg),
8848 }),
8849 else => |e| return e,
8850 },
8851 .gte => unreachable,
8852 .gt => unreachable,
8853 }
8854 try res[0].finish(inst, &.{ extra.lhs, extra.rhs }, &ops, cg);
8855 },
8856
8857 .abs => |air_tag| if (use_old) try cg.airAbs(inst) else fallback: {
8858 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
8859 if (ty_op.ty.toType().isVector(zcu) and ty_op.ty.toType().childType(zcu).isRuntimeFloat()) break :fallback try cg.airAbs(inst);
8860 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
8861 var res: [1]Temp = undefined;
8862 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
8863 .required_features = .{ .cmov, null, null, null },
8864 .src_constraints = .{ .{ .int = .byte }, .any },
9335 }, .{
9336 .required_features = .{ .avx, null, null, null },
9337 .src_constraints = .{
9338 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
9339 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
9340 },
9341 .patterns = &.{
9342 .{ .src = .{ .to_sse, .mem } },
9343 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
9344 .{ .src = .{ .to_sse, .to_sse } },
9345 },
9346 .dst_temps = .{.{ .mut_rc_mask = .{
9347 .ref = .src0,
9348 .rc = .sse,
9349 .info = .{ .kind = .all, .scalar = .dword },
9350 } }},
9351 .each = .{ .once = &.{
9352 .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
9353 else => unreachable,
9354 .e => 0b00000,
9355 .ne => 0b00100,
9356 }) },
9357 } },
9358 }, .{
9359 .required_features = .{ .sse, null, null, null },
9360 .src_constraints = .{
9361 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
9362 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
9363 },
9364 .patterns = &.{
9365 .{ .src = .{ .to_mut_sse, .mem } },
9366 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
9367 .{ .src = .{ .to_mut_sse, .to_sse } },
9368 },
9369 .dst_temps = .{.{ .ref_mask = .{
9370 .ref = .src0,
9371 .info = .{ .kind = .all, .scalar = .dword },
9372 } }},
9373 .each = .{ .once = &.{
9374 .{ ._, ._ss, .cmp, .dst0x, .src1x, .ui(switch (cc) {
9375 else => unreachable,
9376 .e => 0b00000,
9377 .ne => 0b00100,
9378 }), ._ },
9379 } },
9380 }, .{
9381 .required_features = .{ .avx, null, null, null },
9382 .src_constraints = .{
9383 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
9384 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
9385 },
9386 .patterns = &.{
9387 .{ .src = .{ .to_sse, .mem } },
9388 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
9389 .{ .src = .{ .to_sse, .to_sse } },
9390 },
9391 .dst_temps = .{.{ .mut_rc_mask = .{
9392 .ref = .src0,
9393 .rc = .sse,
9394 .info = .{ .kind = .all, .scalar = .dword },
9395 } }},
9396 .each = .{ .once = &.{
9397 .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
9398 else => unreachable,
9399 .e => 0b00000,
9400 .ne => 0b00100,
9401 }) },
9402 } },
9403 }, .{
9404 .required_features = .{ .sse, null, null, null },
9405 .src_constraints = .{
9406 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
9407 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
9408 },
9409 .patterns = &.{
9410 .{ .src = .{ .to_mut_sse, .mem } },
9411 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
9412 .{ .src = .{ .to_mut_sse, .to_sse } },
9413 },
9414 .dst_temps = .{.{ .ref_mask = .{
9415 .ref = .src0,
9416 .info = .{ .kind = .all, .scalar = .dword },
9417 } }},
9418 .each = .{ .once = &.{
9419 .{ ._, ._ps, .cmp, .dst0x, .src1x, .ui(switch (cc) {
9420 else => unreachable,
9421 .e => 0b00000,
9422 .ne => 0b00100,
9423 }), ._ },
9424 } },
9425 }, .{
9426 .required_features = .{ .avx, null, null, null },
9427 .src_constraints = .{
9428 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
9429 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
9430 },
9431 .patterns = &.{
9432 .{ .src = .{ .to_sse, .mem } },
9433 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
9434 .{ .src = .{ .to_sse, .to_sse } },
9435 },
9436 .dst_temps = .{.{ .mut_rc_mask = .{
9437 .ref = .src0,
9438 .rc = .sse,
9439 .info = .{ .kind = .all, .scalar = .dword },
9440 } }},
9441 .each = .{ .once = &.{
9442 .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) {
9443 else => unreachable,
9444 .e => 0b00000,
9445 .ne => 0b00100,
9446 }) },
9447 } },
9448 }, .{
9449 .required_features = .{ .avx, null, null, null },
9450 .src_constraints = .{
9451 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
9452 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
9453 },
9454 .patterns = &.{
9455 .{ .src = .{ .to_sse, .mem } },
9456 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
9457 .{ .src = .{ .to_sse, .to_sse } },
9458 },
9459 .dst_temps = .{.{ .mut_rc_mask = .{
9460 .ref = .src0,
9461 .rc = .sse,
9462 .info = .{ .kind = .all, .scalar = .qword },
9463 } }},
9464 .each = .{ .once = &.{
9465 .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
9466 else => unreachable,
9467 .e => 0b00000,
9468 .ne => 0b00100,
9469 }) },
9470 } },
9471 }, .{
9472 .required_features = .{ .sse2, null, null, null },
9473 .src_constraints = .{
9474 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
9475 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
9476 },
9477 .patterns = &.{
9478 .{ .src = .{ .to_mut_sse, .mem } },
9479 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
9480 .{ .src = .{ .to_mut_sse, .to_sse } },
9481 },
9482 .dst_temps = .{.{ .ref_mask = .{
9483 .ref = .src0,
9484 .info = .{ .kind = .all, .scalar = .qword },
9485 } }},
9486 .each = .{ .once = &.{
9487 .{ ._, ._sd, .cmp, .dst0x, .src1x, .ui(switch (cc) {
9488 else => unreachable,
9489 .e => 0b00000,
9490 .ne => 0b00100,
9491 }), ._ },
9492 } },
9493 }, .{
9494 .required_features = .{ .avx, null, null, null },
9495 .src_constraints = .{
9496 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
9497 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
9498 },
9499 .patterns = &.{
9500 .{ .src = .{ .to_sse, .mem } },
9501 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
9502 .{ .src = .{ .to_sse, .to_sse } },
9503 },
9504 .dst_temps = .{.{ .mut_rc_mask = .{
9505 .ref = .src0,
9506 .rc = .sse,
9507 .info = .{ .kind = .all, .scalar = .qword },
9508 } }},
9509 .each = .{ .once = &.{
9510 .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
9511 else => unreachable,
9512 .e => 0b00000,
9513 .ne => 0b00100,
9514 }) },
9515 } },
9516 }, .{
9517 .required_features = .{ .sse2, null, null, null },
9518 .src_constraints = .{
9519 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
9520 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
9521 },
9522 .patterns = &.{
9523 .{ .src = .{ .to_mut_sse, .mem } },
9524 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
9525 .{ .src = .{ .to_mut_sse, .to_sse } },
9526 },
9527 .dst_temps = .{.{ .ref_mask = .{
9528 .ref = .src0,
9529 .info = .{ .kind = .all, .scalar = .qword },
9530 } }},
9531 .each = .{ .once = &.{
9532 .{ ._, ._pd, .cmp, .dst0x, .src1x, .ui(switch (cc) {
9533 else => unreachable,
9534 .e => 0b00000,
9535 .ne => 0b00100,
9536 }), ._ },
9537 } },
9538 }, .{
9539 .required_features = .{ .avx, null, null, null },
9540 .src_constraints = .{
9541 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
9542 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
9543 },
9544 .patterns = &.{
9545 .{ .src = .{ .to_sse, .mem } },
9546 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
9547 .{ .src = .{ .to_sse, .to_sse } },
9548 },
9549 .dst_temps = .{.{ .mut_rc_mask = .{
9550 .ref = .src0,
9551 .rc = .sse,
9552 .info = .{ .kind = .all, .scalar = .qword },
9553 } }},
9554 .each = .{ .once = &.{
9555 .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) {
9556 else => unreachable,
9557 .e => 0b00000,
9558 .ne => 0b00100,
9559 }) },
9560 } },
9561 }, .{
9562 .required_features = .{ .f16c, .slow_incdec, null, null },
9563 .src_constraints = .{
9564 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
9565 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
9566 },
9567 .patterns = &.{
9568 .{ .src = .{ .to_mem, .to_mem } },
9569 },
9570 .extra_temps = .{
9571 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9572 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9573 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
9574 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
9575 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
9576 .unused,
9577 .unused,
9578 .unused,
9579 .unused,
9580 },
9581 .dst_temps = .{.mem},
9582 .clobbers = .{ .eflags = true },
9583 .each = .{ .once = &.{
9584 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9585 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
9586 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
9587 .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
9588 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) {
9589 else => unreachable,
9590 .e => 0b00000,
9591 .ne => 0b00100,
9592 }) },
9593 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
9594 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
9595 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
9596 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9597 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9598 } },
9599 }, .{
9600 .required_features = .{ .f16c, null, null, null },
9601 .src_constraints = .{
9602 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
9603 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
9604 },
9605 .patterns = &.{
9606 .{ .src = .{ .to_mem, .to_mem } },
9607 },
9608 .extra_temps = .{
9609 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9610 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9611 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
9612 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
9613 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
9614 .unused,
9615 .unused,
9616 .unused,
9617 .unused,
9618 },
9619 .dst_temps = .{.mem},
9620 .clobbers = .{ .eflags = true },
9621 .each = .{ .once = &.{
9622 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9623 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
9624 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
9625 .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
9626 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) {
9627 else => unreachable,
9628 .e => 0b00000,
9629 .ne => 0b00100,
9630 }) },
9631 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
9632 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
9633 .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
9634 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9635 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9636 } },
9637 }, .{
9638 .required_features = .{ .avx, .slow_incdec, null, null },
9639 .dst_constraints = .{.{ .bool_vec = .dword }},
9640 .src_constraints = .{
9641 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9642 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9643 },
9644 .patterns = &.{
9645 .{ .src = .{ .to_mem, .to_mem } },
9646 },
9647 .call_frame = .{ .alignment = .@"16" },
9648 .extra_temps = .{
9649 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9650 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9651 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9652 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
9653 else => unreachable,
9654 .e => "__eqhf2",
9655 .ne => "__nehf2",
9656 } } } },
9657 .{ .type = .i32, .kind = .{ .reg = .eax } },
9658 .{ .type = .u8, .kind = .{ .reg = .cl } },
9659 .{ .type = .u32, .kind = .{ .reg = .edx } },
9660 .unused,
9661 .unused,
9662 },
9663 .dst_temps = .{.{ .rc = .general_purpose }},
9664 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9665 .each = .{ .once = &.{
9666 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
9667 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
9668 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
9669 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
9670 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
9671 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9672 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
9673 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
9674 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
9675 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
9676 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
9677 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
9678 .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
9679 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
9680 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
9681 } },
9682 }, .{
9683 .required_features = .{ .avx, null, null, null },
9684 .dst_constraints = .{.{ .bool_vec = .dword }},
9685 .src_constraints = .{
9686 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9687 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9688 },
9689 .patterns = &.{
9690 .{ .src = .{ .to_mem, .to_mem } },
9691 },
9692 .call_frame = .{ .alignment = .@"16" },
9693 .extra_temps = .{
9694 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9695 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9696 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9697 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
9698 else => unreachable,
9699 .e => "__eqhf2",
9700 .ne => "__nehf2",
9701 } } } },
9702 .{ .type = .i32, .kind = .{ .reg = .eax } },
9703 .{ .type = .u8, .kind = .{ .reg = .cl } },
9704 .{ .type = .u32, .kind = .{ .reg = .edx } },
9705 .unused,
9706 .unused,
9707 },
9708 .dst_temps = .{.{ .rc = .general_purpose }},
9709 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9710 .each = .{ .once = &.{
9711 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
9712 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
9713 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
9714 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
9715 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
9716 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9717 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
9718 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
9719 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
9720 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
9721 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
9722 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
9723 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
9724 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
9725 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
9726 } },
9727 }, .{
9728 .required_features = .{ .sse2, .slow_incdec, null, null },
9729 .dst_constraints = .{.{ .bool_vec = .dword }},
9730 .src_constraints = .{
9731 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9732 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9733 },
9734 .patterns = &.{
9735 .{ .src = .{ .to_mem, .to_mem } },
9736 },
9737 .call_frame = .{ .alignment = .@"16" },
9738 .extra_temps = .{
9739 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9740 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9741 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9742 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
9743 else => unreachable,
9744 .e => "__eqhf2",
9745 .ne => "__nehf2",
9746 } } } },
9747 .{ .type = .i32, .kind = .{ .reg = .eax } },
9748 .{ .type = .u8, .kind = .{ .reg = .cl } },
9749 .{ .type = .u32, .kind = .{ .reg = .edx } },
9750 .unused,
9751 .unused,
9752 },
9753 .dst_temps = .{.{ .rc = .general_purpose }},
9754 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9755 .each = .{ .once = &.{
9756 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
9757 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
9758 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
9759 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
9760 .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
9761 .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
9762 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9763 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
9764 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
9765 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
9766 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
9767 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
9768 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
9769 .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
9770 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
9771 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
9772 } },
9773 }, .{
9774 .required_features = .{ .sse2, null, null, null },
9775 .dst_constraints = .{.{ .bool_vec = .dword }},
9776 .src_constraints = .{
9777 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9778 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9779 },
9780 .patterns = &.{
9781 .{ .src = .{ .to_mem, .to_mem } },
9782 },
9783 .call_frame = .{ .alignment = .@"16" },
9784 .extra_temps = .{
9785 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9786 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9787 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9788 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
9789 else => unreachable,
9790 .e => "__eqhf2",
9791 .ne => "__nehf2",
9792 } } } },
9793 .{ .type = .i32, .kind = .{ .reg = .eax } },
9794 .{ .type = .u8, .kind = .{ .reg = .cl } },
9795 .{ .type = .u32, .kind = .{ .reg = .edx } },
9796 .unused,
9797 .unused,
9798 },
9799 .dst_temps = .{.{ .rc = .general_purpose }},
9800 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9801 .each = .{ .once = &.{
9802 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
9803 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
9804 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
9805 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
9806 .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
9807 .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
9808 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9809 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
9810 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
9811 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
9812 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
9813 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
9814 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
9815 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
9816 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
9817 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
9818 } },
9819 }, .{
9820 .required_features = .{ .sse, .slow_incdec, null, null },
9821 .dst_constraints = .{.{ .bool_vec = .dword }},
9822 .src_constraints = .{
9823 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9824 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9825 },
9826 .patterns = &.{
9827 .{ .src = .{ .to_mem, .to_mem } },
9828 },
9829 .call_frame = .{ .alignment = .@"16" },
9830 .extra_temps = .{
9831 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9832 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9833 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9834 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
9835 else => unreachable,
9836 .e => "__eqhf2",
9837 .ne => "__nehf2",
9838 } } } },
9839 .{ .type = .i32, .kind = .{ .reg = .eax } },
9840 .{ .type = .u8, .kind = .{ .reg = .cl } },
9841 .{ .type = .u32, .kind = .{ .reg = .edx } },
9842 .{ .type = .vector_8_f16, .kind = .mem },
9843 .unused,
9844 },
9845 .dst_temps = .{.{ .rc = .general_purpose }},
9846 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9847 .each = .{ .once = &.{
9848 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
9849 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
9850 .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
9851 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
9852 .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ },
9853 .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
9854 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
9855 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ },
9856 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9857 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
9858 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
9859 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
9860 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
9861 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
9862 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
9863 .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
9864 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
9865 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
9866 } },
9867 }, .{
9868 .required_features = .{ .sse, null, null, null },
9869 .dst_constraints = .{.{ .bool_vec = .dword }},
9870 .src_constraints = .{
9871 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9872 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9873 },
9874 .patterns = &.{
9875 .{ .src = .{ .to_mem, .to_mem } },
9876 },
9877 .call_frame = .{ .alignment = .@"16" },
9878 .extra_temps = .{
9879 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9880 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9881 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9882 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
9883 else => unreachable,
9884 .e => "__eqhf2",
9885 .ne => "__nehf2",
9886 } } } },
9887 .{ .type = .i32, .kind = .{ .reg = .eax } },
9888 .{ .type = .u8, .kind = .{ .reg = .cl } },
9889 .{ .type = .u32, .kind = .{ .reg = .edx } },
9890 .{ .type = .vector_8_f16, .kind = .mem },
9891 .unused,
9892 },
9893 .dst_temps = .{.{ .rc = .general_purpose }},
9894 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9895 .each = .{ .once = &.{
9896 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
9897 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
9898 .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
9899 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
9900 .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ },
9901 .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
9902 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
9903 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ },
9904 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9905 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
9906 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
9907 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
9908 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
9909 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
9910 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
9911 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
9912 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
9913 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
9914 } },
9915 }, .{
9916 .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
9917 .src_constraints = .{
9918 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9919 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9920 },
9921 .patterns = &.{
9922 .{ .src = .{ .to_mem, .to_mem } },
9923 },
9924 .call_frame = .{ .alignment = .@"16" },
9925 .extra_temps = .{
9926 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9927 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
9928 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9929 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9930 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
9931 else => unreachable,
9932 .e => "__eqhf2",
9933 .ne => "__nehf2",
9934 } } } },
9935 .{ .type = .i32, .kind = .{ .reg = .eax } },
9936 .{ .type = .u8, .kind = .{ .reg = .cl } },
9937 .{ .type = .u64, .kind = .{ .reg = .rdx } },
9938 .unused,
9939 },
9940 .dst_temps = .{.mem},
9941 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9942 .each = .{ .once = &.{
9943 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
9944 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
9945 .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
9946 .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
9947 .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
9948 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
9949 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
9950 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
9951 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
9952 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
9953 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
9954 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
9955 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ },
9956 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
9957 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
9958 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
9959 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
9960 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
9961 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
9962 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
9963 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
9964 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
9965 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
9966 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
9967 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
9968 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
9969 } },
9970 }, .{
9971 .required_features = .{ .@"64bit", .avx, null, null },
9972 .src_constraints = .{
9973 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9974 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9975 },
9976 .patterns = &.{
9977 .{ .src = .{ .to_mem, .to_mem } },
9978 },
9979 .call_frame = .{ .alignment = .@"16" },
9980 .extra_temps = .{
9981 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9982 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
9983 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9984 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9985 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
9986 else => unreachable,
9987 .e => "__eqhf2",
9988 .ne => "__nehf2",
9989 } } } },
9990 .{ .type = .i32, .kind = .{ .reg = .eax } },
9991 .{ .type = .u8, .kind = .{ .reg = .cl } },
9992 .{ .type = .u64, .kind = .{ .reg = .rdx } },
9993 .unused,
9994 },
9995 .dst_temps = .{.mem},
9996 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9997 .each = .{ .once = &.{
9998 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
9999 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10000 .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
10001 .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
10002 .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
10003 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
10004 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
10005 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
10006 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
10007 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
10008 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
10009 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
10010 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
10011 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
10012 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10013 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
10014 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
10015 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
10016 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10017 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
10018 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
10019 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
10020 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10021 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
10022 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
10023 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
10024 } },
10025 }, .{
10026 .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
10027 .src_constraints = .{
10028 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
10029 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
10030 },
10031 .patterns = &.{
10032 .{ .src = .{ .to_mem, .to_mem } },
10033 },
10034 .call_frame = .{ .alignment = .@"16" },
10035 .extra_temps = .{
10036 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10037 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10038 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
10039 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
10040 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
10041 else => unreachable,
10042 .e => "__eqhf2",
10043 .ne => "__nehf2",
10044 } } } },
10045 .{ .type = .i32, .kind = .{ .reg = .eax } },
10046 .{ .type = .u8, .kind = .{ .reg = .cl } },
10047 .{ .type = .u64, .kind = .{ .reg = .rdx } },
10048 .unused,
10049 },
10050 .dst_temps = .{.mem},
10051 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10052 .each = .{ .once = &.{
10053 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10054 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10055 .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
10056 .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
10057 .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
10058 .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
10059 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
10060 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
10061 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
10062 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
10063 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
10064 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
10065 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
10066 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ },
10067 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
10068 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10069 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
10070 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
10071 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
10072 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10073 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
10074 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
10075 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
10076 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10077 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
10078 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
10079 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
10080 } },
10081 }, .{
10082 .required_features = .{ .@"64bit", .sse2, null, null },
10083 .src_constraints = .{
10084 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
10085 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
10086 },
10087 .patterns = &.{
10088 .{ .src = .{ .to_mem, .to_mem } },
10089 },
10090 .call_frame = .{ .alignment = .@"16" },
10091 .extra_temps = .{
10092 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10093 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10094 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
10095 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
10096 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
10097 else => unreachable,
10098 .e => "__eqhf2",
10099 .ne => "__nehf2",
10100 } } } },
10101 .{ .type = .i32, .kind = .{ .reg = .eax } },
10102 .{ .type = .u8, .kind = .{ .reg = .cl } },
10103 .{ .type = .u64, .kind = .{ .reg = .rdx } },
10104 .unused,
10105 },
10106 .dst_temps = .{.mem},
10107 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10108 .each = .{ .once = &.{
10109 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10110 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10111 .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
10112 .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
10113 .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
10114 .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
10115 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
10116 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
10117 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
10118 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
10119 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
10120 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
10121 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
10122 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
10123 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
10124 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10125 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
10126 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
10127 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
10128 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10129 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
10130 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
10131 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
10132 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10133 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
10134 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
10135 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
10136 } },
10137 }, .{
10138 .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
10139 .src_constraints = .{
10140 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
10141 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
10142 },
10143 .patterns = &.{
10144 .{ .src = .{ .to_mem, .to_mem } },
10145 },
10146 .call_frame = .{ .alignment = .@"16" },
10147 .extra_temps = .{
10148 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10149 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10150 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
10151 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
10152 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
10153 else => unreachable,
10154 .e => "__eqhf2",
10155 .ne => "__nehf2",
10156 } } } },
10157 .{ .type = .i32, .kind = .{ .reg = .eax } },
10158 .{ .type = .u8, .kind = .{ .reg = .cl } },
10159 .{ .type = .u64, .kind = .{ .reg = .rdx } },
10160 .{ .type = .vector_8_f16, .kind = .mem },
10161 },
10162 .dst_temps = .{.mem},
10163 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10164 .each = .{ .once = &.{
10165 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10166 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10167 .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
10168 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
10169 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ },
10170 .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
10171 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
10172 .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ },
10173 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
10174 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
10175 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
10176 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
10177 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
10178 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
10179 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
10180 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ },
10181 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
10182 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10183 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
10184 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
10185 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
10186 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10187 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
10188 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
10189 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
10190 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10191 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
10192 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
10193 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
10194 } },
10195 }, .{
10196 .required_features = .{ .@"64bit", .sse, null, null },
10197 .src_constraints = .{
10198 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
10199 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
10200 },
10201 .patterns = &.{
10202 .{ .src = .{ .to_mem, .to_mem } },
10203 },
10204 .call_frame = .{ .alignment = .@"16" },
10205 .extra_temps = .{
10206 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10207 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10208 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
10209 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
10210 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
10211 else => unreachable,
10212 .e => "__eqhf2",
10213 .ne => "__nehf2",
10214 } } } },
10215 .{ .type = .i32, .kind = .{ .reg = .eax } },
10216 .{ .type = .u8, .kind = .{ .reg = .cl } },
10217 .{ .type = .u64, .kind = .{ .reg = .rdx } },
10218 .{ .type = .vector_8_f16, .kind = .mem },
10219 },
10220 .dst_temps = .{.mem},
10221 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10222 .each = .{ .once = &.{
10223 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10224 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10225 .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
10226 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
10227 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ },
10228 .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
10229 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
10230 .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ },
10231 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
10232 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
10233 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
10234 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
10235 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
10236 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
10237 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
10238 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
10239 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
10240 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10241 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
10242 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
10243 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
10244 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10245 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
10246 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
10247 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
10248 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10249 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
10250 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
10251 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
10252 } },
10253 }, .{
10254 .required_features = .{ .avx, .slow_incdec, null, null },
10255 .src_constraints = .{
10256 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
10257 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
10258 },
10259 .patterns = &.{
10260 .{ .src = .{ .to_mem, .to_mem } },
10261 },
10262 .extra_temps = .{
10263 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10264 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
10265 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
10266 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10267 .unused,
10268 .unused,
10269 .unused,
10270 .unused,
10271 .unused,
10272 },
10273 .dst_temps = .{.mem},
10274 .clobbers = .{ .eflags = true },
10275 .each = .{ .once = &.{
10276 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10277 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
10278 .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
10279 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
10280 else => unreachable,
10281 .e => 0b00000,
10282 .ne => 0b00100,
10283 }) },
10284 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
10285 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
10286 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
10287 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10288 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10289 } },
10290 }, .{
10291 .required_features = .{ .avx, null, null, null },
10292 .src_constraints = .{
10293 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
10294 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
10295 },
10296 .patterns = &.{
10297 .{ .src = .{ .to_mem, .to_mem } },
10298 },
10299 .extra_temps = .{
10300 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10301 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
10302 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
10303 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10304 .unused,
10305 .unused,
10306 .unused,
10307 .unused,
10308 .unused,
10309 },
10310 .dst_temps = .{.mem},
10311 .clobbers = .{ .eflags = true },
10312 .each = .{ .once = &.{
10313 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10314 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
10315 .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
10316 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
10317 else => unreachable,
10318 .e => 0b00000,
10319 .ne => 0b00100,
10320 }) },
10321 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
10322 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
10323 .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
10324 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10325 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10326 } },
10327 }, .{
10328 .required_features = .{ .sse2, null, null, null },
10329 .src_constraints = .{
10330 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
10331 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
10332 },
10333 .patterns = &.{
10334 .{ .src = .{ .to_mem, .to_mem } },
10335 },
10336 .extra_temps = .{
10337 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10338 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
10339 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
10340 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
10341 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10342 .unused,
10343 .unused,
10344 .unused,
10345 .unused,
10346 },
10347 .dst_temps = .{.mem},
10348 .clobbers = .{ .eflags = true },
10349 .each = .{ .once = &.{
10350 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10351 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
10352 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10353 .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
10354 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
10355 else => unreachable,
10356 .e => 0b00000,
10357 .ne => 0b00100,
10358 }), ._ },
10359 .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) {
10360 else => unreachable,
10361 .e => 0b00000,
10362 .ne => 0b00100,
10363 }), ._ },
10364 .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ },
10365 .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ },
10366 .{ ._, .p_b, .movmsk, .tmp4d, .tmp2x, ._, ._ },
10367 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
10368 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
10369 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10370 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10371 } },
10372 }, .{
10373 .required_features = .{ .sse, null, null, null },
10374 .src_constraints = .{
10375 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
10376 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
10377 },
10378 .patterns = &.{
10379 .{ .src = .{ .to_mem, .to_mem } },
10380 },
10381 .extra_temps = .{
10382 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10383 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
10384 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
10385 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10386 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10387 .unused,
10388 .unused,
10389 .unused,
10390 .unused,
10391 },
10392 .dst_temps = .{.mem},
10393 .clobbers = .{ .eflags = true },
10394 .each = .{ .once = &.{
10395 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10396 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
10397 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10398 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
10399 else => unreachable,
10400 .e => 0b00000,
10401 .ne => 0b00100,
10402 }), ._ },
10403 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
10404 .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
10405 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) {
10406 else => unreachable,
10407 .e => 0b00000,
10408 .ne => 0b00100,
10409 }), ._ },
10410 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
10411 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
10412 .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
10413 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
10414 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
10415 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10416 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10417 } },
10418 }, .{
10419 .required_features = .{ .sse, null, null, null },
10420 .src_constraints = .{
10421 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
10422 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
10423 },
10424 .patterns = &.{
10425 .{ .src = .{ .to_mem, .to_mem } },
10426 },
10427 .extra_temps = .{
10428 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10429 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
10430 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
10431 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10432 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10433 .unused,
10434 .unused,
10435 .unused,
10436 .unused,
10437 },
10438 .dst_temps = .{.mem},
10439 .clobbers = .{ .eflags = true },
10440 .each = .{ .once = &.{
10441 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10442 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
10443 .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
10444 .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ },
10445 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .ui(switch (cc) {
10446 else => unreachable,
10447 .e => 0b00000,
10448 .ne => 0b00100,
10449 }), ._ },
10450 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
10451 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
10452 .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
10453 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
10454 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
10455 .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10456 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
10457 else => unreachable,
10458 .e => 0b00000,
10459 .ne => 0b00100,
10460 }), ._ },
10461 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
10462 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10463 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10464 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
10465 } },
10466 }, .{
10467 .required_features = .{ .avx, .slow_incdec, null, null },
10468 .src_constraints = .{
10469 .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
10470 .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
10471 },
10472 .patterns = &.{
10473 .{ .src = .{ .to_mem, .to_mem } },
10474 },
10475 .extra_temps = .{
10476 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10477 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
10478 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
10479 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
10480 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10481 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10482 .unused,
10483 .unused,
10484 .unused,
10485 },
10486 .dst_temps = .{.mem},
10487 .clobbers = .{ .eflags = true },
10488 .each = .{ .once = &.{
10489 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10490 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
10491 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
10492 .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
10493 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
10494 else => unreachable,
10495 .e => 0b00000,
10496 .ne => 0b00100,
10497 }) },
10498 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) {
10499 else => unreachable,
10500 .e => 0b00000,
10501 .ne => 0b00100,
10502 }) },
10503 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
10504 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
10505 .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
10506 .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
10507 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
10508 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
10509 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10510 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10511 } },
10512 }, .{
10513 .required_features = .{ .avx, null, null, null },
10514 .src_constraints = .{
10515 .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
10516 .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
10517 },
10518 .patterns = &.{
10519 .{ .src = .{ .to_mem, .to_mem } },
10520 },
10521 .extra_temps = .{
10522 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10523 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
10524 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
10525 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
10526 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10527 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10528 .unused,
10529 .unused,
10530 .unused,
10531 },
10532 .dst_temps = .{.mem},
10533 .clobbers = .{ .eflags = true },
10534 .each = .{ .once = &.{
10535 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10536 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
10537 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
10538 .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
10539 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
10540 else => unreachable,
10541 .e => 0b00000,
10542 .ne => 0b00100,
10543 }) },
10544 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) {
10545 else => unreachable,
10546 .e => 0b00000,
10547 .ne => 0b00100,
10548 }) },
10549 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
10550 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
10551 .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
10552 .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
10553 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
10554 .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
10555 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10556 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10557 } },
10558 }, .{
10559 .required_features = .{ .avx, null, null, null },
10560 .src_constraints = .{
10561 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
10562 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
10563 },
10564 .patterns = &.{
10565 .{ .src = .{ .to_mem, .to_mem } },
10566 },
10567 .extra_temps = .{
10568 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10569 .{ .type = .u32, .kind = .{ .reg = .rcx } },
10570 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10571 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
10572 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10573 .unused,
10574 .unused,
10575 .unused,
10576 .unused,
10577 },
10578 .dst_temps = .{.mem},
10579 .clobbers = .{ .eflags = true },
10580 .each = .{ .once = &.{
10581 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10582 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10583 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10584 .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
10585 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
10586 else => unreachable,
10587 .e => 0b00000,
10588 .ne => 0b00100,
10589 }) },
10590 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ },
10591 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
10592 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
10593 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
10594 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10595 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10596 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
10597 .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
10598 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
10599 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10600 .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
10601 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10602 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10603 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10604 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
10605 .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
10606 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
10607 } },
10608 }, .{
10609 .required_features = .{ .sse2, null, null, null },
10610 .src_constraints = .{
10611 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
10612 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
10613 },
10614 .patterns = &.{
10615 .{ .src = .{ .to_mem, .to_mem } },
10616 },
10617 .extra_temps = .{
10618 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10619 .{ .type = .u32, .kind = .{ .reg = .rcx } },
10620 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10621 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
10622 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10623 .unused,
10624 .unused,
10625 .unused,
10626 .unused,
10627 },
10628 .dst_temps = .{.mem},
10629 .clobbers = .{ .eflags = true },
10630 .each = .{ .once = &.{
10631 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10632 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10633 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10634 .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10635 .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
10636 else => unreachable,
10637 .e => 0b00000,
10638 .ne => 0b00100,
10639 }), ._ },
10640 .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ },
10641 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
10642 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
10643 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
10644 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10645 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10646 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
10647 .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
10648 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
10649 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10650 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
10651 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10652 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10653 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10654 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
10655 .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
10656 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
10657 } },
10658 }, .{
10659 .required_features = .{ .x87, .cmov, .slow_incdec, null },
10660 .src_constraints = .{
10661 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
10662 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
10663 },
10664 .patterns = &.{
10665 .{ .src = .{ .to_mem, .to_mem } },
10666 },
10667 .extra_temps = .{
10668 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10669 .{ .type = .u32, .kind = .{ .reg = .rcx } },
10670 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10671 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10672 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10673 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10674 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10675 .unused,
10676 .unused,
10677 },
10678 .dst_temps = .{.mem},
10679 .clobbers = .{ .eflags = true },
10680 .each = .{ .once = &.{
10681 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10682 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10683 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10684 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
10685 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
10686 .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
10687 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
10688 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
10689 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
10690 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
10691 .{ ._, switch (cc) {
10692 else => unreachable,
10693 .e => ._np,
10694 .ne => ._p,
10695 }, .set, .tmp4b, ._, ._, ._ },
10696 .{ ._, ._, switch (cc) {
10697 else => unreachable,
10698 .e => .@"and",
10699 .ne => .@"or",
10700 }, .tmp3b, .tmp4b, ._, ._ },
10701 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
10702 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
10703 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
10704 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10705 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10706 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10707 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10708 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
10709 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10710 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
10711 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10712 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10713 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10714 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10715 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10716 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
10717 } },
10718 }, .{
10719 .required_features = .{ .x87, .cmov, null, null },
10720 .src_constraints = .{
10721 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
10722 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
10723 },
10724 .patterns = &.{
10725 .{ .src = .{ .to_mem, .to_mem } },
10726 },
10727 .extra_temps = .{
10728 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10729 .{ .type = .u32, .kind = .{ .reg = .rcx } },
10730 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10731 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10732 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10733 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10734 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10735 .unused,
10736 .unused,
10737 },
10738 .dst_temps = .{.mem},
10739 .clobbers = .{ .eflags = true },
10740 .each = .{ .once = &.{
10741 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10742 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10743 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10744 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
10745 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
10746 .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
10747 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
10748 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
10749 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
10750 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
10751 .{ ._, switch (cc) {
10752 else => unreachable,
10753 .e => ._np,
10754 .ne => ._p,
10755 }, .set, .tmp4b, ._, ._, ._ },
10756 .{ ._, ._, switch (cc) {
10757 else => unreachable,
10758 .e => .@"and",
10759 .ne => .@"or",
10760 }, .tmp3b, .tmp4b, ._, ._ },
10761 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
10762 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
10763 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
10764 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10765 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10766 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10767 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10768 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
10769 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10770 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
10771 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10772 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10773 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10774 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10775 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10776 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
10777 } },
10778 }, .{
10779 .required_features = .{ .x87, null, null, null },
10780 .src_constraints = .{
10781 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
10782 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
10783 },
10784 .patterns = &.{
10785 .{ .src = .{ .to_mem, .to_mem } },
10786 },
10787 .extra_temps = .{
10788 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10789 .{ .type = .u32, .kind = .{ .reg = .rcx } },
10790 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10791 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10792 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10793 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10794 .{ .type = .u8, .kind = .{ .reg = .ah } },
10795 .unused,
10796 .unused,
10797 },
10798 .dst_temps = .{.mem},
10799 .clobbers = .{ .eflags = true },
10800 .each = .{ .once = &.{
10801 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10802 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10803 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10804 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
10805 .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
10806 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
10807 .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
10808 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
10809 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },
10810 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },
10811 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
10812 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
10813 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
10814 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
10815 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10816 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10817 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10818 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10819 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
10820 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10821 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
10822 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10823 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10824 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10825 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10826 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10827 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
10828 } },
10829 }, .{
10830 .required_features = .{ .x87, .cmov, .slow_incdec, null },
10831 .src_constraints = .{
10832 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
10833 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
10834 },
10835 .patterns = &.{
10836 .{ .src = .{ .to_mem, .to_mem } },
10837 },
10838 .extra_temps = .{
10839 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10840 .{ .type = .u32, .kind = .{ .reg = .rcx } },
10841 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10842 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10843 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10844 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10845 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10846 .unused,
10847 .unused,
10848 },
10849 .dst_temps = .{.mem},
10850 .clobbers = .{ .eflags = true },
10851 .each = .{ .once = &.{
10852 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10853 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10854 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10855 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
10856 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
10857 .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
10858 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
10859 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
10860 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
10861 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
10862 .{ ._, switch (cc) {
10863 else => unreachable,
10864 .e => ._np,
10865 .ne => ._p,
10866 }, .set, .tmp4b, ._, ._, ._ },
10867 .{ ._, ._, switch (cc) {
10868 else => unreachable,
10869 .e => .@"and",
10870 .ne => .@"or",
10871 }, .tmp3b, .tmp4b, ._, ._ },
10872 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
10873 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
10874 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
10875 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10876 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10877 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10878 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10879 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
10880 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10881 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
10882 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10883 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10884 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10885 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10886 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10887 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
10888 } },
10889 }, .{
10890 .required_features = .{ .x87, .cmov, null, null },
10891 .src_constraints = .{
10892 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
10893 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
10894 },
10895 .patterns = &.{
10896 .{ .src = .{ .to_mem, .to_mem } },
10897 },
10898 .extra_temps = .{
10899 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10900 .{ .type = .u32, .kind = .{ .reg = .rcx } },
10901 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10902 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10903 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10904 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10905 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10906 .unused,
10907 .unused,
10908 },
10909 .dst_temps = .{.mem},
10910 .clobbers = .{ .eflags = true },
10911 .each = .{ .once = &.{
10912 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10913 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10914 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10915 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
10916 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
10917 .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
10918 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
10919 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
10920 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
10921 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
10922 .{ ._, switch (cc) {
10923 else => unreachable,
10924 .e => ._np,
10925 .ne => ._p,
10926 }, .set, .tmp4b, ._, ._, ._ },
10927 .{ ._, ._, switch (cc) {
10928 else => unreachable,
10929 .e => .@"and",
10930 .ne => .@"or",
10931 }, .tmp3b, .tmp4b, ._, ._ },
10932 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
10933 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
10934 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
10935 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10936 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10937 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10938 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10939 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
10940 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10941 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
10942 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10943 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10944 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10945 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10946 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10947 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
10948 } },
10949 }, .{
10950 .required_features = .{ .x87, null, null, null },
10951 .src_constraints = .{
10952 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
10953 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
10954 },
10955 .patterns = &.{
10956 .{ .src = .{ .to_mem, .to_mem } },
10957 },
10958 .extra_temps = .{
10959 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10960 .{ .type = .u32, .kind = .{ .reg = .rcx } },
10961 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10962 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
10963 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10964 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10965 .{ .type = .u8, .kind = .{ .reg = .ah } },
10966 .unused,
10967 .unused,
10968 },
10969 .dst_temps = .{.mem},
10970 .clobbers = .{ .eflags = true },
10971 .each = .{ .once = &.{
10972 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10973 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
10974 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10975 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
10976 .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
10977 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
10978 .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
10979 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
10980 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },
10981 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },
10982 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
10983 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
10984 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
10985 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
10986 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10987 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10988 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10989 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10990 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
10991 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
10992 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
10993 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10994 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
10995 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10996 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
10997 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
10998 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
10999 } },
11000 }, .{
11001 .required_features = .{ .avx, .slow_incdec, null, null },
11002 .dst_constraints = .{.{ .bool_vec = .dword }},
11003 .src_constraints = .{
11004 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11005 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11006 },
11007 .patterns = &.{
11008 .{ .src = .{ .to_mem, .to_mem } },
11009 },
11010 .call_frame = .{ .alignment = .@"16" },
11011 .extra_temps = .{
11012 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11013 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11014 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11015 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11016 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11017 else => unreachable,
11018 .e => "__eqtf2",
11019 .ne => "__netf2",
11020 } } } },
11021 .{ .type = .i32, .kind = .{ .reg = .eax } },
11022 .{ .type = .u8, .kind = .{ .reg = .cl } },
11023 .{ .type = .u32, .kind = .{ .reg = .edx } },
11024 .unused,
11025 },
11026 .dst_temps = .{.{ .rc = .general_purpose }},
11027 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11028 .each = .{ .once = &.{
11029 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
11030 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11031 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11032 .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11033 .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11034 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
11035 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
11036 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
11037 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
11038 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11039 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
11040 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
11041 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
11042 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
11043 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11044 } },
11045 }, .{
11046 .required_features = .{ .avx, .slow_incdec, null, null },
11047 .dst_constraints = .{.{ .bool_vec = .dword }},
11048 .src_constraints = .{
11049 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11050 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11051 },
11052 .patterns = &.{
11053 .{ .src = .{ .to_mem, .to_mem } },
11054 },
11055 .call_frame = .{ .alignment = .@"16" },
11056 .extra_temps = .{
11057 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11058 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11059 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11060 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11061 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11062 else => unreachable,
11063 .e => "__eqtf2",
11064 .ne => "__netf2",
11065 } } } },
11066 .{ .type = .i32, .kind = .{ .reg = .eax } },
11067 .{ .type = .u8, .kind = .{ .reg = .cl } },
11068 .{ .type = .u32, .kind = .{ .reg = .edx } },
11069 .unused,
11070 },
11071 .dst_temps = .{.{ .rc = .general_purpose }},
11072 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11073 .each = .{ .once = &.{
11074 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
11075 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11076 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11077 .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11078 .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11079 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
11080 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
11081 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
11082 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
11083 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11084 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
11085 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
11086 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
11087 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
11088 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11089 } },
11090 }, .{
11091 .required_features = .{ .sse2, .slow_incdec, null, null },
11092 .dst_constraints = .{.{ .bool_vec = .dword }},
11093 .src_constraints = .{
11094 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11095 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11096 },
11097 .patterns = &.{
11098 .{ .src = .{ .to_mem, .to_mem } },
11099 },
11100 .call_frame = .{ .alignment = .@"16" },
11101 .extra_temps = .{
11102 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11103 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11104 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11105 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11106 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11107 else => unreachable,
11108 .e => "__eqtf2",
11109 .ne => "__netf2",
11110 } } } },
11111 .{ .type = .i32, .kind = .{ .reg = .eax } },
11112 .{ .type = .u8, .kind = .{ .reg = .cl } },
11113 .{ .type = .u32, .kind = .{ .reg = .edx } },
11114 .unused,
11115 },
11116 .dst_temps = .{.{ .rc = .general_purpose }},
11117 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11118 .each = .{ .once = &.{
11119 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
11120 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11121 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11122 .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11123 .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11124 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
11125 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
11126 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
11127 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
11128 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11129 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
11130 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
11131 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
11132 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
11133 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11134 } },
11135 }, .{
11136 .required_features = .{ .sse2, .slow_incdec, null, null },
11137 .dst_constraints = .{.{ .bool_vec = .dword }},
11138 .src_constraints = .{
11139 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11140 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11141 },
11142 .patterns = &.{
11143 .{ .src = .{ .to_mem, .to_mem } },
11144 },
11145 .call_frame = .{ .alignment = .@"16" },
11146 .extra_temps = .{
11147 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11148 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11149 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11150 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11151 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11152 else => unreachable,
11153 .e => "__eqtf2",
11154 .ne => "__netf2",
11155 } } } },
11156 .{ .type = .i32, .kind = .{ .reg = .eax } },
11157 .{ .type = .u8, .kind = .{ .reg = .cl } },
11158 .{ .type = .u32, .kind = .{ .reg = .edx } },
11159 .unused,
11160 },
11161 .dst_temps = .{.{ .rc = .general_purpose }},
11162 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11163 .each = .{ .once = &.{
11164 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
11165 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11166 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11167 .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11168 .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11169 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
11170 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
11171 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
11172 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
11173 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11174 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
11175 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
11176 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
11177 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
11178 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11179 } },
11180 }, .{
11181 .required_features = .{ .sse, .slow_incdec, null, null },
11182 .dst_constraints = .{.{ .bool_vec = .dword }},
11183 .src_constraints = .{
11184 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11185 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11186 },
11187 .patterns = &.{
11188 .{ .src = .{ .to_mem, .to_mem } },
11189 },
11190 .call_frame = .{ .alignment = .@"16" },
11191 .extra_temps = .{
11192 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11193 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11194 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11195 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11196 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11197 else => unreachable,
11198 .e => "__eqtf2",
11199 .ne => "__netf2",
11200 } } } },
11201 .{ .type = .i32, .kind = .{ .reg = .eax } },
11202 .{ .type = .u8, .kind = .{ .reg = .cl } },
11203 .{ .type = .u32, .kind = .{ .reg = .edx } },
11204 .unused,
11205 },
11206 .dst_temps = .{.{ .rc = .general_purpose }},
11207 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11208 .each = .{ .once = &.{
11209 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
11210 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11211 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11212 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11213 .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11214 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
11215 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
11216 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
11217 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
11218 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11219 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
11220 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
11221 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
11222 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
11223 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11224 } },
11225 }, .{
11226 .required_features = .{ .sse2, .slow_incdec, null, null },
11227 .dst_constraints = .{.{ .bool_vec = .dword }},
11228 .src_constraints = .{
11229 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11230 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11231 },
11232 .patterns = &.{
11233 .{ .src = .{ .to_mem, .to_mem } },
11234 },
11235 .call_frame = .{ .alignment = .@"16" },
11236 .extra_temps = .{
11237 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11238 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11239 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11240 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11241 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11242 else => unreachable,
11243 .e => "__eqtf2",
11244 .ne => "__netf2",
11245 } } } },
11246 .{ .type = .i32, .kind = .{ .reg = .eax } },
11247 .{ .type = .u8, .kind = .{ .reg = .cl } },
11248 .{ .type = .u32, .kind = .{ .reg = .edx } },
11249 .unused,
11250 },
11251 .dst_temps = .{.{ .rc = .general_purpose }},
11252 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11253 .each = .{ .once = &.{
11254 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
11255 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11256 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11257 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11258 .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11259 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
11260 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
11261 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
11262 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
11263 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11264 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
11265 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
11266 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
11267 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
11268 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11269 } },
11270 }, .{
11271 .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
11272 .src_constraints = .{
11273 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11274 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11275 },
11276 .patterns = &.{
11277 .{ .src = .{ .to_mem, .to_mem } },
11278 },
11279 .call_frame = .{ .alignment = .@"16" },
11280 .extra_temps = .{
11281 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11282 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11283 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11284 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11285 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11286 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11287 else => unreachable,
11288 .e => "__eqtf2",
11289 .ne => "__netf2",
11290 } } } },
11291 .{ .type = .i32, .kind = .{ .reg = .eax } },
11292 .{ .type = .u8, .kind = .{ .reg = .cl } },
11293 .{ .type = .u64, .kind = .{ .reg = .rdx } },
11294 },
11295 .dst_temps = .{.mem},
11296 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11297 .each = .{ .once = &.{
11298 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11299 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11300 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11301 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11302 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11303 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
11304 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
11305 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
11306 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
11307 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
11308 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
11309 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
11310 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
11311 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11312 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
11313 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11314 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
11315 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
11316 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11317 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
11318 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11319 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11320 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
11321 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11322 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
11323 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
11324 } },
11325 }, .{
11326 .required_features = .{ .@"64bit", .avx, null, null },
11327 .src_constraints = .{
11328 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11329 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11330 },
11331 .patterns = &.{
11332 .{ .src = .{ .to_mem, .to_mem } },
11333 },
11334 .call_frame = .{ .alignment = .@"16" },
11335 .extra_temps = .{
11336 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11337 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11338 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11339 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11340 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11341 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11342 else => unreachable,
11343 .e => "__eqtf2",
11344 .ne => "__netf2",
11345 } } } },
11346 .{ .type = .i32, .kind = .{ .reg = .eax } },
11347 .{ .type = .u8, .kind = .{ .reg = .cl } },
11348 .{ .type = .u64, .kind = .{ .reg = .rdx } },
11349 },
11350 .dst_temps = .{.mem},
11351 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11352 .each = .{ .once = &.{
11353 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11354 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11355 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11356 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11357 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11358 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
11359 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
11360 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
11361 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
11362 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
11363 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
11364 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
11365 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
11366 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11367 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
11368 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11369 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
11370 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
11371 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11372 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
11373 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11374 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11375 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
11376 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11377 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
11378 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
11379 } },
11380 }, .{
11381 .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
11382 .src_constraints = .{
11383 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11384 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11385 },
11386 .patterns = &.{
11387 .{ .src = .{ .to_mem, .to_mem } },
11388 },
11389 .call_frame = .{ .alignment = .@"16" },
11390 .extra_temps = .{
11391 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11392 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11393 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11394 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11395 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11396 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11397 else => unreachable,
11398 .e => "__eqtf2",
11399 .ne => "__netf2",
11400 } } } },
11401 .{ .type = .i32, .kind = .{ .reg = .eax } },
11402 .{ .type = .u8, .kind = .{ .reg = .cl } },
11403 .{ .type = .u64, .kind = .{ .reg = .rdx } },
11404 },
11405 .dst_temps = .{.mem},
11406 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11407 .each = .{ .once = &.{
11408 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11409 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11410 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11411 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11412 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11413 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
11414 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
11415 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
11416 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
11417 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
11418 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
11419 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
11420 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
11421 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11422 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
11423 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11424 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
11425 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
11426 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11427 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
11428 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11429 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11430 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
11431 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11432 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
11433 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
11434 } },
11435 }, .{
11436 .required_features = .{ .@"64bit", .sse2, null, null },
11437 .src_constraints = .{
11438 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11439 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11440 },
11441 .patterns = &.{
11442 .{ .src = .{ .to_mem, .to_mem } },
11443 },
11444 .call_frame = .{ .alignment = .@"16" },
11445 .extra_temps = .{
11446 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11447 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11448 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11449 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11450 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11451 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11452 else => unreachable,
11453 .e => "__eqtf2",
11454 .ne => "__netf2",
11455 } } } },
11456 .{ .type = .i32, .kind = .{ .reg = .eax } },
11457 .{ .type = .u8, .kind = .{ .reg = .cl } },
11458 .{ .type = .u64, .kind = .{ .reg = .rdx } },
11459 },
11460 .dst_temps = .{.mem},
11461 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11462 .each = .{ .once = &.{
11463 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11464 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11465 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11466 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11467 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11468 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
11469 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
11470 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
11471 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
11472 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
11473 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
11474 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
11475 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
11476 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11477 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
11478 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11479 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
11480 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
11481 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11482 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
11483 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11484 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11485 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
11486 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11487 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
11488 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
11489 } },
11490 }, .{
11491 .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
11492 .src_constraints = .{
11493 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11494 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11495 },
11496 .patterns = &.{
11497 .{ .src = .{ .to_mem, .to_mem } },
11498 },
11499 .call_frame = .{ .alignment = .@"16" },
11500 .extra_temps = .{
11501 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11502 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11503 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11504 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11505 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11506 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11507 else => unreachable,
11508 .e => "__eqtf2",
11509 .ne => "__netf2",
11510 } } } },
11511 .{ .type = .i32, .kind = .{ .reg = .eax } },
11512 .{ .type = .u8, .kind = .{ .reg = .cl } },
11513 .{ .type = .u64, .kind = .{ .reg = .rdx } },
11514 },
11515 .dst_temps = .{.mem},
11516 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11517 .each = .{ .once = &.{
11518 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11519 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11520 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11521 .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11522 .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11523 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
11524 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
11525 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
11526 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
11527 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
11528 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
11529 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
11530 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
11531 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11532 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
11533 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11534 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
11535 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
11536 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11537 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
11538 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11539 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11540 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
11541 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11542 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
11543 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
11544 } },
11545 }, .{
11546 .required_features = .{ .@"64bit", .sse, null, null },
11547 .src_constraints = .{
11548 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11549 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
11550 },
11551 .patterns = &.{
11552 .{ .src = .{ .to_mem, .to_mem } },
11553 },
11554 .call_frame = .{ .alignment = .@"16" },
11555 .extra_temps = .{
11556 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11557 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11558 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11559 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
11560 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
11561 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11562 else => unreachable,
11563 .e => "__eqtf2",
11564 .ne => "__netf2",
11565 } } } },
11566 .{ .type = .i32, .kind = .{ .reg = .eax } },
11567 .{ .type = .u8, .kind = .{ .reg = .cl } },
11568 .{ .type = .u64, .kind = .{ .reg = .rdx } },
11569 },
11570 .dst_temps = .{.mem},
11571 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11572 .each = .{ .once = &.{
11573 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
11574 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
11575 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11576 .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
11577 .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
11578 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
11579 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
11580 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
11581 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
11582 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
11583 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
11584 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
11585 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
11586 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11587 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
11588 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11589 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
11590 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
11591 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
11592 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
11593 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11594 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
11595 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
11596 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
11597 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
11598 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
11599 } },
11600 } },
11601 }) catch |err| switch (err) {
11602 error.SelectFailed => return cg.fail("failed to select {s} {s} {} {} {}", .{
11603 @tagName(air_tag),
11604 @tagName(extra.compareOperator()),
11605 cg.typeOf(extra.lhs).fmt(pt),
11606 ops[0].tracking(cg),
11607 ops[1].tracking(cg),
11608 }),
11609 else => |e| return e,
11610 },
11611 .gte => unreachable,
11612 .gt => unreachable,
11613 }
11614 try res[0].finish(inst, &.{ extra.lhs, extra.rhs }, &ops, cg);
11615 },
11616
11617 .abs => |air_tag| if (use_old) try cg.airAbs(inst) else {
11618 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
11619 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
11620 var res: [1]Temp = undefined;
11621 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
11622 .required_features = .{ .cmov, null, null, null },
11623 .src_constraints = .{ .{ .int = .byte }, .any },
886511624 .patterns = &.{
886611625 .{ .src = .{ .to_gpr, .none } },
886711626 },
......@@ -9037,6 +11796,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
903711796 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
903811797 .unused,
903911798 .unused,
11799 .unused,
11800 .unused,
11801 .unused,
904011802 },
904111803 .dst_temps = .{.mem},
904211804 .clobbers = .{ .eflags = true },
......@@ -9061,7 +11823,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
906111823 .{ .src = .{ .mem, .none } },
906211824 .{ .src = .{ .to_mm, .none } },
906311825 },
9064 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }},
11826 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }},
906511827 .each = .{ .once = &.{
906611828 .{ ._, .p_b, .abs, .dst0q, .src0q, ._, ._ },
906711829 } },
......@@ -9072,7 +11834,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
907211834 .{ .src = .{ .mem, .none } },
907311835 .{ .src = .{ .to_mm, .none } },
907411836 },
9075 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }},
11837 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }},
907611838 .each = .{ .once = &.{
907711839 .{ ._, .p_w, .abs, .dst0q, .src0q, ._, ._ },
907811840 } },
......@@ -9083,7 +11845,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
908311845 .{ .src = .{ .mem, .none } },
908411846 .{ .src = .{ .to_mm, .none } },
908511847 },
9086 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }},
11848 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }},
908711849 .each = .{ .once = &.{
908811850 .{ ._, .p_d, .abs, .dst0q, .src0q, ._, ._ },
908911851 } },
......@@ -9094,7 +11856,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
909411856 .{ .src = .{ .mem, .none } },
909511857 .{ .src = .{ .to_sse, .none } },
909611858 },
9097 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
11859 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
909811860 .each = .{ .once = &.{
909911861 .{ ._, .p_b, .abs, .dst0x, .src0x, ._, ._ },
910011862 } },
......@@ -9105,7 +11867,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
910511867 .{ .src = .{ .mem, .none } },
910611868 .{ .src = .{ .to_sse, .none } },
910711869 },
9108 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
11870 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
910911871 .each = .{ .once = &.{
911011872 .{ ._, .p_w, .abs, .dst0x, .src0x, ._, ._ },
911111873 } },
......@@ -9116,7 +11878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
911611878 .{ .src = .{ .mem, .none } },
911711879 .{ .src = .{ .to_sse, .none } },
911811880 },
9119 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
11881 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
912011882 .each = .{ .once = &.{
912111883 .{ ._, .p_d, .abs, .dst0x, .src0x, ._, ._ },
912211884 } },
......@@ -9127,7 +11889,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
912711889 .{ .src = .{ .mem, .none } },
912811890 .{ .src = .{ .to_sse, .none } },
912911891 },
9130 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
11892 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
913111893 .each = .{ .once = &.{
913211894 .{ ._, .vp_b, .abs, .dst0x, .src0x, ._, ._ },
913311895 } },
......@@ -9138,7 +11900,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
913811900 .{ .src = .{ .mem, .none } },
913911901 .{ .src = .{ .to_sse, .none } },
914011902 },
9141 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
11903 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
914211904 .each = .{ .once = &.{
914311905 .{ ._, .vp_w, .abs, .dst0x, .src0x, ._, ._ },
914411906 } },
......@@ -9149,7 +11911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
914911911 .{ .src = .{ .mem, .none } },
915011912 .{ .src = .{ .to_sse, .none } },
915111913 },
9152 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
11914 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
915311915 .each = .{ .once = &.{
915411916 .{ ._, .vp_d, .abs, .dst0x, .src0x, ._, ._ },
915511917 } },
......@@ -9160,7 +11922,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
916011922 .{ .src = .{ .mem, .none } },
916111923 .{ .src = .{ .to_sse, .none } },
916211924 },
9163 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
11925 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
916411926 .each = .{ .once = &.{
916511927 .{ ._, .vp_b, .abs, .dst0y, .src0y, ._, ._ },
916611928 } },
......@@ -9171,7 +11933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
917111933 .{ .src = .{ .mem, .none } },
917211934 .{ .src = .{ .to_sse, .none } },
917311935 },
9174 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
11936 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
917511937 .each = .{ .once = &.{
917611938 .{ ._, .vp_w, .abs, .dst0y, .src0y, ._, ._ },
917711939 } },
......@@ -9182,7 +11944,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
918211944 .{ .src = .{ .mem, .none } },
918311945 .{ .src = .{ .to_sse, .none } },
918411946 },
9185 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
11947 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
918611948 .each = .{ .once = &.{
918711949 .{ ._, .vp_d, .abs, .dst0y, .src0y, ._, ._ },
918811950 } },
......@@ -9199,6 +11961,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
919911961 .unused,
920011962 .unused,
920111963 .unused,
11964 .unused,
11965 .unused,
11966 .unused,
920211967 },
920311968 .dst_temps = .{.mem},
920411969 .clobbers = .{ .eflags = true },
......@@ -9222,6 +11987,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
922211987 .unused,
922311988 .unused,
922411989 .unused,
11990 .unused,
11991 .unused,
11992 .unused,
922511993 },
922611994 .dst_temps = .{.mem},
922711995 .clobbers = .{ .eflags = true },
......@@ -9245,6 +12013,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
924512013 .unused,
924612014 .unused,
924712015 .unused,
12016 .unused,
12017 .unused,
12018 .unused,
924812019 },
924912020 .dst_temps = .{.mem},
925012021 .clobbers = .{ .eflags = true },
......@@ -9268,6 +12039,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
926812039 .unused,
926912040 .unused,
927012041 .unused,
12042 .unused,
12043 .unused,
12044 .unused,
927112045 },
927212046 .dst_temps = .{.mem},
927312047 .clobbers = .{ .eflags = true },
......@@ -9291,6 +12065,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
929112065 .unused,
929212066 .unused,
929312067 .unused,
12068 .unused,
12069 .unused,
12070 .unused,
929412071 },
929512072 .dst_temps = .{.mem},
929612073 .clobbers = .{ .eflags = true },
......@@ -9314,6 +12091,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
931412091 .unused,
931512092 .unused,
931612093 .unused,
12094 .unused,
12095 .unused,
12096 .unused,
931712097 },
931812098 .dst_temps = .{.mem},
931912099 .clobbers = .{ .eflags = true },
......@@ -9337,6 +12117,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
933712117 .unused,
933812118 .unused,
933912119 .unused,
12120 .unused,
12121 .unused,
12122 .unused,
934012123 },
934112124 .dst_temps = .{.mem},
934212125 .clobbers = .{ .eflags = true },
......@@ -9360,6 +12143,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
936012143 .unused,
936112144 .unused,
936212145 .unused,
12146 .unused,
12147 .unused,
12148 .unused,
936312149 },
936412150 .dst_temps = .{.mem},
936512151 .clobbers = .{ .eflags = true },
......@@ -9383,6 +12169,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
938312169 .unused,
938412170 .unused,
938512171 .unused,
12172 .unused,
12173 .unused,
12174 .unused,
938612175 },
938712176 .dst_temps = .{.mem},
938812177 .clobbers = .{ .eflags = true },
......@@ -9406,6 +12195,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
940612195 .unused,
940712196 .unused,
940812197 .unused,
12198 .unused,
12199 .unused,
12200 .unused,
940912201 },
941012202 .dst_temps = .{.mem},
941112203 .clobbers = .{ .eflags = true },
......@@ -9429,6 +12221,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
942912221 .unused,
943012222 .unused,
943112223 .unused,
12224 .unused,
12225 .unused,
12226 .unused,
943212227 },
943312228 .dst_temps = .{.mem},
943412229 .clobbers = .{ .eflags = true },
......@@ -9452,6 +12247,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
945212247 .unused,
945312248 .unused,
945412249 .unused,
12250 .unused,
12251 .unused,
12252 .unused,
945512253 },
945612254 .dst_temps = .{.mem},
945712255 .clobbers = .{ .eflags = true },
......@@ -9475,6 +12273,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
947512273 .unused,
947612274 .unused,
947712275 .unused,
12276 .unused,
12277 .unused,
12278 .unused,
947812279 },
947912280 .dst_temps = .{.mem},
948012281 .clobbers = .{ .eflags = true },
......@@ -9501,6 +12302,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
950112302 .unused,
950212303 .unused,
950312304 .unused,
12305 .unused,
12306 .unused,
12307 .unused,
950412308 },
950512309 .dst_temps = .{.mem},
950612310 .clobbers = .{ .eflags = true },
......@@ -9527,6 +12331,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
952712331 .unused,
952812332 .unused,
952912333 .unused,
12334 .unused,
12335 .unused,
12336 .unused,
953012337 },
953112338 .dst_temps = .{.mem},
953212339 .clobbers = .{ .eflags = true },
......@@ -9552,6 +12359,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
955212359 .unused,
955312360 .unused,
955412361 .unused,
12362 .unused,
12363 .unused,
12364 .unused,
955512365 },
955612366 .dst_temps = .{.mem},
955712367 .clobbers = .{ .eflags = true },
......@@ -9578,6 +12388,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
957812388 .unused,
957912389 .unused,
958012390 .unused,
12391 .unused,
12392 .unused,
12393 .unused,
958112394 },
958212395 .dst_temps = .{.mem},
958312396 .clobbers = .{ .eflags = true },
......@@ -9602,6 +12415,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
960212415 .unused,
960312416 .unused,
960412417 .unused,
12418 .unused,
12419 .unused,
12420 .unused,
960512421 },
960612422 .dst_temps = .{.mem},
960712423 .clobbers = .{ .eflags = true },
......@@ -9628,6 +12444,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
962812444 .unused,
962912445 .unused,
963012446 .unused,
12447 .unused,
12448 .unused,
12449 .unused,
963112450 },
963212451 .dst_temps = .{.mem},
963312452 .clobbers = .{ .eflags = true },
......@@ -9652,6 +12471,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
965212471 .unused,
965312472 .unused,
965412473 .unused,
12474 .unused,
12475 .unused,
12476 .unused,
965512477 },
965612478 .dst_temps = .{.mem},
965712479 .clobbers = .{ .eflags = true },
......@@ -9678,6 +12500,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
967812500 .unused,
967912501 .unused,
968012502 .unused,
12503 .unused,
12504 .unused,
12505 .unused,
968112506 },
968212507 .dst_temps = .{.mem},
968312508 .clobbers = .{ .eflags = true },
......@@ -9703,6 +12528,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
970312528 .unused,
970412529 .unused,
970512530 .unused,
12531 .unused,
12532 .unused,
12533 .unused,
970612534 },
970712535 .dst_temps = .{.mem},
970812536 .clobbers = .{ .eflags = true },
......@@ -9729,6 +12557,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
972912557 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
973012558 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
973112559 .unused,
12560 .unused,
12561 .unused,
12562 .unused,
973212563 },
973312564 .dst_temps = .{.mem},
973412565 .clobbers = .{ .eflags = true },
......@@ -9750,15 +12581,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
975012581 .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ },
975112582 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
975212583 } },
12584 }, .{
12585 .required_features = .{ .avx, null, null, null },
12586 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
12587 .patterns = &.{
12588 .{ .src = .{ .to_sse, .none } },
12589 },
12590 .extra_temps = .{
12591 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12592 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
12593 .unused,
12594 .unused,
12595 .unused,
12596 .unused,
12597 .unused,
12598 .unused,
12599 .unused,
12600 },
12601 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
12602 .each = .{ .once = &.{
12603 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
12604 .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
12605 } },
975312606 }, .{
975412607 .required_features = .{ .sse, null, null, null },
9755 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .dword } }, .any },
12608 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
975612609 .patterns = &.{
975712610 .{ .src = .{ .to_mut_sse, .none } },
975812611 },
975912612 .extra_temps = .{
976012613 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9761 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12614 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
12615 .unused,
12616 .unused,
12617 .unused,
976212618 .unused,
976312619 .unused,
976412620 .unused,
......@@ -9770,33 +12626,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
977012626 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
977112627 } },
977212628 }, .{
9773 .required_features = .{ .sse2, null, null, null },
9774 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any },
12629 .required_features = .{ .avx, null, null, null },
12630 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
977512631 .patterns = &.{
9776 .{ .src = .{ .to_mut_sse, .none } },
12632 .{ .src = .{ .to_sse, .none } },
977712633 },
977812634 .extra_temps = .{
977912635 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9780 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12636 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12637 .unused,
12638 .unused,
12639 .unused,
978112640 .unused,
978212641 .unused,
978312642 .unused,
978412643 .unused,
978512644 },
9786 .dst_temps = .{.{ .ref = .src0 }},
12645 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
978712646 .each = .{ .once = &.{
978812647 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9789 .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
12648 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
979012649 } },
979112650 }, .{
9792 .required_features = .{ .sse, null, null, null },
9793 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any },
12651 .required_features = .{ .avx, null, null, null },
12652 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
12653 .patterns = &.{
12654 .{ .src = .{ .to_sse, .none } },
12655 },
12656 .extra_temps = .{
12657 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12658 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
12659 .unused,
12660 .unused,
12661 .unused,
12662 .unused,
12663 .unused,
12664 .unused,
12665 .unused,
12666 },
12667 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
12668 .each = .{ .once = &.{
12669 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
12670 .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
12671 } },
12672 }, .{
12673 .required_features = .{ .sse2, null, null, null },
12674 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
979412675 .patterns = &.{
979512676 .{ .src = .{ .to_mut_sse, .none } },
979612677 },
979712678 .extra_temps = .{
979812679 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9799 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12680 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
12681 .unused,
12682 .unused,
12683 .unused,
980012684 .unused,
980112685 .unused,
980212686 .unused,
......@@ -9805,218 +12689,383 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
980512689 .dst_temps = .{.{ .ref = .src0 }},
980612690 .each = .{ .once = &.{
980712691 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9808 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
12692 .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
980912693 } },
981012694 }, .{
981112695 .required_features = .{ .avx, null, null, null },
9812 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .dword } }, .any },
12696 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
981312697 .patterns = &.{
981412698 .{ .src = .{ .to_sse, .none } },
981512699 },
981612700 .extra_temps = .{
981712701 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9818 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12702 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12703 .unused,
12704 .unused,
12705 .unused,
981912706 .unused,
982012707 .unused,
982112708 .unused,
982212709 .unused,
982312710 },
9824 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
12711 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
982512712 .each = .{ .once = &.{
982612713 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9827 .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
12714 .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
12715 } },
12716 }, .{
12717 .required_features = .{ .x87, null, null, null },
12718 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
12719 .patterns = &.{
12720 .{ .src = .{ .mem, .none } },
12721 .{ .src = .{ .to_x87, .none } },
12722 },
12723 .extra_temps = .{
12724 .{ .type = .f80, .kind = .{ .reg = .st7 } },
12725 .unused,
12726 .unused,
12727 .unused,
12728 .unused,
12729 .unused,
12730 .unused,
12731 .unused,
12732 .unused,
12733 },
12734 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .x87 } }},
12735 .each = .{ .once = &.{
12736 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
12737 .{ ._, .f_, .abs, ._, ._, ._, ._ },
12738 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
982812739 } },
982912740 }, .{
983012741 .required_features = .{ .avx, null, null, null },
9831 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any },
12742 .src_constraints = .{ .{ .scalar_any_float = .xword }, .any },
983212743 .patterns = &.{
983312744 .{ .src = .{ .to_sse, .none } },
983412745 },
983512746 .extra_temps = .{
983612747 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9837 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12748 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
12749 .unused,
12750 .unused,
12751 .unused,
983812752 .unused,
983912753 .unused,
984012754 .unused,
984112755 .unused,
984212756 },
9843 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
12757 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
984412758 .each = .{ .once = &.{
984512759 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9846 .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
12760 .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
984712761 } },
984812762 }, .{
9849 .required_features = .{ .avx, null, null, null },
9850 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .yword, .is = .dword } }, .any },
12763 .required_features = .{ .sse2, null, null, null },
12764 .src_constraints = .{ .{ .scalar_any_float = .xword }, .any },
12765 .patterns = &.{
12766 .{ .src = .{ .to_mut_sse, .none } },
12767 },
12768 .extra_temps = .{
12769 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12770 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
12771 .unused,
12772 .unused,
12773 .unused,
12774 .unused,
12775 .unused,
12776 .unused,
12777 .unused,
12778 },
12779 .dst_temps = .{.{ .ref = .src0 }},
12780 .each = .{ .once = &.{
12781 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
12782 .{ ._, .p_, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
12783 } },
12784 }, .{
12785 .required_features = .{ .sse, null, null, null },
12786 .src_constraints = .{ .{ .scalar_any_float = .xword }, .any },
12787 .patterns = &.{
12788 .{ .src = .{ .to_mut_sse, .none } },
12789 },
12790 .extra_temps = .{
12791 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12792 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
12793 .unused,
12794 .unused,
12795 .unused,
12796 .unused,
12797 .unused,
12798 .unused,
12799 .unused,
12800 },
12801 .dst_temps = .{.{ .ref = .src0 }},
12802 .each = .{ .once = &.{
12803 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
12804 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
12805 } },
12806 }, .{
12807 .required_features = .{ .avx2, null, null, null },
12808 .src_constraints = .{ .{ .scalar_any_float = .yword }, .any },
985112809 .patterns = &.{
985212810 .{ .src = .{ .to_sse, .none } },
985312811 },
985412812 .extra_temps = .{
985512813 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9856 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12814 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12815 .unused,
12816 .unused,
12817 .unused,
985712818 .unused,
985812819 .unused,
985912820 .unused,
986012821 .unused,
986112822 },
9862 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
12823 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
986312824 .each = .{ .once = &.{
986412825 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9865 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
12826 .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
986612827 } },
986712828 }, .{
986812829 .required_features = .{ .avx, null, null, null },
9869 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .yword, .is = .qword } }, .any },
12830 .src_constraints = .{ .{ .scalar_any_float = .yword }, .any },
987012831 .patterns = &.{
987112832 .{ .src = .{ .to_sse, .none } },
987212833 },
987312834 .extra_temps = .{
987412835 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9875 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12836 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12837 .unused,
12838 .unused,
12839 .unused,
987612840 .unused,
987712841 .unused,
987812842 .unused,
987912843 .unused,
988012844 },
9881 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
12845 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
988212846 .each = .{ .once = &.{
988312847 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
988412848 .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
988512849 } },
988612850 }, .{
9887 .required_features = .{ .x87, null, null, null },
9888 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .tbyte } }, .any },
12851 .required_features = .{ .avx, null, null, null },
12852 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
988912853 .patterns = &.{
9890 .{ .src = .{ .mem, .none } },
9891 .{ .src = .{ .to_x87, .none } },
12854 .{ .src = .{ .to_mem, .none } },
989212855 },
989312856 .extra_temps = .{
9894 .{ .type = .f80, .kind = .{ .reg = .st7 } },
12857 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12858 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12859 .{ .kind = .{ .rc = .sse } },
12860 .{ .kind = .{ .rc = .sse } },
989512861 .unused,
989612862 .unused,
989712863 .unused,
989812864 .unused,
989912865 .unused,
990012866 },
9901 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .x87 } }},
12867 .dst_temps = .{.mem},
990212868 .each = .{ .once = &.{
9903 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
9904 .{ ._, .f_, .abs, ._, ._, ._, ._ },
9905 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
12869 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
12870 .{ ._, .v_ps, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ },
12871 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
12872 .{ .@"0:", .v_ps, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
12873 .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
12874 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
12875 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12876 } },
12877 }, .{
12878 .required_features = .{ .sse, null, null, null },
12879 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
12880 .patterns = &.{
12881 .{ .src = .{ .to_mem, .none } },
12882 },
12883 .extra_temps = .{
12884 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12885 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
12886 .{ .kind = .{ .rc = .sse } },
12887 .{ .kind = .{ .rc = .sse } },
12888 .unused,
12889 .unused,
12890 .unused,
12891 .unused,
12892 .unused,
12893 },
12894 .dst_temps = .{.mem},
12895 .each = .{ .once = &.{
12896 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
12897 .{ ._, ._ps, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
12898 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
12899 .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
12900 .{ ._, ._ps, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
12901 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
12902 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
12903 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
990612904 } },
990712905 }, .{
9908 .required_features = .{ .avx2, null, null, null },
9909 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
12906 .required_features = .{ .avx, null, null, null },
12907 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
991012908 .patterns = &.{
9911 .{ .src = .{ .to_sse, .none } },
12909 .{ .src = .{ .to_mem, .none } },
991212910 },
991312911 .extra_temps = .{
9914 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9915 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12912 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12913 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12914 .{ .kind = .{ .rc = .sse } },
12915 .{ .kind = .{ .rc = .sse } },
12916 .unused,
991612917 .unused,
991712918 .unused,
991812919 .unused,
991912920 .unused,
992012921 },
9921 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
12922 .dst_temps = .{.mem},
992212923 .each = .{ .once = &.{
992312924 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9924 .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
12925 .{ ._, .v_pd, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ },
12926 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
12927 .{ .@"0:", .v_pd, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
12928 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
12929 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
12930 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
992512931 } },
992612932 }, .{
9927 .required_features = .{ .avx, null, null, null },
9928 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
12933 .required_features = .{ .sse2, null, null, null },
12934 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
992912935 .patterns = &.{
9930 .{ .src = .{ .to_sse, .none } },
12936 .{ .src = .{ .to_mem, .none } },
993112937 },
993212938 .extra_temps = .{
9933 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9934 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12939 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12940 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
12941 .{ .kind = .{ .rc = .sse } },
12942 .{ .kind = .{ .rc = .sse } },
12943 .unused,
993512944 .unused,
993612945 .unused,
993712946 .unused,
993812947 .unused,
993912948 },
9940 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
12949 .dst_temps = .{.mem},
994112950 .each = .{ .once = &.{
994212951 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9943 .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
12952 .{ ._, ._pd, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
12953 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
12954 .{ .@"0:", ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
12955 .{ ._, ._pd, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
12956 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
12957 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
12958 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
994412959 } },
994512960 }, .{
9946 .required_features = .{ .sse2, null, null, null },
9947 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
12961 .required_features = .{ .avx2, null, null, null },
12962 .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any },
994812963 .patterns = &.{
9949 .{ .src = .{ .to_mut_sse, .none } },
12964 .{ .src = .{ .to_mem, .none } },
995012965 },
995112966 .extra_temps = .{
9952 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9953 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12967 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12968 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12969 .{ .kind = .{ .rc = .sse } },
12970 .{ .kind = .{ .rc = .sse } },
12971 .unused,
995412972 .unused,
995512973 .unused,
995612974 .unused,
995712975 .unused,
995812976 },
9959 .dst_temps = .{.{ .ref = .src0 }},
12977 .dst_temps = .{.mem},
996012978 .each = .{ .once = &.{
996112979 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9962 .{ ._, .p_, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
12980 .{ ._, .v_dqa, .mov, .tmp2y, .lea(.yword, .tmp0), ._, ._ },
12981 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
12982 .{ .@"0:", .vp_, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
12983 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
12984 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
12985 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
996312986 } },
996412987 }, .{
9965 .required_features = .{ .sse, null, null, null },
9966 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
12988 .required_features = .{ .avx, null, null, null },
12989 .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any },
996712990 .patterns = &.{
9968 .{ .src = .{ .to_mut_sse, .none } },
12991 .{ .src = .{ .to_mem, .none } },
996912992 },
997012993 .extra_temps = .{
9971 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9972 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
12994 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12995 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12996 .{ .kind = .{ .rc = .sse } },
12997 .{ .kind = .{ .rc = .sse } },
12998 .unused,
997312999 .unused,
997413000 .unused,
997513001 .unused,
997613002 .unused,
997713003 },
9978 .dst_temps = .{.{ .ref = .src0 }},
13004 .dst_temps = .{.mem},
997913005 .each = .{ .once = &.{
998013006 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9981 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
13007 .{ ._, .v_pd, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ },
13008 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13009 .{ .@"0:", .v_pd, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
13010 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
13011 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
13012 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
998213013 } },
998313014 }, .{
9984 .required_features = .{ .avx2, null, null, null },
9985 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .xword } }, .any },
13015 .required_features = .{ .sse2, null, null, null },
13016 .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any },
998613017 .patterns = &.{
9987 .{ .src = .{ .to_sse, .none } },
13018 .{ .src = .{ .to_mem, .none } },
998813019 },
998913020 .extra_temps = .{
9990 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9991 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
13021 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13022 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
13023 .{ .kind = .{ .rc = .sse } },
13024 .{ .kind = .{ .rc = .sse } },
13025 .unused,
999213026 .unused,
999313027 .unused,
999413028 .unused,
999513029 .unused,
999613030 },
9997 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
13031 .dst_temps = .{.mem},
999813032 .each = .{ .once = &.{
999913033 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
10000 .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
13034 .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
13035 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13036 .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
13037 .{ ._, .p_, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13038 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
13039 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
13040 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1000113041 } },
1000213042 }, .{
10003 .required_features = .{ .avx, null, null, null },
10004 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .xword } }, .any },
13043 .required_features = .{ .sse, null, null, null },
13044 .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any },
1000513045 .patterns = &.{
10006 .{ .src = .{ .to_sse, .none } },
13046 .{ .src = .{ .to_mem, .none } },
1000713047 },
1000813048 .extra_temps = .{
10009 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
10010 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
13049 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13050 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
13051 .{ .kind = .{ .rc = .sse } },
13052 .{ .kind = .{ .rc = .sse } },
13053 .unused,
1001113054 .unused,
1001213055 .unused,
1001313056 .unused,
1001413057 .unused,
1001513058 },
10016 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
13059 .dst_temps = .{.mem},
1001713060 .each = .{ .once = &.{
1001813061 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
10019 .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
13062 .{ ._, ._ps, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
13063 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13064 .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
13065 .{ ._, ._ps, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13066 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
13067 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
13068 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1002013069 } },
1002113070 } }) catch |err| switch (err) {
1002213071 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
......@@ -10194,6 +13243,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1019413243 .unused,
1019513244 .unused,
1019613245 .unused,
13246 .unused,
13247 .unused,
13248 .unused,
1019713249 },
1019813250 .dst_temps = .{.{ .rc = .general_purpose }},
1019913251 .clobbers = .{ .eflags = true },
......@@ -10328,6 +13380,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1032813380 .unused,
1032913381 .unused,
1033013382 .unused,
13383 .unused,
13384 .unused,
13385 .unused,
1033113386 },
1033213387 .dst_temps = .{.{ .cc = cc }},
1033313388 .clobbers = .{ .eflags = true },
......@@ -10353,6 +13408,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1035313408 .unused,
1035413409 .unused,
1035513410 .unused,
13411 .unused,
13412 .unused,
13413 .unused,
1035613414 },
1035713415 .dst_temps = .{.{ .cc = cc }},
1035813416 .clobbers = .{ .eflags = true },
......@@ -10389,6 +13447,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1038913447 .unused,
1039013448 .unused,
1039113449 .unused,
13450 .unused,
13451 .unused,
13452 .unused,
1039213453 },
1039313454 .dst_temps = .{.{ .cc = cc }},
1039413455 .clobbers = .{ .eflags = true },
......@@ -10414,6 +13475,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1041413475 .unused,
1041513476 .unused,
1041613477 .unused,
13478 .unused,
13479 .unused,
13480 .unused,
1041713481 },
1041813482 .dst_temps = .{.{ .cc = cc }},
1041913483 .clobbers = .{ .eflags = true },
......@@ -10436,6 +13500,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1043613500 .unused,
1043713501 .unused,
1043813502 .unused,
13503 .unused,
13504 .unused,
13505 .unused,
1043913506 },
1044013507 .dst_temps = .{.{ .cc = cc }},
1044113508 .clobbers = .{ .eflags = true },
......@@ -10459,6 +13526,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1045913526 .unused,
1046013527 .unused,
1046113528 .unused,
13529 .unused,
13530 .unused,
13531 .unused,
1046213532 },
1046313533 .dst_temps = .{.{ .cc = cc }},
1046413534 .clobbers = .{ .eflags = true },
......@@ -10491,6 +13561,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1049113561 .unused,
1049213562 .unused,
1049313563 .unused,
13564 .unused,
13565 .unused,
13566 .unused,
1049413567 },
1049513568 .dst_temps = .{.{ .cc = cc }},
1049613569 .clobbers = .{ .eflags = true },
......@@ -10520,6 +13593,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1052013593 .unused,
1052113594 .unused,
1052213595 .unused,
13596 .unused,
13597 .unused,
13598 .unused,
1052313599 },
1052413600 .dst_temps = .{.{ .cc = cc }},
1052513601 .clobbers = .{ .eflags = true },
......@@ -10552,6 +13628,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1055213628 .unused,
1055313629 .unused,
1055413630 .unused,
13631 .unused,
13632 .unused,
13633 .unused,
1055513634 },
1055613635 .dst_temps = .{.{ .cc = cc }},
1055713636 .clobbers = .{ .eflags = true },
......@@ -10581,6 +13660,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1058113660 .unused,
1058213661 .unused,
1058313662 .unused,
13663 .unused,
13664 .unused,
13665 .unused,
1058413666 },
1058513667 .dst_temps = .{.{ .cc = cc }},
1058613668 .clobbers = .{ .eflags = true },
......@@ -10610,6 +13692,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1061013692 .unused,
1061113693 .unused,
1061213694 .unused,
13695 .unused,
13696 .unused,
13697 .unused,
1061313698 },
1061413699 .dst_temps = .{.{ .cc = cc }},
1061513700 .clobbers = .{ .eflags = true },
......@@ -10639,6 +13724,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1063913724 .unused,
1064013725 .unused,
1064113726 .unused,
13727 .unused,
13728 .unused,
13729 .unused,
1064213730 },
1064313731 .dst_temps = .{.{ .cc = cc }},
1064413732 .clobbers = .{ .eflags = true },
......@@ -10671,6 +13759,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1067113759 .unused,
1067213760 .unused,
1067313761 .unused,
13762 .unused,
13763 .unused,
13764 .unused,
1067413765 },
1067513766 .dst_temps = .{.{ .cc = cc }},
1067613767 .clobbers = .{ .eflags = true },
......@@ -10702,6 +13793,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1070213793 .unused,
1070313794 .unused,
1070413795 .unused,
13796 .unused,
13797 .unused,
13798 .unused,
1070513799 },
1070613800 .dst_temps = .{.{ .cc = cc }},
1070713801 .clobbers = .{ .eflags = true },
......@@ -10728,6 +13822,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1072813822 .unused,
1072913823 .unused,
1073013824 .unused,
13825 .unused,
13826 .unused,
13827 .unused,
1073113828 },
1073213829 .dst_temps = .{.{ .cc = switch (cc) {
1073313830 else => unreachable,
......@@ -10747,7 +13844,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1074713844 .patterns = &.{
1074813845 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
1074913846 },
10750 .call_frame = .{ .size = 0, .alignment = .@"16" },
13847 .call_frame = .{ .alignment = .@"16" },
1075113848 .extra_temps = .{
1075213849 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
1075313850 else => unreachable,
......@@ -10759,11 +13856,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1075913856 .unused,
1076013857 .unused,
1076113858 .unused,
13859 .unused,
13860 .unused,
13861 .unused,
1076213862 },
1076313863 .dst_temps = .{.{ .cc = cc }},
1076413864 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1076513865 .each = .{ .once = &.{
10766 .{ ._, ._, .call, .tmp0p, ._, ._, ._ },
13866 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
1076713867 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
1076813868 } },
1076913869 }, .{
......@@ -10781,6 +13881,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1078113881 .unused,
1078213882 .unused,
1078313883 .unused,
13884 .unused,
13885 .unused,
13886 .unused,
1078413887 },
1078513888 .dst_temps = .{.{ .cc = switch (cc) {
1078613889 else => unreachable,
......@@ -10806,6 +13909,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1080613909 .unused,
1080713910 .unused,
1080813911 .unused,
13912 .unused,
13913 .unused,
13914 .unused,
1080913915 },
1081013916 .dst_temps = .{.{ .cc = switch (cc) {
1081113917 else => unreachable,
......@@ -10822,7 +13928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1082213928 .patterns = &.{
1082313929 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
1082413930 },
10825 .call_frame = .{ .size = 0, .alignment = .@"16" },
13931 .call_frame = .{ .alignment = .@"16" },
1082613932 .extra_temps = .{
1082713933 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
1082813934 else => unreachable,
......@@ -10834,11 +13940,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1083413940 .unused,
1083513941 .unused,
1083613942 .unused,
13943 .unused,
13944 .unused,
13945 .unused,
1083713946 },
1083813947 .dst_temps = .{.{ .cc = cc }},
1083913948 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1084013949 .each = .{ .once = &.{
10841 .{ ._, ._, .call, .tmp0p, ._, ._, ._ },
13950 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
1084213951 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
1084313952 } },
1084413953 }, .{
......@@ -10856,6 +13965,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1085613965 .unused,
1085713966 .unused,
1085813967 .unused,
13968 .unused,
13969 .unused,
13970 .unused,
1085913971 },
1086013972 .dst_temps = .{.{ .cc = switch (cc) {
1086113973 else => unreachable,
......@@ -10881,6 +13993,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1088113993 .unused,
1088213994 .unused,
1088313995 .unused,
13996 .unused,
13997 .unused,
13998 .unused,
1088413999 },
1088514000 .dst_temps = .{.{ .cc = switch (cc) {
1088614001 else => unreachable,
......@@ -10897,7 +14012,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1089714012 .patterns = &.{
1089814013 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
1089914014 },
10900 .call_frame = .{ .size = 0, .alignment = .@"16" },
14015 .call_frame = .{ .alignment = .@"16" },
1090114016 .extra_temps = .{
1090214017 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
1090314018 else => unreachable,
......@@ -10909,11 +14024,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1090914024 .unused,
1091014025 .unused,
1091114026 .unused,
14027 .unused,
14028 .unused,
14029 .unused,
1091214030 },
1091314031 .dst_temps = .{.{ .cc = cc }},
1091414032 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1091514033 .each = .{ .once = &.{
10916 .{ ._, ._, .call, .tmp0p, ._, ._, ._ },
14034 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
1091714035 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
1091814036 } },
1091914037 }, .{
......@@ -10929,6 +14047,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1092914047 .unused,
1093014048 .unused,
1093114049 .unused,
14050 .unused,
14051 .unused,
14052 .unused,
1093214053 },
1093314054 .dst_temps = .{.{ .cc = switch (cc) {
1093414055 else => unreachable,
......@@ -10957,6 +14078,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1095714078 .unused,
1095814079 .unused,
1095914080 .unused,
14081 .unused,
14082 .unused,
14083 .unused,
1096014084 },
1096114085 .dst_temps = .{.{ .cc = switch (cc) {
1096214086 else => unreachable,
......@@ -10977,7 +14101,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1097714101 .extra_temps = .{
1097814102 .{ .type = .f80, .kind = .{ .reg = .st6 } },
1097914103 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10980 .{ .type = .u16, .kind = .{ .reg = .ax } },
14104 .{ .type = .u8, .kind = .{ .reg = .ah } },
14105 .unused,
14106 .unused,
14107 .unused,
1098114108 .unused,
1098214109 .unused,
1098314110 .unused,
......@@ -11004,10 +14131,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1100414131 .extra_temps = .{
1100514132 .{ .type = .f80, .kind = .{ .reg = .st6 } },
1100614133 .{ .type = .f80, .kind = .{ .reg = .st7 } },
11007 .{ .type = .u16, .kind = .{ .reg = .ax } },
1100814134 .{ .type = .u8, .kind = .{ .reg = .ah } },
1100914135 .unused,
1101014136 .unused,
14137 .unused,
14138 .unused,
14139 .unused,
14140 .unused,
1101114141 },
1101214142 .dst_temps = .{.{ .cc = cc }},
1101314143 .clobbers = .{ .eflags = true },
......@@ -11016,8 +14146,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1101614146 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
1101714147 .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
1101814148 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
11019 .{ ._, ._, .xor, .tmp3b, .si(0b0_1_000_000), ._, ._ },
11020 .{ ._, ._, .@"test", .tmp3b, .si(0b0_1_000_100), ._, ._ },
14149 .{ ._, ._, .xor, .tmp2b, .si(0b0_1_000_000), ._, ._ },
14150 .{ ._, ._, .@"test", .tmp2b, .si(0b0_1_000_100), ._, ._ },
1102114151 } },
1102214152 }, .{
1102314153 .required_features = .{ .x87, null, null, null },
......@@ -11028,7 +14158,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1102814158 .extra_temps = .{
1102914159 .{ .type = .f80, .kind = .{ .reg = .st6 } },
1103014160 .{ .type = .f80, .kind = .{ .reg = .st7 } },
11031 .{ .type = .u16, .kind = .{ .reg = .ax } },
14161 .{ .type = .u8, .kind = .{ .reg = .ah } },
14162 .unused,
14163 .unused,
14164 .unused,
1103214165 .unused,
1103314166 .unused,
1103414167 .unused,
......@@ -11057,7 +14190,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1105714190 .extra_temps = .{
1105814191 .{ .type = .f80, .kind = .{ .reg = .st6 } },
1105914192 .{ .type = .f80, .kind = .{ .reg = .st7 } },
11060 .{ .type = .u16, .kind = .{ .reg = .ax } },
14193 .{ .type = .u16, .kind = .{ .reg = .ah } },
14194 .unused,
14195 .unused,
14196 .unused,
1106114197 .unused,
1106214198 .unused,
1106314199 .unused,
......@@ -11085,10 +14221,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1108514221 .extra_temps = .{
1108614222 .{ .type = .f80, .kind = .{ .reg = .st6 } },
1108714223 .{ .type = .f80, .kind = .{ .reg = .st7 } },
11088 .{ .type = .u16, .kind = .{ .reg = .ax } },
1108914224 .{ .type = .u8, .kind = .{ .reg = .ah } },
1109014225 .unused,
1109114226 .unused,
14227 .unused,
14228 .unused,
14229 .unused,
14230 .unused,
1109214231 },
1109314232 .dst_temps = .{.{ .cc = cc }},
1109414233 .clobbers = .{ .eflags = true },
......@@ -11096,8 +14235,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1109614235 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
1109714236 .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
1109814237 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
11099 .{ ._, ._, .xor, .tmp3b, .si(0b0_1_000_000), ._, ._ },
11100 .{ ._, ._, .@"test", .tmp3b, .si(0b0_1_000_100), ._, ._ },
14238 .{ ._, ._, .xor, .tmp2b, .si(0b0_1_000_000), ._, ._ },
14239 .{ ._, ._, .@"test", .tmp2b, .si(0b0_1_000_100), ._, ._ },
1110114240 } },
1110214241 }, .{
1110314242 .required_features = .{ .x87, null, null, null },
......@@ -11110,7 +14249,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1111014249 .extra_temps = .{
1111114250 .{ .type = .f80, .kind = .{ .reg = .st6 } },
1111214251 .{ .type = .f80, .kind = .{ .reg = .st7 } },
11113 .{ .type = .u16, .kind = .{ .reg = .ax } },
14252 .{ .type = .u16, .kind = .{ .reg = .ah } },
14253 .unused,
14254 .unused,
14255 .unused,
1111414256 .unused,
1111514257 .unused,
1111614258 .unused,
......@@ -11133,7 +14275,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1113314275 .patterns = &.{
1113414276 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
1113514277 },
11136 .call_frame = .{ .size = 0, .alignment = .@"16" },
14278 .call_frame = .{ .alignment = .@"16" },
1113714279 .extra_temps = .{
1113814280 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
1113914281 else => unreachable,
......@@ -11145,11 +14287,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1114514287 .unused,
1114614288 .unused,
1114714289 .unused,
14290 .unused,
14291 .unused,
14292 .unused,
1114814293 },
1114914294 .dst_temps = .{.{ .cc = cc }},
1115014295 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1115114296 .each = .{ .once = &.{
11152 .{ ._, ._, .call, .tmp0p, ._, ._, ._ },
14297 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
1115314298 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
1115414299 } },
1115514300 } },
......@@ -11753,7 +14898,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1175314898
1175414899 .err_return_trace => {
1175514900 const ert: Temp = .{ .index = err_ret_trace_index };
11756 try ert.moveTo(inst, cg);
14901 try ert.finish(inst, &.{}, &.{}, cg);
1175714902 },
1175814903 .set_err_return_trace => {
1175914904 const un_op = air_datas[@intFromEnum(inst)].un_op;
......@@ -11788,7 +14933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1178814933 var ert: Temp = .{ .index = err_ret_trace_index };
1178914934 var res = try ert.load(.usize, .{ .disp = @intCast(agg_ty.structFieldOffset(ty_pl.payload, zcu)) }, cg);
1179014935 try ert.die(cg);
11791 try res.moveTo(inst, cg);
14936 try res.finish(inst, &.{}, &.{}, cg);
1179214937 },
1179314938
1179414939 .vector_store_elem => return cg.fail("TODO implement vector_store_elem", .{}),
......@@ -23113,7 +26258,11 @@ fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index
2311326258 .resurrect = true,
2311426259 .close_scope = true,
2311526260 });
23116 for (block_data.value.relocs.items) |reloc| self.performReloc(reloc);
26261 const block_relocs_last_index = block_data.value.relocs.items.len - 1;
26262 for (if (block_data.value.relocs.items[block_relocs_last_index] == self.mir_instructions.len - 1) block_relocs: {
26263 _ = self.mir_instructions.pop();
26264 break :block_relocs block_data.value.relocs.items[0..block_relocs_last_index];
26265 } else block_data.value.relocs.items) |block_reloc| self.performReloc(block_reloc);
2311726266 }
2311826267
2311926268 if (std.debug.runtime_safety) assert(self.inst_tracking.getIndex(inst).? == inst_tracking_i);
......@@ -24623,13 +27772,15 @@ fn moveStrategy(self: *CodeGen, ty: Type, class: Register.Class, aligned: bool)
2462327772 64 => switch (ty.vectorLen(zcu)) {
2462427773 1...2 => return .{ .move = if (self.hasFeature(.avx))
2462527774 .{ .v_pd, if (aligned) .mova else .movu }
27775 else if (self.hasFeature(.sse2))
27776 .{ ._pd, if (aligned) .mova else .movu }
2462627777 else
24627 .{ ._pd, if (aligned) .mova else .movu } },
27778 .{ ._ps, if (aligned) .mova else .movu } },
2462827779 3...4 => if (self.hasFeature(.avx))
2462927780 return .{ .move = .{ .v_pd, if (aligned) .mova else .movu } },
2463027781 else => {},
2463127782 },
24632 128 => switch (ty.vectorLen(zcu)) {
27783 80, 128 => switch (ty.vectorLen(zcu)) {
2463327784 1 => return .{ .move = if (self.hasFeature(.avx))
2463427785 .{ if (aligned) .v_dqa else .v_dqu, .mov }
2463527786 else if (self.hasFeature(.sse2))
......@@ -24958,7 +28109,7 @@ fn genSetReg(
2495828109 },
2495928110 .mmx => unreachable,
2496028111 .sse => switch (src_reg.class()) {
24961 .general_purpose => try self.asmRegisterRegister(
28112 .general_purpose => if (self.hasFeature(.sse2)) try self.asmRegisterRegister(
2496228113 switch (abi_size) {
2496328114 1...4 => if (self.hasFeature(.avx)) .{ .v_d, .mov } else .{ ._d, .mov },
2496428115 5...8 => if (self.hasFeature(.avx)) .{ .v_q, .mov } else .{ ._q, .mov },
......@@ -24966,7 +28117,26 @@ fn genSetReg(
2496628117 },
2496728118 dst_reg.to128(),
2496828119 registerAlias(src_reg, @max(abi_size, 4)),
24969 ),
28120 ) else {
28121 const frame_size = std.math.ceilPowerOfTwoAssert(u32, @max(abi_size, 4));
28122 const frame_index = try self.allocFrameIndex(.init(.{
28123 .size = frame_size,
28124 .alignment = .fromNonzeroByteUnits(frame_size),
28125 }));
28126 try self.asmMemoryRegister(.{ ._, .mov }, .{
28127 .base = .{ .frame = frame_index },
28128 .mod = .{ .rm = .{ .size = .fromSize(abi_size) } },
28129 }, registerAlias(src_reg, abi_size));
28130 try self.asmRegisterMemory(switch (frame_size) {
28131 4 => .{ ._ss, .mov },
28132 8 => .{ ._ps, .movl },
28133 16 => .{ ._ps, .mov },
28134 else => unreachable,
28135 }, dst_reg.to128(), .{
28136 .base = .{ .frame = frame_index },
28137 .mod = .{ .rm = .{ .size = .fromSize(frame_size) } },
28138 });
28139 },
2497028140 .segment => try self.genSetReg(
2497128141 dst_reg,
2497228142 ty,
......@@ -24977,7 +28147,12 @@ fn genSetReg(
2497728147 .sse => try self.asmRegisterRegister(
2497828148 @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) {
2497928149 else => switch (abi_size) {
24980 1...16 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else .{ ._dqa, .mov },
28150 1...16 => if (self.hasFeature(.avx))
28151 .{ .v_dqa, .mov }
28152 else if (self.hasFeature(.sse2))
28153 .{ ._dqa, .mov }
28154 else
28155 .{ ._ps, .mova },
2498128156 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null,
2498228157 else => null,
2498328158 },
......@@ -24985,13 +28160,20 @@ fn genSetReg(
2498528160 16, 128 => switch (abi_size) {
2498628161 2...16 => if (self.hasFeature(.avx))
2498728162 .{ .v_dqa, .mov }
28163 else if (self.hasFeature(.sse2))
28164 .{ ._dqa, .mov }
2498828165 else
24989 .{ ._dqa, .mov },
28166 .{ ._ps, .mova },
2499028167 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null,
2499128168 else => null,
2499228169 },
2499328170 32 => if (self.hasFeature(.avx)) .{ .v_ps, .mova } else .{ ._ps, .mova },
24994 64 => if (self.hasFeature(.avx)) .{ .v_pd, .mova } else .{ ._pd, .mova },
28171 64 => if (self.hasFeature(.avx))
28172 .{ .v_pd, .mova }
28173 else if (self.hasFeature(.sse2))
28174 .{ ._pd, .mova }
28175 else
28176 .{ ._ps, .mova },
2499528177 80 => null,
2499628178 else => unreachable,
2499728179 },
......@@ -25688,15 +28870,19 @@ fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void {
2568828870 const src_lock = if (src_mcv.getReg()) |src_reg| self.register_manager.lockReg(src_reg) else null;
2568928871 defer if (src_lock) |lock| self.register_manager.unlockReg(lock);
2569028872
25691 const dst_mcv = if ((if (src_mcv.getReg()) |src_reg| src_reg.class() == .general_purpose else true) and
28873 const dst_mcv = if (src_mcv != .register_mask and
28874 (if (src_mcv.getReg()) |src_reg| src_reg.class() == .general_purpose else true) and
2569228875 dst_rc.supersetOf(src_rc) and dst_ty.abiSize(zcu) <= src_ty.abiSize(zcu) and
2569328876 dst_ty.abiAlignment(zcu).order(src_ty.abiAlignment(zcu)).compare(.lte) and
2569428877 self.reuseOperand(inst, ty_op.operand, 0, src_mcv)) src_mcv else dst: {
2569528878 const dst_mcv = try self.allocRegOrMem(inst, true);
25696 try self.genCopy(switch (std.math.order(dst_ty.abiSize(zcu), src_ty.abiSize(zcu))) {
25697 .lt => dst_ty,
25698 .eq => if (!dst_mcv.isBase() or src_mcv.isBase()) dst_ty else src_ty,
25699 .gt => src_ty,
28879 try self.genCopy(switch (src_mcv) {
28880 else => switch (std.math.order(dst_ty.abiSize(zcu), src_ty.abiSize(zcu))) {
28881 .lt => dst_ty,
28882 .eq => if (!dst_mcv.isBase() or src_mcv.isBase()) dst_ty else src_ty,
28883 .gt => src_ty,
28884 },
28885 .register_mask => src_ty,
2570028886 }, dst_mcv, src_mcv, .{});
2570128887 break :dst dst_mcv;
2570228888 };
......@@ -31173,7 +34359,7 @@ const Select = struct {
3117334359 dst_constraints: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]Constraint = @splat(.any),
3117434360 src_constraints: [@intFromEnum(Select.Operand.Ref.none) - @intFromEnum(Select.Operand.Ref.src0)]Constraint = @splat(.any),
3117534361 patterns: []const Select.Pattern,
31176 call_frame: packed struct(u16) { size: u10, alignment: InternPool.Alignment } = .{ .size = 0, .alignment = .none },
34362 call_frame: packed struct(u16) { size: u10 = 0, alignment: InternPool.Alignment } = .{ .size = 0, .alignment = .none },
3117734363 extra_temps: [@intFromEnum(Select.Operand.Ref.dst0) - @intFromEnum(Select.Operand.Ref.tmp0)]TempSpec = @splat(.unused),
3117834364 dst_temps: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused),
3117934365 clobbers: packed struct {
......@@ -31202,14 +34388,16 @@ const Select = struct {
3120234388 multiple_size: Memory.Size,
3120334389 int: Memory.Size,
3120434390 scalar_int_is: Memory.Size,
31205 scalar_int: struct { of: Memory.Size, is: Memory.Size },
34391 scalar_int: OfIsSizes,
3120634392 scalar_signed_int: Memory.Size,
3120734393 scalar_unsigned_int: Memory.Size,
31208 scalar_remainder_int: struct { of: Memory.Size, is: Memory.Size },
34394 multiple_scalar_int: OfIsSizes,
34395 scalar_remainder_int: OfIsSizes,
3120934396 float: Memory.Size,
31210 scalar_float: struct { of: Memory.Size, is: Memory.Size },
31211 scalar_exact_float: struct { of: Memory.Size, is: Memory.Size },
31212 multiple_scalar_int: struct { of: Memory.Size, is: Memory.Size },
34397 scalar_any_float: Memory.Size,
34398 scalar_float: OfIsSizes,
34399 multiple_scalar_any_float: Memory.Size,
34400 multiple_scalar_float: OfIsSizes,
3121334401 exact_int: u16,
3121434402 exact_signed_int: u16,
3121534403 exact_unsigned_int: u16,
......@@ -31218,16 +34406,18 @@ const Select = struct {
3121834406 po2_int: Memory.Size,
3121934407 signed_po2_int: Memory.Size,
3122034408 unsigned_po2_or_exact_int: Memory.Size,
31221 remainder_int: struct { of: Memory.Size, is: Memory.Size },
31222 exact_remainder_int: struct { of: Memory.Size, is: Memory.Size },
31223 signed_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size },
31224 unsigned_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size },
34409 remainder_int: OfIsSizes,
34410 exact_remainder_int: OfIsSizes,
34411 signed_or_exact_remainder_int: OfIsSizes,
34412 unsigned_or_exact_remainder_int: OfIsSizes,
3122534413 signed_int: Memory.Size,
3122634414 unsigned_int: Memory.Size,
3122734415 elem_size_is: u8,
3122834416 po2_elem_size,
3122934417 elem_int: Memory.Size,
3123034418
34419 const OfIsSizes = struct { of: Memory.Size, is: Memory.Size };
34420
3123134421 fn accepts(constraint: Constraint, ty: Type, cg: *CodeGen) bool {
3123234422 const zcu = cg.pt.zcu;
3123334423 return switch (constraint) {
......@@ -31258,7 +34448,7 @@ const Select = struct {
3125834448 size.bitSize(cg.target) >= int_info.bits
3125934449 else
3126034450 false,
31261 .scalar_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
34451 .scalar_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
3126234452 if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false,
3126334453 .scalar_signed_int => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) {
3126434454 .signed => size.bitSize(cg.target) >= int_info.bits,
......@@ -31275,9 +34465,13 @@ const Select = struct {
3127534465 else
3127634466 false,
3127734467 .float => |size| if (cg.floatBits(ty)) |float_bits| size.bitSize(cg.target) == float_bits else false,
31278 .scalar_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
31279 if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) >= float_bits else false,
31280 .scalar_exact_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
34468 .scalar_any_float => |size| @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
34469 cg.floatBits(ty.scalarType(zcu)) != null,
34470 .scalar_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
34471 if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) == float_bits else false,
34472 .multiple_scalar_any_float => |size| ty.abiSize(zcu) % @divExact(size.bitSize(cg.target), 8) == 0 and
34473 cg.floatBits(ty.scalarType(zcu)) != null,
34474 .multiple_scalar_float => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and
3128134475 if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) == float_bits else false,
3128234476 .exact_int => |bit_size| if (cg.intInfo(ty)) |int_info| bit_size == int_info.bits else false,
3128334477 .exact_signed_int => |bit_size| if (cg.intInfo(ty)) |int_info| switch (int_info.signedness) {
......@@ -31505,48 +34699,81 @@ const Select = struct {
3150534699 unused,
3150634700 any,
3150734701 cc: Condition,
34702 ref: Select.Operand.Ref,
3150834703 reg: Register,
3150934704 rc: Register.Class,
34705 mut_rc: struct { ref: Select.Operand.Ref, rc: Register.Class },
34706 ref_mask: struct { ref: Select.Operand.Ref, info: MaskInfo },
3151034707 rc_mask: struct { rc: Register.Class, info: MaskInfo },
34708 mut_rc_mask: struct { ref: Select.Operand.Ref, rc: Register.Class, info: MaskInfo },
3151134709 mem,
3151234710 smin_mem: ConstInfo,
3151334711 smax_mem: ConstInfo,
3151434712 umin_mem: ConstInfo,
3151534713 umax_mem: ConstInfo,
31516 ref: Select.Operand.Ref,
31517 ref_mask: struct { ref: Select.Operand.Ref, info: MaskInfo },
31518 mut_reg: struct { ref: Select.Operand.Ref, rc: Register.Class },
3151934714 symbol: *const struct { lib: ?[]const u8 = null, name: []const u8 },
3152034715
31521 const ConstInfo = struct { ref: Select.Operand.Ref, vectorize: bool = false };
34716 const ConstInfo = struct { ref: Select.Operand.Ref, vectorize_to: Memory.Size = .none };
3152234717
3152334718 fn finish(kind: Kind, temp: Temp, s: *const Select) void {
3152434719 switch (kind) {
3152534720 else => {},
31526 inline .rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg),
34721 inline .rc_mask, .mut_rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg),
3152734722 }
3152834723 }
3152934724 };
3153034725
31531 fn create(spec: TempSpec, s: *Select) !?Temp {
34726 fn pass(spec: TempSpec) u2 {
34727 return switch (spec.kind) {
34728 .unused => 0,
34729 .reg => 1,
34730 else => 2,
34731 };
34732 }
34733
34734 fn create(spec: TempSpec, s: *Select) !Temp {
3153234735 const cg = s.cg;
3153334736 return switch (spec.kind) {
31534 .unused => null,
34737 .unused => unreachable,
3153534738 .any => try cg.tempAlloc(spec.type),
3153634739 .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }),
34740 .ref => |ref| ref.deref(s),
3153734741 .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }),
3153834742 .rc => |rc| try cg.tempAllocReg(spec.type, regSetForRegClass(rc)),
34743 .mut_rc => |ref_rc| {
34744 const temp = ref_rc.ref.deref(s);
34745 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
34746 .register => |reg| if (reg.class() == ref_rc.rc) return temp,
34747 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return temp,
34748 else => {},
34749 };
34750 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc));
34751 },
34752 .ref_mask => |ref_mask| ref_mask.ref.deref(s),
3153934753 .rc_mask => |rc_mask| try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)),
34754 .mut_rc_mask => |ref_rc_mask| {
34755 const temp = ref_rc_mask.ref.deref(s);
34756 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
34757 .register => |reg| if (reg.class() == ref_rc_mask.rc) return temp,
34758 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return temp,
34759 else => {},
34760 };
34761 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc_mask.rc));
34762 },
3154034763 .mem => try cg.tempAllocMem(spec.type),
3154134764 .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| {
3154234765 const pt = cg.pt;
3154334766 const zcu = pt.zcu;
3154434767 const ip = &zcu.intern_pool;
31545 const ty = const_info.ref.deref(s).typeOf(s.cg);
31546 const vector_len: ?u32, const scalar_ty: Type = switch (ip.indexToKey(ty.toIntern())) {
31547 else => .{ if (const_info.vectorize) 1 else null, ty },
34768 const ty = const_info.ref.deref(s).typeOf(cg);
34769 const vector_len, const scalar_ty: Type = switch (ip.indexToKey(ty.toIntern())) {
34770 else => .{ null, ty },
3154834771 .vector_type => |vector_type| .{ vector_type.len, .fromInterned(vector_type.child) },
3154934772 };
34773 const res_vector_len: ?u32 = if (const_info.vectorize_to != .none)
34774 @intCast(@divExact(@divExact(const_info.vectorize_to.bitSize(cg.target), 8), scalar_ty.abiSize(pt.zcu)))
34775 else
34776 vector_len;
3155034777 const res_scalar_ty, const res_scalar_val: Value = res_scalar: switch (scalar_ty.toIntern()) {
3155134778 .bool_type => .{
3155234779 scalar_ty,
......@@ -31591,7 +34818,7 @@ const Select = struct {
3159134818 break :res_scalar .{ scalar_int_ty, try pt.intValue_big(scalar_int_ty, big_int.toConst()) };
3159234819 },
3159334820 };
31594 const res_val: Value = if (vector_len) |len| .fromInterned(try pt.intern(.{ .aggregate = .{
34821 const res_val: Value = if (res_vector_len) |len| .fromInterned(try pt.intern(.{ .aggregate = .{
3159534822 .ty = (try pt.vectorType(.{
3159634823 .len = len,
3159734824 .child = res_scalar_ty.toIntern(),
......@@ -31600,17 +34827,6 @@ const Select = struct {
3160034827 } })) else res_scalar_val;
3160134828 return try cg.tempFromValue(res_val);
3160234829 },
31603 .ref => |ref| ref.deref(s),
31604 .ref_mask => |ref_mask| ref_mask.ref.deref(s),
31605 .mut_reg => |ref_rc| {
31606 const temp = ref_rc.ref.deref(s);
31607 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
31608 .register => |reg| if (reg.class() == ref_rc.rc) return temp,
31609 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return temp,
31610 else => {},
31611 };
31612 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc));
31613 },
3161434830 .symbol => |symbol| if (cg.bin_file.cast(.elf)) |elf_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{
3161534831 .sym_index = try elf_file.getGlobalSymbol(symbol.name, symbol.lib),
3161634832 } }) else if (cg.bin_file.cast(.macho)) |macho_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{
......@@ -31707,6 +34923,9 @@ const Select = struct {
3170734923 tmp3,
3170834924 tmp4,
3170934925 tmp5,
34926 tmp6,
34927 tmp7,
34928 tmp8,
3171034929 dst0,
3171134930 src0,
3171234931 src1,
......@@ -31778,6 +34997,36 @@ const Select = struct {
3177834997 const tmp5x: Sized = .{ .ref = .tmp5, .size = .xword };
3177934998 const tmp5y: Sized = .{ .ref = .tmp5, .size = .yword };
3178034999
35000 const tmp6: Sized = .{ .ref = .tmp6, .size = .none };
35001 const tmp6b: Sized = .{ .ref = .tmp6, .size = .byte };
35002 const tmp6w: Sized = .{ .ref = .tmp6, .size = .word };
35003 const tmp6d: Sized = .{ .ref = .tmp6, .size = .dword };
35004 const tmp6p: Sized = .{ .ref = .tmp6, .size = .ptr };
35005 const tmp6q: Sized = .{ .ref = .tmp6, .size = .qword };
35006 const tmp6t: Sized = .{ .ref = .tmp6, .size = .tbyte };
35007 const tmp6x: Sized = .{ .ref = .tmp6, .size = .xword };
35008 const tmp6y: Sized = .{ .ref = .tmp6, .size = .yword };
35009
35010 const tmp7: Sized = .{ .ref = .tmp7, .size = .none };
35011 const tmp7b: Sized = .{ .ref = .tmp7, .size = .byte };
35012 const tmp7w: Sized = .{ .ref = .tmp7, .size = .word };
35013 const tmp7d: Sized = .{ .ref = .tmp7, .size = .dword };
35014 const tmp7p: Sized = .{ .ref = .tmp7, .size = .ptr };
35015 const tmp7q: Sized = .{ .ref = .tmp7, .size = .qword };
35016 const tmp7t: Sized = .{ .ref = .tmp7, .size = .tbyte };
35017 const tmp7x: Sized = .{ .ref = .tmp7, .size = .xword };
35018 const tmp7y: Sized = .{ .ref = .tmp7, .size = .yword };
35019
35020 const tmp8: Sized = .{ .ref = .tmp8, .size = .none };
35021 const tmp8b: Sized = .{ .ref = .tmp8, .size = .byte };
35022 const tmp8w: Sized = .{ .ref = .tmp8, .size = .word };
35023 const tmp8d: Sized = .{ .ref = .tmp8, .size = .dword };
35024 const tmp8p: Sized = .{ .ref = .tmp8, .size = .ptr };
35025 const tmp8q: Sized = .{ .ref = .tmp8, .size = .qword };
35026 const tmp8t: Sized = .{ .ref = .tmp8, .size = .tbyte };
35027 const tmp8x: Sized = .{ .ref = .tmp8, .size = .xword };
35028 const tmp8y: Sized = .{ .ref = .tmp8, .size = .yword };
35029
3178135030 const dst0: Sized = .{ .ref = .dst0, .size = .none };
3178235031 const dst0b: Sized = .{ .ref = .dst0, .size = .byte };
3178335032 const dst0w: Sized = .{ .ref = .dst0, .size = .word };
......@@ -31875,6 +35124,33 @@ const Select = struct {
3187535124 const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x };
3187635125 const tmp5y: Select.Operand = .{ .tag = .ref, .base = .tmp5y };
3187735126
35127 const tmp6b: Select.Operand = .{ .tag = .ref, .base = .tmp6b };
35128 const tmp6w: Select.Operand = .{ .tag = .ref, .base = .tmp6w };
35129 const tmp6d: Select.Operand = .{ .tag = .ref, .base = .tmp6d };
35130 const tmp6p: Select.Operand = .{ .tag = .ref, .base = .tmp6p };
35131 const tmp6q: Select.Operand = .{ .tag = .ref, .base = .tmp6q };
35132 const tmp6t: Select.Operand = .{ .tag = .ref, .base = .tmp6t };
35133 const tmp6x: Select.Operand = .{ .tag = .ref, .base = .tmp6x };
35134 const tmp6y: Select.Operand = .{ .tag = .ref, .base = .tmp6y };
35135
35136 const tmp7b: Select.Operand = .{ .tag = .ref, .base = .tmp7b };
35137 const tmp7w: Select.Operand = .{ .tag = .ref, .base = .tmp7w };
35138 const tmp7d: Select.Operand = .{ .tag = .ref, .base = .tmp7d };
35139 const tmp7p: Select.Operand = .{ .tag = .ref, .base = .tmp7p };
35140 const tmp7q: Select.Operand = .{ .tag = .ref, .base = .tmp7q };
35141 const tmp7t: Select.Operand = .{ .tag = .ref, .base = .tmp7t };
35142 const tmp7x: Select.Operand = .{ .tag = .ref, .base = .tmp7x };
35143 const tmp7y: Select.Operand = .{ .tag = .ref, .base = .tmp7y };
35144
35145 const tmp8b: Select.Operand = .{ .tag = .ref, .base = .tmp8b };
35146 const tmp8w: Select.Operand = .{ .tag = .ref, .base = .tmp8w };
35147 const tmp8d: Select.Operand = .{ .tag = .ref, .base = .tmp8d };
35148 const tmp8p: Select.Operand = .{ .tag = .ref, .base = .tmp8p };
35149 const tmp8q: Select.Operand = .{ .tag = .ref, .base = .tmp8q };
35150 const tmp8t: Select.Operand = .{ .tag = .ref, .base = .tmp8t };
35151 const tmp8x: Select.Operand = .{ .tag = .ref, .base = .tmp8x };
35152 const tmp8y: Select.Operand = .{ .tag = .ref, .base = .tmp8y };
35153
3187835154 const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b };
3187935155 const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w };
3188035156 const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d };
......@@ -32204,14 +35480,20 @@ fn select(
3220435480 const src_slots = s.temps[@intFromEnum(Select.Operand.Ref.src0)..@intFromEnum(Select.Operand.Ref.none)];
3220535481
3220635482 caller_preserved: {
32207 switch (switch (case.clobbers.caller_preserved) {
35483 const cc = switch (case.clobbers.caller_preserved) {
3220835484 .none => break :caller_preserved,
3220935485 .ccc => cg.target.cCallingConvention().?,
3221035486 .zigcc => .auto,
32211 }) {
35487 };
35488 const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: {
35489 const param_gpr = abi.getCAbiIntParamRegs(.auto);
35490 break :err_ret_trace_reg param_gpr[param_gpr.len - 1];
35491 } else .none;
35492 switch (cc) {
3221235493 else => unreachable,
32213 inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| {
32214 const tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse continue;
35494 inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| skip: {
35495 if (reg == err_ret_trace_reg) break :skip;
35496 const tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse break :skip;
3221535497 try cg.register_manager.getRegIndex(tracked_index, null);
3221635498 assert(cg.register_manager.lockRegIndexAssumeUnused(tracked_index).tracked_index == tracked_index);
3221735499 },
......@@ -32220,7 +35502,9 @@ fn select(
3222035502
3222135503 @memcpy(src_slots[0..src_temps.len], src_temps);
3222235504 std.mem.swap(Temp, &src_slots[pattern.commute[0]], &src_slots[pattern.commute[1]]);
32223 for (tmp_slots, case.extra_temps) |*slot, spec| slot.* = try spec.create(&s) orelse continue;
35505 for (1..3) |pass| for (tmp_slots, case.extra_temps) |*slot, spec| if (pass == spec.pass()) {
35506 slot.* = try spec.create(&s);
35507 };
3222435508
3222535509 while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| {
3222635510 if (try src_pattern.convert(src_temp, cg)) break;
......@@ -32231,7 +35515,7 @@ fn select(
3223135515 if (case.clobbers.eflags) try cg.spillEflagsIfOccupied();
3223235516
3223335517 for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind|
32234 dst_temp.* = (try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s)).?;
35518 dst_temp.* = (try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s));
3223535519 @memcpy(dst_slots[0..dst_temps.len], dst_temps);
3223635520
3223735521 switch (case.each) {
......@@ -32243,16 +35527,20 @@ fn select(
3224335527 assert(s.top == 0);
3224435528
3224535529 caller_preserved: {
32246 switch (switch (case.clobbers.caller_preserved) {
35530 const cc = switch (case.clobbers.caller_preserved) {
3224735531 .none => break :caller_preserved,
3224835532 .ccc => cg.target.cCallingConvention().?,
3224935533 .zigcc => .auto,
32250 }) {
35534 };
35535 const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: {
35536 const param_gpr = abi.getCAbiIntParamRegs(.auto);
35537 break :err_ret_trace_reg param_gpr[param_gpr.len - 1];
35538 } else .none;
35539 switch (cc) {
3225135540 else => unreachable,
32252 inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| {
32253 cg.register_manager.unlockReg(.{
32254 .tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse continue,
32255 });
35541 inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| skip: {
35542 if (reg == err_ret_trace_reg) break :skip;
35543 cg.register_manager.unlockReg(.{ .tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse break :skip });
3225635544 },
3225735545 }
3225835546 }
src/arch/x86_64/bits.zig+1
......@@ -366,6 +366,7 @@ pub const Register = enum(u8) {
366366 @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax),
367367 @intFromEnum(Register.ax) ... @intFromEnum(Register.r15w) => @intFromEnum(Register.ax),
368368 @intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => @intFromEnum(Register.al),
369 @intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => @intFromEnum(Register.ah),
369370 else => unreachable,
370371 // zig fmt: on
371372 };
src/codegen/c.zig+98-98
......@@ -706,7 +706,7 @@ pub const DeclGen = struct {
706706 const uav_ty = uav_val.typeOf(zcu);
707707
708708 // Render an undefined pointer if we have a pointer to a zero-bit or comptime type.
709 const ptr_ty = Type.fromInterned(uav.orig_ty);
709 const ptr_ty: Type = .fromInterned(uav.orig_ty);
710710 if (ptr_ty.isPtrAtRuntime(zcu) and !uav_ty.isFnOrHasRuntimeBits(zcu)) {
711711 return dg.writeCValue(writer, .{ .undef = ptr_ty });
712712 }
......@@ -782,7 +782,7 @@ pub const DeclGen = struct {
782782 };
783783
784784 // Render an undefined pointer if we have a pointer to a zero-bit or comptime type.
785 const nav_ty = Type.fromInterned(ip.getNav(owner_nav).typeOf(ip));
785 const nav_ty: Type = .fromInterned(ip.getNav(owner_nav).typeOf(ip));
786786 const ptr_ty = try pt.navPtrType(owner_nav);
787787 if (!nav_ty.isFnOrHasRuntimeBits(zcu)) {
788788 return dg.writeCValue(writer, .{ .undef = ptr_ty });
......@@ -819,7 +819,7 @@ pub const DeclGen = struct {
819819 .comptime_alloc_ptr, .comptime_field_ptr => unreachable,
820820 .int => |int| {
821821 const ptr_ctype = try dg.ctypeFromType(int.ptr_ty, .complete);
822 const addr_val = try pt.intValue(Type.usize, int.addr);
822 const addr_val = try pt.intValue(.usize, int.addr);
823823 try writer.writeByte('(');
824824 try dg.renderCType(writer, ptr_ctype);
825825 try writer.print("){x}", .{try dg.fmtIntLiteral(addr_val, .Other)});
......@@ -859,7 +859,7 @@ pub const DeclGen = struct {
859859 try writer.writeByte('(');
860860 try dg.renderCType(writer, ptr_ctype);
861861 try writer.writeByte(')');
862 const offset_val = try pt.intValue(Type.usize, byte_offset);
862 const offset_val = try pt.intValue(.usize, byte_offset);
863863 try writer.writeAll("((char *)");
864864 try dg.renderPointer(writer, field.parent.*, location);
865865 try writer.print(" + {})", .{try dg.fmtIntLiteral(offset_val, .Other)});
......@@ -875,7 +875,7 @@ pub const DeclGen = struct {
875875 try writer.writeByte(')');
876876 try dg.renderPointer(writer, elem.parent.*, location);
877877 } else {
878 const index_val = try pt.intValue(Type.usize, elem.elem_idx);
878 const index_val = try pt.intValue(.usize, elem.elem_idx);
879879 // We want to do pointer arithmetic on a pointer to the element type.
880880 // We might have a pointer-to-array. In this case, we must cast first.
881881 const result_ctype = try dg.ctypeFromType(elem.result_ptr_ty, .complete);
......@@ -904,7 +904,7 @@ pub const DeclGen = struct {
904904 if (oac.byte_offset == 0) {
905905 try dg.renderPointer(writer, oac.parent.*, location);
906906 } else {
907 const offset_val = try pt.intValue(Type.usize, oac.byte_offset);
907 const offset_val = try pt.intValue(.usize, oac.byte_offset);
908908 try writer.writeAll("((char *)");
909909 try dg.renderPointer(writer, oac.parent.*, location);
910910 try writer.print(" + {})", .{try dg.fmtIntLiteral(offset_val, .Other)});
......@@ -984,7 +984,7 @@ pub const DeclGen = struct {
984984 try writer.writeAll("((");
985985 try dg.renderCType(writer, ctype);
986986 try writer.print("){x})", .{try dg.fmtIntLiteral(
987 try pt.intValue(Type.usize, val.toUnsignedInt(zcu)),
987 try pt.intValue(.usize, val.toUnsignedInt(zcu)),
988988 .Other,
989989 )});
990990 },
......@@ -1153,7 +1153,7 @@ pub const DeclGen = struct {
11531153 else => |payload| switch (ip.indexToKey(payload)) {
11541154 .undef => |err_ty| try dg.renderUndefValue(
11551155 writer,
1156 Type.fromInterned(err_ty),
1156 .fromInterned(err_ty),
11571157 location,
11581158 ),
11591159 .err => |err| try dg.renderErrorName(writer, err.name),
......@@ -1204,7 +1204,7 @@ pub const DeclGen = struct {
12041204 ),
12051205 },
12061206 .ptr => try writer.writeAll("NULL"),
1207 .len => try dg.renderUndefValue(writer, Type.usize, initializer_type),
1207 .len => try dg.renderUndefValue(writer, .usize, initializer_type),
12081208 else => unreachable,
12091209 }
12101210 }
......@@ -1219,7 +1219,7 @@ pub const DeclGen = struct {
12191219 try writer.writeByte(')');
12201220 }
12211221 const ai = ty.arrayInfo(zcu);
1222 if (ai.elem_type.eql(Type.u8, zcu)) {
1222 if (ai.elem_type.eql(.u8, zcu)) {
12231223 var literal = stringLiteral(writer, ty.arrayLenIncludingSentinel(zcu));
12241224 try literal.start();
12251225 var index: usize = 0;
......@@ -1263,7 +1263,7 @@ pub const DeclGen = struct {
12631263 for (0..tuple.types.len) |field_index| {
12641264 const comptime_val = tuple.values.get(ip)[field_index];
12651265 if (comptime_val != .none) continue;
1266 const field_ty = Type.fromInterned(tuple.types.get(ip)[field_index]);
1266 const field_ty: Type = .fromInterned(tuple.types.get(ip)[field_index]);
12671267 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
12681268
12691269 if (!empty) try writer.writeByte(',');
......@@ -1298,7 +1298,7 @@ pub const DeclGen = struct {
12981298 var field_it = loaded_struct.iterateRuntimeOrder(ip);
12991299 var need_comma = false;
13001300 while (field_it.next()) |field_index| {
1301 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
1301 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
13021302 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13031303
13041304 if (need_comma) try writer.writeByte(',');
......@@ -1325,7 +1325,7 @@ pub const DeclGen = struct {
13251325 var eff_num_fields: usize = 0;
13261326
13271327 for (0..loaded_struct.field_types.len) |field_index| {
1328 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
1328 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
13291329 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13301330 eff_num_fields += 1;
13311331 }
......@@ -1346,7 +1346,7 @@ pub const DeclGen = struct {
13461346 var eff_index: usize = 0;
13471347 var needs_closing_paren = false;
13481348 for (0..loaded_struct.field_types.len) |field_index| {
1349 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
1349 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
13501350 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13511351
13521352 const field_val = switch (ip.indexToKey(val.toIntern()).aggregate.storage) {
......@@ -1382,7 +1382,7 @@ pub const DeclGen = struct {
13821382 // a << a_off | b << b_off | c << c_off
13831383 var empty = true;
13841384 for (0..loaded_struct.field_types.len) |field_index| {
1385 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
1385 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
13861386 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13871387
13881388 if (!empty) try writer.writeAll(" | ");
......@@ -1466,7 +1466,7 @@ pub const DeclGen = struct {
14661466 }
14671467
14681468 const field_index = zcu.unionTagFieldIndex(loaded_union, Value.fromInterned(un.tag)).?;
1469 const field_ty = Type.fromInterned(loaded_union.field_types.get(ip)[field_index]);
1469 const field_ty: Type = .fromInterned(loaded_union.field_types.get(ip)[field_index]);
14701470 const field_name = loaded_union.loadTagType(ip).names.get(ip)[field_index];
14711471 if (loaded_union.flagsUnordered(ip).layout == .@"packed") {
14721472 if (field_ty.hasRuntimeBits(zcu)) {
......@@ -1509,7 +1509,7 @@ pub const DeclGen = struct {
15091509 );
15101510 try writer.writeByte(' ');
15111511 } else for (0..loaded_union.field_types.len) |inner_field_index| {
1512 const inner_field_ty = Type.fromInterned(
1512 const inner_field_ty: Type = .fromInterned(
15131513 loaded_union.field_types.get(ip)[inner_field_index],
15141514 );
15151515 if (!inner_field_ty.hasRuntimeBits(zcu)) continue;
......@@ -1592,7 +1592,7 @@ pub const DeclGen = struct {
15921592 try writer.writeAll("((");
15931593 try dg.renderCType(writer, ctype);
15941594 return writer.print("){x})", .{
1595 try dg.fmtIntLiteral(try pt.undefValue(Type.usize), .Other),
1595 try dg.fmtIntLiteral(try pt.undefValue(.usize), .Other),
15961596 });
15971597 },
15981598 .slice => {
......@@ -1606,14 +1606,14 @@ pub const DeclGen = struct {
16061606 const ptr_ty = ty.slicePtrFieldType(zcu);
16071607 try dg.renderType(writer, ptr_ty);
16081608 return writer.print("){x}, {0x}}}", .{
1609 try dg.fmtIntLiteral(try dg.pt.undefValue(Type.usize), .Other),
1609 try dg.fmtIntLiteral(try dg.pt.undefValue(.usize), .Other),
16101610 });
16111611 },
16121612 },
16131613 .opt_type => |child_type| switch (ctype.info(ctype_pool)) {
16141614 .basic, .pointer => try dg.renderUndefValue(
16151615 writer,
1616 Type.fromInterned(if (ctype.isBool()) .bool_type else child_type),
1616 .fromInterned(if (ctype.isBool()) .bool_type else child_type),
16171617 location,
16181618 ),
16191619 .aligned, .array, .vector, .fwd_decl, .function => unreachable,
......@@ -1622,7 +1622,7 @@ pub const DeclGen = struct {
16221622 .is_null, .payload => {},
16231623 .ptr, .len => return dg.renderUndefValue(
16241624 writer,
1625 Type.fromInterned(child_type),
1625 .fromInterned(child_type),
16261626 location,
16271627 ),
16281628 else => unreachable,
......@@ -1635,7 +1635,7 @@ pub const DeclGen = struct {
16351635 try writer.writeByte('{');
16361636 for (0..aggregate.fields.len) |field_index| {
16371637 if (field_index > 0) try writer.writeByte(',');
1638 try dg.renderUndefValue(writer, Type.fromInterned(
1638 try dg.renderUndefValue(writer, .fromInterned(
16391639 switch (aggregate.fields.at(field_index, ctype_pool).name.index) {
16401640 .is_null => .bool_type,
16411641 .payload => child_type,
......@@ -1660,7 +1660,7 @@ pub const DeclGen = struct {
16601660 var field_it = loaded_struct.iterateRuntimeOrder(ip);
16611661 var need_comma = false;
16621662 while (field_it.next()) |field_index| {
1663 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
1663 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
16641664 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
16651665
16661666 if (need_comma) try writer.writeByte(',');
......@@ -1685,7 +1685,7 @@ pub const DeclGen = struct {
16851685 var need_comma = false;
16861686 for (0..tuple_info.types.len) |field_index| {
16871687 if (tuple_info.values.get(ip)[field_index] != .none) continue;
1688 const field_ty = Type.fromInterned(tuple_info.types.get(ip)[field_index]);
1688 const field_ty: Type = .fromInterned(tuple_info.types.get(ip)[field_index]);
16891689 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
16901690
16911691 if (need_comma) try writer.writeByte(',');
......@@ -1715,13 +1715,13 @@ pub const DeclGen = struct {
17151715 .payload) {
17161716 .tag => try dg.renderUndefValue(
17171717 writer,
1718 Type.fromInterned(loaded_union.enum_tag_ty),
1718 .fromInterned(loaded_union.enum_tag_ty),
17191719 initializer_type,
17201720 ),
17211721 .payload => {
17221722 try writer.writeByte('{');
17231723 for (0..loaded_union.field_types.len) |inner_field_index| {
1724 const inner_field_ty = Type.fromInterned(
1724 const inner_field_ty: Type = .fromInterned(
17251725 loaded_union.field_types.get(ip)[inner_field_index],
17261726 );
17271727 if (!inner_field_ty.hasRuntimeBits(pt.zcu)) continue;
......@@ -1747,7 +1747,7 @@ pub const DeclGen = struct {
17471747 .error_union_type => |error_union_type| switch (ctype.info(ctype_pool)) {
17481748 .basic => try dg.renderUndefValue(
17491749 writer,
1750 Type.fromInterned(error_union_type.error_set_type),
1750 .fromInterned(error_union_type.error_set_type),
17511751 location,
17521752 ),
17531753 .pointer, .aligned, .array, .vector, .fwd_decl, .function => unreachable,
......@@ -1762,7 +1762,7 @@ pub const DeclGen = struct {
17621762 if (field_index > 0) try writer.writeByte(',');
17631763 try dg.renderUndefValue(
17641764 writer,
1765 Type.fromInterned(
1765 .fromInterned(
17661766 switch (aggregate.fields.at(field_index, ctype_pool).name.index) {
17671767 .@"error" => error_union_type.error_set_type,
17681768 .payload => error_union_type.payload_type,
......@@ -1777,7 +1777,7 @@ pub const DeclGen = struct {
17771777 },
17781778 .array_type, .vector_type => {
17791779 const ai = ty.arrayInfo(zcu);
1780 if (ai.elem_type.eql(Type.u8, zcu)) {
1780 if (ai.elem_type.eql(.u8, zcu)) {
17811781 const c_len = ty.arrayLenIncludingSentinel(zcu);
17821782 var literal = stringLiteral(writer, c_len);
17831783 try literal.start();
......@@ -1981,8 +1981,8 @@ pub const DeclGen = struct {
19811981
19821982 const src_is_ptr = src_ty.isPtrAtRuntime(pt.zcu);
19831983 const src_eff_ty: Type = if (src_is_ptr) switch (dest_int_info.signedness) {
1984 .unsigned => Type.usize,
1985 .signed => Type.isize,
1984 .unsigned => .usize,
1985 .signed => .isize,
19861986 } else src_ty;
19871987
19881988 const src_bits = src_eff_ty.bitSize(zcu);
......@@ -2022,8 +2022,8 @@ pub const DeclGen = struct {
20222022
20232023 const src_is_ptr = src_ty.isPtrAtRuntime(zcu);
20242024 const src_eff_ty: Type = if (src_is_ptr) switch (dest_int_info.signedness) {
2025 .unsigned => Type.usize,
2026 .signed => Type.isize,
2025 .unsigned => .usize,
2026 .signed => .isize,
20272027 } else src_ty;
20282028
20292029 const src_bits = src_eff_ty.bitSize(zcu);
......@@ -2249,7 +2249,7 @@ pub const DeclGen = struct {
22492249 if (flags.is_threadlocal and !dg.mod.single_threaded) try fwd.writeAll("zig_threadlocal ");
22502250 try dg.renderTypeAndName(
22512251 fwd,
2252 Type.fromInterned(nav.typeOf(ip)),
2252 .fromInterned(nav.typeOf(ip)),
22532253 .{ .nav = nav_index },
22542254 CQualifiers.init(.{ .@"const" = flags.is_const }),
22552255 nav.getAlignment(),
......@@ -2321,7 +2321,7 @@ pub const DeclGen = struct {
23212321
23222322 if (is_big) try writer.print(", {}", .{int_info.signedness == .signed});
23232323 try writer.print(", {}", .{try dg.fmtIntLiteral(
2324 try pt.intValue(if (is_big) Type.u16 else Type.u8, int_info.bits),
2324 try pt.intValue(if (is_big) .u16 else .u8, int_info.bits),
23252325 .FunctionArgument,
23262326 )});
23272327 }
......@@ -2657,7 +2657,7 @@ pub fn genTypeDecl(
26572657 },
26582658 .index => |index| if (!found_existing) {
26592659 const ip = &zcu.intern_pool;
2660 const ty = Type.fromInterned(index);
2660 const ty: Type = .fromInterned(index);
26612661 _ = try renderTypePrefix(.flush, global_ctype_pool, zcu, writer, global_ctype, .suffix, .{});
26622662 try writer.writeByte(';');
26632663 const file_scope = ty.typeDeclInstAllowGeneratedTag(zcu).?.resolveFile(ip);
......@@ -2772,7 +2772,7 @@ pub fn genErrDecls(o: *Object) !void {
27722772 if (val > 1) try writer.writeAll(", ");
27732773 try writer.print("{{" ++ name_prefix ++ "{}, {}}}", .{
27742774 fmtIdent(name),
2775 try o.dg.fmtIntLiteral(try pt.intValue(Type.usize, name.len), .StaticInitializer),
2775 try o.dg.fmtIntLiteral(try pt.intValue(.usize, name.len), .StaticInitializer),
27762776 });
27772777 }
27782778 try writer.writeAll("};\n");
......@@ -2788,8 +2788,8 @@ pub fn genLazyFn(o: *Object, lazy_ctype_pool: *const CType.Pool, lazy_fn: LazyFn
27882788 const val = lazy_fn.value_ptr;
27892789 switch (key) {
27902790 .tag_name => |enum_ty_ip| {
2791 const enum_ty = Type.fromInterned(enum_ty_ip);
2792 const name_slice_ty = Type.slice_const_u8_sentinel_0;
2791 const enum_ty: Type = .fromInterned(enum_ty_ip);
2792 const name_slice_ty: Type = .slice_const_u8_sentinel_0;
27932793
27942794 try w.writeAll("static ");
27952795 try o.dg.renderType(w, name_slice_ty);
......@@ -2822,7 +2822,7 @@ pub fn genLazyFn(o: *Object, lazy_ctype_pool: *const CType.Pool, lazy_fn: LazyFn
28222822 try o.dg.renderType(w, name_slice_ty);
28232823 try w.print("){{{}, {}}};\n", .{
28242824 fmtIdent("name"),
2825 try o.dg.fmtIntLiteral(try pt.intValue(Type.usize, tag_name_len), .Other),
2825 try o.dg.fmtIntLiteral(try pt.intValue(.usize, tag_name_len), .Other),
28262826 });
28272827
28282828 try w.writeAll(" }\n");
......@@ -2966,7 +2966,7 @@ pub fn genDecl(o: *Object) !void {
29662966 const zcu = pt.zcu;
29672967 const ip = &zcu.intern_pool;
29682968 const nav = ip.getNav(o.dg.pass.nav);
2969 const nav_ty = Type.fromInterned(nav.typeOf(ip));
2969 const nav_ty: Type = .fromInterned(nav.typeOf(ip));
29702970
29712971 if (!nav_ty.isFnOrHasRuntimeBitsIgnoreComptime(zcu)) return;
29722972 switch (ip.indexToKey(nav.status.fully_resolved.val)) {
......@@ -3717,7 +3717,7 @@ fn airArg(f: *Function, inst: Air.Inst.Index) !CValue {
37173717 if (f.liveness.isUnused(inst)) {
37183718 const writer = f.object.writer();
37193719 try writer.writeByte('(');
3720 try f.renderType(writer, Type.void);
3720 try f.renderType(writer, .void);
37213721 try writer.writeByte(')');
37223722 try f.writeCValue(writer, result, .Other);
37233723 try writer.writeAll(";\n");
......@@ -3735,7 +3735,7 @@ fn airLoad(f: *Function, inst: Air.Inst.Index) !CValue {
37353735 const ptr_ty = f.typeOf(ty_op.operand);
37363736 const ptr_scalar_ty = ptr_ty.scalarType(zcu);
37373737 const ptr_info = ptr_scalar_ty.ptrInfo(zcu);
3738 const src_ty = Type.fromInterned(ptr_info.child);
3738 const src_ty: Type = .fromInterned(ptr_info.child);
37393739
37403740 if (!src_ty.hasRuntimeBitsIgnoreComptime(zcu)) {
37413741 try reap(f, inst, &.{ty_op.operand});
......@@ -3953,7 +3953,7 @@ fn airTrunc(f: *Function, inst: Air.Inst.Index) !CValue {
39533953 .signed => {
39543954 const c_bits = toCIntBits(scalar_int_info.bits) orelse
39553955 return f.fail("TODO: C backend: implement integer types larger than 128 bits", .{});
3956 const shift_val = try pt.intValue(Type.u8, c_bits - dest_bits);
3956 const shift_val = try pt.intValue(.u8, c_bits - dest_bits);
39573957
39583958 try writer.writeAll("zig_shr_");
39593959 try f.object.dg.renderTypeForBuiltinFnName(writer, scalar_ty);
......@@ -4019,7 +4019,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
40194019 try writer.writeAll("memset(");
40204020 try f.writeCValue(writer, ptr_val, .FunctionArgument);
40214021 try writer.writeAll(", 0xaa, sizeof(");
4022 try f.renderType(writer, Type.fromInterned(ptr_info.child));
4022 try f.renderType(writer, .fromInterned(ptr_info.child));
40234023 try writer.writeAll("));\n");
40244024 }
40254025 return .none;
......@@ -4029,7 +4029,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
40294029 ptr_info.flags.alignment.order(src_ty.abiAlignment(zcu)).compare(.gte)
40304030 else
40314031 true;
4032 const is_array = lowersToArray(Type.fromInterned(ptr_info.child), pt);
4032 const is_array = lowersToArray(.fromInterned(ptr_info.child), pt);
40334033 const need_memcpy = !is_aligned or is_array;
40344034
40354035 const src_val = try f.resolveInst(bin_op.rhs);
......@@ -4040,7 +4040,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
40404040 if (need_memcpy) {
40414041 // For this memcpy to safely work we need the rhs to have the same
40424042 // underlying type as the lhs (i.e. they must both be arrays of the same underlying type).
4043 assert(src_ty.eql(Type.fromInterned(ptr_info.child), zcu));
4043 assert(src_ty.eql(.fromInterned(ptr_info.child), zcu));
40444044
40454045 // If the source is a constant, writeCValue will emit a brace initialization
40464046 // so work around this by initializing into new local.
......@@ -4120,7 +4120,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
41204120
41214121 if (src_ty.isPtrAtRuntime(zcu)) {
41224122 try writer.writeByte('(');
4123 try f.renderType(writer, Type.usize);
4123 try f.renderType(writer, .usize);
41244124 try writer.writeByte(')');
41254125 }
41264126 try f.writeCValue(writer, src_val, .Other);
......@@ -4343,8 +4343,8 @@ fn airEquality(
43434343 try reap(f, inst, &.{ bin_op.lhs, bin_op.rhs });
43444344
43454345 const writer = f.object.writer();
4346 const local = try f.allocLocal(inst, Type.bool);
4347 const a = try Assignment.start(f, writer, CType.bool);
4346 const local = try f.allocLocal(inst, .bool);
4347 const a = try Assignment.start(f, writer, .bool);
43484348 try f.writeCValue(writer, local, .Other);
43494349 try a.assign(f, writer);
43504350
......@@ -4401,7 +4401,7 @@ fn airCmpLtErrorsLen(f: *Function, inst: Air.Inst.Index) !CValue {
44014401 try reap(f, inst, &.{un_op});
44024402
44034403 const writer = f.object.writer();
4404 const local = try f.allocLocal(inst, Type.bool);
4404 const local = try f.allocLocal(inst, .bool);
44054405 try f.writeCValue(writer, local, .Other);
44064406 try writer.writeAll(" = ");
44074407 try f.writeCValue(writer, operand, .Other);
......@@ -4517,7 +4517,7 @@ fn airSlice(f: *Function, inst: Air.Inst.Index) !CValue {
45174517 try a.end(f, writer);
45184518 }
45194519 {
4520 const a = try Assignment.start(f, writer, CType.usize);
4520 const a = try Assignment.start(f, writer, .usize);
45214521 try f.writeCValueMember(writer, local, .{ .identifier = "len" });
45224522 try a.assign(f, writer);
45234523 try f.writeCValue(writer, len, .Initializer);
......@@ -4585,9 +4585,9 @@ fn airCall(
45854585 else => unreachable,
45864586 };
45874587 const fn_info = zcu.typeToFunc(if (callee_is_ptr) callee_ty.childType(zcu) else callee_ty).?;
4588 const ret_ty = Type.fromInterned(fn_info.return_type);
4588 const ret_ty: Type = .fromInterned(fn_info.return_type);
45894589 const ret_ctype: CType = if (ret_ty.isNoReturn(zcu))
4590 CType.void
4590 .void
45914591 else
45924592 try f.ctypeFromType(ret_ty, .parameter);
45934593
......@@ -4599,7 +4599,7 @@ fn airCall(
45994599 break :result .none;
46004600 } else if (f.liveness.isUnused(inst)) {
46014601 try writer.writeByte('(');
4602 try f.renderCType(writer, CType.void);
4602 try f.renderCType(writer, .void);
46034603 try writer.writeByte(')');
46044604 break :result .none;
46054605 } else {
......@@ -5081,20 +5081,20 @@ fn airBreakpoint(writer: anytype) !CValue {
50815081
50825082fn airRetAddr(f: *Function, inst: Air.Inst.Index) !CValue {
50835083 const writer = f.object.writer();
5084 const local = try f.allocLocal(inst, Type.usize);
5084 const local = try f.allocLocal(inst, .usize);
50855085 try f.writeCValue(writer, local, .Other);
50865086 try writer.writeAll(" = (");
5087 try f.renderType(writer, Type.usize);
5087 try f.renderType(writer, .usize);
50885088 try writer.writeAll(")zig_return_address();\n");
50895089 return local;
50905090}
50915091
50925092fn airFrameAddress(f: *Function, inst: Air.Inst.Index) !CValue {
50935093 const writer = f.object.writer();
5094 const local = try f.allocLocal(inst, Type.usize);
5094 const local = try f.allocLocal(inst, .usize);
50955095 try f.writeCValue(writer, local, .Other);
50965096 try writer.writeAll(" = (");
5097 try f.renderType(writer, Type.usize);
5097 try f.renderType(writer, .usize);
50985098 try writer.writeAll(")zig_frame_address();\n");
50995099 return local;
51005100}
......@@ -5179,10 +5179,10 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
51795179
51805180 try writer.writeAll("switch (");
51815181
5182 const lowered_condition_ty = if (condition_ty.toIntern() == .bool_type)
5183 Type.u1
5182 const lowered_condition_ty: Type = if (condition_ty.toIntern() == .bool_type)
5183 .u1
51845184 else if (condition_ty.isPtrAtRuntime(zcu))
5185 Type.usize
5185 .usize
51865186 else
51875187 condition_ty;
51885188 if (condition_ty.toIntern() != lowered_condition_ty.toIntern()) {
......@@ -5219,7 +5219,7 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
52195219 }
52205220 if (condition_ty.isPtrAtRuntime(zcu)) {
52215221 try writer.writeByte('(');
5222 try f.renderType(writer, Type.usize);
5222 try f.renderType(writer, .usize);
52235223 try writer.writeByte(')');
52245224 }
52255225 try f.object.dg.renderValue(writer, (try f.air.value(item, pt)).?, .Other);
......@@ -5604,8 +5604,8 @@ fn airIsNull(
56045604 const operand = try f.resolveInst(un_op);
56055605 try reap(f, inst, &.{un_op});
56065606
5607 const local = try f.allocLocal(inst, Type.bool);
5608 const a = try Assignment.start(f, writer, CType.bool);
5607 const local = try f.allocLocal(inst, .bool);
5608 const a = try Assignment.start(f, writer, .bool);
56095609 try f.writeCValue(writer, local, .Other);
56105610 try a.assign(f, writer);
56115611
......@@ -5750,7 +5750,7 @@ fn fieldLocation(
57505750} {
57515751 const zcu = pt.zcu;
57525752 const ip = &zcu.intern_pool;
5753 const container_ty = Type.fromInterned(ip.indexToKey(container_ptr_ty.toIntern()).ptr_type.child);
5753 const container_ty: Type = .fromInterned(ip.indexToKey(container_ptr_ty.toIntern()).ptr_type.child);
57545754 switch (ip.indexToKey(container_ty.toIntern())) {
57555755 .struct_type => {
57565756 const loaded_struct = ip.loadStructType(container_ty.toIntern());
......@@ -5781,7 +5781,7 @@ fn fieldLocation(
57815781 const loaded_union = ip.loadUnionType(container_ty.toIntern());
57825782 switch (loaded_union.flagsUnordered(ip).layout) {
57835783 .auto, .@"extern" => {
5784 const field_ty = Type.fromInterned(loaded_union.field_types.get(ip)[field_index]);
5784 const field_ty: Type = .fromInterned(loaded_union.field_types.get(ip)[field_index]);
57855785 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu))
57865786 return if (loaded_union.hasTag(ip) and !container_ty.unionHasAllZeroBitFieldTypes(zcu))
57875787 .{ .field = .{ .identifier = "payload" } }
......@@ -5850,7 +5850,7 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {
58505850 switch (fieldLocation(container_ptr_ty, field_ptr_ty, extra.field_index, pt)) {
58515851 .begin => try f.writeCValue(writer, field_ptr_val, .Initializer),
58525852 .field => |field| {
5853 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, Type.u8);
5853 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, .u8);
58545854
58555855 try writer.writeAll("((");
58565856 try f.renderType(writer, u8_ptr_ty);
......@@ -5863,14 +5863,14 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {
58635863 try writer.writeAll("))");
58645864 },
58655865 .byte_offset => |byte_offset| {
5866 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, Type.u8);
5866 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, .u8);
58675867
58685868 try writer.writeAll("((");
58695869 try f.renderType(writer, u8_ptr_ty);
58705870 try writer.writeByte(')');
58715871 try f.writeCValue(writer, field_ptr_val, .Other);
58725872 try writer.print(" - {})", .{
5873 try f.fmtIntLiteral(try pt.intValue(Type.usize, byte_offset)),
5873 try f.fmtIntLiteral(try pt.intValue(.usize, byte_offset)),
58745874 });
58755875 },
58765876 }
......@@ -5908,14 +5908,14 @@ fn fieldPtr(
59085908 try f.writeCValueDerefMember(writer, container_ptr_val, field);
59095909 },
59105910 .byte_offset => |byte_offset| {
5911 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, Type.u8);
5911 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, .u8);
59125912
59135913 try writer.writeAll("((");
59145914 try f.renderType(writer, u8_ptr_ty);
59155915 try writer.writeByte(')');
59165916 try f.writeCValue(writer, container_ptr_val, .Other);
59175917 try writer.print(" + {})", .{
5918 try f.fmtIntLiteral(try pt.intValue(Type.usize, byte_offset)),
5918 try f.fmtIntLiteral(try pt.intValue(.usize, byte_offset)),
59195919 });
59205920 },
59215921 }
......@@ -6158,7 +6158,7 @@ fn airWrapOptional(f: *Function, inst: Air.Inst.Index) !CValue {
61586158 const writer = f.object.writer();
61596159 const local = try f.allocLocal(inst, inst_ty);
61606160 {
6161 const a = try Assignment.start(f, writer, CType.bool);
6161 const a = try Assignment.start(f, writer, .bool);
61626162 try f.writeCValueMember(writer, local, .{ .identifier = "is_null" });
61636163 try a.assign(f, writer);
61646164 try writer.writeAll("false");
......@@ -6322,12 +6322,12 @@ fn airIsErr(f: *Function, inst: Air.Inst.Index, is_ptr: bool, operator: []const
63226322 const operand = try f.resolveInst(un_op);
63236323 try reap(f, inst, &.{un_op});
63246324 const operand_ty = f.typeOf(un_op);
6325 const local = try f.allocLocal(inst, Type.bool);
6325 const local = try f.allocLocal(inst, .bool);
63266326 const err_union_ty = if (is_ptr) operand_ty.childType(zcu) else operand_ty;
63276327 const payload_ty = err_union_ty.errorUnionPayload(zcu);
63286328 const error_ty = err_union_ty.errorUnionSet(zcu);
63296329
6330 const a = try Assignment.start(f, writer, CType.bool);
6330 const a = try Assignment.start(f, writer, .bool);
63316331 try f.writeCValue(writer, local, .Other);
63326332 try a.assign(f, writer);
63336333 const err_int_ty = try pt.errorIntType();
......@@ -6385,17 +6385,17 @@ fn airArrayToSlice(f: *Function, inst: Air.Inst.Index) !CValue {
63856385 if (operand_child_ctype.info(ctype_pool) == .array) {
63866386 try writer.writeByte('&');
63876387 try f.writeCValueDeref(writer, operand);
6388 try writer.print("[{}]", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, 0))});
6388 try writer.print("[{}]", .{try f.fmtIntLiteral(try pt.intValue(.usize, 0))});
63896389 } else try f.writeCValue(writer, operand, .Initializer);
63906390 }
63916391 try a.end(f, writer);
63926392 }
63936393 {
6394 const a = try Assignment.start(f, writer, CType.usize);
6394 const a = try Assignment.start(f, writer, .usize);
63956395 try f.writeCValueMember(writer, local, .{ .identifier = "len" });
63966396 try a.assign(f, writer);
63976397 try writer.print("{}", .{
6398 try f.fmtIntLiteral(try pt.intValue(Type.usize, array_ty.arrayLen(zcu))),
6398 try f.fmtIntLiteral(try pt.intValue(.usize, array_ty.arrayLen(zcu))),
63996399 });
64006400 try a.end(f, writer);
64016401 }
......@@ -6627,7 +6627,7 @@ fn airCmpBuiltinCall(
66276627 try writer.writeByte(')');
66286628 if (!ref_ret) try writer.print("{s}{}", .{
66296629 compareOperatorC(operator),
6630 try f.fmtIntLiteral(try pt.intValue(Type.i32, 0)),
6630 try f.fmtIntLiteral(try pt.intValue(.i32, 0)),
66316631 });
66326632 try writer.writeAll(";\n");
66336633 try v.end(f, inst, writer);
......@@ -6707,7 +6707,7 @@ fn airCmpxchg(f: *Function, inst: Air.Inst.Index, flavor: [*:0]const u8) !CValue
67076707 try a.end(f, writer);
67086708 }
67096709 {
6710 const a = try Assignment.start(f, writer, CType.bool);
6710 const a = try Assignment.start(f, writer, .bool);
67116711 try f.writeCValueMember(writer, local, .{ .identifier = "is_null" });
67126712 try a.assign(f, writer);
67136713 try writer.print("zig_cmpxchg_{s}((zig_atomic(", .{flavor});
......@@ -6935,12 +6935,12 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
69356935 },
69366936 });
69376937
6938 const index = try f.allocLocal(inst, Type.usize);
6938 const index = try f.allocLocal(inst, .usize);
69396939
69406940 try writer.writeAll("for (");
69416941 try f.writeCValue(writer, index, .Other);
69426942 try writer.writeAll(" = ");
6943 try f.object.dg.renderValue(writer, try pt.intValue(Type.usize, 0), .Initializer);
6943 try f.object.dg.renderValue(writer, try pt.intValue(.usize, 0), .Initializer);
69446944 try writer.writeAll("; ");
69456945 try f.writeCValue(writer, index, .Other);
69466946 try writer.writeAll(" != ");
......@@ -6976,7 +6976,7 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
69766976 return .none;
69776977 }
69786978
6979 const bitcasted = try bitcast(f, Type.u8, value, elem_ty);
6979 const bitcasted = try bitcast(f, .u8, value, elem_ty);
69806980
69816981 try writer.writeAll("memset(");
69826982 switch (dest_ty.ptrSize(zcu)) {
......@@ -7038,7 +7038,7 @@ fn writeArrayLen(f: *Function, writer: ArrayListWriter, dest_ptr: CValue, dest_t
70387038 const zcu = pt.zcu;
70397039 switch (dest_ty.ptrSize(zcu)) {
70407040 .one => try writer.print("{}", .{
7041 try f.fmtIntLiteral(try pt.intValue(Type.usize, dest_ty.childType(zcu).arrayLen(zcu))),
7041 try f.fmtIntLiteral(try pt.intValue(.usize, dest_ty.childType(zcu).arrayLen(zcu))),
70427042 }),
70437043 .many, .c => unreachable,
70447044 .slice => try f.writeCValueMember(writer, dest_ptr, .{ .identifier = "len" }),
......@@ -7200,11 +7200,11 @@ fn airShuffle(f: *Function, inst: Air.Inst.Index) !CValue {
72007200 for (0..extra.mask_len) |index| {
72017201 try f.writeCValue(writer, local, .Other);
72027202 try writer.writeByte('[');
7203 try f.object.dg.renderValue(writer, try pt.intValue(Type.usize, index), .Other);
7203 try f.object.dg.renderValue(writer, try pt.intValue(.usize, index), .Other);
72047204 try writer.writeAll("] = ");
72057205
72067206 const mask_elem = (try mask.elemValue(pt, index)).toSignedInt(zcu);
7207 const src_val = try pt.intValue(Type.usize, @as(u64, @intCast(mask_elem ^ mask_elem >> 63)));
7207 const src_val = try pt.intValue(.usize, @as(u64, @intCast(mask_elem ^ mask_elem >> 63)));
72087208
72097209 try f.writeCValue(writer, if (mask_elem >= 0) lhs else rhs, .Other);
72107210 try writer.writeByte('[');
......@@ -7377,7 +7377,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
73777377 switch (ip.indexToKey(inst_ty.toIntern())) {
73787378 inline .array_type, .vector_type => |info, tag| {
73797379 const a: Assignment = .{
7380 .ctype = try f.ctypeFromType(Type.fromInterned(info.child), .complete),
7380 .ctype = try f.ctypeFromType(.fromInterned(info.child), .complete),
73817381 };
73827382 for (resolved_elements, 0..) |element, i| {
73837383 try a.restart(f, writer);
......@@ -7402,7 +7402,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
74027402 .auto, .@"extern" => {
74037403 var field_it = loaded_struct.iterateRuntimeOrder(ip);
74047404 while (field_it.next()) |field_index| {
7405 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
7405 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
74067406 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
74077407
74087408 const a = try Assignment.start(f, writer, try f.ctypeFromType(field_ty, .complete));
......@@ -7466,8 +7466,8 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
74667466 if (field_ty.isPtrAtRuntime(zcu)) {
74677467 try writer.writeByte('(');
74687468 try f.renderType(writer, switch (int_info.signedness) {
7469 .unsigned => Type.usize,
7470 .signed => Type.isize,
7469 .unsigned => .usize,
7470 .signed => .isize,
74717471 });
74727472 try writer.writeByte(')');
74737473 }
......@@ -7501,7 +7501,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
75017501 },
75027502 .tuple_type => |tuple_info| for (0..tuple_info.types.len) |field_index| {
75037503 if (tuple_info.values.get(ip)[field_index] != .none) continue;
7504 const field_ty = Type.fromInterned(tuple_info.types.get(ip)[field_index]);
7504 const field_ty: Type = .fromInterned(tuple_info.types.get(ip)[field_index]);
75057505 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
75067506
75077507 const a = try Assignment.start(f, writer, try f.ctypeFromType(field_ty, .complete));
......@@ -8141,13 +8141,13 @@ fn formatIntLiteral(
81418141 } = switch (data.ctype.info(ctype_pool)) {
81428142 .basic => |basic_info| switch (basic_info) {
81438143 else => .{
8144 .ctype = CType.void,
8144 .ctype = .void,
81458145 .count = 1,
81468146 .endian = .little,
81478147 .homogeneous = true,
81488148 },
81498149 .zig_u128, .zig_i128 => .{
8150 .ctype = CType.u64,
8150 .ctype = .u64,
81518151 .count = 2,
81528152 .endian = .big,
81538153 .homogeneous = false,
......@@ -8253,7 +8253,7 @@ fn formatIntLiteral(
82538253 .int_info = c_limb_int_info,
82548254 .kind = data.kind,
82558255 .ctype = c_limb_ctype,
8256 .val = try pt.intValue_big(Type.comptime_int, c_limb_mut.toConst()),
8256 .val = try pt.intValue_big(.comptime_int, c_limb_mut.toConst()),
82578257 }, fmt, options, writer);
82588258 }
82598259 }
......@@ -8330,15 +8330,15 @@ const Vectorize = struct {
83308330 const pt = f.object.dg.pt;
83318331 const zcu = pt.zcu;
83328332 return if (ty.zigTypeTag(zcu) == .vector) index: {
8333 const local = try f.allocLocal(inst, Type.usize);
8333 const local = try f.allocLocal(inst, .usize);
83348334
83358335 try writer.writeAll("for (");
83368336 try f.writeCValue(writer, local, .Other);
8337 try writer.print(" = {d}; ", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, 0))});
8337 try writer.print(" = {d}; ", .{try f.fmtIntLiteral(try pt.intValue(.usize, 0))});
83388338 try f.writeCValue(writer, local, .Other);
8339 try writer.print(" < {d}; ", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, ty.vectorLen(zcu)))});
8339 try writer.print(" < {d}; ", .{try f.fmtIntLiteral(try pt.intValue(.usize, ty.vectorLen(zcu)))});
83408340 try f.writeCValue(writer, local, .Other);
8341 try writer.print(" += {d}) {{\n", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, 1))});
8341 try writer.print(" += {d}) {{\n", .{try f.fmtIntLiteral(try pt.intValue(.usize, 1))});
83428342 f.object.indent_writer.pushIndent();
83438343
83448344 break :index .{ .index = local };
src/codegen/c/Type.zig+148-56
......@@ -1289,26 +1289,26 @@ pub const Pool = struct {
12891289 kind: Kind,
12901290 ) !CType {
12911291 switch (int_info.bits) {
1292 0 => return CType.void,
1292 0 => return .void,
12931293 1...8 => switch (int_info.signedness) {
1294 .signed => return CType.i8,
1295 .unsigned => return CType.u8,
1294 .signed => return .i8,
1295 .unsigned => return .u8,
12961296 },
12971297 9...16 => switch (int_info.signedness) {
1298 .signed => return CType.i16,
1299 .unsigned => return CType.u16,
1298 .signed => return .i16,
1299 .unsigned => return .u16,
13001300 },
13011301 17...32 => switch (int_info.signedness) {
1302 .signed => return CType.i32,
1303 .unsigned => return CType.u32,
1302 .signed => return .i32,
1303 .unsigned => return .u32,
13041304 },
13051305 33...64 => switch (int_info.signedness) {
1306 .signed => return CType.i64,
1307 .unsigned => return CType.u64,
1306 .signed => return .i64,
1307 .unsigned => return .u64,
13081308 },
13091309 65...128 => switch (int_info.signedness) {
1310 .signed => return CType.i128,
1311 .unsigned => return CType.u128,
1310 .signed => return .i128,
1311 .unsigned => return .u128,
13121312 },
13131313 else => {
13141314 const target = &mod.resolved_target.result;
......@@ -1357,19 +1357,19 @@ pub const Pool = struct {
13571357 .null_type,
13581358 .undefined_type,
13591359 .enum_literal_type,
1360 => return CType.void,
1361 .u1_type, .u8_type => return CType.u8,
1362 .i8_type => return CType.i8,
1363 .u16_type => return CType.u16,
1364 .i16_type => return CType.i16,
1365 .u29_type, .u32_type => return CType.u32,
1366 .i32_type => return CType.i32,
1367 .u64_type => return CType.u64,
1368 .i64_type => return CType.i64,
1369 .u80_type, .u128_type => return CType.u128,
1370 .i128_type => return CType.i128,
1371 .usize_type => return CType.usize,
1372 .isize_type => return CType.isize,
1360 => return .void,
1361 .u1_type, .u8_type => return .u8,
1362 .i8_type => return .i8,
1363 .u16_type => return .u16,
1364 .i16_type => return .i16,
1365 .u29_type, .u32_type => return .u32,
1366 .i32_type => return .i32,
1367 .u64_type => return .u64,
1368 .i64_type => return .i64,
1369 .u80_type, .u128_type => return .u128,
1370 .i128_type => return .i128,
1371 .usize_type => return .usize,
1372 .isize_type => return .isize,
13731373 .c_char_type => return .{ .index = .char },
13741374 .c_short_type => return .{ .index = .short },
13751375 .c_ushort_type => return .{ .index = .@"unsigned short" },
......@@ -1380,12 +1380,12 @@ pub const Pool = struct {
13801380 .c_longlong_type => return .{ .index = .@"long long" },
13811381 .c_ulonglong_type => return .{ .index = .@"unsigned long long" },
13821382 .c_longdouble_type => return .{ .index = .@"long double" },
1383 .f16_type => return CType.f16,
1384 .f32_type => return CType.f32,
1385 .f64_type => return CType.f64,
1386 .f80_type => return CType.f80,
1387 .f128_type => return CType.f128,
1388 .bool_type, .optional_noreturn_type => return CType.bool,
1383 .f16_type => return .f16,
1384 .f32_type => return .f32,
1385 .f64_type => return .f64,
1386 .f80_type => return .f80,
1387 .f128_type => return .f128,
1388 .bool_type, .optional_noreturn_type => return .bool,
13891389 .noreturn_type,
13901390 .anyframe_type,
13911391 .generic_poison_type,
......@@ -1397,19 +1397,20 @@ pub const Pool = struct {
13971397 .signedness = .unsigned,
13981398 .bits = pt.zcu.errorSetBits(),
13991399 }, mod, kind),
1400
14001401 .manyptr_u8_type,
14011402 => return pool.getPointer(allocator, .{
1402 .elem_ctype = CType.u8,
1403 .elem_ctype = .u8,
14031404 }),
14041405 .manyptr_const_u8_type,
14051406 .manyptr_const_u8_sentinel_0_type,
14061407 => return pool.getPointer(allocator, .{
1407 .elem_ctype = CType.u8,
1408 .elem_ctype = .u8,
14081409 .@"const" = true,
14091410 }),
14101411 .single_const_pointer_to_comptime_int_type,
14111412 => return pool.getPointer(allocator, .{
1412 .elem_ctype = CType.void,
1413 .elem_ctype = .void,
14131414 .@"const" = true,
14141415 }),
14151416 .slice_const_u8_type,
......@@ -1420,14 +1421,14 @@ pub const Pool = struct {
14201421 .{
14211422 .name = .{ .index = .ptr },
14221423 .ctype = try pool.getPointer(allocator, .{
1423 .elem_ctype = CType.u8,
1424 .elem_ctype = .u8,
14241425 .@"const" = true,
14251426 }),
14261427 .alignas = AlignAs.fromAbiAlignment(Type.ptrAbiAlignment(target.*)),
14271428 },
14281429 .{
14291430 .name = .{ .index = .len },
1430 .ctype = CType.usize,
1431 .ctype = .usize,
14311432 .alignas = AlignAs.fromAbiAlignment(
14321433 Type.intAbiAlignment(target.ptrBitWidth(), target.*),
14331434 ),
......@@ -1436,6 +1437,97 @@ pub const Pool = struct {
14361437 return pool.fromFields(allocator, .@"struct", &fields, kind);
14371438 },
14381439
1440 .vector_4_f16_type => {
1441 const vector_ctype = try pool.getVector(allocator, .{
1442 .elem_ctype = .f16,
1443 .len = 4,
1444 });
1445 if (!kind.isParameter()) return vector_ctype;
1446 var fields = [_]Info.Field{
1447 .{
1448 .name = .{ .index = .array },
1449 .ctype = vector_ctype,
1450 .alignas = AlignAs.fromAbiAlignment(Type.f16.abiAlignment(zcu)),
1451 },
1452 };
1453 return pool.fromFields(allocator, .@"struct", &fields, kind);
1454 },
1455 .vector_8_f16_type => {
1456 const vector_ctype = try pool.getVector(allocator, .{
1457 .elem_ctype = .f16,
1458 .len = 8,
1459 });
1460 if (!kind.isParameter()) return vector_ctype;
1461 var fields = [_]Info.Field{
1462 .{
1463 .name = .{ .index = .array },
1464 .ctype = vector_ctype,
1465 .alignas = AlignAs.fromAbiAlignment(Type.f16.abiAlignment(zcu)),
1466 },
1467 };
1468 return pool.fromFields(allocator, .@"struct", &fields, kind);
1469 },
1470 .vector_4_f32_type => {
1471 const vector_ctype = try pool.getVector(allocator, .{
1472 .elem_ctype = .f32,
1473 .len = 4,
1474 });
1475 if (!kind.isParameter()) return vector_ctype;
1476 var fields = [_]Info.Field{
1477 .{
1478 .name = .{ .index = .array },
1479 .ctype = vector_ctype,
1480 .alignas = AlignAs.fromAbiAlignment(Type.f32.abiAlignment(zcu)),
1481 },
1482 };
1483 return pool.fromFields(allocator, .@"struct", &fields, kind);
1484 },
1485 .vector_8_f32_type => {
1486 const vector_ctype = try pool.getVector(allocator, .{
1487 .elem_ctype = .f32,
1488 .len = 8,
1489 });
1490 if (!kind.isParameter()) return vector_ctype;
1491 var fields = [_]Info.Field{
1492 .{
1493 .name = .{ .index = .array },
1494 .ctype = vector_ctype,
1495 .alignas = AlignAs.fromAbiAlignment(Type.f32.abiAlignment(zcu)),
1496 },
1497 };
1498 return pool.fromFields(allocator, .@"struct", &fields, kind);
1499 },
1500 .vector_2_f64_type => {
1501 const vector_ctype = try pool.getVector(allocator, .{
1502 .elem_ctype = .f64,
1503 .len = 2,
1504 });
1505 if (!kind.isParameter()) return vector_ctype;
1506 var fields = [_]Info.Field{
1507 .{
1508 .name = .{ .index = .array },
1509 .ctype = vector_ctype,
1510 .alignas = AlignAs.fromAbiAlignment(Type.f64.abiAlignment(zcu)),
1511 },
1512 };
1513 return pool.fromFields(allocator, .@"struct", &fields, kind);
1514 },
1515 .vector_4_f64_type => {
1516 const vector_ctype = try pool.getVector(allocator, .{
1517 .elem_ctype = .f64,
1518 .len = 4,
1519 });
1520 if (!kind.isParameter()) return vector_ctype;
1521 var fields = [_]Info.Field{
1522 .{
1523 .name = .{ .index = .array },
1524 .ctype = vector_ctype,
1525 .alignas = AlignAs.fromAbiAlignment(Type.f64.abiAlignment(zcu)),
1526 },
1527 };
1528 return pool.fromFields(allocator, .@"struct", &fields, kind);
1529 },
1530
14391531 .undef,
14401532 .zero,
14411533 .zero_usize,
......@@ -1521,7 +1613,7 @@ pub const Pool = struct {
15211613 },
15221614 .{
15231615 .name = .{ .index = .len },
1524 .ctype = CType.usize,
1616 .ctype = .usize,
15251617 .alignas = AlignAs.fromAbiAlignment(
15261618 Type.intAbiAlignment(target.ptrBitWidth(), target.*),
15271619 ),
......@@ -1532,7 +1624,7 @@ pub const Pool = struct {
15321624 },
15331625 .array_type => |array_info| {
15341626 const len = array_info.lenIncludingSentinel();
1535 if (len == 0) return CType.void;
1627 if (len == 0) return .void;
15361628 const elem_type = Type.fromInterned(array_info.child);
15371629 const elem_ctype = try pool.fromType(
15381630 allocator,
......@@ -1542,7 +1634,7 @@ pub const Pool = struct {
15421634 mod,
15431635 kind.noParameter(),
15441636 );
1545 if (elem_ctype.index == .void) return CType.void;
1637 if (elem_ctype.index == .void) return .void;
15461638 const array_ctype = try pool.getArray(allocator, .{
15471639 .elem_ctype = elem_ctype,
15481640 .len = len,
......@@ -1558,7 +1650,7 @@ pub const Pool = struct {
15581650 return pool.fromFields(allocator, .@"struct", &fields, kind);
15591651 },
15601652 .vector_type => |vector_info| {
1561 if (vector_info.len == 0) return CType.void;
1653 if (vector_info.len == 0) return .void;
15621654 const elem_type = Type.fromInterned(vector_info.child);
15631655 const elem_ctype = try pool.fromType(
15641656 allocator,
......@@ -1568,7 +1660,7 @@ pub const Pool = struct {
15681660 mod,
15691661 kind.noParameter(),
15701662 );
1571 if (elem_ctype.index == .void) return CType.void;
1663 if (elem_ctype.index == .void) return .void;
15721664 const vector_ctype = try pool.getVector(allocator, .{
15731665 .elem_ctype = elem_ctype,
15741666 .len = vector_info.len,
......@@ -1584,7 +1676,7 @@ pub const Pool = struct {
15841676 return pool.fromFields(allocator, .@"struct", &fields, kind);
15851677 },
15861678 .opt_type => |payload_type| {
1587 if (ip.isNoReturn(payload_type)) return CType.void;
1679 if (ip.isNoReturn(payload_type)) return .void;
15881680 const payload_ctype = try pool.fromType(
15891681 allocator,
15901682 scratch,
......@@ -1593,7 +1685,7 @@ pub const Pool = struct {
15931685 mod,
15941686 kind.noParameter(),
15951687 );
1596 if (payload_ctype.index == .void) return CType.bool;
1688 if (payload_ctype.index == .void) return .bool;
15971689 switch (payload_type) {
15981690 .anyerror_type => return payload_ctype,
15991691 else => switch (ip.indexToKey(payload_type)) {
......@@ -1606,7 +1698,7 @@ pub const Pool = struct {
16061698 var fields = [_]Info.Field{
16071699 .{
16081700 .name = .{ .index = .is_null },
1609 .ctype = CType.bool,
1701 .ctype = .bool,
16101702 .alignas = AlignAs.fromAbiAlignment(.@"1"),
16111703 },
16121704 .{
......@@ -1666,7 +1758,7 @@ pub const Pool = struct {
16661758 if (kind.isForward()) return if (ty.hasRuntimeBitsIgnoreComptime(zcu))
16671759 fwd_decl
16681760 else
1669 CType.void;
1761 .void;
16701762 const scratch_top = scratch.items.len;
16711763 defer scratch.shrinkRetainingCapacity(scratch_top);
16721764 try scratch.ensureUnusedCapacity(
......@@ -1710,7 +1802,7 @@ pub const Pool = struct {
17101802 scratch.items.len - scratch_top,
17111803 @typeInfo(Field).@"struct".fields.len,
17121804 ));
1713 if (fields_len == 0) return CType.void;
1805 if (fields_len == 0) return .void;
17141806 try pool.ensureUnusedCapacity(allocator, 1);
17151807 const extra_index = try pool.addHashedExtra(allocator, &hasher, Aggregate, .{
17161808 .fwd_decl = fwd_decl.index,
......@@ -1762,7 +1854,7 @@ pub const Pool = struct {
17621854 scratch.items.len - scratch_top,
17631855 @typeInfo(Field).@"struct".fields.len,
17641856 ));
1765 if (fields_len == 0) return CType.void;
1857 if (fields_len == 0) return .void;
17661858 if (kind.isForward()) {
17671859 try pool.ensureUnusedCapacity(allocator, 1);
17681860 const extra_index = try pool.addHashedExtra(
......@@ -1801,7 +1893,7 @@ pub const Pool = struct {
18011893 if (kind.isForward()) return if (ty.hasRuntimeBitsIgnoreComptime(zcu))
18021894 fwd_decl
18031895 else
1804 CType.void;
1896 .void;
18051897 const loaded_tag = loaded_union.loadTagType(ip);
18061898 const scratch_top = scratch.items.len;
18071899 defer scratch.shrinkRetainingCapacity(scratch_top);
......@@ -1848,7 +1940,7 @@ pub const Pool = struct {
18481940 @typeInfo(Field).@"struct".fields.len,
18491941 ));
18501942 if (!has_tag) {
1851 if (fields_len == 0) return CType.void;
1943 if (fields_len == 0) return .void;
18521944 try pool.ensureUnusedCapacity(allocator, 1);
18531945 const extra_index = try pool.addHashedExtra(
18541946 allocator,
......@@ -1915,7 +2007,7 @@ pub const Pool = struct {
19152007 struct_fields_len += 1;
19162008 }
19172009 }
1918 if (struct_fields_len == 0) return CType.void;
2010 if (struct_fields_len == 0) return .void;
19192011 sortFields(struct_fields[0..struct_fields_len]);
19202012 return pool.getAggregate(allocator, .{
19212013 .tag = .@"struct",
......@@ -1929,7 +2021,7 @@ pub const Pool = struct {
19292021 }, mod, kind),
19302022 }
19312023 },
1932 .opaque_type => return CType.void,
2024 .opaque_type => return .void,
19332025 .enum_type => return pool.fromType(
19342026 allocator,
19352027 scratch,
......@@ -1938,7 +2030,7 @@ pub const Pool = struct {
19382030 mod,
19392031 kind,
19402032 ),
1941 .func_type => |func_info| if (func_info.is_generic) return CType.void else {
2033 .func_type => |func_info| if (func_info.is_generic) return .void else {
19422034 const scratch_top = scratch.items.len;
19432035 defer scratch.shrinkRetainingCapacity(scratch_top);
19442036 try scratch.ensureUnusedCapacity(allocator, func_info.param_types.len);
......@@ -1952,7 +2044,7 @@ pub const Pool = struct {
19522044 pt,
19532045 mod,
19542046 kind.asParameter(),
1955 ) else CType.void;
2047 ) else .void;
19562048 for (0..func_info.param_types.len) |param_index| {
19572049 const param_type = Type.fromInterned(
19582050 func_info.param_types.get(ip)[param_index],
......@@ -2033,7 +2125,7 @@ pub const Pool = struct {
20332125 pub fn eql(map_adapter: @This(), _: CType, _: void, pool_index: usize) bool {
20342126 return map_adapter.source_info.eqlAdapted(
20352127 map_adapter.source_pool,
2036 CType.fromPoolIndex(pool_index),
2128 .fromPoolIndex(pool_index),
20372129 map_adapter.pool,
20382130 map_adapter.pool_adapter,
20392131 );
......@@ -2047,7 +2139,7 @@ pub const Pool = struct {
20472139 .pool_adapter = pool_adapter,
20482140 });
20492141 errdefer _ = pool.map.pop();
2050 const ctype = CType.fromPoolIndex(gop.index);
2142 const ctype: CType = .fromPoolIndex(gop.index);
20512143 if (!gop.found_existing) switch (source_info) {
20522144 .basic => unreachable,
20532145 .pointer => |pointer_info| pool.items.appendAssumeCapacity(.{
......@@ -2232,7 +2324,7 @@ pub const Pool = struct {
22322324 CTypeAdapter{ .pool = pool },
22332325 );
22342326 if (!gop.found_existing) pool.items.appendAssumeCapacity(.{ .tag = tag, .data = data });
2235 return CType.fromPoolIndex(gop.index);
2327 return .fromPoolIndex(gop.index);
22362328 }
22372329
22382330 fn tagExtra(
......@@ -2290,7 +2382,7 @@ pub const Pool = struct {
22902382 pool.extra.shrinkRetainingCapacity(extra_index)
22912383 else
22922384 pool.items.appendAssumeCapacity(.{ .tag = tag, .data = extra_index });
2293 return CType.fromPoolIndex(gop.index);
2385 return .fromPoolIndex(gop.index);
22942386 }
22952387
22962388 fn sortFields(fields: []Info.Field) void {
test/behavior/abs.zig+1-1
......@@ -335,12 +335,12 @@ fn testAbsUnsignedIntVectors(comptime len: comptime_int) !void {
335335
336336test "@abs float vectors" {
337337 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
338 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
339338 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
340339 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
341340 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
342341 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
343342 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
343 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
344344
345345 // https://github.com/ziglang/zig/issues/12827
346346 if (builtin.zig_backend == .stage2_llvm and
test/behavior/x86_64/build.zig+1
......@@ -32,6 +32,7 @@ pub fn build(b: *std.Build) void {
3232 .cpu_features_sub = std.Target.x86.featureSet(&.{
3333 .cmov,
3434 //.sse,
35 .sse2,
3536 }),
3637 },
3738 //.{
test/behavior/x86_64/math.zig+154-10
......@@ -22,16 +22,20 @@ inline fn sign(rhs: anytype) switch (@typeInfo(@TypeOf(rhs))) {
2222 .vector => |vector| @Vector(vector.len, bool),
2323} {
2424 switch (@typeInfo(@TypeOf(rhs))) {
25 else => return @as(@Type(.{ .int = .{
26 .signedness = .signed,
27 .bits = @bitSizeOf(@TypeOf(rhs)),
28 } }), @bitCast(rhs)) < 0,
25 else => {
26 const I = @Type(.{ .int = .{
27 .signedness = .unsigned,
28 .bits = @bitSizeOf(@TypeOf(rhs)),
29 } });
30 return @as(I, @bitCast(rhs)) & @as(I, 1) << (@bitSizeOf(I) - 1) != 0;
31 },
2932 .vector => |vector| {
30 const V = @Vector(vector.len, @Type(.{ .int = .{
31 .signedness = .signed,
33 const I = @Type(.{ .int = .{
34 .signedness = .unsigned,
3235 .bits = @bitSizeOf(vector.child),
33 } }));
34 return @as(V, @bitCast(rhs)) < @as(V, @splat(0));
36 } });
37 const V = @Vector(vector.len, I);
38 return @as(V, @bitCast(rhs)) & @as(V, @splat(@as(I, 1) << (@bitSizeOf(I) - 1))) != @as(V, @splat(0));
3539 },
3640 }
3741}
......@@ -40,7 +44,7 @@ inline fn boolAnd(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
4044 .bool => return lhs and rhs,
4145 .vector => |vector| switch (vector.child) {
4246 bool => {
43 const Bits = @Vector(vector.len, u1);
47 const Bits = @Type(.{ .int = .{ .signedness = .unsigned, .bits = vector.len } });
4448 const lhs_bits: Bits = @bitCast(lhs);
4549 const rhs_bits: Bits = @bitCast(rhs);
4650 return @bitCast(lhs_bits & rhs_bits);
......@@ -56,7 +60,7 @@ inline fn boolOr(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
5660 .bool => return lhs or rhs,
5761 .vector => |vector| switch (vector.child) {
5862 bool => {
59 const Bits = @Vector(vector.len, u1);
63 const Bits = @Type(.{ .int = .{ .signedness = .unsigned, .bits = vector.len } });
6064 const lhs_bits: Bits = @bitCast(lhs);
6165 const rhs_bits: Bits = @bitCast(rhs);
6266 return @bitCast(lhs_bits | rhs_bits);
......@@ -1179,6 +1183,145 @@ fn Unary(comptime op: anytype) type {
11791183 try testArgs(@Vector(3, i1025), .{ -1 << 1024, -1, 0 });
11801184 try testArgs(@Vector(3, u1025), .{ 0, 1, 1 << 1024 });
11811185 }
1186 fn testFloatVectorTypes() !void {
1187 try testArgs(@Vector(1, f16), .{
1188 -0x1.17cp-12,
1189 });
1190 try testArgs(@Vector(2, f16), .{
1191 0x1.47cp9, 0x1.3acp9,
1192 });
1193 try testArgs(@Vector(4, f16), .{
1194 0x1.ab4p0, -0x1.7fcp-7, -0x1.1cp0, -0x1.f14p12,
1195 });
1196 try testArgs(@Vector(8, f16), .{
1197 -0x1.8d8p8, 0x1.83p10, -0x1.5ap-1, -0x1.d78p13, -0x1.608p12, 0x1.e8p-9, -0x1.688p-10, -0x1.738p9,
1198 });
1199 try testArgs(@Vector(16, f16), .{
1200 0x1.da8p-1, -0x1.ed4p-10, -0x1.dc8p1, 0x1.b78p-14, nan(f16), 0x1.9d8p8, nan(f16), 0x1.d5p13,
1201 -0x1.2dp13, 0x1.6c4p12, 0x1.a9cp-11, -0x1.0ecp8, 0x0.4ccp-14, -0x1.0a8p-6, -0x1.5bcp-14, 0x1.6d8p-9,
1202 });
1203 try testArgs(@Vector(32, f16), .{
1204 0x1.d5cp-6, -0x1.a98p5, 0x1.49cp5, -0x1.e4p-1, -0x1.21p-13, -0x1.c94p-1, -0x1.adcp-5, -0x1.524p-1,
1205 -0x1.0d8p-3, -0x1.5c4p-2, 0x1.f84p-2, 0x1.664p1, -0x1.f64p13, -0x1.bf4p4, -0x1.4b8p0, -0x0.f64p-14,
1206 -0x1.3f8p1, 0x1.098p2, -0x1.a44p8, 0x1.048p13, 0x1.fd4p-11, 0x1.18p-9, -0x1.504p2, 0x1.d04p7,
1207 -nan(f16), 0x1.a94p2, 0x0.5e8p-14, -0x1.7acp-7, 0x1.4c8p-3, 0x1.518p-4, nan(f16), 0x1.8f8p10,
1208 });
1209 try testArgs(@Vector(64, f16), .{
1210 -0x1.c2p2, 0x0.2fcp-14, 0x1.de8p0, -0x1.714p2, 0x1.f9p-7, -0x1.11cp-13, -0x1.558p10, -0x1.2acp-7,
1211 0x1.348p14, 0x1.2dcp7, -0x1.8acp-12, -0x1.2cp2, 0x1.868p1, -0x1.1f8p-14, 0x1.638p7, -0x1.734p-5,
1212 0x0.b98p-14, -0x1.7f4p-12, -0x1.38cp15, 0x1.50cp15, 0x1.91cp8, 0x1.cb4p-1, 0x1.fc4p-13, 0x1.9a4p0,
1213 0x1.18p-4, 0x1.60cp10, 0x1.6fp-12, 0x1.b48p6, 0x1.37cp-11, 0x1.424p7, 0x1.44cp13, 0x1.aep5,
1214 0x1.968p14, 0x1.e8p13, -0x1.bp2, -0x1.644p5, 0x1.de4p-8, -0x1.5b4p-14, -0x1.4ap1, -0x1.868p9,
1215 -0x1.d14p0, 0x1.d7cp15, 0x1.3c8p14, 0x1.2ccp-14, -0x1.ee4p8, 0x1.49p-3, 0x1.35cp12, 0x1.d34p6,
1216 0x1.7acp3, -0x1.fa4p2, 0x1.7b4p13, -0x1.cf4p-12, -0x1.ebcp-10, -0x1.5p-3, 0x1.4bp-6, 0x1.83p12,
1217 -0x1.f9cp-8, -0x1.43p-8, -0x1.99p-1, -0x1.dacp3, -0x1.728p-4, -0x1.03cp4, 0x1.604p-2, -0x1.0ep13,
1218 });
1219
1220 try testArgs(@Vector(1, f32), .{
1221 -0x1.17cp-12,
1222 });
1223 try testArgs(@Vector(2, f32), .{
1224 -0x1.a3123ap90, -0x1.4a2ec6p-54,
1225 });
1226 try testArgs(@Vector(4, f32), .{
1227 -0x1.8a41p77, -0x1.7c54e2p-61, -0x1.498556p-41, 0x1.d77c22p-20,
1228 });
1229 try testArgs(@Vector(8, f32), .{
1230 0x1.943da4p-86, 0x1.528792p95, -0x1.9c9bfap-26, -0x1.8df936p-90,
1231 -0x1.6a70cep56, 0x1.626638p-48, 0x1.7bb2bap-57, -0x1.ac5104p94,
1232 });
1233 try testArgs(@Vector(16, f32), .{
1234 0x1.157044p115, -0x1.416c04p-111, 0x1.a8f164p-104, 0x1.9b6678p84,
1235 -0x1.9d065cp9, -0x1.e8c4b4p126, -0x1.ddb968p84, -0x1.fec8c8p74,
1236 0x1.64ffb2p59, 0x1.548922p20, 0x1.7270fcp22, -0x1.abac68p33,
1237 0x1.faabfp33, -0x1.8aee82p55, 0x1.1bf8fp75, 0x1.33c46ap-66,
1238 });
1239 try testArgs(@Vector(32, f32), .{
1240 -0x1.039b68p37, -0x1.34de4ap-74, -0x1.05d78ap-76, -0x1.be0f5ap-47,
1241 0x1.032204p-38, 0x1.ef8e2ap-78, -0x1.b013ecp-80, 0x1.71fe4cp99,
1242 0x1.abdadap-14, 0x1.56a9a8p-48, -0x1.8bbd7ep9, 0x1.edd308p-72,
1243 -0x1.92fafcp-121, -0x1.50812p19, 0x1.f4ddc4p28, -0x1.6f0b12p-50,
1244 -0x1.12ab02p127, 0x1.24df48p21, -0x1.993c3p-14, -0x1.4cc476p-112,
1245 0x1.13d9a8p-40, 0x1.a6e652p-9, -0x1.9c730cp-21, -0x1.a75aaap-70,
1246 -0x1.39e632p-111, 0x1.8e8da8p-45, 0x1.b5652cp31, 0x1.258366p44,
1247 0x1.d473aap92, -0x1.951b64p9, 0x1.542edp15, -0x0.f6222ap-126,
1248 });
1249
1250 try testArgs(@Vector(1, f64), .{
1251 -0x1.0114613df6f97p816,
1252 });
1253 try testArgs(@Vector(2, f64), .{
1254 -0x1.8404dad72003cp720, -0x1.6b14b40bcf3b7p-176,
1255 });
1256 try testArgs(@Vector(4, f64), .{
1257 -0x1.04e1acbfddd9cp681, -0x1.ed553cc056da7p-749,
1258 0x1.3d3f703a0c893p-905, 0x1.0b35633fa78fp691,
1259 });
1260 try testArgs(@Vector(8, f64), .{
1261 -0x1.901a2a60f0562p-301, -0x1.2516175ad61ecp-447,
1262 0x1.e7b12124846bfp564, 0x1.9291384bd7259p209,
1263 -0x1.a7bf62f803c98p900, 0x1.4e2e26257bb3p987,
1264 -0x1.413ca9a32d894p811, 0x1.61b1dd9432e95p479,
1265 });
1266 try testArgs(@Vector(16, f64), .{
1267 -0x1.8fc7286d95f54p-235, -0x1.796a7ea8372b6p-837,
1268 -0x1.8c0f930539acbp-98, -0x1.ec80dfbf0b931p-430,
1269 -0x1.e3d80c640652fp-1019, 0x1.8241238fb542fp161,
1270 -0x1.e1f1a79d50263p137, -0x1.9ac5cb2771c28p-791,
1271 0x1.4d8f00fe881e7p-401, -0x1.87fbd7bfd99d7p346,
1272 -0x1.a8a7cc575335ep1017, 0x1.37bb88dc3fd8bp-355,
1273 0x1.9d53d346c0e65p929, -0x1.bbae3d0229c34p289,
1274 -0x1.cb8ef994d5ce5p25, 0x1.ba20af512616ap50,
1275 });
1276
1277 try testArgs(@Vector(1, f80), .{
1278 -0x1.a2e9410a7dfedabp-2324,
1279 });
1280 try testArgs(@Vector(2, f80), .{
1281 -0x1.a2e9410a7dfedabp-2324,
1282 0x1.2b17da3b9746885p-8665,
1283 });
1284 try testArgs(@Vector(4, f80), .{
1285 -0x1.c488fedb7ab646cep-13007,
1286 0x1.e914deaccaa50016p2073,
1287 -0x1.d1c7ae8ec3c9df86p10642,
1288 -0x1.2da1658f337fa01p9893,
1289 });
1290 try testArgs(@Vector(8, f80), .{
1291 -0x1.bed8a74c43750656p890,
1292 -0x1.7bf57f38004ac976p8481,
1293 -0x1.9cdc10ac0657d328p7884,
1294 0x1.c86f61883da149fp12293,
1295 -0x1.528d6957df6bfdd8p14125,
1296 -0x1.5ebb4006d0243bfep14530,
1297 -0x1.94b9b18636d12402p-1845,
1298 -0x1.25439a6d68add188p5962,
1299 });
1300
1301 try testArgs(@Vector(1, f128), .{
1302 -0x1.d1e6fc3b1e66632e7b79051a47dap14300,
1303 });
1304 try testArgs(@Vector(2, f128), .{
1305 0x1.84b3ac8ffe5893b2c6af8d68de9dp-83,
1306 -0x1.438ca2c8a0d8e3ee9062d351c46ep-10235,
1307 });
1308 try testArgs(@Vector(4, f128), .{
1309 0x1.04eb03882d4fd1b090e714d3e5ep806,
1310 -0x1.4082b29f7c26e701764c915642ffp-6182,
1311 -0x1.b6f1e8565e5040415110f18b519ap13383,
1312 0x1.1c29f8c162cead9061c5797ea15ap11957,
1313 });
1314 try testArgs(@Vector(8, f128), .{
1315 -0x1.53d7f00cd204d80e5ff5bb665773p11218,
1316 -0x1.4daa1c81cffe28e8fa5cd703c287p2362,
1317 -0x1.cc6a71c3ad4560871efdbd025cd7p-8116,
1318 -0x1.87f8553cf8772fb6b78e7df3e3bap14523,
1319 -0x1.14b6880f6678f86dfb543dde1c6ep2105,
1320 0x1.9d2d4398414da9d857e76e8fd7ccp-13668,
1321 0x1.a37f07af240ded458d103c022064p-1158,
1322 0x1.425d53e6bd6070b847e5da1ed593p1394,
1323 });
1324 }
11821325 };
11831326}
11841327
......@@ -1601,6 +1744,7 @@ test abs {
16011744 try Unary(abs).testIntTypes();
16021745 try Unary(abs).testIntVectorTypes();
16031746 try Unary(abs).testFloatTypes();
1747 try Unary(abs).testFloatVectorTypes();
16041748}
16051749
16061750inline fn clz(comptime Type: type, rhs: Type) @TypeOf(@clz(rhs)) {
test/src/Debugger.zig+119-110
......@@ -526,8 +526,9 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
526526 \\ var null_u32: ?u32 = null;
527527 \\ var maybe_u32: ?u32 = null;
528528 \\ var nonnull_u32: ?u32 = 456;
529 \\ null_u32 = null_u32;
529530 \\ maybe_u32 = 123;
530 \\ _ = .{ &null_u32, &nonnull_u32 };
531 \\ nonnull_u32 = nonnull_u32;
531532 \\ }
532533 \\}
533534 \\
......@@ -539,7 +540,7 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
539540 \\frame variable -- null_u32 maybe_u32 nonnull_u32
540541 \\breakpoint delete --force 1
541542 \\
542 \\breakpoint set --file optionals.zig --source-pattern-regexp '_ = \.{ &null_u32, &nonnull_u32 };'
543 \\breakpoint set --file optionals.zig --source-pattern-regexp 'nonnull_u32 = nonnull_u32;'
543544 \\process continue
544545 \\frame variable --show-types -- null_u32 maybe_u32 nonnull_u32
545546 \\breakpoint delete --force 2
......@@ -1285,10 +1286,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
12851286 \\ mod1.m1cfi(r0pai ^ 8);
12861287 \\}
12871288 \\pub fn r0cf(r0ca: u32) void {
1288 \\ _ = r0ca;
1289 \\ var discard = r0ca;
1290 \\ _ = &discard;
12891291 \\}
12901292 \\pub inline fn r0cfi(r0cai: u32) void {
1291 \\ _ = r0cai;
1293 \\ var discard = r0cai;
1294 \\ _ = &discard;
12921295 \\}
12931296 \\pub fn main() void {
12941297 \\ root0.r0pf(12);
......@@ -1331,10 +1334,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
13311334 \\ mod1.m1cfi(r1pai ^ 8);
13321335 \\}
13331336 \\pub fn r1cf(r1ca: u32) void {
1334 \\ _ = r1ca;
1337 \\ var discard = r1ca;
1338 \\ _ = &discard;
13351339 \\}
13361340 \\pub inline fn r1cfi(r1cai: u32) void {
1337 \\ _ = r1cai;
1341 \\ var discard = r1cai;
1342 \\ _ = &discard;
13381343 \\}
13391344 \\
13401345 ,
......@@ -1368,10 +1373,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
13681373 \\ mod1.m1cfi(m0pai ^ 8);
13691374 \\}
13701375 \\pub fn m0cf(m0ca: u32) void {
1371 \\ _ = m0ca;
1376 \\ var discard = m0ca;
1377 \\ _ = &discard;
13721378 \\}
13731379 \\pub inline fn m0cfi(m0cai: u32) void {
1374 \\ _ = m0cai;
1380 \\ var discard = m0cai;
1381 \\ _ = &discard;
13751382 \\}
13761383 \\
13771384 ,
......@@ -1404,10 +1411,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
14041411 \\ mod1.m1cfi(m1pai ^ 8);
14051412 \\}
14061413 \\pub fn m1cf(m1ca: u32) void {
1407 \\ _ = m1ca;
1414 \\ var discard = m1ca;
1415 \\ _ = &discard;
14081416 \\}
14091417 \\pub inline fn m1cfi(m1cai: u32) void {
1410 \\ _ = m1cai;
1418 \\ var discard = m1cai;
1419 \\ _ = &discard;
14111420 \\}
14121421 \\
14131422 ,
......@@ -1416,13 +1425,13 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
14161425 \\settings set frame-format 'frame #${frame.index}:{ ${module.file.basename}{\`${function.name-with-args}{${frame.no-debug}${function.pc-offset}}}}{ at ${line.file.basename}:${line.number}{:${line.column}}}{${function.is-optimized} [opt]}{${frame.is-artificial} [artificial]}\n'
14171426 \\
14181427 \\breakpoint set --file root0.zig --line 26
1419 \\breakpoint set --file root0.zig --line 29
1428 \\breakpoint set --file root0.zig --line 30
14201429 \\breakpoint set --file root1.zig --line 26
1421 \\breakpoint set --file root1.zig --line 29
1430 \\breakpoint set --file root1.zig --line 30
14221431 \\breakpoint set --file mod0.zig --line 26
1423 \\breakpoint set --file mod0.zig --line 29
1432 \\breakpoint set --file mod0.zig --line 30
14241433 \\breakpoint set --file mod1.zig --line 26
1425 \\breakpoint set --file mod1.zig --line 29
1434 \\breakpoint set --file mod1.zig --line 30
14261435 \\
14271436 \\process launch
14281437 \\thread backtrace --count 3
......@@ -1563,259 +1572,259 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
15631572 &.{
15641573 \\ * frame #0: inline_call`root0.r0cf(r0ca=13) at root0.zig:26:5
15651574 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:6:15
1566 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1575 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15671576 ,
1568 \\ * frame #0: inline_call`root0.r0pf [inlined] r0cfi(r0cai=14) at root0.zig:29:5
1577 \\ * frame #0: inline_call`root0.r0pf [inlined] r0cfi(r0cai=14) at root0.zig:30:5
15691578 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:7:16
1570 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1579 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15711580 ,
15721581 \\ * frame #0: inline_call`root1.r1cf(r1ca=15) at root1.zig:26:5
15731582 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:8:15
1574 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1583 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15751584 ,
1576 \\ * frame #0: inline_call`root0.r0pf [inlined] r1cfi(r1cai=8) at root1.zig:29:5
1585 \\ * frame #0: inline_call`root0.r0pf [inlined] r1cfi(r1cai=8) at root1.zig:30:5
15771586 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:9:16
1578 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1587 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15791588 ,
15801589 \\ * frame #0: inline_call`mod0.m0cf(m0ca=9) at mod0.zig:26:5
15811590 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:10:14
1582 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1591 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15831592 ,
1584 \\ * frame #0: inline_call`root0.r0pf [inlined] m0cfi(m0cai=10) at mod0.zig:29:5
1593 \\ * frame #0: inline_call`root0.r0pf [inlined] m0cfi(m0cai=10) at mod0.zig:30:5
15851594 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:11:15
1586 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1595 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15871596 ,
15881597 \\ * frame #0: inline_call`mod1.m1cf(m1ca=11) at mod1.zig:26:5
15891598 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:12:14
1590 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1599 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15911600 ,
1592 \\ * frame #0: inline_call`root0.r0pf [inlined] m1cfi(m1cai=4) at mod1.zig:29:5
1601 \\ * frame #0: inline_call`root0.r0pf [inlined] m1cfi(m1cai=4) at mod1.zig:30:5
15931602 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:13:15
1594 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1603 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15951604 ,
15961605 \\ * frame #0: inline_call`root0.r0cf(r0ca=22) at root0.zig:26:5
15971606 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:16:15
1598 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1607 \\ frame #2: inline_call`root0.main at root0.zig:35:16
15991608 ,
1600 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=21) at root0.zig:29:5
1609 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=21) at root0.zig:30:5
16011610 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:17:16
1602 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1611 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16031612 ,
16041613 \\ * frame #0: inline_call`root1.r1cf(r1ca=20) at root1.zig:26:5
16051614 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:18:15
1606 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1615 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16071616 ,
1608 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=19) at root1.zig:29:5
1617 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=19) at root1.zig:30:5
16091618 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:19:16
1610 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1619 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16111620 ,
16121621 \\ * frame #0: inline_call`mod0.m0cf(m0ca=18) at mod0.zig:26:5
16131622 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:20:14
1614 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1623 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16151624 ,
1616 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=17) at mod0.zig:29:5
1625 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=17) at mod0.zig:30:5
16171626 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:21:15
1618 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1627 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16191628 ,
16201629 \\ * frame #0: inline_call`mod1.m1cf(m1ca=16) at mod1.zig:26:5
16211630 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:22:14
1622 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1631 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16231632 ,
1624 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=31) at mod1.zig:29:5
1633 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=31) at mod1.zig:30:5
16251634 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:23:15
1626 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1635 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16271636 ,
16281637 \\ * frame #0: inline_call`root0.r0cf(r0ca=35) at root0.zig:26:5
16291638 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:6:15
1630 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1639 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16311640 ,
1632 \\ * frame #0: inline_call`root1.r1pf [inlined] r0cfi(r0cai=32) at root0.zig:29:5
1641 \\ * frame #0: inline_call`root1.r1pf [inlined] r0cfi(r0cai=32) at root0.zig:30:5
16331642 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:7:16
1634 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1643 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16351644 ,
16361645 \\ * frame #0: inline_call`root1.r1cf(r1ca=33) at root1.zig:26:5
16371646 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:8:15
1638 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1647 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16391648 ,
1640 \\ * frame #0: inline_call`root1.r1pf [inlined] r1cfi(r1cai=38) at root1.zig:29:5
1649 \\ * frame #0: inline_call`root1.r1pf [inlined] r1cfi(r1cai=38) at root1.zig:30:5
16411650 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:9:16
1642 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1651 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16431652 ,
16441653 \\ * frame #0: inline_call`mod0.m0cf(m0ca=39) at mod0.zig:26:5
16451654 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:10:14
1646 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1655 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16471656 ,
1648 \\ * frame #0: inline_call`root1.r1pf [inlined] m0cfi(m0cai=36) at mod0.zig:29:5
1657 \\ * frame #0: inline_call`root1.r1pf [inlined] m0cfi(m0cai=36) at mod0.zig:30:5
16491658 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:11:15
1650 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1659 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16511660 ,
16521661 \\ * frame #0: inline_call`mod1.m1cf(m1ca=37) at mod1.zig:26:5
16531662 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:12:14
1654 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1663 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16551664 ,
1656 \\ * frame #0: inline_call`root1.r1pf [inlined] m1cfi(m1cai=42) at mod1.zig:29:5
1665 \\ * frame #0: inline_call`root1.r1pf [inlined] m1cfi(m1cai=42) at mod1.zig:30:5
16571666 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:13:15
1658 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1667 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16591668 ,
16601669 \\ * frame #0: inline_call`root0.r0cf(r0ca=44) at root0.zig:26:5
16611670 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:16:15
1662 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1671 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16631672 ,
1664 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=47) at root0.zig:29:5
1673 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=47) at root0.zig:30:5
16651674 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:17:16
1666 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1675 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16671676 ,
16681677 \\ * frame #0: inline_call`root1.r1cf(r1ca=46) at root1.zig:26:5
16691678 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:18:15
1670 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1679 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16711680 ,
1672 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=41) at root1.zig:29:5
1681 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=41) at root1.zig:30:5
16731682 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:19:16
1674 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1683 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16751684 ,
16761685 \\ * frame #0: inline_call`mod0.m0cf(m0ca=40) at mod0.zig:26:5
16771686 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:20:14
1678 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1687 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16791688 ,
1680 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=43) at mod0.zig:29:5
1689 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=43) at mod0.zig:30:5
16811690 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:21:15
1682 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1691 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16831692 ,
16841693 \\ * frame #0: inline_call`mod1.m1cf(m1ca=42) at mod1.zig:26:5
16851694 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:22:14
1686 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1695 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16871696 ,
1688 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=37) at mod1.zig:29:5
1697 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=37) at mod1.zig:30:5
16891698 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:23:15
1690 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1699 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16911700 ,
16921701 \\ * frame #0: inline_call`root0.r0cf(r0ca=57) at root0.zig:26:5
16931702 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:6:15
1694 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1703 \\ frame #2: inline_call`root0.main at root0.zig:38:14
16951704 ,
1696 \\ * frame #0: inline_call`mod0.m0pf [inlined] r0cfi(r0cai=58) at root0.zig:29:5
1705 \\ * frame #0: inline_call`mod0.m0pf [inlined] r0cfi(r0cai=58) at root0.zig:30:5
16971706 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:7:16
1698 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1707 \\ frame #2: inline_call`root0.main at root0.zig:38:14
16991708 ,
17001709 \\ * frame #0: inline_call`root1.r1cf(r1ca=59) at root1.zig:26:5
17011710 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:8:15
1702 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1711 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17031712 ,
1704 \\ * frame #0: inline_call`mod0.m0pf [inlined] r1cfi(r1cai=60) at root1.zig:29:5
1713 \\ * frame #0: inline_call`mod0.m0pf [inlined] r1cfi(r1cai=60) at root1.zig:30:5
17051714 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:9:16
1706 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1715 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17071716 ,
17081717 \\ * frame #0: inline_call`mod0.m0cf(m0ca=61) at mod0.zig:26:5
17091718 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:10:14
1710 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1719 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17111720 ,
1712 \\ * frame #0: inline_call`mod0.m0pf [inlined] m0cfi(m0cai=62) at mod0.zig:29:5
1721 \\ * frame #0: inline_call`mod0.m0pf [inlined] m0cfi(m0cai=62) at mod0.zig:30:5
17131722 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:11:15
1714 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1723 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17151724 ,
17161725 \\ * frame #0: inline_call`mod1.m1cf(m1ca=63) at mod1.zig:26:5
17171726 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:12:14
1718 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1727 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17191728 ,
1720 \\ * frame #0: inline_call`mod0.m0pf [inlined] m1cfi(m1cai=48) at mod1.zig:29:5
1729 \\ * frame #0: inline_call`mod0.m0pf [inlined] m1cfi(m1cai=48) at mod1.zig:30:5
17211730 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:13:15
1722 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1731 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17231732 ,
17241733 \\ * frame #0: inline_call`root0.r0cf(r0ca=66) at root0.zig:26:5
17251734 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:16:15
1726 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1735 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17271736 ,
1728 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=65) at root0.zig:29:5
1737 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=65) at root0.zig:30:5
17291738 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:17:16
1730 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1739 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17311740 ,
17321741 \\ * frame #0: inline_call`root1.r1cf(r1ca=64) at root1.zig:26:5
17331742 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:18:15
1734 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1743 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17351744 ,
1736 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=71) at root1.zig:29:5
1745 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=71) at root1.zig:30:5
17371746 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:19:16
1738 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1747 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17391748 ,
17401749 \\ * frame #0: inline_call`mod0.m0cf(m0ca=70) at mod0.zig:26:5
17411750 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:20:14
1742 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1751 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17431752 ,
1744 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=69) at mod0.zig:29:5
1753 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=69) at mod0.zig:30:5
17451754 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:21:15
1746 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1755 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17471756 ,
17481757 \\ * frame #0: inline_call`mod1.m1cf(m1ca=68) at mod1.zig:26:5
17491758 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:22:14
1750 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1759 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17511760 ,
1752 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=75) at mod1.zig:29:5
1761 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=75) at mod1.zig:30:5
17531762 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:23:15
1754 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1763 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17551764 ,
17561765 \\ * frame #0: inline_call`root0.r0cf(r0ca=79) at root0.zig:26:5
17571766 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:6:15
1758 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1767 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17591768 ,
1760 \\ * frame #0: inline_call`mod1.m1pf [inlined] r0cfi(r0cai=76) at root0.zig:29:5
1769 \\ * frame #0: inline_call`mod1.m1pf [inlined] r0cfi(r0cai=76) at root0.zig:30:5
17611770 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:7:16
1762 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1771 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17631772 ,
17641773 \\ * frame #0: inline_call`root1.r1cf(r1ca=77) at root1.zig:26:5
17651774 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:8:15
1766 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1775 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17671776 ,
1768 \\ * frame #0: inline_call`mod1.m1pf [inlined] r1cfi(r1cai=74) at root1.zig:29:5
1777 \\ * frame #0: inline_call`mod1.m1pf [inlined] r1cfi(r1cai=74) at root1.zig:30:5
17691778 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:9:16
1770 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1779 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17711780 ,
17721781 \\ * frame #0: inline_call`mod0.m0cf(m0ca=75) at mod0.zig:26:5
17731782 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:10:14
1774 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1783 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17751784 ,
1776 \\ * frame #0: inline_call`mod1.m1pf [inlined] m0cfi(m0cai=72) at mod0.zig:29:5
1785 \\ * frame #0: inline_call`mod1.m1pf [inlined] m0cfi(m0cai=72) at mod0.zig:30:5
17771786 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:11:15
1778 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1787 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17791788 ,
17801789 \\ * frame #0: inline_call`mod1.m1cf(m1ca=73) at mod1.zig:26:5
17811790 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:12:14
1782 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1791 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17831792 ,
1784 \\ * frame #0: inline_call`mod1.m1pf [inlined] m1cfi(m1cai=70) at mod1.zig:29:5
1793 \\ * frame #0: inline_call`mod1.m1pf [inlined] m1cfi(m1cai=70) at mod1.zig:30:5
17851794 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:13:15
1786 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1795 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17871796 ,
17881797 \\ * frame #0: inline_call`root0.r0cf(r0ca=88) at root0.zig:26:5
17891798 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:16:15
1790 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1799 \\ frame #2: inline_call`root0.main at root0.zig:41:15
17911800 ,
1792 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=91) at root0.zig:29:5
1801 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=91) at root0.zig:30:5
17931802 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:17:16
1794 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1803 \\ frame #2: inline_call`root0.main at root0.zig:41:15
17951804 ,
17961805 \\ * frame #0: inline_call`root1.r1cf(r1ca=90) at root1.zig:26:5
17971806 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:18:15
1798 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1807 \\ frame #2: inline_call`root0.main at root0.zig:41:15
17991808 ,
1800 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=93) at root1.zig:29:5
1809 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=93) at root1.zig:30:5
18011810 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:19:16
1802 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1811 \\ frame #2: inline_call`root0.main at root0.zig:41:15
18031812 ,
18041813 \\ * frame #0: inline_call`mod0.m0cf(m0ca=92) at mod0.zig:26:5
18051814 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:20:14
1806 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1815 \\ frame #2: inline_call`root0.main at root0.zig:41:15
18071816 ,
1808 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=95) at mod0.zig:29:5
1817 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=95) at mod0.zig:30:5
18091818 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:21:15
1810 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1819 \\ frame #2: inline_call`root0.main at root0.zig:41:15
18111820 ,
18121821 \\ * frame #0: inline_call`mod1.m1cf(m1ca=94) at mod1.zig:26:5
18131822 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:22:14
1814 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1823 \\ frame #2: inline_call`root0.main at root0.zig:41:15
18151824 ,
1816 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=81) at mod1.zig:29:5
1825 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=81) at mod1.zig:30:5
18171826 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:23:15
1818 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1827 \\ frame #2: inline_call`root0.main at root0.zig:41:15
18191828 },
18201829 );
18211830 db.addLldbTest(