authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-09-24 15:56:07-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-24 21:20:27-07:00
log6257f4abb7c65b034b4c0804cff2623e22b9971d
tree1a5bd25f5b9c62123448c96da1edda9ad3991c25
parent99323a4da1617ba8fcf74656004dd5ad8d90dae1

x86_64: improve support for large enums

Closes #25247

2 files changed, 239 insertions(+), 45 deletions(-)

src/arch/x86_64/CodeGen.zig+220-45
...@@ -166723,6 +166723,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -166723,6 +166723,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
166723 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },166723 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
166724 .{ ._, ._, .@"test", .src0p, .src0p, ._, ._ },166724 .{ ._, ._, .@"test", .src0p, .src0p, ._, ._ },
166725 } },166725 } },
166726 }, .{
166727 .required_features = .{ .avx, null, null, null },
166728 .src_constraints = .{ .any_int, .any, .any },
166729 .patterns = &.{
166730 .{ .src = .{ .to_mem, .none, .none } },
166731 },
166732 .call_frame = .{ .alignment = .@"32" },
166733 .extra_temps = .{
166734 .{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .zigcc, .after = 0, .at = 0 } } },
166735 .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
166736 .unused,
166737 .unused,
166738 .unused,
166739 .unused,
166740 .unused,
166741 .unused,
166742 .unused,
166743 .unused,
166744 .unused,
166745 },
166746 .dst_temps = .{ .{ .cc = .nz }, .unused },
166747 .clobbers = .{ .eflags = true, .caller_preserved = .zigcc },
166748 .each = .{ .once = &.{
166749 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
166750 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
166751 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
166752 } },
166726 }, .{166753 }, .{
166727 .required_features = .{ .sse, null, null, null },166754 .required_features = .{ .sse, null, null, null },
166728 .src_constraints = .{ .{ .int = .gpr }, .any, .any },166755 .src_constraints = .{ .{ .int = .gpr }, .any, .any },
...@@ -166749,6 +166776,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -166749,6 +166776,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
166749 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },166776 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
166750 .{ ._, ._, .@"test", .src0p, .src0p, ._, ._ },166777 .{ ._, ._, .@"test", .src0p, .src0p, ._, ._ },
166751 } },166778 } },
166779 }, .{
166780 .required_features = .{ .sse, null, null, null },
166781 .src_constraints = .{ .any_int, .any, .any },
166782 .patterns = &.{
166783 .{ .src = .{ .to_mem, .none, .none } },
166784 },
166785 .call_frame = .{ .alignment = .@"16" },
166786 .extra_temps = .{
166787 .{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .zigcc, .after = 0, .at = 0 } } },
166788 .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
166789 .unused,
166790 .unused,
166791 .unused,
166792 .unused,
166793 .unused,
166794 .unused,
166795 .unused,
166796 .unused,
166797 .unused,
166798 },
166799 .dst_temps = .{ .{ .cc = .nz }, .unused },
166800 .clobbers = .{ .eflags = true, .caller_preserved = .zigcc },
166801 .each = .{ .once = &.{
166802 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
166803 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
166804 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
166805 } },
166752 }, .{166806 }, .{
166753 .src_constraints = .{ .{ .int = .gpr }, .any, .any },166807 .src_constraints = .{ .{ .int = .gpr }, .any, .any },
166754 .patterns = &.{166808 .patterns = &.{
...@@ -166774,6 +166828,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -166774,6 +166828,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
166774 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },166828 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
166775 .{ ._, ._, .@"test", .src0p, .src0p, ._, ._ },166829 .{ ._, ._, .@"test", .src0p, .src0p, ._, ._ },
166776 } },166830 } },
166831 }, .{
166832 .src_constraints = .{ .any_int, .any, .any },
166833 .patterns = &.{
166834 .{ .src = .{ .to_mem, .none, .none } },
166835 },
166836 .call_frame = .{ .alignment = .@"8" },
166837 .extra_temps = .{
166838 .{ .type = .usize, .kind = .{ .param_gpr = .{ .cc = .zigcc, .after = 0, .at = 0 } } },
166839 .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
166840 .unused,
166841 .unused,
166842 .unused,
166843 .unused,
166844 .unused,
166845 .unused,
166846 .unused,
166847 .unused,
166848 .unused,
166849 },
166850 .dst_temps = .{ .{ .cc = .nz }, .unused },
166851 .clobbers = .{ .eflags = true, .caller_preserved = .zigcc },
166852 .each = .{ .once = &.{
166853 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
166854 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
166855 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
166856 } },
166777 } }) catch |err| switch (err) {166857 } }) catch |err| switch (err) {
166778 error.SelectFailed => return cg.fail("failed to select {s} {f} {f}", .{166858 error.SelectFailed => return cg.fail("failed to select {s} {f} {f}", .{
166779 @tagName(air_tag),166859 @tagName(air_tag),
...@@ -166813,6 +166893,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -166813,6 +166893,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
166813 .each = .{ .once = &.{166893 .each = .{ .once = &.{
166814 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },166894 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
166815 } },166895 } },
166896 }, .{
166897 .required_features = .{ .avx, null, null, null },
166898 .src_constraints = .{ .any_int, .any, .any },
166899 .patterns = &.{
166900 .{ .src = .{ .to_mem, .none, .none } },
166901 },
166902 .call_frame = .{ .alignment = .@"32" },
166903 .extra_temps = .{
166904 .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
166905 .unused,
166906 .unused,
166907 .unused,
166908 .unused,
166909 .unused,
166910 .unused,
166911 .unused,
166912 .unused,
166913 .unused,
166914 .unused,
166915 },
166916 .dst_temps = .{ .{ .ret_gpr_pair = .{ .cc = .zigcc, .after = 0, .at = 0 } }, .unused },
166917 .clobbers = .{ .eflags = true, .caller_preserved = .zigcc },
166918 .each = .{ .once = &.{
166919 .{ ._, ._, .lea, .dst0p0, .mem(.src0), ._, ._ },
166920 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
166921 } },
166816 }, .{166922 }, .{
166817 .required_features = .{ .sse, null, null, null },166923 .required_features = .{ .sse, null, null, null },
166818 .src_constraints = .{ .{ .int = .gpr }, .any, .any },166924 .src_constraints = .{ .{ .int = .gpr }, .any, .any },
...@@ -166838,6 +166944,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -166838,6 +166944,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
166838 .each = .{ .once = &.{166944 .each = .{ .once = &.{
166839 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },166945 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
166840 } },166946 } },
166947 }, .{
166948 .required_features = .{ .sse, null, null, null },
166949 .src_constraints = .{ .any_int, .any, .any },
166950 .patterns = &.{
166951 .{ .src = .{ .to_mem, .none, .none } },
166952 },
166953 .call_frame = .{ .alignment = .@"16" },
166954 .extra_temps = .{
166955 .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
166956 .unused,
166957 .unused,
166958 .unused,
166959 .unused,
166960 .unused,
166961 .unused,
166962 .unused,
166963 .unused,
166964 .unused,
166965 .unused,
166966 },
166967 .dst_temps = .{ .{ .ret_gpr_pair = .{ .cc = .zigcc, .after = 0, .at = 0 } }, .unused },
166968 .clobbers = .{ .eflags = true, .caller_preserved = .zigcc },
166969 .each = .{ .once = &.{
166970 .{ ._, ._, .lea, .dst0p0, .mem(.src0), ._, ._ },
166971 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
166972 } },
166841 }, .{166973 }, .{
166842 .src_constraints = .{ .{ .int = .gpr }, .any, .any },166974 .src_constraints = .{ .{ .int = .gpr }, .any, .any },
166843 .patterns = &.{166975 .patterns = &.{
...@@ -166862,6 +166994,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -166862,6 +166994,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
166862 .each = .{ .once = &.{166994 .each = .{ .once = &.{
166863 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },166995 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
166864 } },166996 } },
166997 }, .{
166998 .required_features = .{ .sse, null, null, null },
166999 .src_constraints = .{ .any_int, .any, .any },
167000 .patterns = &.{
167001 .{ .src = .{ .to_mem, .none, .none } },
167002 },
167003 .call_frame = .{ .alignment = .@"8" },
167004 .extra_temps = .{
167005 .{ .type = .usize, .kind = .{ .lazy_sym = .{ .kind = .code, .ref = .src0 } } },
167006 .unused,
167007 .unused,
167008 .unused,
167009 .unused,
167010 .unused,
167011 .unused,
167012 .unused,
167013 .unused,
167014 .unused,
167015 .unused,
167016 },
167017 .dst_temps = .{ .{ .ret_gpr_pair = .{ .cc = .zigcc, .after = 0, .at = 0 } }, .unused },
167018 .clobbers = .{ .eflags = true, .caller_preserved = .zigcc },
167019 .each = .{ .once = &.{
167020 .{ ._, ._, .lea, .dst0p0, .mem(.src0), ._, ._ },
167021 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
167022 } },
166865 } }) catch |err| switch (err) {167023 } }) catch |err| switch (err) {
166866 error.SelectFailed => return cg.fail("failed to select {s} {f} {f}", .{167024 error.SelectFailed => return cg.fail("failed to select {s} {f} {f}", .{
166867 @tagName(air_tag),167025 @tagName(air_tag),
...@@ -166870,7 +167028,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -166870,7 +167028,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
166870 }),167028 }),
166871 else => |e| return e,167029 else => |e| return e,
166872 };167030 };
166873 try ops[0].toPair(&res[0], cg);167031 if (res[0].tracking(cg).short != .register_pair) try ops[0].toPair(&res[0], cg);
166874 try res[0].finish(inst, &.{un_op}, &ops, cg);167032 try res[0].finish(inst, &.{un_op}, &ops, cg);
166875 },167033 },
166876 .error_name => |air_tag| {167034 .error_name => |air_tag| {
...@@ -169241,32 +169399,43 @@ fn genLazy(cg: *CodeGen, lazy_sym: link.File.LazySymbol) InnerError!void {...@@ -169241,32 +169399,43 @@ fn genLazy(cg: *CodeGen, lazy_sym: link.File.LazySymbol) InnerError!void {
169241 const enum_ty: Type = .fromInterned(lazy_sym.ty);169399 const enum_ty: Type = .fromInterned(lazy_sym.ty);
169242 wip_mir_log.debug("{f}.@tagName:", .{enum_ty.fmt(pt)});169400 wip_mir_log.debug("{f}.@tagName:", .{enum_ty.fmt(pt)});
169243169401
169244 const param_regs = abi.getCAbiIntParamRegs(.auto);169402 const ret_regs = abi.getCAbiIntReturnRegs(.auto)[0..2].*;
169245 const param_locks = cg.register_manager.lockRegsAssumeUnused(2, param_regs[0..2].*);169403 const ret_locks = cg.register_manager.lockRegsAssumeUnused(2, ret_regs);
169246 defer for (param_locks) |lock| cg.register_manager.unlockReg(lock);169404 defer for (ret_locks) |lock| cg.register_manager.unlockReg(lock);
169405
169406 const param_reg = abi.getCAbiIntParamRegs(.auto)[0];
169407 const param_lock = cg.register_manager.lockReg(param_reg);
169408 defer if (param_lock) |lock| cg.register_manager.unlockReg(lock);
169247169409
169248 const ret_mcv: MCValue = .{ .register_pair = param_regs[0..2].* };169410 const ret_mcv: MCValue = .{ .register_pair = ret_regs };
169249 var enum_temp = try cg.tempInit(enum_ty, .{ .register = param_regs[0] });
169250169411
169251 const data_reg = try cg.register_manager.allocReg(null, abi.RegisterClass.gp);169412 const data_reg = try cg.register_manager.allocReg(null, abi.RegisterClass.gp);
169252 const data_lock = cg.register_manager.lockRegAssumeUnused(data_reg);169413 const data_lock = cg.register_manager.lockRegAssumeUnused(data_reg);
169253 defer cg.register_manager.unlockReg(data_lock);169414 defer cg.register_manager.unlockReg(data_lock);
169254 try cg.genLazySymbolRef(.lea, data_reg, .{ .kind = .const_data, .ty = lazy_sym.ty });169415 try cg.asmRegisterMemory(.{ ._, .lea }, data_reg.to64(), .{
169416 .base = .{ .lazy_sym = .{ .kind = .const_data, .ty = lazy_sym.ty } },
169417 });
169255169418
169256 var data_off: i32 = 0;169419 var data_off: i32 = 0;
169257 const reset_index = cg.next_temp_index;169420 const reset_index = cg.next_temp_index;
169258 const tag_names = ip.loadEnumType(lazy_sym.ty).names;169421 const tag_names = ip.loadEnumType(lazy_sym.ty).names;
169259 for (0..tag_names.len) |tag_index| {169422 for (0..tag_names.len) |tag_index| {
169423 var enum_temp = try cg.tempInit(enum_ty, if (enum_ty.abiSize(zcu) <= @as(u4, switch (cg.target.cpu.arch) {
169424 else => unreachable,
169425 .x86 => 4,
169426 .x86_64 => 8,
169427 })) .{ .register = param_reg } else .{ .indirect = .{ .reg = param_reg } });
169428
169260 const tag_name_len = tag_names.get(ip)[tag_index].length(ip);169429 const tag_name_len = tag_names.get(ip)[tag_index].length(ip);
169261 var tag_temp = try cg.tempFromValue(try pt.enumValueFieldIndex(enum_ty, @intCast(tag_index)));169430 var tag_temp = try cg.tempFromValue(try pt.enumValueFieldIndex(enum_ty, @intCast(tag_index)));
169262 const cc_temp = enum_temp.cmpInts(.neq, &tag_temp, cg) catch |err| switch (err) {169431 const cc_temp = enum_temp.cmpInts(.neq, &tag_temp, cg) catch |err| switch (err) {
169263 error.SelectFailed => unreachable,169432 error.SelectFailed => unreachable,
169264 else => |e| return e,169433 else => |e| return e,
169265 };169434 };
169435 try enum_temp.die(cg);
169266 try tag_temp.die(cg);169436 try tag_temp.die(cg);
169267 const skip_reloc = try cg.asmJccReloc(cc_temp.tracking(cg).short.eflags, undefined);169437 const skip_reloc = try cg.asmJccReloc(cc_temp.tracking(cg).short.eflags, undefined);
169268 try cc_temp.die(cg);169438 try cc_temp.die(cg);
169269 try cg.resetTemps(reset_index);
169270169439
169271 try cg.genSetReg(169440 try cg.genSetReg(
169272 ret_mcv.register_pair[0],169441 ret_mcv.register_pair[0],
...@@ -169280,8 +169449,9 @@ fn genLazy(cg: *CodeGen, lazy_sym: link.File.LazySymbol) InnerError!void {...@@ -169280,8 +169449,9 @@ fn genLazy(cg: *CodeGen, lazy_sym: link.File.LazySymbol) InnerError!void {
169280 cg.performReloc(skip_reloc);169449 cg.performReloc(skip_reloc);
169281169450
169282 data_off += @intCast(tag_name_len + 1);169451 data_off += @intCast(tag_name_len + 1);
169452
169453 try cg.resetTemps(reset_index);
169283 }169454 }
169284 try enum_temp.die(cg);
169285169455
169286 try cg.genSetReg(ret_mcv.register_pair[0], .usize, .{ .immediate = 0 }, .{});169456 try cg.genSetReg(ret_mcv.register_pair[0], .usize, .{ .immediate = 0 }, .{});
169287 try cg.asmOpOnly(.{ ._, .ret });169457 try cg.asmOpOnly(.{ ._, .ret });
...@@ -169290,12 +169460,16 @@ fn genLazy(cg: *CodeGen, lazy_sym: link.File.LazySymbol) InnerError!void {...@@ -169290,12 +169460,16 @@ fn genLazy(cg: *CodeGen, lazy_sym: link.File.LazySymbol) InnerError!void {
169290 const err_ty: Type = .fromInterned(lazy_sym.ty);169460 const err_ty: Type = .fromInterned(lazy_sym.ty);
169291 wip_mir_log.debug("{f}.@errorCast:", .{err_ty.fmt(pt)});169461 wip_mir_log.debug("{f}.@errorCast:", .{err_ty.fmt(pt)});
169292169462
169293 const param_regs = abi.getCAbiIntParamRegs(.auto);169463 const ret_reg = abi.getCAbiIntReturnRegs(.auto)[0];
169294 const param_locks = cg.register_manager.lockRegsAssumeUnused(2, param_regs[0..2].*);169464 const ret_lock = cg.register_manager.lockRegAssumeUnused(ret_reg);
169295 defer for (param_locks) |lock| cg.register_manager.unlockReg(lock);169465 defer cg.register_manager.unlockReg(ret_lock);
169466
169467 const param_reg = abi.getCAbiIntParamRegs(.auto)[0];
169468 const param_lock = cg.register_manager.lockReg(param_reg);
169469 defer if (param_lock) |lock| cg.register_manager.unlockReg(lock);
169296169470
169297 const ret_mcv: MCValue = .{ .register = param_regs[0] };169471 const ret_mcv: MCValue = .{ .register = ret_reg };
169298 const err_mcv: MCValue = .{ .register = param_regs[0] };169472 const err_mcv: MCValue = .{ .register = param_reg };
169299 var err_temp = try cg.tempInit(err_ty, err_mcv);169473 var err_temp = try cg.tempInit(err_ty, err_mcv);
169300169474
169301 const ExpectedContents = [32]Mir.Inst.Index;169475 const ExpectedContents = [32]Mir.Inst.Index;
...@@ -182010,37 +182184,6 @@ fn genInlineMemset(...@@ -182010,37 +182184,6 @@ fn genInlineMemset(
182010 try self.asmOpOnly(.{ .@"rep _sb", .sto });182184 try self.asmOpOnly(.{ .@"rep _sb", .sto });
182011}182185}
182012182186
182013fn genLazySymbolRef(
182014 self: *CodeGen,
182015 comptime tag: Mir.Inst.Tag,
182016 reg: Register,
182017 lazy_sym: link.File.LazySymbol,
182018) InnerError!void {
182019 if (self.mod.pic) {
182020 switch (tag) {
182021 .lea, .call => try self.genSetReg(reg, .usize, .{
182022 .lea_lazy_sym = lazy_sym,
182023 }, .{}),
182024 .mov => try self.genSetReg(reg, .usize, .{
182025 .lea_lazy_sym = lazy_sym,
182026 }, .{}),
182027 else => unreachable,
182028 }
182029 switch (tag) {
182030 .lea, .mov => {},
182031 .call => try self.asmRegister(.{ ._, .call }, reg),
182032 else => unreachable,
182033 }
182034 } else switch (tag) {
182035 .lea, .mov => try self.asmRegisterMemory(.{ ._, tag }, reg.to64(), .{
182036 .base = .{ .lazy_sym = lazy_sym },
182037 .mod = .{ .rm = .{ .size = .qword } },
182038 }),
182039 .call => try self.asmImmediate(.{ ._, .call }, .{ .lazy_sym = lazy_sym }),
182040 else => unreachable,
182041 }
182042}
182043
182044fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void {182187fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void {
182045 const pt = self.pt;182188 const pt = self.pt;
182046 const zcu = pt.zcu;182189 const zcu = pt.zcu;
...@@ -193662,9 +193805,11 @@ const Select = struct {...@@ -193662,9 +193805,11 @@ const Select = struct {
193662 const tmp0y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0y } };193805 const tmp0y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0y } };
193663 const tmp0w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0w }, .imm = 1 };193806 const tmp0w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0w }, .imm = 1 };
193664 const tmp0d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0d }, .imm = 1 };193807 const tmp0d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0d }, .imm = 1 };
193808 const tmp0p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0p }, .imm = 1 };
193665 const tmp0q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0q }, .imm = 1 };193809 const tmp0q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0q }, .imm = 1 };
193666 const tmp0w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0w }, .imm = 2 };193810 const tmp0w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0w }, .imm = 2 };
193667 const tmp0d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0d }, .imm = 2 };193811 const tmp0d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0d }, .imm = 2 };
193812 const tmp0p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0p }, .imm = 2 };
193668 const tmp0q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0q }, .imm = 2 };193813 const tmp0q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp0q }, .imm = 2 };
193669193814
193670 const tmp1l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1l } };193815 const tmp1l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1l } };
...@@ -193680,9 +193825,11 @@ const Select = struct {...@@ -193680,9 +193825,11 @@ const Select = struct {
193680 const tmp1y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1y } };193825 const tmp1y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1y } };
193681 const tmp1w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1w }, .imm = 1 };193826 const tmp1w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1w }, .imm = 1 };
193682 const tmp1d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1d }, .imm = 1 };193827 const tmp1d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1d }, .imm = 1 };
193828 const tmp1p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1p }, .imm = 1 };
193683 const tmp1q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1q }, .imm = 1 };193829 const tmp1q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1q }, .imm = 1 };
193684 const tmp1w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1w }, .imm = 2 };193830 const tmp1w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1w }, .imm = 2 };
193685 const tmp1d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1d }, .imm = 2 };193831 const tmp1d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1d }, .imm = 2 };
193832 const tmp1p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1p }, .imm = 2 };
193686 const tmp1q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1q }, .imm = 2 };193833 const tmp1q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp1q }, .imm = 2 };
193687193834
193688 const tmp2l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2l } };193835 const tmp2l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2l } };
...@@ -193698,9 +193845,11 @@ const Select = struct {...@@ -193698,9 +193845,11 @@ const Select = struct {
193698 const tmp2y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2y } };193845 const tmp2y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2y } };
193699 const tmp2w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2w }, .imm = 1 };193846 const tmp2w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2w }, .imm = 1 };
193700 const tmp2d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2d }, .imm = 1 };193847 const tmp2d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2d }, .imm = 1 };
193848 const tmp2p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2p }, .imm = 1 };
193701 const tmp2q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2q }, .imm = 1 };193849 const tmp2q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2q }, .imm = 1 };
193702 const tmp2w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2w }, .imm = 2 };193850 const tmp2w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2w }, .imm = 2 };
193703 const tmp2d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2d }, .imm = 2 };193851 const tmp2d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2d }, .imm = 2 };
193852 const tmp2p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2p }, .imm = 2 };
193704 const tmp2q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2q }, .imm = 2 };193853 const tmp2q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp2q }, .imm = 2 };
193705193854
193706 const tmp3l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3l } };193855 const tmp3l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3l } };
...@@ -193716,9 +193865,11 @@ const Select = struct {...@@ -193716,9 +193865,11 @@ const Select = struct {
193716 const tmp3y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3y } };193865 const tmp3y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3y } };
193717 const tmp3w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3w }, .imm = 1 };193866 const tmp3w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3w }, .imm = 1 };
193718 const tmp3d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3d }, .imm = 1 };193867 const tmp3d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3d }, .imm = 1 };
193868 const tmp3p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3p }, .imm = 1 };
193719 const tmp3q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3q }, .imm = 1 };193869 const tmp3q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3q }, .imm = 1 };
193720 const tmp3w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3w }, .imm = 2 };193870 const tmp3w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3w }, .imm = 2 };
193721 const tmp3d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3d }, .imm = 2 };193871 const tmp3d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3d }, .imm = 2 };
193872 const tmp3p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3p }, .imm = 2 };
193722 const tmp3q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3q }, .imm = 2 };193873 const tmp3q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp3q }, .imm = 2 };
193723193874
193724 const tmp4l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4l } };193875 const tmp4l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4l } };
...@@ -193734,9 +193885,11 @@ const Select = struct {...@@ -193734,9 +193885,11 @@ const Select = struct {
193734 const tmp4y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4y } };193885 const tmp4y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4y } };
193735 const tmp4w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4w }, .imm = 1 };193886 const tmp4w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4w }, .imm = 1 };
193736 const tmp4d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4d }, .imm = 1 };193887 const tmp4d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4d }, .imm = 1 };
193888 const tmp4p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4p }, .imm = 1 };
193737 const tmp4q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4q }, .imm = 1 };193889 const tmp4q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4q }, .imm = 1 };
193738 const tmp4w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4w }, .imm = 2 };193890 const tmp4w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4w }, .imm = 2 };
193739 const tmp4d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4d }, .imm = 2 };193891 const tmp4d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4d }, .imm = 2 };
193892 const tmp4p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4p }, .imm = 2 };
193740 const tmp4q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4q }, .imm = 2 };193893 const tmp4q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp4q }, .imm = 2 };
193741193894
193742 const tmp5l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5l } };193895 const tmp5l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5l } };
...@@ -193752,9 +193905,11 @@ const Select = struct {...@@ -193752,9 +193905,11 @@ const Select = struct {
193752 const tmp5y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5y } };193905 const tmp5y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5y } };
193753 const tmp5w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5w }, .imm = 1 };193906 const tmp5w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5w }, .imm = 1 };
193754 const tmp5d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5d }, .imm = 1 };193907 const tmp5d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5d }, .imm = 1 };
193908 const tmp5p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5p }, .imm = 1 };
193755 const tmp5q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5q }, .imm = 1 };193909 const tmp5q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5q }, .imm = 1 };
193756 const tmp5w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5w }, .imm = 2 };193910 const tmp5w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5w }, .imm = 2 };
193757 const tmp5d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5d }, .imm = 2 };193911 const tmp5d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5d }, .imm = 2 };
193912 const tmp5p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5p }, .imm = 2 };
193758 const tmp5q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5q }, .imm = 2 };193913 const tmp5q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp5q }, .imm = 2 };
193759193914
193760 const tmp6l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6l } };193915 const tmp6l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6l } };
...@@ -193770,9 +193925,11 @@ const Select = struct {...@@ -193770,9 +193925,11 @@ const Select = struct {
193770 const tmp6y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6y } };193925 const tmp6y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6y } };
193771 const tmp6w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6w }, .imm = 1 };193926 const tmp6w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6w }, .imm = 1 };
193772 const tmp6d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6d }, .imm = 1 };193927 const tmp6d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6d }, .imm = 1 };
193928 const tmp6p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6p }, .imm = 1 };
193773 const tmp6q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6q }, .imm = 1 };193929 const tmp6q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6q }, .imm = 1 };
193774 const tmp6w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6w }, .imm = 2 };193930 const tmp6w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6w }, .imm = 2 };
193775 const tmp6d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6d }, .imm = 2 };193931 const tmp6d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6d }, .imm = 2 };
193932 const tmp6p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6p }, .imm = 2 };
193776 const tmp6q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6q }, .imm = 2 };193933 const tmp6q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp6q }, .imm = 2 };
193777193934
193778 const tmp7l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7l } };193935 const tmp7l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7l } };
...@@ -193788,9 +193945,11 @@ const Select = struct {...@@ -193788,9 +193945,11 @@ const Select = struct {
193788 const tmp7y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7y } };193945 const tmp7y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7y } };
193789 const tmp7w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7w }, .imm = 1 };193946 const tmp7w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7w }, .imm = 1 };
193790 const tmp7d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7d }, .imm = 1 };193947 const tmp7d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7d }, .imm = 1 };
193948 const tmp7p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7p }, .imm = 1 };
193791 const tmp7q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7q }, .imm = 1 };193949 const tmp7q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7q }, .imm = 1 };
193792 const tmp7w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7w }, .imm = 2 };193950 const tmp7w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7w }, .imm = 2 };
193793 const tmp7d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7d }, .imm = 2 };193951 const tmp7d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7d }, .imm = 2 };
193952 const tmp7p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7p }, .imm = 2 };
193794 const tmp7q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7q }, .imm = 2 };193953 const tmp7q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp7q }, .imm = 2 };
193795193954
193796 const tmp8l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8l } };193955 const tmp8l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8l } };
...@@ -193806,9 +193965,11 @@ const Select = struct {...@@ -193806,9 +193965,11 @@ const Select = struct {
193806 const tmp8y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8y } };193965 const tmp8y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8y } };
193807 const tmp8w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8w }, .imm = 1 };193966 const tmp8w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8w }, .imm = 1 };
193808 const tmp8d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8d }, .imm = 1 };193967 const tmp8d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8d }, .imm = 1 };
193968 const tmp8p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8p }, .imm = 1 };
193809 const tmp8q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8q }, .imm = 1 };193969 const tmp8q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8q }, .imm = 1 };
193810 const tmp8w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8w }, .imm = 2 };193970 const tmp8w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8w }, .imm = 2 };
193811 const tmp8d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8d }, .imm = 2 };193971 const tmp8d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8d }, .imm = 2 };
193972 const tmp8p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8p }, .imm = 2 };
193812 const tmp8q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8q }, .imm = 2 };193973 const tmp8q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp8q }, .imm = 2 };
193813193974
193814 const tmp9l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9l } };193975 const tmp9l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9l } };
...@@ -193824,9 +193985,11 @@ const Select = struct {...@@ -193824,9 +193985,11 @@ const Select = struct {
193824 const tmp9y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9y } };193985 const tmp9y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9y } };
193825 const tmp9w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9w }, .imm = 1 };193986 const tmp9w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9w }, .imm = 1 };
193826 const tmp9d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9d }, .imm = 1 };193987 const tmp9d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9d }, .imm = 1 };
193988 const tmp9p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9p }, .imm = 1 };
193827 const tmp9q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9q }, .imm = 1 };193989 const tmp9q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9q }, .imm = 1 };
193828 const tmp9w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9w }, .imm = 2 };193990 const tmp9w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9w }, .imm = 2 };
193829 const tmp9d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9d }, .imm = 2 };193991 const tmp9d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9d }, .imm = 2 };
193992 const tmp9p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9p }, .imm = 2 };
193830 const tmp9q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9q }, .imm = 2 };193993 const tmp9q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp9q }, .imm = 2 };
193831193994
193832 const tmp10l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10l } };193995 const tmp10l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10l } };
...@@ -193842,9 +194005,11 @@ const Select = struct {...@@ -193842,9 +194005,11 @@ const Select = struct {
193842 const tmp10y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10y } };194005 const tmp10y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10y } };
193843 const tmp10w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10w }, .imm = 1 };194006 const tmp10w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10w }, .imm = 1 };
193844 const tmp10d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10d }, .imm = 1 };194007 const tmp10d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10d }, .imm = 1 };
194008 const tmp10p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10p }, .imm = 1 };
193845 const tmp10q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10q }, .imm = 1 };194009 const tmp10q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10q }, .imm = 1 };
193846 const tmp10w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10w }, .imm = 2 };194010 const tmp10w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10w }, .imm = 2 };
193847 const tmp10d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10d }, .imm = 2 };194011 const tmp10d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10d }, .imm = 2 };
194012 const tmp10p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10p }, .imm = 2 };
193848 const tmp10q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10q }, .imm = 2 };194013 const tmp10q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .tmp10q }, .imm = 2 };
193849194014
193850 const dst0l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0l } };194015 const dst0l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0l } };
...@@ -193860,9 +194025,11 @@ const Select = struct {...@@ -193860,9 +194025,11 @@ const Select = struct {
193860 const dst0y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0y } };194025 const dst0y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0y } };
193861 const dst0w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0w }, .imm = 1 };194026 const dst0w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0w }, .imm = 1 };
193862 const dst0d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0d }, .imm = 1 };194027 const dst0d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0d }, .imm = 1 };
194028 const dst0p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0p }, .imm = 1 };
193863 const dst0q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0q }, .imm = 1 };194029 const dst0q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0q }, .imm = 1 };
193864 const dst0w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0w }, .imm = 2 };194030 const dst0w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0w }, .imm = 2 };
193865 const dst0d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0d }, .imm = 2 };194031 const dst0d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0d }, .imm = 2 };
194032 const dst0p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0p }, .imm = 2 };
193866 const dst0q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0q }, .imm = 2 };194033 const dst0q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst0q }, .imm = 2 };
193867194034
193868 const dst1l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1l } };194035 const dst1l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1l } };
...@@ -193878,9 +194045,11 @@ const Select = struct {...@@ -193878,9 +194045,11 @@ const Select = struct {
193878 const dst1y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1y } };194045 const dst1y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1y } };
193879 const dst1w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1w }, .imm = 1 };194046 const dst1w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1w }, .imm = 1 };
193880 const dst1d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1d }, .imm = 1 };194047 const dst1d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1d }, .imm = 1 };
194048 const dst1p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1p }, .imm = 1 };
193881 const dst1q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1q }, .imm = 1 };194049 const dst1q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1q }, .imm = 1 };
193882 const dst1w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1w }, .imm = 2 };194050 const dst1w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1w }, .imm = 2 };
193883 const dst1d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1d }, .imm = 2 };194051 const dst1d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1d }, .imm = 2 };
194052 const dst1p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1p }, .imm = 2 };
193884 const dst1q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1q }, .imm = 2 };194053 const dst1q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .dst1q }, .imm = 2 };
193885194054
193886 const src0l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0l } };194055 const src0l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0l } };
...@@ -193896,9 +194065,11 @@ const Select = struct {...@@ -193896,9 +194065,11 @@ const Select = struct {
193896 const src0y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0y } };194065 const src0y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0y } };
193897 const src0w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0w }, .imm = 1 };194066 const src0w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0w }, .imm = 1 };
193898 const src0d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0d }, .imm = 1 };194067 const src0d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0d }, .imm = 1 };
194068 const src0p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0p }, .imm = 1 };
193899 const src0q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0q }, .imm = 1 };194069 const src0q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0q }, .imm = 1 };
193900 const src0w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0w }, .imm = 2 };194070 const src0w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0w }, .imm = 2 };
193901 const src0d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0d }, .imm = 2 };194071 const src0d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0d }, .imm = 2 };
194072 const src0p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0p }, .imm = 2 };
193902 const src0q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0q }, .imm = 2 };194073 const src0q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src0q }, .imm = 2 };
193903194074
193904 const src1l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1l } };194075 const src1l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1l } };
...@@ -193914,9 +194085,11 @@ const Select = struct {...@@ -193914,9 +194085,11 @@ const Select = struct {
193914 const src1y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1y } };194085 const src1y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1y } };
193915 const src1w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1w }, .imm = 1 };194086 const src1w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1w }, .imm = 1 };
193916 const src1d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1d }, .imm = 1 };194087 const src1d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1d }, .imm = 1 };
194088 const src1p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1p }, .imm = 1 };
193917 const src1q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1q }, .imm = 1 };194089 const src1q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1q }, .imm = 1 };
193918 const src1w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1w }, .imm = 2 };194090 const src1w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1w }, .imm = 2 };
193919 const src1d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1d }, .imm = 2 };194091 const src1d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1d }, .imm = 2 };
194092 const src1p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1p }, .imm = 2 };
193920 const src1q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1q }, .imm = 2 };194093 const src1q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src1q }, .imm = 2 };
193921194094
193922 const src2l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2l } };194095 const src2l: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2l } };
...@@ -193932,9 +194105,11 @@ const Select = struct {...@@ -193932,9 +194105,11 @@ const Select = struct {
193932 const src2y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2y } };194105 const src2y: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2y } };
193933 const src2w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2w }, .imm = 1 };194106 const src2w0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2w }, .imm = 1 };
193934 const src2d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2d }, .imm = 1 };194107 const src2d0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2d }, .imm = 1 };
194108 const src2p0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2p }, .imm = 1 };
193935 const src2q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2q }, .imm = 1 };194109 const src2q0: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2q }, .imm = 1 };
193936 const src2w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2w }, .imm = 2 };194110 const src2w1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2w }, .imm = 2 };
193937 const src2d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2d }, .imm = 2 };194111 const src2d1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2d }, .imm = 2 };
194112 const src2p1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2p }, .imm = 2 };
193938 const src2q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2q }, .imm = 2 };194113 const src2q1: Select.Operand = .{ .flags = .{ .tag = .ref, .base = .src2q }, .imm = 2 };
193939194114
193940 fn si(imm: i32) Select.Operand {194115 fn si(imm: i32) Select.Operand {
test/behavior/enum.zig+19
...@@ -1065,6 +1065,25 @@ test "tag name with signed enum values" {...@@ -1065,6 +1065,25 @@ test "tag name with signed enum values" {
1065 try expect(mem.eql(u8, @tagName(b), "bravo"));1065 try expect(mem.eql(u8, @tagName(b), "bravo"));
1066}1066}
10671067
1068test "tag name with large enum values" {
1069 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1070 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
1071
1072 const Kdf = enum(u128) {
1073 aes_kdf = 0xea4f8ac1080d74bf60448a629af3d9c9,
1074 argon2d = 0x0c0ae303a4a9f7914b44298cdf6d63ef,
1075 argon2id = 0xe6a1f0c63efc3db27347db56198b299e,
1076 };
1077 var kdf: Kdf = .aes_kdf;
1078 try expect(mem.eql(u8, @tagName(kdf), "aes_kdf"));
1079 var argon2d_value: u128 = undefined;
1080 argon2d_value = @intFromEnum(Kdf.argon2d);
1081 kdf = @enumFromInt(argon2d_value);
1082 try expect(mem.eql(u8, @tagName(kdf), "argon2d"));
1083 kdf = .argon2id;
1084 try expect(mem.eql(u8, @tagName(kdf), "argon2id"));
1085}
1086
1068test "@tagName in callconv(.c) function" {1087test "@tagName in callconv(.c) function" {
1069 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;1088 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
1070 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;1089 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;