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 {...@@ -2128,7 +2128,7 @@ pub const Inst = struct {
2128 ref_start_index = static_len,2128 ref_start_index = static_len,
2129 _,2129 _,
21302130
2131 pub const static_len = 70;2131 pub const static_len = 76;
21322132
2133 pub fn toRef(i: Index) Inst.Ref {2133 pub fn toRef(i: Index) Inst.Ref {
2134 return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));2134 return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));
...@@ -2211,6 +2211,12 @@ pub const Inst = struct {...@@ -2211,6 +2211,12 @@ pub const Inst = struct {
2211 single_const_pointer_to_comptime_int_type,2211 single_const_pointer_to_comptime_int_type,
2212 slice_const_u8_type,2212 slice_const_u8_type,
2213 slice_const_u8_sentinel_0_type,2213 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,
2214 optional_noreturn_type,2220 optional_noreturn_type,
2215 anyerror_void_error_union_type,2221 anyerror_void_error_union_type,
2216 adhoc_inferred_error_set_type,2222 adhoc_inferred_error_set_type,
src/Air.zig+6
...@@ -984,6 +984,12 @@ pub const Inst = struct {...@@ -984,6 +984,12 @@ pub const Inst = struct {
984 single_const_pointer_to_comptime_int_type = @intFromEnum(InternPool.Index.single_const_pointer_to_comptime_int_type),984 single_const_pointer_to_comptime_int_type = @intFromEnum(InternPool.Index.single_const_pointer_to_comptime_int_type),
985 slice_const_u8_type = @intFromEnum(InternPool.Index.slice_const_u8_type),985 slice_const_u8_type = @intFromEnum(InternPool.Index.slice_const_u8_type),
986 slice_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.slice_const_u8_sentinel_0_type),986 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),
987 optional_noreturn_type = @intFromEnum(InternPool.Index.optional_noreturn_type),993 optional_noreturn_type = @intFromEnum(InternPool.Index.optional_noreturn_type),
988 anyerror_void_error_union_type = @intFromEnum(InternPool.Index.anyerror_void_error_union_type),994 anyerror_void_error_union_type = @intFromEnum(InternPool.Index.anyerror_void_error_union_type),
989 adhoc_inferred_error_set_type = @intFromEnum(InternPool.Index.adhoc_inferred_error_set_type),995 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) {...@@ -4559,12 +4559,21 @@ pub const Index = enum(u32) {
4559 null_type,4559 null_type,
4560 undefined_type,4560 undefined_type,
4561 enum_literal_type,4561 enum_literal_type,
4562
4562 manyptr_u8_type,4563 manyptr_u8_type,
4563 manyptr_const_u8_type,4564 manyptr_const_u8_type,
4564 manyptr_const_u8_sentinel_0_type,4565 manyptr_const_u8_sentinel_0_type,
4565 single_const_pointer_to_comptime_int_type,4566 single_const_pointer_to_comptime_int_type,
4566 slice_const_u8_type,4567 slice_const_u8_type,
4567 slice_const_u8_sentinel_0_type,4568 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
4568 optional_noreturn_type,4577 optional_noreturn_type,
4569 anyerror_void_error_union_type,4578 anyerror_void_error_union_type,
4570 /// Used for the inferred error set of inline/comptime function calls.4579 /// Used for the inferred error set of inline/comptime function calls.
...@@ -5055,6 +5064,19 @@ pub const static_keys = [_]Key{...@@ -5055,6 +5064,19 @@ pub const static_keys = [_]Key{
5055 },5064 },
5056 } },5065 } },
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
5058 // ?noreturn5080 // ?noreturn
5059 .{ .opt_type = .noreturn_type },5081 .{ .opt_type = .noreturn_type },
50605082
...@@ -11681,6 +11703,12 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {...@@ -11681,6 +11703,12 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
11681 .single_const_pointer_to_comptime_int_type,11703 .single_const_pointer_to_comptime_int_type,
11682 .slice_const_u8_type,11704 .slice_const_u8_type,
11683 .slice_const_u8_sentinel_0_type,11705 .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,
11684 .optional_noreturn_type,11712 .optional_noreturn_type,
11685 .anyerror_void_error_union_type,11713 .anyerror_void_error_union_type,
11686 .adhoc_inferred_error_set_type,11714 .adhoc_inferred_error_set_type,
...@@ -11998,6 +12026,14 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {...@@ -11998,6 +12026,14 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {
11998 .slice_const_u8_sentinel_0_type,12026 .slice_const_u8_sentinel_0_type,
11999 => .pointer,12027 => .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
12001 .optional_noreturn_type => .optional,12037 .optional_noreturn_type => .optional,
12002 .anyerror_void_error_union_type => .error_union,12038 .anyerror_void_error_union_type => .error_union,
12003 .empty_tuple_type => .@"struct",12039 .empty_tuple_type => .@"struct",
src/Sema.zig+6
...@@ -36611,6 +36611,12 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {...@@ -36611,6 +36611,12 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
36611 .single_const_pointer_to_comptime_int_type,36611 .single_const_pointer_to_comptime_int_type,
36612 .slice_const_u8_type,36612 .slice_const_u8_type,
36613 .slice_const_u8_sentinel_0_type,36613 .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,
36614 .anyerror_void_error_union_type,36620 .anyerror_void_error_union_type,
36615 => null,36621 => null,
36616 .void_type => Value.void,36622 .void_type => Value.void,
src/Type.zig+9-1
...@@ -4174,7 +4174,15 @@ pub const single_const_pointer_to_comptime_int: Type = .{...@@ -4174,7 +4174,15 @@ pub const single_const_pointer_to_comptime_int: Type = .{
4174 .ip_index = .single_const_pointer_to_comptime_int_type,4174 .ip_index = .single_const_pointer_to_comptime_int_type,
4175};4175};
4176pub const slice_const_u8_sentinel_0: Type = .{ .ip_index = .slice_const_u8_sentinel_0_type };4176pub 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
4179pub const generic_poison: Type = .{ .ip_index = .generic_poison_type };4187pub 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 {...@@ -2393,7 +2393,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2393}2393}
23942394
2395fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {2395fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2396 @setEvalBranchQuota(1_800);2396 @setEvalBranchQuota(2_700);
2397 const pt = cg.pt;2397 const pt = cg.pt;
2398 const zcu = pt.zcu;2398 const zcu = pt.zcu;
2399 const ip = &zcu.intern_pool;2399 const ip = &zcu.intern_pool;
...@@ -2984,6 +2984,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -2984,6 +2984,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2984 .unused,2984 .unused,
2985 .unused,2985 .unused,
2986 .unused,2986 .unused,
2987 .unused,
2988 .unused,
2989 .unused,
2987 },2990 },
2988 .dst_temps = .{.mem},2991 .dst_temps = .{.mem},
2989 .clobbers = .{ .eflags = true },2992 .clobbers = .{ .eflags = true },
...@@ -3008,6 +3011,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3008,6 +3011,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3008 .unused,3011 .unused,
3009 .unused,3012 .unused,
3010 .unused,3013 .unused,
3014 .unused,
3015 .unused,
3016 .unused,
3011 },3017 },
3012 .dst_temps = .{.mem},3018 .dst_temps = .{.mem},
3013 .clobbers = .{ .eflags = true },3019 .clobbers = .{ .eflags = true },
...@@ -3032,6 +3038,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3032,6 +3038,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3032 .unused,3038 .unused,
3033 .unused,3039 .unused,
3034 .unused,3040 .unused,
3041 .unused,
3042 .unused,
3043 .unused,
3035 },3044 },
3036 .dst_temps = .{.mem},3045 .dst_temps = .{.mem},
3037 .clobbers = .{ .eflags = true },3046 .clobbers = .{ .eflags = true },
...@@ -3056,6 +3065,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3056,6 +3065,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3056 .unused,3065 .unused,
3057 .unused,3066 .unused,
3058 .unused,3067 .unused,
3068 .unused,
3069 .unused,
3070 .unused,
3059 },3071 },
3060 .dst_temps = .{.mem},3072 .dst_temps = .{.mem},
3061 .clobbers = .{ .eflags = true },3073 .clobbers = .{ .eflags = true },
...@@ -3080,6 +3092,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3080,6 +3092,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3080 .unused,3092 .unused,
3081 .unused,3093 .unused,
3082 .unused,3094 .unused,
3095 .unused,
3096 .unused,
3097 .unused,
3083 },3098 },
3084 .dst_temps = .{.mem},3099 .dst_temps = .{.mem},
3085 .clobbers = .{ .eflags = true },3100 .clobbers = .{ .eflags = true },
...@@ -3104,6 +3119,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3104,6 +3119,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3104 .unused,3119 .unused,
3105 .unused,3120 .unused,
3106 .unused,3121 .unused,
3122 .unused,
3123 .unused,
3124 .unused,
3107 },3125 },
3108 .dst_temps = .{.mem},3126 .dst_temps = .{.mem},
3109 .clobbers = .{ .eflags = true },3127 .clobbers = .{ .eflags = true },
...@@ -3127,6 +3145,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3127,6 +3145,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3127 .unused,3145 .unused,
3128 .unused,3146 .unused,
3129 .unused,3147 .unused,
3148 .unused,
3149 .unused,
3150 .unused,
3130 },3151 },
3131 .dst_temps = .{.mem},3152 .dst_temps = .{.mem},
3132 .clobbers = .{ .eflags = true },3153 .clobbers = .{ .eflags = true },
...@@ -3265,6 +3286,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3265,6 +3286,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3265 .unused,3286 .unused,
3266 .unused,3287 .unused,
3267 .unused,3288 .unused,
3289 .unused,
3290 .unused,
3291 .unused,
3268 },3292 },
3269 .dst_temps = .{.{ .ref = .src0 }},3293 .dst_temps = .{.{ .ref = .src0 }},
3270 .each = .{ .once = &.{3294 .each = .{ .once = &.{
...@@ -3296,6 +3320,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3296,6 +3320,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3296 .unused,3320 .unused,
3297 .unused,3321 .unused,
3298 .unused,3322 .unused,
3323 .unused,
3324 .unused,
3325 .unused,
3299 },3326 },
3300 .dst_temps = .{.{ .rc = .sse }},3327 .dst_temps = .{.{ .rc = .sse }},
3301 .each = .{ .once = &.{3328 .each = .{ .once = &.{
...@@ -3327,6 +3354,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3327,6 +3354,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3327 .unused,3354 .unused,
3328 .unused,3355 .unused,
3329 .unused,3356 .unused,
3357 .unused,
3358 .unused,
3359 .unused,
3330 },3360 },
3331 .dst_temps = .{.{ .ref = .src0 }},3361 .dst_temps = .{.{ .ref = .src0 }},
3332 .each = .{ .once = &.{3362 .each = .{ .once = &.{
...@@ -3346,6 +3376,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3346,6 +3376,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3346 .unused,3376 .unused,
3347 .unused,3377 .unused,
3348 .unused,3378 .unused,
3379 .unused,
3380 .unused,
3381 .unused,
3349 },3382 },
3350 .dst_temps = .{.{ .ref = .src0 }},3383 .dst_temps = .{.{ .ref = .src0 }},
3351 .each = .{ .once = &.{3384 .each = .{ .once = &.{
...@@ -3377,6 +3410,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3377,6 +3410,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3377 .unused,3410 .unused,
3378 .unused,3411 .unused,
3379 .unused,3412 .unused,
3413 .unused,
3414 .unused,
3415 .unused,
3380 },3416 },
3381 .dst_temps = .{.{ .rc = .sse }},3417 .dst_temps = .{.{ .rc = .sse }},
3382 .each = .{ .once = &.{3418 .each = .{ .once = &.{
...@@ -3392,7 +3428,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3392,7 +3428,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3392 },3428 },
3393 .dst_temps = .{.{ .rc = .sse }},3429 .dst_temps = .{.{ .rc = .sse }},
3394 .each = .{ .once = &.{3430 .each = .{ .once = &.{
3395 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .si(0b01111) },3431 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },
3396 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },3432 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
3397 } },3433 } },
3398 }, .{3434 }, .{
...@@ -3408,6 +3444,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3408,6 +3444,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3408 .unused,3444 .unused,
3409 .unused,3445 .unused,
3410 .unused,3446 .unused,
3447 .unused,
3448 .unused,
3449 .unused,
3411 },3450 },
3412 .dst_temps = .{.{ .rc = .sse }},3451 .dst_temps = .{.{ .rc = .sse }},
3413 .each = .{ .once = &.{3452 .each = .{ .once = &.{
...@@ -3427,6 +3466,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3427,6 +3466,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3427 .unused,3466 .unused,
3428 .unused,3467 .unused,
3429 .unused,3468 .unused,
3469 .unused,
3470 .unused,
3471 .unused,
3430 },3472 },
3431 .dst_temps = .{.mem},3473 .dst_temps = .{.mem},
3432 .clobbers = .{ .eflags = true },3474 .clobbers = .{ .eflags = true },
...@@ -3453,6 +3495,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3453,6 +3495,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3453 .unused,3495 .unused,
3454 .unused,3496 .unused,
3455 .unused,3497 .unused,
3498 .unused,
3499 .unused,
3500 .unused,
3456 },3501 },
3457 .dst_temps = .{.mem},3502 .dst_temps = .{.mem},
3458 .clobbers = .{ .eflags = true },3503 .clobbers = .{ .eflags = true },
...@@ -3477,12 +3522,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3477,12 +3522,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3477 .unused,3522 .unused,
3478 .unused,3523 .unused,
3479 .unused,3524 .unused,
3525 .unused,
3526 .unused,
3527 .unused,
3480 },3528 },
3481 .dst_temps = .{.mem},3529 .dst_temps = .{.mem},
3482 .clobbers = .{ .eflags = true },3530 .clobbers = .{ .eflags = true },
3483 .each = .{ .once = &.{3531 .each = .{ .once = &.{
3484 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },3532 .{ ._, ._, .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) },
3486 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },3534 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
3487 .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },3535 .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
3488 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },3536 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
...@@ -3503,12 +3551,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3503,12 +3551,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3503 .unused,3551 .unused,
3504 .unused,3552 .unused,
3505 .unused,3553 .unused,
3554 .unused,
3555 .unused,
3556 .unused,
3506 },3557 },
3507 .dst_temps = .{.mem},3558 .dst_temps = .{.mem},
3508 .clobbers = .{ .eflags = true },3559 .clobbers = .{ .eflags = true },
3509 .each = .{ .once = &.{3560 .each = .{ .once = &.{
3510 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },3561 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3511 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .si(0b01111) },3562 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) },
3512 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },3563 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
3513 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },3564 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
3514 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },3565 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
...@@ -3527,6 +3578,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3527,6 +3578,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3527 .unused,3578 .unused,
3528 .unused,3579 .unused,
3529 .unused,3580 .unused,
3581 .unused,
3582 .unused,
3583 .unused,
3530 },3584 },
3531 .dst_temps = .{.mem},3585 .dst_temps = .{.mem},
3532 .clobbers = .{ .eflags = true },3586 .clobbers = .{ .eflags = true },
...@@ -3551,6 +3605,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3551,6 +3605,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3551 .unused,3605 .unused,
3552 .unused,3606 .unused,
3553 .unused,3607 .unused,
3608 .unused,
3609 .unused,
3610 .unused,
3554 },3611 },
3555 .dst_temps = .{.mem},3612 .dst_temps = .{.mem},
3556 .clobbers = .{ .eflags = true },3613 .clobbers = .{ .eflags = true },
...@@ -3576,6 +3633,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3576,6 +3633,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3576 .unused,3633 .unused,
3577 .unused,3634 .unused,
3578 .unused,3635 .unused,
3636 .unused,
3637 .unused,
3638 .unused,
3579 },3639 },
3580 .dst_temps = .{.{ .ref = .src0 }},3640 .dst_temps = .{.{ .ref = .src0 }},
3581 .clobbers = .{ .eflags = true },3641 .clobbers = .{ .eflags = true },
...@@ -3599,6 +3659,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3599,6 +3659,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3599 .unused,3659 .unused,
3600 .unused,3660 .unused,
3601 .unused,3661 .unused,
3662 .unused,
3663 .unused,
3664 .unused,
3602 },3665 },
3603 .dst_temps = .{.mem},3666 .dst_temps = .{.mem},
3604 .clobbers = .{ .eflags = true },3667 .clobbers = .{ .eflags = true },
...@@ -3623,6 +3686,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3623,6 +3686,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3623 .unused,3686 .unused,
3624 .unused,3687 .unused,
3625 .unused,3688 .unused,
3689 .unused,
3690 .unused,
3691 .unused,
3626 },3692 },
3627 .dst_temps = .{.{ .ref = .src0 }},3693 .dst_temps = .{.{ .ref = .src0 }},
3628 .clobbers = .{ .eflags = true },3694 .clobbers = .{ .eflags = true },
...@@ -3647,6 +3713,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3647,6 +3713,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3647 .unused,3713 .unused,
3648 .unused,3714 .unused,
3649 .unused,3715 .unused,
3716 .unused,
3717 .unused,
3718 .unused,
3650 },3719 },
3651 .dst_temps = .{.mem},3720 .dst_temps = .{.mem},
3652 .clobbers = .{ .eflags = true },3721 .clobbers = .{ .eflags = true },
...@@ -3676,6 +3745,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3676,6 +3745,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3676 .unused,3745 .unused,
3677 .unused,3746 .unused,
3678 .unused,3747 .unused,
3748 .unused,
3749 .unused,
3750 .unused,
3679 },3751 },
3680 .dst_temps = .{.{ .ref = .src0 }},3752 .dst_temps = .{.{ .ref = .src0 }},
3681 .clobbers = .{ .eflags = true },3753 .clobbers = .{ .eflags = true },
...@@ -3700,6 +3772,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3700,6 +3772,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3700 .unused,3772 .unused,
3701 .unused,3773 .unused,
3702 .unused,3774 .unused,
3775 .unused,
3776 .unused,
3777 .unused,
3703 },3778 },
3704 .dst_temps = .{.mem},3779 .dst_temps = .{.mem},
3705 .clobbers = .{ .eflags = true },3780 .clobbers = .{ .eflags = true },
...@@ -3725,6 +3800,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3725,6 +3800,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3725 .unused,3800 .unused,
3726 .unused,3801 .unused,
3727 .unused,3802 .unused,
3803 .unused,
3804 .unused,
3805 .unused,
3728 },3806 },
3729 .dst_temps = .{.{ .ref = .src0 }},3807 .dst_temps = .{.{ .ref = .src0 }},
3730 .clobbers = .{ .eflags = true },3808 .clobbers = .{ .eflags = true },
...@@ -3748,6 +3826,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3748,6 +3826,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3748 .unused,3826 .unused,
3749 .unused,3827 .unused,
3750 .unused,3828 .unused,
3829 .unused,
3830 .unused,
3831 .unused,
3751 },3832 },
3752 .dst_temps = .{.mem},3833 .dst_temps = .{.mem},
3753 .clobbers = .{ .eflags = true },3834 .clobbers = .{ .eflags = true },
...@@ -3776,6 +3857,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3776,6 +3857,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3776 .unused,3857 .unused,
3777 .unused,3858 .unused,
3778 .unused,3859 .unused,
3860 .unused,
3861 .unused,
3862 .unused,
3779 },3863 },
3780 .dst_temps = .{.{ .ref = .src0 }},3864 .dst_temps = .{.{ .ref = .src0 }},
3781 .clobbers = .{ .eflags = true },3865 .clobbers = .{ .eflags = true },
...@@ -3800,6 +3884,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3800,6 +3884,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3800 .unused,3884 .unused,
3801 .unused,3885 .unused,
3802 .unused,3886 .unused,
3887 .unused,
3888 .unused,
3889 .unused,
3803 },3890 },
3804 .dst_temps = .{.mem},3891 .dst_temps = .{.mem},
3805 .clobbers = .{ .eflags = true },3892 .clobbers = .{ .eflags = true },
...@@ -3829,6 +3916,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3829,6 +3916,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3829 .unused,3916 .unused,
3830 .unused,3917 .unused,
3831 .unused,3918 .unused,
3919 .unused,
3920 .unused,
3921 .unused,
3832 },3922 },
3833 .dst_temps = .{.{ .ref = .src0 }},3923 .dst_temps = .{.{ .ref = .src0 }},
3834 .clobbers = .{ .eflags = true },3924 .clobbers = .{ .eflags = true },
...@@ -3852,6 +3942,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3852,6 +3942,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3852 .unused,3942 .unused,
3853 .unused,3943 .unused,
3854 .unused,3944 .unused,
3945 .unused,
3946 .unused,
3947 .unused,
3855 },3948 },
3856 .dst_temps = .{.mem},3949 .dst_temps = .{.mem},
3857 .clobbers = .{ .eflags = true },3950 .clobbers = .{ .eflags = true },
...@@ -3880,6 +3973,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3880,6 +3973,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3880 .unused,3973 .unused,
3881 .unused,3974 .unused,
3882 .unused,3975 .unused,
3976 .unused,
3977 .unused,
3978 .unused,
3883 },3979 },
3884 .dst_temps = .{.{ .ref = .src0 }},3980 .dst_temps = .{.{ .ref = .src0 }},
3885 .clobbers = .{ .eflags = true },3981 .clobbers = .{ .eflags = true },
...@@ -3905,6 +4001,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3905,6 +4001,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3905 .unused,4001 .unused,
3906 .unused,4002 .unused,
3907 .unused,4003 .unused,
4004 .unused,
4005 .unused,
4006 .unused,
3908 },4007 },
3909 .dst_temps = .{.mem},4008 .dst_temps = .{.mem},
3910 .clobbers = .{ .eflags = true },4009 .clobbers = .{ .eflags = true },
...@@ -3933,6 +4032,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3933,6 +4032,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3933 .unused,4032 .unused,
3934 .unused,4033 .unused,
3935 .unused,4034 .unused,
4035 .unused,
4036 .unused,
4037 .unused,
3936 },4038 },
3937 .dst_temps = .{.{ .ref = .src0 }},4039 .dst_temps = .{.{ .ref = .src0 }},
3938 .clobbers = .{ .eflags = true },4040 .clobbers = .{ .eflags = true },
...@@ -3957,6 +4059,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3957,6 +4059,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3957 .unused,4059 .unused,
3958 .unused,4060 .unused,
3959 .unused,4061 .unused,
4062 .unused,
4063 .unused,
4064 .unused,
3960 },4065 },
3961 .dst_temps = .{.mem},4066 .dst_temps = .{.mem},
3962 .clobbers = .{ .eflags = true },4067 .clobbers = .{ .eflags = true },
...@@ -3996,6 +4101,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -3996,6 +4101,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3996 .unused,4101 .unused,
3997 .unused,4102 .unused,
3998 .unused,4103 .unused,
4104 .unused,
4105 .unused,
4106 .unused,
3999 },4107 },
4000 .dst_temps = .{.{ .ref = .src0 }},4108 .dst_temps = .{.{ .ref = .src0 }},
4001 .each = .{ .once = &.{4109 .each = .{ .once = &.{
...@@ -4027,6 +4135,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4027,6 +4135,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4027 .unused,4135 .unused,
4028 .unused,4136 .unused,
4029 .unused,4137 .unused,
4138 .unused,
4139 .unused,
4140 .unused,
4030 },4141 },
4031 .dst_temps = .{.{ .rc = .sse }},4142 .dst_temps = .{.{ .rc = .sse }},
4032 .each = .{ .once = &.{4143 .each = .{ .once = &.{
...@@ -4058,6 +4169,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4058,6 +4169,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4058 .unused,4169 .unused,
4059 .unused,4170 .unused,
4060 .unused,4171 .unused,
4172 .unused,
4173 .unused,
4174 .unused,
4061 },4175 },
4062 .dst_temps = .{.{ .ref = .src0 }},4176 .dst_temps = .{.{ .ref = .src0 }},
4063 .each = .{ .once = &.{4177 .each = .{ .once = &.{
...@@ -4077,6 +4191,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4077,6 +4191,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4077 .unused,4191 .unused,
4078 .unused,4192 .unused,
4079 .unused,4193 .unused,
4194 .unused,
4195 .unused,
4196 .unused,
4080 },4197 },
4081 .dst_temps = .{.{ .ref = .src0 }},4198 .dst_temps = .{.{ .ref = .src0 }},
4082 .each = .{ .once = &.{4199 .each = .{ .once = &.{
...@@ -4108,6 +4225,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4108,6 +4225,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4108 .unused,4225 .unused,
4109 .unused,4226 .unused,
4110 .unused,4227 .unused,
4228 .unused,
4229 .unused,
4230 .unused,
4111 },4231 },
4112 .dst_temps = .{.{ .rc = .sse }},4232 .dst_temps = .{.{ .rc = .sse }},
4113 .each = .{ .once = &.{4233 .each = .{ .once = &.{
...@@ -4123,7 +4243,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4123,7 +4243,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4123 },4243 },
4124 .dst_temps = .{.{ .rc = .sse }},4244 .dst_temps = .{.{ .rc = .sse }},
4125 .each = .{ .once = &.{4245 .each = .{ .once = &.{
4126 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .si(0b01111) },4246 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },
4127 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },4247 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
4128 } },4248 } },
4129 }, .{4249 }, .{
...@@ -4139,6 +4259,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4139,6 +4259,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4139 .unused,4259 .unused,
4140 .unused,4260 .unused,
4141 .unused,4261 .unused,
4262 .unused,
4263 .unused,
4264 .unused,
4142 },4265 },
4143 .dst_temps = .{.{ .rc = .sse }},4266 .dst_temps = .{.{ .rc = .sse }},
4144 .each = .{ .once = &.{4267 .each = .{ .once = &.{
...@@ -4157,6 +4280,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4157,6 +4280,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4157 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },4280 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
4158 .unused,4281 .unused,
4159 .unused,4282 .unused,
4283 .unused,
4284 .unused,
4285 .unused,
4160 },4286 },
4161 .dst_temps = .{.mem},4287 .dst_temps = .{.mem},
4162 .each = .{ .once = &.{4288 .each = .{ .once = &.{
...@@ -4179,6 +4305,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4179,6 +4305,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4179 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },4305 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
4180 .unused,4306 .unused,
4181 .unused,4307 .unused,
4308 .unused,
4309 .unused,
4310 .unused,
4182 },4311 },
4183 .dst_temps = .{.mem},4312 .dst_temps = .{.mem},
4184 .each = .{ .once = &.{4313 .each = .{ .once = &.{
...@@ -4517,6 +4646,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4517,6 +4646,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4517 .unused,4646 .unused,
4518 .unused,4647 .unused,
4519 .unused,4648 .unused,
4649 .unused,
4650 .unused,
4651 .unused,
4520 },4652 },
4521 .dst_temps = .{.{ .rc = .general_purpose }},4653 .dst_temps = .{.{ .rc = .general_purpose }},
4522 .clobbers = .{ .eflags = true },4654 .clobbers = .{ .eflags = true },
...@@ -4541,6 +4673,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4541,6 +4673,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4541 .unused,4673 .unused,
4542 .unused,4674 .unused,
4543 .unused,4675 .unused,
4676 .unused,
4677 .unused,
4678 .unused,
4544 },4679 },
4545 .dst_temps = .{.{ .rc = .general_purpose }},4680 .dst_temps = .{.{ .rc = .general_purpose }},
4546 .clobbers = .{ .eflags = true },4681 .clobbers = .{ .eflags = true },
...@@ -4566,6 +4701,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4566,6 +4701,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4566 .unused,4701 .unused,
4567 .unused,4702 .unused,
4568 .unused,4703 .unused,
4704 .unused,
4705 .unused,
4706 .unused,
4569 },4707 },
4570 .dst_temps = .{.{ .rc = .general_purpose }},4708 .dst_temps = .{.{ .rc = .general_purpose }},
4571 .clobbers = .{ .eflags = true },4709 .clobbers = .{ .eflags = true },
...@@ -4592,6 +4730,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4592,6 +4730,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4592 .unused,4730 .unused,
4593 .unused,4731 .unused,
4594 .unused,4732 .unused,
4733 .unused,
4734 .unused,
4735 .unused,
4595 },4736 },
4596 .dst_temps = .{.{ .rc = .general_purpose }},4737 .dst_temps = .{.{ .rc = .general_purpose }},
4597 .clobbers = .{ .eflags = true },4738 .clobbers = .{ .eflags = true },
...@@ -4650,6 +4791,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4650,6 +4791,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4650 .unused,4791 .unused,
4651 .unused,4792 .unused,
4652 .unused,4793 .unused,
4794 .unused,
4795 .unused,
4796 .unused,
4653 },4797 },
4654 .dst_temps = .{.{ .rc = .general_purpose }},4798 .dst_temps = .{.{ .rc = .general_purpose }},
4655 .clobbers = .{ .eflags = true },4799 .clobbers = .{ .eflags = true },
...@@ -4676,6 +4820,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4676,6 +4820,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4676 .unused,4820 .unused,
4677 .unused,4821 .unused,
4678 .unused,4822 .unused,
4823 .unused,
4824 .unused,
4825 .unused,
4679 },4826 },
4680 .dst_temps = .{.{ .rc = .general_purpose }},4827 .dst_temps = .{.{ .rc = .general_purpose }},
4681 .clobbers = .{ .eflags = true },4828 .clobbers = .{ .eflags = true },
...@@ -4700,6 +4847,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4700,6 +4847,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4700 .unused,4847 .unused,
4701 .unused,4848 .unused,
4702 .unused,4849 .unused,
4850 .unused,
4851 .unused,
4852 .unused,
4703 },4853 },
4704 .dst_temps = .{.{ .rc = .general_purpose }},4854 .dst_temps = .{.{ .rc = .general_purpose }},
4705 .clobbers = .{ .eflags = true },4855 .clobbers = .{ .eflags = true },
...@@ -4722,6 +4872,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4722,6 +4872,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4722 .unused,4872 .unused,
4723 .unused,4873 .unused,
4724 .unused,4874 .unused,
4875 .unused,
4876 .unused,
4877 .unused,
4725 },4878 },
4726 .dst_temps = .{.{ .rc = .general_purpose }},4879 .dst_temps = .{.{ .rc = .general_purpose }},
4727 .clobbers = .{ .eflags = true },4880 .clobbers = .{ .eflags = true },
...@@ -4745,6 +4898,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4745,6 +4898,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4745 .unused,4898 .unused,
4746 .unused,4899 .unused,
4747 .unused,4900 .unused,
4901 .unused,
4902 .unused,
4903 .unused,
4748 },4904 },
4749 .dst_temps = .{.{ .rc = .general_purpose }},4905 .dst_temps = .{.{ .rc = .general_purpose }},
4750 .clobbers = .{ .eflags = true },4906 .clobbers = .{ .eflags = true },
...@@ -4769,6 +4925,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4769,6 +4925,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4769 .unused,4925 .unused,
4770 .unused,4926 .unused,
4771 .unused,4927 .unused,
4928 .unused,
4929 .unused,
4930 .unused,
4772 },4931 },
4773 .dst_temps = .{.{ .rc = .general_purpose }},4932 .dst_temps = .{.{ .rc = .general_purpose }},
4774 .clobbers = .{ .eflags = true },4933 .clobbers = .{ .eflags = true },
...@@ -4894,6 +5053,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4894,6 +5053,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4894 .unused,5053 .unused,
4895 .unused,5054 .unused,
4896 .unused,5055 .unused,
5056 .unused,
5057 .unused,
5058 .unused,
4897 },5059 },
4898 .dst_temps = .{.{ .rc = .general_purpose }},5060 .dst_temps = .{.{ .rc = .general_purpose }},
4899 .clobbers = .{ .eflags = true },5061 .clobbers = .{ .eflags = true },
...@@ -4917,6 +5079,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4917,6 +5079,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4917 .unused,5079 .unused,
4918 .unused,5080 .unused,
4919 .unused,5081 .unused,
5082 .unused,
5083 .unused,
5084 .unused,
4920 },5085 },
4921 .dst_temps = .{.{ .rc = .general_purpose }},5086 .dst_temps = .{.{ .rc = .general_purpose }},
4922 .clobbers = .{ .eflags = true },5087 .clobbers = .{ .eflags = true },
...@@ -5041,6 +5206,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5041,6 +5206,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5041 .unused,5206 .unused,
5042 .unused,5207 .unused,
5043 .unused,5208 .unused,
5209 .unused,
5210 .unused,
5211 .unused,
5044 },5212 },
5045 .dst_temps = .{.{ .rc = .general_purpose }},5213 .dst_temps = .{.{ .rc = .general_purpose }},
5046 .clobbers = .{ .eflags = true },5214 .clobbers = .{ .eflags = true },
...@@ -5064,6 +5232,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5064,6 +5232,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5064 .unused,5232 .unused,
5065 .unused,5233 .unused,
5066 .unused,5234 .unused,
5235 .unused,
5236 .unused,
5237 .unused,
5067 },5238 },
5068 .dst_temps = .{.{ .rc = .general_purpose }},5239 .dst_temps = .{.{ .rc = .general_purpose }},
5069 .clobbers = .{ .eflags = true },5240 .clobbers = .{ .eflags = true },
...@@ -5101,6 +5272,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5101,6 +5272,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5101 .unused,5272 .unused,
5102 .unused,5273 .unused,
5103 .unused,5274 .unused,
5275 .unused,
5276 .unused,
5277 .unused,
5104 },5278 },
5105 .dst_temps = .{.{ .rc = .general_purpose }},5279 .dst_temps = .{.{ .rc = .general_purpose }},
5106 .clobbers = .{ .eflags = true },5280 .clobbers = .{ .eflags = true },
...@@ -5156,6 +5330,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5156,6 +5330,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5156 .unused,5330 .unused,
5157 .unused,5331 .unused,
5158 .unused,5332 .unused,
5333 .unused,
5334 .unused,
5335 .unused,
5159 },5336 },
5160 .dst_temps = .{.{ .rc = .general_purpose }},5337 .dst_temps = .{.{ .rc = .general_purpose }},
5161 .clobbers = .{ .eflags = true },5338 .clobbers = .{ .eflags = true },
...@@ -5211,6 +5388,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5211,6 +5388,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5211 .unused,5388 .unused,
5212 .unused,5389 .unused,
5213 .unused,5390 .unused,
5391 .unused,
5392 .unused,
5393 .unused,
5214 },5394 },
5215 .dst_temps = .{.{ .rc = .general_purpose }},5395 .dst_temps = .{.{ .rc = .general_purpose }},
5216 .clobbers = .{ .eflags = true },5396 .clobbers = .{ .eflags = true },
...@@ -5236,6 +5416,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5236,6 +5416,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5236 .unused,5416 .unused,
5237 .unused,5417 .unused,
5238 .unused,5418 .unused,
5419 .unused,
5420 .unused,
5421 .unused,
5239 },5422 },
5240 .dst_temps = .{.{ .rc = .general_purpose }},5423 .dst_temps = .{.{ .rc = .general_purpose }},
5241 .clobbers = .{ .eflags = true },5424 .clobbers = .{ .eflags = true },
...@@ -5258,6 +5441,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5258,6 +5441,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5258 .unused,5441 .unused,
5259 .unused,5442 .unused,
5260 .unused,5443 .unused,
5444 .unused,
5445 .unused,
5446 .unused,
5261 },5447 },
5262 .dst_temps = .{.{ .rc = .general_purpose }},5448 .dst_temps = .{.{ .rc = .general_purpose }},
5263 .clobbers = .{ .eflags = true },5449 .clobbers = .{ .eflags = true },
...@@ -5285,6 +5471,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5285,6 +5471,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5285 .unused,5471 .unused,
5286 .unused,5472 .unused,
5287 .unused,5473 .unused,
5474 .unused,
5475 .unused,
5476 .unused,
5288 },5477 },
5289 .dst_temps = .{.{ .rc = .general_purpose }},5478 .dst_temps = .{.{ .rc = .general_purpose }},
5290 .clobbers = .{ .eflags = true },5479 .clobbers = .{ .eflags = true },
...@@ -5311,6 +5500,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5311,6 +5500,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5311 .unused,5500 .unused,
5312 .unused,5501 .unused,
5313 .unused,5502 .unused,
5503 .unused,
5504 .unused,
5505 .unused,
5314 },5506 },
5315 .dst_temps = .{.{ .rc = .general_purpose }},5507 .dst_temps = .{.{ .rc = .general_purpose }},
5316 .clobbers = .{ .eflags = true },5508 .clobbers = .{ .eflags = true },
...@@ -5339,6 +5531,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5339,6 +5531,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5339 .unused,5531 .unused,
5340 .unused,5532 .unused,
5341 .unused,5533 .unused,
5534 .unused,
5535 .unused,
5536 .unused,
5342 },5537 },
5343 .dst_temps = .{.{ .rc = .general_purpose }},5538 .dst_temps = .{.{ .rc = .general_purpose }},
5344 .clobbers = .{ .eflags = true },5539 .clobbers = .{ .eflags = true },
...@@ -5366,6 +5561,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5366,6 +5561,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5366 .unused,5561 .unused,
5367 .unused,5562 .unused,
5368 .unused,5563 .unused,
5564 .unused,
5565 .unused,
5566 .unused,
5369 },5567 },
5370 .dst_temps = .{.{ .rc = .general_purpose }},5568 .dst_temps = .{.{ .rc = .general_purpose }},
5371 .clobbers = .{ .eflags = true },5569 .clobbers = .{ .eflags = true },
...@@ -5393,6 +5591,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5393,6 +5591,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5393 .unused,5591 .unused,
5394 .unused,5592 .unused,
5395 .unused,5593 .unused,
5594 .unused,
5595 .unused,
5596 .unused,
5396 },5597 },
5397 .dst_temps = .{.{ .rc = .general_purpose }},5598 .dst_temps = .{.{ .rc = .general_purpose }},
5398 .clobbers = .{ .eflags = true },5599 .clobbers = .{ .eflags = true },
...@@ -5419,6 +5620,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5419,6 +5620,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5419 .unused,5620 .unused,
5420 .unused,5621 .unused,
5421 .unused,5622 .unused,
5623 .unused,
5624 .unused,
5625 .unused,
5422 },5626 },
5423 .dst_temps = .{.{ .rc = .general_purpose }},5627 .dst_temps = .{.{ .rc = .general_purpose }},
5424 .clobbers = .{ .eflags = true },5628 .clobbers = .{ .eflags = true },
...@@ -5447,6 +5651,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5447,6 +5651,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5447 .unused,5651 .unused,
5448 .unused,5652 .unused,
5449 .unused,5653 .unused,
5654 .unused,
5655 .unused,
5656 .unused,
5450 },5657 },
5451 .dst_temps = .{.{ .rc = .general_purpose }},5658 .dst_temps = .{.{ .rc = .general_purpose }},
5452 .clobbers = .{ .eflags = true },5659 .clobbers = .{ .eflags = true },
...@@ -5474,6 +5681,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5474,6 +5681,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5474 .unused,5681 .unused,
5475 .unused,5682 .unused,
5476 .unused,5683 .unused,
5684 .unused,
5685 .unused,
5686 .unused,
5477 },5687 },
5478 .dst_temps = .{.{ .rc = .general_purpose }},5688 .dst_temps = .{.{ .rc = .general_purpose }},
5479 .clobbers = .{ .eflags = true },5689 .clobbers = .{ .eflags = true },
...@@ -5504,6 +5714,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5504,6 +5714,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5504 .unused,5714 .unused,
5505 .unused,5715 .unused,
5506 .unused,5716 .unused,
5717 .unused,
5718 .unused,
5719 .unused,
5507 },5720 },
5508 .dst_temps = .{.{ .rc = .general_purpose }},5721 .dst_temps = .{.{ .rc = .general_purpose }},
5509 .clobbers = .{ .eflags = true },5722 .clobbers = .{ .eflags = true },
...@@ -5533,6 +5746,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5533,6 +5746,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5533 .unused,5746 .unused,
5534 .unused,5747 .unused,
5535 .unused,5748 .unused,
5749 .unused,
5750 .unused,
5751 .unused,
5536 },5752 },
5537 .dst_temps = .{.{ .rc = .general_purpose }},5753 .dst_temps = .{.{ .rc = .general_purpose }},
5538 .clobbers = .{ .eflags = true },5754 .clobbers = .{ .eflags = true },
...@@ -5562,6 +5778,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5562,6 +5778,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5562 .unused,5778 .unused,
5563 .unused,5779 .unused,
5564 .unused,5780 .unused,
5781 .unused,
5782 .unused,
5783 .unused,
5565 },5784 },
5566 .dst_temps = .{.{ .rc = .general_purpose }},5785 .dst_temps = .{.{ .rc = .general_purpose }},
5567 .clobbers = .{ .eflags = true },5786 .clobbers = .{ .eflags = true },
...@@ -5592,6 +5811,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5592,6 +5811,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5592 .unused,5811 .unused,
5593 .unused,5812 .unused,
5594 .unused,5813 .unused,
5814 .unused,
5815 .unused,
5816 .unused,
5595 },5817 },
5596 .dst_temps = .{.{ .rc = .general_purpose }},5818 .dst_temps = .{.{ .rc = .general_purpose }},
5597 .clobbers = .{ .eflags = true },5819 .clobbers = .{ .eflags = true },
...@@ -5621,6 +5843,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5621,6 +5843,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5621 .unused,5843 .unused,
5622 .unused,5844 .unused,
5623 .unused,5845 .unused,
5846 .unused,
5847 .unused,
5848 .unused,
5624 },5849 },
5625 .dst_temps = .{.{ .rc = .general_purpose }},5850 .dst_temps = .{.{ .rc = .general_purpose }},
5626 .clobbers = .{ .eflags = true },5851 .clobbers = .{ .eflags = true },
...@@ -5650,6 +5875,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5650,6 +5875,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5650 .unused,5875 .unused,
5651 .unused,5876 .unused,
5652 .unused,5877 .unused,
5878 .unused,
5879 .unused,
5880 .unused,
5653 },5881 },
5654 .dst_temps = .{.mem},5882 .dst_temps = .{.mem},
5655 .clobbers = .{ .eflags = true },5883 .clobbers = .{ .eflags = true },
...@@ -5676,6 +5904,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5676,6 +5904,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5676 .unused,5904 .unused,
5677 .unused,5905 .unused,
5678 .unused,5906 .unused,
5907 .unused,
5908 .unused,
5909 .unused,
5679 },5910 },
5680 .dst_temps = .{.mem},5911 .dst_temps = .{.mem},
5681 .clobbers = .{ .eflags = true },5912 .clobbers = .{ .eflags = true },
...@@ -5702,6 +5933,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5702,6 +5933,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5702 .unused,5933 .unused,
5703 .unused,5934 .unused,
5704 .unused,5935 .unused,
5936 .unused,
5937 .unused,
5938 .unused,
5705 },5939 },
5706 .dst_temps = .{.mem},5940 .dst_temps = .{.mem},
5707 .clobbers = .{ .eflags = true },5941 .clobbers = .{ .eflags = true },
...@@ -5728,6 +5962,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5728,6 +5962,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5728 .unused,5962 .unused,
5729 .unused,5963 .unused,
5730 .unused,5964 .unused,
5965 .unused,
5966 .unused,
5967 .unused,
5731 },5968 },
5732 .dst_temps = .{.mem},5969 .dst_temps = .{.mem},
5733 .clobbers = .{ .eflags = true },5970 .clobbers = .{ .eflags = true },
...@@ -5754,6 +5991,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5754,6 +5991,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5754 .unused,5991 .unused,
5755 .unused,5992 .unused,
5756 .unused,5993 .unused,
5994 .unused,
5995 .unused,
5996 .unused,
5757 },5997 },
5758 .dst_temps = .{.mem},5998 .dst_temps = .{.mem},
5759 .clobbers = .{ .eflags = true },5999 .clobbers = .{ .eflags = true },
...@@ -5780,6 +6020,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5780,6 +6020,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5780 .unused,6020 .unused,
5781 .unused,6021 .unused,
5782 .unused,6022 .unused,
6023 .unused,
6024 .unused,
6025 .unused,
5783 },6026 },
5784 .dst_temps = .{.mem},6027 .dst_temps = .{.mem},
5785 .clobbers = .{ .eflags = true },6028 .clobbers = .{ .eflags = true },
...@@ -5806,6 +6049,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5806,6 +6049,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5806 .unused,6049 .unused,
5807 .unused,6050 .unused,
5808 .unused,6051 .unused,
6052 .unused,
6053 .unused,
6054 .unused,
5809 },6055 },
5810 .dst_temps = .{.mem},6056 .dst_temps = .{.mem},
5811 .clobbers = .{ .eflags = true },6057 .clobbers = .{ .eflags = true },
...@@ -5832,6 +6078,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5832,6 +6078,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5832 .unused,6078 .unused,
5833 .unused,6079 .unused,
5834 .unused,6080 .unused,
6081 .unused,
6082 .unused,
6083 .unused,
5835 },6084 },
5836 .dst_temps = .{.mem},6085 .dst_temps = .{.mem},
5837 .clobbers = .{ .eflags = true },6086 .clobbers = .{ .eflags = true },
...@@ -5858,6 +6107,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5858,6 +6107,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5858 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6107 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
5859 .unused,6108 .unused,
5860 .unused,6109 .unused,
6110 .unused,
6111 .unused,
6112 .unused,
5861 },6113 },
5862 .dst_temps = .{.mem},6114 .dst_temps = .{.mem},
5863 .clobbers = .{ .eflags = true },6115 .clobbers = .{ .eflags = true },
...@@ -5887,6 +6139,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5887,6 +6139,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5887 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6139 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
5888 .unused,6140 .unused,
5889 .unused,6141 .unused,
6142 .unused,
6143 .unused,
6144 .unused,
5890 },6145 },
5891 .dst_temps = .{.mem},6146 .dst_temps = .{.mem},
5892 .clobbers = .{ .eflags = true },6147 .clobbers = .{ .eflags = true },
...@@ -5916,7 +6171,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5916,7 +6171,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5916 .unused,6171 .unused,
5917 .unused,6172 .unused,
5918 .unused,6173 .unused,
5919 },6174 .unused,
6175 .unused,
6176 .unused,
6177 },
5920 .dst_temps = .{.mem},6178 .dst_temps = .{.mem},
5921 .clobbers = .{ .eflags = true },6179 .clobbers = .{ .eflags = true },
5922 .each = .{ .once = &.{6180 .each = .{ .once = &.{
...@@ -5945,6 +6203,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5945,6 +6203,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5945 .unused,6203 .unused,
5946 .unused,6204 .unused,
5947 .unused,6205 .unused,
6206 .unused,
6207 .unused,
6208 .unused,
5948 },6209 },
5949 .dst_temps = .{.mem},6210 .dst_temps = .{.mem},
5950 .clobbers = .{ .eflags = true },6211 .clobbers = .{ .eflags = true },
...@@ -5974,6 +6235,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5974,6 +6235,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5974 .unused,6235 .unused,
5975 .unused,6236 .unused,
5976 .unused,6237 .unused,
6238 .unused,
6239 .unused,
6240 .unused,
5977 },6241 },
5978 .dst_temps = .{.mem},6242 .dst_temps = .{.mem},
5979 .clobbers = .{ .eflags = true },6243 .clobbers = .{ .eflags = true },
...@@ -6001,6 +6265,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6001,6 +6265,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6001 .unused,6265 .unused,
6002 .unused,6266 .unused,
6003 .unused,6267 .unused,
6268 .unused,
6269 .unused,
6270 .unused,
6004 },6271 },
6005 .dst_temps = .{.mem},6272 .dst_temps = .{.mem},
6006 .clobbers = .{ .eflags = true },6273 .clobbers = .{ .eflags = true },
...@@ -6029,6 +6296,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6029,6 +6296,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6029 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6296 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6030 .unused,6297 .unused,
6031 .unused,6298 .unused,
6299 .unused,
6300 .unused,
6301 .unused,
6032 },6302 },
6033 .dst_temps = .{.mem},6303 .dst_temps = .{.mem},
6034 .clobbers = .{ .eflags = true },6304 .clobbers = .{ .eflags = true },
...@@ -6058,6 +6328,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6058,6 +6328,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6058 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6328 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6059 .unused,6329 .unused,
6060 .unused,6330 .unused,
6331 .unused,
6332 .unused,
6333 .unused,
6061 },6334 },
6062 .dst_temps = .{.mem},6335 .dst_temps = .{.mem},
6063 .clobbers = .{ .eflags = true },6336 .clobbers = .{ .eflags = true },
...@@ -6087,6 +6360,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6087,6 +6360,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6087 .unused,6360 .unused,
6088 .unused,6361 .unused,
6089 .unused,6362 .unused,
6363 .unused,
6364 .unused,
6365 .unused,
6090 },6366 },
6091 .dst_temps = .{.mem},6367 .dst_temps = .{.mem},
6092 .clobbers = .{ .eflags = true },6368 .clobbers = .{ .eflags = true },
...@@ -6116,6 +6392,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6116,6 +6392,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6116 .unused,6392 .unused,
6117 .unused,6393 .unused,
6118 .unused,6394 .unused,
6395 .unused,
6396 .unused,
6397 .unused,
6119 },6398 },
6120 .dst_temps = .{.mem},6399 .dst_temps = .{.mem},
6121 .clobbers = .{ .eflags = true },6400 .clobbers = .{ .eflags = true },
...@@ -6145,6 +6424,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6145,6 +6424,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6145 .unused,6424 .unused,
6146 .unused,6425 .unused,
6147 .unused,6426 .unused,
6427 .unused,
6428 .unused,
6429 .unused,
6148 },6430 },
6149 .dst_temps = .{.mem},6431 .dst_temps = .{.mem},
6150 .clobbers = .{ .eflags = true },6432 .clobbers = .{ .eflags = true },
...@@ -6172,6 +6454,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6172,6 +6454,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6172 .unused,6454 .unused,
6173 .unused,6455 .unused,
6174 .unused,6456 .unused,
6457 .unused,
6458 .unused,
6459 .unused,
6175 },6460 },
6176 .dst_temps = .{.mem},6461 .dst_temps = .{.mem},
6177 .clobbers = .{ .eflags = true },6462 .clobbers = .{ .eflags = true },
...@@ -6200,6 +6485,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6200,6 +6485,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6200 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6485 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6201 .unused,6486 .unused,
6202 .unused,6487 .unused,
6488 .unused,
6489 .unused,
6490 .unused,
6203 },6491 },
6204 .dst_temps = .{.mem},6492 .dst_temps = .{.mem},
6205 .clobbers = .{ .eflags = true },6493 .clobbers = .{ .eflags = true },
...@@ -6229,6 +6517,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6229,6 +6517,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6229 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6517 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6230 .unused,6518 .unused,
6231 .unused,6519 .unused,
6520 .unused,
6521 .unused,
6522 .unused,
6232 },6523 },
6233 .dst_temps = .{.mem},6524 .dst_temps = .{.mem},
6234 .clobbers = .{ .eflags = true },6525 .clobbers = .{ .eflags = true },
...@@ -6258,6 +6549,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6258,6 +6549,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6258 .unused,6549 .unused,
6259 .unused,6550 .unused,
6260 .unused,6551 .unused,
6552 .unused,
6553 .unused,
6554 .unused,
6261 },6555 },
6262 .dst_temps = .{.mem},6556 .dst_temps = .{.mem},
6263 .clobbers = .{ .eflags = true },6557 .clobbers = .{ .eflags = true },
...@@ -6287,6 +6581,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6287,6 +6581,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6287 .unused,6581 .unused,
6288 .unused,6582 .unused,
6289 .unused,6583 .unused,
6584 .unused,
6585 .unused,
6586 .unused,
6290 },6587 },
6291 .dst_temps = .{.mem},6588 .dst_temps = .{.mem},
6292 .clobbers = .{ .eflags = true },6589 .clobbers = .{ .eflags = true },
...@@ -6316,6 +6613,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6316,6 +6613,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6316 .unused,6613 .unused,
6317 .unused,6614 .unused,
6318 .unused,6615 .unused,
6616 .unused,
6617 .unused,
6618 .unused,
6319 },6619 },
6320 .dst_temps = .{.mem},6620 .dst_temps = .{.mem},
6321 .clobbers = .{ .eflags = true },6621 .clobbers = .{ .eflags = true },
...@@ -6343,6 +6643,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6343,6 +6643,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6343 .unused,6643 .unused,
6344 .unused,6644 .unused,
6345 .unused,6645 .unused,
6646 .unused,
6647 .unused,
6648 .unused,
6346 },6649 },
6347 .dst_temps = .{.mem},6650 .dst_temps = .{.mem},
6348 .clobbers = .{ .eflags = true },6651 .clobbers = .{ .eflags = true },
...@@ -6371,6 +6674,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6371,6 +6674,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6371 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6674 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6372 .unused,6675 .unused,
6373 .unused,6676 .unused,
6677 .unused,
6678 .unused,
6679 .unused,
6374 },6680 },
6375 .dst_temps = .{.mem},6681 .dst_temps = .{.mem},
6376 .clobbers = .{ .eflags = true },6682 .clobbers = .{ .eflags = true },
...@@ -6400,6 +6706,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6400,6 +6706,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6400 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6706 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6401 .unused,6707 .unused,
6402 .unused,6708 .unused,
6709 .unused,
6710 .unused,
6711 .unused,
6403 },6712 },
6404 .dst_temps = .{.mem},6713 .dst_temps = .{.mem},
6405 .clobbers = .{ .eflags = true },6714 .clobbers = .{ .eflags = true },
...@@ -6429,6 +6738,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6429,6 +6738,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6429 .unused,6738 .unused,
6430 .unused,6739 .unused,
6431 .unused,6740 .unused,
6741 .unused,
6742 .unused,
6743 .unused,
6432 },6744 },
6433 .dst_temps = .{.mem},6745 .dst_temps = .{.mem},
6434 .clobbers = .{ .eflags = true },6746 .clobbers = .{ .eflags = true },
...@@ -6458,6 +6770,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6458,6 +6770,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6458 .unused,6770 .unused,
6459 .unused,6771 .unused,
6460 .unused,6772 .unused,
6773 .unused,
6774 .unused,
6775 .unused,
6461 },6776 },
6462 .dst_temps = .{.mem},6777 .dst_temps = .{.mem},
6463 .clobbers = .{ .eflags = true },6778 .clobbers = .{ .eflags = true },
...@@ -6487,6 +6802,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6487,6 +6802,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6487 .unused,6802 .unused,
6488 .unused,6803 .unused,
6489 .unused,6804 .unused,
6805 .unused,
6806 .unused,
6807 .unused,
6490 },6808 },
6491 .dst_temps = .{.mem},6809 .dst_temps = .{.mem},
6492 .clobbers = .{ .eflags = true },6810 .clobbers = .{ .eflags = true },
...@@ -6515,6 +6833,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6515,6 +6833,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6515 .unused,6833 .unused,
6516 .unused,6834 .unused,
6517 .unused,6835 .unused,
6836 .unused,
6837 .unused,
6838 .unused,
6518 },6839 },
6519 .dst_temps = .{.mem},6840 .dst_temps = .{.mem},
6520 .clobbers = .{ .eflags = true },6841 .clobbers = .{ .eflags = true },
...@@ -6544,6 +6865,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6544,6 +6865,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6544 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },6865 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6545 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },6866 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6546 .unused,6867 .unused,
6868 .unused,
6869 .unused,
6870 .unused,
6547 },6871 },
6548 .dst_temps = .{.mem},6872 .dst_temps = .{.mem},
6549 .clobbers = .{ .eflags = true },6873 .clobbers = .{ .eflags = true },
...@@ -6581,6 +6905,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6581,6 +6905,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6581 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },6905 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6582 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },6906 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6583 .unused,6907 .unused,
6908 .unused,
6909 .unused,
6910 .unused,
6584 },6911 },
6585 .dst_temps = .{.mem},6912 .dst_temps = .{.mem},
6586 .clobbers = .{ .eflags = true },6913 .clobbers = .{ .eflags = true },
...@@ -6617,6 +6944,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6617,6 +6944,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6617 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },6944 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6618 .unused,6945 .unused,
6619 .unused,6946 .unused,
6947 .unused,
6948 .unused,
6949 .unused,
6620 },6950 },
6621 .dst_temps = .{.mem},6951 .dst_temps = .{.mem},
6622 .clobbers = .{ .eflags = true },6952 .clobbers = .{ .eflags = true },
...@@ -6653,6 +6983,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6653,6 +6983,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6653 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },6983 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6654 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },6984 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6655 .unused,6985 .unused,
6986 .unused,
6987 .unused,
6988 .unused,
6656 },6989 },
6657 .dst_temps = .{.mem},6990 .dst_temps = .{.mem},
6658 .clobbers = .{ .eflags = true },6991 .clobbers = .{ .eflags = true },
...@@ -6690,6 +7023,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6690,6 +7023,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6690 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7023 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6691 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7024 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6692 .unused,7025 .unused,
7026 .unused,
7027 .unused,
7028 .unused,
6693 },7029 },
6694 .dst_temps = .{.mem},7030 .dst_temps = .{.mem},
6695 .clobbers = .{ .eflags = true },7031 .clobbers = .{ .eflags = true },
...@@ -6726,6 +7062,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6726,6 +7062,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6726 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7062 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6727 .unused,7063 .unused,
6728 .unused,7064 .unused,
7065 .unused,
7066 .unused,
7067 .unused,
6729 },7068 },
6730 .dst_temps = .{.mem},7069 .dst_temps = .{.mem},
6731 .clobbers = .{ .eflags = true },7070 .clobbers = .{ .eflags = true },
...@@ -6762,6 +7101,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6762,6 +7101,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6762 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7101 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6763 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7102 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6764 .unused,7103 .unused,
7104 .unused,
7105 .unused,
7106 .unused,
6765 },7107 },
6766 .dst_temps = .{.mem},7108 .dst_temps = .{.mem},
6767 .clobbers = .{ .eflags = true },7109 .clobbers = .{ .eflags = true },
...@@ -6799,6 +7141,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6799,6 +7141,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6799 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7141 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6800 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7142 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6801 .unused,7143 .unused,
7144 .unused,
7145 .unused,
7146 .unused,
6802 },7147 },
6803 .dst_temps = .{.mem},7148 .dst_temps = .{.mem},
6804 .clobbers = .{ .eflags = true },7149 .clobbers = .{ .eflags = true },
...@@ -6835,6 +7180,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6835,6 +7180,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6835 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7180 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6836 .unused,7181 .unused,
6837 .unused,7182 .unused,
7183 .unused,
7184 .unused,
7185 .unused,
6838 },7186 },
6839 .dst_temps = .{.mem},7187 .dst_temps = .{.mem},
6840 .clobbers = .{ .eflags = true },7188 .clobbers = .{ .eflags = true },
...@@ -6871,6 +7219,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6871,6 +7219,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6871 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7219 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6872 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7220 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6873 .unused,7221 .unused,
7222 .unused,
7223 .unused,
7224 .unused,
6874 },7225 },
6875 .dst_temps = .{.mem},7226 .dst_temps = .{.mem},
6876 .clobbers = .{ .eflags = true },7227 .clobbers = .{ .eflags = true },
...@@ -6908,6 +7259,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6908,6 +7259,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6908 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7259 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6909 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7260 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6910 .unused,7261 .unused,
7262 .unused,
7263 .unused,
7264 .unused,
6911 },7265 },
6912 .dst_temps = .{.mem},7266 .dst_temps = .{.mem},
6913 .clobbers = .{ .eflags = true },7267 .clobbers = .{ .eflags = true },
...@@ -6944,6 +7298,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6944,6 +7298,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6944 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },7298 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6945 .unused,7299 .unused,
6946 .unused,7300 .unused,
7301 .unused,
7302 .unused,
7303 .unused,
6947 },7304 },
6948 .dst_temps = .{.mem},7305 .dst_temps = .{.mem},
6949 .clobbers = .{ .eflags = true },7306 .clobbers = .{ .eflags = true },
...@@ -6981,8 +7338,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6981,8 +7338,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6981 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;7338 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
6982 const extra = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data;7339 const extra = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data;
6983 switch (extra.compareOperator()) {7340 switch (extra.compareOperator()) {
6984 .eq, .neq => if (cg.typeOf(extra.lhs).scalarType(zcu).isRuntimeFloat())7341 .eq, .neq => {},
6985 break :fallback try cg.airCmpVector(inst),
6986 else => break :fallback try cg.airCmpVector(inst),7342 else => break :fallback try cg.airCmpVector(inst),
6987 }7343 }
6988 var ops = try cg.tempsFromOperands(inst, .{ extra.lhs, extra.rhs });7344 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 {...@@ -7004,7 +7360,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7004 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },7360 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
7005 .{ .src = .{ .to_ymm, .to_ymm } },7361 .{ .src = .{ .to_ymm, .to_ymm } },
7006 },7362 },
7007 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{7363 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
7008 .kind = .all,7364 .kind = .all,
7009 .inverted = switch (cc) {7365 .inverted = switch (cc) {
7010 else => unreachable,7366 else => unreachable,
...@@ -7024,7 +7380,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7024,7 +7380,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7024 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },7380 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
7025 .{ .src = .{ .to_ymm, .to_ymm } },7381 .{ .src = .{ .to_ymm, .to_ymm } },
7026 },7382 },
7027 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{7383 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
7028 .kind = .all,7384 .kind = .all,
7029 .inverted = switch (cc) {7385 .inverted = switch (cc) {
7030 else => unreachable,7386 else => unreachable,
...@@ -7044,7 +7400,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7044,7 +7400,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7044 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },7400 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
7045 .{ .src = .{ .to_ymm, .to_ymm } },7401 .{ .src = .{ .to_ymm, .to_ymm } },
7046 },7402 },
7047 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{7403 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
7048 .kind = .all,7404 .kind = .all,
7049 .inverted = switch (cc) {7405 .inverted = switch (cc) {
7050 else => unreachable,7406 else => unreachable,
...@@ -7064,7 +7420,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7064,7 +7420,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7064 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },7420 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
7065 .{ .src = .{ .to_ymm, .to_ymm } },7421 .{ .src = .{ .to_ymm, .to_ymm } },
7066 },7422 },
7067 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{7423 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
7068 .kind = .all,7424 .kind = .all,
7069 .inverted = switch (cc) {7425 .inverted = switch (cc) {
7070 else => unreachable,7426 else => unreachable,
...@@ -7084,7 +7440,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7084,7 +7440,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7084 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },7440 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
7085 .{ .src = .{ .to_xmm, .to_xmm } },7441 .{ .src = .{ .to_xmm, .to_xmm } },
7086 },7442 },
7087 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{7443 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
7088 .kind = .all,7444 .kind = .all,
7089 .inverted = switch (cc) {7445 .inverted = switch (cc) {
7090 else => unreachable,7446 else => unreachable,
...@@ -7104,7 +7460,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7104,7 +7460,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7104 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },7460 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
7105 .{ .src = .{ .to_xmm, .to_xmm } },7461 .{ .src = .{ .to_xmm, .to_xmm } },
7106 },7462 },
7107 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{7463 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
7108 .kind = .all,7464 .kind = .all,
7109 .inverted = switch (cc) {7465 .inverted = switch (cc) {
7110 else => unreachable,7466 else => unreachable,
...@@ -7124,7 +7480,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7124,7 +7480,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7124 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },7480 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
7125 .{ .src = .{ .to_xmm, .to_xmm } },7481 .{ .src = .{ .to_xmm, .to_xmm } },
7126 },7482 },
7127 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{7483 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
7128 .kind = .all,7484 .kind = .all,
7129 .inverted = switch (cc) {7485 .inverted = switch (cc) {
7130 else => unreachable,7486 else => unreachable,
...@@ -7144,7 +7500,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7144,7 +7500,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7144 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },7500 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
7145 .{ .src = .{ .to_xmm, .to_xmm } },7501 .{ .src = .{ .to_xmm, .to_xmm } },
7146 },7502 },
7147 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{7503 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
7148 .kind = .all,7504 .kind = .all,
7149 .inverted = switch (cc) {7505 .inverted = switch (cc) {
7150 else => unreachable,7506 else => unreachable,
...@@ -7409,6 +7765,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7409,6 +7765,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7409 .unused,7765 .unused,
7410 .unused,7766 .unused,
7411 .unused,7767 .unused,
7768 .unused,
7769 .unused,
7770 .unused,
7412 },7771 },
7413 .dst_temps = .{.mem},7772 .dst_temps = .{.mem},
7414 .clobbers = .{ .eflags = true },7773 .clobbers = .{ .eflags = true },
...@@ -7445,6 +7804,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7445,6 +7804,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7445 .{ .kind = .{ .rc = .sse } },7804 .{ .kind = .{ .rc = .sse } },
7446 .unused,7805 .unused,
7447 .unused,7806 .unused,
7807 .unused,
7808 .unused,
7809 .unused,
7448 },7810 },
7449 .dst_temps = .{.mem},7811 .dst_temps = .{.mem},
7450 .clobbers = .{ .eflags = true },7812 .clobbers = .{ .eflags = true },
...@@ -7487,6 +7849,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7487,6 +7849,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7487 .{ .kind = .{ .rc = .sse } },7849 .{ .kind = .{ .rc = .sse } },
7488 .unused,7850 .unused,
7489 .unused,7851 .unused,
7852 .unused,
7853 .unused,
7854 .unused,
7490 },7855 },
7491 .dst_temps = .{.mem},7856 .dst_temps = .{.mem},
7492 .clobbers = .{ .eflags = true },7857 .clobbers = .{ .eflags = true },
...@@ -7531,6 +7896,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7531,6 +7896,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7531 .{ .kind = .{ .rc = .sse } },7896 .{ .kind = .{ .rc = .sse } },
7532 .unused,7897 .unused,
7533 .unused,7898 .unused,
7899 .unused,
7900 .unused,
7901 .unused,
7534 },7902 },
7535 .dst_temps = .{.mem},7903 .dst_temps = .{.mem},
7536 .clobbers = .{ .eflags = true },7904 .clobbers = .{ .eflags = true },
...@@ -7573,6 +7941,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7573,6 +7941,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7573 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },7941 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7574 .{ .kind = .{ .rc = .sse } },7942 .{ .kind = .{ .rc = .sse } },
7575 .unused,7943 .unused,
7944 .unused,
7945 .unused,
7946 .unused,
7576 },7947 },
7577 .dst_temps = .{.mem},7948 .dst_temps = .{.mem},
7578 .clobbers = .{ .eflags = true },7949 .clobbers = .{ .eflags = true },
...@@ -7641,6 +8012,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7641,6 +8012,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7641 .{ .kind = .{ .rc = .sse } },8012 .{ .kind = .{ .rc = .sse } },
7642 .unused,8013 .unused,
7643 .unused,8014 .unused,
8015 .unused,
8016 .unused,
8017 .unused,
7644 },8018 },
7645 .dst_temps = .{.mem},8019 .dst_temps = .{.mem},
7646 .clobbers = .{ .eflags = true },8020 .clobbers = .{ .eflags = true },
...@@ -7683,6 +8057,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7683,6 +8057,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7683 .{ .kind = .{ .rc = .sse } },8057 .{ .kind = .{ .rc = .sse } },
7684 .unused,8058 .unused,
7685 .unused,8059 .unused,
8060 .unused,
8061 .unused,
8062 .unused,
7686 },8063 },
7687 .dst_temps = .{.mem},8064 .dst_temps = .{.mem},
7688 .clobbers = .{ .eflags = true },8065 .clobbers = .{ .eflags = true },
...@@ -7727,6 +8104,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7727,6 +8104,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7727 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },8104 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7728 .{ .kind = .{ .rc = .sse } },8105 .{ .kind = .{ .rc = .sse } },
7729 .unused,8106 .unused,
8107 .unused,
8108 .unused,
8109 .unused,
7730 },8110 },
7731 .dst_temps = .{.mem},8111 .dst_temps = .{.mem},
7732 .clobbers = .{ .eflags = true },8112 .clobbers = .{ .eflags = true },
...@@ -7795,6 +8175,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7795,6 +8175,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7795 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },8175 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7796 .{ .kind = .{ .rc = .sse } },8176 .{ .kind = .{ .rc = .sse } },
7797 .unused,8177 .unused,
8178 .unused,
8179 .unused,
8180 .unused,
7798 },8181 },
7799 .dst_temps = .{.mem},8182 .dst_temps = .{.mem},
7800 .clobbers = .{ .eflags = true },8183 .clobbers = .{ .eflags = true },
...@@ -7863,6 +8246,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7863,6 +8246,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7863 .{ .kind = .{ .rc = .sse } },8246 .{ .kind = .{ .rc = .sse } },
7864 .unused,8247 .unused,
7865 .unused,8248 .unused,
8249 .unused,
8250 .unused,
8251 .unused,
7866 },8252 },
7867 .dst_temps = .{.mem},8253 .dst_temps = .{.mem},
7868 .clobbers = .{ .eflags = true },8254 .clobbers = .{ .eflags = true },
...@@ -7905,6 +8291,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7905,6 +8291,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7905 .{ .kind = .{ .rc = .sse } },8291 .{ .kind = .{ .rc = .sse } },
7906 .unused,8292 .unused,
7907 .unused,8293 .unused,
8294 .unused,
8295 .unused,
8296 .unused,
7908 },8297 },
7909 .dst_temps = .{.mem},8298 .dst_temps = .{.mem},
7910 .clobbers = .{ .eflags = true },8299 .clobbers = .{ .eflags = true },
...@@ -7949,6 +8338,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7949,6 +8338,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7949 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },8338 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7950 .{ .kind = .{ .rc = .sse } },8339 .{ .kind = .{ .rc = .sse } },
7951 .unused,8340 .unused,
8341 .unused,
8342 .unused,
8343 .unused,
7952 },8344 },
7953 .dst_temps = .{.mem},8345 .dst_temps = .{.mem},
7954 .clobbers = .{ .eflags = true },8346 .clobbers = .{ .eflags = true },
...@@ -8017,6 +8409,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8017,6 +8409,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8017 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },8409 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8018 .{ .kind = .{ .rc = .sse } },8410 .{ .kind = .{ .rc = .sse } },
8019 .unused,8411 .unused,
8412 .unused,
8413 .unused,
8414 .unused,
8020 },8415 },
8021 .dst_temps = .{.mem},8416 .dst_temps = .{.mem},
8022 .clobbers = .{ .eflags = true },8417 .clobbers = .{ .eflags = true },
...@@ -8085,6 +8480,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8085,6 +8480,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8085 .{ .kind = .{ .rc = .mmx } },8480 .{ .kind = .{ .rc = .mmx } },
8086 .unused,8481 .unused,
8087 .unused,8482 .unused,
8483 .unused,
8484 .unused,
8485 .unused,
8088 },8486 },
8089 .dst_temps = .{.mem},8487 .dst_temps = .{.mem},
8090 .clobbers = .{ .eflags = true },8488 .clobbers = .{ .eflags = true },
...@@ -8127,6 +8525,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8127,6 +8525,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8127 .{ .kind = .{ .rc = .mmx } },8525 .{ .kind = .{ .rc = .mmx } },
8128 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },8526 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8129 .{ .kind = .{ .rc = .mmx } },8527 .{ .kind = .{ .rc = .mmx } },
8528 .unused,
8529 .unused,
8530 .unused,
8130 },8531 },
8131 .dst_temps = .{.mem},8532 .dst_temps = .{.mem},
8132 .clobbers = .{ .eflags = true },8533 .clobbers = .{ .eflags = true },
...@@ -8199,6 +8600,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8199,6 +8600,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8199 .{ .kind = .{ .rc = .mmx } },8600 .{ .kind = .{ .rc = .mmx } },
8200 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },8601 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8201 .{ .kind = .{ .rc = .mmx } },8602 .{ .kind = .{ .rc = .mmx } },
8603 .unused,
8604 .unused,
8605 .unused,
8202 },8606 },
8203 .dst_temps = .{.mem},8607 .dst_temps = .{.mem},
8204 .clobbers = .{ .eflags = true },8608 .clobbers = .{ .eflags = true },
...@@ -8273,6 +8677,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8273,6 +8677,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8273 .unused,8677 .unused,
8274 .unused,8678 .unused,
8275 .unused,8679 .unused,
8680 .unused,
8681 .unused,
8682 .unused,
8276 },8683 },
8277 .dst_temps = .{.{ .rc = .general_purpose }},8684 .dst_temps = .{.{ .rc = .general_purpose }},
8278 .clobbers = .{ .eflags = true },8685 .clobbers = .{ .eflags = true },
...@@ -8302,6 +8709,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8302,6 +8709,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8302 .unused,8709 .unused,
8303 .unused,8710 .unused,
8304 .unused,8711 .unused,
8712 .unused,
8713 .unused,
8714 .unused,
8305 },8715 },
8306 .dst_temps = .{.{ .rc = .general_purpose }},8716 .dst_temps = .{.{ .rc = .general_purpose }},
8307 .clobbers = .{ .eflags = true },8717 .clobbers = .{ .eflags = true },
...@@ -8331,6 +8741,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8331,6 +8741,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8331 .unused,8741 .unused,
8332 .unused,8742 .unused,
8333 .unused,8743 .unused,
8744 .unused,
8745 .unused,
8746 .unused,
8334 },8747 },
8335 .dst_temps = .{.{ .rc = .general_purpose }},8748 .dst_temps = .{.{ .rc = .general_purpose }},
8336 .clobbers = .{ .eflags = true },8749 .clobbers = .{ .eflags = true },
...@@ -8361,6 +8774,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8361,6 +8774,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8361 .unused,8774 .unused,
8362 .unused,8775 .unused,
8363 .unused,8776 .unused,
8777 .unused,
8778 .unused,
8779 .unused,
8364 },8780 },
8365 .dst_temps = .{.{ .rc = .general_purpose }},8781 .dst_temps = .{.{ .rc = .general_purpose }},
8366 .clobbers = .{ .eflags = true },8782 .clobbers = .{ .eflags = true },
...@@ -8390,6 +8806,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8390,6 +8806,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8390 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },8806 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8391 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },8807 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8392 .unused,8808 .unused,
8809 .unused,
8810 .unused,
8811 .unused,
8393 },8812 },
8394 .dst_temps = .{.{ .rc = .general_purpose }},8813 .dst_temps = .{.{ .rc = .general_purpose }},
8395 .clobbers = .{ .eflags = true },8814 .clobbers = .{ .eflags = true },
...@@ -8426,6 +8845,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8426,6 +8845,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8426 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },8845 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8427 .unused,8846 .unused,
8428 .unused,8847 .unused,
8848 .unused,
8849 .unused,
8850 .unused,
8429 },8851 },
8430 .dst_temps = .{.{ .rc = .general_purpose }},8852 .dst_temps = .{.{ .rc = .general_purpose }},
8431 .clobbers = .{ .eflags = true },8853 .clobbers = .{ .eflags = true },
...@@ -8456,6 +8878,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8456,6 +8878,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8456 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },8878 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
8457 .unused,8879 .unused,
8458 .unused,8880 .unused,
8881 .unused,
8882 .unused,
8883 .unused,
8459 },8884 },
8460 .dst_temps = .{.{ .rc = .general_purpose }},8885 .dst_temps = .{.{ .rc = .general_purpose }},
8461 .clobbers = .{ .eflags = true },8886 .clobbers = .{ .eflags = true },
...@@ -8486,6 +8911,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8486,6 +8911,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8486 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },8911 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8487 .unused,8912 .unused,
8488 .unused,8913 .unused,
8914 .unused,
8915 .unused,
8916 .unused,
8489 },8917 },
8490 .dst_temps = .{.{ .rc = .general_purpose }},8918 .dst_temps = .{.{ .rc = .general_purpose }},
8491 .clobbers = .{ .eflags = true },8919 .clobbers = .{ .eflags = true },
...@@ -8517,6 +8945,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8517,6 +8945,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8517 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },8945 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8518 .unused,8946 .unused,
8519 .unused,8947 .unused,
8948 .unused,
8949 .unused,
8950 .unused,
8520 },8951 },
8521 .dst_temps = .{.{ .rc = .general_purpose }},8952 .dst_temps = .{.{ .rc = .general_purpose }},
8522 .clobbers = .{ .eflags = true },8953 .clobbers = .{ .eflags = true },
...@@ -8547,6 +8978,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8547,6 +8978,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8547 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },8978 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8548 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },8979 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8549 .unused,8980 .unused,
8981 .unused,
8982 .unused,
8983 .unused,
8550 },8984 },
8551 .dst_temps = .{.{ .rc = .general_purpose }},8985 .dst_temps = .{.{ .rc = .general_purpose }},
8552 .clobbers = .{ .eflags = true },8986 .clobbers = .{ .eflags = true },
...@@ -8585,6 +9019,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8585,6 +9019,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8585 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },9019 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8586 .unused,9020 .unused,
8587 .unused,9021 .unused,
9022 .unused,
9023 .unused,
9024 .unused,
8588 },9025 },
8589 .dst_temps = .{.{ .rc = .general_purpose }},9026 .dst_temps = .{.{ .rc = .general_purpose }},
8590 .clobbers = .{ .eflags = true },9027 .clobbers = .{ .eflags = true },
...@@ -8616,6 +9053,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8616,6 +9053,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8616 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },9053 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
8617 .unused,9054 .unused,
8618 .unused,9055 .unused,
9056 .unused,
9057 .unused,
9058 .unused,
8619 },9059 },
8620 .dst_temps = .{.{ .rc = .general_purpose }},9060 .dst_temps = .{.{ .rc = .general_purpose }},
8621 .clobbers = .{ .eflags = true },9061 .clobbers = .{ .eflags = true },
...@@ -8646,6 +9086,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8646,6 +9086,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8646 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },9086 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8647 .unused,9087 .unused,
8648 .unused,9088 .unused,
9089 .unused,
9090 .unused,
9091 .unused,
8649 },9092 },
8650 .dst_temps = .{.{ .rc = .general_purpose }},9093 .dst_temps = .{.{ .rc = .general_purpose }},
8651 .clobbers = .{ .eflags = true },9094 .clobbers = .{ .eflags = true },
...@@ -8677,6 +9120,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8677,6 +9120,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8677 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },9120 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8678 .unused,9121 .unused,
8679 .unused,9122 .unused,
9123 .unused,
9124 .unused,
9125 .unused,
8680 },9126 },
8681 .dst_temps = .{.{ .rc = .general_purpose }},9127 .dst_temps = .{.{ .rc = .general_purpose }},
8682 .clobbers = .{ .eflags = true },9128 .clobbers = .{ .eflags = true },
...@@ -8708,6 +9154,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8708,6 +9154,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8708 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },9154 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8709 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },9155 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8710 .unused,9156 .unused,
9157 .unused,
9158 .unused,
9159 .unused,
8711 },9160 },
8712 .dst_temps = .{.{ .rc = .general_purpose }},9161 .dst_temps = .{.{ .rc = .general_purpose }},
8713 .clobbers = .{ .eflags = true },9162 .clobbers = .{ .eflags = true },
...@@ -8744,6 +9193,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8744,6 +9193,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8744 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },9193 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8745 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },9194 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8746 .unused,9195 .unused,
9196 .unused,
9197 .unused,
9198 .unused,
8747 },9199 },
8748 .dst_temps = .{.mem},9200 .dst_temps = .{.mem},
8749 .clobbers = .{ .eflags = true },9201 .clobbers = .{ .eflags = true },
...@@ -8775,8 +9227,42 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8775,8 +9227,42 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8775 }, .{9227 }, .{
8776 .required_features = .{ .f16c, null, null, null },9228 .required_features = .{ .f16c, null, null, null },
8777 .src_constraints = .{9229 .src_constraints = .{
8778 .{ .scalar_exact_float = .{ .of = .qword, .is = .word } },9230 .{ .scalar_float = .{ .of = .word, .is = .word } },
8779 .{ .scalar_exact_float = .{ .of = .qword, .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 } },
8780 },9266 },
8781 .patterns = &.{9267 .patterns = &.{
8782 .{ .src = .{ .mem, .mem } },9268 .{ .src = .{ .mem, .mem } },
...@@ -8791,15 +9277,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8791,15 +9277,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8791 .unused,9277 .unused,
8792 .unused,9278 .unused,
8793 .unused,9279 .unused,
9280 .unused,
9281 .unused,
9282 .unused,
8794 },9283 },
8795 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{9284 .dst_temps = .{.{ .mut_rc_mask = .{
8796 .kind = .all,9285 .ref = .src0,
8797 .scalar = .dword,9286 .rc = .sse,
8798 } } }},9287 .info = .{ .kind = .all, .scalar = .dword },
9288 } }},
8799 .each = .{ .once = &.{9289 .each = .{ .once = &.{
8800 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },9290 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
8801 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },9291 .{ ._, .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) {
8803 else => unreachable,9293 else => unreachable,
8804 .e => 0b00000,9294 .e => 0b00000,
8805 .ne => 0b00100,9295 .ne => 0b00100,
...@@ -8808,8 +9298,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8808,8 +9298,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8808 }, .{9298 }, .{
8809 .required_features = .{ .f16c, null, null, null },9299 .required_features = .{ .f16c, null, null, null },
8810 .src_constraints = .{9300 .src_constraints = .{
8811 .{ .scalar_exact_float = .{ .of = .xword, .is = .word } },9301 .{ .scalar_float = .{ .of = .xword, .is = .word } },
8812 .{ .scalar_exact_float = .{ .of = .xword, .is = .word } },9302 .{ .scalar_float = .{ .of = .xword, .is = .word } },
8813 },9303 },
8814 .patterns = &.{9304 .patterns = &.{
8815 .{ .src = .{ .mem, .mem } },9305 .{ .src = .{ .mem, .mem } },
...@@ -8824,44 +9314,2313 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8824,44 +9314,2313 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8824 .unused,9314 .unused,
8825 .unused,9315 .unused,
8826 .unused,9316 .unused,
9317 .unused,
9318 .unused,
9319 .unused,
8827 },9320 },
8828 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{9321 .dst_temps = .{.{ .mut_rc_mask = .{
8829 .kind = .all,9322 .ref = .src0,
8830 .scalar = .dword,9323 .rc = .sse,
8831 } } }},9324 .info = .{ .kind = .all, .scalar = .dword },
9325 } }},
8832 .each = .{ .once = &.{9326 .each = .{ .once = &.{
8833 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },9327 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
8834 .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },9328 .{ ._, .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) {
8836 else => unreachable,9330 else => unreachable,
8837 .e => 0b00000,9331 .e => 0b00000,
8838 .ne => 0b00100,9332 .ne => 0b00100,
8839 }) },9333 }) },
8840 } },9334 } },
8841 } },9335 }, .{
8842 }) catch |err| switch (err) {9336 .required_features = .{ .avx, null, null, null },
8843 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{9337 .src_constraints = .{
8844 @tagName(air_tag),9338 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
8845 cg.typeOf(extra.lhs).fmt(pt),9339 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
8846 ops[0].tracking(cg),9340 },
8847 ops[1].tracking(cg),9341 .patterns = &.{
8848 }),9342 .{ .src = .{ .to_sse, .mem } },
8849 else => |e| return e,9343 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
8850 },9344 .{ .src = .{ .to_sse, .to_sse } },
8851 .gte => unreachable,9345 },
8852 .gt => unreachable,9346 .dst_temps = .{.{ .mut_rc_mask = .{
8853 }9347 .ref = .src0,
8854 try res[0].finish(inst, &.{ extra.lhs, extra.rhs }, &ops, cg);9348 .rc = .sse,
8855 },9349 .info = .{ .kind = .all, .scalar = .dword },
88569350 } }},
8857 .abs => |air_tag| if (use_old) try cg.airAbs(inst) else fallback: {9351 .each = .{ .once = &.{
8858 const ty_op = air_datas[@intFromEnum(inst)].ty_op;9352 .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
8859 if (ty_op.ty.toType().isVector(zcu) and ty_op.ty.toType().childType(zcu).isRuntimeFloat()) break :fallback try cg.airAbs(inst);9353 else => unreachable,
8860 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});9354 .e => 0b00000,
8861 var res: [1]Temp = undefined;9355 .ne => 0b00100,
8862 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{9356 }) },
8863 .required_features = .{ .cmov, null, null, null },9357 } },
8864 .src_constraints = .{ .{ .int = .byte }, .any },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 },
8865 .patterns = &.{11624 .patterns = &.{
8866 .{ .src = .{ .to_gpr, .none } },11625 .{ .src = .{ .to_gpr, .none } },
8867 },11626 },
...@@ -9037,6 +11796,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9037,6 +11796,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9037 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },11796 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
9038 .unused,11797 .unused,
9039 .unused,11798 .unused,
11799 .unused,
11800 .unused,
11801 .unused,
9040 },11802 },
9041 .dst_temps = .{.mem},11803 .dst_temps = .{.mem},
9042 .clobbers = .{ .eflags = true },11804 .clobbers = .{ .eflags = true },
...@@ -9061,7 +11823,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9061,7 +11823,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9061 .{ .src = .{ .mem, .none } },11823 .{ .src = .{ .mem, .none } },
9062 .{ .src = .{ .to_mm, .none } },11824 .{ .src = .{ .to_mm, .none } },
9063 },11825 },
9064 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }},11826 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }},
9065 .each = .{ .once = &.{11827 .each = .{ .once = &.{
9066 .{ ._, .p_b, .abs, .dst0q, .src0q, ._, ._ },11828 .{ ._, .p_b, .abs, .dst0q, .src0q, ._, ._ },
9067 } },11829 } },
...@@ -9072,7 +11834,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9072,7 +11834,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9072 .{ .src = .{ .mem, .none } },11834 .{ .src = .{ .mem, .none } },
9073 .{ .src = .{ .to_mm, .none } },11835 .{ .src = .{ .to_mm, .none } },
9074 },11836 },
9075 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }},11837 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }},
9076 .each = .{ .once = &.{11838 .each = .{ .once = &.{
9077 .{ ._, .p_w, .abs, .dst0q, .src0q, ._, ._ },11839 .{ ._, .p_w, .abs, .dst0q, .src0q, ._, ._ },
9078 } },11840 } },
...@@ -9083,7 +11845,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9083,7 +11845,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9083 .{ .src = .{ .mem, .none } },11845 .{ .src = .{ .mem, .none } },
9084 .{ .src = .{ .to_mm, .none } },11846 .{ .src = .{ .to_mm, .none } },
9085 },11847 },
9086 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }},11848 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }},
9087 .each = .{ .once = &.{11849 .each = .{ .once = &.{
9088 .{ ._, .p_d, .abs, .dst0q, .src0q, ._, ._ },11850 .{ ._, .p_d, .abs, .dst0q, .src0q, ._, ._ },
9089 } },11851 } },
...@@ -9094,7 +11856,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9094,7 +11856,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9094 .{ .src = .{ .mem, .none } },11856 .{ .src = .{ .mem, .none } },
9095 .{ .src = .{ .to_sse, .none } },11857 .{ .src = .{ .to_sse, .none } },
9096 },11858 },
9097 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},11859 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9098 .each = .{ .once = &.{11860 .each = .{ .once = &.{
9099 .{ ._, .p_b, .abs, .dst0x, .src0x, ._, ._ },11861 .{ ._, .p_b, .abs, .dst0x, .src0x, ._, ._ },
9100 } },11862 } },
...@@ -9105,7 +11867,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9105,7 +11867,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9105 .{ .src = .{ .mem, .none } },11867 .{ .src = .{ .mem, .none } },
9106 .{ .src = .{ .to_sse, .none } },11868 .{ .src = .{ .to_sse, .none } },
9107 },11869 },
9108 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},11870 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9109 .each = .{ .once = &.{11871 .each = .{ .once = &.{
9110 .{ ._, .p_w, .abs, .dst0x, .src0x, ._, ._ },11872 .{ ._, .p_w, .abs, .dst0x, .src0x, ._, ._ },
9111 } },11873 } },
...@@ -9116,7 +11878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9116,7 +11878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9116 .{ .src = .{ .mem, .none } },11878 .{ .src = .{ .mem, .none } },
9117 .{ .src = .{ .to_sse, .none } },11879 .{ .src = .{ .to_sse, .none } },
9118 },11880 },
9119 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},11881 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9120 .each = .{ .once = &.{11882 .each = .{ .once = &.{
9121 .{ ._, .p_d, .abs, .dst0x, .src0x, ._, ._ },11883 .{ ._, .p_d, .abs, .dst0x, .src0x, ._, ._ },
9122 } },11884 } },
...@@ -9127,7 +11889,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9127,7 +11889,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9127 .{ .src = .{ .mem, .none } },11889 .{ .src = .{ .mem, .none } },
9128 .{ .src = .{ .to_sse, .none } },11890 .{ .src = .{ .to_sse, .none } },
9129 },11891 },
9130 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},11892 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9131 .each = .{ .once = &.{11893 .each = .{ .once = &.{
9132 .{ ._, .vp_b, .abs, .dst0x, .src0x, ._, ._ },11894 .{ ._, .vp_b, .abs, .dst0x, .src0x, ._, ._ },
9133 } },11895 } },
...@@ -9138,7 +11900,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9138,7 +11900,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9138 .{ .src = .{ .mem, .none } },11900 .{ .src = .{ .mem, .none } },
9139 .{ .src = .{ .to_sse, .none } },11901 .{ .src = .{ .to_sse, .none } },
9140 },11902 },
9141 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},11903 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9142 .each = .{ .once = &.{11904 .each = .{ .once = &.{
9143 .{ ._, .vp_w, .abs, .dst0x, .src0x, ._, ._ },11905 .{ ._, .vp_w, .abs, .dst0x, .src0x, ._, ._ },
9144 } },11906 } },
...@@ -9149,7 +11911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9149,7 +11911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9149 .{ .src = .{ .mem, .none } },11911 .{ .src = .{ .mem, .none } },
9150 .{ .src = .{ .to_sse, .none } },11912 .{ .src = .{ .to_sse, .none } },
9151 },11913 },
9152 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},11914 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9153 .each = .{ .once = &.{11915 .each = .{ .once = &.{
9154 .{ ._, .vp_d, .abs, .dst0x, .src0x, ._, ._ },11916 .{ ._, .vp_d, .abs, .dst0x, .src0x, ._, ._ },
9155 } },11917 } },
...@@ -9160,7 +11922,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9160,7 +11922,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9160 .{ .src = .{ .mem, .none } },11922 .{ .src = .{ .mem, .none } },
9161 .{ .src = .{ .to_sse, .none } },11923 .{ .src = .{ .to_sse, .none } },
9162 },11924 },
9163 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},11925 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9164 .each = .{ .once = &.{11926 .each = .{ .once = &.{
9165 .{ ._, .vp_b, .abs, .dst0y, .src0y, ._, ._ },11927 .{ ._, .vp_b, .abs, .dst0y, .src0y, ._, ._ },
9166 } },11928 } },
...@@ -9171,7 +11933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9171,7 +11933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9171 .{ .src = .{ .mem, .none } },11933 .{ .src = .{ .mem, .none } },
9172 .{ .src = .{ .to_sse, .none } },11934 .{ .src = .{ .to_sse, .none } },
9173 },11935 },
9174 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},11936 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9175 .each = .{ .once = &.{11937 .each = .{ .once = &.{
9176 .{ ._, .vp_w, .abs, .dst0y, .src0y, ._, ._ },11938 .{ ._, .vp_w, .abs, .dst0y, .src0y, ._, ._ },
9177 } },11939 } },
...@@ -9182,7 +11944,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9182,7 +11944,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9182 .{ .src = .{ .mem, .none } },11944 .{ .src = .{ .mem, .none } },
9183 .{ .src = .{ .to_sse, .none } },11945 .{ .src = .{ .to_sse, .none } },
9184 },11946 },
9185 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},11947 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9186 .each = .{ .once = &.{11948 .each = .{ .once = &.{
9187 .{ ._, .vp_d, .abs, .dst0y, .src0y, ._, ._ },11949 .{ ._, .vp_d, .abs, .dst0y, .src0y, ._, ._ },
9188 } },11950 } },
...@@ -9199,6 +11961,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9199,6 +11961,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9199 .unused,11961 .unused,
9200 .unused,11962 .unused,
9201 .unused,11963 .unused,
11964 .unused,
11965 .unused,
11966 .unused,
9202 },11967 },
9203 .dst_temps = .{.mem},11968 .dst_temps = .{.mem},
9204 .clobbers = .{ .eflags = true },11969 .clobbers = .{ .eflags = true },
...@@ -9222,6 +11987,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9222,6 +11987,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9222 .unused,11987 .unused,
9223 .unused,11988 .unused,
9224 .unused,11989 .unused,
11990 .unused,
11991 .unused,
11992 .unused,
9225 },11993 },
9226 .dst_temps = .{.mem},11994 .dst_temps = .{.mem},
9227 .clobbers = .{ .eflags = true },11995 .clobbers = .{ .eflags = true },
...@@ -9245,6 +12013,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9245,6 +12013,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9245 .unused,12013 .unused,
9246 .unused,12014 .unused,
9247 .unused,12015 .unused,
12016 .unused,
12017 .unused,
12018 .unused,
9248 },12019 },
9249 .dst_temps = .{.mem},12020 .dst_temps = .{.mem},
9250 .clobbers = .{ .eflags = true },12021 .clobbers = .{ .eflags = true },
...@@ -9268,6 +12039,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9268,6 +12039,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9268 .unused,12039 .unused,
9269 .unused,12040 .unused,
9270 .unused,12041 .unused,
12042 .unused,
12043 .unused,
12044 .unused,
9271 },12045 },
9272 .dst_temps = .{.mem},12046 .dst_temps = .{.mem},
9273 .clobbers = .{ .eflags = true },12047 .clobbers = .{ .eflags = true },
...@@ -9291,6 +12065,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9291,6 +12065,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9291 .unused,12065 .unused,
9292 .unused,12066 .unused,
9293 .unused,12067 .unused,
12068 .unused,
12069 .unused,
12070 .unused,
9294 },12071 },
9295 .dst_temps = .{.mem},12072 .dst_temps = .{.mem},
9296 .clobbers = .{ .eflags = true },12073 .clobbers = .{ .eflags = true },
...@@ -9314,6 +12091,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9314,6 +12091,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9314 .unused,12091 .unused,
9315 .unused,12092 .unused,
9316 .unused,12093 .unused,
12094 .unused,
12095 .unused,
12096 .unused,
9317 },12097 },
9318 .dst_temps = .{.mem},12098 .dst_temps = .{.mem},
9319 .clobbers = .{ .eflags = true },12099 .clobbers = .{ .eflags = true },
...@@ -9337,6 +12117,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9337,6 +12117,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9337 .unused,12117 .unused,
9338 .unused,12118 .unused,
9339 .unused,12119 .unused,
12120 .unused,
12121 .unused,
12122 .unused,
9340 },12123 },
9341 .dst_temps = .{.mem},12124 .dst_temps = .{.mem},
9342 .clobbers = .{ .eflags = true },12125 .clobbers = .{ .eflags = true },
...@@ -9360,6 +12143,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9360,6 +12143,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9360 .unused,12143 .unused,
9361 .unused,12144 .unused,
9362 .unused,12145 .unused,
12146 .unused,
12147 .unused,
12148 .unused,
9363 },12149 },
9364 .dst_temps = .{.mem},12150 .dst_temps = .{.mem},
9365 .clobbers = .{ .eflags = true },12151 .clobbers = .{ .eflags = true },
...@@ -9383,6 +12169,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9383,6 +12169,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9383 .unused,12169 .unused,
9384 .unused,12170 .unused,
9385 .unused,12171 .unused,
12172 .unused,
12173 .unused,
12174 .unused,
9386 },12175 },
9387 .dst_temps = .{.mem},12176 .dst_temps = .{.mem},
9388 .clobbers = .{ .eflags = true },12177 .clobbers = .{ .eflags = true },
...@@ -9406,6 +12195,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9406,6 +12195,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9406 .unused,12195 .unused,
9407 .unused,12196 .unused,
9408 .unused,12197 .unused,
12198 .unused,
12199 .unused,
12200 .unused,
9409 },12201 },
9410 .dst_temps = .{.mem},12202 .dst_temps = .{.mem},
9411 .clobbers = .{ .eflags = true },12203 .clobbers = .{ .eflags = true },
...@@ -9429,6 +12221,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9429,6 +12221,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9429 .unused,12221 .unused,
9430 .unused,12222 .unused,
9431 .unused,12223 .unused,
12224 .unused,
12225 .unused,
12226 .unused,
9432 },12227 },
9433 .dst_temps = .{.mem},12228 .dst_temps = .{.mem},
9434 .clobbers = .{ .eflags = true },12229 .clobbers = .{ .eflags = true },
...@@ -9452,6 +12247,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9452,6 +12247,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9452 .unused,12247 .unused,
9453 .unused,12248 .unused,
9454 .unused,12249 .unused,
12250 .unused,
12251 .unused,
12252 .unused,
9455 },12253 },
9456 .dst_temps = .{.mem},12254 .dst_temps = .{.mem},
9457 .clobbers = .{ .eflags = true },12255 .clobbers = .{ .eflags = true },
...@@ -9475,6 +12273,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9475,6 +12273,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9475 .unused,12273 .unused,
9476 .unused,12274 .unused,
9477 .unused,12275 .unused,
12276 .unused,
12277 .unused,
12278 .unused,
9478 },12279 },
9479 .dst_temps = .{.mem},12280 .dst_temps = .{.mem},
9480 .clobbers = .{ .eflags = true },12281 .clobbers = .{ .eflags = true },
...@@ -9501,6 +12302,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9501,6 +12302,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9501 .unused,12302 .unused,
9502 .unused,12303 .unused,
9503 .unused,12304 .unused,
12305 .unused,
12306 .unused,
12307 .unused,
9504 },12308 },
9505 .dst_temps = .{.mem},12309 .dst_temps = .{.mem},
9506 .clobbers = .{ .eflags = true },12310 .clobbers = .{ .eflags = true },
...@@ -9527,6 +12331,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9527,6 +12331,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9527 .unused,12331 .unused,
9528 .unused,12332 .unused,
9529 .unused,12333 .unused,
12334 .unused,
12335 .unused,
12336 .unused,
9530 },12337 },
9531 .dst_temps = .{.mem},12338 .dst_temps = .{.mem},
9532 .clobbers = .{ .eflags = true },12339 .clobbers = .{ .eflags = true },
...@@ -9552,6 +12359,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9552,6 +12359,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9552 .unused,12359 .unused,
9553 .unused,12360 .unused,
9554 .unused,12361 .unused,
12362 .unused,
12363 .unused,
12364 .unused,
9555 },12365 },
9556 .dst_temps = .{.mem},12366 .dst_temps = .{.mem},
9557 .clobbers = .{ .eflags = true },12367 .clobbers = .{ .eflags = true },
...@@ -9578,6 +12388,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9578,6 +12388,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9578 .unused,12388 .unused,
9579 .unused,12389 .unused,
9580 .unused,12390 .unused,
12391 .unused,
12392 .unused,
12393 .unused,
9581 },12394 },
9582 .dst_temps = .{.mem},12395 .dst_temps = .{.mem},
9583 .clobbers = .{ .eflags = true },12396 .clobbers = .{ .eflags = true },
...@@ -9602,6 +12415,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9602,6 +12415,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9602 .unused,12415 .unused,
9603 .unused,12416 .unused,
9604 .unused,12417 .unused,
12418 .unused,
12419 .unused,
12420 .unused,
9605 },12421 },
9606 .dst_temps = .{.mem},12422 .dst_temps = .{.mem},
9607 .clobbers = .{ .eflags = true },12423 .clobbers = .{ .eflags = true },
...@@ -9628,6 +12444,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9628,6 +12444,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9628 .unused,12444 .unused,
9629 .unused,12445 .unused,
9630 .unused,12446 .unused,
12447 .unused,
12448 .unused,
12449 .unused,
9631 },12450 },
9632 .dst_temps = .{.mem},12451 .dst_temps = .{.mem},
9633 .clobbers = .{ .eflags = true },12452 .clobbers = .{ .eflags = true },
...@@ -9652,6 +12471,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9652,6 +12471,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9652 .unused,12471 .unused,
9653 .unused,12472 .unused,
9654 .unused,12473 .unused,
12474 .unused,
12475 .unused,
12476 .unused,
9655 },12477 },
9656 .dst_temps = .{.mem},12478 .dst_temps = .{.mem},
9657 .clobbers = .{ .eflags = true },12479 .clobbers = .{ .eflags = true },
...@@ -9678,6 +12500,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9678,6 +12500,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9678 .unused,12500 .unused,
9679 .unused,12501 .unused,
9680 .unused,12502 .unused,
12503 .unused,
12504 .unused,
12505 .unused,
9681 },12506 },
9682 .dst_temps = .{.mem},12507 .dst_temps = .{.mem},
9683 .clobbers = .{ .eflags = true },12508 .clobbers = .{ .eflags = true },
...@@ -9703,6 +12528,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9703,6 +12528,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9703 .unused,12528 .unused,
9704 .unused,12529 .unused,
9705 .unused,12530 .unused,
12531 .unused,
12532 .unused,
12533 .unused,
9706 },12534 },
9707 .dst_temps = .{.mem},12535 .dst_temps = .{.mem},
9708 .clobbers = .{ .eflags = true },12536 .clobbers = .{ .eflags = true },
...@@ -9729,6 +12557,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9729,6 +12557,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9729 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },12557 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
9730 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },12558 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
9731 .unused,12559 .unused,
12560 .unused,
12561 .unused,
12562 .unused,
9732 },12563 },
9733 .dst_temps = .{.mem},12564 .dst_temps = .{.mem},
9734 .clobbers = .{ .eflags = true },12565 .clobbers = .{ .eflags = true },
...@@ -9750,15 +12581,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9750,15 +12581,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9750 .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ },12581 .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ },
9751 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },12582 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
9752 } },12583 } },
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 } },
9753 }, .{12606 }, .{
9754 .required_features = .{ .sse, null, null, null },12607 .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 },
9756 .patterns = &.{12609 .patterns = &.{
9757 .{ .src = .{ .to_mut_sse, .none } },12610 .{ .src = .{ .to_mut_sse, .none } },
9758 },12611 },
9759 .extra_temps = .{12612 .extra_temps = .{
9760 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12613 .{ .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,
9762 .unused,12618 .unused,
9763 .unused,12619 .unused,
9764 .unused,12620 .unused,
...@@ -9770,33 +12626,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9770,33 +12626,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9770 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },12626 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
9771 } },12627 } },
9772 }, .{12628 }, .{
9773 .required_features = .{ .sse2, null, null, null },12629 .required_features = .{ .avx, null, null, null },
9774 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any },12630 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
9775 .patterns = &.{12631 .patterns = &.{
9776 .{ .src = .{ .to_mut_sse, .none } },12632 .{ .src = .{ .to_sse, .none } },
9777 },12633 },
9778 .extra_temps = .{12634 .extra_temps = .{
9779 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12635 .{ .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,
9781 .unused,12640 .unused,
9782 .unused,12641 .unused,
9783 .unused,12642 .unused,
9784 .unused,12643 .unused,
9785 },12644 },
9786 .dst_temps = .{.{ .ref = .src0 }},12645 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9787 .each = .{ .once = &.{12646 .each = .{ .once = &.{
9788 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },12647 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9789 .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },12648 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
9790 } },12649 } },
9791 }, .{12650 }, .{
9792 .required_features = .{ .sse, null, null, null },12651 .required_features = .{ .avx, null, null, null },
9793 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any },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 },
9794 .patterns = &.{12675 .patterns = &.{
9795 .{ .src = .{ .to_mut_sse, .none } },12676 .{ .src = .{ .to_mut_sse, .none } },
9796 },12677 },
9797 .extra_temps = .{12678 .extra_temps = .{
9798 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12679 .{ .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,
9800 .unused,12684 .unused,
9801 .unused,12685 .unused,
9802 .unused,12686 .unused,
...@@ -9805,218 +12689,383 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9805,218 +12689,383 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9805 .dst_temps = .{.{ .ref = .src0 }},12689 .dst_temps = .{.{ .ref = .src0 }},
9806 .each = .{ .once = &.{12690 .each = .{ .once = &.{
9807 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },12691 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9808 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },12692 .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
9809 } },12693 } },
9810 }, .{12694 }, .{
9811 .required_features = .{ .avx, null, null, null },12695 .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 },
9813 .patterns = &.{12697 .patterns = &.{
9814 .{ .src = .{ .to_sse, .none } },12698 .{ .src = .{ .to_sse, .none } },
9815 },12699 },
9816 .extra_temps = .{12700 .extra_temps = .{
9817 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12701 .{ .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,
9819 .unused,12706 .unused,
9820 .unused,12707 .unused,
9821 .unused,12708 .unused,
9822 .unused,12709 .unused,
9823 },12710 },
9824 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},12711 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9825 .each = .{ .once = &.{12712 .each = .{ .once = &.{
9826 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },12713 .{ ._, ._, .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, ._, ._, ._ },
9828 } },12739 } },
9829 }, .{12740 }, .{
9830 .required_features = .{ .avx, null, null, null },12741 .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 },
9832 .patterns = &.{12743 .patterns = &.{
9833 .{ .src = .{ .to_sse, .none } },12744 .{ .src = .{ .to_sse, .none } },
9834 },12745 },
9835 .extra_temps = .{12746 .extra_temps = .{
9836 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12747 .{ .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,
9838 .unused,12752 .unused,
9839 .unused,12753 .unused,
9840 .unused,12754 .unused,
9841 .unused,12755 .unused,
9842 },12756 },
9843 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},12757 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9844 .each = .{ .once = &.{12758 .each = .{ .once = &.{
9845 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },12759 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9846 .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },12760 .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
9847 } },12761 } },
9848 }, .{12762 }, .{
9849 .required_features = .{ .avx, null, null, null },12763 .required_features = .{ .sse2, null, null, null },
9850 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .yword, .is = .dword } }, .any },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 },
9851 .patterns = &.{12809 .patterns = &.{
9852 .{ .src = .{ .to_sse, .none } },12810 .{ .src = .{ .to_sse, .none } },
9853 },12811 },
9854 .extra_temps = .{12812 .extra_temps = .{
9855 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12813 .{ .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,
9857 .unused,12818 .unused,
9858 .unused,12819 .unused,
9859 .unused,12820 .unused,
9860 .unused,12821 .unused,
9861 },12822 },
9862 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},12823 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9863 .each = .{ .once = &.{12824 .each = .{ .once = &.{
9864 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },12825 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9865 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },12826 .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
9866 } },12827 } },
9867 }, .{12828 }, .{
9868 .required_features = .{ .avx, null, null, null },12829 .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 },
9870 .patterns = &.{12831 .patterns = &.{
9871 .{ .src = .{ .to_sse, .none } },12832 .{ .src = .{ .to_sse, .none } },
9872 },12833 },
9873 .extra_temps = .{12834 .extra_temps = .{
9874 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12835 .{ .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,
9876 .unused,12840 .unused,
9877 .unused,12841 .unused,
9878 .unused,12842 .unused,
9879 .unused,12843 .unused,
9880 },12844 },
9881 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},12845 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9882 .each = .{ .once = &.{12846 .each = .{ .once = &.{
9883 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },12847 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9884 .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },12848 .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
9885 } },12849 } },
9886 }, .{12850 }, .{
9887 .required_features = .{ .x87, null, null, null },12851 .required_features = .{ .avx, null, null, null },
9888 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .tbyte } }, .any },12852 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
9889 .patterns = &.{12853 .patterns = &.{
9890 .{ .src = .{ .mem, .none } },12854 .{ .src = .{ .to_mem, .none } },
9891 .{ .src = .{ .to_x87, .none } },
9892 },12855 },
9893 .extra_temps = .{12856 .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 } },
9895 .unused,12861 .unused,
9896 .unused,12862 .unused,
9897 .unused,12863 .unused,
9898 .unused,12864 .unused,
9899 .unused,12865 .unused,
9900 },12866 },
9901 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .x87 } }},12867 .dst_temps = .{.mem},
9902 .each = .{ .once = &.{12868 .each = .{ .once = &.{
9903 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },12869 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9904 .{ ._, .f_, .abs, ._, ._, ._, ._ },12870 .{ ._, .v_ps, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ },
9905 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },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", ._, ._, ._ },
9906 } },12904 } },
9907 }, .{12905 }, .{
9908 .required_features = .{ .avx2, null, null, null },12906 .required_features = .{ .avx, null, null, null },
9909 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },12907 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
9910 .patterns = &.{12908 .patterns = &.{
9911 .{ .src = .{ .to_sse, .none } },12909 .{ .src = .{ .to_mem, .none } },
9912 },12910 },
9913 .extra_temps = .{12911 .extra_temps = .{
9914 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12912 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9915 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },12913 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12914 .{ .kind = .{ .rc = .sse } },
12915 .{ .kind = .{ .rc = .sse } },
12916 .unused,
9916 .unused,12917 .unused,
9917 .unused,12918 .unused,
9918 .unused,12919 .unused,
9919 .unused,12920 .unused,
9920 },12921 },
9921 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},12922 .dst_temps = .{.mem},
9922 .each = .{ .once = &.{12923 .each = .{ .once = &.{
9923 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },12924 .{ ._, ._, .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", ._, ._, ._ },
9925 } },12931 } },
9926 }, .{12932 }, .{
9927 .required_features = .{ .avx, null, null, null },12933 .required_features = .{ .sse2, null, null, null },
9928 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },12934 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
9929 .patterns = &.{12935 .patterns = &.{
9930 .{ .src = .{ .to_sse, .none } },12936 .{ .src = .{ .to_mem, .none } },
9931 },12937 },
9932 .extra_temps = .{12938 .extra_temps = .{
9933 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12939 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9934 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },12940 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
12941 .{ .kind = .{ .rc = .sse } },
12942 .{ .kind = .{ .rc = .sse } },
12943 .unused,
9935 .unused,12944 .unused,
9936 .unused,12945 .unused,
9937 .unused,12946 .unused,
9938 .unused,12947 .unused,
9939 },12948 },
9940 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},12949 .dst_temps = .{.mem},
9941 .each = .{ .once = &.{12950 .each = .{ .once = &.{
9942 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },12951 .{ ._, ._, .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", ._, ._, ._ },
9944 } },12959 } },
9945 }, .{12960 }, .{
9946 .required_features = .{ .sse2, null, null, null },12961 .required_features = .{ .avx2, null, null, null },
9947 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },12962 .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any },
9948 .patterns = &.{12963 .patterns = &.{
9949 .{ .src = .{ .to_mut_sse, .none } },12964 .{ .src = .{ .to_mem, .none } },
9950 },12965 },
9951 .extra_temps = .{12966 .extra_temps = .{
9952 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12967 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9953 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },12968 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12969 .{ .kind = .{ .rc = .sse } },
12970 .{ .kind = .{ .rc = .sse } },
12971 .unused,
9954 .unused,12972 .unused,
9955 .unused,12973 .unused,
9956 .unused,12974 .unused,
9957 .unused,12975 .unused,
9958 },12976 },
9959 .dst_temps = .{.{ .ref = .src0 }},12977 .dst_temps = .{.mem},
9960 .each = .{ .once = &.{12978 .each = .{ .once = &.{
9961 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },12979 .{ ._, ._, .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", ._, ._, ._ },
9963 } },12986 } },
9964 }, .{12987 }, .{
9965 .required_features = .{ .sse, null, null, null },12988 .required_features = .{ .avx, null, null, null },
9966 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },12989 .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any },
9967 .patterns = &.{12990 .patterns = &.{
9968 .{ .src = .{ .to_mut_sse, .none } },12991 .{ .src = .{ .to_mem, .none } },
9969 },12992 },
9970 .extra_temps = .{12993 .extra_temps = .{
9971 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12994 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9972 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },12995 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
12996 .{ .kind = .{ .rc = .sse } },
12997 .{ .kind = .{ .rc = .sse } },
12998 .unused,
9973 .unused,12999 .unused,
9974 .unused,13000 .unused,
9975 .unused,13001 .unused,
9976 .unused,13002 .unused,
9977 },13003 },
9978 .dst_temps = .{.{ .ref = .src0 }},13004 .dst_temps = .{.mem},
9979 .each = .{ .once = &.{13005 .each = .{ .once = &.{
9980 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },13006 .{ ._, ._, .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", ._, ._, ._ },
9982 } },13013 } },
9983 }, .{13014 }, .{
9984 .required_features = .{ .avx2, null, null, null },13015 .required_features = .{ .sse2, null, null, null },
9985 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .xword } }, .any },13016 .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any },
9986 .patterns = &.{13017 .patterns = &.{
9987 .{ .src = .{ .to_sse, .none } },13018 .{ .src = .{ .to_mem, .none } },
9988 },13019 },
9989 .extra_temps = .{13020 .extra_temps = .{
9990 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },13021 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9991 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },13022 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
13023 .{ .kind = .{ .rc = .sse } },
13024 .{ .kind = .{ .rc = .sse } },
13025 .unused,
9992 .unused,13026 .unused,
9993 .unused,13027 .unused,
9994 .unused,13028 .unused,
9995 .unused,13029 .unused,
9996 },13030 },
9997 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},13031 .dst_temps = .{.mem},
9998 .each = .{ .once = &.{13032 .each = .{ .once = &.{
9999 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },13033 .{ ._, ._, .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", ._, ._, ._ },
10001 } },13041 } },
10002 }, .{13042 }, .{
10003 .required_features = .{ .avx, null, null, null },13043 .required_features = .{ .sse, null, null, null },
10004 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .xword } }, .any },13044 .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any },
10005 .patterns = &.{13045 .patterns = &.{
10006 .{ .src = .{ .to_sse, .none } },13046 .{ .src = .{ .to_mem, .none } },
10007 },13047 },
10008 .extra_temps = .{13048 .extra_temps = .{
10009 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },13049 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10010 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },13050 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
13051 .{ .kind = .{ .rc = .sse } },
13052 .{ .kind = .{ .rc = .sse } },
13053 .unused,
10011 .unused,13054 .unused,
10012 .unused,13055 .unused,
10013 .unused,13056 .unused,
10014 .unused,13057 .unused,
10015 },13058 },
10016 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},13059 .dst_temps = .{.mem},
10017 .each = .{ .once = &.{13060 .each = .{ .once = &.{
10018 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },13061 .{ ._, ._, .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", ._, ._, ._ },
10020 } },13069 } },
10021 } }) catch |err| switch (err) {13070 } }) catch |err| switch (err) {
10022 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{13071 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
...@@ -10194,6 +13243,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10194,6 +13243,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10194 .unused,13243 .unused,
10195 .unused,13244 .unused,
10196 .unused,13245 .unused,
13246 .unused,
13247 .unused,
13248 .unused,
10197 },13249 },
10198 .dst_temps = .{.{ .rc = .general_purpose }},13250 .dst_temps = .{.{ .rc = .general_purpose }},
10199 .clobbers = .{ .eflags = true },13251 .clobbers = .{ .eflags = true },
...@@ -10328,6 +13380,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10328,6 +13380,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10328 .unused,13380 .unused,
10329 .unused,13381 .unused,
10330 .unused,13382 .unused,
13383 .unused,
13384 .unused,
13385 .unused,
10331 },13386 },
10332 .dst_temps = .{.{ .cc = cc }},13387 .dst_temps = .{.{ .cc = cc }},
10333 .clobbers = .{ .eflags = true },13388 .clobbers = .{ .eflags = true },
...@@ -10353,6 +13408,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10353,6 +13408,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10353 .unused,13408 .unused,
10354 .unused,13409 .unused,
10355 .unused,13410 .unused,
13411 .unused,
13412 .unused,
13413 .unused,
10356 },13414 },
10357 .dst_temps = .{.{ .cc = cc }},13415 .dst_temps = .{.{ .cc = cc }},
10358 .clobbers = .{ .eflags = true },13416 .clobbers = .{ .eflags = true },
...@@ -10389,6 +13447,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10389,6 +13447,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10389 .unused,13447 .unused,
10390 .unused,13448 .unused,
10391 .unused,13449 .unused,
13450 .unused,
13451 .unused,
13452 .unused,
10392 },13453 },
10393 .dst_temps = .{.{ .cc = cc }},13454 .dst_temps = .{.{ .cc = cc }},
10394 .clobbers = .{ .eflags = true },13455 .clobbers = .{ .eflags = true },
...@@ -10414,6 +13475,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10414,6 +13475,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10414 .unused,13475 .unused,
10415 .unused,13476 .unused,
10416 .unused,13477 .unused,
13478 .unused,
13479 .unused,
13480 .unused,
10417 },13481 },
10418 .dst_temps = .{.{ .cc = cc }},13482 .dst_temps = .{.{ .cc = cc }},
10419 .clobbers = .{ .eflags = true },13483 .clobbers = .{ .eflags = true },
...@@ -10436,6 +13500,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10436,6 +13500,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10436 .unused,13500 .unused,
10437 .unused,13501 .unused,
10438 .unused,13502 .unused,
13503 .unused,
13504 .unused,
13505 .unused,
10439 },13506 },
10440 .dst_temps = .{.{ .cc = cc }},13507 .dst_temps = .{.{ .cc = cc }},
10441 .clobbers = .{ .eflags = true },13508 .clobbers = .{ .eflags = true },
...@@ -10459,6 +13526,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10459,6 +13526,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10459 .unused,13526 .unused,
10460 .unused,13527 .unused,
10461 .unused,13528 .unused,
13529 .unused,
13530 .unused,
13531 .unused,
10462 },13532 },
10463 .dst_temps = .{.{ .cc = cc }},13533 .dst_temps = .{.{ .cc = cc }},
10464 .clobbers = .{ .eflags = true },13534 .clobbers = .{ .eflags = true },
...@@ -10491,6 +13561,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10491,6 +13561,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10491 .unused,13561 .unused,
10492 .unused,13562 .unused,
10493 .unused,13563 .unused,
13564 .unused,
13565 .unused,
13566 .unused,
10494 },13567 },
10495 .dst_temps = .{.{ .cc = cc }},13568 .dst_temps = .{.{ .cc = cc }},
10496 .clobbers = .{ .eflags = true },13569 .clobbers = .{ .eflags = true },
...@@ -10520,6 +13593,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10520,6 +13593,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10520 .unused,13593 .unused,
10521 .unused,13594 .unused,
10522 .unused,13595 .unused,
13596 .unused,
13597 .unused,
13598 .unused,
10523 },13599 },
10524 .dst_temps = .{.{ .cc = cc }},13600 .dst_temps = .{.{ .cc = cc }},
10525 .clobbers = .{ .eflags = true },13601 .clobbers = .{ .eflags = true },
...@@ -10552,6 +13628,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10552,6 +13628,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10552 .unused,13628 .unused,
10553 .unused,13629 .unused,
10554 .unused,13630 .unused,
13631 .unused,
13632 .unused,
13633 .unused,
10555 },13634 },
10556 .dst_temps = .{.{ .cc = cc }},13635 .dst_temps = .{.{ .cc = cc }},
10557 .clobbers = .{ .eflags = true },13636 .clobbers = .{ .eflags = true },
...@@ -10581,6 +13660,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10581,6 +13660,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10581 .unused,13660 .unused,
10582 .unused,13661 .unused,
10583 .unused,13662 .unused,
13663 .unused,
13664 .unused,
13665 .unused,
10584 },13666 },
10585 .dst_temps = .{.{ .cc = cc }},13667 .dst_temps = .{.{ .cc = cc }},
10586 .clobbers = .{ .eflags = true },13668 .clobbers = .{ .eflags = true },
...@@ -10610,6 +13692,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10610,6 +13692,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10610 .unused,13692 .unused,
10611 .unused,13693 .unused,
10612 .unused,13694 .unused,
13695 .unused,
13696 .unused,
13697 .unused,
10613 },13698 },
10614 .dst_temps = .{.{ .cc = cc }},13699 .dst_temps = .{.{ .cc = cc }},
10615 .clobbers = .{ .eflags = true },13700 .clobbers = .{ .eflags = true },
...@@ -10639,6 +13724,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10639,6 +13724,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10639 .unused,13724 .unused,
10640 .unused,13725 .unused,
10641 .unused,13726 .unused,
13727 .unused,
13728 .unused,
13729 .unused,
10642 },13730 },
10643 .dst_temps = .{.{ .cc = cc }},13731 .dst_temps = .{.{ .cc = cc }},
10644 .clobbers = .{ .eflags = true },13732 .clobbers = .{ .eflags = true },
...@@ -10671,6 +13759,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10671,6 +13759,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10671 .unused,13759 .unused,
10672 .unused,13760 .unused,
10673 .unused,13761 .unused,
13762 .unused,
13763 .unused,
13764 .unused,
10674 },13765 },
10675 .dst_temps = .{.{ .cc = cc }},13766 .dst_temps = .{.{ .cc = cc }},
10676 .clobbers = .{ .eflags = true },13767 .clobbers = .{ .eflags = true },
...@@ -10702,6 +13793,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10702,6 +13793,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10702 .unused,13793 .unused,
10703 .unused,13794 .unused,
10704 .unused,13795 .unused,
13796 .unused,
13797 .unused,
13798 .unused,
10705 },13799 },
10706 .dst_temps = .{.{ .cc = cc }},13800 .dst_temps = .{.{ .cc = cc }},
10707 .clobbers = .{ .eflags = true },13801 .clobbers = .{ .eflags = true },
...@@ -10728,6 +13822,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10728,6 +13822,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10728 .unused,13822 .unused,
10729 .unused,13823 .unused,
10730 .unused,13824 .unused,
13825 .unused,
13826 .unused,
13827 .unused,
10731 },13828 },
10732 .dst_temps = .{.{ .cc = switch (cc) {13829 .dst_temps = .{.{ .cc = switch (cc) {
10733 else => unreachable,13830 else => unreachable,
...@@ -10747,7 +13844,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10747,7 +13844,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10747 .patterns = &.{13844 .patterns = &.{
10748 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },13845 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
10749 },13846 },
10750 .call_frame = .{ .size = 0, .alignment = .@"16" },13847 .call_frame = .{ .alignment = .@"16" },
10751 .extra_temps = .{13848 .extra_temps = .{
10752 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {13849 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
10753 else => unreachable,13850 else => unreachable,
...@@ -10759,11 +13856,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10759,11 +13856,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10759 .unused,13856 .unused,
10760 .unused,13857 .unused,
10761 .unused,13858 .unused,
13859 .unused,
13860 .unused,
13861 .unused,
10762 },13862 },
10763 .dst_temps = .{.{ .cc = cc }},13863 .dst_temps = .{.{ .cc = cc }},
10764 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },13864 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10765 .each = .{ .once = &.{13865 .each = .{ .once = &.{
10766 .{ ._, ._, .call, .tmp0p, ._, ._, ._ },13866 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
10767 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },13867 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
10768 } },13868 } },
10769 }, .{13869 }, .{
...@@ -10781,6 +13881,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10781,6 +13881,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10781 .unused,13881 .unused,
10782 .unused,13882 .unused,
10783 .unused,13883 .unused,
13884 .unused,
13885 .unused,
13886 .unused,
10784 },13887 },
10785 .dst_temps = .{.{ .cc = switch (cc) {13888 .dst_temps = .{.{ .cc = switch (cc) {
10786 else => unreachable,13889 else => unreachable,
...@@ -10806,6 +13909,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10806,6 +13909,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10806 .unused,13909 .unused,
10807 .unused,13910 .unused,
10808 .unused,13911 .unused,
13912 .unused,
13913 .unused,
13914 .unused,
10809 },13915 },
10810 .dst_temps = .{.{ .cc = switch (cc) {13916 .dst_temps = .{.{ .cc = switch (cc) {
10811 else => unreachable,13917 else => unreachable,
...@@ -10822,7 +13928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10822,7 +13928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10822 .patterns = &.{13928 .patterns = &.{
10823 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },13929 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
10824 },13930 },
10825 .call_frame = .{ .size = 0, .alignment = .@"16" },13931 .call_frame = .{ .alignment = .@"16" },
10826 .extra_temps = .{13932 .extra_temps = .{
10827 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {13933 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
10828 else => unreachable,13934 else => unreachable,
...@@ -10834,11 +13940,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10834,11 +13940,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10834 .unused,13940 .unused,
10835 .unused,13941 .unused,
10836 .unused,13942 .unused,
13943 .unused,
13944 .unused,
13945 .unused,
10837 },13946 },
10838 .dst_temps = .{.{ .cc = cc }},13947 .dst_temps = .{.{ .cc = cc }},
10839 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },13948 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10840 .each = .{ .once = &.{13949 .each = .{ .once = &.{
10841 .{ ._, ._, .call, .tmp0p, ._, ._, ._ },13950 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
10842 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },13951 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
10843 } },13952 } },
10844 }, .{13953 }, .{
...@@ -10856,6 +13965,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10856,6 +13965,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10856 .unused,13965 .unused,
10857 .unused,13966 .unused,
10858 .unused,13967 .unused,
13968 .unused,
13969 .unused,
13970 .unused,
10859 },13971 },
10860 .dst_temps = .{.{ .cc = switch (cc) {13972 .dst_temps = .{.{ .cc = switch (cc) {
10861 else => unreachable,13973 else => unreachable,
...@@ -10881,6 +13993,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10881,6 +13993,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10881 .unused,13993 .unused,
10882 .unused,13994 .unused,
10883 .unused,13995 .unused,
13996 .unused,
13997 .unused,
13998 .unused,
10884 },13999 },
10885 .dst_temps = .{.{ .cc = switch (cc) {14000 .dst_temps = .{.{ .cc = switch (cc) {
10886 else => unreachable,14001 else => unreachable,
...@@ -10897,7 +14012,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10897,7 +14012,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10897 .patterns = &.{14012 .patterns = &.{
10898 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },14013 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
10899 },14014 },
10900 .call_frame = .{ .size = 0, .alignment = .@"16" },14015 .call_frame = .{ .alignment = .@"16" },
10901 .extra_temps = .{14016 .extra_temps = .{
10902 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {14017 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
10903 else => unreachable,14018 else => unreachable,
...@@ -10909,11 +14024,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10909,11 +14024,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10909 .unused,14024 .unused,
10910 .unused,14025 .unused,
10911 .unused,14026 .unused,
14027 .unused,
14028 .unused,
14029 .unused,
10912 },14030 },
10913 .dst_temps = .{.{ .cc = cc }},14031 .dst_temps = .{.{ .cc = cc }},
10914 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },14032 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10915 .each = .{ .once = &.{14033 .each = .{ .once = &.{
10916 .{ ._, ._, .call, .tmp0p, ._, ._, ._ },14034 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
10917 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },14035 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
10918 } },14036 } },
10919 }, .{14037 }, .{
...@@ -10929,6 +14047,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10929,6 +14047,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10929 .unused,14047 .unused,
10930 .unused,14048 .unused,
10931 .unused,14049 .unused,
14050 .unused,
14051 .unused,
14052 .unused,
10932 },14053 },
10933 .dst_temps = .{.{ .cc = switch (cc) {14054 .dst_temps = .{.{ .cc = switch (cc) {
10934 else => unreachable,14055 else => unreachable,
...@@ -10957,6 +14078,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10957,6 +14078,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10957 .unused,14078 .unused,
10958 .unused,14079 .unused,
10959 .unused,14080 .unused,
14081 .unused,
14082 .unused,
14083 .unused,
10960 },14084 },
10961 .dst_temps = .{.{ .cc = switch (cc) {14085 .dst_temps = .{.{ .cc = switch (cc) {
10962 else => unreachable,14086 else => unreachable,
...@@ -10977,7 +14101,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10977,7 +14101,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10977 .extra_temps = .{14101 .extra_temps = .{
10978 .{ .type = .f80, .kind = .{ .reg = .st6 } },14102 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10979 .{ .type = .f80, .kind = .{ .reg = .st7 } },14103 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10980 .{ .type = .u16, .kind = .{ .reg = .ax } },14104 .{ .type = .u8, .kind = .{ .reg = .ah } },
14105 .unused,
14106 .unused,
14107 .unused,
10981 .unused,14108 .unused,
10982 .unused,14109 .unused,
10983 .unused,14110 .unused,
...@@ -11004,10 +14131,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11004,10 +14131,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11004 .extra_temps = .{14131 .extra_temps = .{
11005 .{ .type = .f80, .kind = .{ .reg = .st6 } },14132 .{ .type = .f80, .kind = .{ .reg = .st6 } },
11006 .{ .type = .f80, .kind = .{ .reg = .st7 } },14133 .{ .type = .f80, .kind = .{ .reg = .st7 } },
11007 .{ .type = .u16, .kind = .{ .reg = .ax } },
11008 .{ .type = .u8, .kind = .{ .reg = .ah } },14134 .{ .type = .u8, .kind = .{ .reg = .ah } },
11009 .unused,14135 .unused,
11010 .unused,14136 .unused,
14137 .unused,
14138 .unused,
14139 .unused,
14140 .unused,
11011 },14141 },
11012 .dst_temps = .{.{ .cc = cc }},14142 .dst_temps = .{.{ .cc = cc }},
11013 .clobbers = .{ .eflags = true },14143 .clobbers = .{ .eflags = true },
...@@ -11016,8 +14146,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11016,8 +14146,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11016 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },14146 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
11017 .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },14147 .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
11018 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },14148 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
11019 .{ ._, ._, .xor, .tmp3b, .si(0b0_1_000_000), ._, ._ },14149 .{ ._, ._, .xor, .tmp2b, .si(0b0_1_000_000), ._, ._ },
11020 .{ ._, ._, .@"test", .tmp3b, .si(0b0_1_000_100), ._, ._ },14150 .{ ._, ._, .@"test", .tmp2b, .si(0b0_1_000_100), ._, ._ },
11021 } },14151 } },
11022 }, .{14152 }, .{
11023 .required_features = .{ .x87, null, null, null },14153 .required_features = .{ .x87, null, null, null },
...@@ -11028,7 +14158,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11028,7 +14158,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11028 .extra_temps = .{14158 .extra_temps = .{
11029 .{ .type = .f80, .kind = .{ .reg = .st6 } },14159 .{ .type = .f80, .kind = .{ .reg = .st6 } },
11030 .{ .type = .f80, .kind = .{ .reg = .st7 } },14160 .{ .type = .f80, .kind = .{ .reg = .st7 } },
11031 .{ .type = .u16, .kind = .{ .reg = .ax } },14161 .{ .type = .u8, .kind = .{ .reg = .ah } },
14162 .unused,
14163 .unused,
14164 .unused,
11032 .unused,14165 .unused,
11033 .unused,14166 .unused,
11034 .unused,14167 .unused,
...@@ -11057,7 +14190,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11057,7 +14190,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11057 .extra_temps = .{14190 .extra_temps = .{
11058 .{ .type = .f80, .kind = .{ .reg = .st6 } },14191 .{ .type = .f80, .kind = .{ .reg = .st6 } },
11059 .{ .type = .f80, .kind = .{ .reg = .st7 } },14192 .{ .type = .f80, .kind = .{ .reg = .st7 } },
11060 .{ .type = .u16, .kind = .{ .reg = .ax } },14193 .{ .type = .u16, .kind = .{ .reg = .ah } },
14194 .unused,
14195 .unused,
14196 .unused,
11061 .unused,14197 .unused,
11062 .unused,14198 .unused,
11063 .unused,14199 .unused,
...@@ -11085,10 +14221,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11085,10 +14221,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11085 .extra_temps = .{14221 .extra_temps = .{
11086 .{ .type = .f80, .kind = .{ .reg = .st6 } },14222 .{ .type = .f80, .kind = .{ .reg = .st6 } },
11087 .{ .type = .f80, .kind = .{ .reg = .st7 } },14223 .{ .type = .f80, .kind = .{ .reg = .st7 } },
11088 .{ .type = .u16, .kind = .{ .reg = .ax } },
11089 .{ .type = .u8, .kind = .{ .reg = .ah } },14224 .{ .type = .u8, .kind = .{ .reg = .ah } },
11090 .unused,14225 .unused,
11091 .unused,14226 .unused,
14227 .unused,
14228 .unused,
14229 .unused,
14230 .unused,
11092 },14231 },
11093 .dst_temps = .{.{ .cc = cc }},14232 .dst_temps = .{.{ .cc = cc }},
11094 .clobbers = .{ .eflags = true },14233 .clobbers = .{ .eflags = true },
...@@ -11096,8 +14235,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11096,8 +14235,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11096 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },14235 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
11097 .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },14236 .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
11098 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },14237 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
11099 .{ ._, ._, .xor, .tmp3b, .si(0b0_1_000_000), ._, ._ },14238 .{ ._, ._, .xor, .tmp2b, .si(0b0_1_000_000), ._, ._ },
11100 .{ ._, ._, .@"test", .tmp3b, .si(0b0_1_000_100), ._, ._ },14239 .{ ._, ._, .@"test", .tmp2b, .si(0b0_1_000_100), ._, ._ },
11101 } },14240 } },
11102 }, .{14241 }, .{
11103 .required_features = .{ .x87, null, null, null },14242 .required_features = .{ .x87, null, null, null },
...@@ -11110,7 +14249,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11110,7 +14249,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11110 .extra_temps = .{14249 .extra_temps = .{
11111 .{ .type = .f80, .kind = .{ .reg = .st6 } },14250 .{ .type = .f80, .kind = .{ .reg = .st6 } },
11112 .{ .type = .f80, .kind = .{ .reg = .st7 } },14251 .{ .type = .f80, .kind = .{ .reg = .st7 } },
11113 .{ .type = .u16, .kind = .{ .reg = .ax } },14252 .{ .type = .u16, .kind = .{ .reg = .ah } },
14253 .unused,
14254 .unused,
14255 .unused,
11114 .unused,14256 .unused,
11115 .unused,14257 .unused,
11116 .unused,14258 .unused,
...@@ -11133,7 +14275,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11133,7 +14275,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11133 .patterns = &.{14275 .patterns = &.{
11134 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },14276 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
11135 },14277 },
11136 .call_frame = .{ .size = 0, .alignment = .@"16" },14278 .call_frame = .{ .alignment = .@"16" },
11137 .extra_temps = .{14279 .extra_temps = .{
11138 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {14280 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
11139 else => unreachable,14281 else => unreachable,
...@@ -11145,11 +14287,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11145,11 +14287,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11145 .unused,14287 .unused,
11146 .unused,14288 .unused,
11147 .unused,14289 .unused,
14290 .unused,
14291 .unused,
14292 .unused,
11148 },14293 },
11149 .dst_temps = .{.{ .cc = cc }},14294 .dst_temps = .{.{ .cc = cc }},
11150 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },14295 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
11151 .each = .{ .once = &.{14296 .each = .{ .once = &.{
11152 .{ ._, ._, .call, .tmp0p, ._, ._, ._ },14297 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
11153 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },14298 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
11154 } },14299 } },
11155 } },14300 } },
...@@ -11753,7 +14898,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11753,7 +14898,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1175314898
11754 .err_return_trace => {14899 .err_return_trace => {
11755 const ert: Temp = .{ .index = err_ret_trace_index };14900 const ert: Temp = .{ .index = err_ret_trace_index };
11756 try ert.moveTo(inst, cg);14901 try ert.finish(inst, &.{}, &.{}, cg);
11757 },14902 },
11758 .set_err_return_trace => {14903 .set_err_return_trace => {
11759 const un_op = air_datas[@intFromEnum(inst)].un_op;14904 const un_op = air_datas[@intFromEnum(inst)].un_op;
...@@ -11788,7 +14933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11788,7 +14933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11788 var ert: Temp = .{ .index = err_ret_trace_index };14933 var ert: Temp = .{ .index = err_ret_trace_index };
11789 var res = try ert.load(.usize, .{ .disp = @intCast(agg_ty.structFieldOffset(ty_pl.payload, zcu)) }, cg);14934 var res = try ert.load(.usize, .{ .disp = @intCast(agg_ty.structFieldOffset(ty_pl.payload, zcu)) }, cg);
11790 try ert.die(cg);14935 try ert.die(cg);
11791 try res.moveTo(inst, cg);14936 try res.finish(inst, &.{}, &.{}, cg);
11792 },14937 },
1179314938
11794 .vector_store_elem => return cg.fail("TODO implement vector_store_elem", .{}),14939 .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...@@ -23113,7 +26258,11 @@ fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index
23113 .resurrect = true,26258 .resurrect = true,
23114 .close_scope = true,26259 .close_scope = true,
23115 });26260 });
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);
23117 }26266 }
2311826267
23119 if (std.debug.runtime_safety) assert(self.inst_tracking.getIndex(inst).? == inst_tracking_i);26268 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)...@@ -24623,13 +27772,15 @@ fn moveStrategy(self: *CodeGen, ty: Type, class: Register.Class, aligned: bool)
24623 64 => switch (ty.vectorLen(zcu)) {27772 64 => switch (ty.vectorLen(zcu)) {
24624 1...2 => return .{ .move = if (self.hasFeature(.avx))27773 1...2 => return .{ .move = if (self.hasFeature(.avx))
24625 .{ .v_pd, if (aligned) .mova else .movu }27774 .{ .v_pd, if (aligned) .mova else .movu }
27775 else if (self.hasFeature(.sse2))
27776 .{ ._pd, if (aligned) .mova else .movu }
24626 else27777 else
24627 .{ ._pd, if (aligned) .mova else .movu } },27778 .{ ._ps, if (aligned) .mova else .movu } },
24628 3...4 => if (self.hasFeature(.avx))27779 3...4 => if (self.hasFeature(.avx))
24629 return .{ .move = .{ .v_pd, if (aligned) .mova else .movu } },27780 return .{ .move = .{ .v_pd, if (aligned) .mova else .movu } },
24630 else => {},27781 else => {},
24631 },27782 },
24632 128 => switch (ty.vectorLen(zcu)) {27783 80, 128 => switch (ty.vectorLen(zcu)) {
24633 1 => return .{ .move = if (self.hasFeature(.avx))27784 1 => return .{ .move = if (self.hasFeature(.avx))
24634 .{ if (aligned) .v_dqa else .v_dqu, .mov }27785 .{ if (aligned) .v_dqa else .v_dqu, .mov }
24635 else if (self.hasFeature(.sse2))27786 else if (self.hasFeature(.sse2))
...@@ -24958,7 +28109,7 @@ fn genSetReg(...@@ -24958,7 +28109,7 @@ fn genSetReg(
24958 },28109 },
24959 .mmx => unreachable,28110 .mmx => unreachable,
24960 .sse => switch (src_reg.class()) {28111 .sse => switch (src_reg.class()) {
24961 .general_purpose => try self.asmRegisterRegister(28112 .general_purpose => if (self.hasFeature(.sse2)) try self.asmRegisterRegister(
24962 switch (abi_size) {28113 switch (abi_size) {
24963 1...4 => if (self.hasFeature(.avx)) .{ .v_d, .mov } else .{ ._d, .mov },28114 1...4 => if (self.hasFeature(.avx)) .{ .v_d, .mov } else .{ ._d, .mov },
24964 5...8 => if (self.hasFeature(.avx)) .{ .v_q, .mov } else .{ ._q, .mov },28115 5...8 => if (self.hasFeature(.avx)) .{ .v_q, .mov } else .{ ._q, .mov },
...@@ -24966,7 +28117,26 @@ fn genSetReg(...@@ -24966,7 +28117,26 @@ fn genSetReg(
24966 },28117 },
24967 dst_reg.to128(),28118 dst_reg.to128(),
24968 registerAlias(src_reg, @max(abi_size, 4)),28119 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 },
24970 .segment => try self.genSetReg(28140 .segment => try self.genSetReg(
24971 dst_reg,28141 dst_reg,
24972 ty,28142 ty,
...@@ -24977,7 +28147,12 @@ fn genSetReg(...@@ -24977,7 +28147,12 @@ fn genSetReg(
24977 .sse => try self.asmRegisterRegister(28147 .sse => try self.asmRegisterRegister(
24978 @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) {28148 @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) {
24979 else => switch (abi_size) {28149 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 },
24981 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null,28156 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null,
24982 else => null,28157 else => null,
24983 },28158 },
...@@ -24985,13 +28160,20 @@ fn genSetReg(...@@ -24985,13 +28160,20 @@ fn genSetReg(
24985 16, 128 => switch (abi_size) {28160 16, 128 => switch (abi_size) {
24986 2...16 => if (self.hasFeature(.avx))28161 2...16 => if (self.hasFeature(.avx))
24987 .{ .v_dqa, .mov }28162 .{ .v_dqa, .mov }
28163 else if (self.hasFeature(.sse2))
28164 .{ ._dqa, .mov }
24988 else28165 else
24989 .{ ._dqa, .mov },28166 .{ ._ps, .mova },
24990 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null,28167 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null,
24991 else => null,28168 else => null,
24992 },28169 },
24993 32 => if (self.hasFeature(.avx)) .{ .v_ps, .mova } else .{ ._ps, .mova },28170 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 },
24995 80 => null,28177 80 => null,
24996 else => unreachable,28178 else => unreachable,
24997 },28179 },
...@@ -25688,15 +28870,19 @@ fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void {...@@ -25688,15 +28870,19 @@ fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void {
25688 const src_lock = if (src_mcv.getReg()) |src_reg| self.register_manager.lockReg(src_reg) else null;28870 const src_lock = if (src_mcv.getReg()) |src_reg| self.register_manager.lockReg(src_reg) else null;
25689 defer if (src_lock) |lock| self.register_manager.unlockReg(lock);28871 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) and28873 const dst_mcv = if (src_mcv != .register_mask and
28874 (if (src_mcv.getReg()) |src_reg| src_reg.class() == .general_purpose else true) and
25692 dst_rc.supersetOf(src_rc) and dst_ty.abiSize(zcu) <= src_ty.abiSize(zcu) and28875 dst_rc.supersetOf(src_rc) and dst_ty.abiSize(zcu) <= src_ty.abiSize(zcu) and
25693 dst_ty.abiAlignment(zcu).order(src_ty.abiAlignment(zcu)).compare(.lte) and28876 dst_ty.abiAlignment(zcu).order(src_ty.abiAlignment(zcu)).compare(.lte) and
25694 self.reuseOperand(inst, ty_op.operand, 0, src_mcv)) src_mcv else dst: {28877 self.reuseOperand(inst, ty_op.operand, 0, src_mcv)) src_mcv else dst: {
25695 const dst_mcv = try self.allocRegOrMem(inst, true);28878 const dst_mcv = try self.allocRegOrMem(inst, true);
25696 try self.genCopy(switch (std.math.order(dst_ty.abiSize(zcu), src_ty.abiSize(zcu))) {28879 try self.genCopy(switch (src_mcv) {
25697 .lt => dst_ty,28880 else => switch (std.math.order(dst_ty.abiSize(zcu), src_ty.abiSize(zcu))) {
25698 .eq => if (!dst_mcv.isBase() or src_mcv.isBase()) dst_ty else src_ty,28881 .lt => dst_ty,
25699 .gt => src_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,
25700 }, dst_mcv, src_mcv, .{});28886 }, dst_mcv, src_mcv, .{});
25701 break :dst dst_mcv;28887 break :dst dst_mcv;
25702 };28888 };
...@@ -31173,7 +34359,7 @@ const Select = struct {...@@ -31173,7 +34359,7 @@ const Select = struct {
31173 dst_constraints: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]Constraint = @splat(.any),34359 dst_constraints: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]Constraint = @splat(.any),
31174 src_constraints: [@intFromEnum(Select.Operand.Ref.none) - @intFromEnum(Select.Operand.Ref.src0)]Constraint = @splat(.any),34360 src_constraints: [@intFromEnum(Select.Operand.Ref.none) - @intFromEnum(Select.Operand.Ref.src0)]Constraint = @splat(.any),
31175 patterns: []const Select.Pattern,34361 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 },
31177 extra_temps: [@intFromEnum(Select.Operand.Ref.dst0) - @intFromEnum(Select.Operand.Ref.tmp0)]TempSpec = @splat(.unused),34363 extra_temps: [@intFromEnum(Select.Operand.Ref.dst0) - @intFromEnum(Select.Operand.Ref.tmp0)]TempSpec = @splat(.unused),
31178 dst_temps: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused),34364 dst_temps: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused),
31179 clobbers: packed struct {34365 clobbers: packed struct {
...@@ -31202,14 +34388,16 @@ const Select = struct {...@@ -31202,14 +34388,16 @@ const Select = struct {
31202 multiple_size: Memory.Size,34388 multiple_size: Memory.Size,
31203 int: Memory.Size,34389 int: Memory.Size,
31204 scalar_int_is: Memory.Size,34390 scalar_int_is: Memory.Size,
31205 scalar_int: struct { of: Memory.Size, is: Memory.Size },34391 scalar_int: OfIsSizes,
31206 scalar_signed_int: Memory.Size,34392 scalar_signed_int: Memory.Size,
31207 scalar_unsigned_int: Memory.Size,34393 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,
31209 float: Memory.Size,34396 float: Memory.Size,
31210 scalar_float: struct { of: Memory.Size, is: Memory.Size },34397 scalar_any_float: Memory.Size,
31211 scalar_exact_float: struct { of: Memory.Size, is: Memory.Size },34398 scalar_float: OfIsSizes,
31212 multiple_scalar_int: struct { of: Memory.Size, is: Memory.Size },34399 multiple_scalar_any_float: Memory.Size,
34400 multiple_scalar_float: OfIsSizes,
31213 exact_int: u16,34401 exact_int: u16,
31214 exact_signed_int: u16,34402 exact_signed_int: u16,
31215 exact_unsigned_int: u16,34403 exact_unsigned_int: u16,
...@@ -31218,16 +34406,18 @@ const Select = struct {...@@ -31218,16 +34406,18 @@ const Select = struct {
31218 po2_int: Memory.Size,34406 po2_int: Memory.Size,
31219 signed_po2_int: Memory.Size,34407 signed_po2_int: Memory.Size,
31220 unsigned_po2_or_exact_int: Memory.Size,34408 unsigned_po2_or_exact_int: Memory.Size,
31221 remainder_int: struct { of: Memory.Size, is: Memory.Size },34409 remainder_int: OfIsSizes,
31222 exact_remainder_int: struct { of: Memory.Size, is: Memory.Size },34410 exact_remainder_int: OfIsSizes,
31223 signed_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size },34411 signed_or_exact_remainder_int: OfIsSizes,
31224 unsigned_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size },34412 unsigned_or_exact_remainder_int: OfIsSizes,
31225 signed_int: Memory.Size,34413 signed_int: Memory.Size,
31226 unsigned_int: Memory.Size,34414 unsigned_int: Memory.Size,
31227 elem_size_is: u8,34415 elem_size_is: u8,
31228 po2_elem_size,34416 po2_elem_size,
31229 elem_int: Memory.Size,34417 elem_int: Memory.Size,
3123034418
34419 const OfIsSizes = struct { of: Memory.Size, is: Memory.Size };
34420
31231 fn accepts(constraint: Constraint, ty: Type, cg: *CodeGen) bool {34421 fn accepts(constraint: Constraint, ty: Type, cg: *CodeGen) bool {
31232 const zcu = cg.pt.zcu;34422 const zcu = cg.pt.zcu;
31233 return switch (constraint) {34423 return switch (constraint) {
...@@ -31258,7 +34448,7 @@ const Select = struct {...@@ -31258,7 +34448,7 @@ const Select = struct {
31258 size.bitSize(cg.target) >= int_info.bits34448 size.bitSize(cg.target) >= int_info.bits
31259 else34449 else
31260 false,34450 false,
31261 .scalar_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and34451 .scalar_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
31262 if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false,34452 if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false,
31263 .scalar_signed_int => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) {34453 .scalar_signed_int => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) {
31264 .signed => size.bitSize(cg.target) >= int_info.bits,34454 .signed => size.bitSize(cg.target) >= int_info.bits,
...@@ -31275,9 +34465,13 @@ const Select = struct {...@@ -31275,9 +34465,13 @@ const Select = struct {
31275 else34465 else
31276 false,34466 false,
31277 .float => |size| if (cg.floatBits(ty)) |float_bits| size.bitSize(cg.target) == float_bits else false,34467 .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) and34468 .scalar_any_float => |size| @divExact(size.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,34469 cg.floatBits(ty.scalarType(zcu)) != null,
31280 .scalar_exact_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and34470 .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
31281 if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) == float_bits else false,34475 if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) == float_bits else false,
31282 .exact_int => |bit_size| if (cg.intInfo(ty)) |int_info| bit_size == int_info.bits else false,34476 .exact_int => |bit_size| if (cg.intInfo(ty)) |int_info| bit_size == int_info.bits else false,
31283 .exact_signed_int => |bit_size| if (cg.intInfo(ty)) |int_info| switch (int_info.signedness) {34477 .exact_signed_int => |bit_size| if (cg.intInfo(ty)) |int_info| switch (int_info.signedness) {
...@@ -31505,48 +34699,81 @@ const Select = struct {...@@ -31505,48 +34699,81 @@ const Select = struct {
31505 unused,34699 unused,
31506 any,34700 any,
31507 cc: Condition,34701 cc: Condition,
34702 ref: Select.Operand.Ref,
31508 reg: Register,34703 reg: Register,
31509 rc: Register.Class,34704 rc: Register.Class,
34705 mut_rc: struct { ref: Select.Operand.Ref, rc: Register.Class },
34706 ref_mask: struct { ref: Select.Operand.Ref, info: MaskInfo },
31510 rc_mask: struct { rc: Register.Class, info: MaskInfo },34707 rc_mask: struct { rc: Register.Class, info: MaskInfo },
34708 mut_rc_mask: struct { ref: Select.Operand.Ref, rc: Register.Class, info: MaskInfo },
31511 mem,34709 mem,
31512 smin_mem: ConstInfo,34710 smin_mem: ConstInfo,
31513 smax_mem: ConstInfo,34711 smax_mem: ConstInfo,
31514 umin_mem: ConstInfo,34712 umin_mem: ConstInfo,
31515 umax_mem: ConstInfo,34713 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 },
31519 symbol: *const struct { lib: ?[]const u8 = null, name: []const u8 },34714 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
31523 fn finish(kind: Kind, temp: Temp, s: *const Select) void {34718 fn finish(kind: Kind, temp: Temp, s: *const Select) void {
31524 switch (kind) {34719 switch (kind) {
31525 else => {},34720 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),
31527 }34722 }
31528 }34723 }
31529 };34724 };
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 {
31532 const cg = s.cg;34735 const cg = s.cg;
31533 return switch (spec.kind) {34736 return switch (spec.kind) {
31534 .unused => null,34737 .unused => unreachable,
31535 .any => try cg.tempAlloc(spec.type),34738 .any => try cg.tempAlloc(spec.type),
31536 .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }),34739 .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }),
34740 .ref => |ref| ref.deref(s),
31537 .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }),34741 .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }),
31538 .rc => |rc| try cg.tempAllocReg(spec.type, regSetForRegClass(rc)),34742 .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),
31539 .rc_mask => |rc_mask| try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)),34753 .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 },
31540 .mem => try cg.tempAllocMem(spec.type),34763 .mem => try cg.tempAllocMem(spec.type),
31541 .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| {34764 .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| {
31542 const pt = cg.pt;34765 const pt = cg.pt;
31543 const zcu = pt.zcu;34766 const zcu = pt.zcu;
31544 const ip = &zcu.intern_pool;34767 const ip = &zcu.intern_pool;
31545 const ty = const_info.ref.deref(s).typeOf(s.cg);34768 const ty = const_info.ref.deref(s).typeOf(cg);
31546 const vector_len: ?u32, const scalar_ty: Type = switch (ip.indexToKey(ty.toIntern())) {34769 const vector_len, const scalar_ty: Type = switch (ip.indexToKey(ty.toIntern())) {
31547 else => .{ if (const_info.vectorize) 1 else null, ty },34770 else => .{ null, ty },
31548 .vector_type => |vector_type| .{ vector_type.len, .fromInterned(vector_type.child) },34771 .vector_type => |vector_type| .{ vector_type.len, .fromInterned(vector_type.child) },
31549 };34772 };
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;
31550 const res_scalar_ty, const res_scalar_val: Value = res_scalar: switch (scalar_ty.toIntern()) {34777 const res_scalar_ty, const res_scalar_val: Value = res_scalar: switch (scalar_ty.toIntern()) {
31551 .bool_type => .{34778 .bool_type => .{
31552 scalar_ty,34779 scalar_ty,
...@@ -31591,7 +34818,7 @@ const Select = struct {...@@ -31591,7 +34818,7 @@ const Select = struct {
31591 break :res_scalar .{ scalar_int_ty, try pt.intValue_big(scalar_int_ty, big_int.toConst()) };34818 break :res_scalar .{ scalar_int_ty, try pt.intValue_big(scalar_int_ty, big_int.toConst()) };
31592 },34819 },
31593 };34820 };
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 = .{
31595 .ty = (try pt.vectorType(.{34822 .ty = (try pt.vectorType(.{
31596 .len = len,34823 .len = len,
31597 .child = res_scalar_ty.toIntern(),34824 .child = res_scalar_ty.toIntern(),
...@@ -31600,17 +34827,6 @@ const Select = struct {...@@ -31600,17 +34827,6 @@ const Select = struct {
31600 } })) else res_scalar_val;34827 } })) else res_scalar_val;
31601 return try cg.tempFromValue(res_val);34828 return try cg.tempFromValue(res_val);
31602 },34829 },
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 },
31614 .symbol => |symbol| if (cg.bin_file.cast(.elf)) |elf_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{34830 .symbol => |symbol| if (cg.bin_file.cast(.elf)) |elf_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{
31615 .sym_index = try elf_file.getGlobalSymbol(symbol.name, symbol.lib),34831 .sym_index = try elf_file.getGlobalSymbol(symbol.name, symbol.lib),
31616 } }) else if (cg.bin_file.cast(.macho)) |macho_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{34832 } }) else if (cg.bin_file.cast(.macho)) |macho_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{
...@@ -31707,6 +34923,9 @@ const Select = struct {...@@ -31707,6 +34923,9 @@ const Select = struct {
31707 tmp3,34923 tmp3,
31708 tmp4,34924 tmp4,
31709 tmp5,34925 tmp5,
34926 tmp6,
34927 tmp7,
34928 tmp8,
31710 dst0,34929 dst0,
31711 src0,34930 src0,
31712 src1,34931 src1,
...@@ -31778,6 +34997,36 @@ const Select = struct {...@@ -31778,6 +34997,36 @@ const Select = struct {
31778 const tmp5x: Sized = .{ .ref = .tmp5, .size = .xword };34997 const tmp5x: Sized = .{ .ref = .tmp5, .size = .xword };
31779 const tmp5y: Sized = .{ .ref = .tmp5, .size = .yword };34998 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
31781 const dst0: Sized = .{ .ref = .dst0, .size = .none };35030 const dst0: Sized = .{ .ref = .dst0, .size = .none };
31782 const dst0b: Sized = .{ .ref = .dst0, .size = .byte };35031 const dst0b: Sized = .{ .ref = .dst0, .size = .byte };
31783 const dst0w: Sized = .{ .ref = .dst0, .size = .word };35032 const dst0w: Sized = .{ .ref = .dst0, .size = .word };
...@@ -31875,6 +35124,33 @@ const Select = struct {...@@ -31875,6 +35124,33 @@ const Select = struct {
31875 const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x };35124 const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x };
31876 const tmp5y: Select.Operand = .{ .tag = .ref, .base = .tmp5y };35125 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
31878 const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b };35154 const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b };
31879 const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w };35155 const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w };
31880 const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d };35156 const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d };
...@@ -32204,14 +35480,20 @@ fn select(...@@ -32204,14 +35480,20 @@ fn select(
32204 const src_slots = s.temps[@intFromEnum(Select.Operand.Ref.src0)..@intFromEnum(Select.Operand.Ref.none)];35480 const src_slots = s.temps[@intFromEnum(Select.Operand.Ref.src0)..@intFromEnum(Select.Operand.Ref.none)];
3220535481
32206 caller_preserved: {35482 caller_preserved: {
32207 switch (switch (case.clobbers.caller_preserved) {35483 const cc = switch (case.clobbers.caller_preserved) {
32208 .none => break :caller_preserved,35484 .none => break :caller_preserved,
32209 .ccc => cg.target.cCallingConvention().?,35485 .ccc => cg.target.cCallingConvention().?,
32210 .zigcc => .auto,35486 .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) {
32212 else => unreachable,35493 else => unreachable,
32213 inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| {35494 inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| skip: {
32214 const tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse continue;35495 if (reg == err_ret_trace_reg) break :skip;
35496 const tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse break :skip;
32215 try cg.register_manager.getRegIndex(tracked_index, null);35497 try cg.register_manager.getRegIndex(tracked_index, null);
32216 assert(cg.register_manager.lockRegIndexAssumeUnused(tracked_index).tracked_index == tracked_index);35498 assert(cg.register_manager.lockRegIndexAssumeUnused(tracked_index).tracked_index == tracked_index);
32217 },35499 },
...@@ -32220,7 +35502,9 @@ fn select(...@@ -32220,7 +35502,9 @@ fn select(
3222035502
32221 @memcpy(src_slots[0..src_temps.len], src_temps);35503 @memcpy(src_slots[0..src_temps.len], src_temps);
32222 std.mem.swap(Temp, &src_slots[pattern.commute[0]], &src_slots[pattern.commute[1]]);35504 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
32225 while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| {35509 while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| {
32226 if (try src_pattern.convert(src_temp, cg)) break;35510 if (try src_pattern.convert(src_temp, cg)) break;
...@@ -32231,7 +35515,7 @@ fn select(...@@ -32231,7 +35515,7 @@ fn select(
32231 if (case.clobbers.eflags) try cg.spillEflagsIfOccupied();35515 if (case.clobbers.eflags) try cg.spillEflagsIfOccupied();
3223235516
32233 for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind|35517 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));
32235 @memcpy(dst_slots[0..dst_temps.len], dst_temps);35519 @memcpy(dst_slots[0..dst_temps.len], dst_temps);
3223635520
32237 switch (case.each) {35521 switch (case.each) {
...@@ -32243,16 +35527,20 @@ fn select(...@@ -32243,16 +35527,20 @@ fn select(
32243 assert(s.top == 0);35527 assert(s.top == 0);
3224435528
32245 caller_preserved: {35529 caller_preserved: {
32246 switch (switch (case.clobbers.caller_preserved) {35530 const cc = switch (case.clobbers.caller_preserved) {
32247 .none => break :caller_preserved,35531 .none => break :caller_preserved,
32248 .ccc => cg.target.cCallingConvention().?,35532 .ccc => cg.target.cCallingConvention().?,
32249 .zigcc => .auto,35533 .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) {
32251 else => unreachable,35540 else => unreachable,
32252 inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| {35541 inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| skip: {
32253 cg.register_manager.unlockReg(.{35542 if (reg == err_ret_trace_reg) break :skip;
32254 .tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse continue,35543 cg.register_manager.unlockReg(.{ .tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse break :skip });
32255 });
32256 },35544 },
32257 }35545 }
32258 }35546 }
src/arch/x86_64/bits.zig+1
...@@ -366,6 +366,7 @@ pub const Register = enum(u8) {...@@ -366,6 +366,7 @@ pub const Register = enum(u8) {
366 @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax),366 @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax),
367 @intFromEnum(Register.ax) ... @intFromEnum(Register.r15w) => @intFromEnum(Register.ax),367 @intFromEnum(Register.ax) ... @intFromEnum(Register.r15w) => @intFromEnum(Register.ax),
368 @intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => @intFromEnum(Register.al),368 @intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => @intFromEnum(Register.al),
369 @intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => @intFromEnum(Register.ah),
369 else => unreachable,370 else => unreachable,
370 // zig fmt: on371 // zig fmt: on
371 };372 };
src/codegen/c.zig+98-98
...@@ -706,7 +706,7 @@ pub const DeclGen = struct {...@@ -706,7 +706,7 @@ pub const DeclGen = struct {
706 const uav_ty = uav_val.typeOf(zcu);706 const uav_ty = uav_val.typeOf(zcu);
707707
708 // Render an undefined pointer if we have a pointer to a zero-bit or comptime type.708 // 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);
710 if (ptr_ty.isPtrAtRuntime(zcu) and !uav_ty.isFnOrHasRuntimeBits(zcu)) {710 if (ptr_ty.isPtrAtRuntime(zcu) and !uav_ty.isFnOrHasRuntimeBits(zcu)) {
711 return dg.writeCValue(writer, .{ .undef = ptr_ty });711 return dg.writeCValue(writer, .{ .undef = ptr_ty });
712 }712 }
...@@ -782,7 +782,7 @@ pub const DeclGen = struct {...@@ -782,7 +782,7 @@ pub const DeclGen = struct {
782 };782 };
783783
784 // Render an undefined pointer if we have a pointer to a zero-bit or comptime type.784 // 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));
786 const ptr_ty = try pt.navPtrType(owner_nav);786 const ptr_ty = try pt.navPtrType(owner_nav);
787 if (!nav_ty.isFnOrHasRuntimeBits(zcu)) {787 if (!nav_ty.isFnOrHasRuntimeBits(zcu)) {
788 return dg.writeCValue(writer, .{ .undef = ptr_ty });788 return dg.writeCValue(writer, .{ .undef = ptr_ty });
...@@ -819,7 +819,7 @@ pub const DeclGen = struct {...@@ -819,7 +819,7 @@ pub const DeclGen = struct {
819 .comptime_alloc_ptr, .comptime_field_ptr => unreachable,819 .comptime_alloc_ptr, .comptime_field_ptr => unreachable,
820 .int => |int| {820 .int => |int| {
821 const ptr_ctype = try dg.ctypeFromType(int.ptr_ty, .complete);821 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);
823 try writer.writeByte('(');823 try writer.writeByte('(');
824 try dg.renderCType(writer, ptr_ctype);824 try dg.renderCType(writer, ptr_ctype);
825 try writer.print("){x}", .{try dg.fmtIntLiteral(addr_val, .Other)});825 try writer.print("){x}", .{try dg.fmtIntLiteral(addr_val, .Other)});
...@@ -859,7 +859,7 @@ pub const DeclGen = struct {...@@ -859,7 +859,7 @@ pub const DeclGen = struct {
859 try writer.writeByte('(');859 try writer.writeByte('(');
860 try dg.renderCType(writer, ptr_ctype);860 try dg.renderCType(writer, ptr_ctype);
861 try writer.writeByte(')');861 try writer.writeByte(')');
862 const offset_val = try pt.intValue(Type.usize, byte_offset);862 const offset_val = try pt.intValue(.usize, byte_offset);
863 try writer.writeAll("((char *)");863 try writer.writeAll("((char *)");
864 try dg.renderPointer(writer, field.parent.*, location);864 try dg.renderPointer(writer, field.parent.*, location);
865 try writer.print(" + {})", .{try dg.fmtIntLiteral(offset_val, .Other)});865 try writer.print(" + {})", .{try dg.fmtIntLiteral(offset_val, .Other)});
...@@ -875,7 +875,7 @@ pub const DeclGen = struct {...@@ -875,7 +875,7 @@ pub const DeclGen = struct {
875 try writer.writeByte(')');875 try writer.writeByte(')');
876 try dg.renderPointer(writer, elem.parent.*, location);876 try dg.renderPointer(writer, elem.parent.*, location);
877 } else {877 } else {
878 const index_val = try pt.intValue(Type.usize, elem.elem_idx);878 const index_val = try pt.intValue(.usize, elem.elem_idx);
879 // We want to do pointer arithmetic on a pointer to the element type.879 // We want to do pointer arithmetic on a pointer to the element type.
880 // We might have a pointer-to-array. In this case, we must cast first.880 // We might have a pointer-to-array. In this case, we must cast first.
881 const result_ctype = try dg.ctypeFromType(elem.result_ptr_ty, .complete);881 const result_ctype = try dg.ctypeFromType(elem.result_ptr_ty, .complete);
...@@ -904,7 +904,7 @@ pub const DeclGen = struct {...@@ -904,7 +904,7 @@ pub const DeclGen = struct {
904 if (oac.byte_offset == 0) {904 if (oac.byte_offset == 0) {
905 try dg.renderPointer(writer, oac.parent.*, location);905 try dg.renderPointer(writer, oac.parent.*, location);
906 } else {906 } else {
907 const offset_val = try pt.intValue(Type.usize, oac.byte_offset);907 const offset_val = try pt.intValue(.usize, oac.byte_offset);
908 try writer.writeAll("((char *)");908 try writer.writeAll("((char *)");
909 try dg.renderPointer(writer, oac.parent.*, location);909 try dg.renderPointer(writer, oac.parent.*, location);
910 try writer.print(" + {})", .{try dg.fmtIntLiteral(offset_val, .Other)});910 try writer.print(" + {})", .{try dg.fmtIntLiteral(offset_val, .Other)});
...@@ -984,7 +984,7 @@ pub const DeclGen = struct {...@@ -984,7 +984,7 @@ pub const DeclGen = struct {
984 try writer.writeAll("((");984 try writer.writeAll("((");
985 try dg.renderCType(writer, ctype);985 try dg.renderCType(writer, ctype);
986 try writer.print("){x})", .{try dg.fmtIntLiteral(986 try writer.print("){x})", .{try dg.fmtIntLiteral(
987 try pt.intValue(Type.usize, val.toUnsignedInt(zcu)),987 try pt.intValue(.usize, val.toUnsignedInt(zcu)),
988 .Other,988 .Other,
989 )});989 )});
990 },990 },
...@@ -1153,7 +1153,7 @@ pub const DeclGen = struct {...@@ -1153,7 +1153,7 @@ pub const DeclGen = struct {
1153 else => |payload| switch (ip.indexToKey(payload)) {1153 else => |payload| switch (ip.indexToKey(payload)) {
1154 .undef => |err_ty| try dg.renderUndefValue(1154 .undef => |err_ty| try dg.renderUndefValue(
1155 writer,1155 writer,
1156 Type.fromInterned(err_ty),1156 .fromInterned(err_ty),
1157 location,1157 location,
1158 ),1158 ),
1159 .err => |err| try dg.renderErrorName(writer, err.name),1159 .err => |err| try dg.renderErrorName(writer, err.name),
...@@ -1204,7 +1204,7 @@ pub const DeclGen = struct {...@@ -1204,7 +1204,7 @@ pub const DeclGen = struct {
1204 ),1204 ),
1205 },1205 },
1206 .ptr => try writer.writeAll("NULL"),1206 .ptr => try writer.writeAll("NULL"),
1207 .len => try dg.renderUndefValue(writer, Type.usize, initializer_type),1207 .len => try dg.renderUndefValue(writer, .usize, initializer_type),
1208 else => unreachable,1208 else => unreachable,
1209 }1209 }
1210 }1210 }
...@@ -1219,7 +1219,7 @@ pub const DeclGen = struct {...@@ -1219,7 +1219,7 @@ pub const DeclGen = struct {
1219 try writer.writeByte(')');1219 try writer.writeByte(')');
1220 }1220 }
1221 const ai = ty.arrayInfo(zcu);1221 const ai = ty.arrayInfo(zcu);
1222 if (ai.elem_type.eql(Type.u8, zcu)) {1222 if (ai.elem_type.eql(.u8, zcu)) {
1223 var literal = stringLiteral(writer, ty.arrayLenIncludingSentinel(zcu));1223 var literal = stringLiteral(writer, ty.arrayLenIncludingSentinel(zcu));
1224 try literal.start();1224 try literal.start();
1225 var index: usize = 0;1225 var index: usize = 0;
...@@ -1263,7 +1263,7 @@ pub const DeclGen = struct {...@@ -1263,7 +1263,7 @@ pub const DeclGen = struct {
1263 for (0..tuple.types.len) |field_index| {1263 for (0..tuple.types.len) |field_index| {
1264 const comptime_val = tuple.values.get(ip)[field_index];1264 const comptime_val = tuple.values.get(ip)[field_index];
1265 if (comptime_val != .none) continue;1265 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]);
1267 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;1267 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
12681268
1269 if (!empty) try writer.writeByte(',');1269 if (!empty) try writer.writeByte(',');
...@@ -1298,7 +1298,7 @@ pub const DeclGen = struct {...@@ -1298,7 +1298,7 @@ pub const DeclGen = struct {
1298 var field_it = loaded_struct.iterateRuntimeOrder(ip);1298 var field_it = loaded_struct.iterateRuntimeOrder(ip);
1299 var need_comma = false;1299 var need_comma = false;
1300 while (field_it.next()) |field_index| {1300 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]);
1302 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;1302 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13031303
1304 if (need_comma) try writer.writeByte(',');1304 if (need_comma) try writer.writeByte(',');
...@@ -1325,7 +1325,7 @@ pub const DeclGen = struct {...@@ -1325,7 +1325,7 @@ pub const DeclGen = struct {
1325 var eff_num_fields: usize = 0;1325 var eff_num_fields: usize = 0;
13261326
1327 for (0..loaded_struct.field_types.len) |field_index| {1327 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]);
1329 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;1329 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
1330 eff_num_fields += 1;1330 eff_num_fields += 1;
1331 }1331 }
...@@ -1346,7 +1346,7 @@ pub const DeclGen = struct {...@@ -1346,7 +1346,7 @@ pub const DeclGen = struct {
1346 var eff_index: usize = 0;1346 var eff_index: usize = 0;
1347 var needs_closing_paren = false;1347 var needs_closing_paren = false;
1348 for (0..loaded_struct.field_types.len) |field_index| {1348 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]);
1350 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;1350 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13511351
1352 const field_val = switch (ip.indexToKey(val.toIntern()).aggregate.storage) {1352 const field_val = switch (ip.indexToKey(val.toIntern()).aggregate.storage) {
...@@ -1382,7 +1382,7 @@ pub const DeclGen = struct {...@@ -1382,7 +1382,7 @@ pub const DeclGen = struct {
1382 // a << a_off | b << b_off | c << c_off1382 // a << a_off | b << b_off | c << c_off
1383 var empty = true;1383 var empty = true;
1384 for (0..loaded_struct.field_types.len) |field_index| {1384 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]);
1386 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;1386 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13871387
1388 if (!empty) try writer.writeAll(" | ");1388 if (!empty) try writer.writeAll(" | ");
...@@ -1466,7 +1466,7 @@ pub const DeclGen = struct {...@@ -1466,7 +1466,7 @@ pub const DeclGen = struct {
1466 }1466 }
14671467
1468 const field_index = zcu.unionTagFieldIndex(loaded_union, Value.fromInterned(un.tag)).?;1468 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]);
1470 const field_name = loaded_union.loadTagType(ip).names.get(ip)[field_index];1470 const field_name = loaded_union.loadTagType(ip).names.get(ip)[field_index];
1471 if (loaded_union.flagsUnordered(ip).layout == .@"packed") {1471 if (loaded_union.flagsUnordered(ip).layout == .@"packed") {
1472 if (field_ty.hasRuntimeBits(zcu)) {1472 if (field_ty.hasRuntimeBits(zcu)) {
...@@ -1509,7 +1509,7 @@ pub const DeclGen = struct {...@@ -1509,7 +1509,7 @@ pub const DeclGen = struct {
1509 );1509 );
1510 try writer.writeByte(' ');1510 try writer.writeByte(' ');
1511 } else for (0..loaded_union.field_types.len) |inner_field_index| {1511 } 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(
1513 loaded_union.field_types.get(ip)[inner_field_index],1513 loaded_union.field_types.get(ip)[inner_field_index],
1514 );1514 );
1515 if (!inner_field_ty.hasRuntimeBits(zcu)) continue;1515 if (!inner_field_ty.hasRuntimeBits(zcu)) continue;
...@@ -1592,7 +1592,7 @@ pub const DeclGen = struct {...@@ -1592,7 +1592,7 @@ pub const DeclGen = struct {
1592 try writer.writeAll("((");1592 try writer.writeAll("((");
1593 try dg.renderCType(writer, ctype);1593 try dg.renderCType(writer, ctype);
1594 return writer.print("){x})", .{1594 return writer.print("){x})", .{
1595 try dg.fmtIntLiteral(try pt.undefValue(Type.usize), .Other),1595 try dg.fmtIntLiteral(try pt.undefValue(.usize), .Other),
1596 });1596 });
1597 },1597 },
1598 .slice => {1598 .slice => {
...@@ -1606,14 +1606,14 @@ pub const DeclGen = struct {...@@ -1606,14 +1606,14 @@ pub const DeclGen = struct {
1606 const ptr_ty = ty.slicePtrFieldType(zcu);1606 const ptr_ty = ty.slicePtrFieldType(zcu);
1607 try dg.renderType(writer, ptr_ty);1607 try dg.renderType(writer, ptr_ty);
1608 return writer.print("){x}, {0x}}}", .{1608 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),
1610 });1610 });
1611 },1611 },
1612 },1612 },
1613 .opt_type => |child_type| switch (ctype.info(ctype_pool)) {1613 .opt_type => |child_type| switch (ctype.info(ctype_pool)) {
1614 .basic, .pointer => try dg.renderUndefValue(1614 .basic, .pointer => try dg.renderUndefValue(
1615 writer,1615 writer,
1616 Type.fromInterned(if (ctype.isBool()) .bool_type else child_type),1616 .fromInterned(if (ctype.isBool()) .bool_type else child_type),
1617 location,1617 location,
1618 ),1618 ),
1619 .aligned, .array, .vector, .fwd_decl, .function => unreachable,1619 .aligned, .array, .vector, .fwd_decl, .function => unreachable,
...@@ -1622,7 +1622,7 @@ pub const DeclGen = struct {...@@ -1622,7 +1622,7 @@ pub const DeclGen = struct {
1622 .is_null, .payload => {},1622 .is_null, .payload => {},
1623 .ptr, .len => return dg.renderUndefValue(1623 .ptr, .len => return dg.renderUndefValue(
1624 writer,1624 writer,
1625 Type.fromInterned(child_type),1625 .fromInterned(child_type),
1626 location,1626 location,
1627 ),1627 ),
1628 else => unreachable,1628 else => unreachable,
...@@ -1635,7 +1635,7 @@ pub const DeclGen = struct {...@@ -1635,7 +1635,7 @@ pub const DeclGen = struct {
1635 try writer.writeByte('{');1635 try writer.writeByte('{');
1636 for (0..aggregate.fields.len) |field_index| {1636 for (0..aggregate.fields.len) |field_index| {
1637 if (field_index > 0) try writer.writeByte(',');1637 if (field_index > 0) try writer.writeByte(',');
1638 try dg.renderUndefValue(writer, Type.fromInterned(1638 try dg.renderUndefValue(writer, .fromInterned(
1639 switch (aggregate.fields.at(field_index, ctype_pool).name.index) {1639 switch (aggregate.fields.at(field_index, ctype_pool).name.index) {
1640 .is_null => .bool_type,1640 .is_null => .bool_type,
1641 .payload => child_type,1641 .payload => child_type,
...@@ -1660,7 +1660,7 @@ pub const DeclGen = struct {...@@ -1660,7 +1660,7 @@ pub const DeclGen = struct {
1660 var field_it = loaded_struct.iterateRuntimeOrder(ip);1660 var field_it = loaded_struct.iterateRuntimeOrder(ip);
1661 var need_comma = false;1661 var need_comma = false;
1662 while (field_it.next()) |field_index| {1662 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]);
1664 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;1664 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
16651665
1666 if (need_comma) try writer.writeByte(',');1666 if (need_comma) try writer.writeByte(',');
...@@ -1685,7 +1685,7 @@ pub const DeclGen = struct {...@@ -1685,7 +1685,7 @@ pub const DeclGen = struct {
1685 var need_comma = false;1685 var need_comma = false;
1686 for (0..tuple_info.types.len) |field_index| {1686 for (0..tuple_info.types.len) |field_index| {
1687 if (tuple_info.values.get(ip)[field_index] != .none) continue;1687 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]);
1689 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;1689 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
16901690
1691 if (need_comma) try writer.writeByte(',');1691 if (need_comma) try writer.writeByte(',');
...@@ -1715,13 +1715,13 @@ pub const DeclGen = struct {...@@ -1715,13 +1715,13 @@ pub const DeclGen = struct {
1715 .payload) {1715 .payload) {
1716 .tag => try dg.renderUndefValue(1716 .tag => try dg.renderUndefValue(
1717 writer,1717 writer,
1718 Type.fromInterned(loaded_union.enum_tag_ty),1718 .fromInterned(loaded_union.enum_tag_ty),
1719 initializer_type,1719 initializer_type,
1720 ),1720 ),
1721 .payload => {1721 .payload => {
1722 try writer.writeByte('{');1722 try writer.writeByte('{');
1723 for (0..loaded_union.field_types.len) |inner_field_index| {1723 for (0..loaded_union.field_types.len) |inner_field_index| {
1724 const inner_field_ty = Type.fromInterned(1724 const inner_field_ty: Type = .fromInterned(
1725 loaded_union.field_types.get(ip)[inner_field_index],1725 loaded_union.field_types.get(ip)[inner_field_index],
1726 );1726 );
1727 if (!inner_field_ty.hasRuntimeBits(pt.zcu)) continue;1727 if (!inner_field_ty.hasRuntimeBits(pt.zcu)) continue;
...@@ -1747,7 +1747,7 @@ pub const DeclGen = struct {...@@ -1747,7 +1747,7 @@ pub const DeclGen = struct {
1747 .error_union_type => |error_union_type| switch (ctype.info(ctype_pool)) {1747 .error_union_type => |error_union_type| switch (ctype.info(ctype_pool)) {
1748 .basic => try dg.renderUndefValue(1748 .basic => try dg.renderUndefValue(
1749 writer,1749 writer,
1750 Type.fromInterned(error_union_type.error_set_type),1750 .fromInterned(error_union_type.error_set_type),
1751 location,1751 location,
1752 ),1752 ),
1753 .pointer, .aligned, .array, .vector, .fwd_decl, .function => unreachable,1753 .pointer, .aligned, .array, .vector, .fwd_decl, .function => unreachable,
...@@ -1762,7 +1762,7 @@ pub const DeclGen = struct {...@@ -1762,7 +1762,7 @@ pub const DeclGen = struct {
1762 if (field_index > 0) try writer.writeByte(',');1762 if (field_index > 0) try writer.writeByte(',');
1763 try dg.renderUndefValue(1763 try dg.renderUndefValue(
1764 writer,1764 writer,
1765 Type.fromInterned(1765 .fromInterned(
1766 switch (aggregate.fields.at(field_index, ctype_pool).name.index) {1766 switch (aggregate.fields.at(field_index, ctype_pool).name.index) {
1767 .@"error" => error_union_type.error_set_type,1767 .@"error" => error_union_type.error_set_type,
1768 .payload => error_union_type.payload_type,1768 .payload => error_union_type.payload_type,
...@@ -1777,7 +1777,7 @@ pub const DeclGen = struct {...@@ -1777,7 +1777,7 @@ pub const DeclGen = struct {
1777 },1777 },
1778 .array_type, .vector_type => {1778 .array_type, .vector_type => {
1779 const ai = ty.arrayInfo(zcu);1779 const ai = ty.arrayInfo(zcu);
1780 if (ai.elem_type.eql(Type.u8, zcu)) {1780 if (ai.elem_type.eql(.u8, zcu)) {
1781 const c_len = ty.arrayLenIncludingSentinel(zcu);1781 const c_len = ty.arrayLenIncludingSentinel(zcu);
1782 var literal = stringLiteral(writer, c_len);1782 var literal = stringLiteral(writer, c_len);
1783 try literal.start();1783 try literal.start();
...@@ -1981,8 +1981,8 @@ pub const DeclGen = struct {...@@ -1981,8 +1981,8 @@ pub const DeclGen = struct {
19811981
1982 const src_is_ptr = src_ty.isPtrAtRuntime(pt.zcu);1982 const src_is_ptr = src_ty.isPtrAtRuntime(pt.zcu);
1983 const src_eff_ty: Type = if (src_is_ptr) switch (dest_int_info.signedness) {1983 const src_eff_ty: Type = if (src_is_ptr) switch (dest_int_info.signedness) {
1984 .unsigned => Type.usize,1984 .unsigned => .usize,
1985 .signed => Type.isize,1985 .signed => .isize,
1986 } else src_ty;1986 } else src_ty;
19871987
1988 const src_bits = src_eff_ty.bitSize(zcu);1988 const src_bits = src_eff_ty.bitSize(zcu);
...@@ -2022,8 +2022,8 @@ pub const DeclGen = struct {...@@ -2022,8 +2022,8 @@ pub const DeclGen = struct {
20222022
2023 const src_is_ptr = src_ty.isPtrAtRuntime(zcu);2023 const src_is_ptr = src_ty.isPtrAtRuntime(zcu);
2024 const src_eff_ty: Type = if (src_is_ptr) switch (dest_int_info.signedness) {2024 const src_eff_ty: Type = if (src_is_ptr) switch (dest_int_info.signedness) {
2025 .unsigned => Type.usize,2025 .unsigned => .usize,
2026 .signed => Type.isize,2026 .signed => .isize,
2027 } else src_ty;2027 } else src_ty;
20282028
2029 const src_bits = src_eff_ty.bitSize(zcu);2029 const src_bits = src_eff_ty.bitSize(zcu);
...@@ -2249,7 +2249,7 @@ pub const DeclGen = struct {...@@ -2249,7 +2249,7 @@ pub const DeclGen = struct {
2249 if (flags.is_threadlocal and !dg.mod.single_threaded) try fwd.writeAll("zig_threadlocal ");2249 if (flags.is_threadlocal and !dg.mod.single_threaded) try fwd.writeAll("zig_threadlocal ");
2250 try dg.renderTypeAndName(2250 try dg.renderTypeAndName(
2251 fwd,2251 fwd,
2252 Type.fromInterned(nav.typeOf(ip)),2252 .fromInterned(nav.typeOf(ip)),
2253 .{ .nav = nav_index },2253 .{ .nav = nav_index },
2254 CQualifiers.init(.{ .@"const" = flags.is_const }),2254 CQualifiers.init(.{ .@"const" = flags.is_const }),
2255 nav.getAlignment(),2255 nav.getAlignment(),
...@@ -2321,7 +2321,7 @@ pub const DeclGen = struct {...@@ -2321,7 +2321,7 @@ pub const DeclGen = struct {
23212321
2322 if (is_big) try writer.print(", {}", .{int_info.signedness == .signed});2322 if (is_big) try writer.print(", {}", .{int_info.signedness == .signed});
2323 try writer.print(", {}", .{try dg.fmtIntLiteral(2323 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),
2325 .FunctionArgument,2325 .FunctionArgument,
2326 )});2326 )});
2327 }2327 }
...@@ -2657,7 +2657,7 @@ pub fn genTypeDecl(...@@ -2657,7 +2657,7 @@ pub fn genTypeDecl(
2657 },2657 },
2658 .index => |index| if (!found_existing) {2658 .index => |index| if (!found_existing) {
2659 const ip = &zcu.intern_pool;2659 const ip = &zcu.intern_pool;
2660 const ty = Type.fromInterned(index);2660 const ty: Type = .fromInterned(index);
2661 _ = try renderTypePrefix(.flush, global_ctype_pool, zcu, writer, global_ctype, .suffix, .{});2661 _ = try renderTypePrefix(.flush, global_ctype_pool, zcu, writer, global_ctype, .suffix, .{});
2662 try writer.writeByte(';');2662 try writer.writeByte(';');
2663 const file_scope = ty.typeDeclInstAllowGeneratedTag(zcu).?.resolveFile(ip);2663 const file_scope = ty.typeDeclInstAllowGeneratedTag(zcu).?.resolveFile(ip);
...@@ -2772,7 +2772,7 @@ pub fn genErrDecls(o: *Object) !void {...@@ -2772,7 +2772,7 @@ pub fn genErrDecls(o: *Object) !void {
2772 if (val > 1) try writer.writeAll(", ");2772 if (val > 1) try writer.writeAll(", ");
2773 try writer.print("{{" ++ name_prefix ++ "{}, {}}}", .{2773 try writer.print("{{" ++ name_prefix ++ "{}, {}}}", .{
2774 fmtIdent(name),2774 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),
2776 });2776 });
2777 }2777 }
2778 try writer.writeAll("};\n");2778 try writer.writeAll("};\n");
...@@ -2788,8 +2788,8 @@ pub fn genLazyFn(o: *Object, lazy_ctype_pool: *const CType.Pool, lazy_fn: LazyFn...@@ -2788,8 +2788,8 @@ pub fn genLazyFn(o: *Object, lazy_ctype_pool: *const CType.Pool, lazy_fn: LazyFn
2788 const val = lazy_fn.value_ptr;2788 const val = lazy_fn.value_ptr;
2789 switch (key) {2789 switch (key) {
2790 .tag_name => |enum_ty_ip| {2790 .tag_name => |enum_ty_ip| {
2791 const enum_ty = Type.fromInterned(enum_ty_ip);2791 const enum_ty: Type = .fromInterned(enum_ty_ip);
2792 const name_slice_ty = Type.slice_const_u8_sentinel_0;2792 const name_slice_ty: Type = .slice_const_u8_sentinel_0;
27932793
2794 try w.writeAll("static ");2794 try w.writeAll("static ");
2795 try o.dg.renderType(w, name_slice_ty);2795 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...@@ -2822,7 +2822,7 @@ pub fn genLazyFn(o: *Object, lazy_ctype_pool: *const CType.Pool, lazy_fn: LazyFn
2822 try o.dg.renderType(w, name_slice_ty);2822 try o.dg.renderType(w, name_slice_ty);
2823 try w.print("){{{}, {}}};\n", .{2823 try w.print("){{{}, {}}};\n", .{
2824 fmtIdent("name"),2824 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),
2826 });2826 });
28272827
2828 try w.writeAll(" }\n");2828 try w.writeAll(" }\n");
...@@ -2966,7 +2966,7 @@ pub fn genDecl(o: *Object) !void {...@@ -2966,7 +2966,7 @@ pub fn genDecl(o: *Object) !void {
2966 const zcu = pt.zcu;2966 const zcu = pt.zcu;
2967 const ip = &zcu.intern_pool;2967 const ip = &zcu.intern_pool;
2968 const nav = ip.getNav(o.dg.pass.nav);2968 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
2971 if (!nav_ty.isFnOrHasRuntimeBitsIgnoreComptime(zcu)) return;2971 if (!nav_ty.isFnOrHasRuntimeBitsIgnoreComptime(zcu)) return;
2972 switch (ip.indexToKey(nav.status.fully_resolved.val)) {2972 switch (ip.indexToKey(nav.status.fully_resolved.val)) {
...@@ -3717,7 +3717,7 @@ fn airArg(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -3717,7 +3717,7 @@ fn airArg(f: *Function, inst: Air.Inst.Index) !CValue {
3717 if (f.liveness.isUnused(inst)) {3717 if (f.liveness.isUnused(inst)) {
3718 const writer = f.object.writer();3718 const writer = f.object.writer();
3719 try writer.writeByte('(');3719 try writer.writeByte('(');
3720 try f.renderType(writer, Type.void);3720 try f.renderType(writer, .void);
3721 try writer.writeByte(')');3721 try writer.writeByte(')');
3722 try f.writeCValue(writer, result, .Other);3722 try f.writeCValue(writer, result, .Other);
3723 try writer.writeAll(";\n");3723 try writer.writeAll(";\n");
...@@ -3735,7 +3735,7 @@ fn airLoad(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -3735,7 +3735,7 @@ fn airLoad(f: *Function, inst: Air.Inst.Index) !CValue {
3735 const ptr_ty = f.typeOf(ty_op.operand);3735 const ptr_ty = f.typeOf(ty_op.operand);
3736 const ptr_scalar_ty = ptr_ty.scalarType(zcu);3736 const ptr_scalar_ty = ptr_ty.scalarType(zcu);
3737 const ptr_info = ptr_scalar_ty.ptrInfo(zcu);3737 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
3740 if (!src_ty.hasRuntimeBitsIgnoreComptime(zcu)) {3740 if (!src_ty.hasRuntimeBitsIgnoreComptime(zcu)) {
3741 try reap(f, inst, &.{ty_op.operand});3741 try reap(f, inst, &.{ty_op.operand});
...@@ -3953,7 +3953,7 @@ fn airTrunc(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -3953,7 +3953,7 @@ fn airTrunc(f: *Function, inst: Air.Inst.Index) !CValue {
3953 .signed => {3953 .signed => {
3954 const c_bits = toCIntBits(scalar_int_info.bits) orelse3954 const c_bits = toCIntBits(scalar_int_info.bits) orelse
3955 return f.fail("TODO: C backend: implement integer types larger than 128 bits", .{});3955 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
3958 try writer.writeAll("zig_shr_");3958 try writer.writeAll("zig_shr_");
3959 try f.object.dg.renderTypeForBuiltinFnName(writer, scalar_ty);3959 try f.object.dg.renderTypeForBuiltinFnName(writer, scalar_ty);
...@@ -4019,7 +4019,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {...@@ -4019,7 +4019,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
4019 try writer.writeAll("memset(");4019 try writer.writeAll("memset(");
4020 try f.writeCValue(writer, ptr_val, .FunctionArgument);4020 try f.writeCValue(writer, ptr_val, .FunctionArgument);
4021 try writer.writeAll(", 0xaa, sizeof(");4021 try writer.writeAll(", 0xaa, sizeof(");
4022 try f.renderType(writer, Type.fromInterned(ptr_info.child));4022 try f.renderType(writer, .fromInterned(ptr_info.child));
4023 try writer.writeAll("));\n");4023 try writer.writeAll("));\n");
4024 }4024 }
4025 return .none;4025 return .none;
...@@ -4029,7 +4029,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {...@@ -4029,7 +4029,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
4029 ptr_info.flags.alignment.order(src_ty.abiAlignment(zcu)).compare(.gte)4029 ptr_info.flags.alignment.order(src_ty.abiAlignment(zcu)).compare(.gte)
4030 else4030 else
4031 true;4031 true;
4032 const is_array = lowersToArray(Type.fromInterned(ptr_info.child), pt);4032 const is_array = lowersToArray(.fromInterned(ptr_info.child), pt);
4033 const need_memcpy = !is_aligned or is_array;4033 const need_memcpy = !is_aligned or is_array;
40344034
4035 const src_val = try f.resolveInst(bin_op.rhs);4035 const src_val = try f.resolveInst(bin_op.rhs);
...@@ -4040,7 +4040,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {...@@ -4040,7 +4040,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
4040 if (need_memcpy) {4040 if (need_memcpy) {
4041 // For this memcpy to safely work we need the rhs to have the same4041 // For this memcpy to safely work we need the rhs to have the same
4042 // underlying type as the lhs (i.e. they must both be arrays of the same underlying type).4042 // 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
4045 // If the source is a constant, writeCValue will emit a brace initialization4045 // If the source is a constant, writeCValue will emit a brace initialization
4046 // so work around this by initializing into new local.4046 // so work around this by initializing into new local.
...@@ -4120,7 +4120,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {...@@ -4120,7 +4120,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
41204120
4121 if (src_ty.isPtrAtRuntime(zcu)) {4121 if (src_ty.isPtrAtRuntime(zcu)) {
4122 try writer.writeByte('(');4122 try writer.writeByte('(');
4123 try f.renderType(writer, Type.usize);4123 try f.renderType(writer, .usize);
4124 try writer.writeByte(')');4124 try writer.writeByte(')');
4125 }4125 }
4126 try f.writeCValue(writer, src_val, .Other);4126 try f.writeCValue(writer, src_val, .Other);
...@@ -4343,8 +4343,8 @@ fn airEquality(...@@ -4343,8 +4343,8 @@ fn airEquality(
4343 try reap(f, inst, &.{ bin_op.lhs, bin_op.rhs });4343 try reap(f, inst, &.{ bin_op.lhs, bin_op.rhs });
43444344
4345 const writer = f.object.writer();4345 const writer = f.object.writer();
4346 const local = try f.allocLocal(inst, Type.bool);4346 const local = try f.allocLocal(inst, .bool);
4347 const a = try Assignment.start(f, writer, CType.bool);4347 const a = try Assignment.start(f, writer, .bool);
4348 try f.writeCValue(writer, local, .Other);4348 try f.writeCValue(writer, local, .Other);
4349 try a.assign(f, writer);4349 try a.assign(f, writer);
43504350
...@@ -4401,7 +4401,7 @@ fn airCmpLtErrorsLen(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -4401,7 +4401,7 @@ fn airCmpLtErrorsLen(f: *Function, inst: Air.Inst.Index) !CValue {
4401 try reap(f, inst, &.{un_op});4401 try reap(f, inst, &.{un_op});
44024402
4403 const writer = f.object.writer();4403 const writer = f.object.writer();
4404 const local = try f.allocLocal(inst, Type.bool);4404 const local = try f.allocLocal(inst, .bool);
4405 try f.writeCValue(writer, local, .Other);4405 try f.writeCValue(writer, local, .Other);
4406 try writer.writeAll(" = ");4406 try writer.writeAll(" = ");
4407 try f.writeCValue(writer, operand, .Other);4407 try f.writeCValue(writer, operand, .Other);
...@@ -4517,7 +4517,7 @@ fn airSlice(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -4517,7 +4517,7 @@ fn airSlice(f: *Function, inst: Air.Inst.Index) !CValue {
4517 try a.end(f, writer);4517 try a.end(f, writer);
4518 }4518 }
4519 {4519 {
4520 const a = try Assignment.start(f, writer, CType.usize);4520 const a = try Assignment.start(f, writer, .usize);
4521 try f.writeCValueMember(writer, local, .{ .identifier = "len" });4521 try f.writeCValueMember(writer, local, .{ .identifier = "len" });
4522 try a.assign(f, writer);4522 try a.assign(f, writer);
4523 try f.writeCValue(writer, len, .Initializer);4523 try f.writeCValue(writer, len, .Initializer);
...@@ -4585,9 +4585,9 @@ fn airCall(...@@ -4585,9 +4585,9 @@ fn airCall(
4585 else => unreachable,4585 else => unreachable,
4586 };4586 };
4587 const fn_info = zcu.typeToFunc(if (callee_is_ptr) callee_ty.childType(zcu) else callee_ty).?;4587 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);
4589 const ret_ctype: CType = if (ret_ty.isNoReturn(zcu))4589 const ret_ctype: CType = if (ret_ty.isNoReturn(zcu))
4590 CType.void4590 .void
4591 else4591 else
4592 try f.ctypeFromType(ret_ty, .parameter);4592 try f.ctypeFromType(ret_ty, .parameter);
45934593
...@@ -4599,7 +4599,7 @@ fn airCall(...@@ -4599,7 +4599,7 @@ fn airCall(
4599 break :result .none;4599 break :result .none;
4600 } else if (f.liveness.isUnused(inst)) {4600 } else if (f.liveness.isUnused(inst)) {
4601 try writer.writeByte('(');4601 try writer.writeByte('(');
4602 try f.renderCType(writer, CType.void);4602 try f.renderCType(writer, .void);
4603 try writer.writeByte(')');4603 try writer.writeByte(')');
4604 break :result .none;4604 break :result .none;
4605 } else {4605 } else {
...@@ -5081,20 +5081,20 @@ fn airBreakpoint(writer: anytype) !CValue {...@@ -5081,20 +5081,20 @@ fn airBreakpoint(writer: anytype) !CValue {
50815081
5082fn airRetAddr(f: *Function, inst: Air.Inst.Index) !CValue {5082fn airRetAddr(f: *Function, inst: Air.Inst.Index) !CValue {
5083 const writer = f.object.writer();5083 const writer = f.object.writer();
5084 const local = try f.allocLocal(inst, Type.usize);5084 const local = try f.allocLocal(inst, .usize);
5085 try f.writeCValue(writer, local, .Other);5085 try f.writeCValue(writer, local, .Other);
5086 try writer.writeAll(" = (");5086 try writer.writeAll(" = (");
5087 try f.renderType(writer, Type.usize);5087 try f.renderType(writer, .usize);
5088 try writer.writeAll(")zig_return_address();\n");5088 try writer.writeAll(")zig_return_address();\n");
5089 return local;5089 return local;
5090}5090}
50915091
5092fn airFrameAddress(f: *Function, inst: Air.Inst.Index) !CValue {5092fn airFrameAddress(f: *Function, inst: Air.Inst.Index) !CValue {
5093 const writer = f.object.writer();5093 const writer = f.object.writer();
5094 const local = try f.allocLocal(inst, Type.usize);5094 const local = try f.allocLocal(inst, .usize);
5095 try f.writeCValue(writer, local, .Other);5095 try f.writeCValue(writer, local, .Other);
5096 try writer.writeAll(" = (");5096 try writer.writeAll(" = (");
5097 try f.renderType(writer, Type.usize);5097 try f.renderType(writer, .usize);
5098 try writer.writeAll(")zig_frame_address();\n");5098 try writer.writeAll(")zig_frame_address();\n");
5099 return local;5099 return local;
5100}5100}
...@@ -5179,10 +5179,10 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void...@@ -5179,10 +5179,10 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
51795179
5180 try writer.writeAll("switch (");5180 try writer.writeAll("switch (");
51815181
5182 const lowered_condition_ty = if (condition_ty.toIntern() == .bool_type)5182 const lowered_condition_ty: Type = if (condition_ty.toIntern() == .bool_type)
5183 Type.u15183 .u1
5184 else if (condition_ty.isPtrAtRuntime(zcu))5184 else if (condition_ty.isPtrAtRuntime(zcu))
5185 Type.usize5185 .usize
5186 else5186 else
5187 condition_ty;5187 condition_ty;
5188 if (condition_ty.toIntern() != lowered_condition_ty.toIntern()) {5188 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...@@ -5219,7 +5219,7 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
5219 }5219 }
5220 if (condition_ty.isPtrAtRuntime(zcu)) {5220 if (condition_ty.isPtrAtRuntime(zcu)) {
5221 try writer.writeByte('(');5221 try writer.writeByte('(');
5222 try f.renderType(writer, Type.usize);5222 try f.renderType(writer, .usize);
5223 try writer.writeByte(')');5223 try writer.writeByte(')');
5224 }5224 }
5225 try f.object.dg.renderValue(writer, (try f.air.value(item, pt)).?, .Other);5225 try f.object.dg.renderValue(writer, (try f.air.value(item, pt)).?, .Other);
...@@ -5604,8 +5604,8 @@ fn airIsNull(...@@ -5604,8 +5604,8 @@ fn airIsNull(
5604 const operand = try f.resolveInst(un_op);5604 const operand = try f.resolveInst(un_op);
5605 try reap(f, inst, &.{un_op});5605 try reap(f, inst, &.{un_op});
56065606
5607 const local = try f.allocLocal(inst, Type.bool);5607 const local = try f.allocLocal(inst, .bool);
5608 const a = try Assignment.start(f, writer, CType.bool);5608 const a = try Assignment.start(f, writer, .bool);
5609 try f.writeCValue(writer, local, .Other);5609 try f.writeCValue(writer, local, .Other);
5610 try a.assign(f, writer);5610 try a.assign(f, writer);
56115611
...@@ -5750,7 +5750,7 @@ fn fieldLocation(...@@ -5750,7 +5750,7 @@ fn fieldLocation(
5750} {5750} {
5751 const zcu = pt.zcu;5751 const zcu = pt.zcu;
5752 const ip = &zcu.intern_pool;5752 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);
5754 switch (ip.indexToKey(container_ty.toIntern())) {5754 switch (ip.indexToKey(container_ty.toIntern())) {
5755 .struct_type => {5755 .struct_type => {
5756 const loaded_struct = ip.loadStructType(container_ty.toIntern());5756 const loaded_struct = ip.loadStructType(container_ty.toIntern());
...@@ -5781,7 +5781,7 @@ fn fieldLocation(...@@ -5781,7 +5781,7 @@ fn fieldLocation(
5781 const loaded_union = ip.loadUnionType(container_ty.toIntern());5781 const loaded_union = ip.loadUnionType(container_ty.toIntern());
5782 switch (loaded_union.flagsUnordered(ip).layout) {5782 switch (loaded_union.flagsUnordered(ip).layout) {
5783 .auto, .@"extern" => {5783 .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]);
5785 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu))5785 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu))
5786 return if (loaded_union.hasTag(ip) and !container_ty.unionHasAllZeroBitFieldTypes(zcu))5786 return if (loaded_union.hasTag(ip) and !container_ty.unionHasAllZeroBitFieldTypes(zcu))
5787 .{ .field = .{ .identifier = "payload" } }5787 .{ .field = .{ .identifier = "payload" } }
...@@ -5850,7 +5850,7 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -5850,7 +5850,7 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {
5850 switch (fieldLocation(container_ptr_ty, field_ptr_ty, extra.field_index, pt)) {5850 switch (fieldLocation(container_ptr_ty, field_ptr_ty, extra.field_index, pt)) {
5851 .begin => try f.writeCValue(writer, field_ptr_val, .Initializer),5851 .begin => try f.writeCValue(writer, field_ptr_val, .Initializer),
5852 .field => |field| {5852 .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
5855 try writer.writeAll("((");5855 try writer.writeAll("((");
5856 try f.renderType(writer, u8_ptr_ty);5856 try f.renderType(writer, u8_ptr_ty);
...@@ -5863,14 +5863,14 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -5863,14 +5863,14 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {
5863 try writer.writeAll("))");5863 try writer.writeAll("))");
5864 },5864 },
5865 .byte_offset => |byte_offset| {5865 .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
5868 try writer.writeAll("((");5868 try writer.writeAll("((");
5869 try f.renderType(writer, u8_ptr_ty);5869 try f.renderType(writer, u8_ptr_ty);
5870 try writer.writeByte(')');5870 try writer.writeByte(')');
5871 try f.writeCValue(writer, field_ptr_val, .Other);5871 try f.writeCValue(writer, field_ptr_val, .Other);
5872 try writer.print(" - {})", .{5872 try writer.print(" - {})", .{
5873 try f.fmtIntLiteral(try pt.intValue(Type.usize, byte_offset)),5873 try f.fmtIntLiteral(try pt.intValue(.usize, byte_offset)),
5874 });5874 });
5875 },5875 },
5876 }5876 }
...@@ -5908,14 +5908,14 @@ fn fieldPtr(...@@ -5908,14 +5908,14 @@ fn fieldPtr(
5908 try f.writeCValueDerefMember(writer, container_ptr_val, field);5908 try f.writeCValueDerefMember(writer, container_ptr_val, field);
5909 },5909 },
5910 .byte_offset => |byte_offset| {5910 .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
5913 try writer.writeAll("((");5913 try writer.writeAll("((");
5914 try f.renderType(writer, u8_ptr_ty);5914 try f.renderType(writer, u8_ptr_ty);
5915 try writer.writeByte(')');5915 try writer.writeByte(')');
5916 try f.writeCValue(writer, container_ptr_val, .Other);5916 try f.writeCValue(writer, container_ptr_val, .Other);
5917 try writer.print(" + {})", .{5917 try writer.print(" + {})", .{
5918 try f.fmtIntLiteral(try pt.intValue(Type.usize, byte_offset)),5918 try f.fmtIntLiteral(try pt.intValue(.usize, byte_offset)),
5919 });5919 });
5920 },5920 },
5921 }5921 }
...@@ -6158,7 +6158,7 @@ fn airWrapOptional(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -6158,7 +6158,7 @@ fn airWrapOptional(f: *Function, inst: Air.Inst.Index) !CValue {
6158 const writer = f.object.writer();6158 const writer = f.object.writer();
6159 const local = try f.allocLocal(inst, inst_ty);6159 const local = try f.allocLocal(inst, inst_ty);
6160 {6160 {
6161 const a = try Assignment.start(f, writer, CType.bool);6161 const a = try Assignment.start(f, writer, .bool);
6162 try f.writeCValueMember(writer, local, .{ .identifier = "is_null" });6162 try f.writeCValueMember(writer, local, .{ .identifier = "is_null" });
6163 try a.assign(f, writer);6163 try a.assign(f, writer);
6164 try writer.writeAll("false");6164 try writer.writeAll("false");
...@@ -6322,12 +6322,12 @@ fn airIsErr(f: *Function, inst: Air.Inst.Index, is_ptr: bool, operator: []const...@@ -6322,12 +6322,12 @@ fn airIsErr(f: *Function, inst: Air.Inst.Index, is_ptr: bool, operator: []const
6322 const operand = try f.resolveInst(un_op);6322 const operand = try f.resolveInst(un_op);
6323 try reap(f, inst, &.{un_op});6323 try reap(f, inst, &.{un_op});
6324 const operand_ty = f.typeOf(un_op);6324 const operand_ty = f.typeOf(un_op);
6325 const local = try f.allocLocal(inst, Type.bool);6325 const local = try f.allocLocal(inst, .bool);
6326 const err_union_ty = if (is_ptr) operand_ty.childType(zcu) else operand_ty;6326 const err_union_ty = if (is_ptr) operand_ty.childType(zcu) else operand_ty;
6327 const payload_ty = err_union_ty.errorUnionPayload(zcu);6327 const payload_ty = err_union_ty.errorUnionPayload(zcu);
6328 const error_ty = err_union_ty.errorUnionSet(zcu);6328 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);
6331 try f.writeCValue(writer, local, .Other);6331 try f.writeCValue(writer, local, .Other);
6332 try a.assign(f, writer);6332 try a.assign(f, writer);
6333 const err_int_ty = try pt.errorIntType();6333 const err_int_ty = try pt.errorIntType();
...@@ -6385,17 +6385,17 @@ fn airArrayToSlice(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -6385,17 +6385,17 @@ fn airArrayToSlice(f: *Function, inst: Air.Inst.Index) !CValue {
6385 if (operand_child_ctype.info(ctype_pool) == .array) {6385 if (operand_child_ctype.info(ctype_pool) == .array) {
6386 try writer.writeByte('&');6386 try writer.writeByte('&');
6387 try f.writeCValueDeref(writer, operand);6387 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))});
6389 } else try f.writeCValue(writer, operand, .Initializer);6389 } else try f.writeCValue(writer, operand, .Initializer);
6390 }6390 }
6391 try a.end(f, writer);6391 try a.end(f, writer);
6392 }6392 }
6393 {6393 {
6394 const a = try Assignment.start(f, writer, CType.usize);6394 const a = try Assignment.start(f, writer, .usize);
6395 try f.writeCValueMember(writer, local, .{ .identifier = "len" });6395 try f.writeCValueMember(writer, local, .{ .identifier = "len" });
6396 try a.assign(f, writer);6396 try a.assign(f, writer);
6397 try writer.print("{}", .{6397 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))),
6399 });6399 });
6400 try a.end(f, writer);6400 try a.end(f, writer);
6401 }6401 }
...@@ -6627,7 +6627,7 @@ fn airCmpBuiltinCall(...@@ -6627,7 +6627,7 @@ fn airCmpBuiltinCall(
6627 try writer.writeByte(')');6627 try writer.writeByte(')');
6628 if (!ref_ret) try writer.print("{s}{}", .{6628 if (!ref_ret) try writer.print("{s}{}", .{
6629 compareOperatorC(operator),6629 compareOperatorC(operator),
6630 try f.fmtIntLiteral(try pt.intValue(Type.i32, 0)),6630 try f.fmtIntLiteral(try pt.intValue(.i32, 0)),
6631 });6631 });
6632 try writer.writeAll(";\n");6632 try writer.writeAll(";\n");
6633 try v.end(f, inst, writer);6633 try v.end(f, inst, writer);
...@@ -6707,7 +6707,7 @@ fn airCmpxchg(f: *Function, inst: Air.Inst.Index, flavor: [*:0]const u8) !CValue...@@ -6707,7 +6707,7 @@ fn airCmpxchg(f: *Function, inst: Air.Inst.Index, flavor: [*:0]const u8) !CValue
6707 try a.end(f, writer);6707 try a.end(f, writer);
6708 }6708 }
6709 {6709 {
6710 const a = try Assignment.start(f, writer, CType.bool);6710 const a = try Assignment.start(f, writer, .bool);
6711 try f.writeCValueMember(writer, local, .{ .identifier = "is_null" });6711 try f.writeCValueMember(writer, local, .{ .identifier = "is_null" });
6712 try a.assign(f, writer);6712 try a.assign(f, writer);
6713 try writer.print("zig_cmpxchg_{s}((zig_atomic(", .{flavor});6713 try writer.print("zig_cmpxchg_{s}((zig_atomic(", .{flavor});
...@@ -6935,12 +6935,12 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {...@@ -6935,12 +6935,12 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
6935 },6935 },
6936 });6936 });
69376937
6938 const index = try f.allocLocal(inst, Type.usize);6938 const index = try f.allocLocal(inst, .usize);
69396939
6940 try writer.writeAll("for (");6940 try writer.writeAll("for (");
6941 try f.writeCValue(writer, index, .Other);6941 try f.writeCValue(writer, index, .Other);
6942 try writer.writeAll(" = ");6942 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);
6944 try writer.writeAll("; ");6944 try writer.writeAll("; ");
6945 try f.writeCValue(writer, index, .Other);6945 try f.writeCValue(writer, index, .Other);
6946 try writer.writeAll(" != ");6946 try writer.writeAll(" != ");
...@@ -6976,7 +6976,7 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {...@@ -6976,7 +6976,7 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
6976 return .none;6976 return .none;
6977 }6977 }
69786978
6979 const bitcasted = try bitcast(f, Type.u8, value, elem_ty);6979 const bitcasted = try bitcast(f, .u8, value, elem_ty);
69806980
6981 try writer.writeAll("memset(");6981 try writer.writeAll("memset(");
6982 switch (dest_ty.ptrSize(zcu)) {6982 switch (dest_ty.ptrSize(zcu)) {
...@@ -7038,7 +7038,7 @@ fn writeArrayLen(f: *Function, writer: ArrayListWriter, dest_ptr: CValue, dest_t...@@ -7038,7 +7038,7 @@ fn writeArrayLen(f: *Function, writer: ArrayListWriter, dest_ptr: CValue, dest_t
7038 const zcu = pt.zcu;7038 const zcu = pt.zcu;
7039 switch (dest_ty.ptrSize(zcu)) {7039 switch (dest_ty.ptrSize(zcu)) {
7040 .one => try writer.print("{}", .{7040 .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))),
7042 }),7042 }),
7043 .many, .c => unreachable,7043 .many, .c => unreachable,
7044 .slice => try f.writeCValueMember(writer, dest_ptr, .{ .identifier = "len" }),7044 .slice => try f.writeCValueMember(writer, dest_ptr, .{ .identifier = "len" }),
...@@ -7200,11 +7200,11 @@ fn airShuffle(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -7200,11 +7200,11 @@ fn airShuffle(f: *Function, inst: Air.Inst.Index) !CValue {
7200 for (0..extra.mask_len) |index| {7200 for (0..extra.mask_len) |index| {
7201 try f.writeCValue(writer, local, .Other);7201 try f.writeCValue(writer, local, .Other);
7202 try writer.writeByte('[');7202 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);
7204 try writer.writeAll("] = ");7204 try writer.writeAll("] = ");
72057205
7206 const mask_elem = (try mask.elemValue(pt, index)).toSignedInt(zcu);7206 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
7209 try f.writeCValue(writer, if (mask_elem >= 0) lhs else rhs, .Other);7209 try f.writeCValue(writer, if (mask_elem >= 0) lhs else rhs, .Other);
7210 try writer.writeByte('[');7210 try writer.writeByte('[');
...@@ -7377,7 +7377,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -7377,7 +7377,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
7377 switch (ip.indexToKey(inst_ty.toIntern())) {7377 switch (ip.indexToKey(inst_ty.toIntern())) {
7378 inline .array_type, .vector_type => |info, tag| {7378 inline .array_type, .vector_type => |info, tag| {
7379 const a: Assignment = .{7379 const a: Assignment = .{
7380 .ctype = try f.ctypeFromType(Type.fromInterned(info.child), .complete),7380 .ctype = try f.ctypeFromType(.fromInterned(info.child), .complete),
7381 };7381 };
7382 for (resolved_elements, 0..) |element, i| {7382 for (resolved_elements, 0..) |element, i| {
7383 try a.restart(f, writer);7383 try a.restart(f, writer);
...@@ -7402,7 +7402,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -7402,7 +7402,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
7402 .auto, .@"extern" => {7402 .auto, .@"extern" => {
7403 var field_it = loaded_struct.iterateRuntimeOrder(ip);7403 var field_it = loaded_struct.iterateRuntimeOrder(ip);
7404 while (field_it.next()) |field_index| {7404 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]);
7406 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;7406 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
74077407
7408 const a = try Assignment.start(f, writer, try f.ctypeFromType(field_ty, .complete));7408 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 {...@@ -7466,8 +7466,8 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
7466 if (field_ty.isPtrAtRuntime(zcu)) {7466 if (field_ty.isPtrAtRuntime(zcu)) {
7467 try writer.writeByte('(');7467 try writer.writeByte('(');
7468 try f.renderType(writer, switch (int_info.signedness) {7468 try f.renderType(writer, switch (int_info.signedness) {
7469 .unsigned => Type.usize,7469 .unsigned => .usize,
7470 .signed => Type.isize,7470 .signed => .isize,
7471 });7471 });
7472 try writer.writeByte(')');7472 try writer.writeByte(')');
7473 }7473 }
...@@ -7501,7 +7501,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {...@@ -7501,7 +7501,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
7501 },7501 },
7502 .tuple_type => |tuple_info| for (0..tuple_info.types.len) |field_index| {7502 .tuple_type => |tuple_info| for (0..tuple_info.types.len) |field_index| {
7503 if (tuple_info.values.get(ip)[field_index] != .none) continue;7503 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]);
7505 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;7505 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
75067506
7507 const a = try Assignment.start(f, writer, try f.ctypeFromType(field_ty, .complete));7507 const a = try Assignment.start(f, writer, try f.ctypeFromType(field_ty, .complete));
...@@ -8141,13 +8141,13 @@ fn formatIntLiteral(...@@ -8141,13 +8141,13 @@ fn formatIntLiteral(
8141 } = switch (data.ctype.info(ctype_pool)) {8141 } = switch (data.ctype.info(ctype_pool)) {
8142 .basic => |basic_info| switch (basic_info) {8142 .basic => |basic_info| switch (basic_info) {
8143 else => .{8143 else => .{
8144 .ctype = CType.void,8144 .ctype = .void,
8145 .count = 1,8145 .count = 1,
8146 .endian = .little,8146 .endian = .little,
8147 .homogeneous = true,8147 .homogeneous = true,
8148 },8148 },
8149 .zig_u128, .zig_i128 => .{8149 .zig_u128, .zig_i128 => .{
8150 .ctype = CType.u64,8150 .ctype = .u64,
8151 .count = 2,8151 .count = 2,
8152 .endian = .big,8152 .endian = .big,
8153 .homogeneous = false,8153 .homogeneous = false,
...@@ -8253,7 +8253,7 @@ fn formatIntLiteral(...@@ -8253,7 +8253,7 @@ fn formatIntLiteral(
8253 .int_info = c_limb_int_info,8253 .int_info = c_limb_int_info,
8254 .kind = data.kind,8254 .kind = data.kind,
8255 .ctype = c_limb_ctype,8255 .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()),
8257 }, fmt, options, writer);8257 }, fmt, options, writer);
8258 }8258 }
8259 }8259 }
...@@ -8330,15 +8330,15 @@ const Vectorize = struct {...@@ -8330,15 +8330,15 @@ const Vectorize = struct {
8330 const pt = f.object.dg.pt;8330 const pt = f.object.dg.pt;
8331 const zcu = pt.zcu;8331 const zcu = pt.zcu;
8332 return if (ty.zigTypeTag(zcu) == .vector) index: {8332 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
8335 try writer.writeAll("for (");8335 try writer.writeAll("for (");
8336 try f.writeCValue(writer, local, .Other);8336 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))});
8338 try f.writeCValue(writer, local, .Other);8338 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)))});
8340 try f.writeCValue(writer, local, .Other);8340 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))});
8342 f.object.indent_writer.pushIndent();8342 f.object.indent_writer.pushIndent();
83438343
8344 break :index .{ .index = local };8344 break :index .{ .index = local };
src/codegen/c/Type.zig+148-56
...@@ -1289,26 +1289,26 @@ pub const Pool = struct {...@@ -1289,26 +1289,26 @@ pub const Pool = struct {
1289 kind: Kind,1289 kind: Kind,
1290 ) !CType {1290 ) !CType {
1291 switch (int_info.bits) {1291 switch (int_info.bits) {
1292 0 => return CType.void,1292 0 => return .void,
1293 1...8 => switch (int_info.signedness) {1293 1...8 => switch (int_info.signedness) {
1294 .signed => return CType.i8,1294 .signed => return .i8,
1295 .unsigned => return CType.u8,1295 .unsigned => return .u8,
1296 },1296 },
1297 9...16 => switch (int_info.signedness) {1297 9...16 => switch (int_info.signedness) {
1298 .signed => return CType.i16,1298 .signed => return .i16,
1299 .unsigned => return CType.u16,1299 .unsigned => return .u16,
1300 },1300 },
1301 17...32 => switch (int_info.signedness) {1301 17...32 => switch (int_info.signedness) {
1302 .signed => return CType.i32,1302 .signed => return .i32,
1303 .unsigned => return CType.u32,1303 .unsigned => return .u32,
1304 },1304 },
1305 33...64 => switch (int_info.signedness) {1305 33...64 => switch (int_info.signedness) {
1306 .signed => return CType.i64,1306 .signed => return .i64,
1307 .unsigned => return CType.u64,1307 .unsigned => return .u64,
1308 },1308 },
1309 65...128 => switch (int_info.signedness) {1309 65...128 => switch (int_info.signedness) {
1310 .signed => return CType.i128,1310 .signed => return .i128,
1311 .unsigned => return CType.u128,1311 .unsigned => return .u128,
1312 },1312 },
1313 else => {1313 else => {
1314 const target = &mod.resolved_target.result;1314 const target = &mod.resolved_target.result;
...@@ -1357,19 +1357,19 @@ pub const Pool = struct {...@@ -1357,19 +1357,19 @@ pub const Pool = struct {
1357 .null_type,1357 .null_type,
1358 .undefined_type,1358 .undefined_type,
1359 .enum_literal_type,1359 .enum_literal_type,
1360 => return CType.void,1360 => return .void,
1361 .u1_type, .u8_type => return CType.u8,1361 .u1_type, .u8_type => return .u8,
1362 .i8_type => return CType.i8,1362 .i8_type => return .i8,
1363 .u16_type => return CType.u16,1363 .u16_type => return .u16,
1364 .i16_type => return CType.i16,1364 .i16_type => return .i16,
1365 .u29_type, .u32_type => return CType.u32,1365 .u29_type, .u32_type => return .u32,
1366 .i32_type => return CType.i32,1366 .i32_type => return .i32,
1367 .u64_type => return CType.u64,1367 .u64_type => return .u64,
1368 .i64_type => return CType.i64,1368 .i64_type => return .i64,
1369 .u80_type, .u128_type => return CType.u128,1369 .u80_type, .u128_type => return .u128,
1370 .i128_type => return CType.i128,1370 .i128_type => return .i128,
1371 .usize_type => return CType.usize,1371 .usize_type => return .usize,
1372 .isize_type => return CType.isize,1372 .isize_type => return .isize,
1373 .c_char_type => return .{ .index = .char },1373 .c_char_type => return .{ .index = .char },
1374 .c_short_type => return .{ .index = .short },1374 .c_short_type => return .{ .index = .short },
1375 .c_ushort_type => return .{ .index = .@"unsigned short" },1375 .c_ushort_type => return .{ .index = .@"unsigned short" },
...@@ -1380,12 +1380,12 @@ pub const Pool = struct {...@@ -1380,12 +1380,12 @@ pub const Pool = struct {
1380 .c_longlong_type => return .{ .index = .@"long long" },1380 .c_longlong_type => return .{ .index = .@"long long" },
1381 .c_ulonglong_type => return .{ .index = .@"unsigned long long" },1381 .c_ulonglong_type => return .{ .index = .@"unsigned long long" },
1382 .c_longdouble_type => return .{ .index = .@"long double" },1382 .c_longdouble_type => return .{ .index = .@"long double" },
1383 .f16_type => return CType.f16,1383 .f16_type => return .f16,
1384 .f32_type => return CType.f32,1384 .f32_type => return .f32,
1385 .f64_type => return CType.f64,1385 .f64_type => return .f64,
1386 .f80_type => return CType.f80,1386 .f80_type => return .f80,
1387 .f128_type => return CType.f128,1387 .f128_type => return .f128,
1388 .bool_type, .optional_noreturn_type => return CType.bool,1388 .bool_type, .optional_noreturn_type => return .bool,
1389 .noreturn_type,1389 .noreturn_type,
1390 .anyframe_type,1390 .anyframe_type,
1391 .generic_poison_type,1391 .generic_poison_type,
...@@ -1397,19 +1397,20 @@ pub const Pool = struct {...@@ -1397,19 +1397,20 @@ pub const Pool = struct {
1397 .signedness = .unsigned,1397 .signedness = .unsigned,
1398 .bits = pt.zcu.errorSetBits(),1398 .bits = pt.zcu.errorSetBits(),
1399 }, mod, kind),1399 }, mod, kind),
1400
1400 .manyptr_u8_type,1401 .manyptr_u8_type,
1401 => return pool.getPointer(allocator, .{1402 => return pool.getPointer(allocator, .{
1402 .elem_ctype = CType.u8,1403 .elem_ctype = .u8,
1403 }),1404 }),
1404 .manyptr_const_u8_type,1405 .manyptr_const_u8_type,
1405 .manyptr_const_u8_sentinel_0_type,1406 .manyptr_const_u8_sentinel_0_type,
1406 => return pool.getPointer(allocator, .{1407 => return pool.getPointer(allocator, .{
1407 .elem_ctype = CType.u8,1408 .elem_ctype = .u8,
1408 .@"const" = true,1409 .@"const" = true,
1409 }),1410 }),
1410 .single_const_pointer_to_comptime_int_type,1411 .single_const_pointer_to_comptime_int_type,
1411 => return pool.getPointer(allocator, .{1412 => return pool.getPointer(allocator, .{
1412 .elem_ctype = CType.void,1413 .elem_ctype = .void,
1413 .@"const" = true,1414 .@"const" = true,
1414 }),1415 }),
1415 .slice_const_u8_type,1416 .slice_const_u8_type,
...@@ -1420,14 +1421,14 @@ pub const Pool = struct {...@@ -1420,14 +1421,14 @@ pub const Pool = struct {
1420 .{1421 .{
1421 .name = .{ .index = .ptr },1422 .name = .{ .index = .ptr },
1422 .ctype = try pool.getPointer(allocator, .{1423 .ctype = try pool.getPointer(allocator, .{
1423 .elem_ctype = CType.u8,1424 .elem_ctype = .u8,
1424 .@"const" = true,1425 .@"const" = true,
1425 }),1426 }),
1426 .alignas = AlignAs.fromAbiAlignment(Type.ptrAbiAlignment(target.*)),1427 .alignas = AlignAs.fromAbiAlignment(Type.ptrAbiAlignment(target.*)),
1427 },1428 },
1428 .{1429 .{
1429 .name = .{ .index = .len },1430 .name = .{ .index = .len },
1430 .ctype = CType.usize,1431 .ctype = .usize,
1431 .alignas = AlignAs.fromAbiAlignment(1432 .alignas = AlignAs.fromAbiAlignment(
1432 Type.intAbiAlignment(target.ptrBitWidth(), target.*),1433 Type.intAbiAlignment(target.ptrBitWidth(), target.*),
1433 ),1434 ),
...@@ -1436,6 +1437,97 @@ pub const Pool = struct {...@@ -1436,6 +1437,97 @@ pub const Pool = struct {
1436 return pool.fromFields(allocator, .@"struct", &fields, kind);1437 return pool.fromFields(allocator, .@"struct", &fields, kind);
1437 },1438 },
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
1439 .undef,1531 .undef,
1440 .zero,1532 .zero,
1441 .zero_usize,1533 .zero_usize,
...@@ -1521,7 +1613,7 @@ pub const Pool = struct {...@@ -1521,7 +1613,7 @@ pub const Pool = struct {
1521 },1613 },
1522 .{1614 .{
1523 .name = .{ .index = .len },1615 .name = .{ .index = .len },
1524 .ctype = CType.usize,1616 .ctype = .usize,
1525 .alignas = AlignAs.fromAbiAlignment(1617 .alignas = AlignAs.fromAbiAlignment(
1526 Type.intAbiAlignment(target.ptrBitWidth(), target.*),1618 Type.intAbiAlignment(target.ptrBitWidth(), target.*),
1527 ),1619 ),
...@@ -1532,7 +1624,7 @@ pub const Pool = struct {...@@ -1532,7 +1624,7 @@ pub const Pool = struct {
1532 },1624 },
1533 .array_type => |array_info| {1625 .array_type => |array_info| {
1534 const len = array_info.lenIncludingSentinel();1626 const len = array_info.lenIncludingSentinel();
1535 if (len == 0) return CType.void;1627 if (len == 0) return .void;
1536 const elem_type = Type.fromInterned(array_info.child);1628 const elem_type = Type.fromInterned(array_info.child);
1537 const elem_ctype = try pool.fromType(1629 const elem_ctype = try pool.fromType(
1538 allocator,1630 allocator,
...@@ -1542,7 +1634,7 @@ pub const Pool = struct {...@@ -1542,7 +1634,7 @@ pub const Pool = struct {
1542 mod,1634 mod,
1543 kind.noParameter(),1635 kind.noParameter(),
1544 );1636 );
1545 if (elem_ctype.index == .void) return CType.void;1637 if (elem_ctype.index == .void) return .void;
1546 const array_ctype = try pool.getArray(allocator, .{1638 const array_ctype = try pool.getArray(allocator, .{
1547 .elem_ctype = elem_ctype,1639 .elem_ctype = elem_ctype,
1548 .len = len,1640 .len = len,
...@@ -1558,7 +1650,7 @@ pub const Pool = struct {...@@ -1558,7 +1650,7 @@ pub const Pool = struct {
1558 return pool.fromFields(allocator, .@"struct", &fields, kind);1650 return pool.fromFields(allocator, .@"struct", &fields, kind);
1559 },1651 },
1560 .vector_type => |vector_info| {1652 .vector_type => |vector_info| {
1561 if (vector_info.len == 0) return CType.void;1653 if (vector_info.len == 0) return .void;
1562 const elem_type = Type.fromInterned(vector_info.child);1654 const elem_type = Type.fromInterned(vector_info.child);
1563 const elem_ctype = try pool.fromType(1655 const elem_ctype = try pool.fromType(
1564 allocator,1656 allocator,
...@@ -1568,7 +1660,7 @@ pub const Pool = struct {...@@ -1568,7 +1660,7 @@ pub const Pool = struct {
1568 mod,1660 mod,
1569 kind.noParameter(),1661 kind.noParameter(),
1570 );1662 );
1571 if (elem_ctype.index == .void) return CType.void;1663 if (elem_ctype.index == .void) return .void;
1572 const vector_ctype = try pool.getVector(allocator, .{1664 const vector_ctype = try pool.getVector(allocator, .{
1573 .elem_ctype = elem_ctype,1665 .elem_ctype = elem_ctype,
1574 .len = vector_info.len,1666 .len = vector_info.len,
...@@ -1584,7 +1676,7 @@ pub const Pool = struct {...@@ -1584,7 +1676,7 @@ pub const Pool = struct {
1584 return pool.fromFields(allocator, .@"struct", &fields, kind);1676 return pool.fromFields(allocator, .@"struct", &fields, kind);
1585 },1677 },
1586 .opt_type => |payload_type| {1678 .opt_type => |payload_type| {
1587 if (ip.isNoReturn(payload_type)) return CType.void;1679 if (ip.isNoReturn(payload_type)) return .void;
1588 const payload_ctype = try pool.fromType(1680 const payload_ctype = try pool.fromType(
1589 allocator,1681 allocator,
1590 scratch,1682 scratch,
...@@ -1593,7 +1685,7 @@ pub const Pool = struct {...@@ -1593,7 +1685,7 @@ pub const Pool = struct {
1593 mod,1685 mod,
1594 kind.noParameter(),1686 kind.noParameter(),
1595 );1687 );
1596 if (payload_ctype.index == .void) return CType.bool;1688 if (payload_ctype.index == .void) return .bool;
1597 switch (payload_type) {1689 switch (payload_type) {
1598 .anyerror_type => return payload_ctype,1690 .anyerror_type => return payload_ctype,
1599 else => switch (ip.indexToKey(payload_type)) {1691 else => switch (ip.indexToKey(payload_type)) {
...@@ -1606,7 +1698,7 @@ pub const Pool = struct {...@@ -1606,7 +1698,7 @@ pub const Pool = struct {
1606 var fields = [_]Info.Field{1698 var fields = [_]Info.Field{
1607 .{1699 .{
1608 .name = .{ .index = .is_null },1700 .name = .{ .index = .is_null },
1609 .ctype = CType.bool,1701 .ctype = .bool,
1610 .alignas = AlignAs.fromAbiAlignment(.@"1"),1702 .alignas = AlignAs.fromAbiAlignment(.@"1"),
1611 },1703 },
1612 .{1704 .{
...@@ -1666,7 +1758,7 @@ pub const Pool = struct {...@@ -1666,7 +1758,7 @@ pub const Pool = struct {
1666 if (kind.isForward()) return if (ty.hasRuntimeBitsIgnoreComptime(zcu))1758 if (kind.isForward()) return if (ty.hasRuntimeBitsIgnoreComptime(zcu))
1667 fwd_decl1759 fwd_decl
1668 else1760 else
1669 CType.void;1761 .void;
1670 const scratch_top = scratch.items.len;1762 const scratch_top = scratch.items.len;
1671 defer scratch.shrinkRetainingCapacity(scratch_top);1763 defer scratch.shrinkRetainingCapacity(scratch_top);
1672 try scratch.ensureUnusedCapacity(1764 try scratch.ensureUnusedCapacity(
...@@ -1710,7 +1802,7 @@ pub const Pool = struct {...@@ -1710,7 +1802,7 @@ pub const Pool = struct {
1710 scratch.items.len - scratch_top,1802 scratch.items.len - scratch_top,
1711 @typeInfo(Field).@"struct".fields.len,1803 @typeInfo(Field).@"struct".fields.len,
1712 ));1804 ));
1713 if (fields_len == 0) return CType.void;1805 if (fields_len == 0) return .void;
1714 try pool.ensureUnusedCapacity(allocator, 1);1806 try pool.ensureUnusedCapacity(allocator, 1);
1715 const extra_index = try pool.addHashedExtra(allocator, &hasher, Aggregate, .{1807 const extra_index = try pool.addHashedExtra(allocator, &hasher, Aggregate, .{
1716 .fwd_decl = fwd_decl.index,1808 .fwd_decl = fwd_decl.index,
...@@ -1762,7 +1854,7 @@ pub const Pool = struct {...@@ -1762,7 +1854,7 @@ pub const Pool = struct {
1762 scratch.items.len - scratch_top,1854 scratch.items.len - scratch_top,
1763 @typeInfo(Field).@"struct".fields.len,1855 @typeInfo(Field).@"struct".fields.len,
1764 ));1856 ));
1765 if (fields_len == 0) return CType.void;1857 if (fields_len == 0) return .void;
1766 if (kind.isForward()) {1858 if (kind.isForward()) {
1767 try pool.ensureUnusedCapacity(allocator, 1);1859 try pool.ensureUnusedCapacity(allocator, 1);
1768 const extra_index = try pool.addHashedExtra(1860 const extra_index = try pool.addHashedExtra(
...@@ -1801,7 +1893,7 @@ pub const Pool = struct {...@@ -1801,7 +1893,7 @@ pub const Pool = struct {
1801 if (kind.isForward()) return if (ty.hasRuntimeBitsIgnoreComptime(zcu))1893 if (kind.isForward()) return if (ty.hasRuntimeBitsIgnoreComptime(zcu))
1802 fwd_decl1894 fwd_decl
1803 else1895 else
1804 CType.void;1896 .void;
1805 const loaded_tag = loaded_union.loadTagType(ip);1897 const loaded_tag = loaded_union.loadTagType(ip);
1806 const scratch_top = scratch.items.len;1898 const scratch_top = scratch.items.len;
1807 defer scratch.shrinkRetainingCapacity(scratch_top);1899 defer scratch.shrinkRetainingCapacity(scratch_top);
...@@ -1848,7 +1940,7 @@ pub const Pool = struct {...@@ -1848,7 +1940,7 @@ pub const Pool = struct {
1848 @typeInfo(Field).@"struct".fields.len,1940 @typeInfo(Field).@"struct".fields.len,
1849 ));1941 ));
1850 if (!has_tag) {1942 if (!has_tag) {
1851 if (fields_len == 0) return CType.void;1943 if (fields_len == 0) return .void;
1852 try pool.ensureUnusedCapacity(allocator, 1);1944 try pool.ensureUnusedCapacity(allocator, 1);
1853 const extra_index = try pool.addHashedExtra(1945 const extra_index = try pool.addHashedExtra(
1854 allocator,1946 allocator,
...@@ -1915,7 +2007,7 @@ pub const Pool = struct {...@@ -1915,7 +2007,7 @@ pub const Pool = struct {
1915 struct_fields_len += 1;2007 struct_fields_len += 1;
1916 }2008 }
1917 }2009 }
1918 if (struct_fields_len == 0) return CType.void;2010 if (struct_fields_len == 0) return .void;
1919 sortFields(struct_fields[0..struct_fields_len]);2011 sortFields(struct_fields[0..struct_fields_len]);
1920 return pool.getAggregate(allocator, .{2012 return pool.getAggregate(allocator, .{
1921 .tag = .@"struct",2013 .tag = .@"struct",
...@@ -1929,7 +2021,7 @@ pub const Pool = struct {...@@ -1929,7 +2021,7 @@ pub const Pool = struct {
1929 }, mod, kind),2021 }, mod, kind),
1930 }2022 }
1931 },2023 },
1932 .opaque_type => return CType.void,2024 .opaque_type => return .void,
1933 .enum_type => return pool.fromType(2025 .enum_type => return pool.fromType(
1934 allocator,2026 allocator,
1935 scratch,2027 scratch,
...@@ -1938,7 +2030,7 @@ pub const Pool = struct {...@@ -1938,7 +2030,7 @@ pub const Pool = struct {
1938 mod,2030 mod,
1939 kind,2031 kind,
1940 ),2032 ),
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 {
1942 const scratch_top = scratch.items.len;2034 const scratch_top = scratch.items.len;
1943 defer scratch.shrinkRetainingCapacity(scratch_top);2035 defer scratch.shrinkRetainingCapacity(scratch_top);
1944 try scratch.ensureUnusedCapacity(allocator, func_info.param_types.len);2036 try scratch.ensureUnusedCapacity(allocator, func_info.param_types.len);
...@@ -1952,7 +2044,7 @@ pub const Pool = struct {...@@ -1952,7 +2044,7 @@ pub const Pool = struct {
1952 pt,2044 pt,
1953 mod,2045 mod,
1954 kind.asParameter(),2046 kind.asParameter(),
1955 ) else CType.void;2047 ) else .void;
1956 for (0..func_info.param_types.len) |param_index| {2048 for (0..func_info.param_types.len) |param_index| {
1957 const param_type = Type.fromInterned(2049 const param_type = Type.fromInterned(
1958 func_info.param_types.get(ip)[param_index],2050 func_info.param_types.get(ip)[param_index],
...@@ -2033,7 +2125,7 @@ pub const Pool = struct {...@@ -2033,7 +2125,7 @@ pub const Pool = struct {
2033 pub fn eql(map_adapter: @This(), _: CType, _: void, pool_index: usize) bool {2125 pub fn eql(map_adapter: @This(), _: CType, _: void, pool_index: usize) bool {
2034 return map_adapter.source_info.eqlAdapted(2126 return map_adapter.source_info.eqlAdapted(
2035 map_adapter.source_pool,2127 map_adapter.source_pool,
2036 CType.fromPoolIndex(pool_index),2128 .fromPoolIndex(pool_index),
2037 map_adapter.pool,2129 map_adapter.pool,
2038 map_adapter.pool_adapter,2130 map_adapter.pool_adapter,
2039 );2131 );
...@@ -2047,7 +2139,7 @@ pub const Pool = struct {...@@ -2047,7 +2139,7 @@ pub const Pool = struct {
2047 .pool_adapter = pool_adapter,2139 .pool_adapter = pool_adapter,
2048 });2140 });
2049 errdefer _ = pool.map.pop();2141 errdefer _ = pool.map.pop();
2050 const ctype = CType.fromPoolIndex(gop.index);2142 const ctype: CType = .fromPoolIndex(gop.index);
2051 if (!gop.found_existing) switch (source_info) {2143 if (!gop.found_existing) switch (source_info) {
2052 .basic => unreachable,2144 .basic => unreachable,
2053 .pointer => |pointer_info| pool.items.appendAssumeCapacity(.{2145 .pointer => |pointer_info| pool.items.appendAssumeCapacity(.{
...@@ -2232,7 +2324,7 @@ pub const Pool = struct {...@@ -2232,7 +2324,7 @@ pub const Pool = struct {
2232 CTypeAdapter{ .pool = pool },2324 CTypeAdapter{ .pool = pool },
2233 );2325 );
2234 if (!gop.found_existing) pool.items.appendAssumeCapacity(.{ .tag = tag, .data = data });2326 if (!gop.found_existing) pool.items.appendAssumeCapacity(.{ .tag = tag, .data = data });
2235 return CType.fromPoolIndex(gop.index);2327 return .fromPoolIndex(gop.index);
2236 }2328 }
22372329
2238 fn tagExtra(2330 fn tagExtra(
...@@ -2290,7 +2382,7 @@ pub const Pool = struct {...@@ -2290,7 +2382,7 @@ pub const Pool = struct {
2290 pool.extra.shrinkRetainingCapacity(extra_index)2382 pool.extra.shrinkRetainingCapacity(extra_index)
2291 else2383 else
2292 pool.items.appendAssumeCapacity(.{ .tag = tag, .data = extra_index });2384 pool.items.appendAssumeCapacity(.{ .tag = tag, .data = extra_index });
2293 return CType.fromPoolIndex(gop.index);2385 return .fromPoolIndex(gop.index);
2294 }2386 }
22952387
2296 fn sortFields(fields: []Info.Field) void {2388 fn sortFields(fields: []Info.Field) void {
test/behavior/abs.zig+1-1
...@@ -335,12 +335,12 @@ fn testAbsUnsignedIntVectors(comptime len: comptime_int) !void {...@@ -335,12 +335,12 @@ fn testAbsUnsignedIntVectors(comptime len: comptime_int) !void {
335335
336test "@abs float vectors" {336test "@abs float vectors" {
337 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO337 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
338 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
339 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO338 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
340 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO339 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
341 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO340 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
342 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;341 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
343 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;342 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
345 // https://github.com/ziglang/zig/issues/12827345 // https://github.com/ziglang/zig/issues/12827
346 if (builtin.zig_backend == .stage2_llvm and346 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 {...@@ -32,6 +32,7 @@ pub fn build(b: *std.Build) void {
32 .cpu_features_sub = std.Target.x86.featureSet(&.{32 .cpu_features_sub = std.Target.x86.featureSet(&.{
33 .cmov,33 .cmov,
34 //.sse,34 //.sse,
35 .sse2,
35 }),36 }),
36 },37 },
37 //.{38 //.{
test/behavior/x86_64/math.zig+154-10
...@@ -22,16 +22,20 @@ inline fn sign(rhs: anytype) switch (@typeInfo(@TypeOf(rhs))) {...@@ -22,16 +22,20 @@ inline fn sign(rhs: anytype) switch (@typeInfo(@TypeOf(rhs))) {
22 .vector => |vector| @Vector(vector.len, bool),22 .vector => |vector| @Vector(vector.len, bool),
23} {23} {
24 switch (@typeInfo(@TypeOf(rhs))) {24 switch (@typeInfo(@TypeOf(rhs))) {
25 else => return @as(@Type(.{ .int = .{25 else => {
26 .signedness = .signed,26 const I = @Type(.{ .int = .{
27 .bits = @bitSizeOf(@TypeOf(rhs)),27 .signedness = .unsigned,
28 } }), @bitCast(rhs)) < 0,28 .bits = @bitSizeOf(@TypeOf(rhs)),
29 } });
30 return @as(I, @bitCast(rhs)) & @as(I, 1) << (@bitSizeOf(I) - 1) != 0;
31 },
29 .vector => |vector| {32 .vector => |vector| {
30 const V = @Vector(vector.len, @Type(.{ .int = .{33 const I = @Type(.{ .int = .{
31 .signedness = .signed,34 .signedness = .unsigned,
32 .bits = @bitSizeOf(vector.child),35 .bits = @bitSizeOf(vector.child),
33 } }));36 } });
34 return @as(V, @bitCast(rhs)) < @as(V, @splat(0));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));
35 },39 },
36 }40 }
37}41}
...@@ -40,7 +44,7 @@ inline fn boolAnd(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {...@@ -40,7 +44,7 @@ inline fn boolAnd(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
40 .bool => return lhs and rhs,44 .bool => return lhs and rhs,
41 .vector => |vector| switch (vector.child) {45 .vector => |vector| switch (vector.child) {
42 bool => {46 bool => {
43 const Bits = @Vector(vector.len, u1);47 const Bits = @Type(.{ .int = .{ .signedness = .unsigned, .bits = vector.len } });
44 const lhs_bits: Bits = @bitCast(lhs);48 const lhs_bits: Bits = @bitCast(lhs);
45 const rhs_bits: Bits = @bitCast(rhs);49 const rhs_bits: Bits = @bitCast(rhs);
46 return @bitCast(lhs_bits & rhs_bits);50 return @bitCast(lhs_bits & rhs_bits);
...@@ -56,7 +60,7 @@ inline fn boolOr(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {...@@ -56,7 +60,7 @@ inline fn boolOr(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
56 .bool => return lhs or rhs,60 .bool => return lhs or rhs,
57 .vector => |vector| switch (vector.child) {61 .vector => |vector| switch (vector.child) {
58 bool => {62 bool => {
59 const Bits = @Vector(vector.len, u1);63 const Bits = @Type(.{ .int = .{ .signedness = .unsigned, .bits = vector.len } });
60 const lhs_bits: Bits = @bitCast(lhs);64 const lhs_bits: Bits = @bitCast(lhs);
61 const rhs_bits: Bits = @bitCast(rhs);65 const rhs_bits: Bits = @bitCast(rhs);
62 return @bitCast(lhs_bits | rhs_bits);66 return @bitCast(lhs_bits | rhs_bits);
...@@ -1179,6 +1183,145 @@ fn Unary(comptime op: anytype) type {...@@ -1179,6 +1183,145 @@ fn Unary(comptime op: anytype) type {
1179 try testArgs(@Vector(3, i1025), .{ -1 << 1024, -1, 0 });1183 try testArgs(@Vector(3, i1025), .{ -1 << 1024, -1, 0 });
1180 try testArgs(@Vector(3, u1025), .{ 0, 1, 1 << 1024 });1184 try testArgs(@Vector(3, u1025), .{ 0, 1, 1 << 1024 });
1181 }1185 }
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 }
1182 };1325 };
1183}1326}
11841327
...@@ -1601,6 +1744,7 @@ test abs {...@@ -1601,6 +1744,7 @@ test abs {
1601 try Unary(abs).testIntTypes();1744 try Unary(abs).testIntTypes();
1602 try Unary(abs).testIntVectorTypes();1745 try Unary(abs).testIntVectorTypes();
1603 try Unary(abs).testFloatTypes();1746 try Unary(abs).testFloatTypes();
1747 try Unary(abs).testFloatVectorTypes();
1604}1748}
16051749
1606inline fn clz(comptime Type: type, rhs: Type) @TypeOf(@clz(rhs)) {1750inline 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 {...@@ -526,8 +526,9 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
526 \\ var null_u32: ?u32 = null;526 \\ var null_u32: ?u32 = null;
527 \\ var maybe_u32: ?u32 = null;527 \\ var maybe_u32: ?u32 = null;
528 \\ var nonnull_u32: ?u32 = 456;528 \\ var nonnull_u32: ?u32 = 456;
529 \\ null_u32 = null_u32;
529 \\ maybe_u32 = 123;530 \\ maybe_u32 = 123;
530 \\ _ = .{ &null_u32, &nonnull_u32 };531 \\ nonnull_u32 = nonnull_u32;
531 \\ }532 \\ }
532 \\}533 \\}
533 \\534 \\
...@@ -539,7 +540,7 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -539,7 +540,7 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
539 \\frame variable -- null_u32 maybe_u32 nonnull_u32540 \\frame variable -- null_u32 maybe_u32 nonnull_u32
540 \\breakpoint delete --force 1541 \\breakpoint delete --force 1
541 \\542 \\
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;'
543 \\process continue544 \\process continue
544 \\frame variable --show-types -- null_u32 maybe_u32 nonnull_u32545 \\frame variable --show-types -- null_u32 maybe_u32 nonnull_u32
545 \\breakpoint delete --force 2546 \\breakpoint delete --force 2
...@@ -1285,10 +1286,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -1285,10 +1286,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
1285 \\ mod1.m1cfi(r0pai ^ 8);1286 \\ mod1.m1cfi(r0pai ^ 8);
1286 \\}1287 \\}
1287 \\pub fn r0cf(r0ca: u32) void {1288 \\pub fn r0cf(r0ca: u32) void {
1288 \\ _ = r0ca;1289 \\ var discard = r0ca;
1290 \\ _ = &discard;
1289 \\}1291 \\}
1290 \\pub inline fn r0cfi(r0cai: u32) void {1292 \\pub inline fn r0cfi(r0cai: u32) void {
1291 \\ _ = r0cai;1293 \\ var discard = r0cai;
1294 \\ _ = &discard;
1292 \\}1295 \\}
1293 \\pub fn main() void {1296 \\pub fn main() void {
1294 \\ root0.r0pf(12);1297 \\ root0.r0pf(12);
...@@ -1331,10 +1334,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -1331,10 +1334,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
1331 \\ mod1.m1cfi(r1pai ^ 8);1334 \\ mod1.m1cfi(r1pai ^ 8);
1332 \\}1335 \\}
1333 \\pub fn r1cf(r1ca: u32) void {1336 \\pub fn r1cf(r1ca: u32) void {
1334 \\ _ = r1ca;1337 \\ var discard = r1ca;
1338 \\ _ = &discard;
1335 \\}1339 \\}
1336 \\pub inline fn r1cfi(r1cai: u32) void {1340 \\pub inline fn r1cfi(r1cai: u32) void {
1337 \\ _ = r1cai;1341 \\ var discard = r1cai;
1342 \\ _ = &discard;
1338 \\}1343 \\}
1339 \\1344 \\
1340 ,1345 ,
...@@ -1368,10 +1373,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -1368,10 +1373,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
1368 \\ mod1.m1cfi(m0pai ^ 8);1373 \\ mod1.m1cfi(m0pai ^ 8);
1369 \\}1374 \\}
1370 \\pub fn m0cf(m0ca: u32) void {1375 \\pub fn m0cf(m0ca: u32) void {
1371 \\ _ = m0ca;1376 \\ var discard = m0ca;
1377 \\ _ = &discard;
1372 \\}1378 \\}
1373 \\pub inline fn m0cfi(m0cai: u32) void {1379 \\pub inline fn m0cfi(m0cai: u32) void {
1374 \\ _ = m0cai;1380 \\ var discard = m0cai;
1381 \\ _ = &discard;
1375 \\}1382 \\}
1376 \\1383 \\
1377 ,1384 ,
...@@ -1404,10 +1411,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -1404,10 +1411,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
1404 \\ mod1.m1cfi(m1pai ^ 8);1411 \\ mod1.m1cfi(m1pai ^ 8);
1405 \\}1412 \\}
1406 \\pub fn m1cf(m1ca: u32) void {1413 \\pub fn m1cf(m1ca: u32) void {
1407 \\ _ = m1ca;1414 \\ var discard = m1ca;
1415 \\ _ = &discard;
1408 \\}1416 \\}
1409 \\pub inline fn m1cfi(m1cai: u32) void {1417 \\pub inline fn m1cfi(m1cai: u32) void {
1410 \\ _ = m1cai;1418 \\ var discard = m1cai;
1419 \\ _ = &discard;
1411 \\}1420 \\}
1412 \\1421 \\
1413 ,1422 ,
...@@ -1416,13 +1425,13 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -1416,13 +1425,13 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
1416 \\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'1425 \\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'
1417 \\1426 \\
1418 \\breakpoint set --file root0.zig --line 261427 \\breakpoint set --file root0.zig --line 26
1419 \\breakpoint set --file root0.zig --line 291428 \\breakpoint set --file root0.zig --line 30
1420 \\breakpoint set --file root1.zig --line 261429 \\breakpoint set --file root1.zig --line 26
1421 \\breakpoint set --file root1.zig --line 291430 \\breakpoint set --file root1.zig --line 30
1422 \\breakpoint set --file mod0.zig --line 261431 \\breakpoint set --file mod0.zig --line 26
1423 \\breakpoint set --file mod0.zig --line 291432 \\breakpoint set --file mod0.zig --line 30
1424 \\breakpoint set --file mod1.zig --line 261433 \\breakpoint set --file mod1.zig --line 26
1425 \\breakpoint set --file mod1.zig --line 291434 \\breakpoint set --file mod1.zig --line 30
1426 \\1435 \\
1427 \\process launch1436 \\process launch
1428 \\thread backtrace --count 31437 \\thread backtrace --count 3
...@@ -1563,259 +1572,259 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -1563,259 +1572,259 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
1563 &.{1572 &.{
1564 \\ * frame #0: inline_call`root0.r0cf(r0ca=13) at root0.zig:26:51573 \\ * frame #0: inline_call`root0.r0cf(r0ca=13) at root0.zig:26:5
1565 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:6:151574 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:6:15
1566 \\ frame #2: inline_call`root0.main at root0.zig:32:151575 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1567 ,1576 ,
1568 \\ * frame #0: inline_call`root0.r0pf [inlined] r0cfi(r0cai=14) at root0.zig:29:51577 \\ * frame #0: inline_call`root0.r0pf [inlined] r0cfi(r0cai=14) at root0.zig:30:5
1569 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:7:161578 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:7:16
1570 \\ frame #2: inline_call`root0.main at root0.zig:32:151579 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1571 ,1580 ,
1572 \\ * frame #0: inline_call`root1.r1cf(r1ca=15) at root1.zig:26:51581 \\ * frame #0: inline_call`root1.r1cf(r1ca=15) at root1.zig:26:5
1573 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:8:151582 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:8:15
1574 \\ frame #2: inline_call`root0.main at root0.zig:32:151583 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1575 ,1584 ,
1576 \\ * frame #0: inline_call`root0.r0pf [inlined] r1cfi(r1cai=8) at root1.zig:29:51585 \\ * frame #0: inline_call`root0.r0pf [inlined] r1cfi(r1cai=8) at root1.zig:30:5
1577 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:9:161586 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:9:16
1578 \\ frame #2: inline_call`root0.main at root0.zig:32:151587 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1579 ,1588 ,
1580 \\ * frame #0: inline_call`mod0.m0cf(m0ca=9) at mod0.zig:26:51589 \\ * frame #0: inline_call`mod0.m0cf(m0ca=9) at mod0.zig:26:5
1581 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:10:141590 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:10:14
1582 \\ frame #2: inline_call`root0.main at root0.zig:32:151591 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1583 ,1592 ,
1584 \\ * frame #0: inline_call`root0.r0pf [inlined] m0cfi(m0cai=10) at mod0.zig:29:51593 \\ * frame #0: inline_call`root0.r0pf [inlined] m0cfi(m0cai=10) at mod0.zig:30:5
1585 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:11:151594 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:11:15
1586 \\ frame #2: inline_call`root0.main at root0.zig:32:151595 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1587 ,1596 ,
1588 \\ * frame #0: inline_call`mod1.m1cf(m1ca=11) at mod1.zig:26:51597 \\ * frame #0: inline_call`mod1.m1cf(m1ca=11) at mod1.zig:26:5
1589 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:12:141598 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:12:14
1590 \\ frame #2: inline_call`root0.main at root0.zig:32:151599 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1591 ,1600 ,
1592 \\ * frame #0: inline_call`root0.r0pf [inlined] m1cfi(m1cai=4) at mod1.zig:29:51601 \\ * frame #0: inline_call`root0.r0pf [inlined] m1cfi(m1cai=4) at mod1.zig:30:5
1593 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:13:151602 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:13:15
1594 \\ frame #2: inline_call`root0.main at root0.zig:32:151603 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1595 ,1604 ,
1596 \\ * frame #0: inline_call`root0.r0cf(r0ca=22) at root0.zig:26:51605 \\ * frame #0: inline_call`root0.r0cf(r0ca=22) at root0.zig:26:5
1597 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:16:151606 \\ 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:161607 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1599 ,1608 ,
1600 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=21) at root0.zig:29:51609 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=21) at root0.zig:30:5
1601 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:17:161610 \\ 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:161611 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1603 ,1612 ,
1604 \\ * frame #0: inline_call`root1.r1cf(r1ca=20) at root1.zig:26:51613 \\ * frame #0: inline_call`root1.r1cf(r1ca=20) at root1.zig:26:5
1605 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:18:151614 \\ 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:161615 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1607 ,1616 ,
1608 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=19) at root1.zig:29:51617 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=19) at root1.zig:30:5
1609 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:19:161618 \\ 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:161619 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1611 ,1620 ,
1612 \\ * frame #0: inline_call`mod0.m0cf(m0ca=18) at mod0.zig:26:51621 \\ * frame #0: inline_call`mod0.m0cf(m0ca=18) at mod0.zig:26:5
1613 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:20:141622 \\ 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:161623 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1615 ,1624 ,
1616 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=17) at mod0.zig:29:51625 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=17) at mod0.zig:30:5
1617 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:21:151626 \\ 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:161627 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1619 ,1628 ,
1620 \\ * frame #0: inline_call`mod1.m1cf(m1ca=16) at mod1.zig:26:51629 \\ * frame #0: inline_call`mod1.m1cf(m1ca=16) at mod1.zig:26:5
1621 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:22:141630 \\ 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:161631 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1623 ,1632 ,
1624 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=31) at mod1.zig:29:51633 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=31) at mod1.zig:30:5
1625 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:23:151634 \\ 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:161635 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1627 ,1636 ,
1628 \\ * frame #0: inline_call`root0.r0cf(r0ca=35) at root0.zig:26:51637 \\ * frame #0: inline_call`root0.r0cf(r0ca=35) at root0.zig:26:5
1629 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:6:151638 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:6:15
1630 \\ frame #2: inline_call`root0.main at root0.zig:34:151639 \\ frame #2: inline_call`root0.main at root0.zig:36:15
1631 ,1640 ,
1632 \\ * frame #0: inline_call`root1.r1pf [inlined] r0cfi(r0cai=32) at root0.zig:29:51641 \\ * frame #0: inline_call`root1.r1pf [inlined] r0cfi(r0cai=32) at root0.zig:30:5
1633 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:7:161642 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:7:16
1634 \\ frame #2: inline_call`root0.main at root0.zig:34:151643 \\ frame #2: inline_call`root0.main at root0.zig:36:15
1635 ,1644 ,
1636 \\ * frame #0: inline_call`root1.r1cf(r1ca=33) at root1.zig:26:51645 \\ * frame #0: inline_call`root1.r1cf(r1ca=33) at root1.zig:26:5
1637 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:8:151646 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:8:15
1638 \\ frame #2: inline_call`root0.main at root0.zig:34:151647 \\ frame #2: inline_call`root0.main at root0.zig:36:15
1639 ,1648 ,
1640 \\ * frame #0: inline_call`root1.r1pf [inlined] r1cfi(r1cai=38) at root1.zig:29:51649 \\ * frame #0: inline_call`root1.r1pf [inlined] r1cfi(r1cai=38) at root1.zig:30:5
1641 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:9:161650 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:9:16
1642 \\ frame #2: inline_call`root0.main at root0.zig:34:151651 \\ frame #2: inline_call`root0.main at root0.zig:36:15
1643 ,1652 ,
1644 \\ * frame #0: inline_call`mod0.m0cf(m0ca=39) at mod0.zig:26:51653 \\ * frame #0: inline_call`mod0.m0cf(m0ca=39) at mod0.zig:26:5
1645 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:10:141654 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:10:14
1646 \\ frame #2: inline_call`root0.main at root0.zig:34:151655 \\ frame #2: inline_call`root0.main at root0.zig:36:15
1647 ,1656 ,
1648 \\ * frame #0: inline_call`root1.r1pf [inlined] m0cfi(m0cai=36) at mod0.zig:29:51657 \\ * frame #0: inline_call`root1.r1pf [inlined] m0cfi(m0cai=36) at mod0.zig:30:5
1649 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:11:151658 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:11:15
1650 \\ frame #2: inline_call`root0.main at root0.zig:34:151659 \\ frame #2: inline_call`root0.main at root0.zig:36:15
1651 ,1660 ,
1652 \\ * frame #0: inline_call`mod1.m1cf(m1ca=37) at mod1.zig:26:51661 \\ * frame #0: inline_call`mod1.m1cf(m1ca=37) at mod1.zig:26:5
1653 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:12:141662 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:12:14
1654 \\ frame #2: inline_call`root0.main at root0.zig:34:151663 \\ frame #2: inline_call`root0.main at root0.zig:36:15
1655 ,1664 ,
1656 \\ * frame #0: inline_call`root1.r1pf [inlined] m1cfi(m1cai=42) at mod1.zig:29:51665 \\ * frame #0: inline_call`root1.r1pf [inlined] m1cfi(m1cai=42) at mod1.zig:30:5
1657 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:13:151666 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:13:15
1658 \\ frame #2: inline_call`root0.main at root0.zig:34:151667 \\ frame #2: inline_call`root0.main at root0.zig:36:15
1659 ,1668 ,
1660 \\ * frame #0: inline_call`root0.r0cf(r0ca=44) at root0.zig:26:51669 \\ * frame #0: inline_call`root0.r0cf(r0ca=44) at root0.zig:26:5
1661 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:16:151670 \\ 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:161671 \\ frame #2: inline_call`root0.main at root0.zig:37:16
1663 ,1672 ,
1664 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=47) at root0.zig:29:51673 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=47) at root0.zig:30:5
1665 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:17:161674 \\ 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:161675 \\ frame #2: inline_call`root0.main at root0.zig:37:16
1667 ,1676 ,
1668 \\ * frame #0: inline_call`root1.r1cf(r1ca=46) at root1.zig:26:51677 \\ * frame #0: inline_call`root1.r1cf(r1ca=46) at root1.zig:26:5
1669 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:18:151678 \\ 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:161679 \\ frame #2: inline_call`root0.main at root0.zig:37:16
1671 ,1680 ,
1672 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=41) at root1.zig:29:51681 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=41) at root1.zig:30:5
1673 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:19:161682 \\ 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:161683 \\ frame #2: inline_call`root0.main at root0.zig:37:16
1675 ,1684 ,
1676 \\ * frame #0: inline_call`mod0.m0cf(m0ca=40) at mod0.zig:26:51685 \\ * frame #0: inline_call`mod0.m0cf(m0ca=40) at mod0.zig:26:5
1677 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:20:141686 \\ 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:161687 \\ frame #2: inline_call`root0.main at root0.zig:37:16
1679 ,1688 ,
1680 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=43) at mod0.zig:29:51689 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=43) at mod0.zig:30:5
1681 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:21:151690 \\ 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:161691 \\ frame #2: inline_call`root0.main at root0.zig:37:16
1683 ,1692 ,
1684 \\ * frame #0: inline_call`mod1.m1cf(m1ca=42) at mod1.zig:26:51693 \\ * frame #0: inline_call`mod1.m1cf(m1ca=42) at mod1.zig:26:5
1685 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:22:141694 \\ 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:161695 \\ frame #2: inline_call`root0.main at root0.zig:37:16
1687 ,1696 ,
1688 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=37) at mod1.zig:29:51697 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=37) at mod1.zig:30:5
1689 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:23:151698 \\ 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:161699 \\ frame #2: inline_call`root0.main at root0.zig:37:16
1691 ,1700 ,
1692 \\ * frame #0: inline_call`root0.r0cf(r0ca=57) at root0.zig:26:51701 \\ * frame #0: inline_call`root0.r0cf(r0ca=57) at root0.zig:26:5
1693 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:6:151702 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:6:15
1694 \\ frame #2: inline_call`root0.main at root0.zig:36:141703 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1695 ,1704 ,
1696 \\ * frame #0: inline_call`mod0.m0pf [inlined] r0cfi(r0cai=58) at root0.zig:29:51705 \\ * frame #0: inline_call`mod0.m0pf [inlined] r0cfi(r0cai=58) at root0.zig:30:5
1697 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:7:161706 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:7:16
1698 \\ frame #2: inline_call`root0.main at root0.zig:36:141707 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1699 ,1708 ,
1700 \\ * frame #0: inline_call`root1.r1cf(r1ca=59) at root1.zig:26:51709 \\ * frame #0: inline_call`root1.r1cf(r1ca=59) at root1.zig:26:5
1701 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:8:151710 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:8:15
1702 \\ frame #2: inline_call`root0.main at root0.zig:36:141711 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1703 ,1712 ,
1704 \\ * frame #0: inline_call`mod0.m0pf [inlined] r1cfi(r1cai=60) at root1.zig:29:51713 \\ * frame #0: inline_call`mod0.m0pf [inlined] r1cfi(r1cai=60) at root1.zig:30:5
1705 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:9:161714 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:9:16
1706 \\ frame #2: inline_call`root0.main at root0.zig:36:141715 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1707 ,1716 ,
1708 \\ * frame #0: inline_call`mod0.m0cf(m0ca=61) at mod0.zig:26:51717 \\ * frame #0: inline_call`mod0.m0cf(m0ca=61) at mod0.zig:26:5
1709 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:10:141718 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:10:14
1710 \\ frame #2: inline_call`root0.main at root0.zig:36:141719 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1711 ,1720 ,
1712 \\ * frame #0: inline_call`mod0.m0pf [inlined] m0cfi(m0cai=62) at mod0.zig:29:51721 \\ * frame #0: inline_call`mod0.m0pf [inlined] m0cfi(m0cai=62) at mod0.zig:30:5
1713 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:11:151722 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:11:15
1714 \\ frame #2: inline_call`root0.main at root0.zig:36:141723 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1715 ,1724 ,
1716 \\ * frame #0: inline_call`mod1.m1cf(m1ca=63) at mod1.zig:26:51725 \\ * frame #0: inline_call`mod1.m1cf(m1ca=63) at mod1.zig:26:5
1717 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:12:141726 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:12:14
1718 \\ frame #2: inline_call`root0.main at root0.zig:36:141727 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1719 ,1728 ,
1720 \\ * frame #0: inline_call`mod0.m0pf [inlined] m1cfi(m1cai=48) at mod1.zig:29:51729 \\ * frame #0: inline_call`mod0.m0pf [inlined] m1cfi(m1cai=48) at mod1.zig:30:5
1721 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:13:151730 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:13:15
1722 \\ frame #2: inline_call`root0.main at root0.zig:36:141731 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1723 ,1732 ,
1724 \\ * frame #0: inline_call`root0.r0cf(r0ca=66) at root0.zig:26:51733 \\ * frame #0: inline_call`root0.r0cf(r0ca=66) at root0.zig:26:5
1725 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:16:151734 \\ 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:151735 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1727 ,1736 ,
1728 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=65) at root0.zig:29:51737 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=65) at root0.zig:30:5
1729 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:17:161738 \\ 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:151739 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1731 ,1740 ,
1732 \\ * frame #0: inline_call`root1.r1cf(r1ca=64) at root1.zig:26:51741 \\ * frame #0: inline_call`root1.r1cf(r1ca=64) at root1.zig:26:5
1733 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:18:151742 \\ 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:151743 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1735 ,1744 ,
1736 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=71) at root1.zig:29:51745 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=71) at root1.zig:30:5
1737 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:19:161746 \\ 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:151747 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1739 ,1748 ,
1740 \\ * frame #0: inline_call`mod0.m0cf(m0ca=70) at mod0.zig:26:51749 \\ * frame #0: inline_call`mod0.m0cf(m0ca=70) at mod0.zig:26:5
1741 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:20:141750 \\ 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:151751 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1743 ,1752 ,
1744 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=69) at mod0.zig:29:51753 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=69) at mod0.zig:30:5
1745 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:21:151754 \\ 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:151755 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1747 ,1756 ,
1748 \\ * frame #0: inline_call`mod1.m1cf(m1ca=68) at mod1.zig:26:51757 \\ * frame #0: inline_call`mod1.m1cf(m1ca=68) at mod1.zig:26:5
1749 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:22:141758 \\ 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:151759 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1751 ,1760 ,
1752 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=75) at mod1.zig:29:51761 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=75) at mod1.zig:30:5
1753 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:23:151762 \\ 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:151763 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1755 ,1764 ,
1756 \\ * frame #0: inline_call`root0.r0cf(r0ca=79) at root0.zig:26:51765 \\ * frame #0: inline_call`root0.r0cf(r0ca=79) at root0.zig:26:5
1757 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:6:151766 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:6:15
1758 \\ frame #2: inline_call`root0.main at root0.zig:38:141767 \\ frame #2: inline_call`root0.main at root0.zig:40:14
1759 ,1768 ,
1760 \\ * frame #0: inline_call`mod1.m1pf [inlined] r0cfi(r0cai=76) at root0.zig:29:51769 \\ * frame #0: inline_call`mod1.m1pf [inlined] r0cfi(r0cai=76) at root0.zig:30:5
1761 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:7:161770 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:7:16
1762 \\ frame #2: inline_call`root0.main at root0.zig:38:141771 \\ frame #2: inline_call`root0.main at root0.zig:40:14
1763 ,1772 ,
1764 \\ * frame #0: inline_call`root1.r1cf(r1ca=77) at root1.zig:26:51773 \\ * frame #0: inline_call`root1.r1cf(r1ca=77) at root1.zig:26:5
1765 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:8:151774 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:8:15
1766 \\ frame #2: inline_call`root0.main at root0.zig:38:141775 \\ frame #2: inline_call`root0.main at root0.zig:40:14
1767 ,1776 ,
1768 \\ * frame #0: inline_call`mod1.m1pf [inlined] r1cfi(r1cai=74) at root1.zig:29:51777 \\ * frame #0: inline_call`mod1.m1pf [inlined] r1cfi(r1cai=74) at root1.zig:30:5
1769 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:9:161778 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:9:16
1770 \\ frame #2: inline_call`root0.main at root0.zig:38:141779 \\ frame #2: inline_call`root0.main at root0.zig:40:14
1771 ,1780 ,
1772 \\ * frame #0: inline_call`mod0.m0cf(m0ca=75) at mod0.zig:26:51781 \\ * frame #0: inline_call`mod0.m0cf(m0ca=75) at mod0.zig:26:5
1773 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:10:141782 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:10:14
1774 \\ frame #2: inline_call`root0.main at root0.zig:38:141783 \\ frame #2: inline_call`root0.main at root0.zig:40:14
1775 ,1784 ,
1776 \\ * frame #0: inline_call`mod1.m1pf [inlined] m0cfi(m0cai=72) at mod0.zig:29:51785 \\ * frame #0: inline_call`mod1.m1pf [inlined] m0cfi(m0cai=72) at mod0.zig:30:5
1777 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:11:151786 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:11:15
1778 \\ frame #2: inline_call`root0.main at root0.zig:38:141787 \\ frame #2: inline_call`root0.main at root0.zig:40:14
1779 ,1788 ,
1780 \\ * frame #0: inline_call`mod1.m1cf(m1ca=73) at mod1.zig:26:51789 \\ * frame #0: inline_call`mod1.m1cf(m1ca=73) at mod1.zig:26:5
1781 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:12:141790 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:12:14
1782 \\ frame #2: inline_call`root0.main at root0.zig:38:141791 \\ frame #2: inline_call`root0.main at root0.zig:40:14
1783 ,1792 ,
1784 \\ * frame #0: inline_call`mod1.m1pf [inlined] m1cfi(m1cai=70) at mod1.zig:29:51793 \\ * frame #0: inline_call`mod1.m1pf [inlined] m1cfi(m1cai=70) at mod1.zig:30:5
1785 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:13:151794 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:13:15
1786 \\ frame #2: inline_call`root0.main at root0.zig:38:141795 \\ frame #2: inline_call`root0.main at root0.zig:40:14
1787 ,1796 ,
1788 \\ * frame #0: inline_call`root0.r0cf(r0ca=88) at root0.zig:26:51797 \\ * frame #0: inline_call`root0.r0cf(r0ca=88) at root0.zig:26:5
1789 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:16:151798 \\ 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:151799 \\ frame #2: inline_call`root0.main at root0.zig:41:15
1791 ,1800 ,
1792 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=91) at root0.zig:29:51801 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=91) at root0.zig:30:5
1793 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:17:161802 \\ 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:151803 \\ frame #2: inline_call`root0.main at root0.zig:41:15
1795 ,1804 ,
1796 \\ * frame #0: inline_call`root1.r1cf(r1ca=90) at root1.zig:26:51805 \\ * frame #0: inline_call`root1.r1cf(r1ca=90) at root1.zig:26:5
1797 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:18:151806 \\ 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:151807 \\ frame #2: inline_call`root0.main at root0.zig:41:15
1799 ,1808 ,
1800 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=93) at root1.zig:29:51809 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=93) at root1.zig:30:5
1801 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:19:161810 \\ 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:151811 \\ frame #2: inline_call`root0.main at root0.zig:41:15
1803 ,1812 ,
1804 \\ * frame #0: inline_call`mod0.m0cf(m0ca=92) at mod0.zig:26:51813 \\ * frame #0: inline_call`mod0.m0cf(m0ca=92) at mod0.zig:26:5
1805 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:20:141814 \\ 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:151815 \\ frame #2: inline_call`root0.main at root0.zig:41:15
1807 ,1816 ,
1808 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=95) at mod0.zig:29:51817 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=95) at mod0.zig:30:5
1809 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:21:151818 \\ 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:151819 \\ frame #2: inline_call`root0.main at root0.zig:41:15
1811 ,1820 ,
1812 \\ * frame #0: inline_call`mod1.m1cf(m1ca=94) at mod1.zig:26:51821 \\ * frame #0: inline_call`mod1.m1cf(m1ca=94) at mod1.zig:26:5
1813 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:22:141822 \\ 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:151823 \\ frame #2: inline_call`root0.main at root0.zig:41:15
1815 ,1824 ,
1816 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=81) at mod1.zig:29:51825 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=81) at mod1.zig:30:5
1817 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:23:151826 \\ 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:151827 \\ frame #2: inline_call`root0.main at root0.zig:41:15
1819 },1828 },
1820 );1829 );
1821 db.addLldbTest(1830 db.addLldbTest(