authorgravatar for justus@klausecker.deJustus Klausecker <justus@klausecker.de> 2026-07-17 23:30:26+02:00
committergravatar for justus@klausecker.deJustus Klausecker <justus@klausecker.de> 2026-07-17 23:30:26+02:00
log69a26976ed2b624d99d364b642f78ca6bb59e5b6
tree6d46a6cd4bfbe85f89ea889d6bd1ba2a1e8304b4
parent115e0894dbd39e8baa15f9b883105697a8af201b

zig fmt

Converts usages of `@intFromEnum` and `@enumFromInt` to instead use the new `@backingInt` and `@fromBackingInt` builtins.

346 files changed, 9039 insertions(+), 9039 deletions(-)

lib/build-web/fuzz.zig+9-9
......@@ -94,11 +94,11 @@ const SourceLocationIndex = enum(u32) {
9494 _,
9595
9696 fn haveCoverage(sli: SourceLocationIndex) bool {
97 return @intFromEnum(sli) < coverage_source_locations.items.len;
97 return @backingInt(sli) < coverage_source_locations.items.len;
9898 }
9999
100100 fn ptr(sli: SourceLocationIndex) *Coverage.SourceLocation {
101 return &coverage_source_locations.items[@intFromEnum(sli)];
101 return &coverage_source_locations.items[@backingInt(sli)];
102102 }
103103
104104 fn sourceLocationLinkHtml(
......@@ -114,7 +114,7 @@ const SourceLocationIndex = enum(u32) {
114114 try out.print(gpa, ":{d}:{d} </code><button class=\"linkish\" onclick=\"wasm_exports.fuzzSelectSli({d});\">View</button>", .{
115115 sl.line,
116116 sl.column,
117 @intFromEnum(sli),
117 @backingInt(sli),
118118 });
119119 }
120120
......@@ -132,7 +132,7 @@ const SourceLocationIndex = enum(u32) {
132132 var buf: std.ArrayList(u8) = .empty;
133133 defer buf.deinit(gpa);
134134 sli.appendPath(&buf) catch @panic("OOM");
135 return @enumFromInt(Walk.files.getIndex(buf.items) orelse return null);
135 return @fromBackingInt(@intCast(Walk.files.getIndex(buf.items) orelse return null));
136136 }
137137
138138 fn fileHtml(
......@@ -166,7 +166,7 @@ fn computeSourceAnnotations(
166166
167167 for (source_locations, 0..) |sl, sli_usize| {
168168 if (sl.file != cov_file_index) continue;
169 const sli: SourceLocationIndex = @enumFromInt(sli_usize);
169 const sli: SourceLocationIndex = @fromBackingInt(@intCast(sli_usize));
170170 try locs.append(gpa, sli);
171171 }
172172
......@@ -199,7 +199,7 @@ fn computeSourceAnnotations(
199199 if (next_sl.line > line or (next_sl.line == line and next_sl.column >= column)) break;
200200 try annotations.append(gpa, .{
201201 .file_byte_offset = offset,
202 .dom_id = @intFromEnum(next_sli),
202 .dom_id = @backingInt(next_sli),
203203 });
204204 next_loc_index += 1;
205205 }
......@@ -240,7 +240,7 @@ fn unpackSourcesInner(tar_bytes: []u8) !void {
240240 break :p .{ "root", std.mem.endsWith(u8, file_name, "/root.zig") };
241241 };
242242 const gop = try Walk.modules.getOrPut(gpa, mod_name);
243 const file: Walk.File.Index = @enumFromInt(Walk.files.entries.len);
243 const file: Walk.File.Index = @fromBackingInt(@intCast(Walk.files.entries.len));
244244 if (!gop.found_existing or is_module_root) gop.value_ptr.* = file;
245245 const file_bytes = tar_reader.take(@intCast(tar_file.size)) catch unreachable;
246246 it.unread_file_bytes = 0; // we have read the whole thing
......@@ -323,7 +323,7 @@ fn updateCoverage() error{OutOfMemory}!void {
323323 u64,
324324 recent_coverage_update.items[@sizeOf(abi.fuzz.CoverageUpdateHeader)..][0 .. n_bitset_elems * @sizeOf(u64)],
325325 );
326 var sli: SourceLocationIndex = @enumFromInt(0);
326 var sli: SourceLocationIndex = @fromBackingInt(@intCast(0));
327327 for (covered_bits) |elem| {
328328 try covered.ensureUnusedCapacity(gpa, 64);
329329 for (0..@bitSizeOf(u64)) |i| {
......@@ -332,7 +332,7 @@ fn updateCoverage() error{OutOfMemory}!void {
332332 covered.appendAssumeCapacity(sli);
333333 }
334334 }
335 sli = @enumFromInt(@intFromEnum(sli) + 1);
335 sli = @fromBackingInt(@intCast(@backingInt(sli) + 1));
336336 }
337337 }
338338
lib/build-web/main.zig+3-3
......@@ -80,7 +80,7 @@ export fn message_begin(len: usize) [*]u8 {
8080export fn message_end() void {
8181 const msg_bytes = message_buffer.items;
8282
83 const tag: abi.ToClientTag = @enumFromInt(msg_bytes[0]);
83 const tag: abi.ToClientTag = @fromBackingInt(@intCast(msg_bytes[0]));
8484 switch (tag) {
8585 _ => @panic("malformed message"),
8686
......@@ -151,7 +151,7 @@ fn helloMessage(msg_bytes: []align(4) u8) Allocator.Error!void {
151151 for (steps, step_name_lens, 0..) |*step_out, name_len, step_idx| {
152152 step_out.* = .{
153153 .name = duped_step_name_data[name_off..][0..name_len],
154 .status = @enumFromInt(@as(u2, @truncate(step_status_bits[step_idx / 4] >> @intCast((step_idx % 4) * 2)))),
154 .status = @fromBackingInt(@intCast(@as(u2, @truncate(step_status_bits[step_idx / 4] >> @intCast((step_idx % 4) * 2))))),
155155 };
156156 name_off += name_len;
157157 }
......@@ -180,7 +180,7 @@ export fn stepName(idx: usize) String {
180180 return .init(step_list[idx].name);
181181}
182182export fn stepStatus(idx: usize) u8 {
183 return @intFromEnum(step_list[idx].status);
183 return @backingInt(step_list[idx].status);
184184}
185185
186186export fn rebuild() void {
lib/c/malloc.zig+3-3
......@@ -183,8 +183,8 @@ fn memalign(alloc_alignment: usize, n: usize) callconv(.c) ?[*]align(alignment_b
183183}
184184
185185fn posix_memalign(result: *?[*]align(alignment_bytes) u8, alloc_alignment: usize, n: usize) callconv(.c) c_int {
186 if (alloc_alignment < @sizeOf(*anyopaque)) return @intFromEnum(std.c.E.INVAL);
187 result.* = aligned_alloc_inner(alloc_alignment, n) orelse return @intFromEnum(std.c.E.NOMEM);
186 if (alloc_alignment < @sizeOf(*anyopaque)) return @backingInt(std.c.E.INVAL);
187 result.* = aligned_alloc_inner(alloc_alignment, n) orelse return @backingInt(std.c.E.NOMEM);
188188 return 0;
189189}
190190
......@@ -192,6 +192,6 @@ fn posix_memalign(result: *?[*]align(alignment_bytes) u8, alloc_alignment: usize
192192/// `null`.
193193fn nomem() ?[*]align(alignment_bytes) u8 {
194194 @branchHint(.cold);
195 std.c._errno().* = @intFromEnum(std.c.E.NOMEM);
195 std.c._errno().* = @backingInt(std.c.E.NOMEM);
196196 return null;
197197}
lib/c/pthread.zig+3-3
......@@ -17,7 +17,7 @@ comptime {
1717
1818const SpinLock = enum(c.pthread_spinlock_t) {
1919 unlocked = if (builtin.target.isMinGW()) -1 else 0,
20 locked = if (builtin.target.isMinGW()) 0 else @intFromEnum(c.E.BUSY),
20 locked = if (builtin.target.isMinGW()) 0 else @backingInt(c.E.BUSY),
2121};
2222
2323fn pthread_spin_init(s: *c.pthread_spinlock_t, pshared: c_int) callconv(.c) c_int {
......@@ -35,12 +35,12 @@ fn pthread_spin_destroy(s: *c.pthread_spinlock_t) callconv(.c) c_int {
3535
3636fn pthread_spin_trylock(s: *c.pthread_spinlock_t) callconv(.c) c_int {
3737 const spin: *SpinLock = @ptrCast(s);
38 return if (@cmpxchgStrong(SpinLock, spin, .unlocked, .locked, .acquire, .monotonic)) |_| @intFromEnum(c.E.BUSY) else 0;
38 return if (@cmpxchgStrong(SpinLock, spin, .unlocked, .locked, .acquire, .monotonic)) |_| @backingInt(c.E.BUSY) else 0;
3939}
4040
4141fn pthread_spin_lock(s: *c.pthread_spinlock_t) callconv(.c) c_int {
4242 const spin: *SpinLock = @ptrCast(s);
43 if (builtin.single_threaded and @atomicLoad(SpinLock, spin, .monotonic) == .locked) return @intFromEnum(c.E.DEADLK);
43 if (builtin.single_threaded and @atomicLoad(SpinLock, spin, .monotonic) == .locked) return @backingInt(c.E.DEADLK);
4444
4545 while (@cmpxchgWeak(SpinLock, spin, .unlocked, .locked, .acquire, .monotonic)) |_| {
4646 std.atomic.spinLoopHint();
lib/c/stdlib.zig+4-4
......@@ -138,7 +138,7 @@ fn stringToInteger(comptime T: type, noalias buf: [*:0]const u8, noalias maybe_e
138138 end.* = buf;
139139 }
140140
141 std.c._errno().* = @intFromEnum(std.c.E.INVAL);
141 std.c._errno().* = @backingInt(std.c.E.INVAL);
142142 return 0;
143143 }
144144
......@@ -192,7 +192,7 @@ fn stringToInteger(comptime T: type, noalias buf: [*:0]const u8, noalias maybe_e
192192
193193 if (@typeInfo(T).int.signedness == .unsigned) {
194194 const result = parseDigitsWithSignGenericCharacter(T, u8, digits, maybe_end, real_base, .pos) catch {
195 std.c._errno().* = @intFromEnum(std.c.E.RANGE);
195 std.c._errno().* = @backingInt(std.c.E.RANGE);
196196 return std.math.maxInt(T);
197197 };
198198
......@@ -200,12 +200,12 @@ fn stringToInteger(comptime T: type, noalias buf: [*:0]const u8, noalias maybe_e
200200 }
201201
202202 if (negative) return parseDigitsWithSignGenericCharacter(T, u8, digits, maybe_end, real_base, .neg) catch blk: {
203 std.c._errno().* = @intFromEnum(std.c.E.RANGE);
203 std.c._errno().* = @backingInt(std.c.E.RANGE);
204204 break :blk std.math.minInt(T);
205205 };
206206
207207 return parseDigitsWithSignGenericCharacter(T, u8, digits, maybe_end, real_base, .pos) catch blk: {
208 std.c._errno().* = @intFromEnum(std.c.E.RANGE);
208 std.c._errno().* = @backingInt(std.c.E.RANGE);
209209 break :blk std.math.maxInt(T);
210210 };
211211}
lib/c/sys/reboot.zig+1-1
......@@ -12,5 +12,5 @@ comptime {
1212}
1313
1414fn rebootLinux(cmd: c_int) callconv(.c) c_int {
15 return errno(std.os.linux.reboot(.MAGIC1, .MAGIC2, @enumFromInt(cmd), null));
15 return errno(std.os.linux.reboot(.MAGIC1, .MAGIC2, @fromBackingInt(@intCast(cmd)), null));
1616}
lib/c/unistd.zig+6-6
......@@ -105,26 +105,26 @@ fn dupLinux(fd: c_int) callconv(.c) c_int {
105105}
106106
107107fn dup2Linux(old: c_int, new: c_int) callconv(.c) c_int {
108 const busy: usize = @bitCast(-@as(isize, @intFromEnum(linux.E.BUSY)));
108 const busy: usize = @bitCast(-@as(isize, @backingInt(linux.E.BUSY)));
109109 var res = busy;
110110 while (res == busy) res = linux.dup2(old, new);
111111 return errno(res);
112112}
113113
114114fn dup3Linux(old: c_int, new: c_int, flags: c_int) callconv(.c) c_int {
115 const busy: usize = @bitCast(-@as(isize, @intFromEnum(linux.E.BUSY)));
115 const busy: usize = @bitCast(-@as(isize, @backingInt(linux.E.BUSY)));
116116 var res = busy;
117117
118118 if (@hasField(linux.SYS, "dup3")) {
119119 while (res == busy) res = linux.dup3(old, new, @intCast(flags));
120120 } else if (@hasField(linux.SYS, "dup2")) {
121121 const cloexec: c_int = @bitCast(linux.O{ .CLOEXEC = true });
122 const inval: usize = @bitCast(-@as(isize, @intFromEnum(linux.E.INVAL)));
122 const inval: usize = @bitCast(-@as(isize, @backingInt(linux.E.INVAL)));
123123 if (old == new or (flags & ~cloexec != 0)) return errno(inval);
124124 while (res == busy) res = linux.dup2(old, new);
125125 _ = if (res >= 0 and (flags & cloexec == cloexec)) linux.fcntl(new, linux.F.SETFD, linux.FD_CLOEXEC);
126126 } else {
127 return errno(@bitCast(-@as(isize, @intFromEnum(linux.E.NOSYS))));
127 return errno(@bitCast(-@as(isize, @backingInt(linux.E.NOSYS))));
128128 }
129129 return errno(res);
130130}
......@@ -238,7 +238,7 @@ fn close(fd: std.c.fd_t) callconv(.c) c_int {
238238 const signed: isize = @bitCast(linux.close(fd));
239239 if (signed < 0) {
240240 @branchHint(.unlikely);
241 if (-signed == @intFromEnum(linux.E.INTR)) return 0;
241 if (-signed == @backingInt(linux.E.INTR)) return 0;
242242 std.c._errno().* = @intCast(-signed);
243243 return -1;
244244 }
......@@ -253,7 +253,7 @@ fn closeWasi(fd: std.c.fd_t) callconv(.c) c_int {
253253 switch (std.os.wasi.fd_close(fd)) {
254254 .SUCCESS => return 0,
255255 else => |e| {
256 std.c._errno().* = @intFromEnum(e);
256 std.c._errno().* = @backingInt(e);
257257 return -1;
258258 },
259259 }
lib/compiler/Maker.zig+8-8
......@@ -589,10 +589,10 @@ pub fn main(init: process.Init.Minimal) !void {
589589 graph.cache.addPrefix(graph.local_cache_root);
590590 graph.cache.addPrefix(global_cache_directory);
591591 graph.cache.addPrefix(graph.build_root_directory);
592 comptime assert(0 == @intFromEnum(std.zig.Server.Message.PathPrefix.cwd));
593 comptime assert(1 == @intFromEnum(std.zig.Server.Message.PathPrefix.zig_lib));
594 comptime assert(2 == @intFromEnum(std.zig.Server.Message.PathPrefix.local_cache));
595 comptime assert(3 == @intFromEnum(std.zig.Server.Message.PathPrefix.global_cache));
592 comptime assert(0 == @backingInt(std.zig.Server.Message.PathPrefix.cwd));
593 comptime assert(1 == @backingInt(std.zig.Server.Message.PathPrefix.zig_lib));
594 comptime assert(2 == @backingInt(std.zig.Server.Message.PathPrefix.local_cache));
595 comptime assert(3 == @backingInt(std.zig.Server.Message.PathPrefix.global_cache));
596596
597597 graph.cache.hash.addBytes(builtin.zig_version_string);
598598
......@@ -1406,7 +1406,7 @@ fn configure(graph: *Graph, options: ConfigureOptions) !ScannedConfig {
14061406 var top_level_steps: std.array_hash_map.String(Configuration.Step.Index) = .empty;
14071407 for (configuration.steps, 0..) |*conf_step, step_index_usize| {
14081408 if (conf_step.owner != .root) continue;
1409 const step_index: Configuration.Step.Index = @enumFromInt(step_index_usize);
1409 const step_index: Configuration.Step.Index = @fromBackingInt(@intCast(step_index_usize));
14101410 const flags = conf_step.flags(c);
14111411 switch (flags.tag) {
14121412 .top_level => {
......@@ -2017,7 +2017,7 @@ fn countSubProcesses(maker: *Maker) usize {
20172017}
20182018
20192019pub fn stepByIndex(maker: *const Maker, i: Configuration.Step.Index) *Step {
2020 return &maker.steps[@intFromEnum(i)];
2020 return &maker.steps[@backingInt(i)];
20212021}
20222022
20232023fn prepare(maker: *Maker, step_names: []const []const u8) !void {
......@@ -2029,7 +2029,7 @@ fn prepare(maker: *Maker, step_names: []const []const u8) !void {
20292029 const c = &maker.scanned_config.configuration;
20302030
20312031 for (maker.steps, 0..) |*step, step_index_usize| {
2032 const step_index: Configuration.Step.Index = @enumFromInt(step_index_usize);
2032 const step_index: Configuration.Step.Index = @fromBackingInt(@intCast(step_index_usize));
20332033 step.* = .{ .extended = .init(step_index.ptr(c).flags(c).tag) };
20342034 }
20352035
......@@ -3060,7 +3060,7 @@ pub fn resolveLazyPathIndexAbs(
30603060}
30613061
30623062pub fn generatedPath(maker: *const Maker, index: Configuration.GeneratedFileIndex) *Path {
3063 return &maker.generated_files[@intFromEnum(index)];
3063 return &maker.generated_files[@backingInt(index)];
30643064}
30653065
30663066pub fn packagePath(
lib/compiler/Maker/Fetch.zig+6-6
......@@ -826,7 +826,7 @@ fn runResource(
826826 .notes_len = notes_len,
827827 });
828828 const notes_start = try eb.reserveNotes(notes_len);
829 eb.extra.items[notes_start] = @intFromEnum(try eb.addErrorMessage(.{
829 eb.extra.items[notes_start] = @backingInt(try eb.addErrorMessage(.{
830830 .msg = try eb.printString("expected .hash = {q},", .{computed_package_hash.toSlice()}),
831831 }));
832832 return error.FetchFailed;
......@@ -1297,7 +1297,7 @@ fn initResource(f: *Fetch, uri: std.Uri, resource: *Resource, reader_buffer: []u
12971297 .notes_len = notes_len,
12981298 });
12991299 const notes_start = try eb.reserveNotes(notes_len);
1300 eb.extra.items[notes_start] = @intFromEnum(try eb.addErrorMessage(.{
1300 eb.extra.items[notes_start] = @backingInt(try eb.addErrorMessage(.{
13011301 .msg = try eb.printString("try .url = \"{f}#{f}\",", .{
13021302 uri.fmt(.{ .scheme = true, .authority = true, .path = true }),
13031303 want_oid,
......@@ -1472,7 +1472,7 @@ fn unpackTarball(f: *Fetch, out_dir: Io.Dir, reader: *Io.Reader) RunError!Unpack
14721472 switch (item) {
14731473 .unable_to_create_file => |i| res.unableToCreateFile(stripRoot(i.file_name, res.root_dir), i.code),
14741474 .unable_to_create_sym_link => |i| res.unableToCreateSymLink(stripRoot(i.file_name, res.root_dir), i.link_name, i.code),
1475 .unsupported_file_type => |i| res.unsupportedFileType(stripRoot(i.file_name, res.root_dir), @intFromEnum(i.file_type)),
1475 .unsupported_file_type => |i| res.unsupportedFileType(stripRoot(i.file_name, res.root_dir), @backingInt(i.file_type)),
14761476 .components_outside_stripped_prefix => unreachable, // unreachable with strip_components = 0
14771477 }
14781478 }
......@@ -2205,21 +2205,21 @@ const UnpackResult = struct {
22052205 if (item.excluded(filter)) continue;
22062206 switch (item) {
22072207 .unable_to_create_sym_link => |info| {
2208 eb.extra.items[note_i] = @intFromEnum(try eb.addErrorMessage(.{
2208 eb.extra.items[note_i] = @backingInt(try eb.addErrorMessage(.{
22092209 .msg = try eb.printString("unable to create symlink from '{s}' to '{s}': {s}", .{
22102210 info.file_name, info.link_name, @errorName(info.code),
22112211 }),
22122212 }));
22132213 },
22142214 .unable_to_create_file => |info| {
2215 eb.extra.items[note_i] = @intFromEnum(try eb.addErrorMessage(.{
2215 eb.extra.items[note_i] = @backingInt(try eb.addErrorMessage(.{
22162216 .msg = try eb.printString("unable to create file '{s}': {s}", .{
22172217 info.file_name, @errorName(info.code),
22182218 }),
22192219 }));
22202220 },
22212221 .unsupported_file_type => |info| {
2222 eb.extra.items[note_i] = @intFromEnum(try eb.addErrorMessage(.{
2222 eb.extra.items[note_i] = @backingInt(try eb.addErrorMessage(.{
22232223 .msg = try eb.printString("file '{s}' has unsupported type '{c}'", .{
22242224 info.file_name, info.file_type,
22252225 }),
lib/compiler/Maker/Fetch/git.zig+1-1
......@@ -1107,7 +1107,7 @@ pub const Session = struct {
11071107 return error.ReadFailed;
11081108 }) {
11091109 .flush => return error.EndOfStream,
1110 .data => |data| switch (@as(StreamCode, @enumFromInt(data[0]))) {
1110 .data => |data| switch (@as(StreamCode, @fromBackingInt(@intCast(data[0])))) {
11111111 .pack_data => {
11121112 input.toss(1);
11131113 fs.remaining_len = data.len - 1;
lib/compiler/Maker/ScannedConfig.zig+4-4
......@@ -26,11 +26,11 @@ pub fn print(sc: *const ScannedConfig, w: *Writer) Writer.Error!void {
2626 try tf.end();
2727 }
2828
29 try s.field("default_step", @intFromEnum(c.default_step), .{});
29 try s.field("default_step", @backingInt(c.default_step), .{});
3030 {
3131 var sf = try s.beginStructField("top_level_steps", .{});
3232 for (sc.top_level_steps.keys(), sc.top_level_steps.values()) |name, step| {
33 try sf.field(name, @intFromEnum(step), .{});
33 try sf.field(name, @backingInt(step), .{});
3434 }
3535 try sf.end();
3636 }
......@@ -122,7 +122,7 @@ fn printValue(sc: *const ScannedConfig, s: *Serializer, comptime Field: type, fi
122122 } else if (std.enums.tagName(Field, field_value)) |name| {
123123 try s.ident(name);
124124 } else {
125 try s.int(@intFromEnum(field_value));
125 try s.int(@backingInt(field_value));
126126 }
127127 },
128128 .@"struct" => |info| switch (info.layout) {
......@@ -152,7 +152,7 @@ fn printValue(sc: *const ScannedConfig, s: *Serializer, comptime Field: type, fi
152152 inline else => |tag| {
153153 var sub_struct = try s.beginStruct(.{});
154154 try sub_struct.fieldPrefix(@tagName(tag));
155 try printValue(sc, s, @FieldType(Field.Union, @tagName(tag)), @enumFromInt(elem));
155 try printValue(sc, s, @FieldType(Field.Union, @tagName(tag)), @fromBackingInt(@intCast(elem)));
156156 try sub_struct.end();
157157 },
158158 };
lib/compiler/Maker/Step.zig+1-1
......@@ -610,7 +610,7 @@ fn zigProcessUpdate(step_index: Configuration.Step.Index, maker: *Maker, zp: *Zi
610610 const conf_step = step_index.ptr(conf);
611611 var it = std.mem.splitScalar(u8, body, 0);
612612 while (it.next()) |prefixed_path| {
613 const prefix_index: std.zig.Server.Message.PathPrefix = @enumFromInt(prefixed_path[0] - 1);
613 const prefix_index: std.zig.Server.Message.PathPrefix = @fromBackingInt(@intCast(prefixed_path[0] - 1));
614614 const sub_path = try arena.dupe(u8, prefixed_path[1..]);
615615 const sub_path_dirname = Dir.path.dirname(sub_path) orelse "";
616616 switch (prefix_index) {
lib/compiler/Maker/Step/Compile.zig+2-2
......@@ -132,7 +132,7 @@ const ModuleListContext = struct {
132132
133133 pub fn hash(ctx: @This(), key: ModuleList) u32 {
134134 _ = ctx;
135 return std.hash.int(@intFromEnum(key.keys()[0]));
135 return std.hash.int(@backingInt(key.keys()[0]));
136136 }
137137
138138 const Adapter = struct {
......@@ -144,7 +144,7 @@ const ModuleListContext = struct {
144144
145145 pub fn hash(ctx: @This(), key: Configuration.Module.Index) u32 {
146146 _ = ctx;
147 return std.hash.int(@intFromEnum(key));
147 return std.hash.int(@backingInt(key));
148148 }
149149 };
150150};
lib/compiler/Maker/Step/Run.zig+3-3
......@@ -1380,7 +1380,7 @@ fn sendRunFuzzTestMessage(
13801380 w.interface.writeStruct(header, .little) catch |err| switch (err) {
13811381 error.WriteFailed => return w.err.?,
13821382 };
1383 w.interface.writeByte(@intFromEnum(kind)) catch |err| switch (err) {
1383 w.interface.writeByte(@backingInt(kind)) catch |err| switch (err) {
13841384 error.WriteFailed => return w.err.?,
13851385 };
13861386 w.interface.writeInt(u64, amount_or_instance, .little) catch |err| switch (err) {
......@@ -2106,8 +2106,8 @@ fn runCommand(
21062106 if (conf_run.expect_term_value.value) |expected_term_value| {
21072107 const expected_term: process.Child.Term = switch (conf_run.flags2.expect_term_status) {
21082108 .exited => .{ .exited = @intCast(expected_term_value) },
2109 .signal => .{ .signal = @enumFromInt(expected_term_value) },
2110 .stopped => .{ .stopped = @enumFromInt(expected_term_value) },
2109 .signal => .{ .signal = @fromBackingInt(@intCast(expected_term_value)) },
2110 .stopped => .{ .stopped = @fromBackingInt(@intCast(expected_term_value)) },
21112111 .unknown => .{ .unknown = expected_term_value },
21122112 };
21132113 if (!termMatches(expected_term, generic_result.term)) {
lib/compiler/Maker/Watch.zig+1-1
......@@ -903,7 +903,7 @@ pub const Match = struct {
903903 pub const Context = struct {
904904 pub fn hash(self: Context, a: Match) u32 {
905905 _ = self;
906 var hasher = Hash.init(@intFromEnum(a.step_index));
906 var hasher = Hash.init(@backingInt(a.step_index));
907907 hasher.update(a.basename);
908908 return @truncate(hasher.final());
909909 }
lib/compiler/Maker/WebServer.zig+10-10
......@@ -257,7 +257,7 @@ pub fn updateStepStatus(
257257 const ptr = &configured.step_status_bits[step_idx / 4];
258258 const bit_offset: u3 = @intCast((step_idx % 4) * 2);
259259 const old_bits: u2 = @truncate(@atomicLoad(u8, ptr, .monotonic) >> bit_offset);
260 const mask = @as(u8, @intFromEnum(new_status) ^ old_bits) << bit_offset;
260 const mask = @as(u8, @backingInt(new_status) ^ old_bits) << bit_offset;
261261 _ = @atomicRmw(u8, ptr, .Xor, mask, .monotonic);
262262 ws.notifyUpdate();
263263}
......@@ -426,16 +426,16 @@ fn serveWebSocket(ws: *WebServer, sock: *http.Server.WebSocket) !noreturn {
426426 const cur_byte = @atomicLoad(u8, shared, .monotonic);
427427 if (prev_byte.* == cur_byte) continue;
428428 const cur: [4]abi.StepUpdate.Status = .{
429 @enumFromInt(@as(u2, @truncate(cur_byte >> 0))),
430 @enumFromInt(@as(u2, @truncate(cur_byte >> 2))),
431 @enumFromInt(@as(u2, @truncate(cur_byte >> 4))),
432 @enumFromInt(@as(u2, @truncate(cur_byte >> 6))),
429 @fromBackingInt(@intCast(@as(u2, @truncate(cur_byte >> 0)))),
430 @fromBackingInt(@intCast(@as(u2, @truncate(cur_byte >> 2)))),
431 @fromBackingInt(@intCast(@as(u2, @truncate(cur_byte >> 4)))),
432 @fromBackingInt(@intCast(@as(u2, @truncate(cur_byte >> 6)))),
433433 };
434434 const prev: [4]abi.StepUpdate.Status = .{
435 @enumFromInt(@as(u2, @truncate(prev_byte.* >> 0))),
436 @enumFromInt(@as(u2, @truncate(prev_byte.* >> 2))),
437 @enumFromInt(@as(u2, @truncate(prev_byte.* >> 4))),
438 @enumFromInt(@as(u2, @truncate(prev_byte.* >> 6))),
435 @fromBackingInt(@intCast(@as(u2, @truncate(prev_byte.* >> 0)))),
436 @fromBackingInt(@intCast(@as(u2, @truncate(prev_byte.* >> 2)))),
437 @fromBackingInt(@intCast(@as(u2, @truncate(prev_byte.* >> 4)))),
438 @fromBackingInt(@intCast(@as(u2, @truncate(prev_byte.* >> 6)))),
439439 };
440440 for (cur, prev, byte_idx * 4..) |cur_status, prev_status, step_idx| {
441441 const msg: abi.StepUpdate = .{ .step_idx = @intCast(step_idx), .bits = .{ .status = cur_status } };
......@@ -469,7 +469,7 @@ fn recvWebSocketMessages(ws: *WebServer, sock: *http.Server.WebSocket) void {
469469 const msg = sock.readSmallMessage() catch return;
470470 if (msg.opcode != .binary) continue;
471471 if (msg.data.len == 0) continue;
472 const tag: abi.ToServerTag = @enumFromInt(msg.data[0]);
472 const tag: abi.ToServerTag = @fromBackingInt(@intCast(msg.data[0]));
473473 switch (tag) {
474474 _ => continue,
475475 .rebuild => while (true) {
lib/compiler/aro/aro/Attribute.zig+3-3
......@@ -154,7 +154,7 @@ pub const Formatting = struct {
154154 if (@typeInfo(Unwrapped) != .@"enum") unreachable;
155155
156156 const enum_field_names = @typeInfo(Unwrapped).@"enum".field_names;
157 const quote = comptime quoteChar(@enumFromInt(@intFromEnum(tag)));
157 const quote = comptime quoteChar(@fromBackingInt(@intCast(@backingInt(tag))));
158158 comptime var values: []const u8 = quote ++ enum_field_names[0] ++ quote;
159159 inline for (enum_field_names[1..]) |enum_field_name| {
160160 values = values ++ ", ";
......@@ -344,7 +344,7 @@ fn diagnoseField(
344344pub fn diagnose(attr: Tag, arguments: *Arguments, arg_idx: u32, res: Parser.Result, arg_start: TokenIndex, node: Tree.Node, p: *Parser) !bool {
345345 switch (attr) {
346346 inline else => |tag| {
347 const decl_name = @typeInfo(attributes).@"struct".decl_names[@intFromEnum(tag)];
347 const decl_name = @typeInfo(attributes).@"struct".decl_names[@backingInt(tag)];
348348 const max_arg_count = comptime maxArgCount(tag);
349349 if (arg_idx >= max_arg_count) {
350350 try p.err(arg_start, .attribute_too_many_args, .{ @tagName(attr), max_arg_count });
......@@ -735,7 +735,7 @@ pub const Arguments = blk: {
735735};
736736
737737pub fn ArgumentsForTag(comptime tag: Tag) type {
738 const decl_name = @typeInfo(attributes).@"struct".decl_names[@intFromEnum(tag)];
738 const decl_name = @typeInfo(attributes).@"struct".decl_names[@backingInt(tag)];
739739 return @field(attributes, decl_name);
740740}
741741
lib/compiler/aro/aro/Builtins.zig+2-2
......@@ -360,7 +360,7 @@ pub fn fromName(comp: *Compilation, name: []const u8) ?FromName {
360360fn fromNameExtra(name: []const u8, comptime arch: std.meta.Tag(Tag)) ?FromName {
361361 const list = @field(@This(), @tagName(arch));
362362 const tag = list.tagFromName(name) orelse return null;
363 const builtin = list.data[@intFromEnum(tag)];
363 const builtin = list.data[@backingInt(tag)];
364364
365365 return .{
366366 .tag = @unionInit(Tag, @tagName(arch), tag),
......@@ -392,7 +392,7 @@ test "all builtins" {
392392 for (features) |valid_feature| {
393393 if (std.mem.eql(u8, feature, valid_feature.name)) continue :outer;
394394 }
395 std.debug.panic("unknown feature {s} on {t}\n", .{ feature, @as(list.Tag, @enumFromInt(index)) });
395 std.debug.panic("unknown feature {s} on {t}\n", .{ feature, @as(list.Tag, @fromBackingInt(@intCast(index))) });
396396 }
397397 }
398398 }
lib/compiler/aro/aro/CodeGen.zig+3-3
......@@ -718,7 +718,7 @@ fn genExpr(c: *CodeGen, node_index: Node.Index) Error!Ir.Ref {
718718 }
719719
720720 try c.builder.startBlock(then_label);
721 if (c.builder.instructions.items(.ty)[@intFromEnum(c.cond_dummy_ref)] == .i1) {
721 if (c.builder.instructions.items(.ty)[@backingInt(c.cond_dummy_ref)] == .i1) {
722722 c.cond_dummy_ref = try c.addUn(.zext, c.cond_dummy_ref, cond_qt);
723723 }
724724 const then_val = try c.genExpr(conditional.then_expr);
......@@ -895,7 +895,7 @@ fn genLval(c: *CodeGen, node_index: Node.Index) Error!Ir.Ref {
895895 }
896896
897897 const duped_name = try c.builder.arena.allocator().dupeSentinel(u8, slice, 0);
898 const ref: Ir.Ref = @enumFromInt(c.builder.instructions.len);
898 const ref: Ir.Ref = @fromBackingInt(@intCast(c.builder.instructions.len));
899899 try c.builder.instructions.append(c.builder.gpa, .{ .tag = .symbol, .data = .{ .label = duped_name }, .ty = .ptr });
900900 return ref;
901901 },
......@@ -1113,7 +1113,7 @@ fn genCall(c: *CodeGen, call: Node.Call) Error!Ir.Ref {
11131113 }
11141114
11151115 const duped_name = try c.builder.arena.allocator().dupeSentinel(u8, slice, 0);
1116 const ref: Ir.Ref = @enumFromInt(c.builder.instructions.len);
1116 const ref: Ir.Ref = @fromBackingInt(@intCast(c.builder.instructions.len));
11171117 try c.builder.instructions.append(c.builder.gpa, .{ .tag = .symbol, .data = .{ .label = duped_name }, .ty = .ptr });
11181118 break :blk ref;
11191119 },
lib/compiler/aro/aro/Compilation.zig+9-9
......@@ -595,7 +595,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
595595
596596 .{ .mmx, "__MMX__" },
597597 }) |fs| {
598 if (features.isEnabled(@intFromEnum(fs[0]))) {
598 if (features.isEnabled(@backingInt(fs[0]))) {
599599 try define(w, fs[1]);
600600 }
601601 }
......@@ -808,7 +808,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
808808 .{ .d128, "SYSREG128" },
809809 .{ .gcs, "GCS" },
810810 }) |fs| {
811 if (features.isEnabled(@intFromEnum(fs[0]))) {
811 if (features.isEnabled(@backingInt(fs[0]))) {
812812 try w.print("#define __ARM_FEATURE_{s} 1\n", .{fs[1]});
813813 }
814814 }
......@@ -1013,7 +1013,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
10131013 // TODO: clang treats __FLT_EVAL_METHOD__ as a special-cased macro because evaluating it within a scope
10141014 // where `#pragma clang fp eval_method(X)` has been called produces an error diagnostic.
10151015 const flt_eval_method = comp.langopts.fp_eval_method orelse target.defaultFpEvalMethod();
1016 try w.print("#define __FLT_EVAL_METHOD__ {d}\n", .{@intFromEnum(flt_eval_method)});
1016 try w.print("#define __FLT_EVAL_METHOD__ {d}\n", .{@backingInt(flt_eval_method)});
10171017
10181018 try w.writeAll(
10191019 \\#define __FLT_RADIX__ 2
......@@ -1028,13 +1028,13 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
10281028 \\#define __pic__ {0d}
10291029 \\#define __PIC__ {0d}
10301030 \\
1031 , .{@intFromEnum(comp.code_gen_options.pic_level)});
1031 , .{@backingInt(comp.code_gen_options.pic_level)});
10321032 if (comp.code_gen_options.is_pie) {
10331033 try w.print(
10341034 \\#define __pie__ {0d}
10351035 \\#define __PIE__ {0d}
10361036 \\
1037 , .{@intFromEnum(comp.code_gen_options.pic_level)});
1037 , .{@backingInt(comp.code_gen_options.pic_level)});
10381038 }
10391039 },
10401040 }
......@@ -1459,7 +1459,7 @@ pub fn hasClangStyleBoundsSafety(comp: *const Compilation) bool {
14591459
14601460pub fn getSource(comp: *const Compilation, id: Source.Id) Source {
14611461 if (id.alias) {
1462 return comp.source_aliases.items[@intFromEnum(id.index)];
1462 return comp.source_aliases.items[@backingInt(id.index)];
14631463 }
14641464 if (id.index == .generated) return .{
14651465 .path = "<scratch space>",
......@@ -1468,7 +1468,7 @@ pub fn getSource(comp: *const Compilation, id: Source.Id) Source {
14681468 .splice_locs = &.{},
14691469 .kind = .user,
14701470 };
1471 return comp.sources.values()[@intFromEnum(id.index)];
1471 return comp.sources.values()[@backingInt(id.index)];
14721472}
14731473
14741474/// Creates a Source from `buf` and adds it to the Compilation
......@@ -1488,7 +1488,7 @@ pub fn addSourceFromOwnedBuffer(comp: *Compilation, path: []const u8, buf: []u8,
14881488 var splice_list: std.ArrayList(u32) = .empty;
14891489 defer splice_list.deinit(comp.gpa);
14901490
1491 const source_id: Source.Id = .{ .index = @enumFromInt(comp.sources.count()) };
1491 const source_id: Source.Id = .{ .index = @fromBackingInt(@intCast(comp.sources.count())) };
14921492
14931493 var i: u32 = 0;
14941494 var backslash_loc: u32 = undefined;
......@@ -1690,7 +1690,7 @@ pub fn addSourceFromFile(comp: *Compilation, file: std.Io.File, path: []const u8
16901690pub fn addSourceAlias(comp: *Compilation, source: Source.Id, new_path: []const u8, new_kind: Source.Kind) !Source.Id {
16911691 var aliased_source = comp.getSource(source);
16921692 aliased_source.path = new_path;
1693 aliased_source.id = .{ .index = @enumFromInt(comp.source_aliases.items.len), .alias = true };
1693 aliased_source.id = .{ .index = @fromBackingInt(@intCast(comp.source_aliases.items.len)), .alias = true };
16941694 aliased_source.kind = new_kind;
16951695 try comp.source_aliases.append(comp.gpa, aliased_source);
16961696 return aliased_source.id;
lib/compiler/aro/aro/Diagnostics.zig+1-1
......@@ -405,7 +405,7 @@ pub fn effectiveKind(d: *Diagnostics, message: anytype) Message.Kind {
405405
406406 // Use extension diagnostic behavior if not set explicitly.
407407 if (message.extension and !set_explicit) {
408 kind = @enumFromInt(@max(@intFromEnum(kind), @intFromEnum(d.state.extensions)));
408 kind = @fromBackingInt(@intCast(@max(@backingInt(kind), @backingInt(d.state.extensions))));
409409 }
410410
411411 // Make diagnostic a warning if -Weverything is set.
lib/compiler/aro/aro/Hideset.zig+6-6
......@@ -67,8 +67,8 @@ const Iterator = struct {
6767
6868 fn next(self: *Iterator) ?Identifier {
6969 if (self.i == .none) return null;
70 defer self.i = self.slice.items(.next)[@intFromEnum(self.i)];
71 return self.slice.items(.identifier)[@intFromEnum(self.i)];
70 defer self.i = self.slice.items(.next)[@backingInt(self.i)];
71 return self.slice.items(.identifier)[@backingInt(self.i)];
7272 }
7373};
7474
......@@ -118,14 +118,14 @@ fn createNodeAssumeCapacity(self: *Hideset, identifier: Identifier) Index {
118118fn createNodeAssumeCapacityExtra(self: *Hideset, identifier: Identifier, next: Index) Index {
119119 const next_idx = self.linked_list.len;
120120 self.linked_list.appendAssumeCapacity(.{ .identifier = identifier, .next = next });
121 return @enumFromInt(next_idx);
121 return @fromBackingInt(@intCast(next_idx));
122122}
123123
124124/// Create a new list with `identifier` at the front followed by `tail`
125125pub fn prepend(self: *Hideset, loc: Source.Location, tail: Index) !Index {
126126 const new_idx = self.linked_list.len;
127127 try self.linked_list.append(self.comp.gpa, .{ .identifier = Identifier.fromLocation(loc), .next = tail });
128 return @enumFromInt(new_idx);
128 return @fromBackingInt(@intCast(new_idx));
129129}
130130
131131/// Attach elements of `b` to the front of `a` (if they're not in `a`)
......@@ -163,7 +163,7 @@ fn len(self: *const Hideset, list: Index) usize {
163163 var cur = list;
164164 var count: usize = 0;
165165 while (cur != .none) : (count += 1) {
166 cur = nexts[@intFromEnum(cur)];
166 cur = nexts[@backingInt(cur)];
167167 }
168168 return count;
169169}
......@@ -189,7 +189,7 @@ pub fn intersection(self: *Hideset, a: Index, b: Index) !Index {
189189 head = new_idx;
190190 }
191191 if (cur != .none) {
192 self.linked_list.items(.next)[@intFromEnum(cur)] = new_idx;
192 self.linked_list.items(.next)[@backingInt(cur)] = new_idx;
193193 }
194194 cur = new_idx;
195195 }
lib/compiler/aro/aro/LangOpts.zig+1-1
......@@ -75,7 +75,7 @@ pub const Standard = enum {
7575 });
7676
7777 pub fn atLeast(self: Standard, other: Standard) bool {
78 return @intFromEnum(self) >= @intFromEnum(other);
78 return @backingInt(self) >= @backingInt(other);
7979 }
8080
8181 pub fn isGNU(standard: Standard) bool {
lib/compiler/aro/aro/Parser.zig+39-39
......@@ -316,7 +316,7 @@ fn validateExtendedIdentifier(p: *Parser) !bool {
316316 // Check NFC normalization.
317317 if (!normalized) continue;
318318 const canonical_class = char_info.getCanonicalClass(codepoint);
319 if (@intFromEnum(last_canonical_class) > @intFromEnum(canonical_class) and
319 if (@backingInt(last_canonical_class) > @backingInt(canonical_class) and
320320 canonical_class != .not_reordered)
321321 {
322322 normalized = false;
......@@ -515,7 +515,7 @@ fn formatResult(p: *Parser, w: *std.Io.Writer, fmt: []const u8, res: Result) !us
515515 .null => try w.writeAll("nullptr_t"),
516516 else => if (try res.val.print(res.qt, p.comp, w)) |nested| switch (nested) {
517517 .pointer => |ptr| {
518 const ptr_node: Node.Index = @enumFromInt(ptr.node);
518 const ptr_node: Node.Index = @fromBackingInt(@intCast(ptr.node));
519519 const decl_name = p.tree.tokSlice(ptr_node.tok(&p.tree));
520520 try ptr.offset.printPointer(decl_name, p.comp, w);
521521 },
......@@ -666,16 +666,16 @@ fn addList(p: *Parser, nodes: []const Node.Index) Allocator.Error!Tree.Node.Rang
666666
667667/// Recursively sets the defintion field of `tentative_decl` to `definition`.
668668pub fn setTentativeDeclDefinition(p: *Parser, tentative_decl: Node.Index, definition: Node.Index) void {
669 const node_data = &p.tree.nodes.items(.data)[@intFromEnum(tentative_decl)];
670 switch (p.tree.nodes.items(.tag)[@intFromEnum(tentative_decl)]) {
669 const node_data = &p.tree.nodes.items(.data)[@backingInt(tentative_decl)];
670 switch (p.tree.nodes.items(.tag)[@backingInt(tentative_decl)]) {
671671 .fn_proto => {},
672672 .variable => {},
673673 else => return,
674674 }
675675
676 const prev: Node.OptIndex = @enumFromInt(node_data[2]);
676 const prev: Node.OptIndex = @fromBackingInt(@intCast(node_data[2]));
677677
678 node_data[2] = @intFromEnum(definition);
678 node_data[2] = @backingInt(definition);
679679 if (prev.unpack()) |some| {
680680 p.setTentativeDeclDefinition(some, definition);
681681 }
......@@ -687,20 +687,20 @@ fn clearNonTentativeDefinitions(p: *Parser) void {
687687 const tags = p.tree.nodes.items(.tag);
688688 const data = p.tree.nodes.items(.data);
689689 for (p.tree.root_decls.items) |root_decl| {
690 switch (tags[@intFromEnum(root_decl)]) {
690 switch (tags[@backingInt(root_decl)]) {
691691 .fn_proto => {
692 const node_data = &data[@intFromEnum(root_decl)];
693 if (node_data[2] != @intFromEnum(Node.OptIndex.null)) {
692 const node_data = &data[@backingInt(root_decl)];
693 if (node_data[2] != @backingInt(Node.OptIndex.null)) {
694694 if (tags[node_data[2]] != .fn_def) {
695 node_data[2] = @intFromEnum(Node.OptIndex.null);
695 node_data[2] = @backingInt(Node.OptIndex.null);
696696 }
697697 }
698698 },
699699 .variable => {
700 const node_data = &data[@intFromEnum(root_decl)];
701 if (node_data[2] != @intFromEnum(Node.OptIndex.null)) {
700 const node_data = &data[@backingInt(root_decl)];
701 if (node_data[2] != @backingInt(Node.OptIndex.null)) {
702702 if (tags[node_data[2]] != .variable_def) {
703 node_data[2] = @intFromEnum(Node.OptIndex.null);
703 node_data[2] = @backingInt(Node.OptIndex.null);
704704 }
705705 }
706706 },
......@@ -1326,7 +1326,7 @@ fn decl(p: *Parser) Error!bool {
13261326 .qt = p.func.qt.?,
13271327 .body = body,
13281328 .definition = null,
1329 } }, @intFromEnum(decl_node));
1329 } }, @backingInt(decl_node));
13301330
13311331 try p.decl_buf.append(gpa, decl_node);
13321332
......@@ -1358,7 +1358,7 @@ fn decl(p: *Parser) Error!bool {
13581358 .name_tok = init_d.d.name,
13591359 .qt = init_d.d.qt,
13601360 .implicit = false,
1361 } }, @intFromEnum(decl_node));
1361 } }, @backingInt(decl_node));
13621362 } else if (init_d.d.declarator_type == .func or init_d.d.qt.is(p.comp, .func)) {
13631363 try decl_spec.validateFnDecl(p);
13641364 try p.tree.setNode(.{ .function = .{
......@@ -1368,7 +1368,7 @@ fn decl(p: *Parser) Error!bool {
13681368 .@"inline" = decl_spec.@"inline" != null,
13691369 .body = null,
13701370 .definition = null,
1371 } }, @intFromEnum(decl_node));
1371 } }, @backingInt(decl_node));
13721372 } else {
13731373 try decl_spec.validateDecl(p, init_d.asm_label);
13741374 var node_qt = init_d.d.qt;
......@@ -1400,7 +1400,7 @@ fn decl(p: *Parser) Error!bool {
14001400 .initializer = if (init_d.initializer) |some| some.node else null,
14011401 .definition = null,
14021402 },
1403 }, @intFromEnum(decl_node));
1403 }, @backingInt(decl_node));
14041404 }
14051405 try p.decl_buf.append(gpa, decl_node);
14061406
......@@ -2425,7 +2425,7 @@ fn recordSpec(p: *Parser) Error!QualType {
24252425 const record_ty: Type.Record = .{
24262426 .name = interned_name,
24272427 .layout = null,
2428 .decl_node = @enumFromInt(reserved_index),
2428 .decl_node = @fromBackingInt(@intCast(reserved_index)),
24292429 .fields = &.{},
24302430 };
24312431 const record_qt = try p.comp.type_store.put(gpa, if (is_struct)
......@@ -2451,7 +2451,7 @@ fn recordSpec(p: *Parser) Error!QualType {
24512451 .{ .struct_forward_decl = fw }
24522452 else
24532453 .{ .union_forward_decl = fw }, reserved_index);
2454 try p.decl_buf.append(gpa, @enumFromInt(reserved_index));
2454 try p.decl_buf.append(gpa, @fromBackingInt(@intCast(reserved_index)));
24552455 return attributed_qt;
24562456 }
24572457 };
......@@ -2481,7 +2481,7 @@ fn recordSpec(p: *Parser) Error!QualType {
24812481 // can be specified after the closing rbrace, which we haven't encountered yet.
24822482 const record_ty: Type.Record = .{
24832483 .name = interned_name,
2484 .decl_node = @enumFromInt(reserved_index),
2484 .decl_node = @fromBackingInt(@intCast(reserved_index)),
24852485 .layout = null,
24862486 .fields = &.{},
24872487 };
......@@ -2505,7 +2505,7 @@ fn recordSpec(p: *Parser) Error!QualType {
25052505 break :blk .{ record_ty, record_qt };
25062506 };
25072507
2508 try p.decl_buf.append(gpa, @enumFromInt(reserved_index));
2508 try p.decl_buf.append(gpa, @fromBackingInt(@intCast(reserved_index)));
25092509 const decl_buf_top = p.decl_buf.items.len;
25102510 const record_buf_top = p.record_buf.items.len;
25112511 errdefer p.decl_buf.items.len = decl_buf_top - 1;
......@@ -2557,15 +2557,15 @@ fn recordSpec(p: *Parser) Error!QualType {
25572557 .pointer_alignment_bits = 8,
25582558 .required_alignment_bits = 8,
25592559 };
2560 record_ty.decl_node = @enumFromInt(reserved_index);
2560 record_ty.decl_node = @fromBackingInt(@intCast(reserved_index));
25612561
25622562 const base_type = qt.base(p.comp);
25632563 if (is_struct) {
25642564 std.debug.assert(base_type.type.@"struct".name == record_ty.name);
2565 try p.comp.type_store.set(gpa, .{ .@"struct" = record_ty }, @intFromEnum(base_type.qt._index));
2565 try p.comp.type_store.set(gpa, .{ .@"struct" = record_ty }, @backingInt(base_type.qt._index));
25662566 } else {
25672567 std.debug.assert(base_type.type.@"union".name == record_ty.name);
2568 try p.comp.type_store.set(gpa, .{ .@"union" = record_ty }, @intFromEnum(base_type.qt._index));
2568 try p.comp.type_store.set(gpa, .{ .@"union" = record_ty }, @backingInt(base_type.qt._index));
25692569 }
25702570 break :blk false;
25712571 };
......@@ -2597,7 +2597,7 @@ fn recordSpec(p: *Parser) Error!QualType {
25972597 // Override previous incomplete layout and fields.
25982598 const base_qt = qt.base(p.comp).qt;
25992599 const ts = &p.comp.type_store;
2600 var extra_index = ts.types.items(.data)[@intFromEnum(base_qt._index)][1];
2600 var extra_index = ts.types.items(.data)[@backingInt(base_qt._index)][1];
26012601
26022602 const layout_size = 5;
26032603 comptime std.debug.assert(@sizeOf(Type.Record.Layout) == @sizeOf(u32) * layout_size);
......@@ -2804,7 +2804,7 @@ fn recordDecl(p: *Parser) Error!bool {
28042804 .name = interned_name,
28052805 .qt = qt,
28062806 .name_tok = name_tok,
2807 .bit_width = if (bits) |some| @enumFromInt(some) else .null,
2807 .bit_width = if (bits) |some| @fromBackingInt(@intCast(some)) else .null,
28082808 ._attr_index = attr_index,
28092809 ._attr_len = attr_len,
28102810 });
......@@ -2951,7 +2951,7 @@ fn enumSpec(p: *Parser) Error!QualType {
29512951 .tag = fixed_qt,
29522952 .fixed = fixed_qt != null,
29532953 .incomplete = true,
2954 .decl_node = @enumFromInt(reserved_index),
2954 .decl_node = @fromBackingInt(@intCast(reserved_index)),
29552955 .fields = &.{},
29562956 } });
29572957
......@@ -3001,7 +3001,7 @@ fn enumSpec(p: *Parser) Error!QualType {
30013001 // can be specified after the closing rbrace, which we haven't encountered yet.
30023002 const enum_ty: Type.Enum = .{
30033003 .name = interned_name,
3004 .decl_node = @enumFromInt(reserved_index),
3004 .decl_node = @fromBackingInt(@intCast(reserved_index)),
30053005 .tag = fixed_qt,
30063006 .incomplete = true,
30073007 .fixed = fixed_qt != null,
......@@ -3012,7 +3012,7 @@ fn enumSpec(p: *Parser) Error!QualType {
30123012 };
30133013
30143014 // reserve space for this enum
3015 try p.decl_buf.append(gpa, @enumFromInt(reserved_index));
3015 try p.decl_buf.append(gpa, @fromBackingInt(@intCast(reserved_index)));
30163016 const decl_buf_top = p.decl_buf.items.len;
30173017 const list_buf_top = p.list_buf.items.len;
30183018 const enum_buf_top = p.enum_buf.items.len;
......@@ -3076,17 +3076,17 @@ fn enumSpec(p: *Parser) Error!QualType {
30763076 new_field_node.enum_field.init = res.node;
30773077 }
30783078
3079 try p.tree.setNode(new_field_node, @intFromEnum(field_node));
3079 try p.tree.setNode(new_field_node, @backingInt(field_node));
30803080 }
30813081 }
30823082
30833083 { // Override previous incomplete type
30843084 enum_ty.fields = enum_fields;
30853085 enum_ty.incomplete = false;
3086 enum_ty.decl_node = @enumFromInt(reserved_index);
3086 enum_ty.decl_node = @fromBackingInt(@intCast(reserved_index));
30873087 const base_type = attributed_qt.base(p.comp);
30883088 std.debug.assert(base_type.type.@"enum".name == enum_ty.name);
3089 try p.comp.type_store.set(gpa, .{ .@"enum" = enum_ty }, @intFromEnum(base_type.qt._index));
3089 try p.comp.type_store.set(gpa, .{ .@"enum" = enum_ty }, @backingInt(base_type.qt._index));
30903090 }
30913091
30923092 // declare a symbol for the type
......@@ -3619,7 +3619,7 @@ fn declarator(
36193619 else => unreachable,
36203620 }
36213621 // Child type is always stored in repr.data[0]
3622 p.comp.type_store.types.items(.data)[@intFromEnum(cur._index)][0] = @bitCast(outer);
3622 p.comp.type_store.types.items(.data)[@backingInt(cur._index)][0] = @bitCast(outer);
36233623 break;
36243624 }
36253625 }
......@@ -5565,7 +5565,7 @@ fn pointerValue(p: *Parser, node: Node.Index, offset: Value) !Value {
55655565 const var_name = try p.comp.internString(p.tokSlice(decl_ref.name_tok));
55665566 const sym = p.syms.findSymbol(var_name) orelse return .{};
55675567 const sym_node = sym.node.unpack() orelse return .{};
5568 return Value.pointer(.{ .node = @intFromEnum(sym_node), .offset = offset.ref() }, p.comp);
5568 return Value.pointer(.{ .node = @backingInt(sym_node), .offset = offset.ref() }, p.comp);
55695569 },
55705570 .string_literal_expr => return p.tree.value_map.get(node).?,
55715571 else => return .{},
......@@ -10066,7 +10066,7 @@ fn stringLiteral(p: *Parser) Error!Result {
1006610066 const strings_top = p.strings.items.len;
1006710067 defer p.strings.items.len = strings_top;
1006810068
10069 const literal_start = mem.alignForward(usize, strings_top, @intFromEnum(char_width));
10069 const literal_start = mem.alignForward(usize, strings_top, @backingInt(char_width));
1007010070 try p.strings.resize(gpa, literal_start);
1007110071
1007210072 while (p.tok_i < string_end) : (p.tok_i += 1) {
......@@ -10082,7 +10082,7 @@ fn stringLiteral(p: *Parser) Error!Result {
1008210082 .incorrect_encoding_is_error = count > 1,
1008310083 };
1008410084
10085 try p.strings.ensureUnusedCapacity(gpa, (slice.len + 1) * @intFromEnum(char_width)); // +1 for null terminator
10085 try p.strings.ensureUnusedCapacity(gpa, (slice.len + 1) * @backingInt(char_width)); // +1 for null terminator
1008610086 while (try char_literal_parser.next()) |item| switch (item) {
1008710087 .value => |v| {
1008810088 switch (char_width) {
......@@ -10143,7 +10143,7 @@ fn stringLiteral(p: *Parser) Error!Result {
1014310143 },
1014410144 };
1014510145 }
10146 p.strings.appendNTimesAssumeCapacity(0, @intFromEnum(char_width));
10146 p.strings.appendNTimesAssumeCapacity(0, @backingInt(char_width));
1014710147 const slice = p.strings.items[literal_start..];
1014810148
1014910149 // TODO this won't do anything if there is a cache hit
......@@ -10158,7 +10158,7 @@ fn stringLiteral(p: *Parser) Error!Result {
1015810158
1015910159 const array_qt = try p.comp.type_store.put(gpa, .{ .array = .{
1016010160 .elem = string_kind.elementType(p.comp),
10161 .len = .{ .fixed = @divExact(slice.len, @intFromEnum(char_width)) },
10161 .len = .{ .fixed = @divExact(slice.len, @backingInt(char_width)) },
1016210162 } });
1016310163 const res: Result = .{
1016410164 .qt = array_qt,
......@@ -10503,7 +10503,7 @@ fn parseInt(p: *Parser, prefix: NumberPrefix, buf: []const u8, suffix: NumberSuf
1050310503 if (prefix == .binary) {
1050410504 try p.err(tok_i, .binary_integer_literal, .{});
1050510505 }
10506 const base = @intFromEnum(prefix);
10506 const base = @backingInt(prefix);
1050710507 var res = if (suffix.isBitInt())
1050810508 try p.bitInt(base, buf, suffix, tok_i)
1050910509 else
lib/compiler/aro/aro/Preprocessor.zig+2-2
......@@ -45,11 +45,11 @@ const IfContext = struct {
4545 level: u8,
4646
4747 fn get(self: *const IfContext) Nesting {
48 return @enumFromInt(std.mem.readPackedInt(Backing, &self.kind, @as(usize, self.level) * 2, .native));
48 return @fromBackingInt(@intCast(std.mem.readPackedInt(Backing, &self.kind, @as(usize, self.level) * 2, .native)));
4949 }
5050
5151 fn set(self: *IfContext, context: Nesting) void {
52 std.mem.writePackedInt(Backing, &self.kind, @as(usize, self.level) * 2, @intFromEnum(context), .native);
52 std.mem.writePackedInt(Backing, &self.kind, @as(usize, self.level) * 2, @backingInt(context), .native);
5353 }
5454
5555 fn increment(self: *IfContext) bool {
lib/compiler/aro/aro/StringInterner.zig+3-3
......@@ -10,12 +10,12 @@ pub const StringId = enum(u32) {
1010
1111 pub fn lookup(id: StringId, comp: *const Compilation) []const u8 {
1212 if (id == .empty) return "";
13 return comp.string_interner.table.keys()[@intFromEnum(id)];
13 return comp.string_interner.table.keys()[@backingInt(id)];
1414 }
1515
1616 pub fn lookupExtra(id: StringId, si: StringInterner) []const u8 {
1717 if (id == .empty) return "";
18 return si.table.keys()[@intFromEnum(id)];
18 return si.table.keys()[@backingInt(id)];
1919 }
2020};
2121
......@@ -31,5 +31,5 @@ pub fn intern(si: *StringInterner, allocator: mem.Allocator, str: []const u8) !S
3131 if (str.len == 0) return .empty;
3232
3333 const gop = try si.table.getOrPut(allocator, str);
34 return @enumFromInt(gop.index);
34 return @fromBackingInt(@intCast(gop.index));
3535}
lib/compiler/aro/aro/Target.zig+6-6
......@@ -104,14 +104,14 @@ pub const SubArch = enum {
104104
105105 pub fn toFeature(sub: SubArch, arch: Cpu.Arch) ?std.Target.Cpu.Feature.Set.Index {
106106 if (arch.isPowerPC()) {
107 if (sub == .powerpc_spe) return @intFromEnum(std.Target.powerpc.Feature.spe);
107 if (sub == .powerpc_spe) return @backingInt(std.Target.powerpc.Feature.spe);
108108 } else if (arch.isMIPS32()) {
109 return @intFromEnum(std.Target.mips.Feature.mips32r6);
109 return @backingInt(std.Target.mips.Feature.mips32r6);
110110 } else if (arch.isMIPS64()) {
111 return @intFromEnum(std.Target.mips.Feature.mips64r6);
111 return @backingInt(std.Target.mips.Feature.mips64r6);
112112 } else if (arch.isSpirV()) {
113113 const spirv = std.Target.spirv.Feature;
114 return @intFromEnum(switch (sub) {
114 return @backingInt(switch (sub) {
115115 .spirv_v10 => spirv.v1_0,
116116 .spirv_v11 => spirv.v1_1,
117117 .spirv_v12 => spirv.v1_2,
......@@ -123,7 +123,7 @@ pub const SubArch = enum {
123123 });
124124 } else if (arch.isAARCH64()) {
125125 const aarch64 = std.Target.aarch64.Feature;
126 return @intFromEnum(switch (sub) {
126 return @backingInt(switch (sub) {
127127 .arm_v8_1a => aarch64.v8_1a,
128128 .arm_v8_2a => aarch64.v8_2a,
129129 .arm_v8_3a => aarch64.v8_3a,
......@@ -149,7 +149,7 @@ pub const SubArch = enum {
149149 });
150150 } else if (arch.isArm()) {
151151 const arm = std.Target.arm.Feature;
152 return @intFromEnum(switch (sub) {
152 return @backingInt(switch (sub) {
153153 .arm_v4t => arm.v4t,
154154 .arm_v5 => arm.v5t,
155155 .arm_v5te => arm.v5te,
lib/compiler/aro/aro/Tokenizer.zig+2-2
......@@ -1218,7 +1218,7 @@ pub fn next(self: *Tokenizer) Token {
12181218 break;
12191219 },
12201220 .hex4, .hex8 => {
1221 self.index += @intFromEnum(ucn_kind);
1221 self.index += @backingInt(ucn_kind);
12221222 id = .extended_identifier;
12231223 state = .extended_identifier;
12241224 },
......@@ -1458,7 +1458,7 @@ pub fn next(self: *Tokenizer) Token {
14581458 },
14591459 .hex4, .hex8 => {
14601460 state = .extended_identifier;
1461 self.index += @intFromEnum(ucn_kind);
1461 self.index += @backingInt(ucn_kind);
14621462 },
14631463 }
14641464 },
lib/compiler/aro/aro/Tree.zig+269-269
......@@ -732,9 +732,9 @@ pub const Node = union(enum) {
732732 _,
733733
734734 pub fn get(index: Index, tree: *const Tree) Node {
735 const node_tok = tree.nodes.items(.tok)[@intFromEnum(index)];
736 const node_data = &tree.nodes.items(.data)[@intFromEnum(index)];
737 return switch (tree.nodes.items(.tag)[@intFromEnum(index)]) {
735 const node_tok = tree.nodes.items(.tok)[@backingInt(index)];
736 const node_data = &tree.nodes.items(.data)[@backingInt(index)];
737 return switch (tree.nodes.items(.tag)[@backingInt(index)]) {
738738 .empty_decl => .{
739739 .empty_decl = .{
740740 .semicolon = node_tok,
......@@ -743,7 +743,7 @@ pub const Node = union(enum) {
743743 .static_assert => .{
744744 .static_assert = .{
745745 .assert_tok = node_tok,
746 .cond = @enumFromInt(node_data[0]),
746 .cond = @fromBackingInt(@intCast(node_data[0])),
747747 .message = unpackOptIndex(node_data[1]),
748748 },
749749 },
......@@ -768,7 +768,7 @@ pub const Node = union(enum) {
768768 .qt = @bitCast(node_data[0]),
769769 .static = attr.static,
770770 .@"inline" = attr.@"inline",
771 .body = @enumFromInt(node_data[2]),
771 .body = @fromBackingInt(@intCast(node_data[2])),
772772 .definition = null,
773773 },
774774 };
......@@ -838,7 +838,7 @@ pub const Node = union(enum) {
838838 .global_asm => .{
839839 .global_asm = .{
840840 .asm_tok = node_tok,
841 .asm_str = @enumFromInt(node_data[0]),
841 .asm_str = @fromBackingInt(@intCast(node_data[0])),
842842 },
843843 },
844844 .struct_decl => .{
......@@ -922,7 +922,7 @@ pub const Node = union(enum) {
922922 .labeled_stmt = .{
923923 .label_tok = node_tok,
924924 .qt = @bitCast(node_data[0]),
925 .body = @enumFromInt(node_data[1]),
925 .body = @fromBackingInt(@intCast(node_data[1])),
926926 },
927927 },
928928 .compound_stmt => .{
......@@ -940,44 +940,44 @@ pub const Node = union(enum) {
940940 .if_stmt => .{
941941 .if_stmt = .{
942942 .if_tok = node_tok,
943 .cond = @enumFromInt(node_data[0]),
944 .then_body = @enumFromInt(node_data[1]),
943 .cond = @fromBackingInt(@intCast(node_data[0])),
944 .then_body = @fromBackingInt(@intCast(node_data[1])),
945945 .else_body = unpackOptIndex(node_data[2]),
946946 },
947947 },
948948 .switch_stmt => .{
949949 .switch_stmt = .{
950950 .switch_tok = node_tok,
951 .cond = @enumFromInt(node_data[0]),
952 .body = @enumFromInt(node_data[1]),
951 .cond = @fromBackingInt(@intCast(node_data[0])),
952 .body = @fromBackingInt(@intCast(node_data[1])),
953953 },
954954 },
955955 .case_stmt => .{
956956 .case_stmt = .{
957957 .case_tok = node_tok,
958 .start = @enumFromInt(node_data[0]),
958 .start = @fromBackingInt(@intCast(node_data[0])),
959959 .end = unpackOptIndex(node_data[1]),
960 .body = @enumFromInt(node_data[2]),
960 .body = @fromBackingInt(@intCast(node_data[2])),
961961 },
962962 },
963963 .default_stmt => .{
964964 .default_stmt = .{
965965 .default_tok = node_tok,
966 .body = @enumFromInt(node_data[0]),
966 .body = @fromBackingInt(@intCast(node_data[0])),
967967 },
968968 },
969969 .while_stmt => .{
970970 .while_stmt = .{
971971 .while_tok = node_tok,
972 .cond = @enumFromInt(node_data[0]),
973 .body = @enumFromInt(node_data[1]),
972 .cond = @fromBackingInt(@intCast(node_data[0])),
973 .body = @fromBackingInt(@intCast(node_data[1])),
974974 },
975975 },
976976 .do_while_stmt => .{
977977 .do_while_stmt = .{
978978 .do_tok = node_tok,
979 .cond = @enumFromInt(node_data[0]),
980 .body = @enumFromInt(node_data[1]),
979 .cond = @fromBackingInt(@intCast(node_data[0])),
980 .body = @fromBackingInt(@intCast(node_data[1])),
981981 },
982982 },
983983 .for_decl => .{
......@@ -986,7 +986,7 @@ pub const Node = union(enum) {
986986 .init = .{ .decls = @ptrCast(tree.extra.items[node_data[0]..][0 .. node_data[1] - 2]) },
987987 .cond = unpackOptIndex(tree.extra.items[node_data[0] + node_data[1] - 2]),
988988 .incr = unpackOptIndex(tree.extra.items[node_data[0] + node_data[1] - 1]),
989 .body = @enumFromInt(node_data[2]),
989 .body = @fromBackingInt(@intCast(node_data[2])),
990990 },
991991 },
992992 .for_expr => .{
......@@ -995,7 +995,7 @@ pub const Node = union(enum) {
995995 .init = .{ .expr = unpackOptIndex(node_data[0]) },
996996 .cond = unpackOptIndex(tree.extra.items[node_data[1]]),
997997 .incr = unpackOptIndex(tree.extra.items[node_data[1] + 1]),
998 .body = @enumFromInt(node_data[2]),
998 .body = @fromBackingInt(@intCast(node_data[2])),
999999 },
10001000 },
10011001 .goto_stmt => .{
......@@ -1006,7 +1006,7 @@ pub const Node = union(enum) {
10061006 .computed_goto_stmt => .{
10071007 .computed_goto_stmt = .{
10081008 .goto_tok = node_tok,
1009 .expr = @enumFromInt(node_data[0]),
1009 .expr = @fromBackingInt(@intCast(node_data[0])),
10101010 },
10111011 },
10121012 .continue_stmt => .{
......@@ -1030,7 +1030,7 @@ pub const Node = union(enum) {
10301030 .return_tok = node_tok,
10311031 .return_qt = @bitCast(node_data[0]),
10321032 .operand = .{
1033 .expr = @enumFromInt(node_data[1]),
1033 .expr = @fromBackingInt(@intCast(node_data[1])),
10341034 },
10351035 },
10361036 },
......@@ -1082,7 +1082,7 @@ pub const Node = union(enum) {
10821082 return .{
10831083 .asm_stmt = .{
10841084 .asm_tok = node_tok,
1085 .asm_str = @enumFromInt(node_data[0]),
1085 .asm_str = @fromBackingInt(@intCast(node_data[0])),
10861086 .outputs = @ptrCast(outputs),
10871087 .inputs = @ptrCast(inputs),
10881088 .clobbers = @ptrCast(clobbers),
......@@ -1094,7 +1094,7 @@ pub const Node = union(enum) {
10941094 .asm_stmt_simple => .{
10951095 .asm_stmt = .{
10961096 .asm_tok = node_tok,
1097 .asm_str = @enumFromInt(node_data[0]),
1097 .asm_str = @fromBackingInt(@intCast(node_data[0])),
10981098 .outputs = &.{},
10991099 .inputs = &.{},
11001100 .clobbers = &.{},
......@@ -1106,255 +1106,255 @@ pub const Node = union(enum) {
11061106 .assign_expr = .{
11071107 .op_tok = node_tok,
11081108 .qt = @bitCast(node_data[0]),
1109 .lhs = @enumFromInt(node_data[1]),
1110 .rhs = @enumFromInt(node_data[2]),
1109 .lhs = @fromBackingInt(@intCast(node_data[1])),
1110 .rhs = @fromBackingInt(@intCast(node_data[2])),
11111111 },
11121112 },
11131113 .mul_assign_expr => .{
11141114 .mul_assign_expr = .{
11151115 .op_tok = node_tok,
11161116 .qt = @bitCast(node_data[0]),
1117 .lhs = @enumFromInt(node_data[1]),
1118 .rhs = @enumFromInt(node_data[2]),
1117 .lhs = @fromBackingInt(@intCast(node_data[1])),
1118 .rhs = @fromBackingInt(@intCast(node_data[2])),
11191119 },
11201120 },
11211121 .div_assign_expr => .{
11221122 .div_assign_expr = .{
11231123 .op_tok = node_tok,
11241124 .qt = @bitCast(node_data[0]),
1125 .lhs = @enumFromInt(node_data[1]),
1126 .rhs = @enumFromInt(node_data[2]),
1125 .lhs = @fromBackingInt(@intCast(node_data[1])),
1126 .rhs = @fromBackingInt(@intCast(node_data[2])),
11271127 },
11281128 },
11291129 .mod_assign_expr => .{
11301130 .mod_assign_expr = .{
11311131 .op_tok = node_tok,
11321132 .qt = @bitCast(node_data[0]),
1133 .lhs = @enumFromInt(node_data[1]),
1134 .rhs = @enumFromInt(node_data[2]),
1133 .lhs = @fromBackingInt(@intCast(node_data[1])),
1134 .rhs = @fromBackingInt(@intCast(node_data[2])),
11351135 },
11361136 },
11371137 .add_assign_expr => .{
11381138 .add_assign_expr = .{
11391139 .op_tok = node_tok,
11401140 .qt = @bitCast(node_data[0]),
1141 .lhs = @enumFromInt(node_data[1]),
1142 .rhs = @enumFromInt(node_data[2]),
1141 .lhs = @fromBackingInt(@intCast(node_data[1])),
1142 .rhs = @fromBackingInt(@intCast(node_data[2])),
11431143 },
11441144 },
11451145 .sub_assign_expr => .{
11461146 .sub_assign_expr = .{
11471147 .op_tok = node_tok,
11481148 .qt = @bitCast(node_data[0]),
1149 .lhs = @enumFromInt(node_data[1]),
1150 .rhs = @enumFromInt(node_data[2]),
1149 .lhs = @fromBackingInt(@intCast(node_data[1])),
1150 .rhs = @fromBackingInt(@intCast(node_data[2])),
11511151 },
11521152 },
11531153 .shl_assign_expr => .{
11541154 .shl_assign_expr = .{
11551155 .op_tok = node_tok,
11561156 .qt = @bitCast(node_data[0]),
1157 .lhs = @enumFromInt(node_data[1]),
1158 .rhs = @enumFromInt(node_data[2]),
1157 .lhs = @fromBackingInt(@intCast(node_data[1])),
1158 .rhs = @fromBackingInt(@intCast(node_data[2])),
11591159 },
11601160 },
11611161 .shr_assign_expr => .{
11621162 .shr_assign_expr = .{
11631163 .op_tok = node_tok,
11641164 .qt = @bitCast(node_data[0]),
1165 .lhs = @enumFromInt(node_data[1]),
1166 .rhs = @enumFromInt(node_data[2]),
1165 .lhs = @fromBackingInt(@intCast(node_data[1])),
1166 .rhs = @fromBackingInt(@intCast(node_data[2])),
11671167 },
11681168 },
11691169 .bit_and_assign_expr => .{
11701170 .bit_and_assign_expr = .{
11711171 .op_tok = node_tok,
11721172 .qt = @bitCast(node_data[0]),
1173 .lhs = @enumFromInt(node_data[1]),
1174 .rhs = @enumFromInt(node_data[2]),
1173 .lhs = @fromBackingInt(@intCast(node_data[1])),
1174 .rhs = @fromBackingInt(@intCast(node_data[2])),
11751175 },
11761176 },
11771177 .bit_xor_assign_expr => .{
11781178 .bit_xor_assign_expr = .{
11791179 .op_tok = node_tok,
11801180 .qt = @bitCast(node_data[0]),
1181 .lhs = @enumFromInt(node_data[1]),
1182 .rhs = @enumFromInt(node_data[2]),
1181 .lhs = @fromBackingInt(@intCast(node_data[1])),
1182 .rhs = @fromBackingInt(@intCast(node_data[2])),
11831183 },
11841184 },
11851185 .bit_or_assign_expr => .{
11861186 .bit_or_assign_expr = .{
11871187 .op_tok = node_tok,
11881188 .qt = @bitCast(node_data[0]),
1189 .lhs = @enumFromInt(node_data[1]),
1190 .rhs = @enumFromInt(node_data[2]),
1189 .lhs = @fromBackingInt(@intCast(node_data[1])),
1190 .rhs = @fromBackingInt(@intCast(node_data[2])),
11911191 },
11921192 },
11931193 .compound_assign_dummy_expr => .{
11941194 .compound_assign_dummy_expr = .{
11951195 .op_tok = node_tok,
11961196 .qt = @bitCast(node_data[0]),
1197 .operand = @enumFromInt(node_data[1]),
1197 .operand = @fromBackingInt(@intCast(node_data[1])),
11981198 },
11991199 },
12001200 .comma_expr => .{
12011201 .comma_expr = .{
12021202 .op_tok = node_tok,
12031203 .qt = @bitCast(node_data[0]),
1204 .lhs = @enumFromInt(node_data[1]),
1205 .rhs = @enumFromInt(node_data[2]),
1204 .lhs = @fromBackingInt(@intCast(node_data[1])),
1205 .rhs = @fromBackingInt(@intCast(node_data[2])),
12061206 },
12071207 },
12081208 .bool_or_expr => .{
12091209 .bool_or_expr = .{
12101210 .op_tok = node_tok,
12111211 .qt = @bitCast(node_data[0]),
1212 .lhs = @enumFromInt(node_data[1]),
1213 .rhs = @enumFromInt(node_data[2]),
1212 .lhs = @fromBackingInt(@intCast(node_data[1])),
1213 .rhs = @fromBackingInt(@intCast(node_data[2])),
12141214 },
12151215 },
12161216 .bool_and_expr => .{
12171217 .bool_and_expr = .{
12181218 .op_tok = node_tok,
12191219 .qt = @bitCast(node_data[0]),
1220 .lhs = @enumFromInt(node_data[1]),
1221 .rhs = @enumFromInt(node_data[2]),
1220 .lhs = @fromBackingInt(@intCast(node_data[1])),
1221 .rhs = @fromBackingInt(@intCast(node_data[2])),
12221222 },
12231223 },
12241224 .bit_or_expr => .{
12251225 .bit_or_expr = .{
12261226 .op_tok = node_tok,
12271227 .qt = @bitCast(node_data[0]),
1228 .lhs = @enumFromInt(node_data[1]),
1229 .rhs = @enumFromInt(node_data[2]),
1228 .lhs = @fromBackingInt(@intCast(node_data[1])),
1229 .rhs = @fromBackingInt(@intCast(node_data[2])),
12301230 },
12311231 },
12321232 .bit_xor_expr => .{
12331233 .bit_xor_expr = .{
12341234 .op_tok = node_tok,
12351235 .qt = @bitCast(node_data[0]),
1236 .lhs = @enumFromInt(node_data[1]),
1237 .rhs = @enumFromInt(node_data[2]),
1236 .lhs = @fromBackingInt(@intCast(node_data[1])),
1237 .rhs = @fromBackingInt(@intCast(node_data[2])),
12381238 },
12391239 },
12401240 .bit_and_expr => .{
12411241 .bit_and_expr = .{
12421242 .op_tok = node_tok,
12431243 .qt = @bitCast(node_data[0]),
1244 .lhs = @enumFromInt(node_data[1]),
1245 .rhs = @enumFromInt(node_data[2]),
1244 .lhs = @fromBackingInt(@intCast(node_data[1])),
1245 .rhs = @fromBackingInt(@intCast(node_data[2])),
12461246 },
12471247 },
12481248 .equal_expr => .{
12491249 .equal_expr = .{
12501250 .op_tok = node_tok,
12511251 .qt = @bitCast(node_data[0]),
1252 .lhs = @enumFromInt(node_data[1]),
1253 .rhs = @enumFromInt(node_data[2]),
1252 .lhs = @fromBackingInt(@intCast(node_data[1])),
1253 .rhs = @fromBackingInt(@intCast(node_data[2])),
12541254 },
12551255 },
12561256 .not_equal_expr => .{
12571257 .not_equal_expr = .{
12581258 .op_tok = node_tok,
12591259 .qt = @bitCast(node_data[0]),
1260 .lhs = @enumFromInt(node_data[1]),
1261 .rhs = @enumFromInt(node_data[2]),
1260 .lhs = @fromBackingInt(@intCast(node_data[1])),
1261 .rhs = @fromBackingInt(@intCast(node_data[2])),
12621262 },
12631263 },
12641264 .less_than_expr => .{
12651265 .less_than_expr = .{
12661266 .op_tok = node_tok,
12671267 .qt = @bitCast(node_data[0]),
1268 .lhs = @enumFromInt(node_data[1]),
1269 .rhs = @enumFromInt(node_data[2]),
1268 .lhs = @fromBackingInt(@intCast(node_data[1])),
1269 .rhs = @fromBackingInt(@intCast(node_data[2])),
12701270 },
12711271 },
12721272 .less_than_equal_expr => .{
12731273 .less_than_equal_expr = .{
12741274 .op_tok = node_tok,
12751275 .qt = @bitCast(node_data[0]),
1276 .lhs = @enumFromInt(node_data[1]),
1277 .rhs = @enumFromInt(node_data[2]),
1276 .lhs = @fromBackingInt(@intCast(node_data[1])),
1277 .rhs = @fromBackingInt(@intCast(node_data[2])),
12781278 },
12791279 },
12801280 .greater_than_expr => .{
12811281 .greater_than_expr = .{
12821282 .op_tok = node_tok,
12831283 .qt = @bitCast(node_data[0]),
1284 .lhs = @enumFromInt(node_data[1]),
1285 .rhs = @enumFromInt(node_data[2]),
1284 .lhs = @fromBackingInt(@intCast(node_data[1])),
1285 .rhs = @fromBackingInt(@intCast(node_data[2])),
12861286 },
12871287 },
12881288 .greater_than_equal_expr => .{
12891289 .greater_than_equal_expr = .{
12901290 .op_tok = node_tok,
12911291 .qt = @bitCast(node_data[0]),
1292 .lhs = @enumFromInt(node_data[1]),
1293 .rhs = @enumFromInt(node_data[2]),
1292 .lhs = @fromBackingInt(@intCast(node_data[1])),
1293 .rhs = @fromBackingInt(@intCast(node_data[2])),
12941294 },
12951295 },
12961296 .shl_expr => .{
12971297 .shl_expr = .{
12981298 .op_tok = node_tok,
12991299 .qt = @bitCast(node_data[0]),
1300 .lhs = @enumFromInt(node_data[1]),
1301 .rhs = @enumFromInt(node_data[2]),
1300 .lhs = @fromBackingInt(@intCast(node_data[1])),
1301 .rhs = @fromBackingInt(@intCast(node_data[2])),
13021302 },
13031303 },
13041304 .shr_expr => .{
13051305 .shr_expr = .{
13061306 .op_tok = node_tok,
13071307 .qt = @bitCast(node_data[0]),
1308 .lhs = @enumFromInt(node_data[1]),
1309 .rhs = @enumFromInt(node_data[2]),
1308 .lhs = @fromBackingInt(@intCast(node_data[1])),
1309 .rhs = @fromBackingInt(@intCast(node_data[2])),
13101310 },
13111311 },
13121312 .add_expr => .{
13131313 .add_expr = .{
13141314 .op_tok = node_tok,
13151315 .qt = @bitCast(node_data[0]),
1316 .lhs = @enumFromInt(node_data[1]),
1317 .rhs = @enumFromInt(node_data[2]),
1316 .lhs = @fromBackingInt(@intCast(node_data[1])),
1317 .rhs = @fromBackingInt(@intCast(node_data[2])),
13181318 },
13191319 },
13201320 .sub_expr => .{
13211321 .sub_expr = .{
13221322 .op_tok = node_tok,
13231323 .qt = @bitCast(node_data[0]),
1324 .lhs = @enumFromInt(node_data[1]),
1325 .rhs = @enumFromInt(node_data[2]),
1324 .lhs = @fromBackingInt(@intCast(node_data[1])),
1325 .rhs = @fromBackingInt(@intCast(node_data[2])),
13261326 },
13271327 },
13281328 .mul_expr => .{
13291329 .mul_expr = .{
13301330 .op_tok = node_tok,
13311331 .qt = @bitCast(node_data[0]),
1332 .lhs = @enumFromInt(node_data[1]),
1333 .rhs = @enumFromInt(node_data[2]),
1332 .lhs = @fromBackingInt(@intCast(node_data[1])),
1333 .rhs = @fromBackingInt(@intCast(node_data[2])),
13341334 },
13351335 },
13361336 .div_expr => .{
13371337 .div_expr = .{
13381338 .op_tok = node_tok,
13391339 .qt = @bitCast(node_data[0]),
1340 .lhs = @enumFromInt(node_data[1]),
1341 .rhs = @enumFromInt(node_data[2]),
1340 .lhs = @fromBackingInt(@intCast(node_data[1])),
1341 .rhs = @fromBackingInt(@intCast(node_data[2])),
13421342 },
13431343 },
13441344 .mod_expr => .{
13451345 .mod_expr = .{
13461346 .op_tok = node_tok,
13471347 .qt = @bitCast(node_data[0]),
1348 .lhs = @enumFromInt(node_data[1]),
1349 .rhs = @enumFromInt(node_data[2]),
1348 .lhs = @fromBackingInt(@intCast(node_data[1])),
1349 .rhs = @fromBackingInt(@intCast(node_data[2])),
13501350 },
13511351 },
13521352 .explicit_cast => .{
13531353 .cast = .{
13541354 .l_paren = node_tok,
13551355 .qt = @bitCast(node_data[0]),
1356 .kind = @enumFromInt(node_data[1]),
1357 .operand = @enumFromInt(node_data[2]),
1356 .kind = @fromBackingInt(@intCast(node_data[1])),
1357 .operand = @fromBackingInt(@intCast(node_data[2])),
13581358 .implicit = false,
13591359 },
13601360 },
......@@ -1362,8 +1362,8 @@ pub const Node = union(enum) {
13621362 .cast = .{
13631363 .l_paren = node_tok,
13641364 .qt = @bitCast(node_data[0]),
1365 .kind = @enumFromInt(node_data[1]),
1366 .operand = @enumFromInt(node_data[2]),
1365 .kind = @fromBackingInt(@intCast(node_data[1])),
1366 .operand = @fromBackingInt(@intCast(node_data[2])),
13671367 .implicit = true,
13681368 },
13691369 },
......@@ -1371,105 +1371,105 @@ pub const Node = union(enum) {
13711371 .addr_of_expr = .{
13721372 .op_tok = node_tok,
13731373 .qt = @bitCast(node_data[0]),
1374 .operand = @enumFromInt(node_data[1]),
1374 .operand = @fromBackingInt(@intCast(node_data[1])),
13751375 },
13761376 },
13771377 .deref_expr => .{
13781378 .deref_expr = .{
13791379 .op_tok = node_tok,
13801380 .qt = @bitCast(node_data[0]),
1381 .operand = @enumFromInt(node_data[1]),
1381 .operand = @fromBackingInt(@intCast(node_data[1])),
13821382 },
13831383 },
13841384 .plus_expr => .{
13851385 .plus_expr = .{
13861386 .op_tok = node_tok,
13871387 .qt = @bitCast(node_data[0]),
1388 .operand = @enumFromInt(node_data[1]),
1388 .operand = @fromBackingInt(@intCast(node_data[1])),
13891389 },
13901390 },
13911391 .negate_expr => .{
13921392 .negate_expr = .{
13931393 .op_tok = node_tok,
13941394 .qt = @bitCast(node_data[0]),
1395 .operand = @enumFromInt(node_data[1]),
1395 .operand = @fromBackingInt(@intCast(node_data[1])),
13961396 },
13971397 },
13981398 .bit_not_expr => .{
13991399 .bit_not_expr = .{
14001400 .op_tok = node_tok,
14011401 .qt = @bitCast(node_data[0]),
1402 .operand = @enumFromInt(node_data[1]),
1402 .operand = @fromBackingInt(@intCast(node_data[1])),
14031403 },
14041404 },
14051405 .bool_not_expr => .{
14061406 .bool_not_expr = .{
14071407 .op_tok = node_tok,
14081408 .qt = @bitCast(node_data[0]),
1409 .operand = @enumFromInt(node_data[1]),
1409 .operand = @fromBackingInt(@intCast(node_data[1])),
14101410 },
14111411 },
14121412 .pre_inc_expr => .{
14131413 .pre_inc_expr = .{
14141414 .op_tok = node_tok,
14151415 .qt = @bitCast(node_data[0]),
1416 .operand = @enumFromInt(node_data[1]),
1416 .operand = @fromBackingInt(@intCast(node_data[1])),
14171417 },
14181418 },
14191419 .pre_dec_expr => .{
14201420 .pre_dec_expr = .{
14211421 .op_tok = node_tok,
14221422 .qt = @bitCast(node_data[0]),
1423 .operand = @enumFromInt(node_data[1]),
1423 .operand = @fromBackingInt(@intCast(node_data[1])),
14241424 },
14251425 },
14261426 .imag_expr => .{
14271427 .imag_expr = .{
14281428 .op_tok = node_tok,
14291429 .qt = @bitCast(node_data[0]),
1430 .operand = @enumFromInt(node_data[1]),
1430 .operand = @fromBackingInt(@intCast(node_data[1])),
14311431 },
14321432 },
14331433 .real_expr => .{
14341434 .real_expr = .{
14351435 .op_tok = node_tok,
14361436 .qt = @bitCast(node_data[0]),
1437 .operand = @enumFromInt(node_data[1]),
1437 .operand = @fromBackingInt(@intCast(node_data[1])),
14381438 },
14391439 },
14401440 .post_inc_expr => .{
14411441 .post_inc_expr = .{
14421442 .op_tok = node_tok,
14431443 .qt = @bitCast(node_data[0]),
1444 .operand = @enumFromInt(node_data[1]),
1444 .operand = @fromBackingInt(@intCast(node_data[1])),
14451445 },
14461446 },
14471447 .post_dec_expr => .{
14481448 .post_dec_expr = .{
14491449 .op_tok = node_tok,
14501450 .qt = @bitCast(node_data[0]),
1451 .operand = @enumFromInt(node_data[1]),
1451 .operand = @fromBackingInt(@intCast(node_data[1])),
14521452 },
14531453 },
14541454 .paren_expr => .{
14551455 .paren_expr = .{
14561456 .op_tok = node_tok,
14571457 .qt = @bitCast(node_data[0]),
1458 .operand = @enumFromInt(node_data[1]),
1458 .operand = @fromBackingInt(@intCast(node_data[1])),
14591459 },
14601460 },
14611461 .stmt_expr => .{
14621462 .stmt_expr = .{
14631463 .op_tok = node_tok,
14641464 .qt = @bitCast(node_data[0]),
1465 .operand = @enumFromInt(node_data[1]),
1465 .operand = @fromBackingInt(@intCast(node_data[1])),
14661466 },
14671467 },
14681468 .cond_dummy_expr => .{
14691469 .cond_dummy_expr = .{
14701470 .op_tok = node_tok,
14711471 .qt = @bitCast(node_data[0]),
1472 .operand = @enumFromInt(node_data[1]),
1472 .operand = @fromBackingInt(@intCast(node_data[1])),
14731473 },
14741474 },
14751475 .addr_of_label => .{
......@@ -1482,15 +1482,15 @@ pub const Node = union(enum) {
14821482 .array_access_expr = .{
14831483 .l_bracket_tok = node_tok,
14841484 .qt = @bitCast(node_data[0]),
1485 .base = @enumFromInt(node_data[1]),
1486 .index = @enumFromInt(node_data[2]),
1485 .base = @fromBackingInt(@intCast(node_data[1])),
1486 .index = @fromBackingInt(@intCast(node_data[2])),
14871487 },
14881488 },
14891489 .call_expr => .{
14901490 .call_expr = .{
14911491 .l_paren_tok = node_tok,
14921492 .qt = @bitCast(node_data[0]),
1493 .callee = @enumFromInt(tree.extra.items[node_data[1]]),
1493 .callee = @fromBackingInt(@intCast(tree.extra.items[node_data[1]])),
14941494 .args = @ptrCast(tree.extra.items[node_data[1] + 1 ..][0 .. node_data[2] - 1]),
14951495 },
14961496 },
......@@ -1498,7 +1498,7 @@ pub const Node = union(enum) {
14981498 .call_expr = .{
14991499 .l_paren_tok = node_tok,
15001500 .qt = @bitCast(node_data[0]),
1501 .callee = @enumFromInt(node_data[1]),
1501 .callee = @fromBackingInt(@intCast(node_data[1])),
15021502 .args = unPackElems(node_data[2..]),
15031503 },
15041504 },
......@@ -1520,7 +1520,7 @@ pub const Node = union(enum) {
15201520 .member_access_expr = .{
15211521 .access_tok = node_tok,
15221522 .qt = @bitCast(node_data[0]),
1523 .base = @enumFromInt(node_data[1]),
1523 .base = @fromBackingInt(@intCast(node_data[1])),
15241524 .member_index = node_data[2],
15251525 },
15261526 },
......@@ -1528,7 +1528,7 @@ pub const Node = union(enum) {
15281528 .member_access_ptr_expr = .{
15291529 .access_tok = node_tok,
15301530 .qt = @bitCast(node_data[0]),
1531 .base = @enumFromInt(node_data[1]),
1531 .base = @fromBackingInt(@intCast(node_data[1])),
15321532 .member_index = node_data[2],
15331533 },
15341534 },
......@@ -1536,14 +1536,14 @@ pub const Node = union(enum) {
15361536 .decl_ref_expr = .{
15371537 .name_tok = node_tok,
15381538 .qt = @bitCast(node_data[0]),
1539 .decl = @enumFromInt(node_data[1]),
1539 .decl = @fromBackingInt(@intCast(node_data[1])),
15401540 },
15411541 },
15421542 .enumeration_ref => .{
15431543 .enumeration_ref = .{
15441544 .name_tok = node_tok,
15451545 .qt = @bitCast(node_data[0]),
1546 .decl = @enumFromInt(node_data[1]),
1546 .decl = @fromBackingInt(@intCast(node_data[1])),
15471547 },
15481548 },
15491549 .builtin_ref => .{
......@@ -1574,7 +1574,7 @@ pub const Node = union(enum) {
15741574 .char_literal = .{
15751575 .literal_tok = node_tok,
15761576 .qt = @bitCast(node_data[0]),
1577 .kind = @enumFromInt(node_data[1]),
1577 .kind = @fromBackingInt(@intCast(node_data[1])),
15781578 },
15791579 },
15801580 .float_literal => .{
......@@ -1587,14 +1587,14 @@ pub const Node = union(enum) {
15871587 .string_literal_expr = .{
15881588 .literal_tok = node_tok,
15891589 .qt = @bitCast(node_data[0]),
1590 .kind = @enumFromInt(node_data[1]),
1590 .kind = @fromBackingInt(@intCast(node_data[1])),
15911591 },
15921592 },
15931593 .imaginary_literal => .{
15941594 .imaginary_literal = .{
15951595 .op_tok = node_tok,
15961596 .qt = @bitCast(node_data[0]),
1597 .operand = @enumFromInt(node_data[1]),
1597 .operand = @fromBackingInt(@intCast(node_data[1])),
15981598 },
15991599 },
16001600 .sizeof_expr => .{
......@@ -1618,8 +1618,8 @@ pub const Node = union(enum) {
16181618 .generic_expr = .{
16191619 .generic_tok = node_tok,
16201620 .qt = @bitCast(node_data[0]),
1621 .controlling = @enumFromInt(node_data[1]),
1622 .chosen = @enumFromInt(node_data[2]),
1621 .controlling = @fromBackingInt(@intCast(node_data[1])),
1622 .chosen = @fromBackingInt(@intCast(node_data[2])),
16231623 .rest = &.{},
16241624 },
16251625 },
......@@ -1627,8 +1627,8 @@ pub const Node = union(enum) {
16271627 .generic_expr = .{
16281628 .generic_tok = node_tok,
16291629 .qt = @bitCast(node_data[0]),
1630 .controlling = @enumFromInt(tree.extra.items[node_data[1]]),
1631 .chosen = @enumFromInt(tree.extra.items[node_data[1] + 1]),
1630 .controlling = @fromBackingInt(@intCast(tree.extra.items[node_data[1]])),
1631 .chosen = @fromBackingInt(@intCast(tree.extra.items[node_data[1] + 1])),
16321632 .rest = @ptrCast(tree.extra.items[node_data[1] + 2 ..][0 .. node_data[2] - 2]),
16331633 },
16341634 },
......@@ -1636,40 +1636,40 @@ pub const Node = union(enum) {
16361636 .generic_association_expr = .{
16371637 .colon_tok = node_tok,
16381638 .association_qt = @bitCast(node_data[0]),
1639 .expr = @enumFromInt(node_data[1]),
1639 .expr = @fromBackingInt(@intCast(node_data[1])),
16401640 },
16411641 },
16421642 .generic_default_expr => .{
16431643 .generic_default_expr = .{
16441644 .default_tok = node_tok,
1645 .expr = @enumFromInt(node_data[0]),
1645 .expr = @fromBackingInt(@intCast(node_data[0])),
16461646 },
16471647 },
16481648 .binary_cond_expr => .{
16491649 .binary_cond_expr = .{
16501650 .cond_tok = node_tok,
16511651 .qt = @bitCast(node_data[0]),
1652 .cond = @enumFromInt(node_data[1]),
1653 .then_expr = @enumFromInt(tree.extra.items[node_data[2]]),
1654 .else_expr = @enumFromInt(tree.extra.items[node_data[2] + 1]),
1652 .cond = @fromBackingInt(@intCast(node_data[1])),
1653 .then_expr = @fromBackingInt(@intCast(tree.extra.items[node_data[2]])),
1654 .else_expr = @fromBackingInt(@intCast(tree.extra.items[node_data[2] + 1])),
16551655 },
16561656 },
16571657 .cond_expr => .{
16581658 .cond_expr = .{
16591659 .cond_tok = node_tok,
16601660 .qt = @bitCast(node_data[0]),
1661 .cond = @enumFromInt(node_data[1]),
1662 .then_expr = @enumFromInt(tree.extra.items[node_data[2]]),
1663 .else_expr = @enumFromInt(tree.extra.items[node_data[2] + 1]),
1661 .cond = @fromBackingInt(@intCast(node_data[1])),
1662 .then_expr = @fromBackingInt(@intCast(tree.extra.items[node_data[2]])),
1663 .else_expr = @fromBackingInt(@intCast(tree.extra.items[node_data[2] + 1])),
16641664 },
16651665 },
16661666 .builtin_choose_expr => .{
16671667 .builtin_choose_expr = .{
16681668 .cond_tok = node_tok,
16691669 .qt = @bitCast(node_data[0]),
1670 .cond = @enumFromInt(node_data[1]),
1671 .then_expr = @enumFromInt(tree.extra.items[node_data[2]]),
1672 .else_expr = @enumFromInt(tree.extra.items[node_data[2] + 1]),
1670 .cond = @fromBackingInt(@intCast(node_data[1])),
1671 .then_expr = @fromBackingInt(@intCast(tree.extra.items[node_data[2]])),
1672 .else_expr = @fromBackingInt(@intCast(tree.extra.items[node_data[2] + 1])),
16731673 },
16741674 },
16751675 .builtin_types_compatible_p => .{
......@@ -1683,15 +1683,15 @@ pub const Node = union(enum) {
16831683 .builtin_convertvector = .{
16841684 .builtin_tok = node_tok,
16851685 .dest_qt = @bitCast(node_data[0]),
1686 .operand = @enumFromInt(node_data[1]),
1686 .operand = @fromBackingInt(@intCast(node_data[1])),
16871687 },
16881688 },
16891689 .builtin_shufflevector => .{
16901690 .builtin_shufflevector = .{
16911691 .builtin_tok = node_tok,
16921692 .qt = @bitCast(node_data[0]),
1693 .lhs = @enumFromInt(tree.extra.items[node_data[1]]),
1694 .rhs = @enumFromInt(tree.extra.items[node_data[1] + 1]),
1693 .lhs = @fromBackingInt(@intCast(tree.extra.items[node_data[1]])),
1694 .rhs = @fromBackingInt(@intCast(tree.extra.items[node_data[1] + 1])),
16951695 .indexes = @ptrCast(tree.extra.items[node_data[1] + 2 ..][0..node_data[2]]),
16961696 },
16971697 },
......@@ -1767,7 +1767,7 @@ pub const Node = union(enum) {
17671767 else
17681768 .auto,
17691769 .thread_local = attr.thread_local,
1770 .initializer = @enumFromInt(node_data[2]),
1770 .initializer = @fromBackingInt(@intCast(node_data[2])),
17711771 },
17721772 };
17731773 },
......@@ -1775,7 +1775,7 @@ pub const Node = union(enum) {
17751775 }
17761776
17771777 pub fn tok(index: Index, tree: *const Tree) TokenIndex {
1778 return tree.nodes.items(.tok)[@intFromEnum(index)];
1778 return tree.nodes.items(.tok)[@backingInt(index)];
17791779 }
17801780
17811781 pub fn loc(index: Index, tree: *const Tree) Source.Location {
......@@ -1788,7 +1788,7 @@ pub const Node = union(enum) {
17881788 }
17891789
17901790 pub fn qtOrNull(index: Index, tree: *const Tree) ?QualType {
1791 return switch (tree.nodes.items(.tag)[@intFromEnum(index)]) {
1791 return switch (tree.nodes.items(.tag)[@backingInt(index)]) {
17921792 .empty_decl,
17931793 .static_assert,
17941794 .compound_stmt,
......@@ -1819,7 +1819,7 @@ pub const Node = union(enum) {
18191819 .builtin_types_compatible_p => .int,
18201820 else => {
18211821 // If a node is typed the type is stored in data[0].
1822 return @bitCast(tree.nodes.items(.data)[@intFromEnum(index)][0]);
1822 return @bitCast(tree.nodes.items(.data)[@backingInt(index)][0]);
18231823 },
18241824 };
18251825 }
......@@ -1830,15 +1830,15 @@ pub const Node = union(enum) {
18301830 _,
18311831
18321832 pub fn unpack(opt: OptIndex) ?Index {
1833 return if (opt == .null) null else @enumFromInt(@intFromEnum(opt));
1833 return if (opt == .null) null else @fromBackingInt(@intCast(@backingInt(opt)));
18341834 }
18351835
18361836 pub fn pack(index: Index) OptIndex {
1837 return @enumFromInt(@intFromEnum(index));
1837 return @fromBackingInt(@intCast(@backingInt(index)));
18381838 }
18391839
18401840 pub fn packOpt(optional: ?Index) OptIndex {
1841 return if (optional) |some| @enumFromInt(@intFromEnum(some)) else .null;
1841 return if (optional) |some| @fromBackingInt(@intCast(@backingInt(some))) else .null;
18421842 }
18431843 };
18441844
......@@ -2013,7 +2013,7 @@ pub const Node = union(enum) {
20132013pub fn addNode(tree: *Tree, node: Node) !Node.Index {
20142014 const index = try tree.nodes.addOne(tree.comp.gpa);
20152015 try tree.setNode(node, index);
2016 return @enumFromInt(index);
2016 return @fromBackingInt(@intCast(index));
20172017}
20182018
20192019pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
......@@ -2025,7 +2025,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
20252025 },
20262026 .static_assert => |assert| {
20272027 repr.tag = .static_assert;
2028 repr.data[0] = @intFromEnum(assert.cond);
2028 repr.data[0] = @backingInt(assert.cond);
20292029 repr.data[1] = packOptIndex(assert.message);
20302030 repr.tok = assert.assert_tok;
20312031 },
......@@ -2037,7 +2037,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
20372037 .@"inline" = function.@"inline",
20382038 });
20392039 if (function.body) |some| {
2040 repr.data[2] = @intFromEnum(some);
2040 repr.data[2] = @backingInt(some);
20412041 } else {
20422042 repr.data[2] = packOptIndex(function.definition);
20432043 }
......@@ -2062,7 +2062,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
20622062 .register = variable.storage_class == .register,
20632063 });
20642064 if (variable.initializer) |some| {
2065 repr.data[2] = @intFromEnum(some);
2065 repr.data[2] = @backingInt(some);
20662066 } else {
20672067 repr.data[2] = packOptIndex(variable.definition);
20682068 }
......@@ -2076,7 +2076,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
20762076 },
20772077 .global_asm => |global_asm| {
20782078 repr.tag = .global_asm;
2079 repr.data[0] = @intFromEnum(global_asm.asm_str);
2079 repr.data[0] = @backingInt(global_asm.asm_str);
20802080 repr.tok = global_asm.asm_tok;
20812081 },
20822082 .struct_decl => |decl| {
......@@ -2151,7 +2151,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
21512151 .labeled_stmt => |labeled| {
21522152 repr.tag = .labeled_stmt;
21532153 repr.data[0] = @bitCast(labeled.qt);
2154 repr.data[1] = @intFromEnum(labeled.body);
2154 repr.data[1] = @backingInt(labeled.body);
21552155 repr.tok = labeled.label_tok;
21562156 },
21572157 .compound_stmt => |compound| {
......@@ -2167,39 +2167,39 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
21672167 },
21682168 .if_stmt => |@"if"| {
21692169 repr.tag = .if_stmt;
2170 repr.data[0] = @intFromEnum(@"if".cond);
2171 repr.data[1] = @intFromEnum(@"if".then_body);
2170 repr.data[0] = @backingInt(@"if".cond);
2171 repr.data[1] = @backingInt(@"if".then_body);
21722172 repr.data[2] = packOptIndex(@"if".else_body);
21732173 repr.tok = @"if".if_tok;
21742174 },
21752175 .switch_stmt => |@"switch"| {
21762176 repr.tag = .switch_stmt;
2177 repr.data[0] = @intFromEnum(@"switch".cond);
2178 repr.data[1] = @intFromEnum(@"switch".body);
2177 repr.data[0] = @backingInt(@"switch".cond);
2178 repr.data[1] = @backingInt(@"switch".body);
21792179 repr.tok = @"switch".switch_tok;
21802180 },
21812181 .case_stmt => |case| {
21822182 repr.tag = .case_stmt;
2183 repr.data[0] = @intFromEnum(case.start);
2183 repr.data[0] = @backingInt(case.start);
21842184 repr.data[1] = packOptIndex(case.end);
21852185 repr.data[2] = packOptIndex(case.body);
21862186 repr.tok = case.case_tok;
21872187 },
21882188 .default_stmt => |default| {
21892189 repr.tag = .default_stmt;
2190 repr.data[0] = @intFromEnum(default.body);
2190 repr.data[0] = @backingInt(default.body);
21912191 repr.tok = default.default_tok;
21922192 },
21932193 .while_stmt => |@"while"| {
21942194 repr.tag = .while_stmt;
2195 repr.data[0] = @intFromEnum(@"while".cond);
2196 repr.data[1] = @intFromEnum(@"while".body);
2195 repr.data[0] = @backingInt(@"while".cond);
2196 repr.data[1] = @backingInt(@"while".body);
21972197 repr.tok = @"while".while_tok;
21982198 },
21992199 .do_while_stmt => |do_while| {
22002200 repr.tag = .do_while_stmt;
2201 repr.data[0] = @intFromEnum(do_while.cond);
2202 repr.data[1] = @intFromEnum(do_while.body);
2201 repr.data[0] = @backingInt(do_while.cond);
2202 repr.data[1] = @backingInt(do_while.body);
22032203 repr.tok = do_while.do_tok;
22042204 },
22052205 .for_stmt => |@"for"| {
......@@ -2223,7 +2223,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
22232223 tree.extra.appendAssumeCapacity(packOptIndex(@"for".incr));
22242224 },
22252225 }
2226 repr.data[2] = @intFromEnum(@"for".body);
2226 repr.data[2] = @backingInt(@"for".body);
22272227 repr.tok = @"for".for_tok;
22282228 },
22292229 .goto_stmt => |goto| {
......@@ -2232,7 +2232,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
22322232 },
22332233 .computed_goto_stmt => |computed_goto| {
22342234 repr.tag = .computed_goto_stmt;
2235 repr.data[0] = @intFromEnum(computed_goto.expr);
2235 repr.data[0] = @backingInt(computed_goto.expr);
22362236 repr.tok = computed_goto.goto_tok;
22372237 },
22382238 .continue_stmt => |@"continue"| {
......@@ -2253,7 +2253,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
22532253 switch (@"return".operand) {
22542254 .expr => |expr| {
22552255 repr.tag = .return_stmt;
2256 repr.data[1] = @intFromEnum(expr);
2256 repr.data[1] = @backingInt(expr);
22572257 },
22582258 .none => {
22592259 repr.tag = .return_none_stmt;
......@@ -2267,7 +2267,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
22672267 },
22682268 .asm_stmt => |asm_stmt| {
22692269 repr.tok = asm_stmt.asm_tok;
2270 repr.data[0] = @intFromEnum(asm_stmt.asm_str);
2270 repr.data[0] = @backingInt(asm_stmt.asm_str);
22712271 if (asm_stmt.outputs.len == 0 and asm_stmt.inputs.len == 0 and asm_stmt.clobbers.len == 0 and asm_stmt.labels.len == 0) {
22722272 repr.tag = .asm_stmt_simple;
22732273 repr.data[1] = @bitCast(asm_stmt.quals);
......@@ -2302,314 +2302,314 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
23022302 .assign_expr => |bin| {
23032303 repr.tag = .assign_expr;
23042304 repr.data[0] = @bitCast(bin.qt);
2305 repr.data[1] = @intFromEnum(bin.lhs);
2306 repr.data[2] = @intFromEnum(bin.rhs);
2305 repr.data[1] = @backingInt(bin.lhs);
2306 repr.data[2] = @backingInt(bin.rhs);
23072307 repr.tok = bin.op_tok;
23082308 },
23092309 .mul_assign_expr => |bin| {
23102310 repr.tag = .mul_assign_expr;
23112311 repr.data[0] = @bitCast(bin.qt);
2312 repr.data[1] = @intFromEnum(bin.lhs);
2313 repr.data[2] = @intFromEnum(bin.rhs);
2312 repr.data[1] = @backingInt(bin.lhs);
2313 repr.data[2] = @backingInt(bin.rhs);
23142314 repr.tok = bin.op_tok;
23152315 },
23162316 .div_assign_expr => |bin| {
23172317 repr.tag = .div_assign_expr;
23182318 repr.data[0] = @bitCast(bin.qt);
2319 repr.data[1] = @intFromEnum(bin.lhs);
2320 repr.data[2] = @intFromEnum(bin.rhs);
2319 repr.data[1] = @backingInt(bin.lhs);
2320 repr.data[2] = @backingInt(bin.rhs);
23212321 repr.tok = bin.op_tok;
23222322 },
23232323 .mod_assign_expr => |bin| {
23242324 repr.tag = .mod_assign_expr;
23252325 repr.data[0] = @bitCast(bin.qt);
2326 repr.data[1] = @intFromEnum(bin.lhs);
2327 repr.data[2] = @intFromEnum(bin.rhs);
2326 repr.data[1] = @backingInt(bin.lhs);
2327 repr.data[2] = @backingInt(bin.rhs);
23282328 repr.tok = bin.op_tok;
23292329 },
23302330 .add_assign_expr => |bin| {
23312331 repr.tag = .add_assign_expr;
23322332 repr.data[0] = @bitCast(bin.qt);
2333 repr.data[1] = @intFromEnum(bin.lhs);
2334 repr.data[2] = @intFromEnum(bin.rhs);
2333 repr.data[1] = @backingInt(bin.lhs);
2334 repr.data[2] = @backingInt(bin.rhs);
23352335 repr.tok = bin.op_tok;
23362336 },
23372337 .sub_assign_expr => |bin| {
23382338 repr.tag = .sub_assign_expr;
23392339 repr.data[0] = @bitCast(bin.qt);
2340 repr.data[1] = @intFromEnum(bin.lhs);
2341 repr.data[2] = @intFromEnum(bin.rhs);
2340 repr.data[1] = @backingInt(bin.lhs);
2341 repr.data[2] = @backingInt(bin.rhs);
23422342 repr.tok = bin.op_tok;
23432343 },
23442344 .shl_assign_expr => |bin| {
23452345 repr.tag = .shl_assign_expr;
23462346 repr.data[0] = @bitCast(bin.qt);
2347 repr.data[1] = @intFromEnum(bin.lhs);
2348 repr.data[2] = @intFromEnum(bin.rhs);
2347 repr.data[1] = @backingInt(bin.lhs);
2348 repr.data[2] = @backingInt(bin.rhs);
23492349 repr.tok = bin.op_tok;
23502350 },
23512351 .shr_assign_expr => |bin| {
23522352 repr.tag = .shr_assign_expr;
23532353 repr.data[0] = @bitCast(bin.qt);
2354 repr.data[1] = @intFromEnum(bin.lhs);
2355 repr.data[2] = @intFromEnum(bin.rhs);
2354 repr.data[1] = @backingInt(bin.lhs);
2355 repr.data[2] = @backingInt(bin.rhs);
23562356 repr.tok = bin.op_tok;
23572357 },
23582358 .bit_and_assign_expr => |bin| {
23592359 repr.tag = .bit_and_assign_expr;
23602360 repr.data[0] = @bitCast(bin.qt);
2361 repr.data[1] = @intFromEnum(bin.lhs);
2362 repr.data[2] = @intFromEnum(bin.rhs);
2361 repr.data[1] = @backingInt(bin.lhs);
2362 repr.data[2] = @backingInt(bin.rhs);
23632363 repr.tok = bin.op_tok;
23642364 },
23652365 .bit_xor_assign_expr => |bin| {
23662366 repr.tag = .bit_xor_assign_expr;
23672367 repr.data[0] = @bitCast(bin.qt);
2368 repr.data[1] = @intFromEnum(bin.lhs);
2369 repr.data[2] = @intFromEnum(bin.rhs);
2368 repr.data[1] = @backingInt(bin.lhs);
2369 repr.data[2] = @backingInt(bin.rhs);
23702370 repr.tok = bin.op_tok;
23712371 },
23722372 .bit_or_assign_expr => |bin| {
23732373 repr.tag = .bit_or_assign_expr;
23742374 repr.data[0] = @bitCast(bin.qt);
2375 repr.data[1] = @intFromEnum(bin.lhs);
2376 repr.data[2] = @intFromEnum(bin.rhs);
2375 repr.data[1] = @backingInt(bin.lhs);
2376 repr.data[2] = @backingInt(bin.rhs);
23772377 repr.tok = bin.op_tok;
23782378 },
23792379 .compound_assign_dummy_expr => |un| {
23802380 repr.tag = .compound_assign_dummy_expr;
23812381 repr.data[0] = @bitCast(un.qt);
2382 repr.data[1] = @intFromEnum(un.operand);
2382 repr.data[1] = @backingInt(un.operand);
23832383 repr.tok = un.op_tok;
23842384 },
23852385 .comma_expr => |bin| {
23862386 repr.tag = .comma_expr;
23872387 repr.data[0] = @bitCast(bin.qt);
2388 repr.data[1] = @intFromEnum(bin.lhs);
2389 repr.data[2] = @intFromEnum(bin.rhs);
2388 repr.data[1] = @backingInt(bin.lhs);
2389 repr.data[2] = @backingInt(bin.rhs);
23902390 repr.tok = bin.op_tok;
23912391 },
23922392 .bool_or_expr => |bin| {
23932393 repr.tag = .bool_or_expr;
23942394 repr.data[0] = @bitCast(bin.qt);
2395 repr.data[1] = @intFromEnum(bin.lhs);
2396 repr.data[2] = @intFromEnum(bin.rhs);
2395 repr.data[1] = @backingInt(bin.lhs);
2396 repr.data[2] = @backingInt(bin.rhs);
23972397 repr.tok = bin.op_tok;
23982398 },
23992399 .bool_and_expr => |bin| {
24002400 repr.tag = .bool_and_expr;
24012401 repr.data[0] = @bitCast(bin.qt);
2402 repr.data[1] = @intFromEnum(bin.lhs);
2403 repr.data[2] = @intFromEnum(bin.rhs);
2402 repr.data[1] = @backingInt(bin.lhs);
2403 repr.data[2] = @backingInt(bin.rhs);
24042404 repr.tok = bin.op_tok;
24052405 },
24062406 .bit_or_expr => |bin| {
24072407 repr.tag = .bit_or_expr;
24082408 repr.data[0] = @bitCast(bin.qt);
2409 repr.data[1] = @intFromEnum(bin.lhs);
2410 repr.data[2] = @intFromEnum(bin.rhs);
2409 repr.data[1] = @backingInt(bin.lhs);
2410 repr.data[2] = @backingInt(bin.rhs);
24112411 repr.tok = bin.op_tok;
24122412 },
24132413 .bit_xor_expr => |bin| {
24142414 repr.tag = .bit_xor_expr;
24152415 repr.data[0] = @bitCast(bin.qt);
2416 repr.data[1] = @intFromEnum(bin.lhs);
2417 repr.data[2] = @intFromEnum(bin.rhs);
2416 repr.data[1] = @backingInt(bin.lhs);
2417 repr.data[2] = @backingInt(bin.rhs);
24182418 repr.tok = bin.op_tok;
24192419 },
24202420 .bit_and_expr => |bin| {
24212421 repr.tag = .bit_and_expr;
24222422 repr.data[0] = @bitCast(bin.qt);
2423 repr.data[1] = @intFromEnum(bin.lhs);
2424 repr.data[2] = @intFromEnum(bin.rhs);
2423 repr.data[1] = @backingInt(bin.lhs);
2424 repr.data[2] = @backingInt(bin.rhs);
24252425 repr.tok = bin.op_tok;
24262426 },
24272427 .equal_expr => |bin| {
24282428 repr.tag = .equal_expr;
24292429 repr.data[0] = @bitCast(bin.qt);
2430 repr.data[1] = @intFromEnum(bin.lhs);
2431 repr.data[2] = @intFromEnum(bin.rhs);
2430 repr.data[1] = @backingInt(bin.lhs);
2431 repr.data[2] = @backingInt(bin.rhs);
24322432 repr.tok = bin.op_tok;
24332433 },
24342434 .not_equal_expr => |bin| {
24352435 repr.tag = .not_equal_expr;
24362436 repr.data[0] = @bitCast(bin.qt);
2437 repr.data[1] = @intFromEnum(bin.lhs);
2438 repr.data[2] = @intFromEnum(bin.rhs);
2437 repr.data[1] = @backingInt(bin.lhs);
2438 repr.data[2] = @backingInt(bin.rhs);
24392439 repr.tok = bin.op_tok;
24402440 },
24412441 .less_than_expr => |bin| {
24422442 repr.tag = .less_than_expr;
24432443 repr.data[0] = @bitCast(bin.qt);
2444 repr.data[1] = @intFromEnum(bin.lhs);
2445 repr.data[2] = @intFromEnum(bin.rhs);
2444 repr.data[1] = @backingInt(bin.lhs);
2445 repr.data[2] = @backingInt(bin.rhs);
24462446 repr.tok = bin.op_tok;
24472447 },
24482448 .less_than_equal_expr => |bin| {
24492449 repr.tag = .less_than_equal_expr;
24502450 repr.data[0] = @bitCast(bin.qt);
2451 repr.data[1] = @intFromEnum(bin.lhs);
2452 repr.data[2] = @intFromEnum(bin.rhs);
2451 repr.data[1] = @backingInt(bin.lhs);
2452 repr.data[2] = @backingInt(bin.rhs);
24532453 repr.tok = bin.op_tok;
24542454 },
24552455 .greater_than_expr => |bin| {
24562456 repr.tag = .greater_than_expr;
24572457 repr.data[0] = @bitCast(bin.qt);
2458 repr.data[1] = @intFromEnum(bin.lhs);
2459 repr.data[2] = @intFromEnum(bin.rhs);
2458 repr.data[1] = @backingInt(bin.lhs);
2459 repr.data[2] = @backingInt(bin.rhs);
24602460 repr.tok = bin.op_tok;
24612461 },
24622462 .greater_than_equal_expr => |bin| {
24632463 repr.tag = .greater_than_equal_expr;
24642464 repr.data[0] = @bitCast(bin.qt);
2465 repr.data[1] = @intFromEnum(bin.lhs);
2466 repr.data[2] = @intFromEnum(bin.rhs);
2465 repr.data[1] = @backingInt(bin.lhs);
2466 repr.data[2] = @backingInt(bin.rhs);
24672467 repr.tok = bin.op_tok;
24682468 },
24692469 .shl_expr => |bin| {
24702470 repr.tag = .shl_expr;
24712471 repr.data[0] = @bitCast(bin.qt);
2472 repr.data[1] = @intFromEnum(bin.lhs);
2473 repr.data[2] = @intFromEnum(bin.rhs);
2472 repr.data[1] = @backingInt(bin.lhs);
2473 repr.data[2] = @backingInt(bin.rhs);
24742474 repr.tok = bin.op_tok;
24752475 },
24762476 .shr_expr => |bin| {
24772477 repr.tag = .shr_expr;
24782478 repr.data[0] = @bitCast(bin.qt);
2479 repr.data[1] = @intFromEnum(bin.lhs);
2480 repr.data[2] = @intFromEnum(bin.rhs);
2479 repr.data[1] = @backingInt(bin.lhs);
2480 repr.data[2] = @backingInt(bin.rhs);
24812481 repr.tok = bin.op_tok;
24822482 },
24832483 .add_expr => |bin| {
24842484 repr.tag = .add_expr;
24852485 repr.data[0] = @bitCast(bin.qt);
2486 repr.data[1] = @intFromEnum(bin.lhs);
2487 repr.data[2] = @intFromEnum(bin.rhs);
2486 repr.data[1] = @backingInt(bin.lhs);
2487 repr.data[2] = @backingInt(bin.rhs);
24882488 repr.tok = bin.op_tok;
24892489 },
24902490 .sub_expr => |bin| {
24912491 repr.tag = .sub_expr;
24922492 repr.data[0] = @bitCast(bin.qt);
2493 repr.data[1] = @intFromEnum(bin.lhs);
2494 repr.data[2] = @intFromEnum(bin.rhs);
2493 repr.data[1] = @backingInt(bin.lhs);
2494 repr.data[2] = @backingInt(bin.rhs);
24952495 repr.tok = bin.op_tok;
24962496 },
24972497 .mul_expr => |bin| {
24982498 repr.tag = .mul_expr;
24992499 repr.data[0] = @bitCast(bin.qt);
2500 repr.data[1] = @intFromEnum(bin.lhs);
2501 repr.data[2] = @intFromEnum(bin.rhs);
2500 repr.data[1] = @backingInt(bin.lhs);
2501 repr.data[2] = @backingInt(bin.rhs);
25022502 repr.tok = bin.op_tok;
25032503 },
25042504 .div_expr => |bin| {
25052505 repr.tag = .div_expr;
25062506 repr.data[0] = @bitCast(bin.qt);
2507 repr.data[1] = @intFromEnum(bin.lhs);
2508 repr.data[2] = @intFromEnum(bin.rhs);
2507 repr.data[1] = @backingInt(bin.lhs);
2508 repr.data[2] = @backingInt(bin.rhs);
25092509 repr.tok = bin.op_tok;
25102510 },
25112511 .mod_expr => |bin| {
25122512 repr.tag = .mod_expr;
25132513 repr.data[0] = @bitCast(bin.qt);
2514 repr.data[1] = @intFromEnum(bin.lhs);
2515 repr.data[2] = @intFromEnum(bin.rhs);
2514 repr.data[1] = @backingInt(bin.lhs);
2515 repr.data[2] = @backingInt(bin.rhs);
25162516 repr.tok = bin.op_tok;
25172517 },
25182518 .cast => |cast| {
25192519 repr.tag = if (cast.implicit) .implicit_cast else .explicit_cast;
25202520 repr.data[0] = @bitCast(cast.qt);
2521 repr.data[1] = @intFromEnum(cast.kind);
2522 repr.data[2] = @intFromEnum(cast.operand);
2521 repr.data[1] = @backingInt(cast.kind);
2522 repr.data[2] = @backingInt(cast.operand);
25232523 repr.tok = cast.l_paren;
25242524 },
25252525 .addr_of_expr => |un| {
25262526 repr.tag = .addr_of_expr;
25272527 repr.data[0] = @bitCast(un.qt);
2528 repr.data[1] = @intFromEnum(un.operand);
2528 repr.data[1] = @backingInt(un.operand);
25292529 repr.tok = un.op_tok;
25302530 },
25312531 .deref_expr => |un| {
25322532 repr.tag = .deref_expr;
25332533 repr.data[0] = @bitCast(un.qt);
2534 repr.data[1] = @intFromEnum(un.operand);
2534 repr.data[1] = @backingInt(un.operand);
25352535 repr.tok = un.op_tok;
25362536 },
25372537 .plus_expr => |un| {
25382538 repr.tag = .plus_expr;
25392539 repr.data[0] = @bitCast(un.qt);
2540 repr.data[1] = @intFromEnum(un.operand);
2540 repr.data[1] = @backingInt(un.operand);
25412541 repr.tok = un.op_tok;
25422542 },
25432543 .negate_expr => |un| {
25442544 repr.tag = .negate_expr;
25452545 repr.data[0] = @bitCast(un.qt);
2546 repr.data[1] = @intFromEnum(un.operand);
2546 repr.data[1] = @backingInt(un.operand);
25472547 repr.tok = un.op_tok;
25482548 },
25492549 .bit_not_expr => |un| {
25502550 repr.tag = .bit_not_expr;
25512551 repr.data[0] = @bitCast(un.qt);
2552 repr.data[1] = @intFromEnum(un.operand);
2552 repr.data[1] = @backingInt(un.operand);
25532553 repr.tok = un.op_tok;
25542554 },
25552555 .bool_not_expr => |un| {
25562556 repr.tag = .bool_not_expr;
25572557 repr.data[0] = @bitCast(un.qt);
2558 repr.data[1] = @intFromEnum(un.operand);
2558 repr.data[1] = @backingInt(un.operand);
25592559 repr.tok = un.op_tok;
25602560 },
25612561 .pre_inc_expr => |un| {
25622562 repr.tag = .pre_inc_expr;
25632563 repr.data[0] = @bitCast(un.qt);
2564 repr.data[1] = @intFromEnum(un.operand);
2564 repr.data[1] = @backingInt(un.operand);
25652565 repr.tok = un.op_tok;
25662566 },
25672567 .pre_dec_expr => |un| {
25682568 repr.tag = .pre_dec_expr;
25692569 repr.data[0] = @bitCast(un.qt);
2570 repr.data[1] = @intFromEnum(un.operand);
2570 repr.data[1] = @backingInt(un.operand);
25712571 repr.tok = un.op_tok;
25722572 },
25732573 .imag_expr => |un| {
25742574 repr.tag = .imag_expr;
25752575 repr.data[0] = @bitCast(un.qt);
2576 repr.data[1] = @intFromEnum(un.operand);
2576 repr.data[1] = @backingInt(un.operand);
25772577 repr.tok = un.op_tok;
25782578 },
25792579 .real_expr => |un| {
25802580 repr.tag = .real_expr;
25812581 repr.data[0] = @bitCast(un.qt);
2582 repr.data[1] = @intFromEnum(un.operand);
2582 repr.data[1] = @backingInt(un.operand);
25832583 repr.tok = un.op_tok;
25842584 },
25852585 .post_inc_expr => |un| {
25862586 repr.tag = .post_inc_expr;
25872587 repr.data[0] = @bitCast(un.qt);
2588 repr.data[1] = @intFromEnum(un.operand);
2588 repr.data[1] = @backingInt(un.operand);
25892589 repr.tok = un.op_tok;
25902590 },
25912591 .post_dec_expr => |un| {
25922592 repr.tag = .post_dec_expr;
25932593 repr.data[0] = @bitCast(un.qt);
2594 repr.data[1] = @intFromEnum(un.operand);
2594 repr.data[1] = @backingInt(un.operand);
25952595 repr.tok = un.op_tok;
25962596 },
25972597 .paren_expr => |un| {
25982598 repr.tag = .paren_expr;
25992599 repr.data[0] = @bitCast(un.qt);
2600 repr.data[1] = @intFromEnum(un.operand);
2600 repr.data[1] = @backingInt(un.operand);
26012601 repr.tok = un.op_tok;
26022602 },
26032603 .stmt_expr => |un| {
26042604 repr.tag = .stmt_expr;
26052605 repr.data[0] = @bitCast(un.qt);
2606 repr.data[1] = @intFromEnum(un.operand);
2606 repr.data[1] = @backingInt(un.operand);
26072607 repr.tok = un.op_tok;
26082608 },
26092609 .cond_dummy_expr => |un| {
26102610 repr.tag = .cond_dummy_expr;
26112611 repr.data[0] = @bitCast(un.qt);
2612 repr.data[1] = @intFromEnum(un.operand);
2612 repr.data[1] = @backingInt(un.operand);
26132613 repr.tok = un.op_tok;
26142614 },
26152615 .addr_of_label => |addr_of| {
......@@ -2620,8 +2620,8 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
26202620 .array_access_expr => |access| {
26212621 repr.tag = .array_access_expr;
26222622 repr.data[0] = @bitCast(access.qt);
2623 repr.data[1] = @intFromEnum(access.base);
2624 repr.data[2] = @intFromEnum(access.index);
2623 repr.data[1] = @backingInt(access.base);
2624 repr.data[2] = @backingInt(access.index);
26252625 repr.tok = access.l_bracket_tok;
26262626 },
26272627 .call_expr => |call| {
......@@ -2632,11 +2632,11 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
26322632 const len: u32 = @intCast(call.args.len + 1);
26332633 repr.data[2] = len;
26342634 try tree.extra.ensureUnusedCapacity(tree.comp.gpa, len);
2635 tree.extra.appendAssumeCapacity(@intFromEnum(call.callee));
2635 tree.extra.appendAssumeCapacity(@backingInt(call.callee));
26362636 tree.extra.appendSliceAssumeCapacity(@ptrCast(call.args));
26372637 } else {
26382638 repr.tag = .call_expr_one;
2639 repr.data[1] = @intFromEnum(call.callee);
2639 repr.data[1] = @backingInt(call.callee);
26402640 repr.data[2] = packElem(call.args, 0);
26412641 }
26422642 repr.tok = call.l_paren_tok;
......@@ -2656,27 +2656,27 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
26562656 .member_access_expr => |access| {
26572657 repr.tag = .member_access_expr;
26582658 repr.data[0] = @bitCast(access.qt);
2659 repr.data[1] = @intFromEnum(access.base);
2659 repr.data[1] = @backingInt(access.base);
26602660 repr.data[2] = access.member_index;
26612661 repr.tok = access.access_tok;
26622662 },
26632663 .member_access_ptr_expr => |access| {
26642664 repr.tag = .member_access_ptr_expr;
26652665 repr.data[0] = @bitCast(access.qt);
2666 repr.data[1] = @intFromEnum(access.base);
2666 repr.data[1] = @backingInt(access.base);
26672667 repr.data[2] = access.member_index;
26682668 repr.tok = access.access_tok;
26692669 },
26702670 .decl_ref_expr => |decl_ref| {
26712671 repr.tag = .decl_ref_expr;
26722672 repr.data[0] = @bitCast(decl_ref.qt);
2673 repr.data[1] = @intFromEnum(decl_ref.decl);
2673 repr.data[1] = @backingInt(decl_ref.decl);
26742674 repr.tok = decl_ref.name_tok;
26752675 },
26762676 .enumeration_ref => |enumeration_ref| {
26772677 repr.tag = .enumeration_ref;
26782678 repr.data[0] = @bitCast(enumeration_ref.qt);
2679 repr.data[1] = @intFromEnum(enumeration_ref.decl);
2679 repr.data[1] = @backingInt(enumeration_ref.decl);
26802680 repr.tok = enumeration_ref.name_tok;
26812681 },
26822682 .builtin_ref => |builtin_ref| {
......@@ -2702,7 +2702,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
27022702 .char_literal => |literal| {
27032703 repr.tag = .char_literal;
27042704 repr.data[0] = @bitCast(literal.qt);
2705 repr.data[1] = @intFromEnum(literal.kind);
2705 repr.data[1] = @backingInt(literal.kind);
27062706 repr.tok = literal.literal_tok;
27072707 },
27082708 .float_literal => |literal| {
......@@ -2713,13 +2713,13 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
27132713 .string_literal_expr => |literal| {
27142714 repr.tag = .string_literal_expr;
27152715 repr.data[0] = @bitCast(literal.qt);
2716 repr.data[1] = @intFromEnum(literal.kind);
2716 repr.data[1] = @backingInt(literal.kind);
27172717 repr.tok = literal.literal_tok;
27182718 },
27192719 .imaginary_literal => |un| {
27202720 repr.tag = .imaginary_literal;
27212721 repr.data[0] = @bitCast(un.qt);
2722 repr.data[1] = @intFromEnum(un.operand);
2722 repr.data[1] = @backingInt(un.operand);
27232723 repr.tok = un.op_tok;
27242724 },
27252725 .sizeof_expr => |type_info| {
......@@ -2744,45 +2744,45 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
27442744 const len: u32 = @intCast(generic.rest.len + 2);
27452745 repr.data[2] = len;
27462746 try tree.extra.ensureUnusedCapacity(tree.comp.gpa, len);
2747 tree.extra.appendAssumeCapacity(@intFromEnum(generic.controlling));
2748 tree.extra.appendAssumeCapacity(@intFromEnum(generic.chosen));
2747 tree.extra.appendAssumeCapacity(@backingInt(generic.controlling));
2748 tree.extra.appendAssumeCapacity(@backingInt(generic.chosen));
27492749 tree.extra.appendSliceAssumeCapacity(@ptrCast(generic.rest));
27502750 } else {
27512751 repr.tag = .generic_expr_zero;
2752 repr.data[1] = @intFromEnum(generic.controlling);
2753 repr.data[2] = @intFromEnum(generic.chosen);
2752 repr.data[1] = @backingInt(generic.controlling);
2753 repr.data[2] = @backingInt(generic.chosen);
27542754 }
27552755 repr.tok = generic.generic_tok;
27562756 },
27572757 .generic_association_expr => |association| {
27582758 repr.tag = .generic_association_expr;
27592759 repr.data[0] = @bitCast(association.association_qt);
2760 repr.data[1] = @intFromEnum(association.expr);
2760 repr.data[1] = @backingInt(association.expr);
27612761 repr.tok = association.colon_tok;
27622762 },
27632763 .generic_default_expr => |default| {
27642764 repr.tag = .generic_default_expr;
2765 repr.data[0] = @intFromEnum(default.expr);
2765 repr.data[0] = @backingInt(default.expr);
27662766 repr.tok = default.default_tok;
27672767 },
27682768 .binary_cond_expr => |cond| {
27692769 repr.tag = .binary_cond_expr;
27702770 repr.data[0] = @bitCast(cond.qt);
2771 repr.data[1] = @intFromEnum(cond.cond);
2771 repr.data[1] = @backingInt(cond.cond);
27722772 repr.data[2], _ = try tree.addExtra(&.{ cond.then_expr, cond.else_expr });
27732773 repr.tok = cond.cond_tok;
27742774 },
27752775 .cond_expr => |cond| {
27762776 repr.tag = .cond_expr;
27772777 repr.data[0] = @bitCast(cond.qt);
2778 repr.data[1] = @intFromEnum(cond.cond);
2778 repr.data[1] = @backingInt(cond.cond);
27792779 repr.data[2], _ = try tree.addExtra(&.{ cond.then_expr, cond.else_expr });
27802780 repr.tok = cond.cond_tok;
27812781 },
27822782 .builtin_choose_expr => |cond| {
27832783 repr.tag = .builtin_choose_expr;
27842784 repr.data[0] = @bitCast(cond.qt);
2785 repr.data[1] = @intFromEnum(cond.cond);
2785 repr.data[1] = @backingInt(cond.cond);
27862786 repr.data[2], _ = try tree.addExtra(&.{ cond.then_expr, cond.else_expr });
27872787 repr.tok = cond.cond_tok;
27882788 },
......@@ -2795,7 +2795,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
27952795 .builtin_convertvector => |builtin| {
27962796 repr.tag = .builtin_convertvector;
27972797 repr.data[0] = @bitCast(builtin.dest_qt);
2798 repr.data[1] = @intFromEnum(builtin.operand);
2798 repr.data[1] = @backingInt(builtin.operand);
27992799 repr.tok = builtin.builtin_tok;
28002800 },
28012801 .builtin_shufflevector => |builtin| {
......@@ -2805,8 +2805,8 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
28052805 repr.data[2] = @intCast(builtin.indexes.len);
28062806 repr.tok = builtin.builtin_tok;
28072807 try tree.extra.ensureUnusedCapacity(tree.comp.gpa, builtin.indexes.len + 2);
2808 tree.extra.appendAssumeCapacity(@intFromEnum(builtin.lhs));
2809 tree.extra.appendAssumeCapacity(@intFromEnum(builtin.rhs));
2808 tree.extra.appendAssumeCapacity(@backingInt(builtin.lhs));
2809 tree.extra.appendAssumeCapacity(@backingInt(builtin.rhs));
28102810 tree.extra.appendSliceAssumeCapacity(@ptrCast(builtin.indexes));
28112811 },
28122812 .builtin_va_arg_pack => |builtin| {
......@@ -2867,7 +2867,7 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
28672867 .register = literal.storage_class == .register,
28682868 .thread_local = literal.thread_local,
28692869 });
2870 repr.data[2] = @intFromEnum(literal.initializer);
2870 repr.data[2] = @backingInt(literal.initializer);
28712871 repr.tok = literal.l_paren_tok;
28722872 },
28732873 }
......@@ -2875,19 +2875,19 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
28752875}
28762876
28772877fn packOptIndex(opt: ?Node.Index) u32 {
2878 return @intFromEnum(Node.OptIndex.packOpt(opt));
2878 return @backingInt(Node.OptIndex.packOpt(opt));
28792879}
28802880
28812881fn unpackOptIndex(idx: u32) ?Node.Index {
2882 return @as(Node.OptIndex, @enumFromInt(idx)).unpack();
2882 return @as(Node.OptIndex, @fromBackingInt(@intCast(idx))).unpack();
28832883}
28842884
28852885fn packElem(nodes: []const Node.Index, index: usize) u32 {
2886 return if (nodes.len > index) @intFromEnum(nodes[index]) else @intFromEnum(Node.OptIndex.null);
2886 return if (nodes.len > index) @backingInt(nodes[index]) else @backingInt(Node.OptIndex.null);
28872887}
28882888
28892889fn unPackElems(data: []const u32) []const Node.Index {
2890 const sentinel = @intFromEnum(Node.OptIndex.null);
2890 const sentinel = @backingInt(Node.OptIndex.null);
28912891 for (data, 0..) |item, i| {
28922892 if (item == sentinel) return @ptrCast(data[0..i]);
28932893 }
......@@ -3146,7 +3146,7 @@ fn dumpNode(
31463146 _ = try ptr.offset.print(tree.comp.type_store.ptrdiff, tree.comp, w);
31473147 },
31483148 else => {
3149 const ptr_node: Node.Index = @enumFromInt(ptr.node);
3149 const ptr_node: Node.Index = @fromBackingInt(@intCast(ptr.node));
31503150 const decl_name = tree.tokSlice(ptr_node.tok(tree));
31513151 try ptr.offset.printPointer(decl_name, tree.comp, w);
31523152 },
......@@ -3212,7 +3212,7 @@ fn dumpNode(
32123212 try w.splatByteAll(' ', level + half);
32133213 try w.writeAll("definition: ");
32143214 try term.setColor(NAME);
3215 try w.print("0x{X}\n", .{@intFromEnum(definition)});
3215 try w.print("0x{X}\n", .{@backingInt(definition)});
32163216 try term.setColor(.reset);
32173217 }
32183218 },
......@@ -3268,7 +3268,7 @@ fn dumpNode(
32683268 try w.splatByteAll(' ', level + half);
32693269 try w.writeAll("definition: ");
32703270 try term.setColor(NAME);
3271 try w.print("0x{X}\n", .{@intFromEnum(definition)});
3271 try w.print("0x{X}\n", .{@backingInt(definition)});
32723272 try term.setColor(.reset);
32733273 }
32743274 },
lib/compiler/aro/aro/TypeStore.zig+44-44
......@@ -226,13 +226,13 @@ pub const QualType = packed struct(u32) {
226226 else => {},
227227 }
228228
229 const repr = comp.type_store.types.get(@intFromEnum(qt._index));
229 const repr = comp.type_store.types.get(@backingInt(qt._index));
230230 return switch (repr.tag) {
231231 .complex => .{ .complex = @bitCast(repr.data[0]) },
232232 .atomic => .{ .atomic = @bitCast(repr.data[0]) },
233233 .bit_int => .{ .bit_int = .{
234234 .bits = @intCast(repr.data[0]),
235 .signedness = @enumFromInt(repr.data[1]),
235 .signedness = @fromBackingInt(@intCast(repr.data[1])),
236236 } },
237237 .func_zero => .{ .func = .{
238238 .return_type = @bitCast(repr.data[0]),
......@@ -280,7 +280,7 @@ pub const QualType = packed struct(u32) {
280280 },
281281 .pointer => .{ .pointer = .{
282282 .child = @bitCast(repr.data[0]),
283 .bounds = @enumFromInt(repr.data[1]),
283 .bounds = @fromBackingInt(@intCast(repr.data[1])),
284284 } },
285285 .pointer_decayed => .{ .pointer = .{
286286 .child = @bitCast(repr.data[0]),
......@@ -300,7 +300,7 @@ pub const QualType = packed struct(u32) {
300300 } },
301301 .array_variable => .{ .array = .{
302302 .elem = @bitCast(repr.data[0]),
303 .len = .{ .variable = @enumFromInt(repr.data[1]) },
303 .len = .{ .variable = @fromBackingInt(@intCast(repr.data[1])) },
304304 } },
305305 .array_unspecified_variable => .{ .array = .{
306306 .elem = @bitCast(repr.data[0]),
......@@ -322,8 +322,8 @@ pub const QualType = packed struct(u32) {
322322 const extra_fields = extra[repr.data[1] + layout_size + 2 ..][0 .. fields_len * field_size];
323323
324324 const record: Type.Record = .{
325 .name = @enumFromInt(repr.data[0]),
326 .decl_node = @enumFromInt(extra[repr.data[1]]),
325 .name = @fromBackingInt(@intCast(repr.data[0])),
326 .decl_node = @fromBackingInt(@intCast(extra[repr.data[1]])),
327327 .layout = layout,
328328 .fields = std.mem.bytesAsSlice(Type.Record.Field, std.mem.sliceAsBytes(extra_fields)),
329329 };
......@@ -334,14 +334,14 @@ pub const QualType = packed struct(u32) {
334334 };
335335 },
336336 .struct_incomplete => .{ .@"struct" = .{
337 .name = @enumFromInt(repr.data[0]),
338 .decl_node = @enumFromInt(repr.data[1]),
337 .name = @fromBackingInt(@intCast(repr.data[0])),
338 .decl_node = @fromBackingInt(@intCast(repr.data[1])),
339339 .layout = null,
340340 .fields = &.{},
341341 } },
342342 .union_incomplete => .{ .@"union" = .{
343 .name = @enumFromInt(repr.data[0]),
344 .decl_node = @enumFromInt(repr.data[1]),
343 .name = @fromBackingInt(@intCast(repr.data[0])),
344 .decl_node = @fromBackingInt(@intCast(repr.data[1])),
345345 .layout = null,
346346 .fields = &.{},
347347 } },
......@@ -354,8 +354,8 @@ pub const QualType = packed struct(u32) {
354354 const extra_fields = extra[repr.data[1] + 3 ..][0 .. fields_len * field_size];
355355
356356 return .{ .@"enum" = .{
357 .name = @enumFromInt(extra[repr.data[1]]),
358 .decl_node = @enumFromInt(extra[repr.data[1] + 1]),
357 .name = @fromBackingInt(@intCast(extra[repr.data[1]])),
358 .decl_node = @fromBackingInt(@intCast(extra[repr.data[1] + 1])),
359359 .tag = @bitCast(repr.data[0]),
360360 .incomplete = false,
361361 .fixed = repr.tag == .enum_fixed,
......@@ -365,8 +365,8 @@ pub const QualType = packed struct(u32) {
365365 .enum_incomplete => .{
366366 .@"enum" = .{
367367 .tag = null,
368 .name = @enumFromInt(repr.data[0]),
369 .decl_node = @enumFromInt(repr.data[1]),
368 .name = @fromBackingInt(@intCast(repr.data[0])),
369 .decl_node = @fromBackingInt(@intCast(repr.data[1])),
370370 .incomplete = true,
371371 .fixed = false,
372372 .fields = &.{},
......@@ -375,8 +375,8 @@ pub const QualType = packed struct(u32) {
375375 .enum_incomplete_fixed => .{
376376 .@"enum" = .{
377377 .tag = @bitCast(repr.data[0]),
378 .name = @enumFromInt(comp.type_store.extra.items[repr.data[1]]),
379 .decl_node = @enumFromInt(comp.type_store.extra.items[repr.data[1] + 1]),
378 .name = @fromBackingInt(@intCast(comp.type_store.extra.items[repr.data[1]])),
379 .decl_node = @fromBackingInt(@intCast(comp.type_store.extra.items[repr.data[1] + 1])),
380380 .incomplete = true,
381381 .fixed = true,
382382 .fields = &.{},
......@@ -388,12 +388,12 @@ pub const QualType = packed struct(u32) {
388388 } },
389389 .typeof_expr => .{ .typeof = .{
390390 .base = @bitCast(repr.data[0]),
391 .expr = @enumFromInt(repr.data[1]),
391 .expr = @fromBackingInt(@intCast(repr.data[1])),
392392 } },
393393 .typedef => .{ .typedef = .{
394394 .base = @bitCast(repr.data[0]),
395 .name = @enumFromInt(comp.type_store.extra.items[repr.data[1]]),
396 .decl_node = @enumFromInt(comp.type_store.extra.items[repr.data[1] + 1]),
395 .name = @fromBackingInt(@intCast(comp.type_store.extra.items[repr.data[1]])),
396 .decl_node = @fromBackingInt(@intCast(comp.type_store.extra.items[repr.data[1] + 1])),
397397 } },
398398 .attributed => {
399399 const extra = comp.type_store.extra.items;
......@@ -1694,7 +1694,7 @@ pub const Type = union(enum) {
16941694
16951695 pub fn unpack(width: @This()) ?u32 {
16961696 if (width == .null) return null;
1697 return @intFromEnum(width);
1697 return @backingInt(width);
16981698 }
16991699 } = .null,
17001700 layout: Field.Layout = .{
......@@ -1881,7 +1881,7 @@ pub fn putExtra(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type) !Index {
18811881 }
18821882 const index = try ts.types.addOne(gpa);
18831883 try ts.set(gpa, ty, index);
1884 return @enumFromInt(index);
1884 return @fromBackingInt(@intCast(index));
18851885}
18861886
18871887pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void {
......@@ -1899,7 +1899,7 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
18991899 .bit_int => |bit_int| {
19001900 repr.tag = .bit_int;
19011901 repr.data[0] = bit_int.bits;
1902 repr.data[1] = @intFromEnum(bit_int.signedness);
1902 repr.data[1] = @backingInt(bit_int.signedness);
19031903 },
19041904 .atomic => |atomic| {
19051905 repr.tag = .atomic;
......@@ -1950,7 +1950,7 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
19501950 repr.data[1] = @bitCast(array);
19511951 } else {
19521952 repr.tag = .pointer;
1953 repr.data[1] = @intFromEnum(pointer.bounds);
1953 repr.data[1] = @backingInt(pointer.bounds);
19541954 }
19551955 },
19561956 .array => |array| {
......@@ -1973,7 +1973,7 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
19731973 },
19741974 .variable => |expr| {
19751975 repr.tag = .array_variable;
1976 repr.data[1] = @intFromEnum(expr);
1976 repr.data[1] = @backingInt(expr);
19771977 },
19781978 .unspecified_variable => {
19791979 repr.tag = .array_unspecified_variable;
......@@ -1986,7 +1986,7 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
19861986 repr.data[1] = vector.len;
19871987 },
19881988 .@"struct", .@"union" => |record| record: {
1989 repr.data[0] = @intFromEnum(record.name);
1989 repr.data[0] = @backingInt(record.name);
19901990 const layout = record.layout orelse {
19911991 std.debug.assert(record.fields.len == 0);
19921992 repr.tag = switch (ty) {
......@@ -1994,7 +1994,7 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
19941994 .@"union" => .union_incomplete,
19951995 else => unreachable,
19961996 };
1997 repr.data[1] = @intFromEnum(record.decl_node);
1997 repr.data[1] = @backingInt(record.decl_node);
19981998 break :record;
19991999 };
20002000 repr.tag = switch (ty) {
......@@ -2012,7 +2012,7 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
20122012 comptime std.debug.assert(@sizeOf(Type.Record.Field) == @sizeOf(u32) * field_size);
20132013 try ts.extra.ensureUnusedCapacity(gpa, record.fields.len * field_size + layout_size + 2);
20142014
2015 ts.extra.appendAssumeCapacity(@intFromEnum(record.decl_node));
2015 ts.extra.appendAssumeCapacity(@backingInt(record.decl_node));
20162016 const casted_layout: *const [layout_size]u32 = @ptrCast(&layout);
20172017 ts.extra.appendSliceAssumeCapacity(casted_layout);
20182018 ts.extra.appendAssumeCapacity(@intCast(record.fields.len));
......@@ -2030,13 +2030,13 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
20302030 repr.data[0] = @bitCast(@"enum".tag.?);
20312031 repr.data[1] = @intCast(ts.extra.items.len);
20322032 try ts.extra.appendSlice(gpa, &.{
2033 @intFromEnum(@"enum".name),
2034 @intFromEnum(@"enum".decl_node),
2033 @backingInt(@"enum".name),
2034 @backingInt(@"enum".decl_node),
20352035 });
20362036 } else {
20372037 repr.tag = .enum_incomplete;
2038 repr.data[0] = @intFromEnum(@"enum".name);
2039 repr.data[1] = @intFromEnum(@"enum".decl_node);
2038 repr.data[0] = @backingInt(@"enum".name);
2039 repr.data[1] = @backingInt(@"enum".decl_node);
20402040 }
20412041 break :@"enum";
20422042 }
......@@ -2050,8 +2050,8 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
20502050 comptime std.debug.assert(@sizeOf(Type.Enum.Field) == @sizeOf(u32) * field_size);
20512051 try ts.extra.ensureUnusedCapacity(gpa, @"enum".fields.len * field_size + 3);
20522052
2053 ts.extra.appendAssumeCapacity(@intFromEnum(@"enum".name));
2054 ts.extra.appendAssumeCapacity(@intFromEnum(@"enum".decl_node));
2053 ts.extra.appendAssumeCapacity(@backingInt(@"enum".name));
2054 ts.extra.appendAssumeCapacity(@backingInt(@"enum".decl_node));
20552055 ts.extra.appendAssumeCapacity(@intCast(@"enum".fields.len));
20562056
20572057 for (@"enum".fields) |*field| {
......@@ -2063,7 +2063,7 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
20632063 repr.data[0] = @bitCast(typeof.base);
20642064 if (typeof.expr) |some| {
20652065 repr.tag = .typeof_expr;
2066 repr.data[1] = @intFromEnum(some);
2066 repr.data[1] = @backingInt(some);
20672067 } else {
20682068 repr.tag = .typeof;
20692069 }
......@@ -2073,8 +2073,8 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
20732073 repr.data[0] = @bitCast(typedef.base);
20742074 repr.data[1] = @intCast(ts.extra.items.len);
20752075 try ts.extra.appendSlice(gpa, &.{
2076 @intFromEnum(typedef.name),
2077 @intFromEnum(typedef.decl_node),
2076 @backingInt(typedef.name),
2077 @backingInt(typedef.decl_node),
20782078 });
20792079 },
20802080 .attributed => |attributed| {
......@@ -2194,7 +2194,7 @@ fn generateNsConstantStringType(ts: *TypeStore, comp: *Compilation) !QualType {
21942194 };
21952195 record.fields = &fields;
21962196 record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
2197 try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
2197 try ts.set(comp.gpa, .{ .@"struct" = record }, @backingInt(qt._index));
21982198
21992199 return qt;
22002200}
......@@ -2282,7 +2282,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
22822282 };
22832283 record.fields = &fields;
22842284 record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
2285 try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
2285 try ts.set(comp.gpa, .{ .@"struct" = record }, @backingInt(qt._index));
22862286
22872287 return qt;
22882288 },
......@@ -2300,7 +2300,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
23002300 };
23012301 record.fields = &fields;
23022302 record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
2303 try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
2303 try ts.set(comp.gpa, .{ .@"struct" = record }, @backingInt(qt._index));
23042304
23052305 return qt;
23062306 },
......@@ -2321,7 +2321,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
23212321 };
23222322 record.fields = &fields;
23232323 record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
2324 try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
2324 try ts.set(comp.gpa, .{ .@"struct" = record }, @backingInt(qt._index));
23252325
23262326 break :blk qt;
23272327 },
......@@ -2343,7 +2343,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
23432343 };
23442344 record.fields = &fields;
23452345 record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
2346 try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
2346 try ts.set(comp.gpa, .{ .@"struct" = record }, @backingInt(qt._index));
23472347
23482348 break :blk qt;
23492349 },
......@@ -2363,7 +2363,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
23632363 };
23642364 record.fields = &fields;
23652365 record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
2366 try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
2366 try ts.set(comp.gpa, .{ .@"struct" = record }, @backingInt(qt._index));
23672367
23682368 break :blk qt;
23692369 },
......@@ -2384,7 +2384,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
23842384 };
23852385 record.fields = &fields;
23862386 record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
2387 try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
2387 try ts.set(comp.gpa, .{ .@"struct" = record }, @backingInt(qt._index));
23882388
23892389 break :blk qt;
23902390 },
......@@ -2404,7 +2404,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
24042404 };
24052405 record.fields = &fields;
24062406 record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
2407 try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
2407 try ts.set(comp.gpa, .{ .@"struct" = record }, @backingInt(qt._index));
24082408
24092409 return qt;
24102410 },
lib/compiler/aro/aro/Value.zig+5-5
......@@ -21,7 +21,7 @@ pub const @"null" = Value{ .opt_ref = .null };
2121
2222pub fn intern(comp: *Compilation, k: Interner.Key) !Value {
2323 const r = try comp.interner.put(comp.gpa, k);
24 return .{ .opt_ref = @enumFromInt(@intFromEnum(r)) };
24 return .{ .opt_ref = @fromBackingInt(@intCast(@backingInt(r))) };
2525}
2626
2727pub fn int(i: anytype, comp: *Compilation) !Value {
......@@ -39,11 +39,11 @@ pub fn pointer(r: Interner.Key.Pointer, comp: *Compilation) !Value {
3939
4040pub fn ref(v: Value) Interner.Ref {
4141 std.debug.assert(v.opt_ref != .none);
42 return @enumFromInt(@intFromEnum(v.opt_ref));
42 return @fromBackingInt(@intCast(@backingInt(v.opt_ref)));
4343}
4444
4545pub fn fromRef(r: Interner.Ref) Value {
46 return .{ .opt_ref = @enumFromInt(@intFromEnum(r)) };
46 return .{ .opt_ref = @fromBackingInt(@intCast(@backingInt(r))) };
4747}
4848
4949pub fn is(v: Value, tag: std.meta.Tag(Interner.Key), comp: *const Compilation) bool {
......@@ -1114,8 +1114,8 @@ pub fn print(v: Value, qt: QualType, comp: *const Compilation, w: *std.Io.Writer
11141114}
11151115
11161116pub fn printString(bytes: []const u8, qt: QualType, comp: *const Compilation, w: *std.Io.Writer) std.Io.Writer.Error!void {
1117 const size: Compilation.CharUnitSize = @enumFromInt(qt.childType(comp).sizeof(comp));
1118 const without_null = bytes[0 .. bytes.len - @intFromEnum(size)];
1117 const size: Compilation.CharUnitSize = @fromBackingInt(@intCast(qt.childType(comp).sizeof(comp)));
1118 const without_null = bytes[0 .. bytes.len - @backingInt(size)];
11191119 try w.writeByte('"');
11201120 switch (size) {
11211121 .@"1" => try std.zig.stringEscape(without_null, w),
lib/compiler/aro/aro/text_literal.zig+1-1
......@@ -508,7 +508,7 @@ pub const Parser = struct {
508508 },
509509 };
510510 for (slice) |c| {
511 const char = std.fmt.charToDigit(c, @intFromEnum(base)) catch break;
511 const char = std.fmt.charToDigit(c, @backingInt(base)) catch break;
512512 val, const overflow = @shlWithOverflow(val, base.log2());
513513 if (overflow != 0) overflowed = true;
514514 val += char;
lib/compiler/aro/assembly_backend/x86_64.zig+1-1
......@@ -166,7 +166,7 @@ fn genDecls(c: *AsmCodeGen) !void {
166166 if (c.tree.comp.code_gen_options.debug != .strip) {
167167 const sources = c.tree.comp.sources.values();
168168 for (sources) |source| {
169 try c.data.print(" .file {d} \"{s}\"\n", .{ @intFromEnum(source.id.index) + 1, source.path });
169 try c.data.print(" .file {d} \"{s}\"\n", .{ @backingInt(source.id.index) + 1, source.path });
170170 }
171171 }
172172
lib/compiler/aro/backend/Interner.zig+6-6
......@@ -22,7 +22,7 @@ const KeyAdapter = struct {
2222
2323 pub fn eql(adapter: KeyAdapter, a: Key, b_void: void, b_map_index: usize) bool {
2424 _ = b_void;
25 return adapter.interner.get(@as(Ref, @enumFromInt(b_map_index))).eql(a);
25 return adapter.interner.get(@as(Ref, @fromBackingInt(@intCast(b_map_index)))).eql(a);
2626 }
2727
2828 pub fn hash(adapter: KeyAdapter, a: Key) u32 {
......@@ -582,7 +582,7 @@ pub fn put(i: *Interner, gpa: Allocator, key: Key) !Ref {
582582 if (key.toRef()) |some| return some;
583583 const adapter: KeyAdapter = .{ .interner = i };
584584 const gop = try i.map.getOrPutAdapted(gpa, key, adapter);
585 if (gop.found_existing) return @enumFromInt(gop.index);
585 if (gop.found_existing) return @fromBackingInt(@intCast(gop.index));
586586 try i.items.ensureUnusedCapacity(gpa, 1);
587587
588588 switch (key) {
......@@ -751,7 +751,7 @@ pub fn put(i: *Interner, gpa: Allocator, key: Key) !Ref {
751751 => unreachable,
752752 }
753753
754 return @enumFromInt(gop.index);
754 return @fromBackingInt(@intCast(gop.index));
755755}
756756
757757fn addExtra(i: *Interner, gpa: Allocator, extra: anytype) Allocator.Error!u32 {
......@@ -765,7 +765,7 @@ fn addExtraAssumeCapacity(i: *Interner, extra: anytype) u32 {
765765 const info = @typeInfo(@TypeOf(extra)).@"struct";
766766 inline for (info.field_names, info.field_types) |field_name, field_type| {
767767 i.extra.appendAssumeCapacity(switch (field_type) {
768 Ref => @intFromEnum(@field(extra, field_name)),
768 Ref => @backingInt(@field(extra, field_name)),
769769 u32 => @field(extra, field_name),
770770 else => @compileError("bad field type: " ++ @typeName(field_type)),
771771 });
......@@ -800,7 +800,7 @@ pub fn get(i: *const Interner, ref: Ref) Key {
800800 else => {},
801801 }
802802
803 const item = i.items.get(@intFromEnum(ref));
803 const item = i.items.get(@backingInt(ref));
804804 const data = item.data;
805805 return switch (item.tag) {
806806 .int_ty => .{ .int_ty = @intCast(data) },
......@@ -896,7 +896,7 @@ fn extraDataTrail(i: *const Interner, comptime T: type, index: usize) struct { d
896896 inline for (info.field_names, info.field_types, 0..) |field_name, field_type, field_i| {
897897 const int32 = i.extra.items[field_i + index];
898898 @field(result, field_name) = switch (field_type) {
899 Ref => @enumFromInt(int32),
899 Ref => @fromBackingInt(@intCast(int32)),
900900 u32 => int32,
901901 else => @compileError("bad field type: " ++ @typeName(field_type)),
902902 };
lib/compiler/aro/backend/Ir.zig+14-14
......@@ -81,7 +81,7 @@ pub const Builder = struct {
8181 }
8282
8383 pub fn addArg(b: *Builder, ty: Interner.Ref) Allocator.Error!Ref {
84 const ref: Ref = @enumFromInt(b.instructions.len);
84 const ref: Ref = @fromBackingInt(@intCast(b.instructions.len));
8585 try b.instructions.append(b.gpa, .{ .tag = .arg, .data = .{ .none = {} }, .ty = ty });
8686 try b.body.insert(b.gpa, b.arg_count, ref);
8787 b.arg_count += 1;
......@@ -89,7 +89,7 @@ pub const Builder = struct {
8989 }
9090
9191 pub fn addAlloc(b: *Builder, size: u32, @"align": u32) Allocator.Error!Ref {
92 const ref: Ref = @enumFromInt(b.instructions.len);
92 const ref: Ref = @fromBackingInt(@intCast(b.instructions.len));
9393 try b.instructions.append(b.gpa, .{
9494 .tag = .alloc,
9595 .data = .{ .alloc = .{ .size = size, .@"align" = @"align" } },
......@@ -101,14 +101,14 @@ pub const Builder = struct {
101101 }
102102
103103 pub fn addInst(b: *Builder, tag: Ir.Inst.Tag, data: Ir.Inst.Data, ty: Interner.Ref) Allocator.Error!Ref {
104 const ref: Ref = @enumFromInt(b.instructions.len);
104 const ref: Ref = @fromBackingInt(@intCast(b.instructions.len));
105105 try b.instructions.append(b.gpa, .{ .tag = tag, .data = data, .ty = ty });
106106 try b.body.append(b.gpa, ref);
107107 return ref;
108108 }
109109
110110 pub fn makeLabel(b: *Builder, name: [*:0]const u8) Allocator.Error!Ref {
111 const ref: Ref = @enumFromInt(b.instructions.len);
111 const ref: Ref = @fromBackingInt(@intCast(b.instructions.len));
112112 try b.instructions.append(b.gpa, .{ .tag = .label, .data = .{ .label = name }, .ty = .void });
113113 return ref;
114114 }
......@@ -146,7 +146,7 @@ pub const Builder = struct {
146146 }
147147
148148 pub fn addConstant(b: *Builder, val: Interner.Ref, ty: Interner.Ref) Allocator.Error!Ref {
149 const ref: Ref = @enumFromInt(b.instructions.len);
149 const ref: Ref = @fromBackingInt(@intCast(b.instructions.len));
150150 try b.instructions.append(b.gpa, .{
151151 .tag = .constant,
152152 .data = .{ .constant = val },
......@@ -158,7 +158,7 @@ pub const Builder = struct {
158158 pub fn addPhi(b: *Builder, inputs: []const Inst.Phi.Input, ty: Interner.Ref) Allocator.Error!Ref {
159159 const a = b.arena.allocator();
160160 const input_refs = try a.alloc(Ref, inputs.len * 2 + 1);
161 input_refs[0] = @enumFromInt(inputs.len);
161 input_refs[0] = @fromBackingInt(@intCast(inputs.len));
162162 @memcpy(input_refs[1..], std.mem.bytesAsSlice(Ref, std.mem.sliceAsBytes(inputs)));
163163
164164 return b.addInst(.phi, .{ .phi = .{ .ptr = input_refs.ptr } }, ty);
......@@ -359,7 +359,7 @@ pub const Inst = struct {
359359 };
360360
361361 pub fn inputs(p: Phi) []Input {
362 const len = @intFromEnum(p.ptr[0]) * 2;
362 const len = @backingInt(p.ptr[0]) * 2;
363363 const slice = (p.ptr + 1)[0..len];
364364 return std.mem.bytesAsSlice(Input, std.mem.sliceAsBytes(slice));
365365 }
......@@ -403,8 +403,8 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8,
403403 defer label_map.deinit(gpa);
404404
405405 const ret_inst = decl.body.items[decl.body.items.len - 1];
406 const ret_operand = data[@intFromEnum(ret_inst)].un;
407 const ret_ty = decl.instructions.items(.ty)[@intFromEnum(ret_operand)];
406 const ret_operand = data[@backingInt(ret_inst)].un;
407 const ret_ty = decl.instructions.items(.ty)[@backingInt(ret_operand)];
408408 try ir.writeType(ret_ty, term);
409409 try term.setColor(REF);
410410 try w.print(" @{s}", .{name});
......@@ -414,7 +414,7 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8,
414414 var arg_count: u32 = 0;
415415 while (true) : (arg_count += 1) {
416416 const ref = decl.body.items[arg_count];
417 if (tags[@intFromEnum(ref)] != .arg) break;
417 if (tags[@backingInt(ref)] != .arg) break;
418418 if (arg_count != 0) try w.writeAll(", ");
419419 try ref_map.put(gpa, ref, {});
420420 try ir.writeRef(decl, &ref_map, ref, term);
......@@ -422,14 +422,14 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8,
422422 }
423423 try w.writeAll(") {\n");
424424 for (decl.body.items[arg_count..]) |ref| {
425 switch (tags[@intFromEnum(ref)]) {
425 switch (tags[@backingInt(ref)]) {
426426 .label => try label_map.put(gpa, ref, {}),
427427 else => {},
428428 }
429429 }
430430
431431 for (decl.body.items[arg_count..]) |ref| {
432 const i = @intFromEnum(ref);
432 const i = @backingInt(ref);
433433 const tag = tags[i];
434434 switch (tag) {
435435 .arg, .constant, .symbol => unreachable,
......@@ -664,7 +664,7 @@ fn writeValue(ir: Ir, val: Interner.Ref, term: std.Io.Terminal) !void {
664664fn writeRef(ir: Ir, decl: *const Decl, ref_map: *RefMap, ref: Ref, term: std.Io.Terminal) !void {
665665 const w = term.writer;
666666 assert(ref != .none);
667 const index = @intFromEnum(ref);
667 const index = @backingInt(ref);
668668 const ty_ref = decl.instructions.items(.ty)[index];
669669 if (decl.instructions.items(.tag)[index] == .constant) {
670670 try ir.writeType(ty_ref, term);
......@@ -698,7 +698,7 @@ fn writeNewRef(ir: Ir, gpa: Allocator, decl: *const Decl, ref_map: *RefMap, ref:
698698fn writeLabel(decl: *const Decl, label_map: *RefMap, ref: Ref, term: std.Io.Terminal) !void {
699699 const w = term.writer;
700700 assert(ref != .none);
701 const index = @intFromEnum(ref);
701 const index = @backingInt(ref);
702702 const label = decl.instructions.items(.data)[index].label;
703703 try term.setColor(REF);
704704 const label_index = label_map.getIndex(ref).?;
lib/compiler/objcopy.zig+2-2
......@@ -600,7 +600,7 @@ const HexWriter = struct {
600600 const parts = addressParts(self.address);
601601 sum +%= parts[0];
602602 sum +%= parts[1];
603 sum +%= @intFromEnum(self.payload);
603 sum +%= @backingInt(self.payload);
604604 for (payload_bytes) |byte| {
605605 sum +%= byte;
606606 }
......@@ -618,7 +618,7 @@ const HexWriter = struct {
618618 const line = try std.fmt.bufPrint(&outbuf, ":{0X:0>2}{1X:0>4}{2X:0>2}{3X}{4X:0>2}" ++ linesep, .{
619619 @as(u8, @intCast(payload_bytes.len)),
620620 self.address,
621 @intFromEnum(self.payload),
621 @backingInt(self.payload),
622622 payload_bytes,
623623 self.checksum(),
624624 });
lib/compiler/objdump.zig+12-12
......@@ -594,7 +594,7 @@ const coff = struct {
594594
595595 const member_sig = try r.peek(4);
596596 const machine: std.coff.IMAGE.FILE.MACHINE =
597 @enumFromInt(std.mem.readInt(u16, member_sig[0..2], .little));
597 @fromBackingInt(@intCast(std.mem.readInt(u16, member_sig[0..2], .little)));
598598 const sig = std.mem.readInt(u16, member_sig[2..4], .little);
599599
600600 const is_imp_lib = machine == std.coff.IMAGE.FILE.MACHINE.UNKNOWN and sig == 0xffff;
......@@ -723,7 +723,7 @@ const coff = struct {
723723 if (d.opts.file_headers and d.element(.@"header-name"))
724724 try w.writeAll("COFF Optional Header:\n");
725725
726 const magic: std.coff.OptionalHeader.Magic = @enumFromInt(try r.peekInt(u16, .little));
726 const magic: std.coff.OptionalHeader.Magic = @fromBackingInt(@intCast(try r.peekInt(u16, .little)));
727727 const num_directory_entries, const image_base = switch (magic) {
728728 inline .PE32, .@"PE32+" => |v| num_data_dirs: {
729729 const OptionalHeader = if (v == .PE32)
......@@ -795,7 +795,7 @@ const coff = struct {
795795 if (d.opts.file_headers)
796796 try w.print(
797797 "{x: >16} {x: >8} {t}\n",
798 .{ dir.virtual_address, dir.size, @as(DIRECTORY_ENTRY, @enumFromInt(dir_i)) },
798 .{ dir.virtual_address, dir.size, @as(DIRECTORY_ENTRY, @fromBackingInt(@intCast(dir_i))) },
799799 );
800800 }
801801 if (d.opts.file_headers and d.element(.newlines)) try w.writeByte('\n');
......@@ -980,7 +980,7 @@ const coff = struct {
980980 .ABSOLUTE => w.writeAll(" ABS"),
981981 .DEBUG => w.writeAll("DEBUG"),
982982 else => |v| {
983 const backing = @intFromEnum(v);
983 const backing = @backingInt(v);
984984 const fmt = "{x: >5}";
985985 if (backing >= 0)
986986 try w.print(fmt, .{@as(u15, @intCast(backing))})
......@@ -1009,7 +1009,7 @@ const coff = struct {
10091009 .complex_type = .FUNCTION,
10101010 .base_type = .NULL,
10111011 } and
1012 @intFromEnum(symbol.section_number) > 0)
1012 @backingInt(symbol.section_number) > 0)
10131013 {
10141014 try w.writeAll("TODO function aux symbol");
10151015 } else if (symbol.type == std.coff.SymType{
......@@ -1064,10 +1064,10 @@ const coff = struct {
10641064 symbol.value == 0 and
10651065 switch (symbol.section_number) {
10661066 .UNDEFINED, .DEBUG, .ABSOLUTE => false,
1067 else => |sn| @intFromEnum(sn) > 0,
1067 else => |sn| @backingInt(sn) > 0,
10681068 })
10691069 {
1070 const section_i: u15 = @intCast(@intFromEnum(symbol.section_number) - 1);
1070 const section_i: u15 = @intCast(@backingInt(symbol.section_number) - 1);
10711071 try w.writeAll(" Section ");
10721072
10731073 if (section_i >= sections.items.len) {
......@@ -1160,7 +1160,7 @@ const coff = struct {
11601160 void => try w.writeAll("(unknown arch)"),
11611161 else => |RelocationType| try w.print(
11621162 "{t: <17} ",
1163 .{@as(RelocationType, @enumFromInt(reloc.type))},
1163 .{@as(RelocationType, @fromBackingInt(@intCast(reloc.type)))},
11641164 ),
11651165 },
11661166 }
......@@ -1263,7 +1263,7 @@ const coff = struct {
12631263
12641264 // All the variable length fields should be contained within this directory.
12651265 // Read it entirely to avoid needing to seek per-name when iterating.
1266 const dir = image_info.?.data_dirs[@intFromEnum(DIRECTORY_ENTRY.EXPORT)];
1266 const dir = image_info.?.data_dirs[@backingInt(DIRECTORY_ENTRY.EXPORT)];
12671267 const dir_end_rva = dir.virtual_address + dir.size;
12681268 const dir_loc = fr.logicalPos();
12691269 const dir_slice = try r.readAlloc(gpa, dir.size);
......@@ -1533,8 +1533,8 @@ const coff = struct {
15331533 data_dirs: []const std.coff.ImageDataDirectory,
15341534 entry: DIRECTORY_ENTRY,
15351535 ) !?u16 {
1536 if (@intFromEnum(entry) < data_dirs.len) blk: {
1537 const rva = data_dirs[@intFromEnum(entry)].virtual_address;
1536 if (@backingInt(entry) < data_dirs.len) blk: {
1537 const rva = data_dirs[@backingInt(entry)].virtual_address;
15381538 if (rva == 0) break :blk;
15391539
15401540 const section_index = sectionContainingRva(rva_index, sections, rva) orelse
......@@ -1603,7 +1603,7 @@ const coff = struct {
16031603 .ABSOLUTE => w.writeAll(" ABS"),
16041604 .DEBUG => w.writeAll("DEBUG"),
16051605 else => |v| {
1606 const backing = @intFromEnum(v);
1606 const backing = @backingInt(v);
16071607 const fmt = "{x: >5}";
16081608 if (backing >= 0)
16091609 try w.print(fmt, .{@as(u15, @intCast(backing))})
lib/compiler/reduce.zig+1-1
......@@ -198,7 +198,7 @@ pub fn main(init: std.process.Init) !void {
198198
199199 if (zir.hasCompileErrors()) {
200200 more_fixups.clearRetainingCapacity();
201 const payload_index = zir.extra[@intFromEnum(Zir.ExtraIndex.compile_errors)];
201 const payload_index = zir.extra[@backingInt(Zir.ExtraIndex.compile_errors)];
202202 assert(payload_index != 0);
203203 const header = zir.extraData(Zir.Inst.CompileErrors, payload_index);
204204 var extra_index = header.end;
lib/compiler/resinator/bmp.zig+1-1
......@@ -124,7 +124,7 @@ pub fn read(reader: *std.Io.Reader, max_size: u64) ReadError!BitmapInfo {
124124
125125 bitmap_info.colors_in_palette = try dib_header.numColorsInTable();
126126 bitmap_info.bytes_per_color_palette_element = 4;
127 bitmap_info.compression = @enumFromInt(dib_header.biCompression);
127 bitmap_info.compression = @fromBackingInt(@intCast(dib_header.biCompression));
128128
129129 if (bitmap_info.getByteLenBetweenHeadersAndPixels() < bitmap_info.getBitmasksByteLen()) {
130130 return error.MissingBitfieldMasks;
lib/compiler/resinator/cli.zig+1-1
......@@ -369,7 +369,7 @@ pub const Options = struct {
369369 try writer.print("Default language: {s} (id=0x{x})\n", .{ language_name, language_id });
370370
371371 const code_page = self.default_code_page orelse .windows1252;
372 try writer.print("Default codepage: {s} (id={})\n", .{ @tagName(code_page), @intFromEnum(code_page) });
372 try writer.print("Default codepage: {s} (id={})\n", .{ @tagName(code_page), @backingInt(code_page) });
373373 }
374374};
375375
lib/compiler/resinator/code_pages.zig+2-2
......@@ -191,7 +191,7 @@ pub const CodePage = blk: {
191191
192192pub fn isSupported(code_page: CodePage) bool {
193193 inline for (@typeInfo(SupportedCodePage).@"enum".field_names) |field_name| {
194 if (@intFromEnum(code_page) == @intFromEnum(@field(SupportedCodePage, field_name))) {
194 if (@backingInt(code_page) == @backingInt(@field(SupportedCodePage, field_name))) {
195195 return true;
196196 }
197197 }
......@@ -213,7 +213,7 @@ pub fn getByIdentifier(identifier: u16) !CodePage {
213213pub fn getByIdentifierEnsureSupported(identifier: u16) !SupportedCodePage {
214214 const code_page = try getByIdentifier(identifier);
215215 return if (isSupported(code_page))
216 @enumFromInt(@intFromEnum(code_page))
216 @fromBackingInt(@intCast(@backingInt(code_page)))
217217 else
218218 error.UnsupportedCodePage;
219219}
lib/compiler/resinator/compile.zig+8-8
......@@ -606,7 +606,7 @@ pub const Compiler = struct {
606606 .GROUP_CURSOR => .ANICURSOR,
607607 else => unreachable,
608608 };
609 header.type_value.ordinal = @intFromEnum(new_predefined_type);
609 header.type_value.ordinal = @backingInt(new_predefined_type);
610610 header.memory_flags = MemoryFlags.defaults(new_predefined_type);
611611 header.applyMemoryFlags(node.common_resource_attributes, self.source);
612612 header.data_size = std.math.cast(u32, try file_reader.getSize()) orelse {
......@@ -668,7 +668,7 @@ pub const Compiler = struct {
668668 applyToGroupMemoryFlags(&header.memory_flags, node.common_resource_attributes, self.source);
669669
670670 const first_icon_id = self.state.icon_id;
671 const entry_type = if (predefined_type == .GROUP_ICON) @intFromEnum(res.RT.ICON) else @intFromEnum(res.RT.CURSOR);
671 const entry_type = if (predefined_type == .GROUP_ICON) @backingInt(res.RT.ICON) else @backingInt(res.RT.CURSOR);
672672 for (icon_dir.entries, 0..) |*entry, entry_i_usize| {
673673 // We know that the entry index must fit within a u16, so
674674 // cast it here to simplify usage sites.
......@@ -1909,7 +1909,7 @@ pub const Compiler = struct {
19091909 }
19101910
19111911 if (res.ControlClass.fromControl(control_type)) |control_class| {
1912 const ordinal = NameOrOrdinal{ .ordinal = @intFromEnum(control_class) };
1912 const ordinal = NameOrOrdinal{ .ordinal = @backingInt(control_class) };
19131913 try ordinal.write(data_writer);
19141914 } else {
19151915 const class_node = control.class.?;
......@@ -1944,7 +1944,7 @@ pub const Compiler = struct {
19441944 const parsed = try self.parseQuotedStringAsWideString(literal_node.token);
19451945 defer self.allocator.free(parsed);
19461946 if (rc.ControlClass.fromWideString(parsed)) |control_class| {
1947 const ordinal = NameOrOrdinal{ .ordinal = @intFromEnum(control_class) };
1947 const ordinal = NameOrOrdinal{ .ordinal = @backingInt(control_class) };
19481948 try ordinal.write(data_writer);
19491949 } else {
19501950 // NUL acts as a terminator
......@@ -1959,7 +1959,7 @@ pub const Compiler = struct {
19591959 const literal_slice = literal_node.token.slice(self.source);
19601960 // This succeeding is guaranteed by the parser
19611961 const control_class = rc.ControlClass.map.get(literal_slice) orelse unreachable;
1962 const ordinal = NameOrOrdinal{ .ordinal = @intFromEnum(control_class) };
1962 const ordinal = NameOrOrdinal{ .ordinal = @backingInt(control_class) };
19631963 try ordinal.write(data_writer);
19641964 }
19651965 }
......@@ -2620,7 +2620,7 @@ pub const Compiler = struct {
26202620 const type_value = type: {
26212621 const resource_type = ResourceType.fromString(type_bytes);
26222622 if (res.RT.fromResource(resource_type)) |rt_constant| {
2623 break :type NameOrOrdinal{ .ordinal = @intFromEnum(rt_constant) };
2623 break :type NameOrOrdinal{ .ordinal = @backingInt(rt_constant) };
26242624 } else {
26252625 break :type try NameOrOrdinal.fromString(allocator, type_bytes);
26262626 }
......@@ -2974,7 +2974,7 @@ pub const FontDir = struct {
29742974
29752975 var header = Compiler.ResourceHeader{
29762976 .name_value = try NameOrOrdinal.nameFromString(compiler.allocator, .{ .slice = "FONTDIR", .code_page = .windows1252 }),
2977 .type_value = NameOrOrdinal{ .ordinal = @intFromEnum(res.RT.FONTDIR) },
2977 .type_value = NameOrOrdinal{ .ordinal = @backingInt(res.RT.FONTDIR) },
29782978 .memory_flags = res.MemoryFlags.defaults(res.RT.FONTDIR),
29792979 .language = compiler.state.language,
29802980 .version = compiler.state.version,
......@@ -3230,7 +3230,7 @@ pub const StringTable = struct {
32303230
32313231 const header = Compiler.ResourceHeader{
32323232 .name_value = .{ .ordinal = block_id },
3233 .type_value = .{ .ordinal = @intFromEnum(res.RT.STRING) },
3233 .type_value = .{ .ordinal = @backingInt(res.RT.STRING) },
32343234 .memory_flags = self.memory_flags,
32353235 .language = language,
32363236 .version = self.version,
lib/compiler/resinator/cvtres.zig+15-15
......@@ -40,7 +40,7 @@ pub const Resource = struct {
4040 }
4141
4242 pub fn isDlgInclude(resource: Resource) bool {
43 return resource.type_value == .ordinal and resource.type_value.ordinal == @intFromEnum(res.RT.DLGINCLUDE);
43 return resource.type_value == .ordinal and resource.type_value.ordinal == @backingInt(res.RT.DLGINCLUDE);
4444 }
4545};
4646
......@@ -306,7 +306,7 @@ pub fn writeCoff(
306306 try writeSymbol(writer, .{
307307 .name = ".rsrc$01".*,
308308 .value = 0,
309 .section_number = @enumFromInt(1),
309 .section_number = @fromBackingInt(@intCast(1)),
310310 .type = .{
311311 .base_type = .NULL,
312312 .complex_type = .NULL,
......@@ -327,7 +327,7 @@ pub fn writeCoff(
327327 try writeSymbol(writer, .{
328328 .name = ".rsrc$02".*,
329329 .value = 0,
330 .section_number = @enumFromInt(2),
330 .section_number = @fromBackingInt(@intCast(2)),
331331 .type = .{
332332 .base_type = .NULL,
333333 .complex_type = .NULL,
......@@ -383,10 +383,10 @@ pub fn writeCoff(
383383fn writeSymbol(writer: *std.Io.Writer, symbol: std.coff.Symbol) !void {
384384 try writer.writeAll(&symbol.name);
385385 try writer.writeInt(u32, symbol.value, .little);
386 try writer.writeInt(i16, @intFromEnum(symbol.section_number), .little);
387 try writer.writeInt(u8, @intFromEnum(symbol.type.base_type), .little);
388 try writer.writeInt(u8, @intFromEnum(symbol.type.complex_type), .little);
389 try writer.writeInt(u8, @intFromEnum(symbol.storage_class), .little);
386 try writer.writeInt(i16, @backingInt(symbol.section_number), .little);
387 try writer.writeInt(u8, @backingInt(symbol.type.base_type), .little);
388 try writer.writeInt(u8, @backingInt(symbol.type.complex_type), .little);
389 try writer.writeInt(u8, @backingInt(symbol.storage_class), .little);
390390 try writer.writeInt(u8, symbol.number_of_aux_symbols, .little);
391391}
392392
......@@ -396,7 +396,7 @@ fn writeSectionDefinition(writer: *std.Io.Writer, def: std.coff.SectionDefinitio
396396 try writer.writeInt(u16, def.number_of_linenumbers, .little);
397397 try writer.writeInt(u32, def.checksum, .little);
398398 try writer.writeInt(u16, def.number, .little);
399 try writer.writeInt(u8, @intFromEnum(def.selection), .little);
399 try writer.writeInt(u8, @backingInt(def.selection), .little);
400400 try writer.writeAll(&def.unused);
401401}
402402
......@@ -890,7 +890,7 @@ const ResourceTree = struct {
890890 symbols[i] = .{
891891 .name = name_buf,
892892 .value = relocation.data_offset,
893 .section_number = @enumFromInt(2),
893 .section_number = @fromBackingInt(@intCast(2)),
894894 .type = .{
895895 .base_type = .NULL,
896896 .complex_type = .NULL,
......@@ -1056,7 +1056,7 @@ pub const supported_targets = struct {
10561056 comptime {
10571057 const info = @typeInfo(Arch).@"enum";
10581058 for (info.field_names, info.field_values) |field_name, field_value| {
1059 _ = std.mem.indexOfScalar(Arch, ordered_for_display, @enumFromInt(field_value)) orelse {
1059 _ = std.mem.indexOfScalar(Arch, ordered_for_display, @fromBackingInt(@intCast(field_value))) orelse {
10601060 @compileError(std.fmt.comptimePrint("'{s}' missing from ordered_for_display", .{field_name}));
10611061 };
10621062 }
......@@ -1089,11 +1089,11 @@ pub const supported_targets = struct {
10891089 // https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#type-indicators
10901090 pub fn rvaRelocationTypeIndicator(target: std.coff.IMAGE.FILE.MACHINE) ?u16 {
10911091 return switch (target) {
1092 .AMD64 => @intFromEnum(std.coff.IMAGE.REL.AMD64.ADDR32NB),
1093 .I386 => @intFromEnum(std.coff.IMAGE.REL.I386.DIR32NB),
1094 .ARMNT => @intFromEnum(std.coff.IMAGE.REL.ARM.ADDR32NB),
1095 .ARM64, .ARM64EC, .ARM64X => @intFromEnum(std.coff.IMAGE.REL.ARM64.ADDR32NB),
1096 .IA64 => @intFromEnum(std.coff.IMAGE.REL.IA64.DIR32NB),
1092 .AMD64 => @backingInt(std.coff.IMAGE.REL.AMD64.ADDR32NB),
1093 .I386 => @backingInt(std.coff.IMAGE.REL.I386.DIR32NB),
1094 .ARMNT => @backingInt(std.coff.IMAGE.REL.ARM.ADDR32NB),
1095 .ARM64, .ARM64EC, .ARM64X => @backingInt(std.coff.IMAGE.REL.ARM64.ADDR32NB),
1096 .IA64 => @backingInt(std.coff.IMAGE.REL.IA64.DIR32NB),
10971097 .EBC => 0x1, // This is what cvtres.exe writes for this target, unsure where it comes from
10981098 else => null,
10991099 };
lib/compiler/resinator/ico.zig+1-1
......@@ -123,7 +123,7 @@ pub const IconDir = struct {
123123
124124 pub fn writeResData(self: IconDir, writer: *std.Io.Writer, first_image_id: u16) !void {
125125 try writer.writeInt(u16, 0, .little);
126 try writer.writeInt(u16, @intFromEnum(self.image_type), .little);
126 try writer.writeInt(u16, @backingInt(self.image_type), .little);
127127 // We know that entries.len must fit into a u16
128128 try writer.writeInt(u16, @as(u16, @intCast(self.entries.len)), .little);
129129
lib/compiler/resinator/lang.zig+1-1
......@@ -74,7 +74,7 @@ test parseInt {
7474pub fn tagToInt(tag: []const u8) error{InvalidLanguageTag}!u16 {
7575 const maybe_id = try tagToId(tag);
7676 if (maybe_id) |id| {
77 return @intFromEnum(id);
77 return @backingInt(id);
7878 } else {
7979 return LOCALE_CUSTOM_UNSPECIFIED;
8080 }
lib/compiler/resinator/parse.zig+4-4
......@@ -151,7 +151,7 @@ pub const Parser = struct {
151151 };
152152 try self.nextToken(.normal);
153153
154 const type_i = @intFromEnum(optional_statement_type);
154 const type_i = @backingInt(optional_statement_type);
155155 if (last_statement_per_type[type_i] != null) {
156156 statement_type_has_duplicates[type_i] = true;
157157 }
......@@ -300,13 +300,13 @@ pub const Parser = struct {
300300 const slice = statement_identifier.slice(self.lexer.buffer);
301301 const optional_statement_type = rc.OptionalStatements.map.get(slice) orelse
302302 rc.OptionalStatements.dialog_map.get(slice).?;
303 break :type_i @intFromEnum(optional_statement_type);
303 break :type_i @backingInt(optional_statement_type);
304304 },
305305 .font_statement => {
306 break :type_i @intFromEnum(rc.OptionalStatements.font);
306 break :type_i @backingInt(rc.OptionalStatements.font);
307307 },
308308 .language_statement => {
309 break :type_i @intFromEnum(rc.OptionalStatements.language);
309 break :type_i @backingInt(rc.OptionalStatements.language);
310310 },
311311 else => unreachable,
312312 }
lib/compiler/resinator/rc.zig+8-8
......@@ -76,7 +76,7 @@ pub const ResourceType = enum {
7676 const maybe_ordinal = res.NameOrOrdinal.maybeOrdinalFromString(bytes);
7777 if (maybe_ordinal) |ordinal| {
7878 if (ordinal.ordinal >= 256) return .user_defined;
79 return fromRT(@enumFromInt(ordinal.ordinal));
79 return fromRT(@fromBackingInt(@intCast(ordinal.ordinal)));
8080 }
8181 return map.get(bytes.slice) orelse .user_defined;
8282 }
......@@ -133,13 +133,13 @@ pub const ResourceType = enum {
133133 .toolbar, .versioninfo, .vxd => @tagName(resource),
134134 // zig fmt: on
135135 .user_defined => "user-defined",
136 .cursor_num => std.fmt.comptimePrint("{d} (cursor)", .{@intFromEnum(res.RT.CURSOR)}),
137 .icon_num => std.fmt.comptimePrint("{d} (icon)", .{@intFromEnum(res.RT.ICON)}),
138 .string_num => std.fmt.comptimePrint("{d} (string)", .{@intFromEnum(res.RT.STRING)}),
139 .anicursor_num => std.fmt.comptimePrint("{d} (anicursor)", .{@intFromEnum(res.RT.ANICURSOR)}),
140 .aniicon_num => std.fmt.comptimePrint("{d} (aniicon)", .{@intFromEnum(res.RT.ANIICON)}),
141 .fontdir_num => std.fmt.comptimePrint("{d} (fontdir)", .{@intFromEnum(res.RT.FONTDIR)}),
142 .manifest_num => std.fmt.comptimePrint("{d} (manifest)", .{@intFromEnum(res.RT.MANIFEST)}),
136 .cursor_num => std.fmt.comptimePrint("{d} (cursor)", .{@backingInt(res.RT.CURSOR)}),
137 .icon_num => std.fmt.comptimePrint("{d} (icon)", .{@backingInt(res.RT.ICON)}),
138 .string_num => std.fmt.comptimePrint("{d} (string)", .{@backingInt(res.RT.STRING)}),
139 .anicursor_num => std.fmt.comptimePrint("{d} (anicursor)", .{@backingInt(res.RT.ANICURSOR)}),
140 .aniicon_num => std.fmt.comptimePrint("{d} (aniicon)", .{@backingInt(res.RT.ANIICON)}),
141 .fontdir_num => std.fmt.comptimePrint("{d} (fontdir)", .{@backingInt(res.RT.FONTDIR)}),
142 .manifest_num => std.fmt.comptimePrint("{d} (manifest)", .{@backingInt(res.RT.MANIFEST)}),
143143 };
144144 }
145145};
lib/compiler/resinator/res.zig+2-2
......@@ -407,7 +407,7 @@ pub const NameOrOrdinal = union(enum) {
407407 switch (self) {
408408 .ordinal => |ordinal| {
409409 if (ordinal >= 256) return null;
410 switch (@as(RT, @enumFromInt(ordinal))) {
410 switch (@as(RT, @fromBackingInt(@intCast(ordinal)))) {
411411 .ACCELERATOR,
412412 .ANICURSOR,
413413 .ANIICON,
......@@ -456,7 +456,7 @@ pub const NameOrOrdinal = union(enum) {
456456 try w.print("{f}", .{std.unicode.fmtUtf16Le(name)});
457457 },
458458 .ordinal => |ordinal| {
459 if (std.enums.tagName(RT, @enumFromInt(ordinal))) |predefined_type_name| {
459 if (std.enums.tagName(RT, @fromBackingInt(@intCast(ordinal)))) |predefined_type_name| {
460460 try w.print("{s}", .{predefined_type_name});
461461 } else {
462462 try w.print("{d}", .{ordinal});
lib/compiler/test_runner.zig+5-5
......@@ -187,7 +187,7 @@ fn mainServer(init: std.process.Init.Minimal) !void {
187187 defer io_instance.deinit();
188188 const io = io_instance.io();
189189
190 const mode: fuzz_abi.LimitKind = @enumFromInt(try server.receiveBody_u8());
190 const mode: fuzz_abi.LimitKind = @fromBackingInt(@intCast(try server.receiveBody_u8()));
191191 const amount_or_instance = try server.receiveBody_u64();
192192 const main_instance = mode == .iterations or amount_or_instance == 0;
193193
......@@ -249,7 +249,7 @@ fn mainServer(init: std.process.Init.Minimal) !void {
249249 },
250250
251251 else => {
252 std.debug.print("unsupported message: {x}\n", .{@intFromEnum(hdr.tag)});
252 std.debug.print("unsupported message: {x}\n", .{@backingInt(hdr.tag)});
253253 std.process.exit(1);
254254 },
255255 }
......@@ -351,10 +351,10 @@ pub fn log(
351351 args: anytype,
352352) void {
353353 @disableInstrumentation();
354 if (@intFromEnum(message_level) <= @intFromEnum(std.log.Level.err)) {
354 if (@backingInt(message_level) <= @backingInt(std.log.Level.err)) {
355355 log_err_count +|= 1;
356356 }
357 if (@intFromEnum(message_level) <= @intFromEnum(testing.log_level)) {
357 if (@backingInt(message_level) <= @backingInt(testing.log_level)) {
358358 std.debug.print(
359359 "[" ++ @tagName(scope) ++ "] (" ++ @tagName(message_level) ++ "): " ++ format ++ "\n",
360360 args,
......@@ -513,7 +513,7 @@ var fuzz_runner: if (builtin.fuzz) struct {
513513 while (true) {
514514 const hdr = try server.receiveMessage();
515515 if (hdr.tag != .new_fuzz_input) {
516 panic("unexpected message: {x}\n", .{@intFromEnum(hdr.tag)});
516 panic("unexpected message: {x}\n", .{@backingInt(hdr.tag)});
517517 }
518518 const test_i = try server.receiveBody_u32();
519519 const input_len = hdr.bytes_len - 4;
lib/compiler/translate-c/ast.zig+10-10
......@@ -252,7 +252,7 @@ pub const Node = extern union {
252252 root_ref,
253253
254254 pub const last_no_payload_tag = Tag.@"break";
255 pub const no_payload_count = @intFromEnum(last_no_payload_tag) + 1;
255 pub const no_payload_count = @backingInt(last_no_payload_tag) + 1;
256256
257257 pub fn Type(comptime t: Tag) type {
258258 return switch (t) {
......@@ -416,8 +416,8 @@ pub const Node = extern union {
416416 }
417417
418418 pub fn init(comptime t: Tag) Node {
419 comptime std.debug.assert(@intFromEnum(t) < Tag.no_payload_count);
420 return .{ .tag_if_small_enough = @intFromEnum(t) };
419 comptime std.debug.assert(@backingInt(t) < Tag.no_payload_count);
420 return .{ .tag_if_small_enough = @backingInt(t) };
421421 }
422422
423423 pub fn create(comptime t: Tag, ally: Allocator, data: Data(t)) error{OutOfMemory}!Node {
......@@ -436,7 +436,7 @@ pub const Node = extern union {
436436
437437 pub fn tag(self: Node) Tag {
438438 if (self.tag_if_small_enough < Tag.no_payload_count) {
439 return @enumFromInt(@as(std.meta.Tag(Tag), @intCast(self.tag_if_small_enough)));
439 return @fromBackingInt(@intCast(@as(std.meta.Tag(Tag), @intCast(self.tag_if_small_enough))));
440440 } else {
441441 return self.ptr_otherwise.tag;
442442 }
......@@ -453,7 +453,7 @@ pub const Node = extern union {
453453 }
454454
455455 pub fn initPayload(payload: *Payload) Node {
456 std.debug.assert(@intFromEnum(payload.tag) >= Tag.no_payload_count);
456 std.debug.assert(@backingInt(payload.tag) >= Tag.no_payload_count);
457457 return .{ .ptr_otherwise = payload };
458458 }
459459
......@@ -913,13 +913,13 @@ const Context = struct {
913913 fn listToSpan(c: *Context, list: []const NodeIndex) Allocator.Error!NodeSubRange {
914914 try c.extra_data.appendSlice(c.gpa, @ptrCast(list));
915915 return .{
916 .start = @enumFromInt(c.extra_data.items.len - list.len),
917 .end = @enumFromInt(c.extra_data.items.len),
916 .start = @fromBackingInt(@intCast(c.extra_data.items.len - list.len)),
917 .end = @fromBackingInt(@intCast(c.extra_data.items.len)),
918918 };
919919 }
920920
921921 fn addNode(c: *Context, elem: std.zig.Ast.Node) Allocator.Error!NodeIndex {
922 const result: NodeIndex = @enumFromInt(c.nodes.len);
922 const result: NodeIndex = @fromBackingInt(@intCast(c.nodes.len));
923923 try c.nodes.append(c.gpa, elem);
924924 return result;
925925 }
......@@ -927,14 +927,14 @@ const Context = struct {
927927 fn addExtra(c: *Context, extra: anytype) Allocator.Error!std.zig.Ast.ExtraIndex {
928928 const info = @typeInfo(@TypeOf(extra)).@"struct";
929929 try c.extra_data.ensureUnusedCapacity(c.gpa, info.field_names.len);
930 const result: std.zig.Ast.ExtraIndex = @enumFromInt(c.extra_data.items.len);
930 const result: std.zig.Ast.ExtraIndex = @fromBackingInt(@intCast(c.extra_data.items.len));
931931 inline for (info.field_names, info.field_types) |field_name, field_type| {
932932 const data: u32 = switch (field_type) {
933933 NodeIndex,
934934 std.zig.Ast.Node.OptionalIndex,
935935 std.zig.Ast.OptionalTokenIndex,
936936 std.zig.Ast.ExtraIndex,
937 => @intFromEnum(@field(extra, field_name)),
937 => @backingInt(@field(extra, field_name)),
938938 TokenIndex,
939939 => @field(extra, field_name),
940940 else => @compileError("unexpected field type"),
lib/compiler/translate-c/main.zig+1-1
......@@ -189,7 +189,7 @@ fn translate(d: *aro.Driver, tc: *aro.Toolchain, args: []const [:0]const u8, zig
189189 if (val_str.len != 1 or val_str[0] < '0' or val_str[0] > '3') {
190190 return d.fatal("-fstrict-flex-arrays= requires a value of '0', '1', '2', or '3'", .{});
191191 }
192 strict_flex_arrays = @enumFromInt(val_str[0] - '0');
192 strict_flex_arrays = @fromBackingInt(@intCast(val_str[0] - '0'));
193193 } else {
194194 aro_args.appendAssumeCapacity(arg);
195195 }
lib/compiler_rt/cmpdf2.zig+1-1
......@@ -25,7 +25,7 @@ comptime {
2525/// Note that this matches the definition of `__ledf2`, `__eqdf2`, `__nedf2`, `__cmpdf2`,
2626/// and `__ltdf2`.
2727fn __cmpdf2(a: f64, b: f64) callconv(.c) i32 {
28 return @intFromEnum(comparef.cmpf2(f64, comparef.LE, a, b));
28 return @backingInt(comparef.cmpf2(f64, comparef.LE, a, b));
2929}
3030
3131/// "These functions return a value less than or equal to zero if neither argument is NaN,
lib/compiler_rt/cmptf2.zig+15-15
......@@ -41,7 +41,7 @@ comptime {
4141/// Note that this matches the definition of `__letf2`, `__eqtf2`, `__netf2`, `__cmptf2`,
4242/// and `__lttf2`.
4343fn __cmptf2(a: f128, b: f128) callconv(.c) i32 {
44 return @intFromEnum(comparef.cmpf2(f128, comparef.LE, a, b));
44 return @backingInt(comparef.cmpf2(f128, comparef.LE, a, b));
4545}
4646
4747/// "These functions return a value less than or equal to zero if neither argument is NaN,
......@@ -78,68 +78,68 @@ const SparcFCMP = enum(i32) {
7878};
7979
8080fn _Qp_cmp(a: *const f128, b: *const f128) callconv(.c) i32 {
81 return @intFromEnum(comparef.cmpf2(f128, SparcFCMP, a.*, b.*));
81 return @backingInt(comparef.cmpf2(f128, SparcFCMP, a.*, b.*));
8282}
8383
8484fn _Qp_feq(a: *const f128, b: *const f128) callconv(.c) bool {
85 return @as(SparcFCMP, @enumFromInt(_Qp_cmp(a, b))) == .Equal;
85 return @as(SparcFCMP, @fromBackingInt(@intCast(_Qp_cmp(a, b)))) == .Equal;
8686}
8787
8888fn _Qp_fne(a: *const f128, b: *const f128) callconv(.c) bool {
89 return @as(SparcFCMP, @enumFromInt(_Qp_cmp(a, b))) != .Equal;
89 return @as(SparcFCMP, @fromBackingInt(@intCast(_Qp_cmp(a, b)))) != .Equal;
9090}
9191
9292fn _Qp_flt(a: *const f128, b: *const f128) callconv(.c) bool {
93 return @as(SparcFCMP, @enumFromInt(_Qp_cmp(a, b))) == .Less;
93 return @as(SparcFCMP, @fromBackingInt(@intCast(_Qp_cmp(a, b)))) == .Less;
9494}
9595
9696fn _Qp_fgt(a: *const f128, b: *const f128) callconv(.c) bool {
97 return @as(SparcFCMP, @enumFromInt(_Qp_cmp(a, b))) == .Greater;
97 return @as(SparcFCMP, @fromBackingInt(@intCast(_Qp_cmp(a, b)))) == .Greater;
9898}
9999
100100fn _Qp_fge(a: *const f128, b: *const f128) callconv(.c) bool {
101 return switch (@as(SparcFCMP, @enumFromInt(_Qp_cmp(a, b)))) {
101 return switch (@as(SparcFCMP, @fromBackingInt(@intCast(_Qp_cmp(a, b))))) {
102102 .Equal, .Greater => true,
103103 .Less, .Unordered => false,
104104 };
105105}
106106
107107fn _Qp_fle(a: *const f128, b: *const f128) callconv(.c) bool {
108 return switch (@as(SparcFCMP, @enumFromInt(_Qp_cmp(a, b)))) {
108 return switch (@as(SparcFCMP, @fromBackingInt(@intCast(_Qp_cmp(a, b))))) {
109109 .Equal, .Less => true,
110110 .Greater, .Unordered => false,
111111 };
112112}
113113
114114fn _Q_cmp(a: f128, b: f128) callconv(.c) i32 {
115 return @intFromEnum(comparef.cmpf2(f128, SparcFCMP, a, b));
115 return @backingInt(comparef.cmpf2(f128, SparcFCMP, a, b));
116116}
117117
118118fn _Q_feq(a: f128, b: f128) callconv(.c) bool {
119 return @as(SparcFCMP, @enumFromInt(_Q_cmp(a, b))) == .Equal;
119 return @as(SparcFCMP, @fromBackingInt(@intCast(_Q_cmp(a, b)))) == .Equal;
120120}
121121
122122fn _Q_fne(a: f128, b: f128) callconv(.c) bool {
123 return @as(SparcFCMP, @enumFromInt(_Q_cmp(a, b))) != .Equal;
123 return @as(SparcFCMP, @fromBackingInt(@intCast(_Q_cmp(a, b)))) != .Equal;
124124}
125125
126126fn _Q_flt(a: f128, b: f128) callconv(.c) bool {
127 return @as(SparcFCMP, @enumFromInt(_Q_cmp(a, b))) == .Less;
127 return @as(SparcFCMP, @fromBackingInt(@intCast(_Q_cmp(a, b)))) == .Less;
128128}
129129
130130fn _Q_fgt(a: f128, b: f128) callconv(.c) bool {
131 return @as(SparcFCMP, @enumFromInt(_Q_cmp(a, b))) == .Greater;
131 return @as(SparcFCMP, @fromBackingInt(@intCast(_Q_cmp(a, b)))) == .Greater;
132132}
133133
134134fn _Q_fge(a: f128, b: f128) callconv(.c) bool {
135 return switch (@as(SparcFCMP, @enumFromInt(_Q_cmp(a, b)))) {
135 return switch (@as(SparcFCMP, @fromBackingInt(@intCast(_Q_cmp(a, b))))) {
136136 .Equal, .Greater => true,
137137 .Less, .Unordered => false,
138138 };
139139}
140140
141141fn _Q_fle(a: f128, b: f128) callconv(.c) bool {
142 return switch (@as(SparcFCMP, @enumFromInt(_Q_cmp(a, b)))) {
142 return switch (@as(SparcFCMP, @fromBackingInt(@intCast(_Q_cmp(a, b))))) {
143143 .Equal, .Less => true,
144144 .Greater, .Unordered => false,
145145 };
lib/compiler_rt/cmpxf2.zig+1-1
......@@ -19,7 +19,7 @@ comptime {
1919/// Note that this matches the definition of `__lexf2`, `__eqxf2`, `__nexf2`, `__cmpxf2`,
2020/// and `__ltxf2`.
2121fn __cmpxf2(a: f80, b: f80) callconv(.c) i32 {
22 return @intFromEnum(comparef.cmp_f80(comparef.LE, a, b));
22 return @backingInt(comparef.cmp_f80(comparef.LE, a, b));
2323}
2424
2525/// "These functions return a value less than or equal to zero if neither argument is NaN,
lib/compiler_rt/comparef.zig+2-2
......@@ -52,7 +52,7 @@ pub fn __unordtf2(a: f128, b: f128) callconv(.c) i32 {
5252/// Note that this matches the definition of `__lesf2`, `__eqsf2`, `__nesf2`, `__cmpsf2`,
5353/// and `__ltsf2`.
5454fn __cmpsf2(a: f32, b: f32) callconv(.c) i32 {
55 return @intFromEnum(cmpf2(f32, LE, a, b));
55 return @backingInt(cmpf2(f32, LE, a, b));
5656}
5757
5858/// "These functions return a value less than or equal to zero if neither argument is NaN,
......@@ -100,7 +100,7 @@ fn __aeabi_fcmple(a: f32, b: f32) callconv(.{ .arm_aapcs = .{} }) i32 {
100100/// Note that this matches the definition of `__lehf2`, `__eqhf2`, `__nehf2`, `__cmphf2`,
101101/// and `__lthf2`.
102102fn __cmphf2(a: f16, b: f16) callconv(.c) i32 {
103 return @intFromEnum(cmpf2(f16, LE, a, b));
103 return @backingInt(cmpf2(f16, LE, a, b));
104104}
105105
106106/// "These functions return a value less than or equal to zero if neither argument is NaN,
lib/compiler_rt/gedf2.zig+1-1
......@@ -17,7 +17,7 @@ comptime {
1717/// "These functions return a value greater than or equal to zero if neither
1818/// argument is NaN, and a is greater than or equal to b."
1919pub fn __gedf2(a: f64, b: f64) callconv(.c) i32 {
20 return @intFromEnum(comparef.cmpf2(f64, comparef.GE, a, b));
20 return @backingInt(comparef.cmpf2(f64, comparef.GE, a, b));
2121}
2222
2323/// "These functions return a value greater than zero if neither argument is NaN,
lib/compiler_rt/gehf2.zig+1-1
......@@ -11,7 +11,7 @@ comptime {
1111/// "These functions return a value greater than or equal to zero if neither
1212/// argument is NaN, and a is greater than or equal to b."
1313pub fn __gehf2(a: f16, b: f16) callconv(.c) i32 {
14 return @intFromEnum(comparef.cmpf2(f16, comparef.GE, a, b));
14 return @backingInt(comparef.cmpf2(f16, comparef.GE, a, b));
1515}
1616
1717/// "These functions return a value greater than zero if neither argument is NaN,
lib/compiler_rt/gesf2.zig+1-1
......@@ -17,7 +17,7 @@ comptime {
1717/// "These functions return a value greater than or equal to zero if neither
1818/// argument is NaN, and a is greater than or equal to b."
1919pub fn __gesf2(a: f32, b: f32) callconv(.c) i32 {
20 return @intFromEnum(comparef.cmpf2(f32, comparef.GE, a, b));
20 return @backingInt(comparef.cmpf2(f32, comparef.GE, a, b));
2121}
2222
2323/// "These functions return a value greater than zero if neither argument is NaN,
lib/compiler_rt/getf2.zig+1-1
......@@ -16,7 +16,7 @@ comptime {
1616/// "These functions return a value greater than or equal to zero if neither
1717/// argument is NaN, and a is greater than or equal to b."
1818fn __getf2(a: f128, b: f128) callconv(.c) i32 {
19 return @intFromEnum(comparef.cmpf2(f128, comparef.GE, a, b));
19 return @backingInt(comparef.cmpf2(f128, comparef.GE, a, b));
2020}
2121
2222/// "These functions return a value greater than zero if neither argument is NaN,
lib/compiler_rt/gexf2.zig+1-1
......@@ -7,7 +7,7 @@ comptime {
77}
88
99fn __gexf2(a: f80, b: f80) callconv(.c) i32 {
10 return @intFromEnum(comparef.cmp_f80(comparef.GE, a, b));
10 return @backingInt(comparef.cmp_f80(comparef.GE, a, b));
1111}
1212
1313fn __gtxf2(a: f80, b: f80) callconv(.c) i32 {
lib/docs/wasm/Decl.zig+2-2
......@@ -24,7 +24,7 @@ pub const Index = enum(u32) {
2424 _,
2525
2626 pub fn get(i: Index) *Decl {
27 return &Walk.decls.items[@intFromEnum(i)];
27 return &Walk.decls.items[@backingInt(i)];
2828 }
2929};
3030
......@@ -130,7 +130,7 @@ pub fn get_child(decl: *const Decl, name: []const u8) ?Decl.Index {
130130 // Find a decl with this function as the parent, with a name matching `name`
131131 for (Walk.decls.items, 0..) |*candidate, i| {
132132 if (candidate.parent != .none and candidate.parent.get() == decl and std.mem.eql(u8, candidate.extra_info().name, name)) {
133 return @enumFromInt(i);
133 return @fromBackingInt(@intCast(i));
134134 }
135135 }
136136
lib/docs/wasm/Walk.zig+5-5
......@@ -68,13 +68,13 @@ pub const File = struct {
6868 .file = i,
6969 .parent = parent_decl,
7070 });
71 const decl_index: Decl.Index = @enumFromInt(decls.items.len - 1);
71 const decl_index: Decl.Index = @fromBackingInt(@intCast(decls.items.len - 1));
7272 try i.get().node_decls.put(gpa, node, decl_index);
7373 return decl_index;
7474 }
7575
7676 pub fn get(i: File.Index) *File {
77 return &files.values()[@intFromEnum(i)];
77 return &files.values()[@backingInt(i)];
7878 }
7979
8080 pub fn get_ast(i: File.Index) *Ast {
......@@ -82,7 +82,7 @@ pub const File = struct {
8282 }
8383
8484 pub fn path(i: File.Index) []const u8 {
85 return files.keys()[@intFromEnum(i)];
85 return files.keys()[@backingInt(i)];
8686 }
8787
8888 pub fn findRootDecl(file_index: File.Index) Decl.Index {
......@@ -329,7 +329,7 @@ pub const File = struct {
329329 base_path, file_path, resolved_path,
330330 });
331331 if (files.getIndex(resolved_path)) |imported_file_index| {
332 return .{ .alias = File.Index.findRootDecl(@enumFromInt(imported_file_index)) };
332 return .{ .alias = File.Index.findRootDecl(@fromBackingInt(@intCast(imported_file_index))) };
333333 } else {
334334 log.warn("import target '{s}' did not resolve to any file", .{resolved_path});
335335 }
......@@ -388,7 +388,7 @@ pub const ModuleIndex = enum(u32) {
388388pub fn add_file(file_name: []const u8, bytes: []u8) !File.Index {
389389 const ast = try parse(file_name, bytes);
390390 assert(ast.errors.len == 0);
391 const file_index: File.Index = @enumFromInt(files.entries.len);
391 const file_index: File.Index = @fromBackingInt(@intCast(files.entries.len));
392392 try files.put(gpa, file_name, .{ .ast = ast });
393393
394394 var w: Walk = .{
lib/docs/wasm/main.zig+9-9
......@@ -90,7 +90,7 @@ export fn query_exec(ignore_case: bool) [*]Decl.Index {
9090 query_exec_fallible(query, ignore_case) catch |err| switch (err) {
9191 error.OutOfMemory => @panic("OOM"),
9292 };
93 query_results.items[0] = @enumFromInt(query_results.items.len - 1);
93 query_results.items[0] = @fromBackingInt(@intCast(query_results.items.len - 1));
9494 return query_results.items.ptr;
9595}
9696
......@@ -165,7 +165,7 @@ fn query_exec_fallible(query: []const u8, ignore_case: bool) !void {
165165 }
166166
167167 if (query_results.items.len < max_matched_items or bypass_limit) {
168 try query_results.append(gpa, @enumFromInt(decl_index));
168 try query_results.append(gpa, @fromBackingInt(@intCast(decl_index)));
169169 try g.scores.append(gpa, .{
170170 .points = points,
171171 .segments = @intCast(count_scalar(g.full_path_search_text.items, '.')),
......@@ -717,8 +717,8 @@ fn render_docs(
717717 node: markdown.Document.Node.Index,
718718 writer: *Writer,
719719 ) Writer.Error!void {
720 const data = doc.nodes.items(.data)[@intFromEnum(node)];
721 switch (doc.nodes.items(.tag)[@intFromEnum(node)]) {
720 const data = doc.nodes.items(.data)[@backingInt(node)];
721 switch (doc.nodes.items(.tag)[@backingInt(node)]) {
722722 .code_span => {
723723 try writer.writeAll("<code>");
724724 const content = doc.string(data.text.content);
......@@ -806,7 +806,7 @@ fn unpackInner(tar_bytes: []u8) !void {
806806 if (std.mem.indexOfScalar(u8, file_name, '/')) |pkg_name_end| {
807807 const pkg_name = file_name[0..pkg_name_end];
808808 const gop = try Walk.modules.getOrPut(gpa, pkg_name);
809 const file: Walk.File.Index = @enumFromInt(Walk.files.entries.len);
809 const file: Walk.File.Index = @fromBackingInt(@intCast(Walk.files.entries.len));
810810 if (!gop.found_existing or
811811 std.mem.eql(u8, file_name[pkg_name_end..], "/root.zig") or
812812 std.mem.eql(u8, file_name[pkg_name_end + 1 .. file_name.len - ".zig".len], pkg_name))
......@@ -837,7 +837,7 @@ export fn module_name(index: u32) String {
837837}
838838
839839export fn find_module_root(pkg: Walk.ModuleIndex) Decl.Index {
840 const root_file = Walk.modules.values()[@intFromEnum(pkg)];
840 const root_file = Walk.modules.values()[@backingInt(pkg)];
841841 const result = root_file.findRootDecl();
842842 assert(result != .none);
843843 return result;
......@@ -854,7 +854,7 @@ export fn set_input_string(len: usize) [*]u8 {
854854/// Looks up the root struct decl corresponding to a file by path.
855855/// Uses `input_string`.
856856export fn find_file_root() Decl.Index {
857 const file: Walk.File.Index = @enumFromInt(Walk.files.getIndex(input_string.items) orelse return .none);
857 const file: Walk.File.Index = @fromBackingInt(@intCast(Walk.files.getIndex(input_string.items) orelse return .none));
858858 return file.findRootDecl();
859859}
860860
......@@ -874,7 +874,7 @@ export fn find_decl() Decl.Index {
874874 if (std.mem.eql(u8, g.match_fqn.items, input_string.items)) {
875875 //const path = @as(Decl.Index, @enumFromInt(decl_index)).get().file.path();
876876 //log.debug("find_decl '{s}' found in {s}", .{ input_string.items, path });
877 return @enumFromInt(decl_index);
877 return @fromBackingInt(@intCast(decl_index));
878878 }
879879 }
880880 return .none;
......@@ -930,7 +930,7 @@ export fn namespace_members(parent: Decl.Index, include_private: bool) Slice(Dec
930930 for (Walk.decls.items, 0..) |*decl, i| {
931931 if (decl.parent == parent) {
932932 if (include_private or decl.is_pub()) {
933 g.members.append(gpa, @enumFromInt(i)) catch @panic("OOM");
933 g.members.append(gpa, @fromBackingInt(@intCast(i))) catch @panic("OOM");
934934 }
935935 }
936936 }
lib/docs/wasm/markdown/Document.zig+4-4
......@@ -126,8 +126,8 @@ pub const Node = struct {
126126
127127 pub fn asNumber(start: ListStart) ?u30 {
128128 if (start == .unordered) return null;
129 assert(@intFromEnum(start) <= 999_999_999);
130 return @intFromEnum(start);
129 assert(@backingInt(start) <= 999_999_999);
130 return @backingInt(start);
131131 }
132132 };
133133
......@@ -171,7 +171,7 @@ pub fn ExtraData(comptime T: type) type {
171171
172172pub fn extraData(doc: Document, comptime T: type, index: ExtraIndex) ExtraData(T) {
173173 const info = @typeInfo(T).@"struct";
174 var i: usize = @intFromEnum(index);
174 var i: usize = @backingInt(index);
175175 var result: T = undefined;
176176 inline for (info.field_names, info.field_types) |field_name, field_type| {
177177 @field(result, field_name) = switch (field_type) {
......@@ -189,6 +189,6 @@ pub fn extraChildren(doc: Document, index: ExtraIndex) []const Node.Index {
189189}
190190
191191pub fn string(doc: Document, index: StringIndex) [:0]const u8 {
192 const start = @intFromEnum(index);
192 const start = @backingInt(index);
193193 return std.mem.span(@as([*:0]u8, @ptrCast(doc.string_bytes[start..].ptr)));
194194}
lib/docs/wasm/markdown/Parser.zig+10-10
......@@ -444,7 +444,7 @@ fn appendBlockStart(p: *Parser, block_start: BlockStart) !void {
444444 const header_data = datas[p.scratch_extra.getLast().?];
445445 for (p.extraChildren(header_data.container.children), 0..) |header_cell, i| {
446446 const alignment = if (i < alignments.len) alignments[i] else .unset;
447 const cell_data = &datas[@intFromEnum(header_cell)].table_cell;
447 const cell_data = &datas[@backingInt(header_cell)].table_cell;
448448 cell_data.info.alignment = alignment;
449449 cell_data.info.header = true;
450450 }
......@@ -847,7 +847,7 @@ fn closeLastBlock(p: *Parser) !void {
847847 .tag = .list,
848848 .data = .{ .list = .{
849849 .start = switch (b.data.list.marker) {
850 .number_dot, .number_paren => @enumFromInt(b.data.list.start),
850 .number_dot, .number_paren => @fromBackingInt(@intCast(b.data.list.start)),
851851 .@"-", .@"*", .@"+" => .unordered,
852852 },
853853 .children = children,
......@@ -1087,7 +1087,7 @@ const InlineParser = struct {
10871087 }
10881088 }
10891089 try ip.parent.string_bytes.append(ip.parent.allocator, 0);
1090 return @enumFromInt(string_top);
1090 return @fromBackingInt(@intCast(string_top));
10911091 }
10921092
10931093 /// Parses an autolink, starting at the opening `<`. `ip.pos` is left at the
......@@ -1478,7 +1478,7 @@ const InlineParser = struct {
14781478 try ip.parent.addScratchExtraNode(try ip.parent.addNode(.{
14791479 .tag = .text,
14801480 .data = .{ .text = .{
1481 .content = @enumFromInt(string_start),
1481 .content = @fromBackingInt(@intCast(string_start)),
14821482 } },
14831483 }));
14841484 string_start = ip.parent.string_bytes.items.len;
......@@ -1495,7 +1495,7 @@ const InlineParser = struct {
14951495 try ip.parent.addScratchExtraNode(try ip.parent.addNode(.{
14961496 .tag = .text,
14971497 .data = .{ .text = .{
1498 .content = @enumFromInt(string_start),
1498 .content = @fromBackingInt(@intCast(string_start)),
14991499 } },
15001500 }));
15011501 }
......@@ -1575,7 +1575,7 @@ fn parseInlines(p: *Parser, content: []const u8) !ExtraIndex {
15751575
15761576pub fn extraData(p: Parser, comptime T: type, index: ExtraIndex) ExtraData(T) {
15771577 const info = @typeInfo(T).@"struct";
1578 var i: usize = @intFromEnum(index);
1578 var i: usize = @backingInt(index);
15791579 var result: T = undefined;
15801580 inline for (info.field_names, info.field_types) |field_name, field_type| {
15811581 @field(result, field_name) = switch (field_type) {
......@@ -1593,7 +1593,7 @@ pub fn extraChildren(p: Parser, index: ExtraIndex) []const Node.Index {
15931593}
15941594
15951595fn addNode(p: *Parser, node: Node) !Node.Index {
1596 const index: Node.Index = @enumFromInt(@as(u32, @intCast(p.nodes.len)));
1596 const index: Node.Index = @fromBackingInt(@intCast(@as(u32, @intCast(p.nodes.len))));
15971597 try p.nodes.append(p.allocator, node);
15981598 return index;
15991599}
......@@ -1601,7 +1601,7 @@ fn addNode(p: *Parser, node: Node) !Node.Index {
16011601fn addString(p: *Parser, s: []const u8) !StringIndex {
16021602 if (s.len == 0) return .empty;
16031603
1604 const index: StringIndex = @enumFromInt(@as(u32, @intCast(p.string_bytes.items.len)));
1604 const index: StringIndex = @fromBackingInt(@intCast(@as(u32, @intCast(p.string_bytes.items.len))));
16051605 try p.string_bytes.ensureUnusedCapacity(p.allocator, s.len + 1);
16061606 p.string_bytes.appendSliceAssumeCapacity(s);
16071607 p.string_bytes.appendAssumeCapacity(0);
......@@ -1609,7 +1609,7 @@ fn addString(p: *Parser, s: []const u8) !StringIndex {
16091609}
16101610
16111611fn addExtraChildren(p: *Parser, nodes: []const Node.Index) !ExtraIndex {
1612 const index: ExtraIndex = @enumFromInt(@as(u32, @intCast(p.extra.items.len)));
1612 const index: ExtraIndex = @fromBackingInt(@intCast(@as(u32, @intCast(p.extra.items.len))));
16131613 try p.extra.ensureUnusedCapacity(p.allocator, nodes.len + 1);
16141614 p.extra.appendAssumeCapacity(@intCast(nodes.len));
16151615 p.extra.appendSliceAssumeCapacity(@ptrCast(nodes));
......@@ -1617,7 +1617,7 @@ fn addExtraChildren(p: *Parser, nodes: []const Node.Index) !ExtraIndex {
16171617}
16181618
16191619fn addScratchExtraNode(p: *Parser, node: Node.Index) !void {
1620 try p.scratch_extra.append(p.allocator, @intFromEnum(node));
1620 try p.scratch_extra.append(p.allocator, @backingInt(node));
16211621}
16221622
16231623fn addScratchStringLine(p: *Parser, line: []const u8) !void {
lib/docs/wasm/markdown/renderer.zig+6-6
......@@ -31,8 +31,8 @@ pub fn Renderer(comptime Context: type) type {
3131 node: Node.Index,
3232 writer: *Writer,
3333 ) Writer.Error!void {
34 const data = doc.nodes.items(.data)[@intFromEnum(node)];
35 switch (doc.nodes.items(.tag)[@intFromEnum(node)]) {
34 const data = doc.nodes.items(.data)[@backingInt(node)];
35 switch (doc.nodes.items(.tag)[@backingInt(node)]) {
3636 .root => {
3737 for (doc.extraChildren(data.container.children)) |child| {
3838 try r.renderFn(r, doc, child, writer);
......@@ -60,8 +60,8 @@ pub fn Renderer(comptime Context: type) type {
6060 .list_item => {
6161 try writer.writeAll("<li>");
6262 for (doc.extraChildren(data.list_item.children)) |child| {
63 if (data.list_item.tight and doc.nodes.items(.tag)[@intFromEnum(child)] == .paragraph) {
64 const para_data = doc.nodes.items(.data)[@intFromEnum(child)];
63 if (data.list_item.tight and doc.nodes.items(.tag)[@backingInt(child)] == .paragraph) {
64 const para_data = doc.nodes.items(.data)[@backingInt(child)];
6565 for (doc.extraChildren(para_data.container.children)) |para_child| {
6666 try r.renderFn(r, doc, para_child, writer);
6767 }
......@@ -191,8 +191,8 @@ pub fn renderInlineNodeText(
191191 node: Node.Index,
192192 writer: *Writer,
193193) Writer.Error!void {
194 const data = doc.nodes.items(.data)[@intFromEnum(node)];
195 switch (doc.nodes.items(.tag)[@intFromEnum(node)]) {
194 const data = doc.nodes.items(.data)[@backingInt(node)];
195 switch (doc.nodes.items(.tag)[@backingInt(node)]) {
196196 .root,
197197 .list,
198198 .list_item,
lib/fuzzer.zig+29-29
......@@ -830,7 +830,7 @@ const Fuzzer = struct {
830830 .seen_uids = .empty,
831831
832832 .corpus = .empty,
833 .corpus_pos = @enumFromInt(0),
833 .corpus_pos = @fromBackingInt(@intCast(0)),
834834 .start_mut_corpus = math.maxInt(u32),
835835 .dirname = dirname,
836836 .lock_file = lock_file,
......@@ -965,14 +965,14 @@ const Fuzzer = struct {
965965 var i: usize = t.start_mut_corpus;
966966 while (i < t.corpus.len) {
967967 if (ref[i].best_i_len == 0) {
968 f.removeInput(@enumFromInt(i));
968 f.removeInput(@fromBackingInt(@intCast(i)));
969969 } else {
970970 i += 1;
971971 }
972972 }
973973 }
974974
975 t.corpus_pos = @enumFromInt(0);
975 t.corpus_pos = @fromBackingInt(@intCast(0));
976976 }
977977
978978 const CorpusFileName = struct {
......@@ -1084,12 +1084,12 @@ const Fuzzer = struct {
10841084
10851085 fn removeBest(f: *Fuzzer, i: Input.Index, best_i: u32) void {
10861086 const t = &f.tests[f.test_i];
1087 const ref = &t.corpus.items(.ref)[@intFromEnum(i)];
1087 const ref = &t.corpus.items(.ref)[@backingInt(i)];
10881088 const list_i = mem.indexOfScalar(u32, ref.best_i_buf[0..ref.best_i_len], best_i).?;
10891089 ref.best_i_len -= 1;
10901090 ref.best_i_buf[list_i] = ref.best_i_buf[ref.best_i_len];
10911091
1092 if (ref.best_i_len == 0 and @intFromEnum(i) >= t.start_mut_corpus) {
1092 if (ref.best_i_len == 0 and @backingInt(i) >= t.start_mut_corpus) {
10931093 // The input is no longer valuable, so remove it.
10941094 f.removeInput(i);
10951095 }
......@@ -1097,10 +1097,10 @@ const Fuzzer = struct {
10971097
10981098 fn removeInput(f: *Fuzzer, i: Input.Index) void {
10991099 const t = &f.tests[f.test_i];
1100 const ref = &t.corpus.items(.ref)[@intFromEnum(i)];
1101 assert(ref.best_i_len == 0 and @intFromEnum(i) >= t.start_mut_corpus);
1100 const ref = &t.corpus.items(.ref)[@backingInt(i)];
1101 assert(ref.best_i_len == 0 and @backingInt(i) >= t.start_mut_corpus);
11021102
1103 var removed_input = t.corpus.get(@intFromEnum(i));
1103 var removed_input = t.corpus.get(@backingInt(i));
11041104 for (
11051105 removed_input.data.uid_slices.keys(),
11061106 removed_input.data.uid_slices.values(),
......@@ -1135,18 +1135,18 @@ const Fuzzer = struct {
11351135 }
11361136 }
11371137 removed_input.deinit();
1138 t.corpus.swapRemove(@intFromEnum(i));
1138 t.corpus.swapRemove(@backingInt(i));
11391139
1140 if (@intFromEnum(i) != t.corpus.len) {
1140 if (@backingInt(i) != t.corpus.len) {
11411141 // The last item was moved so its refs need updated.
11421142 // `ref` can be reused since it was a swap remove.
11431143 for (ref.best_i_buf[0..ref.best_i_len]) |update_pc_i| {
11441144 const best = &t.bests.input_buf[update_pc_i];
1145 assert(@intFromEnum(best.min) == t.corpus.len or
1146 @intFromEnum(best.max) == t.corpus.len);
1145 assert(@backingInt(best.min) == t.corpus.len or
1146 @backingInt(best.max) == t.corpus.len);
11471147
1148 if (@intFromEnum(best.min) == t.corpus.len) best.min = i;
1149 if (@intFromEnum(best.max) == t.corpus.len) best.max = i;
1148 if (@backingInt(best.min) == t.corpus.len) best.min = i;
1149 if (@backingInt(best.max) == t.corpus.len) best.max = i;
11501150 }
11511151 }
11521152
......@@ -1161,8 +1161,8 @@ const Fuzzer = struct {
11611161 }) catch |e| panic("failed to open '{s}': {t}", .{ readlock_name, e });
11621162 defer readlock_file.close(io);
11631163
1164 const removed_name = removed_cname.inputName(@intFromEnum(i) - t.start_mut_corpus);
1165 if (@intFromEnum(i) == t.corpus.len) {
1164 const removed_name = removed_cname.inputName(@backingInt(i) - t.start_mut_corpus);
1165 if (@backingInt(i) == t.corpus.len) {
11661166 exec.cache_f.deleteFile(io, removed_name) catch |e| panic(
11671167 "failed to remove corpus file '{s}': {t}",
11681168 .{ removed_name, e },
......@@ -1201,7 +1201,7 @@ const Fuzzer = struct {
12011201 // omitted (i.e. test corpus inputs and filesystem inputs cannot be dropped)
12021202 ) {
12031203 f.input_builder.reset();
1204 t.corpus_pos = @enumFromInt(0);
1204 t.corpus_pos = @fromBackingInt(@intCast(0));
12051205 return;
12061206 }
12071207
......@@ -1250,7 +1250,7 @@ const Fuzzer = struct {
12501250 }
12511251
12521252 // Must come after the above since some inputs may be removed
1253 const input_i: Input.Index = @enumFromInt(t.corpus.len);
1253 const input_i: Input.Index = @fromBackingInt(@intCast(t.corpus.len));
12541254 if (input_i == Input.Index.reserved_start) {
12551255 @panic("corpus size limit exceeded");
12561256 }
......@@ -1295,7 +1295,7 @@ const Fuzzer = struct {
12951295 if (best_i_list.items.len == 0 and new_is_mut) {
12961296 assert(best_i_list.capacity == 0);
12971297 f.input_builder.reset();
1298 t.corpus_pos = @enumFromInt(0);
1298 t.corpus_pos = @fromBackingInt(@intCast(0));
12991299 return;
13001300 }
13011301
......@@ -1338,7 +1338,7 @@ const Fuzzer = struct {
13381338 _ = @atomicRmw(usize, &exec.seenPcsHeader().unique_runs, .Add, 1, .monotonic);
13391339 // Write new input to the cache
13401340 var cname: CorpusFileName = .fromTest(t.dirname);
1341 const name = cname.inputName(@intFromEnum(input_i) - t.start_mut_corpus);
1341 const name = cname.inputName(@backingInt(input_i) - t.start_mut_corpus);
13421342 exec.cache_f.writeFile(io, .{ .sub_path = name, .data = bytes, .flags = .{
13431343 .exclusive = true,
13441344 } }) catch |e| panic("failed to write corpus file '{s}': {t}", .{ name, e });
......@@ -1377,7 +1377,7 @@ const Fuzzer = struct {
13771377
13781378 const t = &f.tests[f.test_i];
13791379 const corpus = t.corpus.slice();
1380 const corpus_i = @intFromEnum(t.corpus_pos);
1380 const corpus_i = @backingInt(t.corpus_pos);
13811381
13821382 var small_entronopy: SmallEntronopy = .{ .bits = f.rngInt(u64) };
13831383 var n_mutate = mutCount(small_entronopy.take(u16));
......@@ -1436,8 +1436,8 @@ const Fuzzer = struct {
14361436 abi.runner_broadcast_input(f.test_i, .fromSlice(f.mmap_input.inputSlice()));
14371437 f.newInput();
14381438 } else {
1439 assert(@intFromEnum(t.corpus_pos) < t.corpus.len);
1440 t.corpus_pos = @enumFromInt((@intFromEnum(t.corpus_pos) + 1) % t.corpus.len);
1439 assert(@backingInt(t.corpus_pos) < t.corpus.len);
1440 t.corpus_pos = @fromBackingInt(@intCast((@backingInt(t.corpus_pos) + 1) % t.corpus.len));
14411441 }
14421442 f.mmap_input.clearRetainingCapacity();
14431443 }
......@@ -1669,7 +1669,7 @@ const Fuzzer = struct {
16691669 } {
16701670 const t = &f.tests[f.test_i];
16711671 const corpus = t.corpus.slice();
1672 const corpus_i = @intFromEnum(t.corpus_pos);
1672 const corpus_i = @backingInt(t.corpus_pos);
16731673 const data = &corpus.items(.data)[corpus_i];
16741674 var small_entronopy: SmallEntronopy = .{ .bits = f.rngInt(u64) };
16751675
......@@ -1689,7 +1689,7 @@ const Fuzzer = struct {
16891689 f.uid_data_i.items[uid_i] += 1;
16901690 const mut_i = std.simd.firstIndexOfValue(
16911691 @as(@Vector(4, u32), f.mut_data.i),
1692 data_i + @as(u32, @intCast(data.ints.len)) * @intFromEnum(uid.kind),
1692 data_i + @as(u32, @intCast(data.ints.len)) * @backingInt(uid.kind),
16931693 ) orelse {
16941694 @branchHint(.likely);
16951695 switch (uid.kind) {
......@@ -1918,7 +1918,7 @@ const Fuzzer = struct {
19181918 pub fn nextInt(f: *Fuzzer, uid: Uid, weights: []const abi.Weight) u64 {
19191919 const t = &f.tests[f.test_i];
19201920 f.req_values += 1;
1921 if (@intFromEnum(t.corpus_pos) >= @intFromEnum(Input.Index.reserved_start)) {
1921 if (@backingInt(t.corpus_pos) >= @backingInt(Input.Index.reserved_start)) {
19221922 @branchHint(.unlikely);
19231923 const int = f.bytes_input.valueWeightedWithHash(u64, weights, undefined);
19241924 if (t.corpus_pos == .bytes_fresh) {
......@@ -1942,7 +1942,7 @@ const Fuzzer = struct {
19421942 pub fn nextEos(f: *Fuzzer, uid: Uid, weights: []const abi.Weight) bool {
19431943 const t = &f.tests[f.test_i];
19441944 f.req_values += 1;
1945 if (@intFromEnum(t.corpus_pos) >= @intFromEnum(Input.Index.reserved_start)) {
1945 if (@backingInt(t.corpus_pos) >= @backingInt(Input.Index.reserved_start)) {
19461946 @branchHint(.unlikely);
19471947 const eos = f.bytes_input.eosWeightedWithHash(weights, undefined);
19481948 if (t.corpus_pos == .bytes_fresh) {
......@@ -2059,7 +2059,7 @@ const Fuzzer = struct {
20592059 f.req_values += 1;
20602060 f.req_bytes +%= @truncate(out.len); // This function should panic since the 32-bit
20612061 // data limit is exceeded, so wrapping is fine.
2062 if (@intFromEnum(t.corpus_pos) >= @intFromEnum(Input.Index.reserved_start)) {
2062 if (@backingInt(t.corpus_pos) >= @backingInt(Input.Index.reserved_start)) {
20632063 @branchHint(.unlikely);
20642064 f.bytes_input.bytesWeightedWithHash(out, weights, undefined);
20652065 if (t.corpus_pos == .bytes_fresh) {
......@@ -2149,7 +2149,7 @@ const Fuzzer = struct {
21492149 ) u32 {
21502150 const t = &f.tests[f.test_i];
21512151 f.req_values += 1;
2152 if (@intFromEnum(t.corpus_pos) >= @intFromEnum(Input.Index.reserved_start)) {
2152 if (@backingInt(t.corpus_pos) >= @backingInt(Input.Index.reserved_start)) {
21532153 @branchHint(.unlikely);
21542154 const n = f.bytes_input.sliceWeightedWithHash(
21552155 buf,
lib/std/Build.zig+2-2
......@@ -145,7 +145,7 @@ pub const Graph = struct {
145145
146146 pub fn addGeneratedFile(graph: *Graph, owner: *Step) Configuration.GeneratedFileIndex {
147147 graph.generated_files.append(graph.arena, owner) catch @panic("OOM");
148 return @enumFromInt(graph.generated_files.items.len - 1);
148 return @fromBackingInt(@intCast(graph.generated_files.items.len - 1));
149149 }
150150
151151 pub fn dupeString(graph: *const Graph, bytes: []const u8) []const u8 {
......@@ -2607,7 +2607,7 @@ pub const LazyPath = union(enum) {
26072607 .src_path, .cwd_relative, .relative, .dependency => {},
26082608 .generated => |gen| {
26092609 const graph = other_step.owner.graph;
2610 const generated_owner_step = graph.generated_files.items[@intFromEnum(gen.index)];
2610 const generated_owner_step = graph.generated_files.items[@backingInt(gen.index)];
26112611 other_step.dependOn(generated_owner_step);
26122612 },
26132613 }
lib/std/Build/Configuration.zig+64-64
......@@ -109,7 +109,7 @@ pub const Wip = struct {
109109 }
110110
111111 pub fn hash(ctx: @This(), key: String) u64 {
112 return std.hash_map.hashString(std.mem.sliceTo(ctx.bytes[@intFromEnum(key)..], 0));
112 return std.hash_map.hashString(std.mem.sliceTo(ctx.bytes[@backingInt(key)..], 0));
113113 }
114114 };
115115
......@@ -117,7 +117,7 @@ pub const Wip = struct {
117117 bytes: []const u8,
118118
119119 pub fn eql(ctx: @This(), a: []const u8, b: String) bool {
120 return std.mem.eql(u8, a, std.mem.sliceTo(ctx.bytes[@intFromEnum(b)..], 0));
120 return std.mem.eql(u8, a, std.mem.sliceTo(ctx.bytes[@backingInt(b)..], 0));
121121 }
122122
123123 pub fn hash(_: @This(), adapted_key: []const u8) u64 {
......@@ -192,7 +192,7 @@ pub const Wip = struct {
192192 if (gop.found_existing) return gop.key_ptr.*;
193193
194194 try wip.string_bytes.ensureUnusedCapacity(gpa, bytes.len + 1);
195 const new_off: String = @enumFromInt(wip.string_bytes.items.len);
195 const new_off: String = @fromBackingInt(@intCast(wip.string_bytes.items.len));
196196
197197 wip.string_bytes.appendSliceAssumeCapacity(bytes);
198198 wip.string_bytes.appendAssumeCapacity(0);
......@@ -213,7 +213,7 @@ pub const Wip = struct {
213213 const revert_index: u32 = @intCast(wip.extra.items.len);
214214 const added = try wip.extra.addManyAsSlice(gpa, list.len + 1);
215215 added[0] = @intCast(list.len);
216 for (added[1..], list) |*d, s| d.* = @intFromEnum(try addString(wip, s));
216 for (added[1..], list) |*d, s| d.* = @backingInt(try addString(wip, s));
217217 const gop = try wip.dedupe_table.getOrPutContext(gpa, .{
218218 .index = revert_index,
219219 .len = @intCast(added.len),
......@@ -221,10 +221,10 @@ pub const Wip = struct {
221221
222222 if (gop.found_existing) {
223223 wip.extra.items.len = revert_index;
224 return @enumFromInt(gop.key_ptr.index);
224 return @fromBackingInt(@intCast(gop.key_ptr.index));
225225 }
226226
227 return @enumFromInt(revert_index);
227 return @fromBackingInt(@intCast(revert_index));
228228 }
229229
230230 pub fn addBytes(wip: *Wip, bytes: []const u8) Allocator.Error!Bytes {
......@@ -296,7 +296,7 @@ pub const Wip = struct {
296296 .extra = wip.extra.items,
297297 }));
298298 if (gop.found_existing) {
299 wip.extra.items.len = @intFromEnum(result_index);
299 wip.extra.items.len = @backingInt(result_index);
300300 return .init(gop.key_ptr.*);
301301 } else {
302302 return .init(result_index);
......@@ -371,7 +371,7 @@ pub const Wip = struct {
371371 .extra = wip.extra.items,
372372 }));
373373 if (gop.found_existing) {
374 wip.extra.items.len = @intFromEnum(result_index);
374 wip.extra.items.len = @backingInt(result_index);
375375 return gop.key_ptr.*;
376376 } else {
377377 return result_index;
......@@ -410,14 +410,14 @@ pub const Wip = struct {
410410
411411 if (gop.found_existing) {
412412 wip.extra.items.len = revert_index;
413 return @enumFromInt(gop.key_ptr.index);
413 return @fromBackingInt(@intCast(gop.key_ptr.index));
414414 }
415415
416 return @enumFromInt(new_index);
416 return @fromBackingInt(@intCast(new_index));
417417 }
418418
419419 pub fn addExtraReserved(wip: *Wip, comptime T: type, v: T) T.Index {
420 return @enumFromInt(addExtraReservedErased(wip, T, v));
420 return @fromBackingInt(@intCast(addExtraReservedErased(wip, T, v)));
421421 }
422422
423423 pub fn addExtraReservedErased(wip: *Wip, comptime T: type, v: T) u32 {
......@@ -428,17 +428,17 @@ pub const Wip = struct {
428428
429429 fn addExtraOptionalStringAssumeCapacity(wip: *Wip, optional_string: ?String) void {
430430 const string = optional_string orelse return;
431 wip.extra.appendAssumeCapacity(@intFromEnum(string));
431 wip.extra.appendAssumeCapacity(@backingInt(string));
432432 }
433433
434434 pub fn addGeneratedFile(wip: *Wip) GeneratedFileIndex {
435435 defer wip.next_generated_file_index += 1;
436 return @enumFromInt(wip.next_generated_file_index);
436 return @fromBackingInt(@intCast(wip.next_generated_file_index));
437437 }
438438
439439 /// Returned slice expires upon next append to the configuration.
440440 pub fn stringSlice(wip: *const Wip, s: String) [:0]const u8 {
441 const start_slice = wip.string_bytes.items[@intFromEnum(s)..];
441 const start_slice = wip.string_bytes.items[@backingInt(s)..];
442442 return start_slice[0..std.mem.indexOfScalar(u8, start_slice, 0).? :0];
443443 }
444444};
......@@ -503,7 +503,7 @@ pub const Step = extern struct {
503503 _,
504504
505505 pub fn ptr(i: Index, c: *const Configuration) *const Step {
506 return &c.steps[@intFromEnum(i)];
506 return &c.steps[@backingInt(i)];
507507 }
508508 };
509509
......@@ -1134,7 +1134,7 @@ pub const Step = extern struct {
11341134 .undef => .undef,
11351135 .defined => .defined,
11361136 _ => {
1137 const value = extraData(c, Value, @intFromEnum(this));
1137 const value = extraData(c, Value, @backingInt(this));
11381138 return switch (value.flags.tag) {
11391139 .ident => .{ .ident = value.ident.value.?.slice(c) },
11401140 .string => .{ .string = value.string.value.?.slice(c) },
......@@ -1457,7 +1457,7 @@ pub const Step = extern struct {
14571457 };
14581458
14591459 pub fn flags(s: *const Step, c: *const Configuration) Flags {
1460 return @bitCast(c.extra[@intFromEnum(s.extended)]);
1460 return @bitCast(c.extra[@backingInt(s.extended)]);
14611461 }
14621462};
14631463
......@@ -1466,12 +1466,12 @@ pub const MaxRss = enum(u32) {
14661466 _,
14671467
14681468 pub fn toBytes(mr: MaxRss) u64 {
1469 const x: usize = @intFromEnum(mr);
1469 const x: usize = @backingInt(mr);
14701470 return x << 8;
14711471 }
14721472
14731473 pub fn fromBytes(bytes: u64) MaxRss {
1474 return @enumFromInt(bytes >> 8);
1474 return @fromBackingInt(@intCast(bytes >> 8));
14751475 }
14761476};
14771477
......@@ -1499,7 +1499,7 @@ pub const LazyPath = union(@This().Tag) {
14991499 _,
15001500
15011501 pub fn get(this: @This(), c: *const Configuration) LazyPath {
1502 return extraData(c, LazyPath, @intFromEnum(this));
1502 return extraData(c, LazyPath, @backingInt(this));
15031503 }
15041504 };
15051505
......@@ -1511,7 +1511,7 @@ pub const LazyPath = union(@This().Tag) {
15111511 pub fn unwrap(this: @This()) ?Index {
15121512 return switch (this) {
15131513 .none => null,
1514 else => @enumFromInt(@intFromEnum(this)),
1514 else => @fromBackingInt(@intCast(@backingInt(this))),
15151515 };
15161516 }
15171517 };
......@@ -1578,13 +1578,13 @@ pub const OptionalGeneratedFileIndex = enum(u32) {
15781578 _,
15791579
15801580 pub fn init(i: ?GeneratedFileIndex) OptionalGeneratedFileIndex {
1581 return @enumFromInt(@intFromEnum(i orelse return .none));
1581 return @fromBackingInt(@intCast(@backingInt(i orelse return .none)));
15821582 }
15831583
15841584 pub fn unwrap(this: @This()) ?GeneratedFileIndex {
15851585 return switch (this) {
15861586 .none => null,
1587 else => @enumFromInt(@intFromEnum(this)),
1587 else => @fromBackingInt(@intCast(@backingInt(this))),
15881588 };
15891589 }
15901590};
......@@ -1601,7 +1601,7 @@ pub const Package = struct {
16011601 /// Returns `null` for root package.
16021602 pub fn get(i: @This(), c: *const Configuration) ?Package {
16031603 if (i == .root) return null;
1604 return extraData(c, Package, @intFromEnum(i));
1604 return extraData(c, Package, @backingInt(i));
16051605 }
16061606
16071607 pub fn depPrefixSlice(i: @This(), c: *const Configuration) [:0]const u8 {
......@@ -1616,7 +1616,7 @@ pub const Package = struct {
16161616 _,
16171617
16181618 pub fn init(i: Index) OptionalIndex {
1619 const result: OptionalIndex = @enumFromInt(@intFromEnum(i));
1619 const result: OptionalIndex = @fromBackingInt(@intCast(@backingInt(i)));
16201620 assert(result != .none);
16211621 return result;
16221622 }
......@@ -1625,7 +1625,7 @@ pub const Package = struct {
16251625 return switch (this) {
16261626 .none => null,
16271627 .root => .root,
1628 _ => @enumFromInt(@intFromEnum(this)),
1628 _ => @fromBackingInt(@intCast(@backingInt(this))),
16291629 };
16301630 }
16311631 };
......@@ -1710,7 +1710,7 @@ pub const Module = struct {
17101710 _,
17111711
17121712 pub fn get(this: @This(), c: *const Configuration) Module {
1713 return extraData(c, Module, @intFromEnum(this));
1713 return extraData(c, Module, @backingInt(this));
17141714 }
17151715 };
17161716
......@@ -1802,7 +1802,7 @@ pub const ImportTable = struct {
18021802 pub fn get(this: @This(), c: *const Configuration) ImportTable {
18031803 return switch (this) {
18041804 .invalid => unreachable,
1805 _ => extraData(c, ImportTable, @intFromEnum(this)),
1805 _ => extraData(c, ImportTable, @backingInt(this)),
18061806 };
18071807 }
18081808 };
......@@ -1815,7 +1815,7 @@ pub const Deps = struct {
18151815 _,
18161816
18171817 pub fn get(this: @This(), c: *const Configuration) Deps {
1818 return extraData(c, Deps, @intFromEnum(this));
1818 return extraData(c, Deps, @backingInt(this));
18191819 }
18201820
18211821 pub fn slice(this: @This(), c: *const Configuration) []const Step.Index {
......@@ -1839,8 +1839,8 @@ pub const StringList = enum(u32) {
18391839 _,
18401840
18411841 pub fn slice(this: @This(), c: *const Configuration) []const String {
1842 const len = c.extra[@intFromEnum(this)];
1843 return @ptrCast(c.extra[@intFromEnum(this) + 1 ..][0..len]);
1842 const len = c.extra[@backingInt(this)];
1843 return @ptrCast(c.extra[@backingInt(this) + 1 ..][0..len]);
18441844 }
18451845};
18461846
......@@ -1850,14 +1850,14 @@ pub const OptionalStringList = enum(u32) {
18501850
18511851 pub fn init(opt_string_list: ?StringList) OptionalStringList {
18521852 const sl = opt_string_list orelse return .none;
1853 const result: OptionalStringList = @enumFromInt(@intFromEnum(sl));
1853 const result: OptionalStringList = @fromBackingInt(@intCast(@backingInt(sl)));
18541854 assert(result != .none);
18551855 return result;
18561856 }
18571857
18581858 pub fn unwrap(this: @This()) ?StringList {
18591859 if (this == .none) return null;
1860 return @enumFromInt(@intFromEnum(this));
1860 return @fromBackingInt(@intCast(@backingInt(this)));
18611861 }
18621862
18631863 pub fn slice(this: @This(), c: *const Configuration) ?[]const String {
......@@ -1889,8 +1889,8 @@ pub const InstallDestDir = enum(u32) {
18891889 _,
18901890
18911891 pub fn initCustom(sub_path: String) InstallDestDir {
1892 assert(@intFromEnum(sub_path) < @intFromEnum(InstallDestDir.none));
1893 return @enumFromInt(@intFromEnum(sub_path));
1892 assert(@backingInt(sub_path) < @backingInt(InstallDestDir.none));
1893 return @fromBackingInt(@intCast(@backingInt(sub_path)));
18941894 }
18951895
18961896 pub const Unpacked = union(enum) {
......@@ -1908,7 +1908,7 @@ pub const InstallDestDir = enum(u32) {
19081908 .lib => .lib,
19091909 .bin => .bin,
19101910 .header => .header,
1911 _ => .{ .sub_path = @enumFromInt(@intFromEnum(this)) },
1911 _ => .{ .sub_path = @fromBackingInt(@intCast(@backingInt(this))) },
19121912 };
19131913 }
19141914};
......@@ -1922,14 +1922,14 @@ pub const OptionalString = enum(u32) {
19221922 _,
19231923
19241924 pub fn init(s: String) OptionalString {
1925 const result: OptionalString = @enumFromInt(@intFromEnum(s));
1925 const result: OptionalString = @fromBackingInt(@intCast(@backingInt(s)));
19261926 assert(result != .none);
19271927 return result;
19281928 }
19291929
19301930 pub fn unwrap(this: @This()) ?String {
19311931 if (this == .none) return null;
1932 return @enumFromInt(@intFromEnum(this));
1932 return @fromBackingInt(@intCast(@backingInt(this)));
19331933 }
19341934
19351935 pub fn slice(this: @This(), c: *const Configuration) ?[:0]const u8 {
......@@ -1945,7 +1945,7 @@ pub const String = enum(u32) {
19451945 _,
19461946
19471947 pub fn slice(index: String, c: *const Configuration) [:0]const u8 {
1948 const start_slice = c.string_bytes[@intFromEnum(index)..];
1948 const start_slice = c.string_bytes[@backingInt(index)..];
19491949 return start_slice[0..std.mem.indexOfScalar(u8, start_slice, 0).? :0];
19501950 }
19511951};
......@@ -1975,13 +1975,13 @@ pub const Alignment = enum(u6) {
19751975
19761976 pub fn init(optional_alignment: ?std.mem.Alignment) @This() {
19771977 const a = optional_alignment orelse return .none;
1978 return @enumFromInt(@intFromEnum(a));
1978 return @fromBackingInt(@intCast(@backingInt(a)));
19791979 }
19801980
19811981 pub fn toBytes(a: @This()) ?u64 {
19821982 return switch (a) {
19831983 .none => null,
1984 else => @as(u64, 1) << @intFromEnum(a),
1984 else => @as(u64, 1) << @backingInt(a),
19851985 };
19861986 }
19871987};
......@@ -2015,7 +2015,7 @@ pub const SystemLib = struct {
20152015 _,
20162016
20172017 pub fn get(this: @This(), c: *const Configuration) SystemLib {
2018 return extraData(c, SystemLib, @intFromEnum(this));
2018 return extraData(c, SystemLib, @backingInt(this));
20192019 }
20202020 };
20212021
......@@ -2054,7 +2054,7 @@ pub const CSourceFiles = struct {
20542054 _,
20552055
20562056 pub fn get(this: @This(), c: *const Configuration) CSourceFiles {
2057 return extraData(c, CSourceFiles, @intFromEnum(this));
2057 return extraData(c, CSourceFiles, @backingInt(this));
20582058 }
20592059 };
20602060
......@@ -2074,7 +2074,7 @@ pub const CSourceFile = struct {
20742074 _,
20752075
20762076 pub fn get(this: @This(), c: *const Configuration) CSourceFile {
2077 return extraData(c, CSourceFile, @intFromEnum(this));
2077 return extraData(c, CSourceFile, @backingInt(this));
20782078 }
20792079 };
20802080
......@@ -2095,7 +2095,7 @@ pub const RcSourceFile = struct {
20952095 _,
20962096
20972097 pub fn get(this: @This(), c: *const Configuration) RcSourceFile {
2098 return extraData(c, RcSourceFile, @intFromEnum(this));
2098 return extraData(c, RcSourceFile, @backingInt(this));
20992099 }
21002100 };
21012101
......@@ -2149,7 +2149,7 @@ pub const ResolvedTarget = struct {
21492149 _,
21502150
21512151 pub fn get(this: @This(), c: *const Configuration) ResolvedTarget {
2152 return extraData(c, ResolvedTarget, @intFromEnum(this));
2152 return extraData(c, ResolvedTarget, @backingInt(this));
21532153 }
21542154 };
21552155
......@@ -2158,7 +2158,7 @@ pub const ResolvedTarget = struct {
21582158 _,
21592159
21602160 pub fn init(i: Index) OptionalIndex {
2161 const result: OptionalIndex = @enumFromInt(@intFromEnum(i));
2161 const result: OptionalIndex = @fromBackingInt(@intCast(@backingInt(i)));
21622162 assert(result != .none);
21632163 return result;
21642164 }
......@@ -2166,7 +2166,7 @@ pub const ResolvedTarget = struct {
21662166 pub fn unwrap(this: @This()) ?Index {
21672167 return switch (this) {
21682168 .none => null,
2169 _ => @enumFromInt(@intFromEnum(this)),
2169 _ => @fromBackingInt(@intCast(@backingInt(this))),
21702170 };
21712171 }
21722172
......@@ -2219,15 +2219,15 @@ pub const TargetQuery = struct {
22192219 _,
22202220
22212221 pub fn extraSlice(i: Index, extra: []const u32) []const u32 {
2222 return extra[@intFromEnum(i)..][0..length(i, extra)];
2222 return extra[@backingInt(i)..][0..length(i, extra)];
22232223 }
22242224
22252225 pub fn length(i: Index, extra: []const u32) usize {
2226 return Storage.dataLength(extra, @intFromEnum(i), TargetQuery);
2226 return Storage.dataLength(extra, @backingInt(i), TargetQuery);
22272227 }
22282228
22292229 pub fn get(this: @This(), c: *const Configuration) TargetQuery {
2230 return extraData(c, TargetQuery, @intFromEnum(this));
2230 return extraData(c, TargetQuery, @backingInt(this));
22312231 }
22322232 };
22332233
......@@ -2236,7 +2236,7 @@ pub const TargetQuery = struct {
22362236 _,
22372237
22382238 pub fn init(i: Index) OptionalIndex {
2239 const result: OptionalIndex = @enumFromInt(@intFromEnum(i));
2239 const result: OptionalIndex = @fromBackingInt(@intCast(@backingInt(i)));
22402240 assert(result != .none);
22412241 return result;
22422242 }
......@@ -2244,7 +2244,7 @@ pub const TargetQuery = struct {
22442244 pub fn unwrap(this: @This()) ?Index {
22452245 return switch (this) {
22462246 .none => null,
2247 _ => @enumFromInt(@intFromEnum(this)),
2247 _ => @fromBackingInt(@intCast(@backingInt(this))),
22482248 };
22492249 }
22502250
......@@ -2927,7 +2927,7 @@ pub const Storage = enum {
29272927 pub const storage: Storage = .extended;
29282928
29292929 pub fn tag(this: @This(), c: *const Configuration) @FieldType(BaseFlags, "tag") {
2930 const base_flags: BaseFlags = @bitCast(c.extra[@intFromEnum(this)]);
2930 const base_flags: BaseFlags = @bitCast(c.extra[@backingInt(this)]);
29312931 return base_flags.tag;
29322932 }
29332933
......@@ -2936,14 +2936,14 @@ pub const Storage = enum {
29362936 const info = @typeInfo(S.Flags).@"struct";
29372937 break :blk info.field_attrs[0].defaultValue(info.field_types[0]).?;
29382938 };
2939 const base_flags: BaseFlags = @bitCast(c.extra[@intFromEnum(this)]);
2939 const base_flags: BaseFlags = @bitCast(c.extra[@backingInt(this)]);
29402940 if (base_flags.tag != wanted_tag) return null;
2941 var i: usize = @intFromEnum(this);
2941 var i: usize = @backingInt(this);
29422942 return data(c.extra, &i, S);
29432943 }
29442944
29452945 pub fn get(this: @This(), buffer: []const u32) U {
2946 var i: usize = @intFromEnum(this);
2946 var i: usize = @backingInt(this);
29472947 const base_flags: BaseFlags = @bitCast(buffer[i]);
29482948 return switch (base_flags.tag) {
29492949 inline else => |t| @unionInit(U, @tagName(t), data(buffer, &i, @FieldType(U, @tagName(t)))),
......@@ -3071,7 +3071,7 @@ pub const Storage = enum {
30713071 pub fn get(this: *const @This(), extra: []const u32, i: usize) Union {
30723072 const elem = slice(this, extra)[i];
30733073 return switch (this.tag(extra, i)) {
3074 inline else => |comptime_tag| @unionInit(Union, @tagName(comptime_tag), @enumFromInt(elem)),
3074 inline else => |comptime_tag| @unionInit(Union, @tagName(comptime_tag), @fromBackingInt(@intCast(elem))),
30753075 };
30763076 }
30773077
......@@ -3109,7 +3109,7 @@ pub const Storage = enum {
31093109 inline else => |comptime_tag| @unionInit(
31103110 T,
31113111 @tagName(comptime_tag),
3112 data(buffer, i, info.field_types[@intFromEnum(comptime_tag)]),
3112 data(buffer, i, info.field_types[@backingInt(comptime_tag)]),
31133113 ),
31143114 };
31153115 },
......@@ -3133,7 +3133,7 @@ pub const Storage = enum {
31333133 },
31343134 .@"enum" => {
31353135 defer i.* += 1;
3136 return @enumFromInt(buffer[i.*]);
3136 return @fromBackingInt(@intCast(buffer[i.*]));
31373137 },
31383138 .@"struct" => |info| switch (info.layout) {
31393139 .@"packed" => switch (info.backing_integer.?) {
......@@ -3176,7 +3176,7 @@ pub const Storage = enum {
31763176 buffer,
31773177 i,
31783178 container,
3179 @typeInfo(Field.Union).@"union".field_types[@intFromEnum(comptime_tag)],
3179 @typeInfo(Field.Union).@"union".field_types[@backingInt(comptime_tag)],
31803180 ),
31813181 ),
31823182 },
......@@ -3324,7 +3324,7 @@ pub const Storage = enum {
33243324 else => comptime unreachable,
33253325 },
33263326 .@"enum" => {
3327 buffer[i] = @intFromEnum(value);
3327 buffer[i] = @backingInt(value);
33283328 return 1;
33293329 },
33303330 .@"struct" => |info| switch (info.layout) {
......@@ -3379,7 +3379,7 @@ pub const Storage = enum {
33793379 const field_names = @typeInfo(Field.Elem).@"struct".field_names;
33803380 inline for (0..field_names.len) |field_i| @memcpy(
33813381 buffer[i + 1 + field_i * len ..][0..len],
3382 @as([]const u32, @ptrCast(value.mal.items(@enumFromInt(field_i)))),
3382 @as([]const u32, @ptrCast(value.mal.items(@fromBackingInt(@intCast(field_i))))),
33833383 );
33843384 return 1 + field_names.len * len;
33853385 },
......@@ -3429,7 +3429,7 @@ fn IndexType(comptime T: type) type {
34293429 _,
34303430
34313431 pub fn get(this: @This(), c: *const Configuration) T {
3432 return extraData(c, T, @intFromEnum(this));
3432 return extraData(c, T, @backingInt(this));
34333433 }
34343434 };
34353435}
lib/std/Build/Serialize.zig+11-11
......@@ -75,7 +75,7 @@ pub fn write(b: *std.Build, wc: *Configuration.Wip, writer: *std.Io.Writer) !voi
7575 // Add and then de-duplicate dependencies.
7676 const dep_steps = try arena.alloc(Configuration.Step.Index, step.dependencies.items.len);
7777 for (dep_steps, step.dependencies.items) |*dest, src|
78 dest.* = @enumFromInt(s.step_map.getIndex(src).?);
78 dest.* = @fromBackingInt(@intCast(s.step_map.getIndex(src).?));
7979
8080 const deps: Configuration.Deps.Index = try wc.addDeduped(Configuration.Deps, .{
8181 .steps = .{ .slice = dep_steps },
......@@ -87,7 +87,7 @@ pub fn write(b: *std.Build, wc: *Configuration.Wip, writer: *std.Io.Writer) !voi
8787 .owner = try s.builderToPackage(step.owner),
8888 .deps = deps,
8989 .max_rss = .fromBytes(step.max_rss),
90 .extended = @enumFromInt(switch (step.tag) {
90 .extended = @fromBackingInt(@intCast(switch (step.tag) {
9191 .top_level => e: {
9292 const top_level: *Step.TopLevel = @fieldParentPtr("step", step);
9393 break :e try wc.addExtraErased(Configuration.Step.TopLevel, .{
......@@ -445,8 +445,8 @@ pub fn write(b: *std.Build, wc: *Configuration.Wip, writer: *std.Io.Writer) !voi
445445 },
446446 .expect_term => |t| expect_term = switch (t) {
447447 .exited => |x| .{ .status = .exited, .value = x },
448 .signal => |x| .{ .status = .signal, .value = @intFromEnum(x) },
449 .stopped => |x| .{ .status = .stopped, .value = @intFromEnum(x) },
448 .signal => |x| .{ .status = .signal, .value = @backingInt(x) },
449 .stopped => |x| .{ .status = .stopped, .value = @backingInt(x) },
450450 .unknown => |x| .{ .status = .unknown, .value = x },
451451 },
452452 .expect_stderr_snapshot => |path| expect_stderr_snapshot = try s.addLazyPath(path),
......@@ -656,7 +656,7 @@ pub fn write(b: *std.Build, wc: *Configuration.Wip, writer: *std.Io.Writer) !voi
656656 .args = .{ .slice = args },
657657 });
658658 },
659 }),
659 })),
660660 });
661661 }
662662 }
......@@ -734,7 +734,7 @@ fn builderToPackage(s: *Serialize, b: *std.Build) !Configuration.Package.Index {
734734
735735fn addOptionalLazyPathEnum(s: *Serialize, lp: ?std.Build.LazyPath) !Configuration.LazyPath.OptionalIndex {
736736 const wc = s.wc;
737 return @enumFromInt(switch (lp orelse return .none) {
737 return @fromBackingInt(@intCast(switch (lp orelse return .none) {
738738 .src_path => |src_path| i: {
739739 const sub_path = try wc.addString(src_path.sub_path);
740740 break :i try wc.addExtraErased(Configuration.LazyPath.SourcePath, .{
......@@ -770,7 +770,7 @@ fn addOptionalLazyPathEnum(s: *Serialize, lp: ?std.Build.LazyPath) !Configuratio
770770 .sub_path = sub_path,
771771 });
772772 },
773 });
773 }));
774774}
775775
776776fn addOptionalLazyPath(s: *Serialize, lp: ?std.Build.LazyPath) !?Configuration.LazyPath.Index {
......@@ -778,7 +778,7 @@ fn addOptionalLazyPath(s: *Serialize, lp: ?std.Build.LazyPath) !?Configuration.L
778778}
779779
780780fn addLazyPath(s: *Serialize, lp: std.Build.LazyPath) !Configuration.LazyPath.Index {
781 return @enumFromInt(@intFromEnum(try addOptionalLazyPathEnum(s, lp)));
781 return @fromBackingInt(@intCast(@backingInt(try addOptionalLazyPathEnum(s, lp))));
782782}
783783
784784fn addOptionalSemVer(s: *Serialize, sem_ver: ?std.SemanticVersion) !?Configuration.String {
......@@ -1163,17 +1163,17 @@ fn addModule(s: *Serialize, m: *std.Build.Module) !Configuration.Module.Index {
11631163
11641164 comptime assert(std.mem.eql(u8, @typeInfo(Configuration.Module).@"struct".field_names[2], "import_table"));
11651165 comptime assert(@typeInfo(Configuration.Module).@"struct".field_types[2] == Configuration.ImportTable.Index);
1166 assert(wc.extra.items[@intFromEnum(module_index) + 2] == @intFromEnum(Configuration.ImportTable.Index.invalid));
1166 assert(wc.extra.items[@backingInt(module_index) + 2] == @backingInt(Configuration.ImportTable.Index.invalid));
11671167 const import_table_index = try wc.addDeduped(Configuration.ImportTable, .{
11681168 .imports = .{ .mal = imports },
11691169 });
1170 wc.extra.items[@intFromEnum(module_index) + 2] = @intFromEnum(import_table_index);
1170 wc.extra.items[@backingInt(module_index) + 2] = @backingInt(import_table_index);
11711171
11721172 return module_index;
11731173}
11741174
11751175fn stepIndex(s: *const Serialize, step: *Step) Configuration.Step.Index {
1176 return @enumFromInt(s.step_map.getIndex(step).?);
1176 return @fromBackingInt(@intCast(s.step_map.getIndex(step).?));
11771177}
11781178
11791179fn addOptionalResolvedTarget(
lib/std/Build/abi.zig+1-1
......@@ -265,7 +265,7 @@ pub const fuzz = struct {
265265 return switch (@typeInfo(T)) {
266266 .comptime_int => x,
267267 .bool => @intFromBool(x),
268 .@"enum" => @intFromEnum(x),
268 .@"enum" => @backingInt(x),
269269 else => @as(@Int(.unsigned, @bitSizeOf(T)), @bitCast(x)),
270270
271271 .int => |i| x: {
lib/std/Io.zig+15-15
......@@ -437,14 +437,14 @@ pub const Operation = union(enum) {
437437 _,
438438
439439 pub fn fromIndex(i: usize) OptionalIndex {
440 const oi: OptionalIndex = @enumFromInt(i);
440 const oi: OptionalIndex = @fromBackingInt(@intCast(i));
441441 assert(oi != .none);
442442 return oi;
443443 }
444444
445445 pub fn toIndex(oi: OptionalIndex) u32 {
446446 assert(oi != .none);
447 return @intFromEnum(oi);
447 return @backingInt(oi);
448448 }
449449 };
450450 pub const List = struct {
......@@ -640,13 +640,13 @@ pub const Limit = enum(usize) {
640640
641641 /// `math.maxInt(usize)` is interpreted to mean `.unlimited`.
642642 pub fn limited(n: usize) Limit {
643 return @enumFromInt(n);
643 return @fromBackingInt(@intCast(n));
644644 }
645645
646646 /// Any value grater than `math.maxInt(usize)` is interpreted to mean
647647 /// `.unlimited`.
648648 pub fn limited64(n: u64) Limit {
649 return @enumFromInt(@min(n, math.maxInt(usize)));
649 return @fromBackingInt(@intCast(@min(n, math.maxInt(usize))));
650650 }
651651
652652 pub fn countVec(data: []const []const u8) Limit {
......@@ -656,7 +656,7 @@ pub const Limit = enum(usize) {
656656 }
657657
658658 pub fn min(a: Limit, b: Limit) Limit {
659 return @enumFromInt(@min(@intFromEnum(a), @intFromEnum(b)));
659 return @fromBackingInt(@intCast(@min(@backingInt(a), @backingInt(b))));
660660 }
661661
662662 pub fn max(a: Limit, b: Limit) Limit {
......@@ -664,15 +664,15 @@ pub const Limit = enum(usize) {
664664 return .unlimited;
665665 }
666666
667 return @enumFromInt(@max(@intFromEnum(a), @intFromEnum(b)));
667 return @fromBackingInt(@intCast(@max(@backingInt(a), @backingInt(b))));
668668 }
669669
670670 pub fn minInt(l: Limit, n: usize) usize {
671 return @min(n, @intFromEnum(l));
671 return @min(n, @backingInt(l));
672672 }
673673
674674 pub fn minInt64(l: Limit, n: u64) usize {
675 return @min(n, @intFromEnum(l));
675 return @min(n, @backingInt(l));
676676 }
677677
678678 pub fn slice(l: Limit, s: []u8) []u8 {
......@@ -685,14 +685,14 @@ pub const Limit = enum(usize) {
685685
686686 pub fn toInt(l: Limit) ?usize {
687687 return switch (l) {
688 else => @intFromEnum(l),
688 else => @backingInt(l),
689689 .unlimited => null,
690690 };
691691 }
692692
693693 pub fn toInt64(l: Limit) ?u64 {
694694 return switch (l) {
695 else => @intFromEnum(l),
695 else => @backingInt(l),
696696 .unlimited => null,
697697 };
698698 }
......@@ -702,7 +702,7 @@ pub const Limit = enum(usize) {
702702 /// between end-of-stream and reaching the limit.
703703 pub fn slice1(l: Limit, non_empty_buffer: []u8) []u8 {
704704 assert(non_empty_buffer.len >= 1);
705 return non_empty_buffer[0..@min(@intFromEnum(l) +| 1, non_empty_buffer.len)];
705 return non_empty_buffer[0..@min(@backingInt(l) +| 1, non_empty_buffer.len)];
706706 }
707707
708708 pub fn nonzero(l: Limit) bool {
......@@ -713,8 +713,8 @@ pub const Limit = enum(usize) {
713713 /// limit would be exceeded.
714714 pub fn subtract(l: Limit, amount: usize) ?Limit {
715715 if (l == .unlimited) return .unlimited;
716 if (amount > @intFromEnum(l)) return null;
717 return @enumFromInt(@intFromEnum(l) - amount);
716 if (amount > @backingInt(l)) return null;
717 return @fromBackingInt(@intCast(@backingInt(l) - amount));
718718 }
719719};
720720
......@@ -1583,7 +1583,7 @@ pub fn futexWait(io: Io, comptime T: type, ptr: *align(@alignOf(u32)) const T, e
15831583/// three possible wake-up reasons if necessary.
15841584pub fn futexWaitTimeout(io: Io, comptime T: type, ptr: *align(@alignOf(u32)) const T, expected: T, timeout: Timeout) Cancelable!void {
15851585 const expected_int: u32 = switch (@typeInfo(T)) {
1586 .@"enum" => @bitCast(@intFromEnum(expected)),
1586 .@"enum" => @bitCast(@backingInt(expected)),
15871587 else => @bitCast(expected),
15881588 };
15891589 return io.vtable.futexWait(io.userdata, @ptrCast(ptr), expected_int, timeout);
......@@ -1593,7 +1593,7 @@ pub fn futexWaitTimeout(io: Io, comptime T: type, ptr: *align(@alignOf(u32)) con
15931593/// For a description of cancelation and cancelation points, see `Future.cancel`.
15941594pub fn futexWaitUncancelable(io: Io, comptime T: type, ptr: *align(@alignOf(u32)) const T, expected: T) void {
15951595 const expected_int: u32 = switch (@typeInfo(T)) {
1596 .@"enum" => @bitCast(@intFromEnum(expected)),
1596 .@"enum" => @bitCast(@backingInt(expected)),
15971597 else => @bitCast(expected),
15981598 };
15991599 io.vtable.futexWaitUncancelable(io.userdata, @ptrCast(ptr), expected_int);
lib/std/Io/Dispatch.zig+11-11
......@@ -124,15 +124,15 @@ const Fiber = struct {
124124 const shift = 1;
125125
126126 fn subWrap(lhs: Awaiting, rhs: Awaiting) Awaiting {
127 return @enumFromInt(@intFromEnum(lhs) -% @intFromEnum(rhs));
127 return @fromBackingInt(@intCast(@backingInt(lhs) -% @backingInt(rhs)));
128128 }
129129
130130 fn fromCancelable(cancelable: *Cancelable) Awaiting {
131 return @enumFromInt(@shrExact(@intFromPtr(cancelable), shift));
131 return @fromBackingInt(@intCast(@shrExact(@intFromPtr(cancelable), shift)));
132132 }
133133
134134 fn toCancelable(awaiting: Awaiting) *Cancelable {
135 return @ptrFromInt(@shlExact(@as(usize, @intFromEnum(awaiting)), shift));
135 return @ptrFromInt(@shlExact(@as(usize, @backingInt(awaiting)), shift));
136136 }
137137 };
138138
......@@ -157,7 +157,7 @@ const Fiber = struct {
157157 const unblocked: CancelProtection = .{ .user = .unblocked, .acknowledged = false };
158158
159159 fn check(cancel_protection: CancelProtection) Io.CancelProtection {
160 return @enumFromInt(@intFromBool(cancel_protection != unblocked));
160 return @fromBackingInt(@intCast(@intFromBool(cancel_protection != unblocked)));
161161 }
162162
163163 fn acknowledge(cancel_protection: *CancelProtection) void {
......@@ -1892,7 +1892,7 @@ fn deviceIoControl(o: *const Io.Operation.DeviceIoControl) Io.Cancelable!i32 {
18921892 switch (c.errno(rc)) {
18931893 .SUCCESS => return rc,
18941894 .INTR => {},
1895 else => |err| return -@as(i32, @intFromEnum(err)),
1895 else => |err| return -@as(i32, @backingInt(err)),
18961896 }
18971897 }
18981898}
......@@ -2805,7 +2805,7 @@ fn dirRealPathFile(
28052805 assert(redundant_pointer == out_buffer.ptr);
28062806 return std.mem.indexOfScalar(u8, out_buffer, 0) orelse out_buffer.len;
28072807 }
2808 const err: c.E = @enumFromInt(c._errno().*);
2808 const err: c.E = @fromBackingInt(@intCast(c._errno().*));
28092809 switch (err) {
28102810 .INTR => {},
28112811 .INVAL => return errnoBug(err),
......@@ -3347,12 +3347,12 @@ fn fileWriteFileStreaming(
33473347) File.Writer.WriteFileError!usize {
33483348 const ev: *Evented = @ptrCast(@alignCast(userdata));
33493349 const reader_buffered = file_reader.interface.buffered();
3350 if (reader_buffered.len >= @intFromEnum(limit)) {
3350 if (reader_buffered.len >= @backingInt(limit)) {
33513351 const n = try fileWriteStreaming(ev, file, header, &.{limit.slice(reader_buffered)}, 1);
33523352 file_reader.interface.toss(n -| header.len);
33533353 return n;
33543354 }
3355 const file_limit = @intFromEnum(limit) - reader_buffered.len;
3355 const file_limit = @backingInt(limit) - reader_buffered.len;
33563356 const out_fd = file.handle;
33573357 const in_fd = file_reader.file.handle;
33583358
......@@ -3441,7 +3441,7 @@ fn fileWriteFilePositional(
34413441) File.WriteFilePositionalError!usize {
34423442 const ev: *Evented = @ptrCast(@alignCast(userdata));
34433443 const reader_buffered = file_reader.interface.buffered();
3444 if (reader_buffered.len >= @intFromEnum(limit)) {
3444 if (reader_buffered.len >= @backingInt(limit)) {
34453445 const n = try fileWritePositional(
34463446 ev,
34473447 file,
......@@ -3866,7 +3866,7 @@ fn fileMemoryMapCreate(
38663866 const contents = while (true) {
38673867 const casted_offset = std.math.cast(i64, options.offset) orelse return error.Unseekable;
38683868 const rc = c.mmap(null, options.len, prot, flags, file.handle, casted_offset);
3869 const err: c.E = if (rc != c.MAP_FAILED) .SUCCESS else @enumFromInt(c._errno().*);
3869 const err: c.E = if (rc != c.MAP_FAILED) .SUCCESS else @fromBackingInt(@intCast(c._errno().*));
38703870 switch (err) {
38713871 .SUCCESS => break @as([*]align(page_align) u8, @ptrCast(@alignCast(rc)))[0..options.len],
38723872 .INTR => {},
......@@ -4026,7 +4026,7 @@ fn unlockStderr(userdata: ?*anyopaque) void {
40264026fn processCurrentPath(userdata: ?*anyopaque, buffer: []u8) process.CurrentPathError!usize {
40274027 const ev: *Evented = @ptrCast(@alignCast(userdata));
40284028 _ = ev;
4029 const err: c.E = if (c.getcwd(buffer.ptr, buffer.len)) |_| .SUCCESS else @enumFromInt(c._errno().*);
4029 const err: c.E = if (c.getcwd(buffer.ptr, buffer.len)) |_| .SUCCESS else @fromBackingInt(@intCast(c._errno().*));
40304030 switch (err) {
40314031 .SUCCESS => return std.mem.findScalar(u8, buffer, 0).?,
40324032 .NOENT => return error.CurrentDirUnlinked,
lib/std/Io/File.zig+6-6
......@@ -340,7 +340,7 @@ pub const Permissions = std.Options.FilePermissions orelse if (is_windows) enum(
340340 const windows = std.os.windows;
341341
342342 pub fn toAttributes(self: @This()) windows.FILE.ATTRIBUTE {
343 return @bitCast(@intFromEnum(self));
343 return @bitCast(@backingInt(self));
344344 }
345345
346346 pub fn readOnly(self: @This()) bool {
......@@ -350,10 +350,10 @@ pub const Permissions = std.Options.FilePermissions orelse if (is_windows) enum(
350350
351351 pub fn setReadOnly(self: @This(), read_only: bool) @This() {
352352 const attributes = toAttributes(self);
353 return @enumFromInt(if (read_only)
353 return @fromBackingInt(@intCast(if (read_only)
354354 attributes | windows.FILE_ATTRIBUTE_READONLY
355355 else
356 attributes & ~@as(windows.DWORD, windows.FILE_ATTRIBUTE_READONLY));
356 attributes & ~@as(windows.DWORD, windows.FILE_ATTRIBUTE_READONLY)));
357357 }
358358} else if (std.posix.mode_t != u0) enum(std.posix.mode_t) {
359359 /// This is the default mode given to POSIX operating systems for creating
......@@ -375,11 +375,11 @@ pub const Permissions = std.Options.FilePermissions orelse if (is_windows) enum(
375375 pub const executable_file: @This() = .default_dir;
376376
377377 pub fn toMode(self: @This()) std.posix.mode_t {
378 return @intFromEnum(self);
378 return @backingInt(self);
379379 }
380380
381381 pub fn fromMode(mode: std.posix.mode_t) @This() {
382 return @enumFromInt(mode);
382 return @fromBackingInt(@intCast(mode));
383383 }
384384
385385 /// Returns `true` if and only if no class has write permissions.
......@@ -392,7 +392,7 @@ pub const Permissions = std.Options.FilePermissions orelse if (is_windows) enum(
392392 pub fn setReadOnly(self: @This(), read_only: bool) @This() {
393393 const mode = toMode(self);
394394 const o222 = @as(std.posix.mode_t, 0o222);
395 return @enumFromInt(if (read_only) mode & ~o222 else mode | o222);
395 return @fromBackingInt(@intCast(if (read_only) mode & ~o222 else mode | o222));
396396 }
397397} else enum(u0) {
398398 default_file = 0,
lib/std/Io/File/Reader.zig+4-4
......@@ -311,7 +311,7 @@ fn discard(io_reader: *Io.Reader, limit: Io.Limit) Io.Reader.Error!usize {
311311 const logical_pos = logicalPos(r);
312312 const bytes_remaining = size - logical_pos;
313313 if (bytes_remaining == 0) return error.EndOfStream;
314 const delta = @min(@intFromEnum(limit), bytes_remaining);
314 const delta = @min(@backingInt(limit), bytes_remaining);
315315 setLogicalPos(r, logical_pos + delta);
316316 return delta;
317317 },
......@@ -324,7 +324,7 @@ fn discard(io_reader: *Io.Reader, limit: Io.Limit) Io.Reader.Error!usize {
324324 if (r.size_err == null and r.seek_err == null) break :fallback;
325325
326326 const buffered_len = r.interface.bufferedLen();
327 var remaining = @intFromEnum(limit);
327 var remaining = @backingInt(limit);
328328 if (remaining <= buffered_len) {
329329 r.interface.seek += remaining;
330330 return remaining;
......@@ -356,10 +356,10 @@ fn discard(io_reader: *Io.Reader, limit: Io.Limit) Io.Reader.Error!usize {
356356 } else {
357357 remaining -= n;
358358 }
359 return @intFromEnum(limit) - remaining;
359 return @backingInt(limit) - remaining;
360360 }
361361 const size = r.getSize() catch return 0;
362 const n = @min(size - r.pos, std.math.maxInt(i64), @intFromEnum(limit));
362 const n = @min(size - r.pos, std.math.maxInt(i64), @backingInt(limit));
363363 io.vtable.fileSeekBy(io.userdata, file, n) catch |err| {
364364 r.seek_err = err;
365365 return 0;
lib/std/Io/Kqueue.zig+3-3
......@@ -332,7 +332,7 @@ fn schedule(k: *Kqueue, thread: *Thread, ready_queue: Fiber.Queue) void {
332332 .flags = std.c.EV.ADD | std.c.EV.ONESHOT,
333333 .fflags = std.c.NOTE.TRIGGER,
334334 .data = 0,
335 .udata = @intFromEnum(Completion.UserData.wakeup),
335 .udata = @backingInt(Completion.UserData.wakeup),
336336 },
337337 };
338338 // If an error occurs it only pessimises scheduling.
......@@ -439,7 +439,7 @@ fn idle(k: *Kqueue, thread: *Thread) void {
439439 @panic(@errorName(err)); // TODO
440440 };
441441 var maybe_ready_queue: ?Fiber.Queue = null;
442 for (events_buffer[0..n]) |event| switch (@as(Completion.UserData, @enumFromInt(event.udata))) {
442 for (events_buffer[0..n]) |event| switch (@as(Completion.UserData, @fromBackingInt(@intCast(event.udata)))) {
443443 .unused => unreachable, // bad submission queued?
444444 .wakeup => {},
445445 .cleanup => @panic("failed to notify other threads that we are exiting"),
......@@ -522,7 +522,7 @@ const SwitchMessage = struct {
522522 .flags = std.c.EV.ADD | std.c.EV.ONESHOT,
523523 .fflags = std.c.NOTE.TRIGGER,
524524 .data = 0,
525 .udata = @intFromEnum(Completion.UserData.exit),
525 .udata = @backingInt(Completion.UserData.exit),
526526 },
527527 };
528528 _ = kevent(each_thread.kq_fd, &changes, &.{}, null) catch |err| {
lib/std/Io/Reader.zig+11-11
......@@ -174,7 +174,7 @@ pub fn stream(r: *Reader, w: *Writer, limit: Limit) StreamError!usize {
174174 return n;
175175 }
176176 const n = try r.vtable.stream(r, w, limit);
177 assert(n <= @intFromEnum(limit));
177 assert(n <= @backingInt(limit));
178178 return n;
179179}
180180
......@@ -189,7 +189,7 @@ pub fn discard(r: *Reader, limit: Limit) Error!usize {
189189 } else .unlimited;
190190 r.seek = r.end;
191191 const n = try r.vtable.discard(r, remaining);
192 assert(n <= @intFromEnum(remaining));
192 assert(n <= @backingInt(remaining));
193193 return buffered_len + n;
194194}
195195
......@@ -204,11 +204,11 @@ pub fn defaultDiscard(r: *Reader, limit: Limit) Error!usize {
204204 };
205205 // If `stream` wrote to `r.buffer` without going through the writer,
206206 // we need to discard as much of the buffered data as possible.
207 const remaining = @intFromEnum(limit) - n;
207 const remaining = @backingInt(limit) - n;
208208 const buffered_n_to_discard = @min(remaining, r.end - r.seek);
209209 n += buffered_n_to_discard;
210210 r.seek += buffered_n_to_discard;
211 assert(n <= @intFromEnum(limit));
211 assert(n <= @backingInt(limit));
212212 return n;
213213}
214214
......@@ -1010,17 +1010,17 @@ pub fn streamDelimiterLimit(
10101010 delimiter: u8,
10111011 limit: Limit,
10121012) StreamDelimiterLimitError!usize {
1013 var remaining = @intFromEnum(limit);
1013 var remaining = @backingInt(limit);
10141014 while (remaining != 0) {
10151015 const available = Limit.limited(remaining).slice(r.peekGreedy(1) catch |err| switch (err) {
10161016 error.ReadFailed => |e| return e,
1017 error.EndOfStream => return @intFromEnum(limit) - remaining,
1017 error.EndOfStream => return @backingInt(limit) - remaining,
10181018 });
10191019 if (std.mem.findScalar(u8, available, delimiter)) |delimiter_index| {
10201020 try w.writeAll(available[0..delimiter_index]);
10211021 r.toss(delimiter_index);
10221022 remaining -= delimiter_index;
1023 return @intFromEnum(limit) - remaining;
1023 return @backingInt(limit) - remaining;
10241024 }
10251025 try w.writeAll(available);
10261026 r.toss(available.len);
......@@ -1081,16 +1081,16 @@ pub const DiscardDelimiterLimitError = error{
10811081/// Succeeds if stream ends before delimiter found. End of stream can be
10821082/// detected by checking if the delimiter is buffered.
10831083pub fn discardDelimiterLimit(r: *Reader, delimiter: u8, limit: Limit) DiscardDelimiterLimitError!usize {
1084 var remaining = @intFromEnum(limit);
1084 var remaining = @backingInt(limit);
10851085 while (remaining != 0) {
10861086 const available = Limit.limited(remaining).slice(r.peekGreedy(1) catch |err| switch (err) {
10871087 error.ReadFailed => |e| return e,
1088 error.EndOfStream => return @intFromEnum(limit) - remaining,
1088 error.EndOfStream => return @backingInt(limit) - remaining,
10891089 });
10901090 if (std.mem.findScalar(u8, available, delimiter)) |delimiter_index| {
10911091 r.toss(delimiter_index);
10921092 remaining -= delimiter_index;
1093 return @intFromEnum(limit) - remaining;
1093 return @backingInt(limit) - remaining;
10941094 }
10951095 r.toss(available.len);
10961096 remaining -= available.len;
......@@ -1704,7 +1704,7 @@ test takeEnum {
17041704 const E1 = enum(u8) { a, b, c };
17051705 const E2 = enum(u16) { _ };
17061706 try testing.expectEqual(E1.c, try r.takeEnum(E1, .little));
1707 try testing.expectEqual(@as(E2, @enumFromInt(0x0001)), try r.takeEnum(E2, .big));
1707 try testing.expectEqual(@as(E2, @fromBackingInt(@intCast(0x0001))), try r.takeEnum(E2, .big));
17081708}
17091709
17101710test readSliceShort {
lib/std/Io/Reader/Limited.zig+2-2
......@@ -40,11 +40,11 @@ test stream {
4040 var fixed: std.Io.Reader = .fixed(&orig_buf);
4141
4242 var limit_buf: [1]u8 = undefined;
43 var limited: std.Io.Reader.Limited = .init(&fixed, @enumFromInt(4), &limit_buf);
43 var limited: std.Io.Reader.Limited = .init(&fixed, @fromBackingInt(@intCast(4)), &limit_buf);
4444
4545 var result_buf: [10]u8 = undefined;
4646 var fixed_writer: std.Io.Writer = .fixed(&result_buf);
47 const streamed = try limited.interface.stream(&fixed_writer, @enumFromInt(7));
47 const streamed = try limited.interface.stream(&fixed_writer, @fromBackingInt(@intCast(7)));
4848
4949 try std.testing.expect(streamed == 4);
5050 try std.testing.expectEqualStrings("test", result_buf[0..streamed]);
lib/std/Io/Threaded.zig+66-66
......@@ -581,7 +581,7 @@ const Group = struct {
581581 var it = t.worker_threads.load(.acquire); // acquire `Thread` values
582582 while (it) |thread| : (it = thread.next) {
583583 // This non-mutating RMW exists for ordering reasons: see comment in `Group.Task.start` for reasons.
584 _ = thread.status.fetchOr(.{ .cancelation = @enumFromInt(0), .awaitable = .null }, .release);
584 _ = thread.status.fetchOr(.{ .cancelation = @fromBackingInt(@intCast(0)), .awaitable = .null }, .release);
585585 if (thread.cancelAwaitable(.fromGroup(g.ptr))) any_blocked = true;
586586 }
587587 return any_blocked;
......@@ -1019,7 +1019,7 @@ const Thread = struct {
10191019 };
10201020 syscall.finish();
10211021 if (status >= 0) return;
1022 switch (@as(c.E, @enumFromInt(-status))) {
1022 switch (@as(c.E, @fromBackingInt(@intCast(-status)))) {
10231023 .INTR => {}, // spurious wake
10241024 // Address of the futex was paged out. This is unlikely, but possible in theory, and
10251025 // pthread/libdispatch on darwin bother to handle it. In this case we'll return
......@@ -1030,7 +1030,7 @@ const Thread = struct {
10301030 }
10311031 },
10321032 .freebsd => {
1033 const flags = @intFromEnum(std.c.UMTX_OP.WAIT_UINT_PRIVATE);
1033 const flags = @backingInt(std.c.UMTX_OP.WAIT_UINT_PRIVATE);
10341034 var tm_size: usize = 0;
10351035 var tm: std.c._umtx_time = undefined;
10361036 var tm_ptr: ?*const std.c._umtx_time = null;
......@@ -1147,7 +1147,7 @@ const Thread = struct {
11471147 while (true) {
11481148 const status = c.__ulock_wake(flags, ptr, 0);
11491149 if (status >= 0) return;
1150 switch (@as(c.E, @enumFromInt(-status))) {
1150 switch (@as(c.E, @fromBackingInt(@intCast(-status)))) {
11511151 .INTR, .CANCELED => continue, // spurious wake()
11521152 .FAULT => unreachable, // __ulock_wake doesn't generate EFAULT according to darwin pthread_cond_t
11531153 .NOENT => return, // nothing was woken up
......@@ -1159,7 +1159,7 @@ const Thread = struct {
11591159 .freebsd => {
11601160 const rc = std.c._umtx_op(
11611161 @intFromPtr(ptr),
1162 @intFromEnum(std.c.UMTX_OP.WAKE_PRIVATE),
1162 @backingInt(std.c.UMTX_OP.WAKE_PRIVATE),
11631163 @as(c_ulong, @min(max_waiters, std.math.maxInt(c_int))),
11641164 0, // there is no timeout struct
11651165 0, // there is no timeout struct pointer
......@@ -1283,9 +1283,9 @@ const Thread = struct {
12831283 .linux => {
12841284 const pid: posix.pid_t = pid: {
12851285 const cached_pid = @atomicLoad(Pid, &t.pid, .monotonic);
1286 if (cached_pid != .unknown) break :pid @intFromEnum(cached_pid);
1286 if (cached_pid != .unknown) break :pid @backingInt(cached_pid);
12871287 const pid = std.os.linux.getpid();
1288 @atomicStore(Pid, &t.pid, @enumFromInt(pid), .monotonic);
1288 @atomicStore(Pid, &t.pid, @fromBackingInt(@intCast(pid)), .monotonic);
12891289 break :pid pid;
12901290 };
12911291 return switch (std.os.linux.tgkill(pid, @bitCast(thread.id), .IO)) {
......@@ -1352,7 +1352,7 @@ const Syscall = struct {
13521352 .unblocked => {},
13531353 }
13541354 switch (thread.status.fetchOr(.{
1355 .cancelation = @enumFromInt(0b011),
1355 .cancelation = @fromBackingInt(@intCast(0b011)),
13561356 .awaitable = .null,
13571357 }, .monotonic).cancelation) {
13581358 .parked => unreachable,
......@@ -1372,7 +1372,7 @@ const Syscall = struct {
13721372 fn checkCancel(s: Syscall) Io.Cancelable!void {
13731373 const thread = s.thread orelse return;
13741374 switch (thread.status.fetchOr(.{
1375 .cancelation = @enumFromInt(0b010),
1375 .cancelation = @fromBackingInt(@intCast(0b010)),
13761376 .awaitable = .null,
13771377 }, .monotonic).cancelation) {
13781378 .none => unreachable,
......@@ -1389,7 +1389,7 @@ const Syscall = struct {
13891389 fn finish(s: Syscall) void {
13901390 const thread = s.thread orelse return;
13911391 switch (thread.status.fetchXor(.{
1392 .cancelation = @enumFromInt(0b011),
1392 .cancelation = @fromBackingInt(@intCast(0b011)),
13931393 .awaitable = .null,
13941394 }, .monotonic).cancelation) {
13951395 .none => unreachable,
......@@ -1474,7 +1474,7 @@ const AlertableSyscall = struct {
14741474 .unblocked => {},
14751475 }
14761476 const old_status = thread.status.fetchOr(.{
1477 .cancelation = @enumFromInt(0b010),
1477 .cancelation = @fromBackingInt(@intCast(0b010)),
14781478 .awaitable = .null,
14791479 }, .monotonic);
14801480 switch (old_status.cancelation) {
......@@ -1497,7 +1497,7 @@ const AlertableSyscall = struct {
14971497 comptime assert(is_windows);
14981498 const thread = s.thread orelse return;
14991499 const old_status = thread.status.fetchOr(.{
1500 .cancelation = @enumFromInt(0b010),
1500 .cancelation = @fromBackingInt(@intCast(0b010)),
15011501 .awaitable = .null,
15021502 }, .monotonic);
15031503 switch (old_status.cancelation) {
......@@ -1520,7 +1520,7 @@ const AlertableSyscall = struct {
15201520 comptime assert(is_windows);
15211521 const thread = s.thread orelse return;
15221522 switch (thread.status.fetchXor(.{
1523 .cancelation = @enumFromInt(0b010),
1523 .cancelation = @fromBackingInt(@intCast(0b010)),
15241524 .awaitable = .null,
15251525 }, .monotonic).cancelation) {
15261526 .none => unreachable,
......@@ -2094,7 +2094,7 @@ fn async(
20942094
20952095 const busy_count = t.busy_count;
20962096
2097 if (busy_count >= @intFromEnum(t.async_limit)) {
2097 if (busy_count >= @backingInt(t.async_limit)) {
20982098 mutexUnlock(&t.mutex);
20992099 future.destroy(gpa);
21002100 start(context.ptr, result.ptr);
......@@ -2147,7 +2147,7 @@ fn concurrent(
21472147
21482148 const busy_count = t.busy_count;
21492149
2150 if (busy_count >= @intFromEnum(t.concurrent_limit))
2150 if (busy_count >= @backingInt(t.concurrent_limit))
21512151 return error.ConcurrencyUnavailable;
21522152
21532153 t.busy_count = busy_count + 1;
......@@ -2191,7 +2191,7 @@ fn groupAsync(
21912191
21922192 const busy_count = t.busy_count;
21932193
2194 if (busy_count >= @intFromEnum(t.async_limit)) {
2194 if (busy_count >= @backingInt(t.async_limit)) {
21952195 mutexUnlock(&t.mutex);
21962196 task.destroy(gpa);
21972197 return groupAsyncEager(start, context.ptr);
......@@ -2255,7 +2255,7 @@ fn groupConcurrent(
22552255
22562256 const busy_count = t.busy_count;
22572257
2258 if (busy_count >= @intFromEnum(t.concurrent_limit))
2258 if (busy_count >= @backingInt(t.concurrent_limit))
22592259 return error.ConcurrencyUnavailable;
22602260
22612261 t.busy_count = busy_count + 1;
......@@ -2382,7 +2382,7 @@ fn recancel(userdata: ?*anyopaque) void {
23822382fn recancelInner() void {
23832383 const thread = Thread.current.?; // called `recancel` but was not canceled
23842384 switch (thread.status.fetchXor(.{
2385 .cancelation = @enumFromInt(0b001),
2385 .cancelation = @fromBackingInt(@intCast(0b001)),
23862386 .awaitable = .null,
23872387 }, .monotonic).cancelation) {
23882388 .canceled => {},
......@@ -5347,7 +5347,7 @@ fn dirOpenDirHaiku(
53475347 syscall.finish();
53485348 return .{ .handle = rc };
53495349 }
5350 switch (@as(posix.E, @enumFromInt(rc))) {
5350 switch (@as(posix.E, @fromBackingInt(@intCast(rc)))) {
53515351 .INTR => {
53525352 try syscall.checkCancel();
53535353 continue;
......@@ -5826,7 +5826,7 @@ fn dirReadHaiku(userdata: ?*anyopaque, dr: *Dir.Reader, buffer: []Dir.Entry) Dir
58265826 const syscall: Syscall = try .start();
58275827 while (true) {
58285828 const rc = posix.system._kern_rewind_dir(dr.dir.handle);
5829 switch (@as(posix.E, @enumFromInt(@min(rc, 0)))) {
5829 switch (@as(posix.E, @fromBackingInt(@intCast(@min(rc, 0))))) {
58305830 .SUCCESS => {
58315831 syscall.finish();
58325832 break;
......@@ -5848,7 +5848,7 @@ fn dirReadHaiku(userdata: ?*anyopaque, dr: *Dir.Reader, buffer: []Dir.Entry) Dir
58485848 const syscall: Syscall = try .start();
58495849 const n: usize = while (true) {
58505850 const rc = posix.system._kern_read_dir(dr.dir.handle, dr.buffer.ptr, dr.buffer.len, @truncate(dr.buffer.len / @sizeOf(posix.system.DirEnt)));
5851 switch (@as(posix.E, @enumFromInt(@min(rc, 0)))) {
5851 switch (@as(posix.E, @fromBackingInt(@intCast(@min(rc, 0))))) {
58525852 .SUCCESS => {
58535853 syscall.finish();
58545854 break @intCast(rc);
......@@ -5891,7 +5891,7 @@ fn dirReadHaiku(userdata: ?*anyopaque, dr: *Dir.Reader, buffer: []Dir.Entry) Dir
58915891 const syscall: Syscall = try .start();
58925892 while (true) {
58935893 const rc = posix.system._kern_read_stat(dr.dir.handle, name, false, &stat, @sizeOf(std.c.Stat));
5894 switch (@as(posix.E, @enumFromInt(@min(rc, 0)))) {
5894 switch (@as(posix.E, @fromBackingInt(@intCast(@min(rc, 0))))) {
58955895 .SUCCESS => {
58965896 syscall.finish();
58975897 break;
......@@ -6819,7 +6819,7 @@ fn dirRealPathFilePosix(userdata: ?*anyopaque, dir: Dir, sub_path: []const u8, o
68196819 assert(redundant_pointer == out_buffer.ptr);
68206820 return std.mem.indexOfScalar(u8, out_buffer, 0) orelse out_buffer.len;
68216821 }
6822 const err: posix.E = @enumFromInt(std.c._errno().*);
6822 const err: posix.E = @fromBackingInt(@intCast(std.c._errno().*));
68236823 if (err == .INTR) {
68246824 try syscall.checkCancel();
68256825 continue;
......@@ -10477,7 +10477,7 @@ fn processExecutablePath(userdata: ?*anyopaque, out_buffer: []u8) process.Execut
1047710477 if (std.c.realpath(argv0, &resolved_buf)) |p| {
1047810478 assert(p == &resolved_buf);
1047910479 break syscall.finish();
10480 } else switch (@as(std.c.E, @enumFromInt(std.c._errno().*))) {
10480 } else switch (@as(std.c.E, @fromBackingInt(@intCast(std.c._errno().*)))) {
1048110481 .INTR => {
1048210482 try syscall.checkCancel();
1048310483 continue;
......@@ -10520,7 +10520,7 @@ fn processExecutablePath(userdata: ?*anyopaque, out_buffer: []u8) process.Execut
1052010520 if (std.c.realpath(resolved_path, &resolved_buf)) |p| {
1052110521 assert(p == &resolved_buf);
1052210522 break syscall.finish();
10523 } else switch (@as(std.c.E, @enumFromInt(std.c._errno().*))) {
10523 } else switch (@as(std.c.E, @fromBackingInt(@intCast(std.c._errno().*)))) {
1052410524 .INTR => {
1052510525 try syscall.checkCancel();
1052610526 continue;
......@@ -10979,12 +10979,12 @@ fn fileWriteFileStreaming(
1097910979) File.Writer.WriteFileError!usize {
1098010980 const t: *Threaded = @ptrCast(@alignCast(userdata));
1098110981 const reader_buffered = file_reader.interface.buffered();
10982 if (reader_buffered.len >= @intFromEnum(limit)) {
10982 if (reader_buffered.len >= @backingInt(limit)) {
1098310983 const n = try fileWriteStreaming(t, file, header, &.{limit.slice(reader_buffered)}, 1);
1098410984 file_reader.interface.toss(n -| header.len);
1098510985 return n;
1098610986 }
10987 const file_limit = @intFromEnum(limit) - reader_buffered.len;
10987 const file_limit = @backingInt(limit) - reader_buffered.len;
1098810988 const out_fd = file.handle;
1098910989 const in_fd = file_reader.file.handle;
1099010990
......@@ -11186,7 +11186,7 @@ fn fileWriteFileStreaming(
1118611186 .positional => o: {
1118711187 const size = file_reader.getSize() catch return 0;
1118811188 off = std.math.cast(std.os.linux.off_t, file_reader.pos) orelse return error.ReadFailed;
11189 break :o .{ &off, @min(@intFromEnum(limit), size - file_reader.pos, max_count) };
11189 break :o .{ &off, @min(@backingInt(limit), size - file_reader.pos, max_count) };
1119011190 },
1119111191 .streaming => .{ null, limit.minInt(max_count) },
1119211192 .streaming_simple, .positional_simple => break :sf,
......@@ -11258,7 +11258,7 @@ fn fileWriteFileStreaming(
1125811258 file_reader.interface.toss(n -| header.len);
1125911259 return n;
1126011260 }
11261 var len: usize = @intFromEnum(limit);
11261 var len: usize = @backingInt(limit);
1126211262 var off_in: i64 = undefined;
1126311263 const off_in_ptr: ?*i64 = switch (file_reader.mode) {
1126411264 .positional_simple, .streaming_simple => return error.Unimplemented,
......@@ -11318,7 +11318,7 @@ fn fileWriteFileStreaming(
1131811318 .freebsd => n: {
1131911319 const syscall: Syscall = try .start();
1132011320 while (true) {
11321 const rc = std.c.copy_file_range(in_fd, off_in_ptr, out_fd, null, @intFromEnum(limit), 0);
11321 const rc = std.c.copy_file_range(in_fd, off_in_ptr, out_fd, null, @backingInt(limit), 0);
1132211322 switch (std.c.errno(rc)) {
1132311323 .SUCCESS => {
1132411324 syscall.finish();
......@@ -11392,7 +11392,7 @@ fn fileWriteFilePositional(
1139211392) File.WriteFilePositionalError!usize {
1139311393 const t: *Threaded = @ptrCast(@alignCast(userdata));
1139411394 const reader_buffered = file_reader.interface.buffered();
11395 if (reader_buffered.len >= @intFromEnum(limit)) {
11395 if (reader_buffered.len >= @backingInt(limit)) {
1139611396 const n = try fileWritePositional(t, file, header, &.{limit.slice(reader_buffered)}, 1, offset);
1139711397 file_reader.interface.toss(n -| header.len);
1139811398 return n;
......@@ -11419,7 +11419,7 @@ fn fileWriteFilePositional(
1141911419 file_reader.interface.toss(n -| header.len);
1142011420 return n;
1142111421 }
11422 var len: usize = @min(@intFromEnum(limit), std.math.maxInt(usize) - offset);
11422 var len: usize = @min(@backingInt(limit), std.math.maxInt(usize) - offset);
1142311423 var off_in: i64 = undefined;
1142411424 const off_in_ptr: ?*i64 = switch (file_reader.mode) {
1142511425 .positional_simple, .streaming_simple => return error.Unimplemented,
......@@ -11481,7 +11481,7 @@ fn fileWriteFilePositional(
1148111481 .freebsd => n: {
1148211482 const syscall: Syscall = try .start();
1148311483 while (true) {
11484 const rc = std.c.copy_file_range(in_fd, off_in_ptr, out_fd, &off_out, @intFromEnum(limit), 0);
11484 const rc = std.c.copy_file_range(in_fd, off_in_ptr, out_fd, &off_out, @backingInt(limit), 0);
1148511485 switch (std.c.errno(rc)) {
1148611486 .SUCCESS => {
1148711487 syscall.finish();
......@@ -11751,7 +11751,7 @@ fn sleepPosix(timeout: Io.Timeout) Io.Cancelable!void {
1175111751 .deadline => true,
1175211752 } }, &timespec, &timespec);
1175311753 // POSIX-standard libc clock_nanosleep() returns *positive* errno values directly
11754 switch (if (builtin.link_libc) @as(posix.E, @enumFromInt(rc)) else posix.errno(rc)) {
11754 switch (if (builtin.link_libc) @as(posix.E, @fromBackingInt(@intCast(rc))) else posix.errno(rc)) {
1175511755 .INTR => {
1175611756 try syscall.checkCancel();
1175711757 continue;
......@@ -13525,7 +13525,7 @@ fn netInterfaceNameResolve(
1352513525 .INVALID_PARAMETER => unreachable,
1352613526 else => |err| return windows.unexpectedError(err),
1352713527 }
13528 return .{ .index = @intFromEnum(index) };
13528 return .{ .index = @backingInt(index) };
1352913529 }
1353013530
1353113531 if (builtin.link_libc) {
......@@ -13588,7 +13588,7 @@ fn netInterfaceName(userdata: ?*anyopaque, interface: net.Interface) net.Interfa
1358813588 }
1358913589 try Thread.checkCancel();
1359013590 var luid: windows.NET.LUID = undefined;
13591 switch (ConvertInterfaceIndexToLuid.?(@enumFromInt(interface.index), &luid)) {
13591 switch (ConvertInterfaceIndexToLuid.?(@fromBackingInt(@intCast(interface.index)), &luid)) {
1359213592 .SUCCESS => {},
1359313593 .FILE_NOT_FOUND => return error.InterfaceNotFound,
1359413594 .INVALID_PARAMETER => unreachable,
......@@ -13884,7 +13884,7 @@ fn netLookupFallible(
1388413884 const syscall: Syscall = try .start();
1388513885 while (true) {
1388613886 switch (posix.system.getaddrinfo(name_c.ptr, port_c.ptr, &hints, &res)) {
13887 @as(posix.system.EAI, @enumFromInt(0)) => {
13887 @as(posix.system.EAI, @fromBackingInt(@intCast(0))) => {
1388813888 syscall.finish();
1388913889 break;
1389013890 },
......@@ -14029,7 +14029,7 @@ fn processCurrentPath(userdata: ?*anyopaque, buffer: []u8) process.CurrentPathEr
1402914029
1403014030 const err: posix.E = if (builtin.link_libc) err: {
1403114031 const c_err = if (std.c.getcwd(buffer.ptr, buffer.len)) |_| 0 else std.c._errno().*;
14032 break :err @enumFromInt(c_err);
14032 break :err @fromBackingInt(@intCast(c_err));
1403314033 } else err: {
1403414034 break :err posix.errno(posix.system.getcwd(buffer.ptr, buffer.len));
1403514035 };
......@@ -14223,12 +14223,12 @@ pub fn posixSocketModeProtocol(family: posix.sa_family_t, mode: net.Socket.Mode,
1422314223 .raw => posix.SOCK.RAW,
1422414224 .rdm => if (@hasDecl(posix.SOCK, "RDM")) posix.SOCK.RDM else return error.OptionUnsupported,
1422514225 },
14226 if (protocol) |p| @intFromEnum(p) else if (is_windows) switch (family) {
14226 if (protocol) |p| @backingInt(p) else if (is_windows) switch (family) {
1422714227 posix.AF.UNIX => switch (mode) {
1422814228 .stream => 0,
1422914229 else => return error.ProtocolUnsupportedByAddressFamily,
1423014230 },
14231 posix.AF.INET, posix.AF.INET6 => @intFromEnum(@as(net.Protocol, switch (mode) {
14231 posix.AF.INET, posix.AF.INET6 => @backingInt(@as(net.Protocol, switch (mode) {
1423214232 .stream => .tcp,
1423314233 .dgram => .udp,
1423414234 else => return error.ProtocolUnsupportedByAddressFamily,
......@@ -14824,7 +14824,7 @@ fn writeResolutionQuery(q: *[280]u8, op: u4, dname: []const u8, class: u8, ty: H
1482414824 if (j - i - 1 > 62) unreachable;
1482514825 q[i - 1] = @intCast(j - i);
1482614826 }
14827 q[i + 1] = @intFromEnum(ty);
14827 q[i + 1] = @backingInt(ty);
1482814828 q[i + 3] = class;
1482914829 return n;
1483014830}
......@@ -15299,8 +15299,8 @@ fn childKill(userdata: ?*anyopaque, child: *process.Child) void {
1529915299fn childKillWindows(t: *Threaded, child: *process.Child, exit_code: windows.UINT) !void {
1530015300 _ = t; // TODO cancelation
1530115301 const handle = child.id.?;
15302 _ = windows.ntdll.RtlReportSilentProcessExit(handle, @enumFromInt(exit_code));
15303 switch (windows.ntdll.NtTerminateProcess(handle, @enumFromInt(exit_code))) {
15302 _ = windows.ntdll.RtlReportSilentProcessExit(handle, @fromBackingInt(@intCast(exit_code)));
15303 switch (windows.ntdll.NtTerminateProcess(handle, @fromBackingInt(@intCast(exit_code)))) {
1530415304 .SUCCESS, .PROCESS_IS_TERMINATING => {
1530515305 const infinite_timeout: windows.LARGE_INTEGER = std.math.minInt(windows.LARGE_INTEGER);
1530615306 _ = windows.ntdll.NtWaitForSingleObject(handle, .FALSE, &infinite_timeout);
......@@ -15344,7 +15344,7 @@ fn childWaitWindows(child: *process.Child) process.Child.WaitError!process.Child
1534415344 @sizeOf(windows.PROCESS.BASIC_INFORMATION),
1534515345 null,
1534615346 )) {
15347 .SUCCESS => .{ .exited = @as(u8, @truncate(@intFromEnum(info.ExitStatus))) },
15347 .SUCCESS => .{ .exited = @as(u8, @truncate(@backingInt(info.ExitStatus))) },
1534815348 else => .{ .unknown = 0 },
1534915349 };
1535015350
......@@ -15424,11 +15424,11 @@ fn childWaitPosix(child: *process.Child) process.Child.WaitError!process.Child.T
1542415424 syscall.finish();
1542515425 if (ru_ptr) |p| child.resource_usage_statistics.rusage = p.*;
1542615426 const status: u32 = @bitCast(info.fields.common.second.sigchld.status);
15427 const code: linux.CLD = @enumFromInt(info.code);
15427 const code: linux.CLD = @fromBackingInt(@intCast(info.code));
1542815428 return switch (code) {
1542915429 .EXITED => .{ .exited = @truncate(status) },
15430 .KILLED, .DUMPED => .{ .signal = @enumFromInt(status) },
15431 .TRAPPED, .STOPPED => .{ .stopped = @enumFromInt(status) },
15430 .KILLED, .DUMPED => .{ .signal = @fromBackingInt(@intCast(status)) },
15431 .TRAPPED, .STOPPED => .{ .stopped = @fromBackingInt(@intCast(status)) },
1543215432 _, .CONTINUED => .{ .unknown = status },
1543315433 };
1543415434 },
......@@ -16254,7 +16254,7 @@ fn windowsCreateProcessPathExt(
1625416254 // fails to spawn, in which case we still want to try the PATHEXT appended versions.
1625516255 unappended_exists = true;
1625616256 } else if (windowsCreateProcessSupportsExtension(filename[app_name_len..])) |pathext_ext| {
16257 pathext_seen[@intFromEnum(pathext_ext)] = true;
16257 pathext_seen[@backingInt(pathext_ext)] = true;
1625816258 any_pathext_seen = true;
1625916259 }
1626016260 }
......@@ -16327,7 +16327,7 @@ fn windowsCreateProcessPathExt(
1632716327 var ext_it = std.mem.tokenizeScalar(u16, pathext, ';');
1632816328 while (ext_it.next()) |ext| {
1632916329 const ext_enum = windowsCreateProcessSupportsExtension(ext) orelse continue;
16330 if (!pathext_seen[@intFromEnum(ext_enum)]) continue;
16330 if (!pathext_seen[@backingInt(ext_enum)]) continue;
1633116331
1633216332 dir_buf.shrinkRetainingCapacity(dir_path_len);
1633316333 if (dir_path_len != 0) switch (dir_buf.items[dir_buf.items.len - 1]) {
......@@ -16451,10 +16451,10 @@ fn windowsCreateProcessSupportsExtension(ext: []const u16) ?process.WindowsExten
1645116451 // Ensures keeping this function in sync with the enum.
1645216452 const field_names = @typeInfo(process.WindowsExtension).@"enum".field_names;
1645316453 assert(field_names.len == 4);
16454 assert(@intFromEnum(process.WindowsExtension.bat) == 0);
16455 assert(@intFromEnum(process.WindowsExtension.cmd) == 1);
16456 assert(@intFromEnum(process.WindowsExtension.com) == 2);
16457 assert(@intFromEnum(process.WindowsExtension.exe) == 3);
16454 assert(@backingInt(process.WindowsExtension.bat) == 0);
16455 assert(@backingInt(process.WindowsExtension.cmd) == 1);
16456 assert(@backingInt(process.WindowsExtension.com) == 2);
16457 assert(@backingInt(process.WindowsExtension.exe) == 3);
1645816458 }
1645916459
1646016460 if (ext.len != 4) return null;
......@@ -17509,7 +17509,7 @@ const parking_futex = struct {
1750917509 }
1751017510 thread.futex_waiter = &waiter;
1751117511 const old_status = thread.status.fetchOr(
17512 .{ .cancelation = @enumFromInt(0b001), .awaitable = .null },
17512 .{ .cancelation = @fromBackingInt(@intCast(0b001)), .awaitable = .null },
1751317513 .release, // release `thread.futex_waiter`
1751417514 );
1751517515 switch (old_status.cancelation) {
......@@ -17547,7 +17547,7 @@ const parking_futex = struct {
1754717547 error.Timeout => {
1754817548 // We're not out of the woods yet: an unpark could race with the timeout.
1754917549 const old_status = waiter.thread_status.fetchAnd(
17550 .{ .cancelation = @enumFromInt(0b110), .awaitable = .all_ones },
17550 .{ .cancelation = @fromBackingInt(@intCast(0b110)), .awaitable = .all_ones },
1755117551 .monotonic,
1755217552 );
1755317553 switch (old_status.cancelation) {
......@@ -17604,7 +17604,7 @@ const parking_futex = struct {
1760417604 it = waiter.node.next;
1760517605 if (waiter.address != @intFromPtr(ptr)) continue;
1760617606 const old_status = waiter.thread_status.fetchAnd(
17607 .{ .cancelation = @enumFromInt(0b110), .awaitable = .all_ones },
17607 .{ .cancelation = @fromBackingInt(@intCast(0b110)), .awaitable = .all_ones },
1760817608 .monotonic,
1760917609 );
1761017610 switch (old_status.cancelation) {
......@@ -17669,7 +17669,7 @@ const parking_sleep = struct {
1766917669 thread.futex_waiter = null;
1767017670 {
1767117671 const old_status = thread.status.fetchOr(
17672 .{ .cancelation = @enumFromInt(0b001), .awaitable = .null },
17672 .{ .cancelation = @fromBackingInt(@intCast(0b001)), .awaitable = .null },
1767317673 .release, // release `thread.futex_waiter`
1767417674 );
1767517675 switch (old_status.cancelation) {
......@@ -17696,7 +17696,7 @@ const parking_sleep = struct {
1769617696 error.Timeout => {
1769717697 // We're not out of the woods yet: an unpark could race with the timeout.
1769817698 const old_status = thread.status.fetchAnd(
17699 .{ .cancelation = @enumFromInt(0b110), .awaitable = .all_ones },
17699 .{ .cancelation = @fromBackingInt(@intCast(0b110)), .awaitable = .all_ones },
1770017700 .monotonic,
1770117701 );
1770217702 switch (old_status.cancelation) {
......@@ -17747,12 +17747,12 @@ const ParkingMutex = struct {
1774717747 _,
1774817748 /// Returns the head of the waiter list. Illegal to call if `s == .unlocked`.
1774917749 fn waiter(s: State) ?*Waiter {
17750 return @ptrFromInt(@intFromEnum(s));
17750 return @ptrFromInt(@backingInt(s));
1775117751 }
1775217752 /// Returns a locked state where `w` is contending the lock.
1775317753 /// If `w` is `null`, returns `.locked_once`.
1775417754 fn fromWaiter(w: ?*Waiter) State {
17755 return @enumFromInt(@intFromPtr(w));
17755 return @fromBackingInt(@intCast(@intFromPtr(w)));
1775617756 }
1775717757 };
1775817758 const Waiter = struct {
......@@ -18316,7 +18316,7 @@ fn createFileMap(
1831618316 if (rc != std.c.MAP_FAILED) {
1831718317 break @as([*]align(page_align) u8, @ptrCast(@alignCast(rc)))[0..len];
1831818318 }
18319 break :e @enumFromInt(posix.system._errno().*);
18319 break :e @fromBackingInt(@intCast(posix.system._errno().*));
1832018320 } else e: {
1832118321 const err = posix.errno(rc);
1832218322 if (err == .SUCCESS) {
......@@ -18409,7 +18409,7 @@ fn fileMemoryMapSetLength(
1840918409 syscall.finish();
1841018410 const err: posix.E = if (builtin.link_libc) e: {
1841118411 if (rc != std.c.MAP_FAILED) break @as([*]align(page_align) u8, @ptrCast(@alignCast(rc)))[0..new_len];
18412 break :e @enumFromInt(posix.system._errno().*);
18412 break :e @fromBackingInt(@intCast(posix.system._errno().*));
1841318413 } else e: {
1841418414 const err = posix.errno(rc);
1841518415 if (err == .SUCCESS) break @as([*]align(page_align) u8, @ptrFromInt(rc))[0..new_len];
......@@ -18733,7 +18733,7 @@ fn deviceIoControl(o: *const Io.Operation.DeviceIoControl) Io.Cancelable!Io.Oper
1873318733 },
1873418734 else => |err| {
1873518735 syscall.finish();
18736 return -@as(i32, @intFromEnum(err));
18736 return -@as(i32, @backingInt(err));
1873718737 },
1873818738 }
1873918739 }
......@@ -18782,7 +18782,7 @@ fn eventWait(event: *Io.Event) void {
1878218782 .is_set => return,
1878318783 };
1878418784 while (true) {
18785 Thread.futexWaitUncancelable(@ptrCast(event), @intFromEnum(Io.Event.waiting), null);
18785 Thread.futexWaitUncancelable(@ptrCast(event), @backingInt(Io.Event.waiting), null);
1878618786 switch (@atomicLoad(Io.Event, event, .acquire)) {
1878718787 .unset => unreachable, // `reset` called before pending `wait` returned
1878818788 .waiting => continue,
......@@ -18881,10 +18881,10 @@ pub fn mutexLock(m: *Io.Mutex) void {
1888118881 return;
1888218882 };
1888318883 if (initial_state == .contended) {
18884 Thread.futexWaitUncancelable(@ptrCast(&m.state.raw), @intFromEnum(Io.Mutex.State.contended), null);
18884 Thread.futexWaitUncancelable(@ptrCast(&m.state.raw), @backingInt(Io.Mutex.State.contended), null);
1888518885 }
1888618886 while (m.state.swap(.contended, .acquire) != .unlocked) {
18887 Thread.futexWaitUncancelable(@ptrCast(&m.state.raw), @intFromEnum(Io.Mutex.State.contended), null);
18887 Thread.futexWaitUncancelable(@ptrCast(&m.state.raw), @backingInt(Io.Mutex.State.contended), null);
1888818888 }
1888918889}
1889018890
lib/std/Io/Uring.zig+31-31
......@@ -177,11 +177,11 @@ const Fiber = struct {
177177 _,
178178
179179 fn subWrap(lhs: Awaiting, rhs: Awaiting) Awaiting {
180 return @enumFromInt(@intFromEnum(lhs) -% @intFromEnum(rhs));
180 return @fromBackingInt(@intCast(@backingInt(lhs) -% @backingInt(rhs)));
181181 }
182182
183183 fn fromIoUringFd(fd: fd_t) Awaiting {
184 const awaiting: Awaiting = @enumFromInt(fd);
184 const awaiting: Awaiting = @fromBackingInt(@intCast(fd));
185185 switch (awaiting) {
186186 .nothing, .group => unreachable,
187187 _ => return awaiting,
......@@ -191,7 +191,7 @@ const Fiber = struct {
191191 fn toIoUringFd(awaiting: Awaiting) fd_t {
192192 switch (awaiting) {
193193 .nothing, .group => unreachable,
194 _ => return @intFromEnum(awaiting),
194 _ => return @backingInt(awaiting),
195195 }
196196 }
197197 };
......@@ -217,7 +217,7 @@ const Fiber = struct {
217217 const unblocked: CancelProtection = .{ .user = .unblocked, .acknowledged = false };
218218
219219 fn check(cancel_protection: CancelProtection) Io.CancelProtection {
220 return @enumFromInt(@intFromBool(cancel_protection != unblocked));
220 return @fromBackingInt(@intCast(@intFromBool(cancel_protection != unblocked)));
221221 }
222222
223223 fn acknowledge(cancel_protection: *CancelProtection) void {
......@@ -359,7 +359,7 @@ const Fiber = struct {
359359 Fiber.CancelStatus,
360360 &fiber.cancel_status,
361361 .Or,
362 .{ .requested = true, .awaiting = @enumFromInt(0) },
362 .{ .requested = true, .awaiting = @fromBackingInt(@intCast(0)) },
363363 .acquire,
364364 );
365365 assert(!cancel_status.requested);
......@@ -385,7 +385,7 @@ const Fiber = struct {
385385 .addr = @intFromPtr(fiber),
386386 .len = 0,
387387 .rw_flags = 0,
388 .user_data = @intFromEnum(Completion.Userdata.wakeup),
388 .user_data = @backingInt(Completion.Userdata.wakeup),
389389 .buf_index = 0,
390390 .personality = 0,
391391 .splice_fd_in = 0,
......@@ -397,10 +397,10 @@ const Fiber = struct {
397397 .ioprio = 0,
398398 .fd = awaiting_io_uring_fd,
399399 .off = @intFromPtr(fiber) | 0b01,
400 .addr = @intFromEnum(linux.IORING_MSG_RING_COMMAND.DATA),
400 .addr = @backingInt(linux.IORING_MSG_RING_COMMAND.DATA),
401401 .len = 0,
402402 .rw_flags = 0,
403 .user_data = @intFromEnum(Completion.Userdata.cleanup),
403 .user_data = @backingInt(Completion.Userdata.cleanup),
404404 .buf_index = 0,
405405 .personality = 0,
406406 .splice_fd_in = 0,
......@@ -537,11 +537,11 @@ const CachedFd = struct {
537537 _,
538538
539539 fn fromFd(fd: fd_t) Once {
540 return @enumFromInt(@as(u31, @intCast(fd)));
540 return @fromBackingInt(@intCast(@as(u31, @intCast(fd))));
541541 }
542542
543543 fn toFd(once: Once) fd_t {
544 return @as(u31, @intCast(@intFromEnum(once)));
544 return @as(u31, @intCast(@backingInt(once)));
545545 }
546546 };
547547
......@@ -552,8 +552,8 @@ const CachedFd = struct {
552552 .uninitialized => {},
553553 .initializing => unreachable,
554554 _ => |fd| {
555 assert(@intFromEnum(fd) >= 0);
556 _ = linux.close(@intFromEnum(fd));
555 assert(@backingInt(fd) >= 0);
556 _ = linux.close(@backingInt(fd));
557557 cached_fd.* = .init;
558558 },
559559 }
......@@ -573,7 +573,7 @@ const CachedFd = struct {
573573 .initializing => try futexWait(
574574 ev,
575575 @ptrCast(&cached_fd.once),
576 @bitCast(@intFromEnum(once)),
576 @bitCast(@backingInt(once)),
577577 .none,
578578 ),
579579 _ => |fd| {
......@@ -997,11 +997,11 @@ fn schedule(ev: *Evented, thread: *Thread, ready_queue: Fiber.Queue) bool {
997997 .flags = linux.IOSQE_CQE_SKIP_SUCCESS,
998998 .ioprio = 0,
999999 .fd = idle_search_thread.io_uring.fd,
1000 .off = @intFromEnum(Completion.Userdata.wakeup),
1001 .addr = @intFromEnum(linux.IORING_MSG_RING_COMMAND.DATA),
1000 .off = @backingInt(Completion.Userdata.wakeup),
1001 .addr = @backingInt(linux.IORING_MSG_RING_COMMAND.DATA),
10021002 .len = 0,
10031003 .rw_flags = 0,
1004 .user_data = @intFromEnum(Completion.Userdata.wakeup),
1004 .user_data = @backingInt(Completion.Userdata.wakeup),
10051005 .buf_index = 0,
10061006 .personality = 0,
10071007 .splice_fd_in = 0,
......@@ -1164,7 +1164,7 @@ fn idle(ev: *Evented, thread: *Thread) void {
11641164 if (cqes.len == 0) break;
11651165 for (cqes) |cqe| if (cqe.flags & linux.IORING_CQE_F_SKIP == 0) switch (@as(
11661166 Completion.Userdata,
1167 @enumFromInt(cqe.user_data),
1167 @fromBackingInt(@intCast(cqe.user_data)),
11681168 )) {
11691169 .unused => unreachable, // bad submission queued?
11701170 .wakeup => {},
......@@ -1204,7 +1204,7 @@ fn idle(ev: *Evented, thread: *Thread) void {
12041204 .addr = cqe.user_data & ~@as(usize, 0b11),
12051205 .len = 0,
12061206 .rw_flags = 0,
1207 .user_data = @intFromEnum(Completion.Userdata.wakeup),
1207 .user_data = @backingInt(Completion.Userdata.wakeup),
12081208 .buf_index = 0,
12091209 .personality = 0,
12101210 .splice_fd_in = 0,
......@@ -1337,11 +1337,11 @@ const SwitchMessage = struct {
13371337 .flags = linux.IOSQE_CQE_SKIP_SUCCESS,
13381338 .ioprio = 0,
13391339 .fd = each_thread.io_uring.fd,
1340 .off = @intFromEnum(Completion.Userdata.exit),
1341 .addr = @intFromEnum(linux.IORING_MSG_RING_COMMAND.DATA),
1340 .off = @backingInt(Completion.Userdata.exit),
1341 .addr = @backingInt(linux.IORING_MSG_RING_COMMAND.DATA),
13421342 .len = 0,
13431343 .rw_flags = 0,
1344 .user_data = @intFromEnum(Completion.Userdata.cleanup),
1344 .user_data = @backingInt(Completion.Userdata.cleanup),
13451345 .buf_index = 0,
13461346 .personality = 0,
13471347 .splice_fd_in = 0,
......@@ -1986,7 +1986,7 @@ fn futexWait(
19861986 else => 0,
19871987 .boot => linux.IORING_TIMEOUT_BOOTTIME,
19881988 }),
1989 .user_data = @intFromEnum(Completion.Userdata.wakeup),
1989 .user_data = @backingInt(Completion.Userdata.wakeup),
19901990 .buf_index = 0,
19911991 .personality = 0,
19921992 .splice_fd_in = 0,
......@@ -2052,7 +2052,7 @@ fn futexWake(userdata: ?*anyopaque, ptr: *const u32, max_waiters: u32) void {
20522052 .addr = @intFromPtr(ptr),
20532053 .len = 0,
20542054 .rw_flags = 0,
2055 .user_data = @intFromEnum(Completion.Userdata.futex_wake),
2055 .user_data = @backingInt(Completion.Userdata.futex_wake),
20562056 .buf_index = 0,
20572057 .personality = 0,
20582058 .splice_fd_in = 0,
......@@ -2188,7 +2188,7 @@ fn deviceIoControl(
21882188 switch (linux.errno(rc)) {
21892189 .SUCCESS => return @bitCast(@as(u32, @truncate(rc))),
21902190 .INTR => {},
2191 else => |err| return -@as(i32, @intFromEnum(err)),
2191 else => |err| return -@as(i32, @backingInt(err)),
21922192 }
21932193 }
21942194}
......@@ -2547,7 +2547,7 @@ fn batchCancel(userdata: ?*anyopaque, batch: *Io.Batch) void {
25472547 .addr = @intFromPtr(&pending.userdata) | 0b10,
25482548 .len = 0,
25492549 .rw_flags = 0,
2550 .user_data = @intFromEnum(Completion.Userdata.wakeup),
2550 .user_data = @backingInt(Completion.Userdata.wakeup),
25512551 .buf_index = 0,
25522552 .personality = 0,
25532553 .splice_fd_in = 0,
......@@ -4701,7 +4701,7 @@ fn childWait(userdata: ?*anyopaque, child: *process.Child) process.Child.WaitErr
47014701 .fd = pid,
47024702 .off = @intFromPtr(&info),
47034703 .addr = 0,
4704 .len = @intFromEnum(linux.P.PID),
4704 .len = @backingInt(linux.P.PID),
47054705 .rw_flags = 0,
47064706 .user_data = @intFromPtr(maybe_sync.cancel_region.fiber),
47074707 .buf_index = 0,
......@@ -4737,11 +4737,11 @@ fn childWait(userdata: ?*anyopaque, child: *process.Child) process.Child.WaitErr
47374737 }
47384738 }
47394739 const status: u32 = @bitCast(info.fields.common.second.sigchld.status);
4740 const code: linux.CLD = @enumFromInt(info.code);
4740 const code: linux.CLD = @fromBackingInt(@intCast(info.code));
47414741 return switch (code) {
47424742 .EXITED => .{ .exited = @truncate(status) },
4743 .KILLED, .DUMPED => .{ .signal = @enumFromInt(status) },
4744 .TRAPPED, .STOPPED => .{ .stopped = @enumFromInt(status) },
4743 .KILLED, .DUMPED => .{ .signal = @fromBackingInt(@intCast(status)) },
4744 .TRAPPED, .STOPPED => .{ .stopped = @fromBackingInt(@intCast(status)) },
47454745 _, .CONTINUED => .{ .unknown = status },
47464746 };
47474747 },
......@@ -4782,7 +4782,7 @@ fn childKill(userdata: ?*anyopaque, child: *process.Child) void {
47824782 .fd = pid,
47834783 .off = @intFromPtr(&info),
47844784 .addr = 0,
4785 .len = @intFromEnum(linux.P.PID),
4785 .len = @backingInt(linux.P.PID),
47864786 .rw_flags = 0,
47874787 .user_data = @intFromPtr(maybe_sync.cancel_region.fiber),
47884788 .buf_index = 0,
......@@ -5370,7 +5370,7 @@ fn closeAsync(ev: *Evented, fd: fd_t) void {
53705370 .addr = 0,
53715371 .len = 0,
53725372 .rw_flags = 0,
5373 .user_data = @intFromEnum(Completion.Userdata.close),
5373 .user_data = @backingInt(Completion.Userdata.close),
53745374 .buf_index = 0,
53755375 .personality = 0,
53765376 .splice_fd_in = 0,
lib/std/Io/Writer.zig+15-15
......@@ -164,7 +164,7 @@ pub fn countSplat(data: []const []const u8, splat: usize) usize {
164164}
165165
166166pub fn countSendFileLowerBound(n: usize, file_reader: *File.Reader, limit: Limit) ?usize {
167 const total: u64 = @min(@intFromEnum(limit), file_reader.getSize() catch return null);
167 const total: u64 = @min(@backingInt(limit), file_reader.getSize() catch return null);
168168 return std.math.lossyCast(usize, total + n);
169169}
170170
......@@ -220,7 +220,7 @@ pub fn writeSplatHeaderLimit(
220220 splat: usize,
221221 limit: Limit,
222222) Error!usize {
223 var remaining = @intFromEnum(limit);
223 var remaining = @backingInt(limit);
224224 {
225225 const copy_len = @min(header.len, w.buffer.len - w.end, remaining);
226226 if (header.len - copy_len != 0) return writeSplatHeaderLimitFinish(w, header, data, splat, remaining);
......@@ -230,7 +230,7 @@ pub fn writeSplatHeaderLimit(
230230 }
231231 for (data[0 .. data.len - 1], 0..) |buf, i| {
232232 const copy_len = @min(buf.len, w.buffer.len - w.end, remaining);
233 if (buf.len - copy_len != 0) return @intFromEnum(limit) - remaining +
233 if (buf.len - copy_len != 0) return @backingInt(limit) - remaining +
234234 try writeSplatHeaderLimitFinish(w, &.{}, data[i..], splat, remaining);
235235 @memcpy(w.buffer[w.end..][0..copy_len], buf[0..copy_len]);
236236 w.end += copy_len;
......@@ -239,7 +239,7 @@ pub fn writeSplatHeaderLimit(
239239 const pattern = data[data.len - 1];
240240 const splat_n = pattern.len * splat;
241241 if (splat_n > @min(w.buffer.len - w.end, remaining)) {
242 const buffered_n = @intFromEnum(limit) - remaining;
242 const buffered_n = @backingInt(limit) - remaining;
243243 const written = try writeSplatHeaderLimitFinish(w, &.{}, data[data.len - 1 ..][0..1], splat, remaining);
244244 return buffered_n + written;
245245 }
......@@ -250,7 +250,7 @@ pub fn writeSplatHeaderLimit(
250250 }
251251
252252 remaining -= splat_n;
253 return @intFromEnum(limit) - remaining;
253 return @backingInt(limit) - remaining;
254254}
255255
256256fn writeSplatHeaderLimitFinish(
......@@ -998,7 +998,7 @@ pub fn sendFileAll(w: *Writer, file_reader: *File.Reader, limit: Limit) FileAllE
998998 // Explicitly assert it here as well to ensure the assert is hit even if
999999 // the fallback path is not taken.
10001000 assert(w.buffer.len > 0);
1001 var remaining = @intFromEnum(limit);
1001 var remaining = @backingInt(limit);
10021002 while (remaining > 0) {
10031003 const n = sendFile(w, file_reader, .limited(remaining)) catch |err| switch (err) {
10041004 error.EndOfStream => break,
......@@ -1011,7 +1011,7 @@ pub fn sendFileAll(w: *Writer, file_reader: *File.Reader, limit: Limit) FileAllE
10111011 };
10121012 remaining -= n;
10131013 }
1014 return @intFromEnum(limit) - remaining;
1014 return @backingInt(limit) - remaining;
10151015}
10161016
10171017/// Equivalent to `sendFileAll` but uses direct `pread` and `read` calls on
......@@ -1021,14 +1021,14 @@ pub fn sendFileAll(w: *Writer, file_reader: *File.Reader, limit: Limit) FileAllE
10211021///
10221022/// Asserts nonzero buffer capacity.
10231023pub fn sendFileReadingAll(w: *Writer, file_reader: *File.Reader, limit: Limit) FileAllError!usize {
1024 var remaining = @intFromEnum(limit);
1024 var remaining = @backingInt(limit);
10251025 while (remaining > 0) {
10261026 remaining -= sendFileReading(w, file_reader, .limited(remaining)) catch |err| switch (err) {
10271027 error.EndOfStream => break,
10281028 else => |e| return e,
10291029 };
10301030 }
1031 return @intFromEnum(limit) - remaining;
1031 return @backingInt(limit) - remaining;
10321032}
10331033
10341034pub fn alignBuffer(
......@@ -1105,7 +1105,7 @@ pub fn printValue(
11051105 .float, .comptime_float => return printFloat(w, value, options.toNumber(.decimal, .lower)),
11061106 .int, .comptime_int => return printInt(w, value, 10, .lower, options),
11071107 .@"struct" => return value.formatNumber(w, options.toNumber(.decimal, .lower)),
1108 .@"enum" => return printInt(w, @intFromEnum(value), 10, .lower, options),
1108 .@"enum" => return printInt(w, @backingInt(value), 10, .lower, options),
11091109 .vector => return printVector(w, fmt, options, value, max_depth),
11101110 else => invalidFmtError(fmt, value),
11111111 },
......@@ -1113,14 +1113,14 @@ pub fn printValue(
11131113 'u' => return w.printUnicodeCodepoint(value),
11141114 'b' => switch (@typeInfo(T)) {
11151115 .int, .comptime_int => return printInt(w, value, 2, .lower, options),
1116 .@"enum" => return printInt(w, @intFromEnum(value), 2, .lower, options),
1116 .@"enum" => return printInt(w, @backingInt(value), 2, .lower, options),
11171117 .@"struct" => return value.formatNumber(w, options.toNumber(.binary, .lower)),
11181118 .vector => return printVector(w, fmt, options, value, max_depth),
11191119 else => invalidFmtError(fmt, value),
11201120 },
11211121 'o' => switch (@typeInfo(T)) {
11221122 .int, .comptime_int => return printInt(w, value, 8, .lower, options),
1123 .@"enum" => return printInt(w, @intFromEnum(value), 8, .lower, options),
1123 .@"enum" => return printInt(w, @backingInt(value), 8, .lower, options),
11241124 .@"struct" => return value.formatNumber(w, options.toNumber(.octal, .lower)),
11251125 .vector => return printVector(w, fmt, options, value, max_depth),
11261126 else => invalidFmtError(fmt, value),
......@@ -1128,7 +1128,7 @@ pub fn printValue(
11281128 'x' => switch (@typeInfo(T)) {
11291129 .float, .comptime_float => return printFloatHexOptions(w, value, options.toNumber(.hex, .lower)),
11301130 .int, .comptime_int => return printInt(w, value, 16, .lower, options),
1131 .@"enum" => return printInt(w, @intFromEnum(value), 16, .lower, options),
1131 .@"enum" => return printInt(w, @backingInt(value), 16, .lower, options),
11321132 .@"struct" => return value.formatNumber(w, options.toNumber(.hex, .lower)),
11331133 .pointer => |info| switch (info.size) {
11341134 .one, .slice => {
......@@ -1153,7 +1153,7 @@ pub fn printValue(
11531153 'X' => switch (@typeInfo(T)) {
11541154 .float, .comptime_float => return printFloatHexOptions(w, value, options.toNumber(.hex, .upper)),
11551155 .int, .comptime_int => return printInt(w, value, 16, .upper, options),
1156 .@"enum" => return printInt(w, @intFromEnum(value), 16, .upper, options),
1156 .@"enum" => return printInt(w, @backingInt(value), 16, .upper, options),
11571157 .@"struct" => return value.formatNumber(w, options.toNumber(.hex, .upper)),
11581158 .pointer => |info| switch (info.size) {
11591159 .one, .slice => {
......@@ -1472,7 +1472,7 @@ fn printEnumNonexhaustive(w: *Writer, value: anytype) Error!void {
14721472 return;
14731473 }
14741474 try w.writeAll("@enumFromInt(");
1475 try w.printInt(@intFromEnum(value), 10, .lower, .{});
1475 try w.printInt(@backingInt(value), 10, .lower, .{});
14761476 try w.writeByte(')');
14771477}
14781478
lib/std/Io/net/HostName.zig+1-1
......@@ -277,7 +277,7 @@ pub const DnsResponse = struct {
277277 if (i + 10 + len > r.len) return error.InvalidDnsPacket;
278278 defer dr.bytes_index = i + 10 + len;
279279 return .{
280 .rr = @enumFromInt(r[i + 1]),
280 .rr = @fromBackingInt(@intCast(r[i + 1])),
281281 .packet = r,
282282 .data_off = i + 10,
283283 .data_len = len,
lib/std/Progress.zig+41-41
......@@ -226,7 +226,7 @@ pub const Node = struct {
226226 fn unwrap(i: @This()) ?Index {
227227 return switch (i) {
228228 .unused, .none => return null,
229 else => @enumFromInt(@intFromEnum(i)),
229 else => @fromBackingInt(@intCast(@backingInt(i))),
230230 };
231231 }
232232 };
......@@ -238,12 +238,12 @@ pub const Node = struct {
238238
239239 pub fn unwrap(i: @This()) ?Index {
240240 if (i == .none) return null;
241 return @enumFromInt(@intFromEnum(i));
241 return @fromBackingInt(@intCast(@backingInt(i)));
242242 }
243243
244244 fn toParent(i: @This()) Parent {
245 assert(@intFromEnum(i) != @intFromEnum(Parent.unused));
246 return @enumFromInt(@intFromEnum(i));
245 assert(@backingInt(i) != @backingInt(Parent.unused));
246 return @fromBackingInt(@intCast(@backingInt(i)));
247247 }
248248 };
249249
......@@ -252,13 +252,13 @@ pub const Node = struct {
252252 _,
253253
254254 fn toParent(i: @This()) Parent {
255 assert(@intFromEnum(i) != @intFromEnum(Parent.unused));
256 assert(@intFromEnum(i) != @intFromEnum(Parent.none));
257 return @enumFromInt(@intFromEnum(i));
255 assert(@backingInt(i) != @backingInt(Parent.unused));
256 assert(@backingInt(i) != @backingInt(Parent.none));
257 return @fromBackingInt(@intCast(@backingInt(i)));
258258 }
259259
260260 pub fn toOptional(i: @This()) OptionalIndex {
261 return @enumFromInt(@intFromEnum(i));
261 return @fromBackingInt(@intCast(@backingInt(i)));
262262 }
263263 };
264264
......@@ -303,7 +303,7 @@ pub const Node = struct {
303303 return Node.none;
304304 }
305305
306 return init(@enumFromInt(free_index), parent, name, estimated_total_items);
306 return init(@fromBackingInt(@intCast(free_index)), parent, name, estimated_total_items);
307307 }
308308
309309 pub fn startFmt(node: Node, estimated_total_items: usize, comptime format: []const u8, args: anytype) Node {
......@@ -458,19 +458,19 @@ pub const Node = struct {
458458 }
459459
460460 fn storageByIndex(index: Node.Index) *Node.Storage {
461 return &global_progress.node_storage[@intFromEnum(index)];
461 return &global_progress.node_storage[@backingInt(index)];
462462 }
463463
464464 fn parentByIndex(index: Node.Index) *Node.Parent {
465 return &global_progress.node_parents[@intFromEnum(index)];
465 return &global_progress.node_parents[@backingInt(index)];
466466 }
467467
468468 fn freelistNextByIndex(index: Node.Index) *Node.OptionalIndex {
469 return &global_progress.node_freelist_next[@intFromEnum(index)];
469 return &global_progress.node_freelist_next[@backingInt(index)];
470470 }
471471
472472 fn init(free_index: Index, parent: Parent, name: []const u8, estimated_total_items: usize) Node {
473 assert(parent == .none or @intFromEnum(parent) < node_storage_buffer_len);
473 assert(parent == .none or @backingInt(parent) < node_storage_buffer_len);
474474
475475 const storage = storageByIndex(free_index);
476476 @atomicStore(u32, &storage.completed_count, 0, .monotonic);
......@@ -595,7 +595,7 @@ pub fn start(io: Io, options: Options) Node {
595595
596596 @memset(&global_progress.node_parents, .unused);
597597 @memset(&global_progress.ipc, .{ .locked = false, .valid = false, .generation = 0 });
598 const root_node = Node.init(@enumFromInt(0), .none, options.root_name, options.estimated_total_items);
598 const root_node = Node.init(@fromBackingInt(@intCast(0)), .none, options.root_name, options.estimated_total_items);
599599 global_progress.node_end_index = 1;
600600
601601 assert(options.draw_buffer.len >= 200);
......@@ -1063,7 +1063,7 @@ fn serialize(io: Io, serialized_buffer: *Serialized.Buffer) !Serialized {
10631063 dest_storage.completed_count = @atomicLoad(u32, &storage_ptr.completed_count, .monotonic);
10641064
10651065 serialized_buffer.parents[serialized_len] = parent;
1066 map_entry.* = @enumFromInt(serialized_len);
1066 map_entry.* = @fromBackingInt(@intCast(serialized_len));
10671067 if (maybe_ipc_start == null and dest_storage.getIpcIndex() != null) maybe_ipc_start = serialized_len;
10681068 serialized_len += 1;
10691069 }
......@@ -1073,7 +1073,7 @@ fn serialize(io: Io, serialized_buffer: *Serialized.Buffer) !Serialized {
10731073 parent.* = switch (parent.*) {
10741074 .unused => unreachable,
10751075 .none => .none,
1076 _ => |p| map[@intFromEnum(p)].toParent(),
1076 _ => |p| map[@backingInt(p)].toParent(),
10771077 };
10781078 }
10791079
......@@ -1173,11 +1173,11 @@ fn serialize(io: Io, serialized_buffer: *Serialized.Buffer) !Serialized {
11731173 prev_parents[serialized_len..][0..nodes_len],
11741174 ) |*parent, prev_parent| parent.* = switch (prev_parent) {
11751175 .none, .unused => .none,
1176 _ => if (@intFromEnum(prev_parent) == ipc_data.main_index)
1177 @enumFromInt(main_index)
1178 else if (@intFromEnum(prev_parent) >= start_index and
1179 @intFromEnum(prev_parent) < start_index + nodes_len)
1180 @enumFromInt(@intFromEnum(prev_parent) - start_index + serialized_len)
1176 _ => if (@backingInt(prev_parent) == ipc_data.main_index)
1177 @fromBackingInt(@intCast(main_index))
1178 else if (@backingInt(prev_parent) >= start_index and
1179 @backingInt(prev_parent) < start_index + nodes_len)
1180 @fromBackingInt(@intCast(@backingInt(prev_parent) - start_index + serialized_len))
11811181 else
11821182 .none,
11831183 };
......@@ -1228,12 +1228,12 @@ fn serialize(io: Io, serialized_buffer: *Serialized.Buffer) !Serialized {
12281228 // Fix bad data so the rest of the code does not see `unused`.
12291229 .none, .unused => .none,
12301230 // Root node is being mounted here.
1231 @as(Node.Parent, @enumFromInt(0)) => @enumFromInt(main_index),
1231 @as(Node.Parent, @fromBackingInt(@intCast(0))) => @fromBackingInt(@intCast(main_index)),
12321232 // Other nodes mounted at the end.
12331233 // Don't trust child data; if the data is outside the expected range,
12341234 // ignore the data. This also handles the case when data was truncated.
1235 _ => if (@intFromEnum(prev_parent) <= nodes_len)
1236 @enumFromInt(@intFromEnum(prev_parent) - 1 + serialized_len)
1235 _ => if (@backingInt(prev_parent) <= nodes_len)
1236 @fromBackingInt(@intCast(@backingInt(prev_parent) - 1 + serialized_len))
12371237 else
12381238 .none,
12391239 };
......@@ -1290,13 +1290,13 @@ fn computeRedraw(io: Io, serialized_buffer: *Serialized.Buffer) !struct { []u8,
12901290 @memset(children, .{ .child = .none, .sibling = .none });
12911291
12921292 for (serialized.parents, 0..) |parent, child_index_usize| {
1293 const child_index: Node.Index = @enumFromInt(child_index_usize);
1293 const child_index: Node.Index = @fromBackingInt(@intCast(child_index_usize));
12941294 assert(parent != .unused);
12951295 const parent_index = parent.unwrap() orelse continue;
1296 const children_node = &children[@intFromEnum(parent_index)];
1296 const children_node = &children[@backingInt(parent_index)];
12971297 if (children_node.child.unwrap()) |existing_child_index| {
1298 const existing_child = &children[@intFromEnum(existing_child_index)];
1299 children[@intFromEnum(child_index)].sibling = existing_child.sibling;
1298 const existing_child = &children[@backingInt(existing_child_index)];
1299 children[@backingInt(child_index)].sibling = existing_child.sibling;
13001300 existing_child.sibling = child_index.toOptional();
13011301 } else {
13021302 children_node.child = child_index.toOptional();
......@@ -1325,14 +1325,14 @@ fn computeRedraw(io: Io, serialized_buffer: *Serialized.Buffer) !struct { []u8,
13251325 .windows_api => {},
13261326 }
13271327
1328 const root_node_index: Node.Index = @enumFromInt(0);
1328 const root_node_index: Node.Index = @fromBackingInt(@intCast(0));
13291329 i, const nl_n = computeNode(buf, i, 0, serialized, children, root_node_index);
13301330
13311331 if (global_progress.terminal_mode == .ansi_escape_codes) {
13321332 {
13331333 // Set progress state https://conemu.github.io/en/AnsiEscapeCodes.html#ConEmu_specific_OSC
13341334 const root_storage = &serialized.storage[0];
1335 const storage = if (root_storage.name[0] != 0 or children[0].child == .none) root_storage else &serialized.storage[@intFromEnum(children[0].child)];
1335 const storage = if (root_storage.name[0] != 0 or children[0].child == .none) root_storage else &serialized.storage[@backingInt(children[0].child)];
13361336 const estimated_total = storage.estimated_total_count;
13371337 const completed_items = storage.completed_count;
13381338 const status = @atomicLoad(Status, &global_progress.status, .monotonic);
......@@ -1395,15 +1395,15 @@ fn computePrefix(
13951395 node_index: Node.Index,
13961396) usize {
13971397 var i = start_i;
1398 const parent_index = serialized.parents[@intFromEnum(node_index)].unwrap() orelse return i;
1399 if (serialized.parents[@intFromEnum(parent_index)] == .none) return i;
1400 if (@intFromEnum(serialized.parents[@intFromEnum(parent_index)]) == 0 and
1398 const parent_index = serialized.parents[@backingInt(node_index)].unwrap() orelse return i;
1399 if (serialized.parents[@backingInt(parent_index)] == .none) return i;
1400 if (@backingInt(serialized.parents[@backingInt(parent_index)]) == 0 and
14011401 serialized.storage[0].name[0] == 0)
14021402 {
14031403 return i;
14041404 }
14051405 i = computePrefix(buf, i, nl_n, serialized, children, parent_index);
1406 if (children[@intFromEnum(parent_index)].sibling == .none) {
1406 if (children[@backingInt(parent_index)].sibling == .none) {
14071407 const prefix = " ";
14081408 const upper_bound_len = prefix.len + lineUpperBoundLen(nl_n);
14091409 if (i + upper_bound_len > buf.len) return buf.len;
......@@ -1442,24 +1442,24 @@ fn computeNode(
14421442 if (i + lineUpperBoundLen(nl_n) > buf.len)
14431443 return .{ start_i, start_nl_n };
14441444
1445 const storage = &serialized.storage[@intFromEnum(node_index)];
1445 const storage = &serialized.storage[@backingInt(node_index)];
14461446 const estimated_total = storage.estimated_total_count;
14471447 const completed_items = storage.completed_count;
14481448 const name = if (std.mem.findScalar(u8, &storage.name, 0)) |end| storage.name[0..end] else &storage.name;
1449 const parent = serialized.parents[@intFromEnum(node_index)];
1449 const parent = serialized.parents[@backingInt(node_index)];
14501450
14511451 if (parent != .none) p: {
1452 if (@intFromEnum(parent) == 0 and serialized.storage[0].name[0] == 0) {
1452 if (@backingInt(parent) == 0 and serialized.storage[0].name[0] == 0) {
14531453 break :p;
14541454 }
1455 if (children[@intFromEnum(node_index)].sibling == .none) {
1455 if (children[@backingInt(node_index)].sibling == .none) {
14561456 i = appendTreeSymbol(.langle, buf, i);
14571457 } else {
14581458 i = appendTreeSymbol(.tee, buf, i);
14591459 }
14601460 }
14611461
1462 const is_empty_root = @intFromEnum(node_index) == 0 and serialized.storage[0].name[0] == 0;
1462 const is_empty_root = @backingInt(node_index) == 0 and serialized.storage[0].name[0] == 0;
14631463 if (!is_empty_root) {
14641464 if (name.len != 0 or estimated_total > 0) {
14651465 if (estimated_total > 0) {
......@@ -1492,13 +1492,13 @@ fn computeNode(
14921492 }
14931493
14941494 if (global_progress.withinRowLimit(nl_n)) {
1495 if (children[@intFromEnum(node_index)].child.unwrap()) |child| {
1495 if (children[@backingInt(node_index)].child.unwrap()) |child| {
14961496 i, nl_n = computeNode(buf, i, nl_n, serialized, children, child);
14971497 }
14981498 }
14991499
15001500 if (global_progress.withinRowLimit(nl_n)) {
1501 if (children[@intFromEnum(node_index)].sibling.unwrap()) |sibling| {
1501 if (children[@backingInt(node_index)].sibling.unwrap()) |sibling| {
15021502 i, nl_n = computeNode(buf, i, nl_n, serialized, children, sibling);
15031503 }
15041504 }
lib/std/Target.zig+14-14
......@@ -286,7 +286,7 @@ pub const Os = struct {
286286
287287 /// Returns whether the first version `ver` is newer (greater) than or equal to the second version `ver`.
288288 pub inline fn isAtLeast(ver: WindowsVersion, min_ver: WindowsVersion) bool {
289 return @intFromEnum(ver) >= @intFromEnum(min_ver);
289 return @backingInt(ver) >= @backingInt(min_ver);
290290 }
291291
292292 pub const Range = struct {
......@@ -294,23 +294,23 @@ pub const Os = struct {
294294 max: WindowsVersion,
295295
296296 pub inline fn includesVersion(range: Range, ver: WindowsVersion) bool {
297 return @intFromEnum(ver) >= @intFromEnum(range.min) and
298 @intFromEnum(ver) <= @intFromEnum(range.max);
297 return @backingInt(ver) >= @backingInt(range.min) and
298 @backingInt(ver) <= @backingInt(range.max);
299299 }
300300
301301 /// Checks if system is guaranteed to be at least `version` or older than `version`.
302302 /// Returns `null` if a runtime check is required.
303303 pub inline fn isAtLeast(range: Range, min_ver: WindowsVersion) ?bool {
304 if (@intFromEnum(range.min) >= @intFromEnum(min_ver)) return true;
305 if (@intFromEnum(range.max) < @intFromEnum(min_ver)) return false;
304 if (@backingInt(range.min) >= @backingInt(min_ver)) return true;
305 if (@backingInt(range.max) < @backingInt(min_ver)) return false;
306306 return null;
307307 }
308308 };
309309
310310 pub fn parse(str: []const u8) !WindowsVersion {
311311 return std.meta.stringToEnum(WindowsVersion, str) orelse
312 @enumFromInt(std.fmt.parseInt(u32, str, 0) catch
313 return error.InvalidOperatingSystemVersion);
312 @fromBackingInt(@intCast(std.fmt.parseInt(u32, str, 0) catch
313 return error.InvalidOperatingSystemVersion));
314314 }
315315
316316 /// This function is defined to serialize a Zig source code representation of this
......@@ -1320,20 +1320,20 @@ pub const Cpu = struct {
13201320 pub fn featureSet(features: []const F) Set {
13211321 var x = Set.empty;
13221322 for (features) |feature| {
1323 x.addFeature(@intFromEnum(feature));
1323 x.addFeature(@backingInt(feature));
13241324 }
13251325 return x;
13261326 }
13271327
13281328 /// Returns true if the specified feature is enabled.
13291329 pub fn featureSetHas(set: Set, feature: F) bool {
1330 return set.isEnabled(@intFromEnum(feature));
1330 return set.isEnabled(@backingInt(feature));
13311331 }
13321332
13331333 /// Returns true if any specified feature is enabled.
13341334 pub fn featureSetHasAny(set: Set, features: anytype) bool {
13351335 inline for (features) |feature| {
1336 if (set.isEnabled(@intFromEnum(@as(F, feature)))) return true;
1336 if (set.isEnabled(@backingInt(@as(F, feature)))) return true;
13371337 }
13381338 return false;
13391339 }
......@@ -1341,7 +1341,7 @@ pub const Cpu = struct {
13411341 /// Returns true if every specified feature is enabled.
13421342 pub fn featureSetHasAll(set: Set, features: anytype) bool {
13431343 inline for (features) |feature| {
1344 if (!set.isEnabled(@intFromEnum(@as(F, feature)))) return false;
1344 if (!set.isEnabled(@backingInt(@as(F, feature)))) return false;
13451345 }
13461346 return true;
13471347 }
......@@ -2119,14 +2119,14 @@ pub const Cpu = struct {
21192119 /// Returns true if `feature` is enabled.
21202120 pub fn has(cpu: Cpu, comptime family: Arch.Family, feature: @field(Target, @tagName(family)).Feature) bool {
21212121 if (family != cpu.arch.family()) return false;
2122 return cpu.features.isEnabled(@intFromEnum(feature));
2122 return cpu.features.isEnabled(@backingInt(feature));
21232123 }
21242124
21252125 /// Returns true if any feature in `features` is enabled.
21262126 pub fn hasAny(cpu: Cpu, comptime family: Arch.Family, features: []const @field(Target, @tagName(family)).Feature) bool {
21272127 if (family != cpu.arch.family()) return false;
21282128 for (features) |feature| {
2129 if (cpu.features.isEnabled(@intFromEnum(feature))) return true;
2129 if (cpu.features.isEnabled(@backingInt(feature))) return true;
21302130 }
21312131 return false;
21322132 }
......@@ -2135,7 +2135,7 @@ pub const Cpu = struct {
21352135 pub fn hasAll(cpu: Cpu, comptime family: Arch.Family, features: []const @field(Target, @tagName(family)).Feature) bool {
21362136 if (family != cpu.arch.family()) return false;
21372137 for (features) |feature| {
2138 if (!cpu.features.isEnabled(@intFromEnum(feature))) return false;
2138 if (!cpu.features.isEnabled(@backingInt(feature))) return false;
21392139 }
21402140 return true;
21412141 }
lib/std/Target/aarch64.zig+277-277
......@@ -294,7 +294,7 @@ pub const all_features = blk: {
294294 const len = @typeInfo(Feature).@"enum".field_names.len;
295295 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
296296 var result: [len]CpuFeature = undefined;
297 result[@intFromEnum(Feature.a320)] = .{
297 result[@backingInt(Feature.a320)] = .{
298298 .llvm_name = "a320",
299299 .description = "Cortex-A320 ARM processors",
300300 .dependencies = featureSet(&[_]Feature{
......@@ -306,214 +306,214 @@ pub const all_features = blk: {
306306 .use_wzr_to_vec_move,
307307 }),
308308 };
309 result[@intFromEnum(Feature.addr_lsl_slow_14)] = .{
309 result[@backingInt(Feature.addr_lsl_slow_14)] = .{
310310 .llvm_name = "addr-lsl-slow-14",
311311 .description = "Address operands with shift amount of 1 or 4 are slow",
312312 .dependencies = featureSet(&[_]Feature{}),
313313 };
314 result[@intFromEnum(Feature.aes)] = .{
314 result[@backingInt(Feature.aes)] = .{
315315 .llvm_name = "aes",
316316 .description = "Enable AES support",
317317 .dependencies = featureSet(&[_]Feature{
318318 .neon,
319319 }),
320320 };
321 result[@intFromEnum(Feature.aggressive_fma)] = .{
321 result[@backingInt(Feature.aggressive_fma)] = .{
322322 .llvm_name = "aggressive-fma",
323323 .description = "Enable Aggressive FMA for floating-point.",
324324 .dependencies = featureSet(&[_]Feature{}),
325325 };
326 result[@intFromEnum(Feature.aggressive_interleaving)] = .{
326 result[@backingInt(Feature.aggressive_interleaving)] = .{
327327 .llvm_name = "aggressive-interleaving",
328328 .description = "Make use of aggressive interleaving during vectorization",
329329 .dependencies = featureSet(&[_]Feature{}),
330330 };
331 result[@intFromEnum(Feature.alternate_sextload_cvt_f32_pattern)] = .{
331 result[@backingInt(Feature.alternate_sextload_cvt_f32_pattern)] = .{
332332 .llvm_name = "alternate-sextload-cvt-f32-pattern",
333333 .description = "Use alternative pattern for sextload convert to f32",
334334 .dependencies = featureSet(&[_]Feature{}),
335335 };
336 result[@intFromEnum(Feature.altnzcv)] = .{
336 result[@backingInt(Feature.altnzcv)] = .{
337337 .llvm_name = "altnzcv",
338338 .description = "Enable alternative NZCV format for floating point comparisons",
339339 .dependencies = featureSet(&[_]Feature{
340340 .flagm,
341341 }),
342342 };
343 result[@intFromEnum(Feature.alu_lsl_fast)] = .{
343 result[@backingInt(Feature.alu_lsl_fast)] = .{
344344 .llvm_name = "alu-lsl-fast",
345345 .description = "Add/Sub operations with lsl shift <= 4 are cheap",
346346 .dependencies = featureSet(&[_]Feature{}),
347347 };
348 result[@intFromEnum(Feature.am)] = .{
348 result[@backingInt(Feature.am)] = .{
349349 .llvm_name = "am",
350350 .description = "Enable Armv8.4-A Activity Monitors extension",
351351 .dependencies = featureSet(&[_]Feature{}),
352352 };
353 result[@intFromEnum(Feature.amvs)] = .{
353 result[@backingInt(Feature.amvs)] = .{
354354 .llvm_name = "amvs",
355355 .description = "Enable Armv8.6-A Activity Monitors Virtualization support",
356356 .dependencies = featureSet(&[_]Feature{
357357 .am,
358358 }),
359359 };
360 result[@intFromEnum(Feature.arith_bcc_fusion)] = .{
360 result[@backingInt(Feature.arith_bcc_fusion)] = .{
361361 .llvm_name = "arith-bcc-fusion",
362362 .description = "CPU fuses arithmetic+bcc operations",
363363 .dependencies = featureSet(&[_]Feature{}),
364364 };
365 result[@intFromEnum(Feature.arith_cbz_fusion)] = .{
365 result[@backingInt(Feature.arith_cbz_fusion)] = .{
366366 .llvm_name = "arith-cbz-fusion",
367367 .description = "CPU fuses arithmetic + cbz/cbnz operations",
368368 .dependencies = featureSet(&[_]Feature{}),
369369 };
370 result[@intFromEnum(Feature.ascend_store_address)] = .{
370 result[@backingInt(Feature.ascend_store_address)] = .{
371371 .llvm_name = "ascend-store-address",
372372 .description = "Schedule vector stores by ascending address",
373373 .dependencies = featureSet(&[_]Feature{}),
374374 };
375 result[@intFromEnum(Feature.avoid_ldapur)] = .{
375 result[@backingInt(Feature.avoid_ldapur)] = .{
376376 .llvm_name = "avoid-ldapur",
377377 .description = "Prefer add+ldapr to offset ldapur",
378378 .dependencies = featureSet(&[_]Feature{}),
379379 };
380 result[@intFromEnum(Feature.balance_fp_ops)] = .{
380 result[@backingInt(Feature.balance_fp_ops)] = .{
381381 .llvm_name = "balance-fp-ops",
382382 .description = "balance mix of odd and even D-registers for fp multiply(-accumulate) ops",
383383 .dependencies = featureSet(&[_]Feature{}),
384384 };
385 result[@intFromEnum(Feature.bf16)] = .{
385 result[@backingInt(Feature.bf16)] = .{
386386 .llvm_name = "bf16",
387387 .description = "Enable BFloat16 Extension",
388388 .dependencies = featureSet(&[_]Feature{
389389 .neon,
390390 }),
391391 };
392 result[@intFromEnum(Feature.brbe)] = .{
392 result[@backingInt(Feature.brbe)] = .{
393393 .llvm_name = "brbe",
394394 .description = "Enable Branch Record Buffer Extension",
395395 .dependencies = featureSet(&[_]Feature{}),
396396 };
397 result[@intFromEnum(Feature.bti)] = .{
397 result[@backingInt(Feature.bti)] = .{
398398 .llvm_name = "bti",
399399 .description = "Enable Branch Target Identification",
400400 .dependencies = featureSet(&[_]Feature{}),
401401 };
402 result[@intFromEnum(Feature.btie)] = .{
402 result[@backingInt(Feature.btie)] = .{
403403 .llvm_name = "btie",
404404 .description = "Enable Enhanced Branch Target Identification extension",
405405 .dependencies = featureSet(&[_]Feature{}),
406406 };
407 result[@intFromEnum(Feature.call_saved_x10)] = .{
407 result[@backingInt(Feature.call_saved_x10)] = .{
408408 .llvm_name = "call-saved-x10",
409409 .description = "Make X10 callee saved.",
410410 .dependencies = featureSet(&[_]Feature{}),
411411 };
412 result[@intFromEnum(Feature.call_saved_x11)] = .{
412 result[@backingInt(Feature.call_saved_x11)] = .{
413413 .llvm_name = "call-saved-x11",
414414 .description = "Make X11 callee saved.",
415415 .dependencies = featureSet(&[_]Feature{}),
416416 };
417 result[@intFromEnum(Feature.call_saved_x12)] = .{
417 result[@backingInt(Feature.call_saved_x12)] = .{
418418 .llvm_name = "call-saved-x12",
419419 .description = "Make X12 callee saved.",
420420 .dependencies = featureSet(&[_]Feature{}),
421421 };
422 result[@intFromEnum(Feature.call_saved_x13)] = .{
422 result[@backingInt(Feature.call_saved_x13)] = .{
423423 .llvm_name = "call-saved-x13",
424424 .description = "Make X13 callee saved.",
425425 .dependencies = featureSet(&[_]Feature{}),
426426 };
427 result[@intFromEnum(Feature.call_saved_x14)] = .{
427 result[@backingInt(Feature.call_saved_x14)] = .{
428428 .llvm_name = "call-saved-x14",
429429 .description = "Make X14 callee saved.",
430430 .dependencies = featureSet(&[_]Feature{}),
431431 };
432 result[@intFromEnum(Feature.call_saved_x15)] = .{
432 result[@backingInt(Feature.call_saved_x15)] = .{
433433 .llvm_name = "call-saved-x15",
434434 .description = "Make X15 callee saved.",
435435 .dependencies = featureSet(&[_]Feature{}),
436436 };
437 result[@intFromEnum(Feature.call_saved_x18)] = .{
437 result[@backingInt(Feature.call_saved_x18)] = .{
438438 .llvm_name = "call-saved-x18",
439439 .description = "Make X18 callee saved.",
440440 .dependencies = featureSet(&[_]Feature{}),
441441 };
442 result[@intFromEnum(Feature.call_saved_x8)] = .{
442 result[@backingInt(Feature.call_saved_x8)] = .{
443443 .llvm_name = "call-saved-x8",
444444 .description = "Make X8 callee saved.",
445445 .dependencies = featureSet(&[_]Feature{}),
446446 };
447 result[@intFromEnum(Feature.call_saved_x9)] = .{
447 result[@backingInt(Feature.call_saved_x9)] = .{
448448 .llvm_name = "call-saved-x9",
449449 .description = "Make X9 callee saved.",
450450 .dependencies = featureSet(&[_]Feature{}),
451451 };
452 result[@intFromEnum(Feature.ccdp)] = .{
452 result[@backingInt(Feature.ccdp)] = .{
453453 .llvm_name = "ccdp",
454454 .description = "Enable Armv8.5-A Cache Clean to Point of Deep Persistence",
455455 .dependencies = featureSet(&[_]Feature{
456456 .ccpp,
457457 }),
458458 };
459 result[@intFromEnum(Feature.ccidx)] = .{
459 result[@backingInt(Feature.ccidx)] = .{
460460 .llvm_name = "ccidx",
461461 .description = "Enable Armv8.3-A Extend of the CCSIDR number of sets",
462462 .dependencies = featureSet(&[_]Feature{}),
463463 };
464 result[@intFromEnum(Feature.ccpp)] = .{
464 result[@backingInt(Feature.ccpp)] = .{
465465 .llvm_name = "ccpp",
466466 .description = "Enable Armv8.2-A data Cache Clean to Point of Persistence",
467467 .dependencies = featureSet(&[_]Feature{}),
468468 };
469 result[@intFromEnum(Feature.chk)] = .{
469 result[@backingInt(Feature.chk)] = .{
470470 .llvm_name = "chk",
471471 .description = "Enable Armv8.0-A Check Feature Status Extension",
472472 .dependencies = featureSet(&[_]Feature{}),
473473 };
474 result[@intFromEnum(Feature.clrbhb)] = .{
474 result[@backingInt(Feature.clrbhb)] = .{
475475 .llvm_name = "clrbhb",
476476 .description = "Enable Clear BHB instruction",
477477 .dependencies = featureSet(&[_]Feature{}),
478478 };
479 result[@intFromEnum(Feature.cmh)] = .{
479 result[@backingInt(Feature.cmh)] = .{
480480 .llvm_name = "cmh",
481481 .description = "Enable Armv9.7-A Contention Management Hints",
482482 .dependencies = featureSet(&[_]Feature{}),
483483 };
484 result[@intFromEnum(Feature.cmp_bcc_fusion)] = .{
484 result[@backingInt(Feature.cmp_bcc_fusion)] = .{
485485 .llvm_name = "cmp-bcc-fusion",
486486 .description = "CPU fuses cmp+bcc operations",
487487 .dependencies = featureSet(&[_]Feature{}),
488488 };
489 result[@intFromEnum(Feature.cmpbr)] = .{
489 result[@backingInt(Feature.cmpbr)] = .{
490490 .llvm_name = "cmpbr",
491491 .description = "Enable Armv9.6-A base compare and branch instructions",
492492 .dependencies = featureSet(&[_]Feature{}),
493493 };
494 result[@intFromEnum(Feature.complxnum)] = .{
494 result[@backingInt(Feature.complxnum)] = .{
495495 .llvm_name = "complxnum",
496496 .description = "Enable Armv8.3-A Floating-point complex number support",
497497 .dependencies = featureSet(&[_]Feature{
498498 .neon,
499499 }),
500500 };
501 result[@intFromEnum(Feature.contextidr_el2)] = .{
501 result[@backingInt(Feature.contextidr_el2)] = .{
502502 .llvm_name = "CONTEXTIDREL2",
503503 .description = "Enable RW operand Context ID Register (EL2)",
504504 .dependencies = featureSet(&[_]Feature{}),
505505 };
506 result[@intFromEnum(Feature.cpa)] = .{
506 result[@backingInt(Feature.cpa)] = .{
507507 .llvm_name = "cpa",
508508 .description = "Enable Armv9.5-A Checked Pointer Arithmetic",
509509 .dependencies = featureSet(&[_]Feature{}),
510510 };
511 result[@intFromEnum(Feature.crc)] = .{
511 result[@backingInt(Feature.crc)] = .{
512512 .llvm_name = "crc",
513513 .description = "Enable Armv8.0-A CRC-32 checksum instructions",
514514 .dependencies = featureSet(&[_]Feature{}),
515515 };
516 result[@intFromEnum(Feature.crypto)] = .{
516 result[@backingInt(Feature.crypto)] = .{
517517 .llvm_name = "crypto",
518518 .description = "Enable cryptographic instructions",
519519 .dependencies = featureSet(&[_]Feature{
......@@ -521,98 +521,98 @@ pub const all_features = blk: {
521521 .sha2,
522522 }),
523523 };
524 result[@intFromEnum(Feature.cssc)] = .{
524 result[@backingInt(Feature.cssc)] = .{
525525 .llvm_name = "cssc",
526526 .description = "Enable Common Short Sequence Compression (CSSC) instructions",
527527 .dependencies = featureSet(&[_]Feature{}),
528528 };
529 result[@intFromEnum(Feature.d128)] = .{
529 result[@backingInt(Feature.d128)] = .{
530530 .llvm_name = "d128",
531531 .description = "Enable Armv9.4-A 128-bit Page Table Descriptors, System Registers and instructions",
532532 .dependencies = featureSet(&[_]Feature{
533533 .lse128,
534534 }),
535535 };
536 result[@intFromEnum(Feature.disable_fast_inc_vl)] = .{
536 result[@backingInt(Feature.disable_fast_inc_vl)] = .{
537537 .llvm_name = "disable-fast-inc-vl",
538538 .description = "Do not prefer INC/DEC, ALL, { 1, 2, 4 } over ADDVL",
539539 .dependencies = featureSet(&[_]Feature{}),
540540 };
541 result[@intFromEnum(Feature.disable_latency_sched_heuristic)] = .{
541 result[@backingInt(Feature.disable_latency_sched_heuristic)] = .{
542542 .llvm_name = "disable-latency-sched-heuristic",
543543 .description = "Disable latency scheduling heuristic",
544544 .dependencies = featureSet(&[_]Feature{}),
545545 };
546 result[@intFromEnum(Feature.disable_ldp)] = .{
546 result[@backingInt(Feature.disable_ldp)] = .{
547547 .llvm_name = "disable-ldp",
548548 .description = "Do not emit ldp",
549549 .dependencies = featureSet(&[_]Feature{}),
550550 };
551 result[@intFromEnum(Feature.disable_maximize_scalable_bandwidth)] = .{
551 result[@backingInt(Feature.disable_maximize_scalable_bandwidth)] = .{
552552 .llvm_name = "disable-maximize-scalable-bandwidth",
553553 .description = "Determine the maximum scalable vector length for a loop by the largest scalar type rather than the smallest",
554554 .dependencies = featureSet(&[_]Feature{}),
555555 };
556 result[@intFromEnum(Feature.disable_stp)] = .{
556 result[@backingInt(Feature.disable_stp)] = .{
557557 .llvm_name = "disable-stp",
558558 .description = "Do not emit stp",
559559 .dependencies = featureSet(&[_]Feature{}),
560560 };
561 result[@intFromEnum(Feature.disable_unpredicated_ld_st_lower)] = .{
561 result[@backingInt(Feature.disable_unpredicated_ld_st_lower)] = .{
562562 .llvm_name = "disable-unpredicated-ld-st-lower",
563563 .description = "Disable lowering unpredicated loads/stores as LDR/STR",
564564 .dependencies = featureSet(&[_]Feature{}),
565565 };
566 result[@intFromEnum(Feature.dit)] = .{
566 result[@backingInt(Feature.dit)] = .{
567567 .llvm_name = "dit",
568568 .description = "Enable Armv8.4-A Data Independent Timing instructions",
569569 .dependencies = featureSet(&[_]Feature{}),
570570 };
571 result[@intFromEnum(Feature.dotprod)] = .{
571 result[@backingInt(Feature.dotprod)] = .{
572572 .llvm_name = "dotprod",
573573 .description = "Enable dot product support",
574574 .dependencies = featureSet(&[_]Feature{
575575 .neon,
576576 }),
577577 };
578 result[@intFromEnum(Feature.ecv)] = .{
578 result[@backingInt(Feature.ecv)] = .{
579579 .llvm_name = "ecv",
580580 .description = "Enable enhanced counter virtualization extension",
581581 .dependencies = featureSet(&[_]Feature{}),
582582 };
583 result[@intFromEnum(Feature.el2vmsa)] = .{
583 result[@backingInt(Feature.el2vmsa)] = .{
584584 .llvm_name = "el2vmsa",
585585 .description = "Enable Exception Level 2 Virtual Memory System Architecture",
586586 .dependencies = featureSet(&[_]Feature{}),
587587 };
588 result[@intFromEnum(Feature.el3)] = .{
588 result[@backingInt(Feature.el3)] = .{
589589 .llvm_name = "el3",
590590 .description = "Enable Exception Level 3",
591591 .dependencies = featureSet(&[_]Feature{}),
592592 };
593 result[@intFromEnum(Feature.enable_select_opt)] = .{
593 result[@backingInt(Feature.enable_select_opt)] = .{
594594 .llvm_name = "enable-select-opt",
595595 .description = "Enable the select optimize pass for select loop heuristics",
596596 .dependencies = featureSet(&[_]Feature{}),
597597 };
598 result[@intFromEnum(Feature.ete)] = .{
598 result[@backingInt(Feature.ete)] = .{
599599 .llvm_name = "ete",
600600 .description = "Enable Embedded Trace Extension",
601601 .dependencies = featureSet(&[_]Feature{
602602 .trbe,
603603 }),
604604 };
605 result[@intFromEnum(Feature.execute_only)] = .{
605 result[@backingInt(Feature.execute_only)] = .{
606606 .llvm_name = "execute-only",
607607 .description = "Enable the generation of execute only code.",
608608 .dependencies = featureSet(&[_]Feature{}),
609609 };
610 result[@intFromEnum(Feature.exynos_cheap_as_move)] = .{
610 result[@backingInt(Feature.exynos_cheap_as_move)] = .{
611611 .llvm_name = "exynos-cheap-as-move",
612612 .description = "Use Exynos specific handling of cheap instructions",
613613 .dependencies = featureSet(&[_]Feature{}),
614614 };
615 result[@intFromEnum(Feature.f16f32dot)] = .{
615 result[@backingInt(Feature.f16f32dot)] = .{
616616 .llvm_name = "f16f32dot",
617617 .description = "Enable Armv9.7-A Advanced SIMD half-precision dot product accumulate to single-precision",
618618 .dependencies = featureSet(&[_]Feature{
......@@ -620,7 +620,7 @@ pub const all_features = blk: {
620620 .neon,
621621 }),
622622 };
623 result[@intFromEnum(Feature.f16f32mm)] = .{
623 result[@backingInt(Feature.f16f32mm)] = .{
624624 .llvm_name = "f16f32mm",
625625 .description = "Enable Armv9.7-A Advanced SIMD half-precision matrix multiply-accumulate to single-precision",
626626 .dependencies = featureSet(&[_]Feature{
......@@ -628,7 +628,7 @@ pub const all_features = blk: {
628628 .neon,
629629 }),
630630 };
631 result[@intFromEnum(Feature.f16mm)] = .{
631 result[@backingInt(Feature.f16mm)] = .{
632632 .llvm_name = "f16mm",
633633 .description = "Enable Armv9.7-A non-widening half-precision matrix multiply-accumulate",
634634 .dependencies = featureSet(&[_]Feature{
......@@ -636,67 +636,67 @@ pub const all_features = blk: {
636636 .neon,
637637 }),
638638 };
639 result[@intFromEnum(Feature.f32mm)] = .{
639 result[@backingInt(Feature.f32mm)] = .{
640640 .llvm_name = "f32mm",
641641 .description = "Enable Matrix Multiply FP32 Extension",
642642 .dependencies = featureSet(&[_]Feature{
643643 .sve,
644644 }),
645645 };
646 result[@intFromEnum(Feature.f64mm)] = .{
646 result[@backingInt(Feature.f64mm)] = .{
647647 .llvm_name = "f64mm",
648648 .description = "Enable Matrix Multiply FP64 Extension",
649649 .dependencies = featureSet(&[_]Feature{
650650 .sve,
651651 }),
652652 };
653 result[@intFromEnum(Feature.f8f16mm)] = .{
653 result[@backingInt(Feature.f8f16mm)] = .{
654654 .llvm_name = "f8f16mm",
655655 .description = "Enable Armv9.6-A FP8 to Half-Precision Matrix Multiplication",
656656 .dependencies = featureSet(&[_]Feature{
657657 .fp8,
658658 }),
659659 };
660 result[@intFromEnum(Feature.f8f32mm)] = .{
660 result[@backingInt(Feature.f8f32mm)] = .{
661661 .llvm_name = "f8f32mm",
662662 .description = "Enable Armv9.6-A FP8 to Single-Precision Matrix Multiplication",
663663 .dependencies = featureSet(&[_]Feature{
664664 .fp8,
665665 }),
666666 };
667 result[@intFromEnum(Feature.faminmax)] = .{
667 result[@backingInt(Feature.faminmax)] = .{
668668 .llvm_name = "faminmax",
669669 .description = "Enable FAMIN and FAMAX instructions",
670670 .dependencies = featureSet(&[_]Feature{
671671 .neon,
672672 }),
673673 };
674 result[@intFromEnum(Feature.fgt)] = .{
674 result[@backingInt(Feature.fgt)] = .{
675675 .llvm_name = "fgt",
676676 .description = "Enable fine grained virtualization traps extension",
677677 .dependencies = featureSet(&[_]Feature{}),
678678 };
679 result[@intFromEnum(Feature.fix_cortex_a53_835769)] = .{
679 result[@backingInt(Feature.fix_cortex_a53_835769)] = .{
680680 .llvm_name = "fix-cortex-a53-835769",
681681 .description = "Mitigate Cortex-A53 Erratum 835769",
682682 .dependencies = featureSet(&[_]Feature{}),
683683 };
684 result[@intFromEnum(Feature.flagm)] = .{
684 result[@backingInt(Feature.flagm)] = .{
685685 .llvm_name = "flagm",
686686 .description = "Enable Armv8.4-A Flag Manipulation instructions",
687687 .dependencies = featureSet(&[_]Feature{}),
688688 };
689 result[@intFromEnum(Feature.fmv)] = .{
689 result[@backingInt(Feature.fmv)] = .{
690690 .llvm_name = "fmv",
691691 .description = "Enable Function Multi Versioning support.",
692692 .dependencies = featureSet(&[_]Feature{}),
693693 };
694 result[@intFromEnum(Feature.force_32bit_jump_tables)] = .{
694 result[@backingInt(Feature.force_32bit_jump_tables)] = .{
695695 .llvm_name = "force-32bit-jump-tables",
696696 .description = "Force jump table entries to be 32-bits wide except at MinSize",
697697 .dependencies = featureSet(&[_]Feature{}),
698698 };
699 result[@intFromEnum(Feature.fp16fml)] = .{
699 result[@backingInt(Feature.fp16fml)] = .{
700700 .llvm_name = "fp16fml",
701701 .description = "Enable FP16 FML instructions",
702702 .dependencies = featureSet(&[_]Feature{
......@@ -704,59 +704,59 @@ pub const all_features = blk: {
704704 .neon,
705705 }),
706706 };
707 result[@intFromEnum(Feature.fp8)] = .{
707 result[@backingInt(Feature.fp8)] = .{
708708 .llvm_name = "fp8",
709709 .description = "Enable FP8 instructions",
710710 .dependencies = featureSet(&[_]Feature{
711711 .neon,
712712 }),
713713 };
714 result[@intFromEnum(Feature.fp8dot2)] = .{
714 result[@backingInt(Feature.fp8dot2)] = .{
715715 .llvm_name = "fp8dot2",
716716 .description = "Enable FP8 2-way dot instructions",
717717 .dependencies = featureSet(&[_]Feature{
718718 .fp8,
719719 }),
720720 };
721 result[@intFromEnum(Feature.fp8dot4)] = .{
721 result[@backingInt(Feature.fp8dot4)] = .{
722722 .llvm_name = "fp8dot4",
723723 .description = "Enable FP8 4-way dot instructions",
724724 .dependencies = featureSet(&[_]Feature{
725725 .fp8,
726726 }),
727727 };
728 result[@intFromEnum(Feature.fp8fma)] = .{
728 result[@backingInt(Feature.fp8fma)] = .{
729729 .llvm_name = "fp8fma",
730730 .description = "Enable Armv9.5-A FP8 multiply-add instructions",
731731 .dependencies = featureSet(&[_]Feature{
732732 .fp8,
733733 }),
734734 };
735 result[@intFromEnum(Feature.fp_armv8)] = .{
735 result[@backingInt(Feature.fp_armv8)] = .{
736736 .llvm_name = "fp-armv8",
737737 .description = "Enable Armv8.0-A Floating Point Extensions",
738738 .dependencies = featureSet(&[_]Feature{}),
739739 };
740 result[@intFromEnum(Feature.fpac)] = .{
740 result[@backingInt(Feature.fpac)] = .{
741741 .llvm_name = "fpac",
742742 .description = "Enable Armv8.3-A Pointer Authentication Faulting enhancement",
743743 .dependencies = featureSet(&[_]Feature{}),
744744 };
745 result[@intFromEnum(Feature.fprcvt)] = .{
745 result[@backingInt(Feature.fprcvt)] = .{
746746 .llvm_name = "fprcvt",
747747 .description = "Enable Armv9.6-A base convert instructions for SIMD&FP scalar register operands of different input and output sizes",
748748 .dependencies = featureSet(&[_]Feature{
749749 .fp_armv8,
750750 }),
751751 };
752 result[@intFromEnum(Feature.fptoint)] = .{
752 result[@backingInt(Feature.fptoint)] = .{
753753 .llvm_name = "fptoint",
754754 .description = "Enable FRInt[32|64][Z|X] instructions that round a floating-point number to an integer (in FP format) forcing it to fit into a 32- or 64-bit int",
755755 .dependencies = featureSet(&[_]Feature{
756756 .fp_armv8,
757757 }),
758758 };
759 result[@intFromEnum(Feature.fujitsu_monaka)] = .{
759 result[@backingInt(Feature.fujitsu_monaka)] = .{
760760 .llvm_name = "fujitsu-monaka",
761761 .description = "Fujitsu FUJITSU-MONAKA processors",
762762 .dependencies = featureSet(&[_]Feature{
......@@ -766,190 +766,190 @@ pub const all_features = blk: {
766766 .use_postra_scheduler,
767767 }),
768768 };
769 result[@intFromEnum(Feature.fullfp16)] = .{
769 result[@backingInt(Feature.fullfp16)] = .{
770770 .llvm_name = "fullfp16",
771771 .description = "Enable half-precision floating-point data processing",
772772 .dependencies = featureSet(&[_]Feature{
773773 .fp_armv8,
774774 }),
775775 };
776 result[@intFromEnum(Feature.fuse_address)] = .{
776 result[@backingInt(Feature.fuse_address)] = .{
777777 .llvm_name = "fuse-address",
778778 .description = "CPU fuses address generation and memory operations",
779779 .dependencies = featureSet(&[_]Feature{}),
780780 };
781 result[@intFromEnum(Feature.fuse_addsub_2reg_const1)] = .{
781 result[@backingInt(Feature.fuse_addsub_2reg_const1)] = .{
782782 .llvm_name = "fuse-addsub-2reg-const1",
783783 .description = "CPU fuses (a + b + 1) and (a - b - 1)",
784784 .dependencies = featureSet(&[_]Feature{}),
785785 };
786 result[@intFromEnum(Feature.fuse_adrp_add)] = .{
786 result[@backingInt(Feature.fuse_adrp_add)] = .{
787787 .llvm_name = "fuse-adrp-add",
788788 .description = "CPU fuses adrp+add operations",
789789 .dependencies = featureSet(&[_]Feature{}),
790790 };
791 result[@intFromEnum(Feature.fuse_aes)] = .{
791 result[@backingInt(Feature.fuse_aes)] = .{
792792 .llvm_name = "fuse-aes",
793793 .description = "CPU fuses AES crypto operations",
794794 .dependencies = featureSet(&[_]Feature{}),
795795 };
796 result[@intFromEnum(Feature.fuse_arith_logic)] = .{
796 result[@backingInt(Feature.fuse_arith_logic)] = .{
797797 .llvm_name = "fuse-arith-logic",
798798 .description = "CPU fuses arithmetic and logic operations",
799799 .dependencies = featureSet(&[_]Feature{}),
800800 };
801 result[@intFromEnum(Feature.fuse_crypto_eor)] = .{
801 result[@backingInt(Feature.fuse_crypto_eor)] = .{
802802 .llvm_name = "fuse-crypto-eor",
803803 .description = "CPU fuses AES/PMULL and EOR operations",
804804 .dependencies = featureSet(&[_]Feature{}),
805805 };
806 result[@intFromEnum(Feature.fuse_csel)] = .{
806 result[@backingInt(Feature.fuse_csel)] = .{
807807 .llvm_name = "fuse-csel",
808808 .description = "CPU can fuse CMP and CSEL operations",
809809 .dependencies = featureSet(&[_]Feature{}),
810810 };
811 result[@intFromEnum(Feature.fuse_cset)] = .{
811 result[@backingInt(Feature.fuse_cset)] = .{
812812 .llvm_name = "fuse-cset",
813813 .description = "CPU can fuse CMP and CSET operations",
814814 .dependencies = featureSet(&[_]Feature{}),
815815 };
816 result[@intFromEnum(Feature.fuse_literals)] = .{
816 result[@backingInt(Feature.fuse_literals)] = .{
817817 .llvm_name = "fuse-literals",
818818 .description = "CPU fuses literal generation operations",
819819 .dependencies = featureSet(&[_]Feature{}),
820820 };
821 result[@intFromEnum(Feature.gcie)] = .{
821 result[@backingInt(Feature.gcie)] = .{
822822 .llvm_name = "gcie",
823823 .description = "Enable GICv5 (Generic Interrupt Controller) CPU Interface Extension",
824824 .dependencies = featureSet(&[_]Feature{}),
825825 };
826 result[@intFromEnum(Feature.gcs)] = .{
826 result[@backingInt(Feature.gcs)] = .{
827827 .llvm_name = "gcs",
828828 .description = "Enable Armv9.4-A Guarded Call Stack Extension",
829829 .dependencies = featureSet(&[_]Feature{
830830 .chk,
831831 }),
832832 };
833 result[@intFromEnum(Feature.harden_sls_blr)] = .{
833 result[@backingInt(Feature.harden_sls_blr)] = .{
834834 .llvm_name = "harden-sls-blr",
835835 .description = "Harden against straight line speculation across BLR instructions",
836836 .dependencies = featureSet(&[_]Feature{}),
837837 };
838 result[@intFromEnum(Feature.harden_sls_nocomdat)] = .{
838 result[@backingInt(Feature.harden_sls_nocomdat)] = .{
839839 .llvm_name = "harden-sls-nocomdat",
840840 .description = "Generate thunk code for SLS mitigation in the normal text section",
841841 .dependencies = featureSet(&[_]Feature{}),
842842 };
843 result[@intFromEnum(Feature.harden_sls_retbr)] = .{
843 result[@backingInt(Feature.harden_sls_retbr)] = .{
844844 .llvm_name = "harden-sls-retbr",
845845 .description = "Harden against straight line speculation across RET and BR instructions",
846846 .dependencies = featureSet(&[_]Feature{}),
847847 };
848 result[@intFromEnum(Feature.hbc)] = .{
848 result[@backingInt(Feature.hbc)] = .{
849849 .llvm_name = "hbc",
850850 .description = "Enable Armv8.8-A Hinted Conditional Branches Extension",
851851 .dependencies = featureSet(&[_]Feature{}),
852852 };
853 result[@intFromEnum(Feature.hcx)] = .{
853 result[@backingInt(Feature.hcx)] = .{
854854 .llvm_name = "hcx",
855855 .description = "Enable Armv8.7-A HCRX_EL2 system register",
856856 .dependencies = featureSet(&[_]Feature{}),
857857 };
858 result[@intFromEnum(Feature.i8mm)] = .{
858 result[@backingInt(Feature.i8mm)] = .{
859859 .llvm_name = "i8mm",
860860 .description = "Enable Matrix Multiply Int8 Extension",
861861 .dependencies = featureSet(&[_]Feature{
862862 .neon,
863863 }),
864864 };
865 result[@intFromEnum(Feature.ite)] = .{
865 result[@backingInt(Feature.ite)] = .{
866866 .llvm_name = "ite",
867867 .description = "Enable Armv9.4-A Instrumentation Extension",
868868 .dependencies = featureSet(&[_]Feature{
869869 .ete,
870870 }),
871871 };
872 result[@intFromEnum(Feature.jsconv)] = .{
872 result[@backingInt(Feature.jsconv)] = .{
873873 .llvm_name = "jsconv",
874874 .description = "Enable Armv8.3-A JavaScript FP conversion instructions",
875875 .dependencies = featureSet(&[_]Feature{
876876 .fp_armv8,
877877 }),
878878 };
879 result[@intFromEnum(Feature.ldp_aligned_only)] = .{
879 result[@backingInt(Feature.ldp_aligned_only)] = .{
880880 .llvm_name = "ldp-aligned-only",
881881 .description = "In order to emit ldp, first check if the load will be aligned to 2 * element_size",
882882 .dependencies = featureSet(&[_]Feature{}),
883883 };
884 result[@intFromEnum(Feature.lor)] = .{
884 result[@backingInt(Feature.lor)] = .{
885885 .llvm_name = "lor",
886886 .description = "Enable Armv8.1-A Limited Ordering Regions extension",
887887 .dependencies = featureSet(&[_]Feature{}),
888888 };
889 result[@intFromEnum(Feature.ls64)] = .{
889 result[@backingInt(Feature.ls64)] = .{
890890 .llvm_name = "ls64",
891891 .description = "Enable Armv8.7-A LD64B/ST64B Accelerator Extension",
892892 .dependencies = featureSet(&[_]Feature{}),
893893 };
894 result[@intFromEnum(Feature.lscp)] = .{
894 result[@backingInt(Feature.lscp)] = .{
895895 .llvm_name = "lscp",
896896 .description = "Enable Armv9.7-A Load-acquire and store-release pair extension",
897897 .dependencies = featureSet(&[_]Feature{}),
898898 };
899 result[@intFromEnum(Feature.lse)] = .{
899 result[@backingInt(Feature.lse)] = .{
900900 .llvm_name = "lse",
901901 .description = "Enable Armv8.1-A Large System Extension (LSE) atomic instructions",
902902 .dependencies = featureSet(&[_]Feature{}),
903903 };
904 result[@intFromEnum(Feature.lse128)] = .{
904 result[@backingInt(Feature.lse128)] = .{
905905 .llvm_name = "lse128",
906906 .description = "Enable Armv9.4-A 128-bit Atomic instructions",
907907 .dependencies = featureSet(&[_]Feature{
908908 .lse,
909909 }),
910910 };
911 result[@intFromEnum(Feature.lse2)] = .{
911 result[@backingInt(Feature.lse2)] = .{
912912 .llvm_name = "lse2",
913913 .description = "Enable Armv8.4-A Large System Extension 2 (LSE2) atomicity rules",
914914 .dependencies = featureSet(&[_]Feature{}),
915915 };
916 result[@intFromEnum(Feature.lsfe)] = .{
916 result[@backingInt(Feature.lsfe)] = .{
917917 .llvm_name = "lsfe",
918918 .description = "Enable Armv9.6-A base Atomic floating-point in-memory instructions",
919919 .dependencies = featureSet(&[_]Feature{
920920 .fp_armv8,
921921 }),
922922 };
923 result[@intFromEnum(Feature.lsui)] = .{
923 result[@backingInt(Feature.lsui)] = .{
924924 .llvm_name = "lsui",
925925 .description = "Enable Armv9.6-A unprivileged load/store instructions",
926926 .dependencies = featureSet(&[_]Feature{}),
927927 };
928 result[@intFromEnum(Feature.lut)] = .{
928 result[@backingInt(Feature.lut)] = .{
929929 .llvm_name = "lut",
930930 .description = "Enable Lookup Table instructions",
931931 .dependencies = featureSet(&[_]Feature{
932932 .neon,
933933 }),
934934 };
935 result[@intFromEnum(Feature.max_interleave_factor_4)] = .{
935 result[@backingInt(Feature.max_interleave_factor_4)] = .{
936936 .llvm_name = "max-interleave-factor-4",
937937 .description = "Set the MaxInterleaveFactor to 4 (from the default 2)",
938938 .dependencies = featureSet(&[_]Feature{}),
939939 };
940 result[@intFromEnum(Feature.mec)] = .{
940 result[@backingInt(Feature.mec)] = .{
941941 .llvm_name = "mec",
942942 .description = "Enable Memory Encryption Contexts Extension",
943943 .dependencies = featureSet(&[_]Feature{
944944 .rme,
945945 }),
946946 };
947 result[@intFromEnum(Feature.mops)] = .{
947 result[@backingInt(Feature.mops)] = .{
948948 .llvm_name = "mops",
949949 .description = "Enable Armv8.8-A memcpy and memset acceleration instructions",
950950 .dependencies = featureSet(&[_]Feature{}),
951951 };
952 result[@intFromEnum(Feature.mops_go)] = .{
952 result[@backingInt(Feature.mops_go)] = .{
953953 .llvm_name = "mops-go",
954954 .description = "Enable memset acceleration granule only",
955955 .dependencies = featureSet(&[_]Feature{
......@@ -957,71 +957,71 @@ pub const all_features = blk: {
957957 .mte,
958958 }),
959959 };
960 result[@intFromEnum(Feature.mpam)] = .{
960 result[@backingInt(Feature.mpam)] = .{
961961 .llvm_name = "mpam",
962962 .description = "Enable Armv8.4-A Memory system Partitioning and Monitoring extension",
963963 .dependencies = featureSet(&[_]Feature{}),
964964 };
965 result[@intFromEnum(Feature.mpamv2)] = .{
965 result[@backingInt(Feature.mpamv2)] = .{
966966 .llvm_name = "mpamv2",
967967 .description = "Enable Armv9.7-A MPAMv2 Lookaside Buffer Invalidate instructions",
968968 .dependencies = featureSet(&[_]Feature{}),
969969 };
970 result[@intFromEnum(Feature.mte)] = .{
970 result[@backingInt(Feature.mte)] = .{
971971 .llvm_name = "mte",
972972 .description = "Enable Memory Tagging Extension",
973973 .dependencies = featureSet(&[_]Feature{}),
974974 };
975 result[@intFromEnum(Feature.mtetc)] = .{
975 result[@backingInt(Feature.mtetc)] = .{
976976 .llvm_name = "mtetc",
977977 .description = "Enable Virtual Memory Tagging Extension",
978978 .dependencies = featureSet(&[_]Feature{
979979 .mte,
980980 }),
981981 };
982 result[@intFromEnum(Feature.neon)] = .{
982 result[@backingInt(Feature.neon)] = .{
983983 .llvm_name = "neon",
984984 .description = "Enable Advanced SIMD instructions",
985985 .dependencies = featureSet(&[_]Feature{
986986 .fp_armv8,
987987 }),
988988 };
989 result[@intFromEnum(Feature.nmi)] = .{
989 result[@backingInt(Feature.nmi)] = .{
990990 .llvm_name = "nmi",
991991 .description = "Enable Armv8.8-A Non-maskable Interrupts",
992992 .dependencies = featureSet(&[_]Feature{}),
993993 };
994 result[@intFromEnum(Feature.no_bti_at_return_twice)] = .{
994 result[@backingInt(Feature.no_bti_at_return_twice)] = .{
995995 .llvm_name = "no-bti-at-return-twice",
996996 .description = "Don't place a BTI instruction after a return-twice",
997997 .dependencies = featureSet(&[_]Feature{}),
998998 };
999 result[@intFromEnum(Feature.no_neg_immediates)] = .{
999 result[@backingInt(Feature.no_neg_immediates)] = .{
10001000 .llvm_name = "no-neg-immediates",
10011001 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
10021002 .dependencies = featureSet(&[_]Feature{}),
10031003 };
1004 result[@intFromEnum(Feature.no_sve_fp_ld1r)] = .{
1004 result[@backingInt(Feature.no_sve_fp_ld1r)] = .{
10051005 .llvm_name = "no-sve-fp-ld1r",
10061006 .description = "Avoid using LD1RX instructions for FP",
10071007 .dependencies = featureSet(&[_]Feature{}),
10081008 };
1009 result[@intFromEnum(Feature.no_zcz_fpr64)] = .{
1009 result[@backingInt(Feature.no_zcz_fpr64)] = .{
10101010 .llvm_name = "no-zcz-fpr64",
10111011 .description = "Has no zero-cycle zeroing instructions for FPR64 registers",
10121012 .dependencies = featureSet(&[_]Feature{}),
10131013 };
1014 result[@intFromEnum(Feature.nv)] = .{
1014 result[@backingInt(Feature.nv)] = .{
10151015 .llvm_name = "nv",
10161016 .description = "Enable Armv8.4-A Nested Virtualization Enchancement",
10171017 .dependencies = featureSet(&[_]Feature{}),
10181018 };
1019 result[@intFromEnum(Feature.occmo)] = .{
1019 result[@backingInt(Feature.occmo)] = .{
10201020 .llvm_name = "occmo",
10211021 .description = "Enable Armv9.6-A Outer cacheable cache maintenance operations",
10221022 .dependencies = featureSet(&[_]Feature{}),
10231023 };
1024 result[@intFromEnum(Feature.olympus)] = .{
1024 result[@backingInt(Feature.olympus)] = .{
10251025 .llvm_name = "olympus",
10261026 .description = "NVIDIA Olympus processors",
10271027 .dependencies = featureSet(&[_]Feature{
......@@ -1036,288 +1036,288 @@ pub const all_features = blk: {
10361036 .use_postra_scheduler,
10371037 }),
10381038 };
1039 result[@intFromEnum(Feature.outline_atomics)] = .{
1039 result[@backingInt(Feature.outline_atomics)] = .{
10401040 .llvm_name = "outline-atomics",
10411041 .description = "Enable out of line atomics to support LSE instructions",
10421042 .dependencies = featureSet(&[_]Feature{}),
10431043 };
1044 result[@intFromEnum(Feature.pan)] = .{
1044 result[@backingInt(Feature.pan)] = .{
10451045 .llvm_name = "pan",
10461046 .description = "Enable Armv8.1-A Privileged Access-Never extension",
10471047 .dependencies = featureSet(&[_]Feature{}),
10481048 };
1049 result[@intFromEnum(Feature.pan_rwv)] = .{
1049 result[@backingInt(Feature.pan_rwv)] = .{
10501050 .llvm_name = "pan-rwv",
10511051 .description = "Enable Armv8.2-A PAN s1e1R and s1e1W Variants",
10521052 .dependencies = featureSet(&[_]Feature{
10531053 .pan,
10541054 }),
10551055 };
1056 result[@intFromEnum(Feature.pauth)] = .{
1056 result[@backingInt(Feature.pauth)] = .{
10571057 .llvm_name = "pauth",
10581058 .description = "Enable Armv8.3-A Pointer Authentication extension",
10591059 .dependencies = featureSet(&[_]Feature{}),
10601060 };
1061 result[@intFromEnum(Feature.pauth_lr)] = .{
1061 result[@backingInt(Feature.pauth_lr)] = .{
10621062 .llvm_name = "pauth-lr",
10631063 .description = "Enable Armv9.5-A PAC enhancements",
10641064 .dependencies = featureSet(&[_]Feature{}),
10651065 };
1066 result[@intFromEnum(Feature.pcdphint)] = .{
1066 result[@backingInt(Feature.pcdphint)] = .{
10671067 .llvm_name = "pcdphint",
10681068 .description = "Enable Armv9.6-A Producer Consumer Data Placement hints",
10691069 .dependencies = featureSet(&[_]Feature{}),
10701070 };
1071 result[@intFromEnum(Feature.perfmon)] = .{
1071 result[@backingInt(Feature.perfmon)] = .{
10721072 .llvm_name = "perfmon",
10731073 .description = "Enable Armv8.0-A PMUv3 Performance Monitors extension",
10741074 .dependencies = featureSet(&[_]Feature{}),
10751075 };
1076 result[@intFromEnum(Feature.poe2)] = .{
1076 result[@backingInt(Feature.poe2)] = .{
10771077 .llvm_name = "poe2",
10781078 .description = "Enable Stage 1 Permission Overlays Extension 2 instructions",
10791079 .dependencies = featureSet(&[_]Feature{}),
10801080 };
1081 result[@intFromEnum(Feature.pops)] = .{
1081 result[@backingInt(Feature.pops)] = .{
10821082 .llvm_name = "pops",
10831083 .description = "Enable Armv9.6-A Point Of Physical Storage (PoPS) DC instructions",
10841084 .dependencies = featureSet(&[_]Feature{}),
10851085 };
1086 result[@intFromEnum(Feature.predictable_select_expensive)] = .{
1086 result[@backingInt(Feature.predictable_select_expensive)] = .{
10871087 .llvm_name = "predictable-select-expensive",
10881088 .description = "Prefer likely predicted branches over selects",
10891089 .dependencies = featureSet(&[_]Feature{}),
10901090 };
1091 result[@intFromEnum(Feature.predres)] = .{
1091 result[@backingInt(Feature.predres)] = .{
10921092 .llvm_name = "predres",
10931093 .description = "Enable Armv8.5-A execution and data prediction invalidation instructions",
10941094 .dependencies = featureSet(&[_]Feature{}),
10951095 };
1096 result[@intFromEnum(Feature.prfm_slc_target)] = .{
1096 result[@backingInt(Feature.prfm_slc_target)] = .{
10971097 .llvm_name = "prfm-slc-target",
10981098 .description = "Enable SLC target for PRFM instruction",
10991099 .dependencies = featureSet(&[_]Feature{}),
11001100 };
1101 result[@intFromEnum(Feature.rand)] = .{
1101 result[@backingInt(Feature.rand)] = .{
11021102 .llvm_name = "rand",
11031103 .description = "Enable Random Number generation instructions",
11041104 .dependencies = featureSet(&[_]Feature{}),
11051105 };
1106 result[@intFromEnum(Feature.ras)] = .{
1106 result[@backingInt(Feature.ras)] = .{
11071107 .llvm_name = "ras",
11081108 .description = "Enable Armv8.0-A Reliability, Availability and Serviceability Extensions",
11091109 .dependencies = featureSet(&[_]Feature{}),
11101110 };
1111 result[@intFromEnum(Feature.rasv2)] = .{
1111 result[@backingInt(Feature.rasv2)] = .{
11121112 .llvm_name = "rasv2",
11131113 .description = "Enable Armv8.9-A Reliability, Availability and Serviceability Extensions",
11141114 .dependencies = featureSet(&[_]Feature{
11151115 .ras,
11161116 }),
11171117 };
1118 result[@intFromEnum(Feature.rcpc)] = .{
1118 result[@backingInt(Feature.rcpc)] = .{
11191119 .llvm_name = "rcpc",
11201120 .description = "Enable support for RCPC extension",
11211121 .dependencies = featureSet(&[_]Feature{}),
11221122 };
1123 result[@intFromEnum(Feature.rcpc3)] = .{
1123 result[@backingInt(Feature.rcpc3)] = .{
11241124 .llvm_name = "rcpc3",
11251125 .description = "Enable Armv8.9-A RCPC instructions for A64 and Advanced SIMD and floating-point instruction set",
11261126 .dependencies = featureSet(&[_]Feature{
11271127 .rcpc_immo,
11281128 }),
11291129 };
1130 result[@intFromEnum(Feature.rcpc_immo)] = .{
1130 result[@backingInt(Feature.rcpc_immo)] = .{
11311131 .llvm_name = "rcpc-immo",
11321132 .description = "Enable Armv8.4-A RCPC instructions with Immediate Offsets",
11331133 .dependencies = featureSet(&[_]Feature{
11341134 .rcpc,
11351135 }),
11361136 };
1137 result[@intFromEnum(Feature.rdm)] = .{
1137 result[@backingInt(Feature.rdm)] = .{
11381138 .llvm_name = "rdm",
11391139 .description = "Enable Armv8.1-A Rounding Double Multiply Add/Subtract instructions",
11401140 .dependencies = featureSet(&[_]Feature{
11411141 .neon,
11421142 }),
11431143 };
1144 result[@intFromEnum(Feature.reserve_lr_for_ra)] = .{
1144 result[@backingInt(Feature.reserve_lr_for_ra)] = .{
11451145 .llvm_name = "reserve-lr-for-ra",
11461146 .description = "Reserve LR for call use only",
11471147 .dependencies = featureSet(&[_]Feature{}),
11481148 };
1149 result[@intFromEnum(Feature.reserve_x1)] = .{
1149 result[@backingInt(Feature.reserve_x1)] = .{
11501150 .llvm_name = "reserve-x1",
11511151 .description = "Reserve X1, making it unavailable as a GPR",
11521152 .dependencies = featureSet(&[_]Feature{}),
11531153 };
1154 result[@intFromEnum(Feature.reserve_x10)] = .{
1154 result[@backingInt(Feature.reserve_x10)] = .{
11551155 .llvm_name = "reserve-x10",
11561156 .description = "Reserve X10, making it unavailable as a GPR",
11571157 .dependencies = featureSet(&[_]Feature{}),
11581158 };
1159 result[@intFromEnum(Feature.reserve_x11)] = .{
1159 result[@backingInt(Feature.reserve_x11)] = .{
11601160 .llvm_name = "reserve-x11",
11611161 .description = "Reserve X11, making it unavailable as a GPR",
11621162 .dependencies = featureSet(&[_]Feature{}),
11631163 };
1164 result[@intFromEnum(Feature.reserve_x12)] = .{
1164 result[@backingInt(Feature.reserve_x12)] = .{
11651165 .llvm_name = "reserve-x12",
11661166 .description = "Reserve X12, making it unavailable as a GPR",
11671167 .dependencies = featureSet(&[_]Feature{}),
11681168 };
1169 result[@intFromEnum(Feature.reserve_x13)] = .{
1169 result[@backingInt(Feature.reserve_x13)] = .{
11701170 .llvm_name = "reserve-x13",
11711171 .description = "Reserve X13, making it unavailable as a GPR",
11721172 .dependencies = featureSet(&[_]Feature{}),
11731173 };
1174 result[@intFromEnum(Feature.reserve_x14)] = .{
1174 result[@backingInt(Feature.reserve_x14)] = .{
11751175 .llvm_name = "reserve-x14",
11761176 .description = "Reserve X14, making it unavailable as a GPR",
11771177 .dependencies = featureSet(&[_]Feature{}),
11781178 };
1179 result[@intFromEnum(Feature.reserve_x15)] = .{
1179 result[@backingInt(Feature.reserve_x15)] = .{
11801180 .llvm_name = "reserve-x15",
11811181 .description = "Reserve X15, making it unavailable as a GPR",
11821182 .dependencies = featureSet(&[_]Feature{}),
11831183 };
1184 result[@intFromEnum(Feature.reserve_x18)] = .{
1184 result[@backingInt(Feature.reserve_x18)] = .{
11851185 .llvm_name = "reserve-x18",
11861186 .description = "Reserve X18, making it unavailable as a GPR",
11871187 .dependencies = featureSet(&[_]Feature{}),
11881188 };
1189 result[@intFromEnum(Feature.reserve_x2)] = .{
1189 result[@backingInt(Feature.reserve_x2)] = .{
11901190 .llvm_name = "reserve-x2",
11911191 .description = "Reserve X2, making it unavailable as a GPR",
11921192 .dependencies = featureSet(&[_]Feature{}),
11931193 };
1194 result[@intFromEnum(Feature.reserve_x20)] = .{
1194 result[@backingInt(Feature.reserve_x20)] = .{
11951195 .llvm_name = "reserve-x20",
11961196 .description = "Reserve X20, making it unavailable as a GPR",
11971197 .dependencies = featureSet(&[_]Feature{}),
11981198 };
1199 result[@intFromEnum(Feature.reserve_x21)] = .{
1199 result[@backingInt(Feature.reserve_x21)] = .{
12001200 .llvm_name = "reserve-x21",
12011201 .description = "Reserve X21, making it unavailable as a GPR",
12021202 .dependencies = featureSet(&[_]Feature{}),
12031203 };
1204 result[@intFromEnum(Feature.reserve_x22)] = .{
1204 result[@backingInt(Feature.reserve_x22)] = .{
12051205 .llvm_name = "reserve-x22",
12061206 .description = "Reserve X22, making it unavailable as a GPR",
12071207 .dependencies = featureSet(&[_]Feature{}),
12081208 };
1209 result[@intFromEnum(Feature.reserve_x23)] = .{
1209 result[@backingInt(Feature.reserve_x23)] = .{
12101210 .llvm_name = "reserve-x23",
12111211 .description = "Reserve X23, making it unavailable as a GPR",
12121212 .dependencies = featureSet(&[_]Feature{}),
12131213 };
1214 result[@intFromEnum(Feature.reserve_x24)] = .{
1214 result[@backingInt(Feature.reserve_x24)] = .{
12151215 .llvm_name = "reserve-x24",
12161216 .description = "Reserve X24, making it unavailable as a GPR",
12171217 .dependencies = featureSet(&[_]Feature{}),
12181218 };
1219 result[@intFromEnum(Feature.reserve_x25)] = .{
1219 result[@backingInt(Feature.reserve_x25)] = .{
12201220 .llvm_name = "reserve-x25",
12211221 .description = "Reserve X25, making it unavailable as a GPR",
12221222 .dependencies = featureSet(&[_]Feature{}),
12231223 };
1224 result[@intFromEnum(Feature.reserve_x26)] = .{
1224 result[@backingInt(Feature.reserve_x26)] = .{
12251225 .llvm_name = "reserve-x26",
12261226 .description = "Reserve X26, making it unavailable as a GPR",
12271227 .dependencies = featureSet(&[_]Feature{}),
12281228 };
1229 result[@intFromEnum(Feature.reserve_x27)] = .{
1229 result[@backingInt(Feature.reserve_x27)] = .{
12301230 .llvm_name = "reserve-x27",
12311231 .description = "Reserve X27, making it unavailable as a GPR",
12321232 .dependencies = featureSet(&[_]Feature{}),
12331233 };
1234 result[@intFromEnum(Feature.reserve_x28)] = .{
1234 result[@backingInt(Feature.reserve_x28)] = .{
12351235 .llvm_name = "reserve-x28",
12361236 .description = "Reserve X28, making it unavailable as a GPR",
12371237 .dependencies = featureSet(&[_]Feature{}),
12381238 };
1239 result[@intFromEnum(Feature.reserve_x3)] = .{
1239 result[@backingInt(Feature.reserve_x3)] = .{
12401240 .llvm_name = "reserve-x3",
12411241 .description = "Reserve X3, making it unavailable as a GPR",
12421242 .dependencies = featureSet(&[_]Feature{}),
12431243 };
1244 result[@intFromEnum(Feature.reserve_x4)] = .{
1244 result[@backingInt(Feature.reserve_x4)] = .{
12451245 .llvm_name = "reserve-x4",
12461246 .description = "Reserve X4, making it unavailable as a GPR",
12471247 .dependencies = featureSet(&[_]Feature{}),
12481248 };
1249 result[@intFromEnum(Feature.reserve_x5)] = .{
1249 result[@backingInt(Feature.reserve_x5)] = .{
12501250 .llvm_name = "reserve-x5",
12511251 .description = "Reserve X5, making it unavailable as a GPR",
12521252 .dependencies = featureSet(&[_]Feature{}),
12531253 };
1254 result[@intFromEnum(Feature.reserve_x6)] = .{
1254 result[@backingInt(Feature.reserve_x6)] = .{
12551255 .llvm_name = "reserve-x6",
12561256 .description = "Reserve X6, making it unavailable as a GPR",
12571257 .dependencies = featureSet(&[_]Feature{}),
12581258 };
1259 result[@intFromEnum(Feature.reserve_x7)] = .{
1259 result[@backingInt(Feature.reserve_x7)] = .{
12601260 .llvm_name = "reserve-x7",
12611261 .description = "Reserve X7, making it unavailable as a GPR",
12621262 .dependencies = featureSet(&[_]Feature{}),
12631263 };
1264 result[@intFromEnum(Feature.reserve_x9)] = .{
1264 result[@backingInt(Feature.reserve_x9)] = .{
12651265 .llvm_name = "reserve-x9",
12661266 .description = "Reserve X9, making it unavailable as a GPR",
12671267 .dependencies = featureSet(&[_]Feature{}),
12681268 };
1269 result[@intFromEnum(Feature.rme)] = .{
1269 result[@backingInt(Feature.rme)] = .{
12701270 .llvm_name = "rme",
12711271 .description = "Enable Realm Management Extension",
12721272 .dependencies = featureSet(&[_]Feature{}),
12731273 };
1274 result[@intFromEnum(Feature.sb)] = .{
1274 result[@backingInt(Feature.sb)] = .{
12751275 .llvm_name = "sb",
12761276 .description = "Enable Armv8.5-A Speculation Barrier",
12771277 .dependencies = featureSet(&[_]Feature{}),
12781278 };
1279 result[@intFromEnum(Feature.sel2)] = .{
1279 result[@backingInt(Feature.sel2)] = .{
12801280 .llvm_name = "sel2",
12811281 .description = "Enable Armv8.4-A Secure Exception Level 2 extension",
12821282 .dependencies = featureSet(&[_]Feature{}),
12831283 };
1284 result[@intFromEnum(Feature.sha2)] = .{
1284 result[@backingInt(Feature.sha2)] = .{
12851285 .llvm_name = "sha2",
12861286 .description = "Enable SHA1 and SHA256 support",
12871287 .dependencies = featureSet(&[_]Feature{
12881288 .neon,
12891289 }),
12901290 };
1291 result[@intFromEnum(Feature.sha3)] = .{
1291 result[@backingInt(Feature.sha3)] = .{
12921292 .llvm_name = "sha3",
12931293 .description = "Enable SHA512 and SHA3 support",
12941294 .dependencies = featureSet(&[_]Feature{
12951295 .sha2,
12961296 }),
12971297 };
1298 result[@intFromEnum(Feature.slow_misaligned_128store)] = .{
1298 result[@backingInt(Feature.slow_misaligned_128store)] = .{
12991299 .llvm_name = "slow-misaligned-128store",
13001300 .description = "Misaligned 128 bit stores are slow",
13011301 .dependencies = featureSet(&[_]Feature{}),
13021302 };
1303 result[@intFromEnum(Feature.slow_paired_128)] = .{
1303 result[@backingInt(Feature.slow_paired_128)] = .{
13041304 .llvm_name = "slow-paired-128",
13051305 .description = "Paired 128 bit loads and stores are slow",
13061306 .dependencies = featureSet(&[_]Feature{}),
13071307 };
1308 result[@intFromEnum(Feature.slow_strqro_store)] = .{
1308 result[@backingInt(Feature.slow_strqro_store)] = .{
13091309 .llvm_name = "slow-strqro-store",
13101310 .description = "STR of Q register with register offset is slow",
13111311 .dependencies = featureSet(&[_]Feature{}),
13121312 };
1313 result[@intFromEnum(Feature.sm4)] = .{
1313 result[@backingInt(Feature.sm4)] = .{
13141314 .llvm_name = "sm4",
13151315 .description = "Enable SM3 and SM4 support",
13161316 .dependencies = featureSet(&[_]Feature{
13171317 .neon,
13181318 }),
13191319 };
1320 result[@intFromEnum(Feature.sme)] = .{
1320 result[@backingInt(Feature.sme)] = .{
13211321 .llvm_name = "sme",
13221322 .description = "Enable Scalable Matrix Extension (SME)",
13231323 .dependencies = featureSet(&[_]Feature{
......@@ -1325,35 +1325,35 @@ pub const all_features = blk: {
13251325 .fullfp16,
13261326 }),
13271327 };
1328 result[@intFromEnum(Feature.sme2)] = .{
1328 result[@backingInt(Feature.sme2)] = .{
13291329 .llvm_name = "sme2",
13301330 .description = "Enable Scalable Matrix Extension 2 (SME2) instructions",
13311331 .dependencies = featureSet(&[_]Feature{
13321332 .sme,
13331333 }),
13341334 };
1335 result[@intFromEnum(Feature.sme2p1)] = .{
1335 result[@backingInt(Feature.sme2p1)] = .{
13361336 .llvm_name = "sme2p1",
13371337 .description = "Enable Scalable Matrix Extension 2.1 instructions",
13381338 .dependencies = featureSet(&[_]Feature{
13391339 .sme2,
13401340 }),
13411341 };
1342 result[@intFromEnum(Feature.sme2p2)] = .{
1342 result[@backingInt(Feature.sme2p2)] = .{
13431343 .llvm_name = "sme2p2",
13441344 .description = "Enable Armv9.6-A Scalable Matrix Extension 2.2 instructions",
13451345 .dependencies = featureSet(&[_]Feature{
13461346 .sme2p1,
13471347 }),
13481348 };
1349 result[@intFromEnum(Feature.sme2p3)] = .{
1349 result[@backingInt(Feature.sme2p3)] = .{
13501350 .llvm_name = "sme2p3",
13511351 .description = "Enable Armv9.7-A Scalable Matrix Extension 2.3 instructions",
13521352 .dependencies = featureSet(&[_]Feature{
13531353 .sme2p2,
13541354 }),
13551355 };
1356 result[@intFromEnum(Feature.sme_b16b16)] = .{
1356 result[@backingInt(Feature.sme_b16b16)] = .{
13571357 .llvm_name = "sme-b16b16",
13581358 .description = "Enable SME2.1 ZA-targeting non-widening BFloat16 instructions",
13591359 .dependencies = featureSet(&[_]Feature{
......@@ -1361,21 +1361,21 @@ pub const all_features = blk: {
13611361 .sve_b16b16,
13621362 }),
13631363 };
1364 result[@intFromEnum(Feature.sme_f16f16)] = .{
1364 result[@backingInt(Feature.sme_f16f16)] = .{
13651365 .llvm_name = "sme-f16f16",
13661366 .description = "Enable SME non-widening Float16 instructions",
13671367 .dependencies = featureSet(&[_]Feature{
13681368 .sme2,
13691369 }),
13701370 };
1371 result[@intFromEnum(Feature.sme_f64f64)] = .{
1371 result[@backingInt(Feature.sme_f64f64)] = .{
13721372 .llvm_name = "sme-f64f64",
13731373 .description = "Enable Scalable Matrix Extension (SME) F64F64 instructions",
13741374 .dependencies = featureSet(&[_]Feature{
13751375 .sme,
13761376 }),
13771377 };
1378 result[@intFromEnum(Feature.sme_f8f16)] = .{
1378 result[@backingInt(Feature.sme_f8f16)] = .{
13791379 .llvm_name = "sme-f8f16",
13801380 .description = "Enable Scalable Matrix Extension (SME) F8F16 instructions",
13811381 .dependencies = featureSet(&[_]Feature{
......@@ -1383,7 +1383,7 @@ pub const all_features = blk: {
13831383 .sme2,
13841384 }),
13851385 };
1386 result[@intFromEnum(Feature.sme_f8f32)] = .{
1386 result[@backingInt(Feature.sme_f8f32)] = .{
13871387 .llvm_name = "sme-f8f32",
13881388 .description = "Enable Scalable Matrix Extension (SME) F8F32 instructions",
13891389 .dependencies = featureSet(&[_]Feature{
......@@ -1391,7 +1391,7 @@ pub const all_features = blk: {
13911391 .sme2,
13921392 }),
13931393 };
1394 result[@intFromEnum(Feature.sme_fa64)] = .{
1394 result[@backingInt(Feature.sme_fa64)] = .{
13951395 .llvm_name = "sme-fa64",
13961396 .description = "Enable the full A64 instruction set in streaming SVE mode",
13971397 .dependencies = featureSet(&[_]Feature{
......@@ -1399,62 +1399,62 @@ pub const all_features = blk: {
13991399 .sve2,
14001400 }),
14011401 };
1402 result[@intFromEnum(Feature.sme_i16i64)] = .{
1402 result[@backingInt(Feature.sme_i16i64)] = .{
14031403 .llvm_name = "sme-i16i64",
14041404 .description = "Enable Scalable Matrix Extension (SME) I16I64 instructions",
14051405 .dependencies = featureSet(&[_]Feature{
14061406 .sme,
14071407 }),
14081408 };
1409 result[@intFromEnum(Feature.sme_lutv2)] = .{
1409 result[@backingInt(Feature.sme_lutv2)] = .{
14101410 .llvm_name = "sme-lutv2",
14111411 .description = "Enable Scalable Matrix Extension (SME) LUTv2 instructions",
14121412 .dependencies = featureSet(&[_]Feature{
14131413 .sme2,
14141414 }),
14151415 };
1416 result[@intFromEnum(Feature.sme_mop4)] = .{
1416 result[@backingInt(Feature.sme_mop4)] = .{
14171417 .llvm_name = "sme-mop4",
14181418 .description = "Enable SME Quarter-tile outer product instructions",
14191419 .dependencies = featureSet(&[_]Feature{
14201420 .sme2,
14211421 }),
14221422 };
1423 result[@intFromEnum(Feature.sme_tmop)] = .{
1423 result[@backingInt(Feature.sme_tmop)] = .{
14241424 .llvm_name = "sme-tmop",
14251425 .description = "Enable SME Structured sparsity outer product instructions.",
14261426 .dependencies = featureSet(&[_]Feature{
14271427 .sme2,
14281428 }),
14291429 };
1430 result[@intFromEnum(Feature.spe)] = .{
1430 result[@backingInt(Feature.spe)] = .{
14311431 .llvm_name = "spe",
14321432 .description = "Enable Statistical Profiling extension",
14331433 .dependencies = featureSet(&[_]Feature{}),
14341434 };
1435 result[@intFromEnum(Feature.spe_eef)] = .{
1435 result[@backingInt(Feature.spe_eef)] = .{
14361436 .llvm_name = "spe-eef",
14371437 .description = "Enable extra register in the Statistical Profiling Extension",
14381438 .dependencies = featureSet(&[_]Feature{}),
14391439 };
1440 result[@intFromEnum(Feature.specres2)] = .{
1440 result[@backingInt(Feature.specres2)] = .{
14411441 .llvm_name = "specres2",
14421442 .description = "Enable Speculation Restriction Instruction",
14431443 .dependencies = featureSet(&[_]Feature{
14441444 .predres,
14451445 }),
14461446 };
1447 result[@intFromEnum(Feature.specrestrict)] = .{
1447 result[@backingInt(Feature.specrestrict)] = .{
14481448 .llvm_name = "specrestrict",
14491449 .description = "Enable architectural speculation restriction",
14501450 .dependencies = featureSet(&[_]Feature{}),
14511451 };
1452 result[@intFromEnum(Feature.ssbs)] = .{
1452 result[@backingInt(Feature.ssbs)] = .{
14531453 .llvm_name = "ssbs",
14541454 .description = "Enable Speculative Store Bypass Safe bit",
14551455 .dependencies = featureSet(&[_]Feature{}),
14561456 };
1457 result[@intFromEnum(Feature.ssve_aes)] = .{
1457 result[@backingInt(Feature.ssve_aes)] = .{
14581458 .llvm_name = "ssve-aes",
14591459 .description = "Enable Armv9.6-A SVE AES support in streaming SVE mode",
14601460 .dependencies = featureSet(&[_]Feature{
......@@ -1462,7 +1462,7 @@ pub const all_features = blk: {
14621462 .sve_aes,
14631463 }),
14641464 };
1465 result[@intFromEnum(Feature.ssve_bitperm)] = .{
1465 result[@backingInt(Feature.ssve_bitperm)] = .{
14661466 .llvm_name = "ssve-bitperm",
14671467 .description = "Enable Armv9.6-A SVE BitPerm support in streaming SVE mode",
14681468 .dependencies = featureSet(&[_]Feature{
......@@ -1470,14 +1470,14 @@ pub const all_features = blk: {
14701470 .sve_bitperm,
14711471 }),
14721472 };
1473 result[@intFromEnum(Feature.ssve_fexpa)] = .{
1473 result[@backingInt(Feature.ssve_fexpa)] = .{
14741474 .llvm_name = "ssve-fexpa",
14751475 .description = "Enable SVE FEXPA instruction in Streaming SVE mode",
14761476 .dependencies = featureSet(&[_]Feature{
14771477 .sme2,
14781478 }),
14791479 };
1480 result[@intFromEnum(Feature.ssve_fp8dot2)] = .{
1480 result[@backingInt(Feature.ssve_fp8dot2)] = .{
14811481 .llvm_name = "ssve-fp8dot2",
14821482 .description = "Enable SVE2 FP8 2-way dot product instructions",
14831483 .dependencies = featureSet(&[_]Feature{
......@@ -1485,7 +1485,7 @@ pub const all_features = blk: {
14851485 .sme2,
14861486 }),
14871487 };
1488 result[@intFromEnum(Feature.ssve_fp8dot4)] = .{
1488 result[@backingInt(Feature.ssve_fp8dot4)] = .{
14891489 .llvm_name = "ssve-fp8dot4",
14901490 .description = "Enable SVE2 FP8 4-way dot product instructions",
14911491 .dependencies = featureSet(&[_]Feature{
......@@ -1493,7 +1493,7 @@ pub const all_features = blk: {
14931493 .sme2,
14941494 }),
14951495 };
1496 result[@intFromEnum(Feature.ssve_fp8fma)] = .{
1496 result[@backingInt(Feature.ssve_fp8fma)] = .{
14971497 .llvm_name = "ssve-fp8fma",
14981498 .description = "Enable SVE2 FP8 multiply-add instructions",
14991499 .dependencies = featureSet(&[_]Feature{
......@@ -1501,36 +1501,36 @@ pub const all_features = blk: {
15011501 .sme2,
15021502 }),
15031503 };
1504 result[@intFromEnum(Feature.store_pair_suppress)] = .{
1504 result[@backingInt(Feature.store_pair_suppress)] = .{
15051505 .llvm_name = "store-pair-suppress",
15061506 .description = "Enable Store Pair Suppression heuristics",
15071507 .dependencies = featureSet(&[_]Feature{}),
15081508 };
1509 result[@intFromEnum(Feature.stp_aligned_only)] = .{
1509 result[@backingInt(Feature.stp_aligned_only)] = .{
15101510 .llvm_name = "stp-aligned-only",
15111511 .description = "In order to emit stp, first check if the store will be aligned to 2 * element_size",
15121512 .dependencies = featureSet(&[_]Feature{}),
15131513 };
1514 result[@intFromEnum(Feature.strict_align)] = .{
1514 result[@backingInt(Feature.strict_align)] = .{
15151515 .llvm_name = "strict-align",
15161516 .description = "Disallow all unaligned memory access",
15171517 .dependencies = featureSet(&[_]Feature{}),
15181518 };
1519 result[@intFromEnum(Feature.sve)] = .{
1519 result[@backingInt(Feature.sve)] = .{
15201520 .llvm_name = "sve",
15211521 .description = "Enable Scalable Vector Extension (SVE) instructions",
15221522 .dependencies = featureSet(&[_]Feature{
15231523 .fullfp16,
15241524 }),
15251525 };
1526 result[@intFromEnum(Feature.sve2)] = .{
1526 result[@backingInt(Feature.sve2)] = .{
15271527 .llvm_name = "sve2",
15281528 .description = "Enable Scalable Vector Extension 2 (SVE2) instructions",
15291529 .dependencies = featureSet(&[_]Feature{
15301530 .sve,
15311531 }),
15321532 };
1533 result[@intFromEnum(Feature.sve2_aes)] = .{
1533 result[@backingInt(Feature.sve2_aes)] = .{
15341534 .llvm_name = "sve2-aes",
15351535 .description = "Shorthand for +sve2+sve-aes",
15361536 .dependencies = featureSet(&[_]Feature{
......@@ -1538,7 +1538,7 @@ pub const all_features = blk: {
15381538 .sve_aes,
15391539 }),
15401540 };
1541 result[@intFromEnum(Feature.sve2_bitperm)] = .{
1541 result[@backingInt(Feature.sve2_bitperm)] = .{
15421542 .llvm_name = "sve2-bitperm",
15431543 .description = "Shorthand for +sve2+sve-bitperm",
15441544 .dependencies = featureSet(&[_]Feature{
......@@ -1546,7 +1546,7 @@ pub const all_features = blk: {
15461546 .sve_bitperm,
15471547 }),
15481548 };
1549 result[@intFromEnum(Feature.sve2_sha3)] = .{
1549 result[@backingInt(Feature.sve2_sha3)] = .{
15501550 .llvm_name = "sve2-sha3",
15511551 .description = "Shorthand for +sve2+sve-sha3",
15521552 .dependencies = featureSet(&[_]Feature{
......@@ -1554,7 +1554,7 @@ pub const all_features = blk: {
15541554 .sve_sha3,
15551555 }),
15561556 };
1557 result[@intFromEnum(Feature.sve2_sm4)] = .{
1557 result[@backingInt(Feature.sve2_sm4)] = .{
15581558 .llvm_name = "sve2-sm4",
15591559 .description = "Shorthand for +sve2+sve-sm4",
15601560 .dependencies = featureSet(&[_]Feature{
......@@ -1562,173 +1562,173 @@ pub const all_features = blk: {
15621562 .sve_sm4,
15631563 }),
15641564 };
1565 result[@intFromEnum(Feature.sve2p1)] = .{
1565 result[@backingInt(Feature.sve2p1)] = .{
15661566 .llvm_name = "sve2p1",
15671567 .description = "Enable Scalable Vector Extension 2.1 instructions",
15681568 .dependencies = featureSet(&[_]Feature{
15691569 .sve2,
15701570 }),
15711571 };
1572 result[@intFromEnum(Feature.sve2p2)] = .{
1572 result[@backingInt(Feature.sve2p2)] = .{
15731573 .llvm_name = "sve2p2",
15741574 .description = "Enable Armv9.6-A Scalable Vector Extension 2.2 instructions",
15751575 .dependencies = featureSet(&[_]Feature{
15761576 .sve2p1,
15771577 }),
15781578 };
1579 result[@intFromEnum(Feature.sve2p3)] = .{
1579 result[@backingInt(Feature.sve2p3)] = .{
15801580 .llvm_name = "sve2p3",
15811581 .description = "Enable Armv9.7-A Scalable Vector Extension 2.3 instructions",
15821582 .dependencies = featureSet(&[_]Feature{
15831583 .sve2p2,
15841584 }),
15851585 };
1586 result[@intFromEnum(Feature.sve_aes)] = .{
1586 result[@backingInt(Feature.sve_aes)] = .{
15871587 .llvm_name = "sve-aes",
15881588 .description = "Enable SVE AES and quadword SVE polynomial multiply instructions",
15891589 .dependencies = featureSet(&[_]Feature{
15901590 .aes,
15911591 }),
15921592 };
1593 result[@intFromEnum(Feature.sve_aes2)] = .{
1593 result[@backingInt(Feature.sve_aes2)] = .{
15941594 .llvm_name = "sve-aes2",
15951595 .description = "Enable Armv9.6-A SVE multi-vector AES and multi-vector quadword polynomial multiply instructions",
15961596 .dependencies = featureSet(&[_]Feature{}),
15971597 };
1598 result[@intFromEnum(Feature.sve_b16b16)] = .{
1598 result[@backingInt(Feature.sve_b16b16)] = .{
15991599 .llvm_name = "sve-b16b16",
16001600 .description = "Enable SVE2 non-widening and SME2 Z-targeting non-widening BFloat16 instructions",
16011601 .dependencies = featureSet(&[_]Feature{}),
16021602 };
1603 result[@intFromEnum(Feature.sve_b16mm)] = .{
1603 result[@backingInt(Feature.sve_b16mm)] = .{
16041604 .llvm_name = "sve-b16mm",
16051605 .description = "Enable Armv9.7-A SVE non-widening BFloat16 matrix multiply-accumulate",
16061606 .dependencies = featureSet(&[_]Feature{
16071607 .sve,
16081608 }),
16091609 };
1610 result[@intFromEnum(Feature.sve_bfscale)] = .{
1610 result[@backingInt(Feature.sve_bfscale)] = .{
16111611 .llvm_name = "sve-bfscale",
16121612 .description = "Enable Armv9.6-A SVE BFloat16 scaling instructions",
16131613 .dependencies = featureSet(&[_]Feature{}),
16141614 };
1615 result[@intFromEnum(Feature.sve_bitperm)] = .{
1615 result[@backingInt(Feature.sve_bitperm)] = .{
16161616 .llvm_name = "sve-bitperm",
16171617 .description = "Enable bit permutation SVE2 instructions",
16181618 .dependencies = featureSet(&[_]Feature{}),
16191619 };
1620 result[@intFromEnum(Feature.sve_f16f32mm)] = .{
1620 result[@backingInt(Feature.sve_f16f32mm)] = .{
16211621 .llvm_name = "sve-f16f32mm",
16221622 .description = "Enable Armv9.6-A FP16 to FP32 Matrix Multiply instructions",
16231623 .dependencies = featureSet(&[_]Feature{
16241624 .sve,
16251625 }),
16261626 };
1627 result[@intFromEnum(Feature.sve_sha3)] = .{
1627 result[@backingInt(Feature.sve_sha3)] = .{
16281628 .llvm_name = "sve-sha3",
16291629 .description = "Enable SVE SHA3 instructions",
16301630 .dependencies = featureSet(&[_]Feature{
16311631 .sha3,
16321632 }),
16331633 };
1634 result[@intFromEnum(Feature.sve_sm4)] = .{
1634 result[@backingInt(Feature.sve_sm4)] = .{
16351635 .llvm_name = "sve-sm4",
16361636 .description = "Enable SVE SM4 instructions",
16371637 .dependencies = featureSet(&[_]Feature{
16381638 .sm4,
16391639 }),
16401640 };
1641 result[@intFromEnum(Feature.tagged_globals)] = .{
1641 result[@backingInt(Feature.tagged_globals)] = .{
16421642 .llvm_name = "tagged-globals",
16431643 .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits",
16441644 .dependencies = featureSet(&[_]Feature{}),
16451645 };
1646 result[@intFromEnum(Feature.tev)] = .{
1646 result[@backingInt(Feature.tev)] = .{
16471647 .llvm_name = "tev",
16481648 .description = "Enable TIndex Exception-like Vector instructions",
16491649 .dependencies = featureSet(&[_]Feature{}),
16501650 };
1651 result[@intFromEnum(Feature.the)] = .{
1651 result[@backingInt(Feature.the)] = .{
16521652 .llvm_name = "the",
16531653 .description = "Enable Armv8.9-A Translation Hardening Extension",
16541654 .dependencies = featureSet(&[_]Feature{}),
16551655 };
1656 result[@intFromEnum(Feature.tlb_rmi)] = .{
1656 result[@backingInt(Feature.tlb_rmi)] = .{
16571657 .llvm_name = "tlb-rmi",
16581658 .description = "Enable Armv8.4-A TLB Range and Maintenance instructions",
16591659 .dependencies = featureSet(&[_]Feature{}),
16601660 };
1661 result[@intFromEnum(Feature.tlbid)] = .{
1661 result[@backingInt(Feature.tlbid)] = .{
16621662 .llvm_name = "tlbid",
16631663 .description = "Enable Armv9.7-A TLBI Domains extension",
16641664 .dependencies = featureSet(&[_]Feature{}),
16651665 };
1666 result[@intFromEnum(Feature.tlbiw)] = .{
1666 result[@backingInt(Feature.tlbiw)] = .{
16671667 .llvm_name = "tlbiw",
16681668 .description = "Enable Armv9.5-A TLBI VMALL for Dirty State",
16691669 .dependencies = featureSet(&[_]Feature{}),
16701670 };
1671 result[@intFromEnum(Feature.tpidr_el1)] = .{
1671 result[@backingInt(Feature.tpidr_el1)] = .{
16721672 .llvm_name = "tpidr-el1",
16731673 .description = "Permit use of TPIDR_EL1 for the TLS base",
16741674 .dependencies = featureSet(&[_]Feature{}),
16751675 };
1676 result[@intFromEnum(Feature.tpidr_el2)] = .{
1676 result[@backingInt(Feature.tpidr_el2)] = .{
16771677 .llvm_name = "tpidr-el2",
16781678 .description = "Permit use of TPIDR_EL2 for the TLS base",
16791679 .dependencies = featureSet(&[_]Feature{}),
16801680 };
1681 result[@intFromEnum(Feature.tpidr_el3)] = .{
1681 result[@backingInt(Feature.tpidr_el3)] = .{
16821682 .llvm_name = "tpidr-el3",
16831683 .description = "Permit use of TPIDR_EL3 for the TLS base",
16841684 .dependencies = featureSet(&[_]Feature{}),
16851685 };
1686 result[@intFromEnum(Feature.tpidrro_el0)] = .{
1686 result[@backingInt(Feature.tpidrro_el0)] = .{
16871687 .llvm_name = "tpidrro-el0",
16881688 .description = "Permit use of TPIDRRO_EL0 for the TLS base",
16891689 .dependencies = featureSet(&[_]Feature{}),
16901690 };
1691 result[@intFromEnum(Feature.tracev8_4)] = .{
1691 result[@backingInt(Feature.tracev8_4)] = .{
16921692 .llvm_name = "tracev8.4",
16931693 .description = "Enable Armv8.4-A Trace extension",
16941694 .dependencies = featureSet(&[_]Feature{}),
16951695 };
1696 result[@intFromEnum(Feature.trbe)] = .{
1696 result[@backingInt(Feature.trbe)] = .{
16971697 .llvm_name = "trbe",
16981698 .description = "Enable Trace Buffer Extension",
16991699 .dependencies = featureSet(&[_]Feature{}),
17001700 };
1701 result[@intFromEnum(Feature.uaops)] = .{
1701 result[@backingInt(Feature.uaops)] = .{
17021702 .llvm_name = "uaops",
17031703 .description = "Enable Armv8.2-A UAO PState",
17041704 .dependencies = featureSet(&[_]Feature{}),
17051705 };
1706 result[@intFromEnum(Feature.use_experimental_zeroing_pseudos)] = .{
1706 result[@backingInt(Feature.use_experimental_zeroing_pseudos)] = .{
17071707 .llvm_name = "use-experimental-zeroing-pseudos",
17081708 .description = "Hint to the compiler that the MOVPRFX instruction is merged with destructive operations",
17091709 .dependencies = featureSet(&[_]Feature{}),
17101710 };
1711 result[@intFromEnum(Feature.use_fixed_over_scalable_if_equal_cost)] = .{
1711 result[@backingInt(Feature.use_fixed_over_scalable_if_equal_cost)] = .{
17121712 .llvm_name = "use-fixed-over-scalable-if-equal-cost",
17131713 .description = "Prefer fixed width loop vectorization over scalable if the cost-model assigns equal costs",
17141714 .dependencies = featureSet(&[_]Feature{}),
17151715 };
1716 result[@intFromEnum(Feature.use_postra_scheduler)] = .{
1716 result[@backingInt(Feature.use_postra_scheduler)] = .{
17171717 .llvm_name = "use-postra-scheduler",
17181718 .description = "Schedule again after register allocation",
17191719 .dependencies = featureSet(&[_]Feature{}),
17201720 };
1721 result[@intFromEnum(Feature.use_reciprocal_square_root)] = .{
1721 result[@backingInt(Feature.use_reciprocal_square_root)] = .{
17221722 .llvm_name = "use-reciprocal-square-root",
17231723 .description = "Use the reciprocal square root approximation",
17241724 .dependencies = featureSet(&[_]Feature{}),
17251725 };
1726 result[@intFromEnum(Feature.use_wzr_to_vec_move)] = .{
1726 result[@backingInt(Feature.use_wzr_to_vec_move)] = .{
17271727 .llvm_name = "use-wzr-to-vec-move",
17281728 .description = "Move from WZR to insert 0 into vector registers",
17291729 .dependencies = featureSet(&[_]Feature{}),
17301730 };
1731 result[@intFromEnum(Feature.v8_1a)] = .{
1731 result[@backingInt(Feature.v8_1a)] = .{
17321732 .llvm_name = "v8.1a",
17331733 .description = "Support ARM v8.1a architecture",
17341734 .dependencies = featureSet(&[_]Feature{
......@@ -1741,7 +1741,7 @@ pub const all_features = blk: {
17411741 .vh,
17421742 }),
17431743 };
1744 result[@intFromEnum(Feature.v8_2a)] = .{
1744 result[@backingInt(Feature.v8_2a)] = .{
17451745 .llvm_name = "v8.2a",
17461746 .description = "Support ARM v8.2a architecture",
17471747 .dependencies = featureSet(&[_]Feature{
......@@ -1752,7 +1752,7 @@ pub const all_features = blk: {
17521752 .v8_1a,
17531753 }),
17541754 };
1755 result[@intFromEnum(Feature.v8_3a)] = .{
1755 result[@backingInt(Feature.v8_3a)] = .{
17561756 .llvm_name = "v8.3a",
17571757 .description = "Support ARM v8.3a architecture",
17581758 .dependencies = featureSet(&[_]Feature{
......@@ -1764,7 +1764,7 @@ pub const all_features = blk: {
17641764 .v8_2a,
17651765 }),
17661766 };
1767 result[@intFromEnum(Feature.v8_4a)] = .{
1767 result[@backingInt(Feature.v8_4a)] = .{
17681768 .llvm_name = "v8.4a",
17691769 .description = "Support ARM v8.4a architecture",
17701770 .dependencies = featureSet(&[_]Feature{
......@@ -1782,7 +1782,7 @@ pub const all_features = blk: {
17821782 .v8_3a,
17831783 }),
17841784 };
1785 result[@intFromEnum(Feature.v8_5a)] = .{
1785 result[@backingInt(Feature.v8_5a)] = .{
17861786 .llvm_name = "v8.5a",
17871787 .description = "Support ARM v8.5a architecture",
17881788 .dependencies = featureSet(&[_]Feature{
......@@ -1797,7 +1797,7 @@ pub const all_features = blk: {
17971797 .v8_4a,
17981798 }),
17991799 };
1800 result[@intFromEnum(Feature.v8_6a)] = .{
1800 result[@backingInt(Feature.v8_6a)] = .{
18011801 .llvm_name = "v8.6a",
18021802 .description = "Support ARM v8.6a architecture",
18031803 .dependencies = featureSet(&[_]Feature{
......@@ -1809,7 +1809,7 @@ pub const all_features = blk: {
18091809 .v8_5a,
18101810 }),
18111811 };
1812 result[@intFromEnum(Feature.v8_7a)] = .{
1812 result[@backingInt(Feature.v8_7a)] = .{
18131813 .llvm_name = "v8.7a",
18141814 .description = "Support ARM v8.7a architecture",
18151815 .dependencies = featureSet(&[_]Feature{
......@@ -1820,7 +1820,7 @@ pub const all_features = blk: {
18201820 .xs,
18211821 }),
18221822 };
1823 result[@intFromEnum(Feature.v8_8a)] = .{
1823 result[@backingInt(Feature.v8_8a)] = .{
18241824 .llvm_name = "v8.8a",
18251825 .description = "Support ARM v8.8a architecture",
18261826 .dependencies = featureSet(&[_]Feature{
......@@ -1830,7 +1830,7 @@ pub const all_features = blk: {
18301830 .v8_7a,
18311831 }),
18321832 };
1833 result[@intFromEnum(Feature.v8_9a)] = .{
1833 result[@backingInt(Feature.v8_9a)] = .{
18341834 .llvm_name = "v8.9a",
18351835 .description = "Support ARM v8.9a architecture",
18361836 .dependencies = featureSet(&[_]Feature{
......@@ -1843,7 +1843,7 @@ pub const all_features = blk: {
18431843 .v8_8a,
18441844 }),
18451845 };
1846 result[@intFromEnum(Feature.v8a)] = .{
1846 result[@backingInt(Feature.v8a)] = .{
18471847 .llvm_name = "v8a",
18481848 .description = "Support ARM v8a architecture",
18491849 .dependencies = featureSet(&[_]Feature{
......@@ -1852,7 +1852,7 @@ pub const all_features = blk: {
18521852 .neon,
18531853 }),
18541854 };
1855 result[@intFromEnum(Feature.v8r)] = .{
1855 result[@backingInt(Feature.v8r)] = .{
18561856 .llvm_name = "v8r",
18571857 .description = "Support ARM v8r architecture",
18581858 .dependencies = featureSet(&[_]Feature{
......@@ -1881,7 +1881,7 @@ pub const all_features = blk: {
18811881 .uaops,
18821882 }),
18831883 };
1884 result[@intFromEnum(Feature.v9_1a)] = .{
1884 result[@backingInt(Feature.v9_1a)] = .{
18851885 .llvm_name = "v9.1a",
18861886 .description = "Support ARM v9.1a architecture",
18871887 .dependencies = featureSet(&[_]Feature{
......@@ -1890,7 +1890,7 @@ pub const all_features = blk: {
18901890 .v9a,
18911891 }),
18921892 };
1893 result[@intFromEnum(Feature.v9_2a)] = .{
1893 result[@backingInt(Feature.v9_2a)] = .{
18941894 .llvm_name = "v9.2a",
18951895 .description = "Support ARM v9.2a architecture",
18961896 .dependencies = featureSet(&[_]Feature{
......@@ -1899,7 +1899,7 @@ pub const all_features = blk: {
18991899 .v9_1a,
19001900 }),
19011901 };
1902 result[@intFromEnum(Feature.v9_3a)] = .{
1902 result[@backingInt(Feature.v9_3a)] = .{
19031903 .llvm_name = "v9.3a",
19041904 .description = "Support ARM v9.3a architecture",
19051905 .dependencies = featureSet(&[_]Feature{
......@@ -1907,7 +1907,7 @@ pub const all_features = blk: {
19071907 .v9_2a,
19081908 }),
19091909 };
1910 result[@intFromEnum(Feature.v9_4a)] = .{
1910 result[@backingInt(Feature.v9_4a)] = .{
19111911 .llvm_name = "v9.4a",
19121912 .description = "Support ARM v9.4a architecture",
19131913 .dependencies = featureSet(&[_]Feature{
......@@ -1916,7 +1916,7 @@ pub const all_features = blk: {
19161916 .v9_3a,
19171917 }),
19181918 };
1919 result[@intFromEnum(Feature.v9_5a)] = .{
1919 result[@backingInt(Feature.v9_5a)] = .{
19201920 .llvm_name = "v9.5a",
19211921 .description = "Support ARM v9.5a architecture",
19221922 .dependencies = featureSet(&[_]Feature{
......@@ -1926,7 +1926,7 @@ pub const all_features = blk: {
19261926 .v9_4a,
19271927 }),
19281928 };
1929 result[@intFromEnum(Feature.v9_6a)] = .{
1929 result[@backingInt(Feature.v9_6a)] = .{
19301930 .llvm_name = "v9.6a",
19311931 .description = "Support ARM v9.6a architecture",
19321932 .dependencies = featureSet(&[_]Feature{
......@@ -1936,7 +1936,7 @@ pub const all_features = blk: {
19361936 .v9_5a,
19371937 }),
19381938 };
1939 result[@intFromEnum(Feature.v9_7a)] = .{
1939 result[@backingInt(Feature.v9_7a)] = .{
19401940 .llvm_name = "v9.7a",
19411941 .description = "Support ARM v9.7a architecture",
19421942 .dependencies = featureSet(&[_]Feature{
......@@ -1946,7 +1946,7 @@ pub const all_features = blk: {
19461946 .v9_6a,
19471947 }),
19481948 };
1949 result[@intFromEnum(Feature.v9a)] = .{
1949 result[@backingInt(Feature.v9a)] = .{
19501950 .llvm_name = "v9a",
19511951 .description = "Support ARM v9a architecture",
19521952 .dependencies = featureSet(&[_]Feature{
......@@ -1954,64 +1954,64 @@ pub const all_features = blk: {
19541954 .v8_5a,
19551955 }),
19561956 };
1957 result[@intFromEnum(Feature.vh)] = .{
1957 result[@backingInt(Feature.vh)] = .{
19581958 .llvm_name = "vh",
19591959 .description = "Enable Armv8.1-A Virtual Host extension",
19601960 .dependencies = featureSet(&[_]Feature{
19611961 .contextidr_el2,
19621962 }),
19631963 };
1964 result[@intFromEnum(Feature.wfxt)] = .{
1964 result[@backingInt(Feature.wfxt)] = .{
19651965 .llvm_name = "wfxt",
19661966 .description = "Enable Armv8.7-A WFET and WFIT instruction",
19671967 .dependencies = featureSet(&[_]Feature{}),
19681968 };
1969 result[@intFromEnum(Feature.xs)] = .{
1969 result[@backingInt(Feature.xs)] = .{
19701970 .llvm_name = "xs",
19711971 .description = "Enable Armv8.7-A limited-TLB-maintenance instruction",
19721972 .dependencies = featureSet(&[_]Feature{}),
19731973 };
1974 result[@intFromEnum(Feature.zcm_fpr128)] = .{
1974 result[@backingInt(Feature.zcm_fpr128)] = .{
19751975 .llvm_name = "zcm-fpr128",
19761976 .description = "Has zero-cycle register moves for FPR128 registers",
19771977 .dependencies = featureSet(&[_]Feature{}),
19781978 };
1979 result[@intFromEnum(Feature.zcm_fpr32)] = .{
1979 result[@backingInt(Feature.zcm_fpr32)] = .{
19801980 .llvm_name = "zcm-fpr32",
19811981 .description = "Has zero-cycle register moves for FPR32 registers",
19821982 .dependencies = featureSet(&[_]Feature{}),
19831983 };
1984 result[@intFromEnum(Feature.zcm_fpr64)] = .{
1984 result[@backingInt(Feature.zcm_fpr64)] = .{
19851985 .llvm_name = "zcm-fpr64",
19861986 .description = "Has zero-cycle register moves for FPR64 registers",
19871987 .dependencies = featureSet(&[_]Feature{}),
19881988 };
1989 result[@intFromEnum(Feature.zcm_gpr32)] = .{
1989 result[@backingInt(Feature.zcm_gpr32)] = .{
19901990 .llvm_name = "zcm-gpr32",
19911991 .description = "Has zero-cycle register moves for GPR32 registers",
19921992 .dependencies = featureSet(&[_]Feature{}),
19931993 };
1994 result[@intFromEnum(Feature.zcm_gpr64)] = .{
1994 result[@backingInt(Feature.zcm_gpr64)] = .{
19951995 .llvm_name = "zcm-gpr64",
19961996 .description = "Has zero-cycle register moves for GPR64 registers",
19971997 .dependencies = featureSet(&[_]Feature{}),
19981998 };
1999 result[@intFromEnum(Feature.zcz_fp_workaround)] = .{
1999 result[@backingInt(Feature.zcz_fp_workaround)] = .{
20002000 .llvm_name = "zcz-fp-workaround",
20012001 .description = "The zero-cycle floating-point zeroing instruction has a bug",
20022002 .dependencies = featureSet(&[_]Feature{}),
20032003 };
2004 result[@intFromEnum(Feature.zcz_fpr128)] = .{
2004 result[@backingInt(Feature.zcz_fpr128)] = .{
20052005 .llvm_name = "zcz-fpr128",
20062006 .description = "Has zero-cycle zeroing instructions for FPR128 registers",
20072007 .dependencies = featureSet(&[_]Feature{}),
20082008 };
2009 result[@intFromEnum(Feature.zcz_gpr32)] = .{
2009 result[@backingInt(Feature.zcz_gpr32)] = .{
20102010 .llvm_name = "zcz-gpr32",
20112011 .description = "Has zero-cycle zeroing instructions for GPR32 registers",
20122012 .dependencies = featureSet(&[_]Feature{}),
20132013 };
2014 result[@intFromEnum(Feature.zcz_gpr64)] = .{
2014 result[@backingInt(Feature.zcz_gpr64)] = .{
20152015 .llvm_name = "zcz-gpr64",
20162016 .description = "Has zero-cycle zeroing instructions for GPR64 registers",
20172017 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/alpha.zig+4-4
......@@ -20,22 +20,22 @@ pub const all_features = blk: {
2020 const len = @typeInfo(Feature).@"enum".field_names.len;
2121 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
2222 var result: [len]CpuFeature = undefined;
23 result[@intFromEnum(Feature.bwx)] = .{
23 result[@backingInt(Feature.bwx)] = .{
2424 .llvm_name = null,
2525 .description = "Enable byte/word extensions",
2626 .dependencies = featureSet(&[_]Feature{}),
2727 };
28 result[@intFromEnum(Feature.cix)] = .{
28 result[@backingInt(Feature.cix)] = .{
2929 .llvm_name = null,
3030 .description = "Enable counting extensions",
3131 .dependencies = featureSet(&[_]Feature{}),
3232 };
33 result[@intFromEnum(Feature.fix)] = .{
33 result[@backingInt(Feature.fix)] = .{
3434 .llvm_name = null,
3535 .description = "Enable floating point move and square root extensions",
3636 .dependencies = featureSet(&[_]Feature{}),
3737 };
38 result[@intFromEnum(Feature.max)] = .{
38 result[@backingInt(Feature.max)] = .{
3939 .llvm_name = null,
4040 .description = "Enable motion video extensions",
4141 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/amdgcn.zig+254-254
......@@ -271,556 +271,556 @@ pub const all_features = blk: {
271271 const len = @typeInfo(Feature).@"enum".field_names.len;
272272 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
273273 var result: [len]CpuFeature = undefined;
274 result[@intFromEnum(Feature.@"1024_addressable_vgprs")] = .{
274 result[@backingInt(Feature.@"1024_addressable_vgprs")] = .{
275275 .llvm_name = "1024-addressable-vgprs",
276276 .description = "Has 1024 addressable VGPRs",
277277 .dependencies = featureSet(&[_]Feature{}),
278278 };
279 result[@intFromEnum(Feature.@"16_bit_insts")] = .{
279 result[@backingInt(Feature.@"16_bit_insts")] = .{
280280 .llvm_name = "16-bit-insts",
281281 .description = "Has i16/f16 instructions",
282282 .dependencies = featureSet(&[_]Feature{}),
283283 };
284 result[@intFromEnum(Feature.@"45_bit_num_records_buffer_resource")] = .{
284 result[@backingInt(Feature.@"45_bit_num_records_buffer_resource")] = .{
285285 .llvm_name = "45-bit-num-records-buffer-resource",
286286 .description = "The buffer resource (V#) supports 45-bit num_records",
287287 .dependencies = featureSet(&[_]Feature{}),
288288 };
289 result[@intFromEnum(Feature.@"64_bit_literals")] = .{
289 result[@backingInt(Feature.@"64_bit_literals")] = .{
290290 .llvm_name = "64-bit-literals",
291291 .description = "Can use 64-bit literals with single DWORD instructions",
292292 .dependencies = featureSet(&[_]Feature{}),
293293 };
294 result[@intFromEnum(Feature.a16)] = .{
294 result[@backingInt(Feature.a16)] = .{
295295 .llvm_name = "a16",
296296 .description = "Support A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands",
297297 .dependencies = featureSet(&[_]Feature{}),
298298 };
299 result[@intFromEnum(Feature.add_min_max_insts)] = .{
299 result[@backingInt(Feature.add_min_max_insts)] = .{
300300 .llvm_name = "add-min-max-insts",
301301 .description = "Has v_add_{min|max}_{i|u}32 instructions",
302302 .dependencies = featureSet(&[_]Feature{}),
303303 };
304 result[@intFromEnum(Feature.add_no_carry_insts)] = .{
304 result[@backingInt(Feature.add_no_carry_insts)] = .{
305305 .llvm_name = "add-no-carry-insts",
306306 .description = "Have VALU add/sub instructions without carry out",
307307 .dependencies = featureSet(&[_]Feature{}),
308308 };
309 result[@intFromEnum(Feature.add_sub_u64_insts)] = .{
309 result[@backingInt(Feature.add_sub_u64_insts)] = .{
310310 .llvm_name = "add-sub-u64-insts",
311311 .description = "Has v_add_u64 and v_sub_u64 instructions",
312312 .dependencies = featureSet(&[_]Feature{}),
313313 };
314 result[@intFromEnum(Feature.addressablelocalmemorysize163840)] = .{
314 result[@backingInt(Feature.addressablelocalmemorysize163840)] = .{
315315 .llvm_name = "addressablelocalmemorysize163840",
316316 .description = "The size of local memory in bytes",
317317 .dependencies = featureSet(&[_]Feature{}),
318318 };
319 result[@intFromEnum(Feature.addressablelocalmemorysize32768)] = .{
319 result[@backingInt(Feature.addressablelocalmemorysize32768)] = .{
320320 .llvm_name = "addressablelocalmemorysize32768",
321321 .description = "The size of local memory in bytes",
322322 .dependencies = featureSet(&[_]Feature{}),
323323 };
324 result[@intFromEnum(Feature.addressablelocalmemorysize327680)] = .{
324 result[@backingInt(Feature.addressablelocalmemorysize327680)] = .{
325325 .llvm_name = "addressablelocalmemorysize327680",
326326 .description = "The size of local memory in bytes",
327327 .dependencies = featureSet(&[_]Feature{}),
328328 };
329 result[@intFromEnum(Feature.addressablelocalmemorysize65536)] = .{
329 result[@backingInt(Feature.addressablelocalmemorysize65536)] = .{
330330 .llvm_name = "addressablelocalmemorysize65536",
331331 .description = "The size of local memory in bytes",
332332 .dependencies = featureSet(&[_]Feature{}),
333333 };
334 result[@intFromEnum(Feature.agent_scope_fine_grained_remote_memory_atomics)] = .{
334 result[@backingInt(Feature.agent_scope_fine_grained_remote_memory_atomics)] = .{
335335 .llvm_name = "agent-scope-fine-grained-remote-memory-atomics",
336336 .description = "Agent (device) scoped atomic operations, excluding those directly supported by PCIe (i.e. integer atomic add, exchange, and compare-and-swap), are functional for allocations in host or peer device memory.",
337337 .dependencies = featureSet(&[_]Feature{}),
338338 };
339 result[@intFromEnum(Feature.allocate1_5xvgprs)] = .{
339 result[@backingInt(Feature.allocate1_5xvgprs)] = .{
340340 .llvm_name = "allocate1_5xvgprs",
341341 .description = "Has 50% more physical VGPRs and 50% larger allocation granule",
342342 .dependencies = featureSet(&[_]Feature{}),
343343 };
344 result[@intFromEnum(Feature.aperture_regs)] = .{
344 result[@backingInt(Feature.aperture_regs)] = .{
345345 .llvm_name = "aperture-regs",
346346 .description = "Has Memory Aperture Base and Size Registers",
347347 .dependencies = featureSet(&[_]Feature{}),
348348 };
349 result[@intFromEnum(Feature.architected_flat_scratch)] = .{
349 result[@backingInt(Feature.architected_flat_scratch)] = .{
350350 .llvm_name = "architected-flat-scratch",
351351 .description = "Flat Scratch register is a readonly SPI initialized architected register",
352352 .dependencies = featureSet(&[_]Feature{}),
353353 };
354 result[@intFromEnum(Feature.architected_sgprs)] = .{
354 result[@backingInt(Feature.architected_sgprs)] = .{
355355 .llvm_name = "architected-sgprs",
356356 .description = "Enable the architected SGPRs",
357357 .dependencies = featureSet(&[_]Feature{}),
358358 };
359 result[@intFromEnum(Feature.ashr_pk_insts)] = .{
359 result[@backingInt(Feature.ashr_pk_insts)] = .{
360360 .llvm_name = "ashr-pk-insts",
361361 .description = "Has Arithmetic Shift Pack instructions",
362362 .dependencies = featureSet(&[_]Feature{}),
363363 };
364 result[@intFromEnum(Feature.assembler_permissive_wavesize)] = .{
364 result[@backingInt(Feature.assembler_permissive_wavesize)] = .{
365365 .llvm_name = "assembler-permissive-wavesize",
366366 .description = "allow parsing wave32 and wave64 variants of instructions",
367367 .dependencies = featureSet(&[_]Feature{}),
368368 };
369 result[@intFromEnum(Feature.atomic_buffer_global_pk_add_f16_insts)] = .{
369 result[@backingInt(Feature.atomic_buffer_global_pk_add_f16_insts)] = .{
370370 .llvm_name = "atomic-buffer-global-pk-add-f16-insts",
371371 .description = "Has buffer_atomic_pk_add_f16 and global_atomic_pk_add_f16 instructions that can return original value",
372372 .dependencies = featureSet(&[_]Feature{
373373 .flat_global_insts,
374374 }),
375375 };
376 result[@intFromEnum(Feature.atomic_buffer_global_pk_add_f16_no_rtn_insts)] = .{
376 result[@backingInt(Feature.atomic_buffer_global_pk_add_f16_no_rtn_insts)] = .{
377377 .llvm_name = "atomic-buffer-global-pk-add-f16-no-rtn-insts",
378378 .description = "Has buffer_atomic_pk_add_f16 and global_atomic_pk_add_f16 instructions that don't return original value",
379379 .dependencies = featureSet(&[_]Feature{
380380 .flat_global_insts,
381381 }),
382382 };
383 result[@intFromEnum(Feature.atomic_buffer_pk_add_bf16_inst)] = .{
383 result[@backingInt(Feature.atomic_buffer_pk_add_bf16_inst)] = .{
384384 .llvm_name = "atomic-buffer-pk-add-bf16-inst",
385385 .description = "Has buffer_atomic_pk_add_bf16 instruction",
386386 .dependencies = featureSet(&[_]Feature{}),
387387 };
388 result[@intFromEnum(Feature.atomic_csub_no_rtn_insts)] = .{
388 result[@backingInt(Feature.atomic_csub_no_rtn_insts)] = .{
389389 .llvm_name = "atomic-csub-no-rtn-insts",
390390 .description = "Has buffer_atomic_csub and global_atomic_csub instructions that don't return original value",
391391 .dependencies = featureSet(&[_]Feature{}),
392392 };
393 result[@intFromEnum(Feature.atomic_ds_pk_add_16_insts)] = .{
393 result[@backingInt(Feature.atomic_ds_pk_add_16_insts)] = .{
394394 .llvm_name = "atomic-ds-pk-add-16-insts",
395395 .description = "Has ds_pk_add_bf16, ds_pk_add_f16, ds_pk_add_rtn_bf16, ds_pk_add_rtn_f16 instructions",
396396 .dependencies = featureSet(&[_]Feature{}),
397397 };
398 result[@intFromEnum(Feature.atomic_fadd_no_rtn_insts)] = .{
398 result[@backingInt(Feature.atomic_fadd_no_rtn_insts)] = .{
399399 .llvm_name = "atomic-fadd-no-rtn-insts",
400400 .description = "Has buffer_atomic_add_f32 and global_atomic_add_f32 instructions that don't return original value",
401401 .dependencies = featureSet(&[_]Feature{
402402 .flat_global_insts,
403403 }),
404404 };
405 result[@intFromEnum(Feature.atomic_fadd_rtn_insts)] = .{
405 result[@backingInt(Feature.atomic_fadd_rtn_insts)] = .{
406406 .llvm_name = "atomic-fadd-rtn-insts",
407407 .description = "Has buffer_atomic_add_f32 and global_atomic_add_f32 instructions that return original value",
408408 .dependencies = featureSet(&[_]Feature{
409409 .flat_global_insts,
410410 }),
411411 };
412 result[@intFromEnum(Feature.atomic_flat_pk_add_16_insts)] = .{
412 result[@backingInt(Feature.atomic_flat_pk_add_16_insts)] = .{
413413 .llvm_name = "atomic-flat-pk-add-16-insts",
414414 .description = "Has flat_atomic_pk_add_f16 and flat_atomic_pk_add_bf16 instructions",
415415 .dependencies = featureSet(&[_]Feature{}),
416416 };
417 result[@intFromEnum(Feature.atomic_fmin_fmax_flat_f32)] = .{
417 result[@backingInt(Feature.atomic_fmin_fmax_flat_f32)] = .{
418418 .llvm_name = "atomic-fmin-fmax-flat-f32",
419419 .description = "Has flat memory instructions for atomicrmw fmin/fmax for float",
420420 .dependencies = featureSet(&[_]Feature{
421421 .flat_address_space,
422422 }),
423423 };
424 result[@intFromEnum(Feature.atomic_fmin_fmax_flat_f64)] = .{
424 result[@backingInt(Feature.atomic_fmin_fmax_flat_f64)] = .{
425425 .llvm_name = "atomic-fmin-fmax-flat-f64",
426426 .description = "Has flat memory instructions for atomicrmw fmin/fmax for double",
427427 .dependencies = featureSet(&[_]Feature{
428428 .flat_address_space,
429429 }),
430430 };
431 result[@intFromEnum(Feature.atomic_fmin_fmax_global_f32)] = .{
431 result[@backingInt(Feature.atomic_fmin_fmax_global_f32)] = .{
432432 .llvm_name = "atomic-fmin-fmax-global-f32",
433433 .description = "Has global/buffer instructions for atomicrmw fmin/fmax for float",
434434 .dependencies = featureSet(&[_]Feature{}),
435435 };
436 result[@intFromEnum(Feature.atomic_fmin_fmax_global_f64)] = .{
436 result[@backingInt(Feature.atomic_fmin_fmax_global_f64)] = .{
437437 .llvm_name = "atomic-fmin-fmax-global-f64",
438438 .description = "Has global/buffer instructions for atomicrmw fmin/fmax for float",
439439 .dependencies = featureSet(&[_]Feature{}),
440440 };
441 result[@intFromEnum(Feature.atomic_global_pk_add_bf16_inst)] = .{
441 result[@backingInt(Feature.atomic_global_pk_add_bf16_inst)] = .{
442442 .llvm_name = "atomic-global-pk-add-bf16-inst",
443443 .description = "Has global_atomic_pk_add_bf16 instruction",
444444 .dependencies = featureSet(&[_]Feature{
445445 .flat_global_insts,
446446 }),
447447 };
448 result[@intFromEnum(Feature.auto_waitcnt_before_barrier)] = .{
448 result[@backingInt(Feature.auto_waitcnt_before_barrier)] = .{
449449 .llvm_name = "auto-waitcnt-before-barrier",
450450 .description = "Hardware automatically inserts waitcnt before barrier",
451451 .dependencies = featureSet(&[_]Feature{}),
452452 };
453 result[@intFromEnum(Feature.back_off_barrier)] = .{
453 result[@backingInt(Feature.back_off_barrier)] = .{
454454 .llvm_name = "back-off-barrier",
455455 .description = "Hardware supports backing off s_barrier if an exception occurs",
456456 .dependencies = featureSet(&[_]Feature{}),
457457 };
458 result[@intFromEnum(Feature.bf16_cvt_insts)] = .{
458 result[@backingInt(Feature.bf16_cvt_insts)] = .{
459459 .llvm_name = "bf16-cvt-insts",
460460 .description = "Has bf16 conversion instructions",
461461 .dependencies = featureSet(&[_]Feature{}),
462462 };
463 result[@intFromEnum(Feature.bf16_pk_insts)] = .{
463 result[@backingInt(Feature.bf16_pk_insts)] = .{
464464 .llvm_name = "bf16-pk-insts",
465465 .description = "Has bf16 packed instructions (fma, add, mul, max, min)",
466466 .dependencies = featureSet(&[_]Feature{}),
467467 };
468 result[@intFromEnum(Feature.bf16_trans_insts)] = .{
468 result[@backingInt(Feature.bf16_trans_insts)] = .{
469469 .llvm_name = "bf16-trans-insts",
470470 .description = "Has bf16 transcendental instructions",
471471 .dependencies = featureSet(&[_]Feature{}),
472472 };
473 result[@intFromEnum(Feature.bf8_cvt_scale_insts)] = .{
473 result[@backingInt(Feature.bf8_cvt_scale_insts)] = .{
474474 .llvm_name = "bf8-cvt-scale-insts",
475475 .description = "Has bf8 conversion scale instructions",
476476 .dependencies = featureSet(&[_]Feature{}),
477477 };
478 result[@intFromEnum(Feature.bitop3_insts)] = .{
478 result[@backingInt(Feature.bitop3_insts)] = .{
479479 .llvm_name = "bitop3-insts",
480480 .description = "Has v_bitop3_b32/v_bitop3_b16 instructions",
481481 .dependencies = featureSet(&[_]Feature{}),
482482 };
483 result[@intFromEnum(Feature.block_vgpr_csr)] = .{
483 result[@backingInt(Feature.block_vgpr_csr)] = .{
484484 .llvm_name = "block-vgpr-csr",
485485 .description = "Use block load/store for VGPR callee saved registers",
486486 .dependencies = featureSet(&[_]Feature{}),
487487 };
488 result[@intFromEnum(Feature.bvh_dual_bvh_8_insts)] = .{
488 result[@backingInt(Feature.bvh_dual_bvh_8_insts)] = .{
489489 .llvm_name = "bvh-dual-bvh-8-insts",
490490 .description = "Has image_bvh_dual_intersect_ray and image_bvh8_intersect_ray instructions",
491491 .dependencies = featureSet(&[_]Feature{}),
492492 };
493 result[@intFromEnum(Feature.ci_insts)] = .{
493 result[@backingInt(Feature.ci_insts)] = .{
494494 .llvm_name = "ci-insts",
495495 .description = "Additional instructions for CI+",
496496 .dependencies = featureSet(&[_]Feature{}),
497497 };
498 result[@intFromEnum(Feature.clusters)] = .{
498 result[@backingInt(Feature.clusters)] = .{
499499 .llvm_name = "clusters",
500500 .description = "Has clusters of workgroups support",
501501 .dependencies = featureSet(&[_]Feature{}),
502502 };
503 result[@intFromEnum(Feature.cube_insts)] = .{
503 result[@backingInt(Feature.cube_insts)] = .{
504504 .llvm_name = "cube-insts",
505505 .description = "Has v_cube* instructions",
506506 .dependencies = featureSet(&[_]Feature{}),
507507 };
508 result[@intFromEnum(Feature.cumode)] = .{
508 result[@backingInt(Feature.cumode)] = .{
509509 .llvm_name = "cumode",
510510 .description = "Enable CU wavefront execution mode",
511511 .dependencies = featureSet(&[_]Feature{}),
512512 };
513 result[@intFromEnum(Feature.cvt_fp8_vop1_bug)] = .{
513 result[@backingInt(Feature.cvt_fp8_vop1_bug)] = .{
514514 .llvm_name = "cvt-fp8-vop1-bug",
515515 .description = "FP8/BF8 VOP1 form of conversion to F32 is unreliable",
516516 .dependencies = featureSet(&[_]Feature{
517517 .fp8_conversion_insts,
518518 }),
519519 };
520 result[@intFromEnum(Feature.cvt_norm_insts)] = .{
520 result[@backingInt(Feature.cvt_norm_insts)] = .{
521521 .llvm_name = "cvt-norm-insts",
522522 .description = "Has v_cvt_norm* instructions",
523523 .dependencies = featureSet(&[_]Feature{}),
524524 };
525 result[@intFromEnum(Feature.cvt_pk_f16_f32_inst)] = .{
525 result[@backingInt(Feature.cvt_pk_f16_f32_inst)] = .{
526526 .llvm_name = "cvt-pk-f16-f32-inst",
527527 .description = "Has cvt_pk_f16_f32 instruction",
528528 .dependencies = featureSet(&[_]Feature{}),
529529 };
530 result[@intFromEnum(Feature.cvt_pknorm_vop2_insts)] = .{
530 result[@backingInt(Feature.cvt_pknorm_vop2_insts)] = .{
531531 .llvm_name = "cvt-pknorm-vop2-insts",
532532 .description = "Has v_cvt_pk_norm_*f32 instructions/Has v_cvt_pk_norm_*_f16 instructions",
533533 .dependencies = featureSet(&[_]Feature{}),
534534 };
535 result[@intFromEnum(Feature.cvt_pknorm_vop3_insts)] = .{
535 result[@backingInt(Feature.cvt_pknorm_vop3_insts)] = .{
536536 .llvm_name = "cvt-pknorm-vop3-insts",
537537 .description = "Has v_cvt_pk_norm_*f32 instructions/Has v_cvt_pk_norm_*_f16 instructions",
538538 .dependencies = featureSet(&[_]Feature{}),
539539 };
540 result[@intFromEnum(Feature.d16_write_vgpr32)] = .{
540 result[@backingInt(Feature.d16_write_vgpr32)] = .{
541541 .llvm_name = "d16-write-vgpr32",
542542 .description = "D16 instructions potentially have 32-bit data dependencies",
543543 .dependencies = featureSet(&[_]Feature{}),
544544 };
545 result[@intFromEnum(Feature.default_component_broadcast)] = .{
545 result[@backingInt(Feature.default_component_broadcast)] = .{
546546 .llvm_name = "default-component-broadcast",
547547 .description = "BUFFER/IMAGE store instructions set unspecified components to x component (GFX12)",
548548 .dependencies = featureSet(&[_]Feature{}),
549549 };
550 result[@intFromEnum(Feature.default_component_zero)] = .{
550 result[@backingInt(Feature.default_component_zero)] = .{
551551 .llvm_name = "default-component-zero",
552552 .description = "BUFFER/IMAGE store instructions set unspecified components to zero (before GFX12)",
553553 .dependencies = featureSet(&[_]Feature{}),
554554 };
555 result[@intFromEnum(Feature.dl_insts)] = .{
555 result[@backingInt(Feature.dl_insts)] = .{
556556 .llvm_name = "dl-insts",
557557 .description = "Has v_fmac_f32 and v_xnor_b32 instructions",
558558 .dependencies = featureSet(&[_]Feature{}),
559559 };
560 result[@intFromEnum(Feature.dot10_insts)] = .{
560 result[@backingInt(Feature.dot10_insts)] = .{
561561 .llvm_name = "dot10-insts",
562562 .description = "Has v_dot2_f32_f16 instruction",
563563 .dependencies = featureSet(&[_]Feature{}),
564564 };
565 result[@intFromEnum(Feature.dot11_insts)] = .{
565 result[@backingInt(Feature.dot11_insts)] = .{
566566 .llvm_name = "dot11-insts",
567567 .description = "Has v_dot4_f32_fp8_fp8, v_dot4_f32_fp8_bf8, v_dot4_f32_bf8_fp8, v_dot4_f32_bf8_bf8 instructions",
568568 .dependencies = featureSet(&[_]Feature{}),
569569 };
570 result[@intFromEnum(Feature.dot12_insts)] = .{
570 result[@backingInt(Feature.dot12_insts)] = .{
571571 .llvm_name = "dot12-insts",
572572 .description = "Has v_dot2_f32_bf16 instructions",
573573 .dependencies = featureSet(&[_]Feature{}),
574574 };
575 result[@intFromEnum(Feature.dot13_insts)] = .{
575 result[@backingInt(Feature.dot13_insts)] = .{
576576 .llvm_name = "dot13-insts",
577577 .description = "Has v_dot2c_f32_bf16 instructions",
578578 .dependencies = featureSet(&[_]Feature{}),
579579 };
580 result[@intFromEnum(Feature.dot1_insts)] = .{
580 result[@backingInt(Feature.dot1_insts)] = .{
581581 .llvm_name = "dot1-insts",
582582 .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions",
583583 .dependencies = featureSet(&[_]Feature{}),
584584 };
585 result[@intFromEnum(Feature.dot2_insts)] = .{
585 result[@backingInt(Feature.dot2_insts)] = .{
586586 .llvm_name = "dot2-insts",
587587 .description = "Has v_dot2_i32_i16, v_dot2_u32_u16 instructions",
588588 .dependencies = featureSet(&[_]Feature{}),
589589 };
590 result[@intFromEnum(Feature.dot3_insts)] = .{
590 result[@backingInt(Feature.dot3_insts)] = .{
591591 .llvm_name = "dot3-insts",
592592 .description = "Has v_dot8c_i32_i4 instruction",
593593 .dependencies = featureSet(&[_]Feature{}),
594594 };
595 result[@intFromEnum(Feature.dot4_insts)] = .{
595 result[@backingInt(Feature.dot4_insts)] = .{
596596 .llvm_name = "dot4-insts",
597597 .description = "Has v_dot2c_i32_i16 instruction",
598598 .dependencies = featureSet(&[_]Feature{}),
599599 };
600 result[@intFromEnum(Feature.dot5_insts)] = .{
600 result[@backingInt(Feature.dot5_insts)] = .{
601601 .llvm_name = "dot5-insts",
602602 .description = "Has v_dot2c_f32_f16 instruction",
603603 .dependencies = featureSet(&[_]Feature{}),
604604 };
605 result[@intFromEnum(Feature.dot6_insts)] = .{
605 result[@backingInt(Feature.dot6_insts)] = .{
606606 .llvm_name = "dot6-insts",
607607 .description = "Has v_dot4c_i32_i8 instruction",
608608 .dependencies = featureSet(&[_]Feature{}),
609609 };
610 result[@intFromEnum(Feature.dot7_insts)] = .{
610 result[@backingInt(Feature.dot7_insts)] = .{
611611 .llvm_name = "dot7-insts",
612612 .description = "Has v_dot4_u32_u8, v_dot8_u32_u4 instructions",
613613 .dependencies = featureSet(&[_]Feature{}),
614614 };
615 result[@intFromEnum(Feature.dot8_insts)] = .{
615 result[@backingInt(Feature.dot8_insts)] = .{
616616 .llvm_name = "dot8-insts",
617617 .description = "Has v_dot4_i32_iu8, v_dot8_i32_iu4 instructions",
618618 .dependencies = featureSet(&[_]Feature{}),
619619 };
620 result[@intFromEnum(Feature.dot9_insts)] = .{
620 result[@backingInt(Feature.dot9_insts)] = .{
621621 .llvm_name = "dot9-insts",
622622 .description = "Has v_dot2_f16_f16, v_dot2_bf16_bf16 instructions",
623623 .dependencies = featureSet(&[_]Feature{}),
624624 };
625 result[@intFromEnum(Feature.dpp)] = .{
625 result[@backingInt(Feature.dpp)] = .{
626626 .llvm_name = "dpp",
627627 .description = "Support DPP (Data Parallel Primitives) extension",
628628 .dependencies = featureSet(&[_]Feature{}),
629629 };
630 result[@intFromEnum(Feature.dpp8)] = .{
630 result[@backingInt(Feature.dpp8)] = .{
631631 .llvm_name = "dpp8",
632632 .description = "Support DPP8 (Data Parallel Primitives) extension",
633633 .dependencies = featureSet(&[_]Feature{}),
634634 };
635 result[@intFromEnum(Feature.dpp_64bit)] = .{
635 result[@backingInt(Feature.dpp_64bit)] = .{
636636 .llvm_name = "dpp-64bit",
637637 .description = "Support DPP (Data Parallel Primitives) extension in DP ALU",
638638 .dependencies = featureSet(&[_]Feature{}),
639639 };
640 result[@intFromEnum(Feature.dpp_src1_sgpr)] = .{
640 result[@backingInt(Feature.dpp_src1_sgpr)] = .{
641641 .llvm_name = "dpp-src1-sgpr",
642642 .description = "Support SGPR for Src1 of DPP instructions",
643643 .dependencies = featureSet(&[_]Feature{}),
644644 };
645 result[@intFromEnum(Feature.ds128)] = .{
645 result[@backingInt(Feature.ds128)] = .{
646646 .llvm_name = "enable-ds128",
647647 .description = "Use ds_{read|write}_b128",
648648 .dependencies = featureSet(&[_]Feature{}),
649649 };
650 result[@intFromEnum(Feature.ds_src2_insts)] = .{
650 result[@backingInt(Feature.ds_src2_insts)] = .{
651651 .llvm_name = "ds-src2-insts",
652652 .description = "Has ds_*_src2 instructions",
653653 .dependencies = featureSet(&[_]Feature{}),
654654 };
655 result[@intFromEnum(Feature.emulated_system_scope_atomics)] = .{
655 result[@backingInt(Feature.emulated_system_scope_atomics)] = .{
656656 .llvm_name = "emulated-system-scope-atomics",
657657 .description = "System scope atomics unsupported by the PCI-e are emulated in HW via CAS loop and functional.",
658658 .dependencies = featureSet(&[_]Feature{}),
659659 };
660 result[@intFromEnum(Feature.extended_image_insts)] = .{
660 result[@backingInt(Feature.extended_image_insts)] = .{
661661 .llvm_name = "extended-image-insts",
662662 .description = "Support mips != 0, lod != 0, gather4, and get_lod",
663663 .dependencies = featureSet(&[_]Feature{}),
664664 };
665 result[@intFromEnum(Feature.f16bf16_to_fp6bf6_cvt_scale_insts)] = .{
665 result[@backingInt(Feature.f16bf16_to_fp6bf6_cvt_scale_insts)] = .{
666666 .llvm_name = "f16bf16-to-fp6bf6-cvt-scale-insts",
667667 .description = "Has f16bf16 to fp6bf6 conversion scale instructions",
668668 .dependencies = featureSet(&[_]Feature{}),
669669 };
670 result[@intFromEnum(Feature.f32_to_f16bf16_cvt_sr_insts)] = .{
670 result[@backingInt(Feature.f32_to_f16bf16_cvt_sr_insts)] = .{
671671 .llvm_name = "f32-to-f16bf16-cvt-sr-insts",
672672 .description = "Has f32 to f16bf16 conversion scale instructions",
673673 .dependencies = featureSet(&[_]Feature{}),
674674 };
675 result[@intFromEnum(Feature.fast_denormal_f32)] = .{
675 result[@backingInt(Feature.fast_denormal_f32)] = .{
676676 .llvm_name = "fast-denormal-f32",
677677 .description = "Enabling denormals does not cause f32 instructions to run at f64 rates",
678678 .dependencies = featureSet(&[_]Feature{}),
679679 };
680 result[@intFromEnum(Feature.fast_fmaf)] = .{
680 result[@backingInt(Feature.fast_fmaf)] = .{
681681 .llvm_name = "fast-fmaf",
682682 .description = "Assuming f32 fma is at least as fast as mul + add",
683683 .dependencies = featureSet(&[_]Feature{}),
684684 };
685 result[@intFromEnum(Feature.flat_address_space)] = .{
685 result[@backingInt(Feature.flat_address_space)] = .{
686686 .llvm_name = "flat-address-space",
687687 .description = "Support flat address space",
688688 .dependencies = featureSet(&[_]Feature{}),
689689 };
690 result[@intFromEnum(Feature.flat_atomic_fadd_f32_inst)] = .{
690 result[@backingInt(Feature.flat_atomic_fadd_f32_inst)] = .{
691691 .llvm_name = "flat-atomic-fadd-f32-inst",
692692 .description = "Has flat_atomic_add_f32 instruction",
693693 .dependencies = featureSet(&[_]Feature{
694694 .flat_address_space,
695695 }),
696696 };
697 result[@intFromEnum(Feature.flat_buffer_global_fadd_f64_inst)] = .{
697 result[@backingInt(Feature.flat_buffer_global_fadd_f64_inst)] = .{
698698 .llvm_name = "flat-buffer-global-fadd-f64-inst",
699699 .description = "Has flat, buffer, and global instructions for f64 atomic fadd",
700700 .dependencies = featureSet(&[_]Feature{}),
701701 };
702 result[@intFromEnum(Feature.flat_for_global)] = .{
702 result[@backingInt(Feature.flat_for_global)] = .{
703703 .llvm_name = "flat-for-global",
704704 .description = "Force to generate flat instruction for global",
705705 .dependencies = featureSet(&[_]Feature{}),
706706 };
707 result[@intFromEnum(Feature.flat_global_insts)] = .{
707 result[@backingInt(Feature.flat_global_insts)] = .{
708708 .llvm_name = "flat-global-insts",
709709 .description = "Have global_* flat memory instructions",
710710 .dependencies = featureSet(&[_]Feature{
711711 .flat_address_space,
712712 }),
713713 };
714 result[@intFromEnum(Feature.flat_gvs_mode)] = .{
714 result[@backingInt(Feature.flat_gvs_mode)] = .{
715715 .llvm_name = "flat-gvs-mode",
716716 .description = "Have GVS addressing mode with flat_* instructions",
717717 .dependencies = featureSet(&[_]Feature{
718718 .flat_address_space,
719719 }),
720720 };
721 result[@intFromEnum(Feature.flat_inst_offsets)] = .{
721 result[@backingInt(Feature.flat_inst_offsets)] = .{
722722 .llvm_name = "flat-inst-offsets",
723723 .description = "Flat instructions have immediate offset addressing mode",
724724 .dependencies = featureSet(&[_]Feature{}),
725725 };
726 result[@intFromEnum(Feature.flat_scratch)] = .{
726 result[@backingInt(Feature.flat_scratch)] = .{
727727 .llvm_name = "enable-flat-scratch",
728728 .description = "Use scratch_* flat memory instructions to access scratch",
729729 .dependencies = featureSet(&[_]Feature{}),
730730 };
731 result[@intFromEnum(Feature.flat_scratch_insts)] = .{
731 result[@backingInt(Feature.flat_scratch_insts)] = .{
732732 .llvm_name = "flat-scratch-insts",
733733 .description = "Have scratch_* flat memory instructions",
734734 .dependencies = featureSet(&[_]Feature{
735735 .flat_address_space,
736736 }),
737737 };
738 result[@intFromEnum(Feature.flat_segment_offset_bug)] = .{
738 result[@backingInt(Feature.flat_segment_offset_bug)] = .{
739739 .llvm_name = "flat-segment-offset-bug",
740740 .description = "GFX10 bug where inst_offset is ignored when flat instructions access global memory",
741741 .dependencies = featureSet(&[_]Feature{}),
742742 };
743 result[@intFromEnum(Feature.fma_mix_bf16_insts)] = .{
743 result[@backingInt(Feature.fma_mix_bf16_insts)] = .{
744744 .llvm_name = "fma-mix-bf16-insts",
745745 .description = "Has v_fma_mix_f32_bf16, v_fma_mixlo_bf16, v_fma_mixhi_bf16 instructions",
746746 .dependencies = featureSet(&[_]Feature{}),
747747 };
748 result[@intFromEnum(Feature.fma_mix_insts)] = .{
748 result[@backingInt(Feature.fma_mix_insts)] = .{
749749 .llvm_name = "fma-mix-insts",
750750 .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions",
751751 .dependencies = featureSet(&[_]Feature{}),
752752 };
753 result[@intFromEnum(Feature.fmacf64_inst)] = .{
753 result[@backingInt(Feature.fmacf64_inst)] = .{
754754 .llvm_name = "fmacf64-inst",
755755 .description = "Has v_fmac_f64 instruction",
756756 .dependencies = featureSet(&[_]Feature{}),
757757 };
758 result[@intFromEnum(Feature.fmaf)] = .{
758 result[@backingInt(Feature.fmaf)] = .{
759759 .llvm_name = "fmaf",
760760 .description = "Enable single precision FMA (not as fast as mul+add, but fused)",
761761 .dependencies = featureSet(&[_]Feature{}),
762762 };
763 result[@intFromEnum(Feature.fp4_cvt_scale_insts)] = .{
763 result[@backingInt(Feature.fp4_cvt_scale_insts)] = .{
764764 .llvm_name = "fp4-cvt-scale-insts",
765765 .description = "Has fp4 conversion scale instructions",
766766 .dependencies = featureSet(&[_]Feature{}),
767767 };
768 result[@intFromEnum(Feature.fp64)] = .{
768 result[@backingInt(Feature.fp64)] = .{
769769 .llvm_name = "fp64",
770770 .description = "Enable double precision operations",
771771 .dependencies = featureSet(&[_]Feature{}),
772772 };
773 result[@intFromEnum(Feature.fp6bf6_cvt_scale_insts)] = .{
773 result[@backingInt(Feature.fp6bf6_cvt_scale_insts)] = .{
774774 .llvm_name = "fp6bf6-cvt-scale-insts",
775775 .description = "Has fp6 and bf6 conversion scale instructions",
776776 .dependencies = featureSet(&[_]Feature{}),
777777 };
778 result[@intFromEnum(Feature.fp8_conversion_insts)] = .{
778 result[@backingInt(Feature.fp8_conversion_insts)] = .{
779779 .llvm_name = "fp8-conversion-insts",
780780 .description = "Has fp8 and bf8 conversion instructions",
781781 .dependencies = featureSet(&[_]Feature{}),
782782 };
783 result[@intFromEnum(Feature.fp8_cvt_scale_insts)] = .{
783 result[@backingInt(Feature.fp8_cvt_scale_insts)] = .{
784784 .llvm_name = "fp8-cvt-scale-insts",
785785 .description = "Has fp8 conversion scale instructions",
786786 .dependencies = featureSet(&[_]Feature{}),
787787 };
788 result[@intFromEnum(Feature.fp8_insts)] = .{
788 result[@backingInt(Feature.fp8_insts)] = .{
789789 .llvm_name = "fp8-insts",
790790 .description = "Has fp8 and bf8 instructions",
791791 .dependencies = featureSet(&[_]Feature{}),
792792 };
793 result[@intFromEnum(Feature.fp8e5m3_insts)] = .{
793 result[@backingInt(Feature.fp8e5m3_insts)] = .{
794794 .llvm_name = "fp8e5m3-insts",
795795 .description = "Has fp8 e5m3 format support",
796796 .dependencies = featureSet(&[_]Feature{}),
797797 };
798 result[@intFromEnum(Feature.full_rate_64_ops)] = .{
798 result[@backingInt(Feature.full_rate_64_ops)] = .{
799799 .llvm_name = "full-rate-64-ops",
800800 .description = "Most fp64 instructions are full rate",
801801 .dependencies = featureSet(&[_]Feature{}),
802802 };
803 result[@intFromEnum(Feature.g16)] = .{
803 result[@backingInt(Feature.g16)] = .{
804804 .llvm_name = "g16",
805805 .description = "Support G16 for 16-bit gradient image operands",
806806 .dependencies = featureSet(&[_]Feature{}),
807807 };
808 result[@intFromEnum(Feature.gcn3_encoding)] = .{
808 result[@backingInt(Feature.gcn3_encoding)] = .{
809809 .llvm_name = "gcn3-encoding",
810810 .description = "Encoding format for VI",
811811 .dependencies = featureSet(&[_]Feature{}),
812812 };
813 result[@intFromEnum(Feature.gds)] = .{
813 result[@backingInt(Feature.gds)] = .{
814814 .llvm_name = "gds",
815815 .description = "Has Global Data Share",
816816 .dependencies = featureSet(&[_]Feature{}),
817817 };
818 result[@intFromEnum(Feature.get_wave_id_inst)] = .{
818 result[@backingInt(Feature.get_wave_id_inst)] = .{
819819 .llvm_name = "get-wave-id-inst",
820820 .description = "Has s_get_waveid_in_workgroup instruction",
821821 .dependencies = featureSet(&[_]Feature{}),
822822 };
823 result[@intFromEnum(Feature.gfx10)] = .{
823 result[@backingInt(Feature.gfx10)] = .{
824824 .llvm_name = "gfx10",
825825 .description = "GFX10 GPU generation",
826826 .dependencies = featureSet(&[_]Feature{
......@@ -883,27 +883,27 @@ pub const all_features = blk: {
883883 .vscnt,
884884 }),
885885 };
886 result[@intFromEnum(Feature.gfx10_3_insts)] = .{
886 result[@backingInt(Feature.gfx10_3_insts)] = .{
887887 .llvm_name = "gfx10-3-insts",
888888 .description = "Additional instructions for GFX10.3",
889889 .dependencies = featureSet(&[_]Feature{}),
890890 };
891 result[@intFromEnum(Feature.gfx10_a_encoding)] = .{
891 result[@backingInt(Feature.gfx10_a_encoding)] = .{
892892 .llvm_name = "gfx10_a-encoding",
893893 .description = "Has BVH ray tracing instructions",
894894 .dependencies = featureSet(&[_]Feature{}),
895895 };
896 result[@intFromEnum(Feature.gfx10_b_encoding)] = .{
896 result[@backingInt(Feature.gfx10_b_encoding)] = .{
897897 .llvm_name = "gfx10_b-encoding",
898898 .description = "Encoding format GFX10_B",
899899 .dependencies = featureSet(&[_]Feature{}),
900900 };
901 result[@intFromEnum(Feature.gfx10_insts)] = .{
901 result[@backingInt(Feature.gfx10_insts)] = .{
902902 .llvm_name = "gfx10-insts",
903903 .description = "Additional instructions for GFX10+",
904904 .dependencies = featureSet(&[_]Feature{}),
905905 };
906 result[@intFromEnum(Feature.gfx11)] = .{
906 result[@backingInt(Feature.gfx11)] = .{
907907 .llvm_name = "gfx11",
908908 .description = "GFX11 GPU generation",
909909 .dependencies = featureSet(&[_]Feature{
......@@ -962,12 +962,12 @@ pub const all_features = blk: {
962962 .vscnt,
963963 }),
964964 };
965 result[@intFromEnum(Feature.gfx11_insts)] = .{
965 result[@backingInt(Feature.gfx11_insts)] = .{
966966 .llvm_name = "gfx11-insts",
967967 .description = "Additional instructions for GFX11+",
968968 .dependencies = featureSet(&[_]Feature{}),
969969 };
970 result[@intFromEnum(Feature.gfx12)] = .{
970 result[@backingInt(Feature.gfx12)] = .{
971971 .llvm_name = "gfx12",
972972 .description = "GFX12 GPU generation",
973973 .dependencies = featureSet(&[_]Feature{
......@@ -1019,27 +1019,27 @@ pub const all_features = blk: {
10191019 .vscnt,
10201020 }),
10211021 };
1022 result[@intFromEnum(Feature.gfx1250_insts)] = .{
1022 result[@backingInt(Feature.gfx1250_insts)] = .{
10231023 .llvm_name = "gfx1250-insts",
10241024 .description = "Additional instructions for GFX1250+",
10251025 .dependencies = featureSet(&[_]Feature{}),
10261026 };
1027 result[@intFromEnum(Feature.gfx12_insts)] = .{
1027 result[@backingInt(Feature.gfx12_insts)] = .{
10281028 .llvm_name = "gfx12-insts",
10291029 .description = "Additional instructions for GFX12+",
10301030 .dependencies = featureSet(&[_]Feature{}),
10311031 };
1032 result[@intFromEnum(Feature.gfx7_gfx8_gfx9_insts)] = .{
1032 result[@backingInt(Feature.gfx7_gfx8_gfx9_insts)] = .{
10331033 .llvm_name = "gfx7-gfx8-gfx9-insts",
10341034 .description = "Instructions shared in GFX7, GFX8, GFX9",
10351035 .dependencies = featureSet(&[_]Feature{}),
10361036 };
1037 result[@intFromEnum(Feature.gfx8_insts)] = .{
1037 result[@backingInt(Feature.gfx8_insts)] = .{
10381038 .llvm_name = "gfx8-insts",
10391039 .description = "Additional instructions for GFX8+",
10401040 .dependencies = featureSet(&[_]Feature{}),
10411041 };
1042 result[@intFromEnum(Feature.gfx9)] = .{
1042 result[@backingInt(Feature.gfx9)] = .{
10431043 .llvm_name = "gfx9",
10441044 .description = "GFX9 GPU generation",
10451045 .dependencies = featureSet(&[_]Feature{
......@@ -1092,17 +1092,17 @@ pub const all_features = blk: {
10921092 .xnack_support,
10931093 }),
10941094 };
1095 result[@intFromEnum(Feature.gfx90a_insts)] = .{
1095 result[@backingInt(Feature.gfx90a_insts)] = .{
10961096 .llvm_name = "gfx90a-insts",
10971097 .description = "Additional instructions for GFX90A+",
10981098 .dependencies = featureSet(&[_]Feature{}),
10991099 };
1100 result[@intFromEnum(Feature.gfx940_insts)] = .{
1100 result[@backingInt(Feature.gfx940_insts)] = .{
11011101 .llvm_name = "gfx940-insts",
11021102 .description = "Additional instructions for GFX940+",
11031103 .dependencies = featureSet(&[_]Feature{}),
11041104 };
1105 result[@intFromEnum(Feature.gfx950_insts)] = .{
1105 result[@backingInt(Feature.gfx950_insts)] = .{
11061106 .llvm_name = "gfx950-insts",
11071107 .description = "Additional instructions for GFX950+",
11081108 .dependencies = featureSet(&[_]Feature{
......@@ -1120,437 +1120,437 @@ pub const all_features = blk: {
11201120 .permlane32_swap,
11211121 }),
11221122 };
1123 result[@intFromEnum(Feature.gfx9_insts)] = .{
1123 result[@backingInt(Feature.gfx9_insts)] = .{
11241124 .llvm_name = "gfx9-insts",
11251125 .description = "Additional instructions for GFX9+",
11261126 .dependencies = featureSet(&[_]Feature{}),
11271127 };
1128 result[@intFromEnum(Feature.globally_addressable_scratch)] = .{
1128 result[@backingInt(Feature.globally_addressable_scratch)] = .{
11291129 .llvm_name = "globally-addressable-scratch",
11301130 .description = "FLAT instructions can access scratch memory for any thread in any wave",
11311131 .dependencies = featureSet(&[_]Feature{}),
11321132 };
1133 result[@intFromEnum(Feature.gws)] = .{
1133 result[@backingInt(Feature.gws)] = .{
11341134 .llvm_name = "gws",
11351135 .description = "Has Global Wave Sync",
11361136 .dependencies = featureSet(&[_]Feature{}),
11371137 };
1138 result[@intFromEnum(Feature.half_rate_64_ops)] = .{
1138 result[@backingInt(Feature.half_rate_64_ops)] = .{
11391139 .llvm_name = "half-rate-64-ops",
11401140 .description = "Most fp64 instructions are half rate instead of quarter",
11411141 .dependencies = featureSet(&[_]Feature{}),
11421142 };
1143 result[@intFromEnum(Feature.ieee_minimum_maximum_insts)] = .{
1143 result[@backingInt(Feature.ieee_minimum_maximum_insts)] = .{
11441144 .llvm_name = "ieee-minimum-maximum-insts",
11451145 .description = "Has v_minimum/maximum_f16/f32/f64, v_minimummaximum/maximumminimum_f16/f32 and v_pk_minimum/maximum_f16 instructions",
11461146 .dependencies = featureSet(&[_]Feature{}),
11471147 };
1148 result[@intFromEnum(Feature.image_gather4_d16_bug)] = .{
1148 result[@backingInt(Feature.image_gather4_d16_bug)] = .{
11491149 .llvm_name = "image-gather4-d16-bug",
11501150 .description = "Image Gather4 D16 hardware bug",
11511151 .dependencies = featureSet(&[_]Feature{}),
11521152 };
1153 result[@intFromEnum(Feature.image_insts)] = .{
1153 result[@backingInt(Feature.image_insts)] = .{
11541154 .llvm_name = "image-insts",
11551155 .description = "Support image instructions",
11561156 .dependencies = featureSet(&[_]Feature{}),
11571157 };
1158 result[@intFromEnum(Feature.image_store_d16_bug)] = .{
1158 result[@backingInt(Feature.image_store_d16_bug)] = .{
11591159 .llvm_name = "image-store-d16-bug",
11601160 .description = "Image Store D16 hardware bug",
11611161 .dependencies = featureSet(&[_]Feature{}),
11621162 };
1163 result[@intFromEnum(Feature.inst_fwd_prefetch_bug)] = .{
1163 result[@backingInt(Feature.inst_fwd_prefetch_bug)] = .{
11641164 .llvm_name = "inst-fwd-prefetch-bug",
11651165 .description = "S_INST_PREFETCH instruction causes shader to hang",
11661166 .dependencies = featureSet(&[_]Feature{}),
11671167 };
1168 result[@intFromEnum(Feature.int_clamp_insts)] = .{
1168 result[@backingInt(Feature.int_clamp_insts)] = .{
11691169 .llvm_name = "int-clamp-insts",
11701170 .description = "Support clamp for integer destination",
11711171 .dependencies = featureSet(&[_]Feature{}),
11721172 };
1173 result[@intFromEnum(Feature.inv_2pi_inline_imm)] = .{
1173 result[@backingInt(Feature.inv_2pi_inline_imm)] = .{
11741174 .llvm_name = "inv-2pi-inline-imm",
11751175 .description = "Has 1 / (2 * pi) as inline immediate",
11761176 .dependencies = featureSet(&[_]Feature{}),
11771177 };
1178 result[@intFromEnum(Feature.kernarg_preload)] = .{
1178 result[@backingInt(Feature.kernarg_preload)] = .{
11791179 .llvm_name = "kernarg-preload",
11801180 .description = "Hardware supports preloading of kernel arguments in user SGPRs.",
11811181 .dependencies = featureSet(&[_]Feature{}),
11821182 };
1183 result[@intFromEnum(Feature.lds_barrier_arrive_atomic)] = .{
1183 result[@backingInt(Feature.lds_barrier_arrive_atomic)] = .{
11841184 .llvm_name = "lds-barrier-arrive-atomic",
11851185 .description = "Has LDS barrier-arrive atomic instructions",
11861186 .dependencies = featureSet(&[_]Feature{}),
11871187 };
1188 result[@intFromEnum(Feature.lds_branch_vmem_war_hazard)] = .{
1188 result[@backingInt(Feature.lds_branch_vmem_war_hazard)] = .{
11891189 .llvm_name = "lds-branch-vmem-war-hazard",
11901190 .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0",
11911191 .dependencies = featureSet(&[_]Feature{}),
11921192 };
1193 result[@intFromEnum(Feature.lds_misaligned_bug)] = .{
1193 result[@backingInt(Feature.lds_misaligned_bug)] = .{
11941194 .llvm_name = "lds-misaligned-bug",
11951195 .description = "Some GFX10 bug with multi-dword LDS and flat access that is not naturally aligned in WGP mode",
11961196 .dependencies = featureSet(&[_]Feature{}),
11971197 };
1198 result[@intFromEnum(Feature.ldsbankcount16)] = .{
1198 result[@backingInt(Feature.ldsbankcount16)] = .{
11991199 .llvm_name = "ldsbankcount16",
12001200 .description = "The number of LDS banks per compute unit.",
12011201 .dependencies = featureSet(&[_]Feature{}),
12021202 };
1203 result[@intFromEnum(Feature.ldsbankcount32)] = .{
1203 result[@backingInt(Feature.ldsbankcount32)] = .{
12041204 .llvm_name = "ldsbankcount32",
12051205 .description = "The number of LDS banks per compute unit.",
12061206 .dependencies = featureSet(&[_]Feature{}),
12071207 };
1208 result[@intFromEnum(Feature.lerp_inst)] = .{
1208 result[@backingInt(Feature.lerp_inst)] = .{
12091209 .llvm_name = "lerp-inst",
12101210 .description = "Has v_lerp_u8 instruction",
12111211 .dependencies = featureSet(&[_]Feature{}),
12121212 };
1213 result[@intFromEnum(Feature.load_store_opt)] = .{
1213 result[@backingInt(Feature.load_store_opt)] = .{
12141214 .llvm_name = "load-store-opt",
12151215 .description = "Enable SI load/store optimizer pass",
12161216 .dependencies = featureSet(&[_]Feature{}),
12171217 };
1218 result[@intFromEnum(Feature.lshl_add_u64_inst)] = .{
1218 result[@backingInt(Feature.lshl_add_u64_inst)] = .{
12191219 .llvm_name = "lshl-add-u64-inst",
12201220 .description = "Has v_lshl_add_u64 instruction",
12211221 .dependencies = featureSet(&[_]Feature{}),
12221222 };
1223 result[@intFromEnum(Feature.mad_intra_fwd_bug)] = .{
1223 result[@backingInt(Feature.mad_intra_fwd_bug)] = .{
12241224 .llvm_name = "mad-intra-fwd-bug",
12251225 .description = "MAD_U64/I64 intra instruction forwarding bug",
12261226 .dependencies = featureSet(&[_]Feature{}),
12271227 };
1228 result[@intFromEnum(Feature.mad_mac_f32_insts)] = .{
1228 result[@backingInt(Feature.mad_mac_f32_insts)] = .{
12291229 .llvm_name = "mad-mac-f32-insts",
12301230 .description = "Has v_mad_f32/v_mac_f32/v_madak_f32/v_madmk_f32 instructions",
12311231 .dependencies = featureSet(&[_]Feature{}),
12321232 };
1233 result[@intFromEnum(Feature.mad_mix_insts)] = .{
1233 result[@backingInt(Feature.mad_mix_insts)] = .{
12341234 .llvm_name = "mad-mix-insts",
12351235 .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions",
12361236 .dependencies = featureSet(&[_]Feature{}),
12371237 };
1238 result[@intFromEnum(Feature.mad_u32_inst)] = .{
1238 result[@backingInt(Feature.mad_u32_inst)] = .{
12391239 .llvm_name = "mad-u32-inst",
12401240 .description = "Has v_mad_u32 instruction",
12411241 .dependencies = featureSet(&[_]Feature{}),
12421242 };
1243 result[@intFromEnum(Feature.mai_insts)] = .{
1243 result[@backingInt(Feature.mai_insts)] = .{
12441244 .llvm_name = "mai-insts",
12451245 .description = "Has mAI instructions",
12461246 .dependencies = featureSet(&[_]Feature{}),
12471247 };
1248 result[@intFromEnum(Feature.max_hard_clause_length_32)] = .{
1248 result[@backingInt(Feature.max_hard_clause_length_32)] = .{
12491249 .llvm_name = "max-hard-clause-length-32",
12501250 .description = "Maximum number of instructions in an explicit S_CLAUSE is 32",
12511251 .dependencies = featureSet(&[_]Feature{}),
12521252 };
1253 result[@intFromEnum(Feature.max_hard_clause_length_63)] = .{
1253 result[@backingInt(Feature.max_hard_clause_length_63)] = .{
12541254 .llvm_name = "max-hard-clause-length-63",
12551255 .description = "Maximum number of instructions in an explicit S_CLAUSE is 63",
12561256 .dependencies = featureSet(&[_]Feature{}),
12571257 };
1258 result[@intFromEnum(Feature.max_private_element_size_16)] = .{
1258 result[@backingInt(Feature.max_private_element_size_16)] = .{
12591259 .llvm_name = "max-private-element-size-16",
12601260 .description = "Maximum private access size may be 16",
12611261 .dependencies = featureSet(&[_]Feature{}),
12621262 };
1263 result[@intFromEnum(Feature.max_private_element_size_4)] = .{
1263 result[@backingInt(Feature.max_private_element_size_4)] = .{
12641264 .llvm_name = "max-private-element-size-4",
12651265 .description = "Maximum private access size may be 4",
12661266 .dependencies = featureSet(&[_]Feature{}),
12671267 };
1268 result[@intFromEnum(Feature.max_private_element_size_8)] = .{
1268 result[@backingInt(Feature.max_private_element_size_8)] = .{
12691269 .llvm_name = "max-private-element-size-8",
12701270 .description = "Maximum private access size may be 8",
12711271 .dependencies = featureSet(&[_]Feature{}),
12721272 };
1273 result[@intFromEnum(Feature.mcast_load_insts)] = .{
1273 result[@backingInt(Feature.mcast_load_insts)] = .{
12741274 .llvm_name = "mcast-load-insts",
12751275 .description = "Has multicast load instructions",
12761276 .dependencies = featureSet(&[_]Feature{}),
12771277 };
1278 result[@intFromEnum(Feature.memory_atomic_fadd_f32_denormal_support)] = .{
1278 result[@backingInt(Feature.memory_atomic_fadd_f32_denormal_support)] = .{
12791279 .llvm_name = "memory-atomic-fadd-f32-denormal-support",
12801280 .description = "global/flat/buffer atomic fadd for float supports denormal handling",
12811281 .dependencies = featureSet(&[_]Feature{}),
12821282 };
1283 result[@intFromEnum(Feature.mfma_inline_literal_bug)] = .{
1283 result[@backingInt(Feature.mfma_inline_literal_bug)] = .{
12841284 .llvm_name = "mfma-inline-literal-bug",
12851285 .description = "MFMA cannot use inline literal as SrcC",
12861286 .dependencies = featureSet(&[_]Feature{}),
12871287 };
1288 result[@intFromEnum(Feature.mimg_r128)] = .{
1288 result[@backingInt(Feature.mimg_r128)] = .{
12891289 .llvm_name = "mimg-r128",
12901290 .description = "Support 128-bit texture resources",
12911291 .dependencies = featureSet(&[_]Feature{}),
12921292 };
1293 result[@intFromEnum(Feature.min3_max3_pkf16)] = .{
1293 result[@backingInt(Feature.min3_max3_pkf16)] = .{
12941294 .llvm_name = "min3-max3-pkf16",
12951295 .description = "Has v_pk_min3_num_f16 and v_pk_max3_num_f16 instructions",
12961296 .dependencies = featureSet(&[_]Feature{}),
12971297 };
1298 result[@intFromEnum(Feature.minimum3_maximum3_f16)] = .{
1298 result[@backingInt(Feature.minimum3_maximum3_f16)] = .{
12991299 .llvm_name = "minimum3-maximum3-f16",
13001300 .description = "Has v_minimum3_f16 and v_maximum3_f16 instructions",
13011301 .dependencies = featureSet(&[_]Feature{}),
13021302 };
1303 result[@intFromEnum(Feature.minimum3_maximum3_f32)] = .{
1303 result[@backingInt(Feature.minimum3_maximum3_f32)] = .{
13041304 .llvm_name = "minimum3-maximum3-f32",
13051305 .description = "Has v_minimum3_f32 and v_maximum3_f32 instructions",
13061306 .dependencies = featureSet(&[_]Feature{}),
13071307 };
1308 result[@intFromEnum(Feature.minimum3_maximum3_pkf16)] = .{
1308 result[@backingInt(Feature.minimum3_maximum3_pkf16)] = .{
13091309 .llvm_name = "minimum3-maximum3-pkf16",
13101310 .description = "Has v_pk_minimum3_f16 and v_pk_maximum3_f16 instructions",
13111311 .dependencies = featureSet(&[_]Feature{}),
13121312 };
1313 result[@intFromEnum(Feature.movrel)] = .{
1313 result[@backingInt(Feature.movrel)] = .{
13141314 .llvm_name = "movrel",
13151315 .description = "Has v_movrel*_b32 instructions",
13161316 .dependencies = featureSet(&[_]Feature{}),
13171317 };
1318 result[@intFromEnum(Feature.msaa_load_dst_sel_bug)] = .{
1318 result[@backingInt(Feature.msaa_load_dst_sel_bug)] = .{
13191319 .llvm_name = "msaa-load-dst-sel-bug",
13201320 .description = "MSAA loads not honoring dst_sel bug",
13211321 .dependencies = featureSet(&[_]Feature{}),
13221322 };
1323 result[@intFromEnum(Feature.negative_scratch_offset_bug)] = .{
1323 result[@backingInt(Feature.negative_scratch_offset_bug)] = .{
13241324 .llvm_name = "negative-scratch-offset-bug",
13251325 .description = "Negative immediate offsets in scratch instructions with an SGPR offset page fault on GFX9",
13261326 .dependencies = featureSet(&[_]Feature{}),
13271327 };
1328 result[@intFromEnum(Feature.negative_unaligned_scratch_offset_bug)] = .{
1328 result[@backingInt(Feature.negative_unaligned_scratch_offset_bug)] = .{
13291329 .llvm_name = "negative-unaligned-scratch-offset-bug",
13301330 .description = "Scratch instructions with a VGPR offset and a negative immediate offset that is not a multiple of 4 read wrong memory on GFX10",
13311331 .dependencies = featureSet(&[_]Feature{}),
13321332 };
1333 result[@intFromEnum(Feature.no_data_dep_hazard)] = .{
1333 result[@backingInt(Feature.no_data_dep_hazard)] = .{
13341334 .llvm_name = "no-data-dep-hazard",
13351335 .description = "Does not need SW waitstates",
13361336 .dependencies = featureSet(&[_]Feature{}),
13371337 };
1338 result[@intFromEnum(Feature.no_sdst_cmpx)] = .{
1338 result[@backingInt(Feature.no_sdst_cmpx)] = .{
13391339 .llvm_name = "no-sdst-cmpx",
13401340 .description = "V_CMPX does not write VCC/SGPR in addition to EXEC",
13411341 .dependencies = featureSet(&[_]Feature{}),
13421342 };
1343 result[@intFromEnum(Feature.nsa_clause_bug)] = .{
1343 result[@backingInt(Feature.nsa_clause_bug)] = .{
13441344 .llvm_name = "nsa-clause-bug",
13451345 .description = "MIMG-NSA in a hard clause has unpredictable results on GFX10.1",
13461346 .dependencies = featureSet(&[_]Feature{}),
13471347 };
1348 result[@intFromEnum(Feature.nsa_encoding)] = .{
1348 result[@backingInt(Feature.nsa_encoding)] = .{
13491349 .llvm_name = "nsa-encoding",
13501350 .description = "Support NSA encoding for image instructions",
13511351 .dependencies = featureSet(&[_]Feature{}),
13521352 };
1353 result[@intFromEnum(Feature.nsa_to_vmem_bug)] = .{
1353 result[@backingInt(Feature.nsa_to_vmem_bug)] = .{
13541354 .llvm_name = "nsa-to-vmem-bug",
13551355 .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero",
13561356 .dependencies = featureSet(&[_]Feature{}),
13571357 };
1358 result[@intFromEnum(Feature.offset_3f_bug)] = .{
1358 result[@backingInt(Feature.offset_3f_bug)] = .{
13591359 .llvm_name = "offset-3f-bug",
13601360 .description = "Branch offset of 3f hardware bug",
13611361 .dependencies = featureSet(&[_]Feature{}),
13621362 };
1363 result[@intFromEnum(Feature.packed_fp32_ops)] = .{
1363 result[@backingInt(Feature.packed_fp32_ops)] = .{
13641364 .llvm_name = "packed-fp32-ops",
13651365 .description = "Support packed fp32 instructions",
13661366 .dependencies = featureSet(&[_]Feature{}),
13671367 };
1368 result[@intFromEnum(Feature.packed_tid)] = .{
1368 result[@backingInt(Feature.packed_tid)] = .{
13691369 .llvm_name = "packed-tid",
13701370 .description = "Workitem IDs are packed into v0 at kernel launch",
13711371 .dependencies = featureSet(&[_]Feature{}),
13721372 };
1373 result[@intFromEnum(Feature.partial_nsa_encoding)] = .{
1373 result[@backingInt(Feature.partial_nsa_encoding)] = .{
13741374 .llvm_name = "partial-nsa-encoding",
13751375 .description = "Support partial NSA encoding for image instructions",
13761376 .dependencies = featureSet(&[_]Feature{}),
13771377 };
1378 result[@intFromEnum(Feature.permlane16_swap)] = .{
1378 result[@backingInt(Feature.permlane16_swap)] = .{
13791379 .llvm_name = "permlane16-swap",
13801380 .description = "Has v_permlane16_swap_b32 instructions",
13811381 .dependencies = featureSet(&[_]Feature{}),
13821382 };
1383 result[@intFromEnum(Feature.permlane32_swap)] = .{
1383 result[@backingInt(Feature.permlane32_swap)] = .{
13841384 .llvm_name = "permlane32-swap",
13851385 .description = "Has v_permlane32_swap_b32 instructions",
13861386 .dependencies = featureSet(&[_]Feature{}),
13871387 };
1388 result[@intFromEnum(Feature.pk_add_min_max_insts)] = .{
1388 result[@backingInt(Feature.pk_add_min_max_insts)] = .{
13891389 .llvm_name = "pk-add-min-max-insts",
13901390 .description = "Has v_pk_add_{min|max}_{i|u}16 instructions",
13911391 .dependencies = featureSet(&[_]Feature{}),
13921392 };
1393 result[@intFromEnum(Feature.pk_fmac_f16_inst)] = .{
1393 result[@backingInt(Feature.pk_fmac_f16_inst)] = .{
13941394 .llvm_name = "pk-fmac-f16-inst",
13951395 .description = "Has v_pk_fmac_f16 instruction",
13961396 .dependencies = featureSet(&[_]Feature{}),
13971397 };
1398 result[@intFromEnum(Feature.point_sample_accel)] = .{
1398 result[@backingInt(Feature.point_sample_accel)] = .{
13991399 .llvm_name = "point-sample-accel",
14001400 .description = "Has point sample acceleration feature",
14011401 .dependencies = featureSet(&[_]Feature{}),
14021402 };
1403 result[@intFromEnum(Feature.precise_memory)] = .{
1403 result[@backingInt(Feature.precise_memory)] = .{
14041404 .llvm_name = "precise-memory",
14051405 .description = "Enable precise memory mode",
14061406 .dependencies = featureSet(&[_]Feature{}),
14071407 };
1408 result[@intFromEnum(Feature.priv_enabled_trap2_nop_bug)] = .{
1408 result[@backingInt(Feature.priv_enabled_trap2_nop_bug)] = .{
14091409 .llvm_name = "priv-enabled-trap2-nop-bug",
14101410 .description = "Hardware that runs with PRIV=1 interpreting 's_trap 2' as a nop bug",
14111411 .dependencies = featureSet(&[_]Feature{}),
14121412 };
1413 result[@intFromEnum(Feature.prng_inst)] = .{
1413 result[@backingInt(Feature.prng_inst)] = .{
14141414 .llvm_name = "prng-inst",
14151415 .description = "Has v_prng_b32 instruction",
14161416 .dependencies = featureSet(&[_]Feature{}),
14171417 };
1418 result[@intFromEnum(Feature.promote_alloca)] = .{
1418 result[@backingInt(Feature.promote_alloca)] = .{
14191419 .llvm_name = "promote-alloca",
14201420 .description = "Enable promote alloca pass",
14211421 .dependencies = featureSet(&[_]Feature{}),
14221422 };
1423 result[@intFromEnum(Feature.prt_strict_null)] = .{
1423 result[@backingInt(Feature.prt_strict_null)] = .{
14241424 .llvm_name = "enable-prt-strict-null",
14251425 .description = "Enable zeroing of result registers for sparse texture fetches",
14261426 .dependencies = featureSet(&[_]Feature{}),
14271427 };
1428 result[@intFromEnum(Feature.pseudo_scalar_trans)] = .{
1428 result[@backingInt(Feature.pseudo_scalar_trans)] = .{
14291429 .llvm_name = "pseudo-scalar-trans",
14301430 .description = "Has Pseudo Scalar Transcendental instructions",
14311431 .dependencies = featureSet(&[_]Feature{}),
14321432 };
1433 result[@intFromEnum(Feature.qsad_insts)] = .{
1433 result[@backingInt(Feature.qsad_insts)] = .{
14341434 .llvm_name = "qsad-insts",
14351435 .description = "Has v_qsad* instructions",
14361436 .dependencies = featureSet(&[_]Feature{}),
14371437 };
1438 result[@intFromEnum(Feature.r128_a16)] = .{
1438 result[@backingInt(Feature.r128_a16)] = .{
14391439 .llvm_name = "r128-a16",
14401440 .description = "Support gfx9-style A16 for 16-bit coordinates/gradients/lod/clamp/mip image operands, where a16 is aliased with r128",
14411441 .dependencies = featureSet(&[_]Feature{}),
14421442 };
1443 result[@intFromEnum(Feature.real_true16)] = .{
1443 result[@backingInt(Feature.real_true16)] = .{
14441444 .llvm_name = "real-true16",
14451445 .description = "Use true 16-bit registers",
14461446 .dependencies = featureSet(&[_]Feature{}),
14471447 };
1448 result[@intFromEnum(Feature.relaxed_buffer_oob_mode)] = .{
1448 result[@backingInt(Feature.relaxed_buffer_oob_mode)] = .{
14491449 .llvm_name = "relaxed-buffer-oob-mode",
14501450 .description = "Disable strict out-of-bounds buffer guarantees. An OOB access may potentially cause an adjacent access to be treated as if it were also OOB",
14511451 .dependencies = featureSet(&[_]Feature{}),
14521452 };
1453 result[@intFromEnum(Feature.required_export_priority)] = .{
1453 result[@backingInt(Feature.required_export_priority)] = .{
14541454 .llvm_name = "required-export-priority",
14551455 .description = "Export priority must be explicitly manipulated on GFX11.5",
14561456 .dependencies = featureSet(&[_]Feature{}),
14571457 };
1458 result[@intFromEnum(Feature.requires_cov6)] = .{
1458 result[@backingInt(Feature.requires_cov6)] = .{
14591459 .llvm_name = "requires-cov6",
14601460 .description = "Target Requires Code Object V6",
14611461 .dependencies = featureSet(&[_]Feature{}),
14621462 };
1463 result[@intFromEnum(Feature.restricted_soffset)] = .{
1463 result[@backingInt(Feature.restricted_soffset)] = .{
14641464 .llvm_name = "restricted-soffset",
14651465 .description = "Has restricted SOffset (immediate not supported).",
14661466 .dependencies = featureSet(&[_]Feature{}),
14671467 };
1468 result[@intFromEnum(Feature.s_memrealtime)] = .{
1468 result[@backingInt(Feature.s_memrealtime)] = .{
14691469 .llvm_name = "s-memrealtime",
14701470 .description = "Has s_memrealtime instruction",
14711471 .dependencies = featureSet(&[_]Feature{}),
14721472 };
1473 result[@intFromEnum(Feature.s_memtime_inst)] = .{
1473 result[@backingInt(Feature.s_memtime_inst)] = .{
14741474 .llvm_name = "s-memtime-inst",
14751475 .description = "Has s_memtime instruction",
14761476 .dependencies = featureSet(&[_]Feature{}),
14771477 };
1478 result[@intFromEnum(Feature.s_wakeup_barrier_inst)] = .{
1478 result[@backingInt(Feature.s_wakeup_barrier_inst)] = .{
14791479 .llvm_name = "s-wakeup-barrier-inst",
14801480 .description = "Has s_wakeup_barrier instruction.",
14811481 .dependencies = featureSet(&[_]Feature{}),
14821482 };
1483 result[@intFromEnum(Feature.sad_insts)] = .{
1483 result[@backingInt(Feature.sad_insts)] = .{
14841484 .llvm_name = "sad-insts",
14851485 .description = "Has v_sad* instructions",
14861486 .dependencies = featureSet(&[_]Feature{}),
14871487 };
1488 result[@intFromEnum(Feature.safe_cu_prefetch)] = .{
1488 result[@backingInt(Feature.safe_cu_prefetch)] = .{
14891489 .llvm_name = "safe-cu-prefetch",
14901490 .description = "VMEM CU scope prefetches do not fail on illegal address",
14911491 .dependencies = featureSet(&[_]Feature{}),
14921492 };
1493 result[@intFromEnum(Feature.safe_smem_prefetch)] = .{
1493 result[@backingInt(Feature.safe_smem_prefetch)] = .{
14941494 .llvm_name = "safe-smem-prefetch",
14951495 .description = "SMEM prefetches do not fail on illegal address",
14961496 .dependencies = featureSet(&[_]Feature{}),
14971497 };
1498 result[@intFromEnum(Feature.salu_float)] = .{
1498 result[@backingInt(Feature.salu_float)] = .{
14991499 .llvm_name = "salu-float",
15001500 .description = "Has SALU floating point instructions",
15011501 .dependencies = featureSet(&[_]Feature{}),
15021502 };
1503 result[@intFromEnum(Feature.scalar_atomics)] = .{
1503 result[@backingInt(Feature.scalar_atomics)] = .{
15041504 .llvm_name = "scalar-atomics",
15051505 .description = "Has atomic scalar memory instructions",
15061506 .dependencies = featureSet(&[_]Feature{}),
15071507 };
1508 result[@intFromEnum(Feature.scalar_dwordx3_loads)] = .{
1508 result[@backingInt(Feature.scalar_dwordx3_loads)] = .{
15091509 .llvm_name = "scalar-dwordx3-loads",
15101510 .description = "Has 96-bit scalar load instructions",
15111511 .dependencies = featureSet(&[_]Feature{}),
15121512 };
1513 result[@intFromEnum(Feature.scalar_flat_scratch_insts)] = .{
1513 result[@backingInt(Feature.scalar_flat_scratch_insts)] = .{
15141514 .llvm_name = "scalar-flat-scratch-insts",
15151515 .description = "Have s_scratch_* flat memory instructions",
15161516 .dependencies = featureSet(&[_]Feature{}),
15171517 };
1518 result[@intFromEnum(Feature.scalar_stores)] = .{
1518 result[@backingInt(Feature.scalar_stores)] = .{
15191519 .llvm_name = "scalar-stores",
15201520 .description = "Has store scalar memory instructions",
15211521 .dependencies = featureSet(&[_]Feature{}),
15221522 };
1523 result[@intFromEnum(Feature.sdwa)] = .{
1523 result[@backingInt(Feature.sdwa)] = .{
15241524 .llvm_name = "sdwa",
15251525 .description = "Support SDWA (Sub-DWORD Addressing) extension",
15261526 .dependencies = featureSet(&[_]Feature{}),
15271527 };
1528 result[@intFromEnum(Feature.sdwa_mav)] = .{
1528 result[@backingInt(Feature.sdwa_mav)] = .{
15291529 .llvm_name = "sdwa-mav",
15301530 .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension",
15311531 .dependencies = featureSet(&[_]Feature{}),
15321532 };
1533 result[@intFromEnum(Feature.sdwa_omod)] = .{
1533 result[@backingInt(Feature.sdwa_omod)] = .{
15341534 .llvm_name = "sdwa-omod",
15351535 .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension",
15361536 .dependencies = featureSet(&[_]Feature{}),
15371537 };
1538 result[@intFromEnum(Feature.sdwa_out_mods_vopc)] = .{
1538 result[@backingInt(Feature.sdwa_out_mods_vopc)] = .{
15391539 .llvm_name = "sdwa-out-mods-vopc",
15401540 .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension",
15411541 .dependencies = featureSet(&[_]Feature{}),
15421542 };
1543 result[@intFromEnum(Feature.sdwa_scalar)] = .{
1543 result[@backingInt(Feature.sdwa_scalar)] = .{
15441544 .llvm_name = "sdwa-scalar",
15451545 .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension",
15461546 .dependencies = featureSet(&[_]Feature{}),
15471547 };
1548 result[@intFromEnum(Feature.sdwa_sdst)] = .{
1548 result[@backingInt(Feature.sdwa_sdst)] = .{
15491549 .llvm_name = "sdwa-sdst",
15501550 .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension",
15511551 .dependencies = featureSet(&[_]Feature{}),
15521552 };
1553 result[@intFromEnum(Feature.sea_islands)] = .{
1553 result[@backingInt(Feature.sea_islands)] = .{
15541554 .llvm_name = "sea-islands",
15551555 .description = "SEA_ISLANDS GPU generation",
15561556 .dependencies = featureSet(&[_]Feature{
......@@ -1583,42 +1583,42 @@ pub const all_features = blk: {
15831583 .wavefrontsize64,
15841584 }),
15851585 };
1586 result[@intFromEnum(Feature.setprio_inc_wg_inst)] = .{
1586 result[@backingInt(Feature.setprio_inc_wg_inst)] = .{
15871587 .llvm_name = "setprio-inc-wg-inst",
15881588 .description = "Has s_setprio_inc_wg instruction.",
15891589 .dependencies = featureSet(&[_]Feature{}),
15901590 };
1591 result[@intFromEnum(Feature.setreg_vgpr_msb_fixup)] = .{
1591 result[@backingInt(Feature.setreg_vgpr_msb_fixup)] = .{
15921592 .llvm_name = "setreg-vgpr-msb-fixup",
15931593 .description = "S_SETREG to MODE clobbers VGPR MSB bits, requires fixup",
15941594 .dependencies = featureSet(&[_]Feature{}),
15951595 };
1596 result[@intFromEnum(Feature.sgpr_init_bug)] = .{
1596 result[@backingInt(Feature.sgpr_init_bug)] = .{
15971597 .llvm_name = "sgpr-init-bug",
15981598 .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size",
15991599 .dependencies = featureSet(&[_]Feature{}),
16001600 };
1601 result[@intFromEnum(Feature.shader_cycles_hi_lo_registers)] = .{
1601 result[@backingInt(Feature.shader_cycles_hi_lo_registers)] = .{
16021602 .llvm_name = "shader-cycles-hi-lo-registers",
16031603 .description = "Has SHADER_CYCLES_HI/LO hardware registers",
16041604 .dependencies = featureSet(&[_]Feature{}),
16051605 };
1606 result[@intFromEnum(Feature.shader_cycles_register)] = .{
1606 result[@backingInt(Feature.shader_cycles_register)] = .{
16071607 .llvm_name = "shader-cycles-register",
16081608 .description = "Has SHADER_CYCLES hardware register",
16091609 .dependencies = featureSet(&[_]Feature{}),
16101610 };
1611 result[@intFromEnum(Feature.si_scheduler)] = .{
1611 result[@backingInt(Feature.si_scheduler)] = .{
16121612 .llvm_name = "si-scheduler",
16131613 .description = "Enable SI Machine Scheduler",
16141614 .dependencies = featureSet(&[_]Feature{}),
16151615 };
1616 result[@intFromEnum(Feature.smem_to_vector_write_hazard)] = .{
1616 result[@backingInt(Feature.smem_to_vector_write_hazard)] = .{
16171617 .llvm_name = "smem-to-vector-write-hazard",
16181618 .description = "s_load_dword followed by v_cmp page faults",
16191619 .dependencies = featureSet(&[_]Feature{}),
16201620 };
1621 result[@intFromEnum(Feature.southern_islands)] = .{
1621 result[@backingInt(Feature.southern_islands)] = .{
16221622 .llvm_name = "southern-islands",
16231623 .description = "SOUTHERN_ISLANDS GPU generation",
16241624 .dependencies = featureSet(&[_]Feature{
......@@ -1646,132 +1646,132 @@ pub const all_features = blk: {
16461646 .wavefrontsize64,
16471647 }),
16481648 };
1649 result[@intFromEnum(Feature.sramecc)] = .{
1649 result[@backingInt(Feature.sramecc)] = .{
16501650 .llvm_name = "sramecc",
16511651 .description = "Enable SRAMECC",
16521652 .dependencies = featureSet(&[_]Feature{}),
16531653 };
1654 result[@intFromEnum(Feature.sramecc_support)] = .{
1654 result[@backingInt(Feature.sramecc_support)] = .{
16551655 .llvm_name = "sramecc-support",
16561656 .description = "Hardware supports SRAMECC",
16571657 .dependencies = featureSet(&[_]Feature{}),
16581658 };
1659 result[@intFromEnum(Feature.tanh_insts)] = .{
1659 result[@backingInt(Feature.tanh_insts)] = .{
16601660 .llvm_name = "tanh-insts",
16611661 .description = "Has v_tanh_f32/f16 instructions",
16621662 .dependencies = featureSet(&[_]Feature{}),
16631663 };
1664 result[@intFromEnum(Feature.tensor_cvt_lut_insts)] = .{
1664 result[@backingInt(Feature.tensor_cvt_lut_insts)] = .{
16651665 .llvm_name = "tensor-cvt-lut-insts",
16661666 .description = "Has v_perm_pk16* instructions",
16671667 .dependencies = featureSet(&[_]Feature{}),
16681668 };
1669 result[@intFromEnum(Feature.tgsplit)] = .{
1669 result[@backingInt(Feature.tgsplit)] = .{
16701670 .llvm_name = "tgsplit",
16711671 .description = "Enable threadgroup split execution",
16721672 .dependencies = featureSet(&[_]Feature{}),
16731673 };
1674 result[@intFromEnum(Feature.transpose_load_f4f6_insts)] = .{
1674 result[@backingInt(Feature.transpose_load_f4f6_insts)] = .{
16751675 .llvm_name = "transpose-load-f4f6-insts",
16761676 .description = "Has ds_load_tr4/tr6 and global_load_tr4/tr6 instructions",
16771677 .dependencies = featureSet(&[_]Feature{}),
16781678 };
1679 result[@intFromEnum(Feature.trap_handler)] = .{
1679 result[@backingInt(Feature.trap_handler)] = .{
16801680 .llvm_name = "trap-handler",
16811681 .description = "Trap handler support",
16821682 .dependencies = featureSet(&[_]Feature{}),
16831683 };
1684 result[@intFromEnum(Feature.trig_reduced_range)] = .{
1684 result[@backingInt(Feature.trig_reduced_range)] = .{
16851685 .llvm_name = "trig-reduced-range",
16861686 .description = "Requires use of fract on arguments to trig instructions",
16871687 .dependencies = featureSet(&[_]Feature{}),
16881688 };
1689 result[@intFromEnum(Feature.true16)] = .{
1689 result[@backingInt(Feature.true16)] = .{
16901690 .llvm_name = "true16",
16911691 .description = "True 16-bit operand instructions",
16921692 .dependencies = featureSet(&[_]Feature{}),
16931693 };
1694 result[@intFromEnum(Feature.unaligned_access_mode)] = .{
1694 result[@backingInt(Feature.unaligned_access_mode)] = .{
16951695 .llvm_name = "unaligned-access-mode",
16961696 .description = "Enable unaligned global, local and region loads and stores if the hardware supports it",
16971697 .dependencies = featureSet(&[_]Feature{}),
16981698 };
1699 result[@intFromEnum(Feature.unaligned_buffer_access)] = .{
1699 result[@backingInt(Feature.unaligned_buffer_access)] = .{
17001700 .llvm_name = "unaligned-buffer-access",
17011701 .description = "Hardware supports unaligned global loads and stores",
17021702 .dependencies = featureSet(&[_]Feature{}),
17031703 };
1704 result[@intFromEnum(Feature.unaligned_ds_access)] = .{
1704 result[@backingInt(Feature.unaligned_ds_access)] = .{
17051705 .llvm_name = "unaligned-ds-access",
17061706 .description = "Hardware supports unaligned local and region loads and stores",
17071707 .dependencies = featureSet(&[_]Feature{}),
17081708 };
1709 result[@intFromEnum(Feature.unaligned_scratch_access)] = .{
1709 result[@backingInt(Feature.unaligned_scratch_access)] = .{
17101710 .llvm_name = "unaligned-scratch-access",
17111711 .description = "Support unaligned scratch loads and stores",
17121712 .dependencies = featureSet(&[_]Feature{}),
17131713 };
1714 result[@intFromEnum(Feature.unpacked_d16_vmem)] = .{
1714 result[@backingInt(Feature.unpacked_d16_vmem)] = .{
17151715 .llvm_name = "unpacked-d16-vmem",
17161716 .description = "Has unpacked d16 vmem instructions",
17171717 .dependencies = featureSet(&[_]Feature{}),
17181718 };
1719 result[@intFromEnum(Feature.unsafe_ds_offset_folding)] = .{
1719 result[@backingInt(Feature.unsafe_ds_offset_folding)] = .{
17201720 .llvm_name = "unsafe-ds-offset-folding",
17211721 .description = "Force using DS instruction immediate offsets on SI",
17221722 .dependencies = featureSet(&[_]Feature{}),
17231723 };
1724 result[@intFromEnum(Feature.user_sgpr_init16_bug)] = .{
1724 result[@backingInt(Feature.user_sgpr_init16_bug)] = .{
17251725 .llvm_name = "user-sgpr-init16-bug",
17261726 .description = "Bug requiring at least 16 user+system SGPRs to be enabled",
17271727 .dependencies = featureSet(&[_]Feature{}),
17281728 };
1729 result[@intFromEnum(Feature.valu_trans_use_hazard)] = .{
1729 result[@backingInt(Feature.valu_trans_use_hazard)] = .{
17301730 .llvm_name = "valu-trans-use-hazard",
17311731 .description = "Hazard when TRANS instructions are closely followed by a use of the result",
17321732 .dependencies = featureSet(&[_]Feature{}),
17331733 };
1734 result[@intFromEnum(Feature.vcmpx_exec_war_hazard)] = .{
1734 result[@backingInt(Feature.vcmpx_exec_war_hazard)] = .{
17351735 .llvm_name = "vcmpx-exec-war-hazard",
17361736 .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)",
17371737 .dependencies = featureSet(&[_]Feature{}),
17381738 };
1739 result[@intFromEnum(Feature.vcmpx_permlane_hazard)] = .{
1739 result[@backingInt(Feature.vcmpx_permlane_hazard)] = .{
17401740 .llvm_name = "vcmpx-permlane-hazard",
17411741 .description = "TODO: describe me",
17421742 .dependencies = featureSet(&[_]Feature{}),
17431743 };
1744 result[@intFromEnum(Feature.vgpr_align2)] = .{
1744 result[@backingInt(Feature.vgpr_align2)] = .{
17451745 .llvm_name = "vgpr-align2",
17461746 .description = "VGPR and AGPR tuple operands require even alignment",
17471747 .dependencies = featureSet(&[_]Feature{}),
17481748 };
1749 result[@intFromEnum(Feature.vgpr_index_mode)] = .{
1749 result[@backingInt(Feature.vgpr_index_mode)] = .{
17501750 .llvm_name = "vgpr-index-mode",
17511751 .description = "Has VGPR mode register indexing",
17521752 .dependencies = featureSet(&[_]Feature{}),
17531753 };
1754 result[@intFromEnum(Feature.vmem_pref_insts)] = .{
1754 result[@backingInt(Feature.vmem_pref_insts)] = .{
17551755 .llvm_name = "vmem-pref-insts",
17561756 .description = "Has flat_prefect_b8 and global_prefetch_b8 instructions",
17571757 .dependencies = featureSet(&[_]Feature{}),
17581758 };
1759 result[@intFromEnum(Feature.vmem_to_lds_load_insts)] = .{
1759 result[@backingInt(Feature.vmem_to_lds_load_insts)] = .{
17601760 .llvm_name = "vmem-to-lds-load-insts",
17611761 .description = "The platform has memory to lds instructions (global_load w/lds bit set, buffer_load w/lds bit set or global_load_lds. This does not include scratch_load_lds.",
17621762 .dependencies = featureSet(&[_]Feature{}),
17631763 };
1764 result[@intFromEnum(Feature.vmem_to_scalar_write_hazard)] = .{
1764 result[@backingInt(Feature.vmem_to_scalar_write_hazard)] = .{
17651765 .llvm_name = "vmem-to-scalar-write-hazard",
17661766 .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.",
17671767 .dependencies = featureSet(&[_]Feature{}),
17681768 };
1769 result[@intFromEnum(Feature.vmem_write_vgpr_in_order)] = .{
1769 result[@backingInt(Feature.vmem_write_vgpr_in_order)] = .{
17701770 .llvm_name = "vmem-write-vgpr-in-order",
17711771 .description = "VMEM instructions of the same type write VGPR results in order",
17721772 .dependencies = featureSet(&[_]Feature{}),
17731773 };
1774 result[@intFromEnum(Feature.volcanic_islands)] = .{
1774 result[@backingInt(Feature.volcanic_islands)] = .{
17751775 .llvm_name = "volcanic-islands",
17761776 .description = "VOLCANIC_ISLANDS GPU generation",
17771777 .dependencies = featureSet(&[_]Feature{
......@@ -1814,62 +1814,62 @@ pub const all_features = blk: {
18141814 .wavefrontsize64,
18151815 }),
18161816 };
1817 result[@intFromEnum(Feature.vop3_literal)] = .{
1817 result[@backingInt(Feature.vop3_literal)] = .{
18181818 .llvm_name = "vop3-literal",
18191819 .description = "Can use one literal in VOP3",
18201820 .dependencies = featureSet(&[_]Feature{}),
18211821 };
1822 result[@intFromEnum(Feature.vop3p)] = .{
1822 result[@backingInt(Feature.vop3p)] = .{
18231823 .llvm_name = "vop3p",
18241824 .description = "Has VOP3P packed instructions",
18251825 .dependencies = featureSet(&[_]Feature{}),
18261826 };
1827 result[@intFromEnum(Feature.vopd)] = .{
1827 result[@backingInt(Feature.vopd)] = .{
18281828 .llvm_name = "vopd",
18291829 .description = "Has VOPD dual issue wave32 instructions",
18301830 .dependencies = featureSet(&[_]Feature{}),
18311831 };
1832 result[@intFromEnum(Feature.vscnt)] = .{
1832 result[@backingInt(Feature.vscnt)] = .{
18331833 .llvm_name = "vscnt",
18341834 .description = "Has separate store vscnt counter",
18351835 .dependencies = featureSet(&[_]Feature{}),
18361836 };
1837 result[@intFromEnum(Feature.wait_xcnt)] = .{
1837 result[@backingInt(Feature.wait_xcnt)] = .{
18381838 .llvm_name = "wait-xcnt",
18391839 .description = "Has s_wait_xcnt instruction",
18401840 .dependencies = featureSet(&[_]Feature{}),
18411841 };
1842 result[@intFromEnum(Feature.waits_before_system_scope_stores)] = .{
1842 result[@backingInt(Feature.waits_before_system_scope_stores)] = .{
18431843 .llvm_name = "waits-before-system-scope-stores",
18441844 .description = "Target requires waits for loads and atomics before system scope stores",
18451845 .dependencies = featureSet(&[_]Feature{}),
18461846 };
1847 result[@intFromEnum(Feature.wavefrontsize16)] = .{
1847 result[@backingInt(Feature.wavefrontsize16)] = .{
18481848 .llvm_name = "wavefrontsize16",
18491849 .description = "The number of threads per wavefront",
18501850 .dependencies = featureSet(&[_]Feature{}),
18511851 };
1852 result[@intFromEnum(Feature.wavefrontsize32)] = .{
1852 result[@backingInt(Feature.wavefrontsize32)] = .{
18531853 .llvm_name = "wavefrontsize32",
18541854 .description = "The number of threads per wavefront",
18551855 .dependencies = featureSet(&[_]Feature{}),
18561856 };
1857 result[@intFromEnum(Feature.wavefrontsize64)] = .{
1857 result[@backingInt(Feature.wavefrontsize64)] = .{
18581858 .llvm_name = "wavefrontsize64",
18591859 .description = "The number of threads per wavefront",
18601860 .dependencies = featureSet(&[_]Feature{}),
18611861 };
1862 result[@intFromEnum(Feature.xf32_insts)] = .{
1862 result[@backingInt(Feature.xf32_insts)] = .{
18631863 .llvm_name = "xf32-insts",
18641864 .description = "Has instructions that support xf32 format, such as v_mfma_f32_16x16x8_xf32 and v_mfma_f32_32x32x4_xf32",
18651865 .dependencies = featureSet(&[_]Feature{}),
18661866 };
1867 result[@intFromEnum(Feature.xnack)] = .{
1867 result[@backingInt(Feature.xnack)] = .{
18681868 .llvm_name = "xnack",
18691869 .description = "Enable XNACK support",
18701870 .dependencies = featureSet(&[_]Feature{}),
18711871 };
1872 result[@intFromEnum(Feature.xnack_support)] = .{
1872 result[@backingInt(Feature.xnack_support)] = .{
18731873 .llvm_name = "xnack-support",
18741874 .description = "Hardware supports XNACK",
18751875 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/arc.zig+1-1
......@@ -17,7 +17,7 @@ pub const all_features = blk: {
1717 const len = @typeInfo(Feature).@"enum".field_names.len;
1818 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
1919 var result: [len]CpuFeature = undefined;
20 result[@intFromEnum(Feature.norm)] = .{
20 result[@backingInt(Feature.norm)] = .{
2121 .llvm_name = "norm",
2222 .description = "Enable support for norm instruction.",
2323 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/arm.zig+201-201
......@@ -218,159 +218,159 @@ pub const all_features = blk: {
218218 const len = @typeInfo(Feature).@"enum".field_names.len;
219219 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
220220 var result: [len]CpuFeature = undefined;
221 result[@intFromEnum(Feature.@"32bit")] = .{
221 result[@backingInt(Feature.@"32bit")] = .{
222222 .llvm_name = "32bit",
223223 .description = "Prefer 32-bit Thumb instrs",
224224 .dependencies = featureSet(&[_]Feature{}),
225225 };
226 result[@intFromEnum(Feature.@"8msecext")] = .{
226 result[@backingInt(Feature.@"8msecext")] = .{
227227 .llvm_name = "8msecext",
228228 .description = "Enable support for ARMv8-M Security Extensions",
229229 .dependencies = featureSet(&[_]Feature{}),
230230 };
231 result[@intFromEnum(Feature.aapcs_frame_chain)] = .{
231 result[@backingInt(Feature.aapcs_frame_chain)] = .{
232232 .llvm_name = "aapcs-frame-chain",
233233 .description = "Create an AAPCS compliant frame chain",
234234 .dependencies = featureSet(&[_]Feature{}),
235235 };
236 result[@intFromEnum(Feature.aclass)] = .{
236 result[@backingInt(Feature.aclass)] = .{
237237 .llvm_name = "aclass",
238238 .description = "Is application profile ('A' series)",
239239 .dependencies = featureSet(&[_]Feature{}),
240240 };
241 result[@intFromEnum(Feature.acquire_release)] = .{
241 result[@backingInt(Feature.acquire_release)] = .{
242242 .llvm_name = "acquire-release",
243243 .description = "Has v8 acquire/release (lda/ldaex etc) instructions",
244244 .dependencies = featureSet(&[_]Feature{}),
245245 };
246 result[@intFromEnum(Feature.aes)] = .{
246 result[@backingInt(Feature.aes)] = .{
247247 .llvm_name = "aes",
248248 .description = "Enable AES support",
249249 .dependencies = featureSet(&[_]Feature{
250250 .neon,
251251 }),
252252 };
253 result[@intFromEnum(Feature.atomics_32)] = .{
253 result[@backingInt(Feature.atomics_32)] = .{
254254 .llvm_name = "atomics-32",
255255 .description = "Assume that lock-free 32-bit atomics are available",
256256 .dependencies = featureSet(&[_]Feature{}),
257257 };
258 result[@intFromEnum(Feature.avoid_movs_shop)] = .{
258 result[@backingInt(Feature.avoid_movs_shop)] = .{
259259 .llvm_name = "avoid-movs-shop",
260260 .description = "Avoid movs instructions with shifter operand",
261261 .dependencies = featureSet(&[_]Feature{}),
262262 };
263 result[@intFromEnum(Feature.avoid_muls)] = .{
263 result[@backingInt(Feature.avoid_muls)] = .{
264264 .llvm_name = "avoid-muls",
265265 .description = "Avoid MULS instructions for M class cores",
266266 .dependencies = featureSet(&[_]Feature{}),
267267 };
268 result[@intFromEnum(Feature.avoid_partial_cpsr)] = .{
268 result[@backingInt(Feature.avoid_partial_cpsr)] = .{
269269 .llvm_name = "avoid-partial-cpsr",
270270 .description = "Avoid CPSR partial update for OOO execution",
271271 .dependencies = featureSet(&[_]Feature{}),
272272 };
273 result[@intFromEnum(Feature.bf16)] = .{
273 result[@backingInt(Feature.bf16)] = .{
274274 .llvm_name = "bf16",
275275 .description = "Enable support for BFloat16 instructions",
276276 .dependencies = featureSet(&[_]Feature{
277277 .neon,
278278 }),
279279 };
280 result[@intFromEnum(Feature.big_endian_instructions)] = .{
280 result[@backingInt(Feature.big_endian_instructions)] = .{
281281 .llvm_name = "big-endian-instructions",
282282 .description = "Expect instructions to be stored big-endian.",
283283 .dependencies = featureSet(&[_]Feature{}),
284284 };
285 result[@intFromEnum(Feature.branch_align_64)] = .{
285 result[@backingInt(Feature.branch_align_64)] = .{
286286 .llvm_name = "branch-align-64",
287287 .description = "Prefer 64-bit alignment for branch targets",
288288 .dependencies = featureSet(&[_]Feature{}),
289289 };
290 result[@intFromEnum(Feature.cde)] = .{
290 result[@backingInt(Feature.cde)] = .{
291291 .llvm_name = "cde",
292292 .description = "Support CDE instructions",
293293 .dependencies = featureSet(&[_]Feature{
294294 .has_v8m_main,
295295 }),
296296 };
297 result[@intFromEnum(Feature.cdecp0)] = .{
297 result[@backingInt(Feature.cdecp0)] = .{
298298 .llvm_name = "cdecp0",
299299 .description = "Coprocessor 0 ISA is CDEv1",
300300 .dependencies = featureSet(&[_]Feature{
301301 .cde,
302302 }),
303303 };
304 result[@intFromEnum(Feature.cdecp1)] = .{
304 result[@backingInt(Feature.cdecp1)] = .{
305305 .llvm_name = "cdecp1",
306306 .description = "Coprocessor 1 ISA is CDEv1",
307307 .dependencies = featureSet(&[_]Feature{
308308 .cde,
309309 }),
310310 };
311 result[@intFromEnum(Feature.cdecp2)] = .{
311 result[@backingInt(Feature.cdecp2)] = .{
312312 .llvm_name = "cdecp2",
313313 .description = "Coprocessor 2 ISA is CDEv1",
314314 .dependencies = featureSet(&[_]Feature{
315315 .cde,
316316 }),
317317 };
318 result[@intFromEnum(Feature.cdecp3)] = .{
318 result[@backingInt(Feature.cdecp3)] = .{
319319 .llvm_name = "cdecp3",
320320 .description = "Coprocessor 3 ISA is CDEv1",
321321 .dependencies = featureSet(&[_]Feature{
322322 .cde,
323323 }),
324324 };
325 result[@intFromEnum(Feature.cdecp4)] = .{
325 result[@backingInt(Feature.cdecp4)] = .{
326326 .llvm_name = "cdecp4",
327327 .description = "Coprocessor 4 ISA is CDEv1",
328328 .dependencies = featureSet(&[_]Feature{
329329 .cde,
330330 }),
331331 };
332 result[@intFromEnum(Feature.cdecp5)] = .{
332 result[@backingInt(Feature.cdecp5)] = .{
333333 .llvm_name = "cdecp5",
334334 .description = "Coprocessor 5 ISA is CDEv1",
335335 .dependencies = featureSet(&[_]Feature{
336336 .cde,
337337 }),
338338 };
339 result[@intFromEnum(Feature.cdecp6)] = .{
339 result[@backingInt(Feature.cdecp6)] = .{
340340 .llvm_name = "cdecp6",
341341 .description = "Coprocessor 6 ISA is CDEv1",
342342 .dependencies = featureSet(&[_]Feature{
343343 .cde,
344344 }),
345345 };
346 result[@intFromEnum(Feature.cdecp7)] = .{
346 result[@backingInt(Feature.cdecp7)] = .{
347347 .llvm_name = "cdecp7",
348348 .description = "Coprocessor 7 ISA is CDEv1",
349349 .dependencies = featureSet(&[_]Feature{
350350 .cde,
351351 }),
352352 };
353 result[@intFromEnum(Feature.cheap_predicable_cpsr)] = .{
353 result[@backingInt(Feature.cheap_predicable_cpsr)] = .{
354354 .llvm_name = "cheap-predicable-cpsr",
355355 .description = "Disable +1 predication cost for instructions updating CPSR",
356356 .dependencies = featureSet(&[_]Feature{}),
357357 };
358 result[@intFromEnum(Feature.clrbhb)] = .{
358 result[@backingInt(Feature.clrbhb)] = .{
359359 .llvm_name = "clrbhb",
360360 .description = "Enable Clear BHB instruction",
361361 .dependencies = featureSet(&[_]Feature{}),
362362 };
363 result[@intFromEnum(Feature.cortex_a510)] = .{
363 result[@backingInt(Feature.cortex_a510)] = .{
364364 .llvm_name = "cortex-a510",
365365 .description = "Cortex-A510 ARM processors",
366366 .dependencies = featureSet(&[_]Feature{}),
367367 };
368 result[@intFromEnum(Feature.crc)] = .{
368 result[@backingInt(Feature.crc)] = .{
369369 .llvm_name = "crc",
370370 .description = "Enable support for CRC instructions",
371371 .dependencies = featureSet(&[_]Feature{}),
372372 };
373 result[@intFromEnum(Feature.crypto)] = .{
373 result[@backingInt(Feature.crypto)] = .{
374374 .llvm_name = "crypto",
375375 .description = "Enable support for Cryptography extensions",
376376 .dependencies = featureSet(&[_]Feature{
......@@ -378,83 +378,83 @@ pub const all_features = blk: {
378378 .sha2,
379379 }),
380380 };
381 result[@intFromEnum(Feature.d32)] = .{
381 result[@backingInt(Feature.d32)] = .{
382382 .llvm_name = "d32",
383383 .description = "Extend FP to 32 double registers",
384384 .dependencies = featureSet(&[_]Feature{}),
385385 };
386 result[@intFromEnum(Feature.db)] = .{
386 result[@backingInt(Feature.db)] = .{
387387 .llvm_name = "db",
388388 .description = "Has data barrier (dmb/dsb) instructions",
389389 .dependencies = featureSet(&[_]Feature{}),
390390 };
391 result[@intFromEnum(Feature.dfb)] = .{
391 result[@backingInt(Feature.dfb)] = .{
392392 .llvm_name = "dfb",
393393 .description = "Has full data barrier (dfb) instruction",
394394 .dependencies = featureSet(&[_]Feature{}),
395395 };
396 result[@intFromEnum(Feature.disable_postra_scheduler)] = .{
396 result[@backingInt(Feature.disable_postra_scheduler)] = .{
397397 .llvm_name = "disable-postra-scheduler",
398398 .description = "Don't schedule again after register allocation",
399399 .dependencies = featureSet(&[_]Feature{}),
400400 };
401 result[@intFromEnum(Feature.dont_widen_vmovs)] = .{
401 result[@backingInt(Feature.dont_widen_vmovs)] = .{
402402 .llvm_name = "dont-widen-vmovs",
403403 .description = "Don't widen VMOVS to VMOVD",
404404 .dependencies = featureSet(&[_]Feature{}),
405405 };
406 result[@intFromEnum(Feature.dotprod)] = .{
406 result[@backingInt(Feature.dotprod)] = .{
407407 .llvm_name = "dotprod",
408408 .description = "Enable support for dot product instructions",
409409 .dependencies = featureSet(&[_]Feature{
410410 .neon,
411411 }),
412412 };
413 result[@intFromEnum(Feature.dsp)] = .{
413 result[@backingInt(Feature.dsp)] = .{
414414 .llvm_name = "dsp",
415415 .description = "Supports DSP instructions in ARM and/or Thumb2",
416416 .dependencies = featureSet(&[_]Feature{}),
417417 };
418 result[@intFromEnum(Feature.execute_only)] = .{
418 result[@backingInt(Feature.execute_only)] = .{
419419 .llvm_name = "execute-only",
420420 .description = "Enable the generation of execute only code.",
421421 .dependencies = featureSet(&[_]Feature{}),
422422 };
423 result[@intFromEnum(Feature.expand_fp_mlx)] = .{
423 result[@backingInt(Feature.expand_fp_mlx)] = .{
424424 .llvm_name = "expand-fp-mlx",
425425 .description = "Expand VFP/NEON MLA/MLS instructions",
426426 .dependencies = featureSet(&[_]Feature{}),
427427 };
428 result[@intFromEnum(Feature.fix_cmse_cve_2021_35465)] = .{
428 result[@backingInt(Feature.fix_cmse_cve_2021_35465)] = .{
429429 .llvm_name = "fix-cmse-cve-2021-35465",
430430 .description = "Mitigate against the cve-2021-35465 security vulnurability",
431431 .dependencies = featureSet(&[_]Feature{}),
432432 };
433 result[@intFromEnum(Feature.fix_cortex_a57_aes_1742098)] = .{
433 result[@backingInt(Feature.fix_cortex_a57_aes_1742098)] = .{
434434 .llvm_name = "fix-cortex-a57-aes-1742098",
435435 .description = "Work around Cortex-A57 Erratum 1742098 / Cortex-A72 Erratum 1655431 (AES)",
436436 .dependencies = featureSet(&[_]Feature{}),
437437 };
438 result[@intFromEnum(Feature.fp16)] = .{
438 result[@backingInt(Feature.fp16)] = .{
439439 .llvm_name = "fp16",
440440 .description = "Enable half-precision floating point",
441441 .dependencies = featureSet(&[_]Feature{}),
442442 };
443 result[@intFromEnum(Feature.fp16fml)] = .{
443 result[@backingInt(Feature.fp16fml)] = .{
444444 .llvm_name = "fp16fml",
445445 .description = "Enable full half-precision floating point fml instructions",
446446 .dependencies = featureSet(&[_]Feature{
447447 .fullfp16,
448448 }),
449449 };
450 result[@intFromEnum(Feature.fp64)] = .{
450 result[@backingInt(Feature.fp64)] = .{
451451 .llvm_name = "fp64",
452452 .description = "Floating point unit supports double precision",
453453 .dependencies = featureSet(&[_]Feature{
454454 .fpregs64,
455455 }),
456456 };
457 result[@intFromEnum(Feature.fp_armv8)] = .{
457 result[@backingInt(Feature.fp_armv8)] = .{
458458 .llvm_name = "fp-armv8",
459459 .description = "Enable ARMv8 FP",
460460 .dependencies = featureSet(&[_]Feature{
......@@ -463,7 +463,7 @@ pub const all_features = blk: {
463463 .vfp4,
464464 }),
465465 };
466 result[@intFromEnum(Feature.fp_armv8d16)] = .{
466 result[@backingInt(Feature.fp_armv8d16)] = .{
467467 .llvm_name = "fp-armv8d16",
468468 .description = "Enable ARMv8 FP with only 16 d-registers",
469469 .dependencies = featureSet(&[_]Feature{
......@@ -471,14 +471,14 @@ pub const all_features = blk: {
471471 .vfp4d16,
472472 }),
473473 };
474 result[@intFromEnum(Feature.fp_armv8d16sp)] = .{
474 result[@backingInt(Feature.fp_armv8d16sp)] = .{
475475 .llvm_name = "fp-armv8d16sp",
476476 .description = "Enable ARMv8 FP with only 16 d-registers and no double precision",
477477 .dependencies = featureSet(&[_]Feature{
478478 .vfp4d16sp,
479479 }),
480480 };
481 result[@intFromEnum(Feature.fp_armv8sp)] = .{
481 result[@backingInt(Feature.fp_armv8sp)] = .{
482482 .llvm_name = "fp-armv8sp",
483483 .description = "Enable ARMv8 FP with no double precision",
484484 .dependencies = featureSet(&[_]Feature{
......@@ -486,31 +486,31 @@ pub const all_features = blk: {
486486 .vfp4sp,
487487 }),
488488 };
489 result[@intFromEnum(Feature.fpao)] = .{
489 result[@backingInt(Feature.fpao)] = .{
490490 .llvm_name = "fpao",
491491 .description = "Enable fast computation of positive address offsets",
492492 .dependencies = featureSet(&[_]Feature{}),
493493 };
494 result[@intFromEnum(Feature.fpregs)] = .{
494 result[@backingInt(Feature.fpregs)] = .{
495495 .llvm_name = "fpregs",
496496 .description = "Enable FP registers",
497497 .dependencies = featureSet(&[_]Feature{}),
498498 };
499 result[@intFromEnum(Feature.fpregs16)] = .{
499 result[@backingInt(Feature.fpregs16)] = .{
500500 .llvm_name = "fpregs16",
501501 .description = "Enable 16-bit FP registers",
502502 .dependencies = featureSet(&[_]Feature{
503503 .fpregs,
504504 }),
505505 };
506 result[@intFromEnum(Feature.fpregs64)] = .{
506 result[@backingInt(Feature.fpregs64)] = .{
507507 .llvm_name = "fpregs64",
508508 .description = "Enable 64-bit FP registers",
509509 .dependencies = featureSet(&[_]Feature{
510510 .fpregs,
511511 }),
512512 };
513 result[@intFromEnum(Feature.fullfp16)] = .{
513 result[@backingInt(Feature.fullfp16)] = .{
514514 .llvm_name = "fullfp16",
515515 .description = "Enable full half-precision floating point",
516516 .dependencies = featureSet(&[_]Feature{
......@@ -518,72 +518,72 @@ pub const all_features = blk: {
518518 .fpregs16,
519519 }),
520520 };
521 result[@intFromEnum(Feature.fuse_aes)] = .{
521 result[@backingInt(Feature.fuse_aes)] = .{
522522 .llvm_name = "fuse-aes",
523523 .description = "CPU fuses AES crypto operations",
524524 .dependencies = featureSet(&[_]Feature{}),
525525 };
526 result[@intFromEnum(Feature.fuse_literals)] = .{
526 result[@backingInt(Feature.fuse_literals)] = .{
527527 .llvm_name = "fuse-literals",
528528 .description = "CPU fuses literal generation operations",
529529 .dependencies = featureSet(&[_]Feature{}),
530530 };
531 result[@intFromEnum(Feature.harden_sls_blr)] = .{
531 result[@backingInt(Feature.harden_sls_blr)] = .{
532532 .llvm_name = "harden-sls-blr",
533533 .description = "Harden against straight line speculation across indirect calls",
534534 .dependencies = featureSet(&[_]Feature{}),
535535 };
536 result[@intFromEnum(Feature.harden_sls_nocomdat)] = .{
536 result[@backingInt(Feature.harden_sls_nocomdat)] = .{
537537 .llvm_name = "harden-sls-nocomdat",
538538 .description = "Generate thunk code for SLS mitigation in the normal text section",
539539 .dependencies = featureSet(&[_]Feature{}),
540540 };
541 result[@intFromEnum(Feature.harden_sls_retbr)] = .{
541 result[@backingInt(Feature.harden_sls_retbr)] = .{
542542 .llvm_name = "harden-sls-retbr",
543543 .description = "Harden against straight line speculation across RETurn and BranchRegister instructions",
544544 .dependencies = featureSet(&[_]Feature{}),
545545 };
546 result[@intFromEnum(Feature.has_v4t)] = .{
546 result[@backingInt(Feature.has_v4t)] = .{
547547 .llvm_name = "v4t",
548548 .description = "Support ARM v4T instructions",
549549 .dependencies = featureSet(&[_]Feature{}),
550550 };
551 result[@intFromEnum(Feature.has_v5t)] = .{
551 result[@backingInt(Feature.has_v5t)] = .{
552552 .llvm_name = "v5t",
553553 .description = "Support ARM v5T instructions",
554554 .dependencies = featureSet(&[_]Feature{
555555 .has_v4t,
556556 }),
557557 };
558 result[@intFromEnum(Feature.has_v5te)] = .{
558 result[@backingInt(Feature.has_v5te)] = .{
559559 .llvm_name = "v5te",
560560 .description = "Support ARM v5TE, v5TEj, and v5TExp instructions",
561561 .dependencies = featureSet(&[_]Feature{
562562 .has_v5t,
563563 }),
564564 };
565 result[@intFromEnum(Feature.has_v6)] = .{
565 result[@backingInt(Feature.has_v6)] = .{
566566 .llvm_name = "v6",
567567 .description = "Support ARM v6 instructions",
568568 .dependencies = featureSet(&[_]Feature{
569569 .has_v5te,
570570 }),
571571 };
572 result[@intFromEnum(Feature.has_v6k)] = .{
572 result[@backingInt(Feature.has_v6k)] = .{
573573 .llvm_name = "v6k",
574574 .description = "Support ARM v6k instructions",
575575 .dependencies = featureSet(&[_]Feature{
576576 .has_v6,
577577 }),
578578 };
579 result[@intFromEnum(Feature.has_v6m)] = .{
579 result[@backingInt(Feature.has_v6m)] = .{
580580 .llvm_name = "v6m",
581581 .description = "Support ARM v6M instructions",
582582 .dependencies = featureSet(&[_]Feature{
583583 .has_v6,
584584 }),
585585 };
586 result[@intFromEnum(Feature.has_v6t2)] = .{
586 result[@backingInt(Feature.has_v6t2)] = .{
587587 .llvm_name = "v6t2",
588588 .description = "Support ARM v6t2 instructions",
589589 .dependencies = featureSet(&[_]Feature{
......@@ -592,7 +592,7 @@ pub const all_features = blk: {
592592 .thumb2,
593593 }),
594594 };
595 result[@intFromEnum(Feature.has_v7)] = .{
595 result[@backingInt(Feature.has_v7)] = .{
596596 .llvm_name = "v7",
597597 .description = "Support ARM v7 instructions",
598598 .dependencies = featureSet(&[_]Feature{
......@@ -600,12 +600,12 @@ pub const all_features = blk: {
600600 .has_v7clrex,
601601 }),
602602 };
603 result[@intFromEnum(Feature.has_v7clrex)] = .{
603 result[@backingInt(Feature.has_v7clrex)] = .{
604604 .llvm_name = "v7clrex",
605605 .description = "Has v7 clrex instruction",
606606 .dependencies = featureSet(&[_]Feature{}),
607607 };
608 result[@intFromEnum(Feature.has_v8)] = .{
608 result[@backingInt(Feature.has_v8)] = .{
609609 .llvm_name = "v8",
610610 .description = "Support ARM v8 instructions",
611611 .dependencies = featureSet(&[_]Feature{
......@@ -614,35 +614,35 @@ pub const all_features = blk: {
614614 .perfmon,
615615 }),
616616 };
617 result[@intFromEnum(Feature.has_v8_1a)] = .{
617 result[@backingInt(Feature.has_v8_1a)] = .{
618618 .llvm_name = "v8.1a",
619619 .description = "Support ARM v8.1a instructions",
620620 .dependencies = featureSet(&[_]Feature{
621621 .has_v8,
622622 }),
623623 };
624 result[@intFromEnum(Feature.has_v8_1m_main)] = .{
624 result[@backingInt(Feature.has_v8_1m_main)] = .{
625625 .llvm_name = "v8.1m.main",
626626 .description = "Support ARM v8-1M Mainline instructions",
627627 .dependencies = featureSet(&[_]Feature{
628628 .has_v8m_main,
629629 }),
630630 };
631 result[@intFromEnum(Feature.has_v8_2a)] = .{
631 result[@backingInt(Feature.has_v8_2a)] = .{
632632 .llvm_name = "v8.2a",
633633 .description = "Support ARM v8.2a instructions",
634634 .dependencies = featureSet(&[_]Feature{
635635 .has_v8_1a,
636636 }),
637637 };
638 result[@intFromEnum(Feature.has_v8_3a)] = .{
638 result[@backingInt(Feature.has_v8_3a)] = .{
639639 .llvm_name = "v8.3a",
640640 .description = "Support ARM v8.3a instructions",
641641 .dependencies = featureSet(&[_]Feature{
642642 .has_v8_2a,
643643 }),
644644 };
645 result[@intFromEnum(Feature.has_v8_4a)] = .{
645 result[@backingInt(Feature.has_v8_4a)] = .{
646646 .llvm_name = "v8.4a",
647647 .description = "Support ARM v8.4a instructions",
648648 .dependencies = featureSet(&[_]Feature{
......@@ -650,7 +650,7 @@ pub const all_features = blk: {
650650 .has_v8_3a,
651651 }),
652652 };
653 result[@intFromEnum(Feature.has_v8_5a)] = .{
653 result[@backingInt(Feature.has_v8_5a)] = .{
654654 .llvm_name = "v8.5a",
655655 .description = "Support ARM v8.5a instructions",
656656 .dependencies = featureSet(&[_]Feature{
......@@ -658,7 +658,7 @@ pub const all_features = blk: {
658658 .sb,
659659 }),
660660 };
661 result[@intFromEnum(Feature.has_v8_6a)] = .{
661 result[@backingInt(Feature.has_v8_6a)] = .{
662662 .llvm_name = "v8.6a",
663663 .description = "Support ARM v8.6a instructions",
664664 .dependencies = featureSet(&[_]Feature{
......@@ -667,21 +667,21 @@ pub const all_features = blk: {
667667 .i8mm,
668668 }),
669669 };
670 result[@intFromEnum(Feature.has_v8_7a)] = .{
670 result[@backingInt(Feature.has_v8_7a)] = .{
671671 .llvm_name = "v8.7a",
672672 .description = "Support ARM v8.7a instructions",
673673 .dependencies = featureSet(&[_]Feature{
674674 .has_v8_6a,
675675 }),
676676 };
677 result[@intFromEnum(Feature.has_v8_8a)] = .{
677 result[@backingInt(Feature.has_v8_8a)] = .{
678678 .llvm_name = "v8.8a",
679679 .description = "Support ARM v8.8a instructions",
680680 .dependencies = featureSet(&[_]Feature{
681681 .has_v8_7a,
682682 }),
683683 };
684 result[@intFromEnum(Feature.has_v8_9a)] = .{
684 result[@backingInt(Feature.has_v8_9a)] = .{
685685 .llvm_name = "v8.9a",
686686 .description = "Support ARM v8.9a instructions",
687687 .dependencies = featureSet(&[_]Feature{
......@@ -689,21 +689,21 @@ pub const all_features = blk: {
689689 .has_v8_8a,
690690 }),
691691 };
692 result[@intFromEnum(Feature.has_v8m)] = .{
692 result[@backingInt(Feature.has_v8m)] = .{
693693 .llvm_name = "v8m",
694694 .description = "Support ARM v8M Baseline instructions",
695695 .dependencies = featureSet(&[_]Feature{
696696 .has_v6m,
697697 }),
698698 };
699 result[@intFromEnum(Feature.has_v8m_main)] = .{
699 result[@backingInt(Feature.has_v8m_main)] = .{
700700 .llvm_name = "v8m.main",
701701 .description = "Support ARM v8M Mainline instructions",
702702 .dependencies = featureSet(&[_]Feature{
703703 .has_v7,
704704 }),
705705 };
706 result[@intFromEnum(Feature.has_v9_1a)] = .{
706 result[@backingInt(Feature.has_v9_1a)] = .{
707707 .llvm_name = "v9.1a",
708708 .description = "Support ARM v9.1a instructions",
709709 .dependencies = featureSet(&[_]Feature{
......@@ -711,7 +711,7 @@ pub const all_features = blk: {
711711 .has_v9a,
712712 }),
713713 };
714 result[@intFromEnum(Feature.has_v9_2a)] = .{
714 result[@backingInt(Feature.has_v9_2a)] = .{
715715 .llvm_name = "v9.2a",
716716 .description = "Support ARM v9.2a instructions",
717717 .dependencies = featureSet(&[_]Feature{
......@@ -719,7 +719,7 @@ pub const all_features = blk: {
719719 .has_v9_1a,
720720 }),
721721 };
722 result[@intFromEnum(Feature.has_v9_3a)] = .{
722 result[@backingInt(Feature.has_v9_3a)] = .{
723723 .llvm_name = "v9.3a",
724724 .description = "Support ARM v9.3a instructions",
725725 .dependencies = featureSet(&[_]Feature{
......@@ -727,7 +727,7 @@ pub const all_features = blk: {
727727 .has_v9_2a,
728728 }),
729729 };
730 result[@intFromEnum(Feature.has_v9_4a)] = .{
730 result[@backingInt(Feature.has_v9_4a)] = .{
731731 .llvm_name = "v9.4a",
732732 .description = "Support ARM v9.4a instructions",
733733 .dependencies = featureSet(&[_]Feature{
......@@ -735,106 +735,106 @@ pub const all_features = blk: {
735735 .has_v9_3a,
736736 }),
737737 };
738 result[@intFromEnum(Feature.has_v9_5a)] = .{
738 result[@backingInt(Feature.has_v9_5a)] = .{
739739 .llvm_name = "v9.5a",
740740 .description = "Support ARM v9.5a instructions",
741741 .dependencies = featureSet(&[_]Feature{
742742 .has_v9_4a,
743743 }),
744744 };
745 result[@intFromEnum(Feature.has_v9_6a)] = .{
745 result[@backingInt(Feature.has_v9_6a)] = .{
746746 .llvm_name = "v9.6a",
747747 .description = "Support ARM v9.6a instructions",
748748 .dependencies = featureSet(&[_]Feature{
749749 .has_v9_5a,
750750 }),
751751 };
752 result[@intFromEnum(Feature.has_v9_7a)] = .{
752 result[@backingInt(Feature.has_v9_7a)] = .{
753753 .llvm_name = "v9.7a",
754754 .description = "Support ARM v9.7a instructions",
755755 .dependencies = featureSet(&[_]Feature{
756756 .has_v9_6a,
757757 }),
758758 };
759 result[@intFromEnum(Feature.has_v9a)] = .{
759 result[@backingInt(Feature.has_v9a)] = .{
760760 .llvm_name = "v9a",
761761 .description = "Support ARM v9a instructions",
762762 .dependencies = featureSet(&[_]Feature{
763763 .has_v8_5a,
764764 }),
765765 };
766 result[@intFromEnum(Feature.hwdiv)] = .{
766 result[@backingInt(Feature.hwdiv)] = .{
767767 .llvm_name = "hwdiv",
768768 .description = "Enable divide instructions in Thumb",
769769 .dependencies = featureSet(&[_]Feature{}),
770770 };
771 result[@intFromEnum(Feature.hwdiv_arm)] = .{
771 result[@backingInt(Feature.hwdiv_arm)] = .{
772772 .llvm_name = "hwdiv-arm",
773773 .description = "Enable divide instructions in ARM mode",
774774 .dependencies = featureSet(&[_]Feature{}),
775775 };
776 result[@intFromEnum(Feature.i8mm)] = .{
776 result[@backingInt(Feature.i8mm)] = .{
777777 .llvm_name = "i8mm",
778778 .description = "Enable Matrix Multiply Int8 Extension",
779779 .dependencies = featureSet(&[_]Feature{
780780 .neon,
781781 }),
782782 };
783 result[@intFromEnum(Feature.iwmmxt)] = .{
783 result[@backingInt(Feature.iwmmxt)] = .{
784784 .llvm_name = "iwmmxt",
785785 .description = "ARMv5te architecture",
786786 .dependencies = featureSet(&[_]Feature{
787787 .v5te,
788788 }),
789789 };
790 result[@intFromEnum(Feature.iwmmxt2)] = .{
790 result[@backingInt(Feature.iwmmxt2)] = .{
791791 .llvm_name = "iwmmxt2",
792792 .description = "ARMv5te architecture",
793793 .dependencies = featureSet(&[_]Feature{
794794 .v5te,
795795 }),
796796 };
797 result[@intFromEnum(Feature.lob)] = .{
797 result[@backingInt(Feature.lob)] = .{
798798 .llvm_name = "lob",
799799 .description = "Enable Low Overhead Branch extensions",
800800 .dependencies = featureSet(&[_]Feature{}),
801801 };
802 result[@intFromEnum(Feature.long_calls)] = .{
802 result[@backingInt(Feature.long_calls)] = .{
803803 .llvm_name = "long-calls",
804804 .description = "Generate calls via indirect call instructions",
805805 .dependencies = featureSet(&[_]Feature{}),
806806 };
807 result[@intFromEnum(Feature.loop_align)] = .{
807 result[@backingInt(Feature.loop_align)] = .{
808808 .llvm_name = "loop-align",
809809 .description = "Prefer 32-bit alignment for branch targets",
810810 .dependencies = featureSet(&[_]Feature{}),
811811 };
812 result[@intFromEnum(Feature.m55)] = .{
812 result[@backingInt(Feature.m55)] = .{
813813 .llvm_name = "m55",
814814 .description = "Cortex-M55 ARM processors",
815815 .dependencies = featureSet(&[_]Feature{}),
816816 };
817 result[@intFromEnum(Feature.m85)] = .{
817 result[@backingInt(Feature.m85)] = .{
818818 .llvm_name = "m85",
819819 .description = "Cortex-M85 ARM processors",
820820 .dependencies = featureSet(&[_]Feature{}),
821821 };
822 result[@intFromEnum(Feature.mclass)] = .{
822 result[@backingInt(Feature.mclass)] = .{
823823 .llvm_name = "mclass",
824824 .description = "Is microcontroller profile ('M' series)",
825825 .dependencies = featureSet(&[_]Feature{}),
826826 };
827 result[@intFromEnum(Feature.mp)] = .{
827 result[@backingInt(Feature.mp)] = .{
828828 .llvm_name = "mp",
829829 .description = "Supports Multiprocessing extension",
830830 .dependencies = featureSet(&[_]Feature{}),
831831 };
832 result[@intFromEnum(Feature.muxed_units)] = .{
832 result[@backingInt(Feature.muxed_units)] = .{
833833 .llvm_name = "muxed-units",
834834 .description = "Has muxed AGU and NEON/FPU",
835835 .dependencies = featureSet(&[_]Feature{}),
836836 };
837 result[@intFromEnum(Feature.mve)] = .{
837 result[@backingInt(Feature.mve)] = .{
838838 .llvm_name = "mve",
839839 .description = "Support M-Class Vector Extension with integer ops",
840840 .dependencies = featureSet(&[_]Feature{
......@@ -844,22 +844,22 @@ pub const all_features = blk: {
844844 .has_v8_1m_main,
845845 }),
846846 };
847 result[@intFromEnum(Feature.mve1beat)] = .{
847 result[@backingInt(Feature.mve1beat)] = .{
848848 .llvm_name = "mve1beat",
849849 .description = "Model MVE instructions as a 1 beat per tick architecture",
850850 .dependencies = featureSet(&[_]Feature{}),
851851 };
852 result[@intFromEnum(Feature.mve2beat)] = .{
852 result[@backingInt(Feature.mve2beat)] = .{
853853 .llvm_name = "mve2beat",
854854 .description = "Model MVE instructions as a 2 beats per tick architecture",
855855 .dependencies = featureSet(&[_]Feature{}),
856856 };
857 result[@intFromEnum(Feature.mve4beat)] = .{
857 result[@backingInt(Feature.mve4beat)] = .{
858858 .llvm_name = "mve4beat",
859859 .description = "Model MVE instructions as a 4 beats per tick architecture",
860860 .dependencies = featureSet(&[_]Feature{}),
861861 };
862 result[@intFromEnum(Feature.mve_fp)] = .{
862 result[@backingInt(Feature.mve_fp)] = .{
863863 .llvm_name = "mve.fp",
864864 .description = "Support M-Class Vector Extension with integer and floating ops",
865865 .dependencies = featureSet(&[_]Feature{
......@@ -867,238 +867,238 @@ pub const all_features = blk: {
867867 .mve,
868868 }),
869869 };
870 result[@intFromEnum(Feature.neon)] = .{
870 result[@backingInt(Feature.neon)] = .{
871871 .llvm_name = "neon",
872872 .description = "Enable NEON instructions",
873873 .dependencies = featureSet(&[_]Feature{
874874 .vfp3,
875875 }),
876876 };
877 result[@intFromEnum(Feature.neon_fpmovs)] = .{
877 result[@backingInt(Feature.neon_fpmovs)] = .{
878878 .llvm_name = "neon-fpmovs",
879879 .description = "Convert VMOVSR, VMOVRS, VMOVS to NEON",
880880 .dependencies = featureSet(&[_]Feature{}),
881881 };
882 result[@intFromEnum(Feature.neonfp)] = .{
882 result[@backingInt(Feature.neonfp)] = .{
883883 .llvm_name = "neonfp",
884884 .description = "Use NEON for single precision FP",
885885 .dependencies = featureSet(&[_]Feature{}),
886886 };
887 result[@intFromEnum(Feature.no_branch_predictor)] = .{
887 result[@backingInt(Feature.no_branch_predictor)] = .{
888888 .llvm_name = "no-branch-predictor",
889889 .description = "Has no branch predictor",
890890 .dependencies = featureSet(&[_]Feature{}),
891891 };
892 result[@intFromEnum(Feature.no_bti_at_return_twice)] = .{
892 result[@backingInt(Feature.no_bti_at_return_twice)] = .{
893893 .llvm_name = "no-bti-at-return-twice",
894894 .description = "Don't place a BTI instruction after a return-twice",
895895 .dependencies = featureSet(&[_]Feature{}),
896896 };
897 result[@intFromEnum(Feature.no_movt)] = .{
897 result[@backingInt(Feature.no_movt)] = .{
898898 .llvm_name = "no-movt",
899899 .description = "Don't use movt/movw pairs for 32-bit imms",
900900 .dependencies = featureSet(&[_]Feature{}),
901901 };
902 result[@intFromEnum(Feature.no_neg_immediates)] = .{
902 result[@backingInt(Feature.no_neg_immediates)] = .{
903903 .llvm_name = "no-neg-immediates",
904904 .description = "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.",
905905 .dependencies = featureSet(&[_]Feature{}),
906906 };
907 result[@intFromEnum(Feature.noarm)] = .{
907 result[@backingInt(Feature.noarm)] = .{
908908 .llvm_name = "noarm",
909909 .description = "Does not support ARM mode execution",
910910 .dependencies = featureSet(&[_]Feature{}),
911911 };
912 result[@intFromEnum(Feature.nonpipelined_vfp)] = .{
912 result[@backingInt(Feature.nonpipelined_vfp)] = .{
913913 .llvm_name = "nonpipelined-vfp",
914914 .description = "VFP instructions are not pipelined",
915915 .dependencies = featureSet(&[_]Feature{}),
916916 };
917 result[@intFromEnum(Feature.pacbti)] = .{
917 result[@backingInt(Feature.pacbti)] = .{
918918 .llvm_name = "pacbti",
919919 .description = "Enable Pointer Authentication and Branch Target Identification",
920920 .dependencies = featureSet(&[_]Feature{}),
921921 };
922 result[@intFromEnum(Feature.perfmon)] = .{
922 result[@backingInt(Feature.perfmon)] = .{
923923 .llvm_name = "perfmon",
924924 .description = "Enable support for Performance Monitor extensions",
925925 .dependencies = featureSet(&[_]Feature{}),
926926 };
927 result[@intFromEnum(Feature.prefer_ishst)] = .{
927 result[@backingInt(Feature.prefer_ishst)] = .{
928928 .llvm_name = "prefer-ishst",
929929 .description = "Prefer ISHST barriers",
930930 .dependencies = featureSet(&[_]Feature{}),
931931 };
932 result[@intFromEnum(Feature.prefer_vmovsr)] = .{
932 result[@backingInt(Feature.prefer_vmovsr)] = .{
933933 .llvm_name = "prefer-vmovsr",
934934 .description = "Prefer VMOVSR",
935935 .dependencies = featureSet(&[_]Feature{}),
936936 };
937 result[@intFromEnum(Feature.prof_unpr)] = .{
937 result[@backingInt(Feature.prof_unpr)] = .{
938938 .llvm_name = "prof-unpr",
939939 .description = "Is profitable to unpredicate",
940940 .dependencies = featureSet(&[_]Feature{}),
941941 };
942 result[@intFromEnum(Feature.ras)] = .{
942 result[@backingInt(Feature.ras)] = .{
943943 .llvm_name = "ras",
944944 .description = "Enable Reliability, Availability and Serviceability extensions",
945945 .dependencies = featureSet(&[_]Feature{}),
946946 };
947 result[@intFromEnum(Feature.rclass)] = .{
947 result[@backingInt(Feature.rclass)] = .{
948948 .llvm_name = "rclass",
949949 .description = "Is realtime profile ('R' series)",
950950 .dependencies = featureSet(&[_]Feature{}),
951951 };
952 result[@intFromEnum(Feature.read_tp_tpidrprw)] = .{
952 result[@backingInt(Feature.read_tp_tpidrprw)] = .{
953953 .llvm_name = "read-tp-tpidrprw",
954954 .description = "Reading thread pointer from TPIDRPRW register",
955955 .dependencies = featureSet(&[_]Feature{}),
956956 };
957 result[@intFromEnum(Feature.read_tp_tpidruro)] = .{
957 result[@backingInt(Feature.read_tp_tpidruro)] = .{
958958 .llvm_name = "read-tp-tpidruro",
959959 .description = "Reading thread pointer from TPIDRURO register",
960960 .dependencies = featureSet(&[_]Feature{}),
961961 };
962 result[@intFromEnum(Feature.read_tp_tpidrurw)] = .{
962 result[@backingInt(Feature.read_tp_tpidrurw)] = .{
963963 .llvm_name = "read-tp-tpidrurw",
964964 .description = "Reading thread pointer from TPIDRURW register",
965965 .dependencies = featureSet(&[_]Feature{}),
966966 };
967 result[@intFromEnum(Feature.reserve_r9)] = .{
967 result[@backingInt(Feature.reserve_r9)] = .{
968968 .llvm_name = "reserve-r9",
969969 .description = "Reserve R9, making it unavailable as GPR",
970970 .dependencies = featureSet(&[_]Feature{}),
971971 };
972 result[@intFromEnum(Feature.ret_addr_stack)] = .{
972 result[@backingInt(Feature.ret_addr_stack)] = .{
973973 .llvm_name = "ret-addr-stack",
974974 .description = "Has return address stack",
975975 .dependencies = featureSet(&[_]Feature{}),
976976 };
977 result[@intFromEnum(Feature.sb)] = .{
977 result[@backingInt(Feature.sb)] = .{
978978 .llvm_name = "sb",
979979 .description = "Enable v8.5a Speculation Barrier",
980980 .dependencies = featureSet(&[_]Feature{}),
981981 };
982 result[@intFromEnum(Feature.sha2)] = .{
982 result[@backingInt(Feature.sha2)] = .{
983983 .llvm_name = "sha2",
984984 .description = "Enable SHA1 and SHA256 support",
985985 .dependencies = featureSet(&[_]Feature{
986986 .neon,
987987 }),
988988 };
989 result[@intFromEnum(Feature.slow_fp_brcc)] = .{
989 result[@backingInt(Feature.slow_fp_brcc)] = .{
990990 .llvm_name = "slow-fp-brcc",
991991 .description = "FP compare + branch is slow",
992992 .dependencies = featureSet(&[_]Feature{}),
993993 };
994 result[@intFromEnum(Feature.slow_load_D_subreg)] = .{
994 result[@backingInt(Feature.slow_load_D_subreg)] = .{
995995 .llvm_name = "slow-load-D-subreg",
996996 .description = "Loading into D subregs is slow",
997997 .dependencies = featureSet(&[_]Feature{}),
998998 };
999 result[@intFromEnum(Feature.slow_odd_reg)] = .{
999 result[@backingInt(Feature.slow_odd_reg)] = .{
10001000 .llvm_name = "slow-odd-reg",
10011001 .description = "VLDM/VSTM starting with an odd register is slow",
10021002 .dependencies = featureSet(&[_]Feature{}),
10031003 };
1004 result[@intFromEnum(Feature.slow_vdup32)] = .{
1004 result[@backingInt(Feature.slow_vdup32)] = .{
10051005 .llvm_name = "slow-vdup32",
10061006 .description = "Has slow VDUP32 - prefer VMOV",
10071007 .dependencies = featureSet(&[_]Feature{}),
10081008 };
1009 result[@intFromEnum(Feature.slow_vgetlni32)] = .{
1009 result[@backingInt(Feature.slow_vgetlni32)] = .{
10101010 .llvm_name = "slow-vgetlni32",
10111011 .description = "Has slow VGETLNi32 - prefer VMOV",
10121012 .dependencies = featureSet(&[_]Feature{}),
10131013 };
1014 result[@intFromEnum(Feature.slowfpvfmx)] = .{
1014 result[@backingInt(Feature.slowfpvfmx)] = .{
10151015 .llvm_name = "slowfpvfmx",
10161016 .description = "Disable VFP / NEON FMA instructions",
10171017 .dependencies = featureSet(&[_]Feature{}),
10181018 };
1019 result[@intFromEnum(Feature.slowfpvmlx)] = .{
1019 result[@backingInt(Feature.slowfpvmlx)] = .{
10201020 .llvm_name = "slowfpvmlx",
10211021 .description = "Disable VFP / NEON MAC instructions",
10221022 .dependencies = featureSet(&[_]Feature{}),
10231023 };
1024 result[@intFromEnum(Feature.soft_float)] = .{
1024 result[@backingInt(Feature.soft_float)] = .{
10251025 .llvm_name = "soft-float",
10261026 .description = "Use software floating point features.",
10271027 .dependencies = featureSet(&[_]Feature{}),
10281028 };
1029 result[@intFromEnum(Feature.splat_vfp_neon)] = .{
1029 result[@backingInt(Feature.splat_vfp_neon)] = .{
10301030 .llvm_name = "splat-vfp-neon",
10311031 .description = "Splat register from VFP to NEON",
10321032 .dependencies = featureSet(&[_]Feature{
10331033 .dont_widen_vmovs,
10341034 }),
10351035 };
1036 result[@intFromEnum(Feature.strict_align)] = .{
1036 result[@backingInt(Feature.strict_align)] = .{
10371037 .llvm_name = "strict-align",
10381038 .description = "Disallow all unaligned memory access",
10391039 .dependencies = featureSet(&[_]Feature{}),
10401040 };
1041 result[@intFromEnum(Feature.thumb2)] = .{
1041 result[@backingInt(Feature.thumb2)] = .{
10421042 .llvm_name = "thumb2",
10431043 .description = "Enable Thumb2 instructions",
10441044 .dependencies = featureSet(&[_]Feature{}),
10451045 };
1046 result[@intFromEnum(Feature.thumb_mode)] = .{
1046 result[@backingInt(Feature.thumb_mode)] = .{
10471047 .llvm_name = "thumb-mode",
10481048 .description = "Thumb mode",
10491049 .dependencies = featureSet(&[_]Feature{}),
10501050 };
1051 result[@intFromEnum(Feature.trustzone)] = .{
1051 result[@backingInt(Feature.trustzone)] = .{
10521052 .llvm_name = "trustzone",
10531053 .description = "Enable support for TrustZone security extensions",
10541054 .dependencies = featureSet(&[_]Feature{}),
10551055 };
1056 result[@intFromEnum(Feature.use_mipipeliner)] = .{
1056 result[@backingInt(Feature.use_mipipeliner)] = .{
10571057 .llvm_name = "use-mipipeliner",
10581058 .description = "Use the MachinePipeliner",
10591059 .dependencies = featureSet(&[_]Feature{}),
10601060 };
1061 result[@intFromEnum(Feature.use_misched)] = .{
1061 result[@backingInt(Feature.use_misched)] = .{
10621062 .llvm_name = "use-misched",
10631063 .description = "Use the MachineScheduler",
10641064 .dependencies = featureSet(&[_]Feature{}),
10651065 };
1066 result[@intFromEnum(Feature.v2)] = .{
1066 result[@backingInt(Feature.v2)] = .{
10671067 .llvm_name = null,
10681068 .description = "ARMv2 architecture",
10691069 .dependencies = featureSet(&[_]Feature{
10701070 .strict_align,
10711071 }),
10721072 };
1073 result[@intFromEnum(Feature.v2a)] = .{
1073 result[@backingInt(Feature.v2a)] = .{
10741074 .llvm_name = null,
10751075 .description = "ARMv2a architecture",
10761076 .dependencies = featureSet(&[_]Feature{
10771077 .strict_align,
10781078 }),
10791079 };
1080 result[@intFromEnum(Feature.v3)] = .{
1080 result[@backingInt(Feature.v3)] = .{
10811081 .llvm_name = null,
10821082 .description = "ARMv3 architecture",
10831083 .dependencies = featureSet(&[_]Feature{
10841084 .strict_align,
10851085 }),
10861086 };
1087 result[@intFromEnum(Feature.v3m)] = .{
1087 result[@backingInt(Feature.v3m)] = .{
10881088 .llvm_name = null,
10891089 .description = "ARMv3m architecture",
10901090 .dependencies = featureSet(&[_]Feature{
10911091 .strict_align,
10921092 }),
10931093 };
1094 result[@intFromEnum(Feature.v4)] = .{
1094 result[@backingInt(Feature.v4)] = .{
10951095 .llvm_name = "armv4",
10961096 .description = "ARMv4 architecture",
10971097 .dependencies = featureSet(&[_]Feature{
10981098 .strict_align,
10991099 }),
11001100 };
1101 result[@intFromEnum(Feature.v4t)] = .{
1101 result[@backingInt(Feature.v4t)] = .{
11021102 .llvm_name = "armv4t",
11031103 .description = "ARMv4t architecture",
11041104 .dependencies = featureSet(&[_]Feature{
......@@ -1106,7 +1106,7 @@ pub const all_features = blk: {
11061106 .strict_align,
11071107 }),
11081108 };
1109 result[@intFromEnum(Feature.v5t)] = .{
1109 result[@backingInt(Feature.v5t)] = .{
11101110 .llvm_name = "armv5t",
11111111 .description = "ARMv5t architecture",
11121112 .dependencies = featureSet(&[_]Feature{
......@@ -1114,7 +1114,7 @@ pub const all_features = blk: {
11141114 .strict_align,
11151115 }),
11161116 };
1117 result[@intFromEnum(Feature.v5te)] = .{
1117 result[@backingInt(Feature.v5te)] = .{
11181118 .llvm_name = "armv5te",
11191119 .description = "ARMv5te architecture",
11201120 .dependencies = featureSet(&[_]Feature{
......@@ -1122,7 +1122,7 @@ pub const all_features = blk: {
11221122 .strict_align,
11231123 }),
11241124 };
1125 result[@intFromEnum(Feature.v5tej)] = .{
1125 result[@backingInt(Feature.v5tej)] = .{
11261126 .llvm_name = "armv5tej",
11271127 .description = "ARMv5tej architecture",
11281128 .dependencies = featureSet(&[_]Feature{
......@@ -1130,7 +1130,7 @@ pub const all_features = blk: {
11301130 .strict_align,
11311131 }),
11321132 };
1133 result[@intFromEnum(Feature.v6)] = .{
1133 result[@backingInt(Feature.v6)] = .{
11341134 .llvm_name = "armv6",
11351135 .description = "ARMv6 architecture",
11361136 .dependencies = featureSet(&[_]Feature{
......@@ -1138,21 +1138,21 @@ pub const all_features = blk: {
11381138 .has_v6,
11391139 }),
11401140 };
1141 result[@intFromEnum(Feature.v6j)] = .{
1141 result[@backingInt(Feature.v6j)] = .{
11421142 .llvm_name = "armv6j",
11431143 .description = "ARMv7a architecture",
11441144 .dependencies = featureSet(&[_]Feature{
11451145 .v6,
11461146 }),
11471147 };
1148 result[@intFromEnum(Feature.v6k)] = .{
1148 result[@backingInt(Feature.v6k)] = .{
11491149 .llvm_name = "armv6k",
11501150 .description = "ARMv6k architecture",
11511151 .dependencies = featureSet(&[_]Feature{
11521152 .has_v6k,
11531153 }),
11541154 };
1155 result[@intFromEnum(Feature.v6kz)] = .{
1155 result[@backingInt(Feature.v6kz)] = .{
11561156 .llvm_name = "armv6kz",
11571157 .description = "ARMv6kz architecture",
11581158 .dependencies = featureSet(&[_]Feature{
......@@ -1160,7 +1160,7 @@ pub const all_features = blk: {
11601160 .trustzone,
11611161 }),
11621162 };
1163 result[@intFromEnum(Feature.v6m)] = .{
1163 result[@backingInt(Feature.v6m)] = .{
11641164 .llvm_name = "armv6-m",
11651165 .description = "ARMv6m architecture",
11661166 .dependencies = featureSet(&[_]Feature{
......@@ -1172,7 +1172,7 @@ pub const all_features = blk: {
11721172 .thumb_mode,
11731173 }),
11741174 };
1175 result[@intFromEnum(Feature.v6sm)] = .{
1175 result[@backingInt(Feature.v6sm)] = .{
11761176 .llvm_name = "armv6s-m",
11771177 .description = "ARMv6sm architecture",
11781178 .dependencies = featureSet(&[_]Feature{
......@@ -1184,7 +1184,7 @@ pub const all_features = blk: {
11841184 .thumb_mode,
11851185 }),
11861186 };
1187 result[@intFromEnum(Feature.v6t2)] = .{
1187 result[@backingInt(Feature.v6t2)] = .{
11881188 .llvm_name = "armv6t2",
11891189 .description = "ARMv6t2 architecture",
11901190 .dependencies = featureSet(&[_]Feature{
......@@ -1192,7 +1192,7 @@ pub const all_features = blk: {
11921192 .has_v6t2,
11931193 }),
11941194 };
1195 result[@intFromEnum(Feature.v7a)] = .{
1195 result[@backingInt(Feature.v7a)] = .{
11961196 .llvm_name = "armv7-a",
11971197 .description = "ARMv7a architecture",
11981198 .dependencies = featureSet(&[_]Feature{
......@@ -1204,7 +1204,7 @@ pub const all_features = blk: {
12041204 .perfmon,
12051205 }),
12061206 };
1207 result[@intFromEnum(Feature.v7em)] = .{
1207 result[@backingInt(Feature.v7em)] = .{
12081208 .llvm_name = "armv7e-m",
12091209 .description = "ARMv7em architecture",
12101210 .dependencies = featureSet(&[_]Feature{
......@@ -1217,7 +1217,7 @@ pub const all_features = blk: {
12171217 .thumb_mode,
12181218 }),
12191219 };
1220 result[@intFromEnum(Feature.v7m)] = .{
1220 result[@backingInt(Feature.v7m)] = .{
12211221 .llvm_name = "armv7-m",
12221222 .description = "ARMv7m architecture",
12231223 .dependencies = featureSet(&[_]Feature{
......@@ -1229,7 +1229,7 @@ pub const all_features = blk: {
12291229 .thumb_mode,
12301230 }),
12311231 };
1232 result[@intFromEnum(Feature.v7r)] = .{
1232 result[@backingInt(Feature.v7r)] = .{
12331233 .llvm_name = "armv7-r",
12341234 .description = "ARMv7r architecture",
12351235 .dependencies = featureSet(&[_]Feature{
......@@ -1241,7 +1241,7 @@ pub const all_features = blk: {
12411241 .rclass,
12421242 }),
12431243 };
1244 result[@intFromEnum(Feature.v7ve)] = .{
1244 result[@backingInt(Feature.v7ve)] = .{
12451245 .llvm_name = "armv7ve",
12461246 .description = "ARMv7ve architecture",
12471247 .dependencies = featureSet(&[_]Feature{
......@@ -1256,7 +1256,7 @@ pub const all_features = blk: {
12561256 .virtualization,
12571257 }),
12581258 };
1259 result[@intFromEnum(Feature.v8_1a)] = .{
1259 result[@backingInt(Feature.v8_1a)] = .{
12601260 .llvm_name = "armv8.1-a",
12611261 .description = "ARMv81a architecture",
12621262 .dependencies = featureSet(&[_]Feature{
......@@ -1272,7 +1272,7 @@ pub const all_features = blk: {
12721272 .virtualization,
12731273 }),
12741274 };
1275 result[@intFromEnum(Feature.v8_1m_main)] = .{
1275 result[@backingInt(Feature.v8_1m_main)] = .{
12761276 .llvm_name = "armv8.1-m.main",
12771277 .description = "ARMv81mMainline architecture",
12781278 .dependencies = featureSet(&[_]Feature{
......@@ -1288,7 +1288,7 @@ pub const all_features = blk: {
12881288 .thumb_mode,
12891289 }),
12901290 };
1291 result[@intFromEnum(Feature.v8_2a)] = .{
1291 result[@backingInt(Feature.v8_2a)] = .{
12921292 .llvm_name = "armv8.2-a",
12931293 .description = "ARMv82a architecture",
12941294 .dependencies = featureSet(&[_]Feature{
......@@ -1305,7 +1305,7 @@ pub const all_features = blk: {
13051305 .virtualization,
13061306 }),
13071307 };
1308 result[@intFromEnum(Feature.v8_3a)] = .{
1308 result[@backingInt(Feature.v8_3a)] = .{
13091309 .llvm_name = "armv8.3-a",
13101310 .description = "ARMv83a architecture",
13111311 .dependencies = featureSet(&[_]Feature{
......@@ -1322,7 +1322,7 @@ pub const all_features = blk: {
13221322 .virtualization,
13231323 }),
13241324 };
1325 result[@intFromEnum(Feature.v8_4a)] = .{
1325 result[@backingInt(Feature.v8_4a)] = .{
13261326 .llvm_name = "armv8.4-a",
13271327 .description = "ARMv84a architecture",
13281328 .dependencies = featureSet(&[_]Feature{
......@@ -1339,7 +1339,7 @@ pub const all_features = blk: {
13391339 .virtualization,
13401340 }),
13411341 };
1342 result[@intFromEnum(Feature.v8_5a)] = .{
1342 result[@backingInt(Feature.v8_5a)] = .{
13431343 .llvm_name = "armv8.5-a",
13441344 .description = "ARMv85a architecture",
13451345 .dependencies = featureSet(&[_]Feature{
......@@ -1356,7 +1356,7 @@ pub const all_features = blk: {
13561356 .virtualization,
13571357 }),
13581358 };
1359 result[@intFromEnum(Feature.v8_6a)] = .{
1359 result[@backingInt(Feature.v8_6a)] = .{
13601360 .llvm_name = "armv8.6-a",
13611361 .description = "ARMv86a architecture",
13621362 .dependencies = featureSet(&[_]Feature{
......@@ -1373,7 +1373,7 @@ pub const all_features = blk: {
13731373 .virtualization,
13741374 }),
13751375 };
1376 result[@intFromEnum(Feature.v8_7a)] = .{
1376 result[@backingInt(Feature.v8_7a)] = .{
13771377 .llvm_name = "armv8.7-a",
13781378 .description = "ARMv87a architecture",
13791379 .dependencies = featureSet(&[_]Feature{
......@@ -1390,7 +1390,7 @@ pub const all_features = blk: {
13901390 .virtualization,
13911391 }),
13921392 };
1393 result[@intFromEnum(Feature.v8_8a)] = .{
1393 result[@backingInt(Feature.v8_8a)] = .{
13941394 .llvm_name = "armv8.8-a",
13951395 .description = "ARMv88a architecture",
13961396 .dependencies = featureSet(&[_]Feature{
......@@ -1407,7 +1407,7 @@ pub const all_features = blk: {
14071407 .virtualization,
14081408 }),
14091409 };
1410 result[@intFromEnum(Feature.v8_9a)] = .{
1410 result[@backingInt(Feature.v8_9a)] = .{
14111411 .llvm_name = "armv8.9-a",
14121412 .description = "ARMv89a architecture",
14131413 .dependencies = featureSet(&[_]Feature{
......@@ -1424,7 +1424,7 @@ pub const all_features = blk: {
14241424 .virtualization,
14251425 }),
14261426 };
1427 result[@intFromEnum(Feature.v8a)] = .{
1427 result[@backingInt(Feature.v8a)] = .{
14281428 .llvm_name = "armv8-a",
14291429 .description = "ARMv8a architecture",
14301430 .dependencies = featureSet(&[_]Feature{
......@@ -1440,7 +1440,7 @@ pub const all_features = blk: {
14401440 .virtualization,
14411441 }),
14421442 };
1443 result[@intFromEnum(Feature.v8m)] = .{
1443 result[@backingInt(Feature.v8m)] = .{
14441444 .llvm_name = "armv8-m.base",
14451445 .description = "ARMv8mBaseline architecture",
14461446 .dependencies = featureSet(&[_]Feature{
......@@ -1456,7 +1456,7 @@ pub const all_features = blk: {
14561456 .thumb_mode,
14571457 }),
14581458 };
1459 result[@intFromEnum(Feature.v8m_main)] = .{
1459 result[@backingInt(Feature.v8m_main)] = .{
14601460 .llvm_name = "armv8-m.main",
14611461 .description = "ARMv8mMainline architecture",
14621462 .dependencies = featureSet(&[_]Feature{
......@@ -1470,7 +1470,7 @@ pub const all_features = blk: {
14701470 .thumb_mode,
14711471 }),
14721472 };
1473 result[@intFromEnum(Feature.v8r)] = .{
1473 result[@backingInt(Feature.v8r)] = .{
14741474 .llvm_name = "armv8-r",
14751475 .description = "ARMv8r architecture",
14761476 .dependencies = featureSet(&[_]Feature{
......@@ -1485,7 +1485,7 @@ pub const all_features = blk: {
14851485 .virtualization,
14861486 }),
14871487 };
1488 result[@intFromEnum(Feature.v9_1a)] = .{
1488 result[@backingInt(Feature.v9_1a)] = .{
14891489 .llvm_name = "armv9.1-a",
14901490 .description = "ARMv91a architecture",
14911491 .dependencies = featureSet(&[_]Feature{
......@@ -1501,7 +1501,7 @@ pub const all_features = blk: {
15011501 .virtualization,
15021502 }),
15031503 };
1504 result[@intFromEnum(Feature.v9_2a)] = .{
1504 result[@backingInt(Feature.v9_2a)] = .{
15051505 .llvm_name = "armv9.2-a",
15061506 .description = "ARMv92a architecture",
15071507 .dependencies = featureSet(&[_]Feature{
......@@ -1517,7 +1517,7 @@ pub const all_features = blk: {
15171517 .virtualization,
15181518 }),
15191519 };
1520 result[@intFromEnum(Feature.v9_3a)] = .{
1520 result[@backingInt(Feature.v9_3a)] = .{
15211521 .llvm_name = "armv9.3-a",
15221522 .description = "ARMv93a architecture",
15231523 .dependencies = featureSet(&[_]Feature{
......@@ -1534,7 +1534,7 @@ pub const all_features = blk: {
15341534 .virtualization,
15351535 }),
15361536 };
1537 result[@intFromEnum(Feature.v9_4a)] = .{
1537 result[@backingInt(Feature.v9_4a)] = .{
15381538 .llvm_name = "armv9.4-a",
15391539 .description = "ARMv94a architecture",
15401540 .dependencies = featureSet(&[_]Feature{
......@@ -1550,7 +1550,7 @@ pub const all_features = blk: {
15501550 .virtualization,
15511551 }),
15521552 };
1553 result[@intFromEnum(Feature.v9_5a)] = .{
1553 result[@backingInt(Feature.v9_5a)] = .{
15541554 .llvm_name = "armv9.5-a",
15551555 .description = "ARMv95a architecture",
15561556 .dependencies = featureSet(&[_]Feature{
......@@ -1566,7 +1566,7 @@ pub const all_features = blk: {
15661566 .virtualization,
15671567 }),
15681568 };
1569 result[@intFromEnum(Feature.v9_6a)] = .{
1569 result[@backingInt(Feature.v9_6a)] = .{
15701570 .llvm_name = "armv9.6-a",
15711571 .description = "ARMv96a architecture",
15721572 .dependencies = featureSet(&[_]Feature{
......@@ -1582,7 +1582,7 @@ pub const all_features = blk: {
15821582 .virtualization,
15831583 }),
15841584 };
1585 result[@intFromEnum(Feature.v9_7a)] = .{
1585 result[@backingInt(Feature.v9_7a)] = .{
15861586 .llvm_name = "armv9.7-a",
15871587 .description = "ARMv97a architecture",
15881588 .dependencies = featureSet(&[_]Feature{
......@@ -1598,7 +1598,7 @@ pub const all_features = blk: {
15981598 .virtualization,
15991599 }),
16001600 };
1601 result[@intFromEnum(Feature.v9a)] = .{
1601 result[@backingInt(Feature.v9a)] = .{
16021602 .llvm_name = "armv9-a",
16031603 .description = "ARMv9a architecture",
16041604 .dependencies = featureSet(&[_]Feature{
......@@ -1614,7 +1614,7 @@ pub const all_features = blk: {
16141614 .virtualization,
16151615 }),
16161616 };
1617 result[@intFromEnum(Feature.vfp2)] = .{
1617 result[@backingInt(Feature.vfp2)] = .{
16181618 .llvm_name = "vfp2",
16191619 .description = "Enable VFP2 instructions",
16201620 .dependencies = featureSet(&[_]Feature{
......@@ -1622,14 +1622,14 @@ pub const all_features = blk: {
16221622 .vfp2sp,
16231623 }),
16241624 };
1625 result[@intFromEnum(Feature.vfp2sp)] = .{
1625 result[@backingInt(Feature.vfp2sp)] = .{
16261626 .llvm_name = "vfp2sp",
16271627 .description = "Enable VFP2 instructions with no double precision",
16281628 .dependencies = featureSet(&[_]Feature{
16291629 .fpregs,
16301630 }),
16311631 };
1632 result[@intFromEnum(Feature.vfp3)] = .{
1632 result[@backingInt(Feature.vfp3)] = .{
16331633 .llvm_name = "vfp3",
16341634 .description = "Enable VFP3 instructions",
16351635 .dependencies = featureSet(&[_]Feature{
......@@ -1637,7 +1637,7 @@ pub const all_features = blk: {
16371637 .vfp3sp,
16381638 }),
16391639 };
1640 result[@intFromEnum(Feature.vfp3d16)] = .{
1640 result[@backingInt(Feature.vfp3d16)] = .{
16411641 .llvm_name = "vfp3d16",
16421642 .description = "Enable VFP3 instructions with only 16 d-registers",
16431643 .dependencies = featureSet(&[_]Feature{
......@@ -1645,14 +1645,14 @@ pub const all_features = blk: {
16451645 .vfp3d16sp,
16461646 }),
16471647 };
1648 result[@intFromEnum(Feature.vfp3d16sp)] = .{
1648 result[@backingInt(Feature.vfp3d16sp)] = .{
16491649 .llvm_name = "vfp3d16sp",
16501650 .description = "Enable VFP3 instructions with only 16 d-registers and no double precision",
16511651 .dependencies = featureSet(&[_]Feature{
16521652 .vfp2sp,
16531653 }),
16541654 };
1655 result[@intFromEnum(Feature.vfp3sp)] = .{
1655 result[@backingInt(Feature.vfp3sp)] = .{
16561656 .llvm_name = "vfp3sp",
16571657 .description = "Enable VFP3 instructions with no double precision",
16581658 .dependencies = featureSet(&[_]Feature{
......@@ -1660,7 +1660,7 @@ pub const all_features = blk: {
16601660 .vfp3d16sp,
16611661 }),
16621662 };
1663 result[@intFromEnum(Feature.vfp4)] = .{
1663 result[@backingInt(Feature.vfp4)] = .{
16641664 .llvm_name = "vfp4",
16651665 .description = "Enable VFP4 instructions",
16661666 .dependencies = featureSet(&[_]Feature{
......@@ -1669,7 +1669,7 @@ pub const all_features = blk: {
16691669 .vfp4sp,
16701670 }),
16711671 };
1672 result[@intFromEnum(Feature.vfp4d16)] = .{
1672 result[@backingInt(Feature.vfp4d16)] = .{
16731673 .llvm_name = "vfp4d16",
16741674 .description = "Enable VFP4 instructions with only 16 d-registers",
16751675 .dependencies = featureSet(&[_]Feature{
......@@ -1677,7 +1677,7 @@ pub const all_features = blk: {
16771677 .vfp4d16sp,
16781678 }),
16791679 };
1680 result[@intFromEnum(Feature.vfp4d16sp)] = .{
1680 result[@backingInt(Feature.vfp4d16sp)] = .{
16811681 .llvm_name = "vfp4d16sp",
16821682 .description = "Enable VFP4 instructions with only 16 d-registers and no double precision",
16831683 .dependencies = featureSet(&[_]Feature{
......@@ -1685,7 +1685,7 @@ pub const all_features = blk: {
16851685 .vfp3d16sp,
16861686 }),
16871687 };
1688 result[@intFromEnum(Feature.vfp4sp)] = .{
1688 result[@backingInt(Feature.vfp4sp)] = .{
16891689 .llvm_name = "vfp4sp",
16901690 .description = "Enable VFP4 instructions with no double precision",
16911691 .dependencies = featureSet(&[_]Feature{
......@@ -1693,7 +1693,7 @@ pub const all_features = blk: {
16931693 .vfp4d16sp,
16941694 }),
16951695 };
1696 result[@intFromEnum(Feature.virtualization)] = .{
1696 result[@backingInt(Feature.virtualization)] = .{
16971697 .llvm_name = "virtualization",
16981698 .description = "Supports Virtualization extension",
16991699 .dependencies = featureSet(&[_]Feature{
......@@ -1701,34 +1701,34 @@ pub const all_features = blk: {
17011701 .hwdiv_arm,
17021702 }),
17031703 };
1704 result[@intFromEnum(Feature.vldn_align)] = .{
1704 result[@backingInt(Feature.vldn_align)] = .{
17051705 .llvm_name = "vldn-align",
17061706 .description = "Check for VLDn unaligned access",
17071707 .dependencies = featureSet(&[_]Feature{}),
17081708 };
1709 result[@intFromEnum(Feature.vmlx_forwarding)] = .{
1709 result[@backingInt(Feature.vmlx_forwarding)] = .{
17101710 .llvm_name = "vmlx-forwarding",
17111711 .description = "Has multiplier accumulator forwarding",
17121712 .dependencies = featureSet(&[_]Feature{}),
17131713 };
1714 result[@intFromEnum(Feature.vmlx_hazards)] = .{
1714 result[@backingInt(Feature.vmlx_hazards)] = .{
17151715 .llvm_name = "vmlx-hazards",
17161716 .description = "Has VMLx hazards",
17171717 .dependencies = featureSet(&[_]Feature{}),
17181718 };
1719 result[@intFromEnum(Feature.wide_stride_vfp)] = .{
1719 result[@backingInt(Feature.wide_stride_vfp)] = .{
17201720 .llvm_name = "wide-stride-vfp",
17211721 .description = "Use a wide stride when allocating VFP registers",
17221722 .dependencies = featureSet(&[_]Feature{}),
17231723 };
1724 result[@intFromEnum(Feature.xscale)] = .{
1724 result[@backingInt(Feature.xscale)] = .{
17251725 .llvm_name = "xscale",
17261726 .description = "ARMv5te architecture",
17271727 .dependencies = featureSet(&[_]Feature{
17281728 .v5te,
17291729 }),
17301730 };
1731 result[@intFromEnum(Feature.zcz)] = .{
1731 result[@backingInt(Feature.zcz)] = .{
17321732 .llvm_name = "zcz",
17331733 .description = "Has zero-cycle zeroing instructions",
17341734 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/avr.zig+39-39
......@@ -55,17 +55,17 @@ pub const all_features = blk: {
5555 const len = @typeInfo(Feature).@"enum".field_names.len;
5656 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
5757 var result: [len]CpuFeature = undefined;
58 result[@intFromEnum(Feature.addsubiw)] = .{
58 result[@backingInt(Feature.addsubiw)] = .{
5959 .llvm_name = "addsubiw",
6060 .description = "Enable 16-bit register-immediate addition and subtraction instructions",
6161 .dependencies = featureSet(&[_]Feature{}),
6262 };
63 result[@intFromEnum(Feature.avr0)] = .{
63 result[@backingInt(Feature.avr0)] = .{
6464 .llvm_name = "avr0",
6565 .description = "The device is a part of the avr0 family",
6666 .dependencies = featureSet(&[_]Feature{}),
6767 };
68 result[@intFromEnum(Feature.avr1)] = .{
68 result[@backingInt(Feature.avr1)] = .{
6969 .llvm_name = "avr1",
7070 .description = "The device is a part of the avr1 family",
7171 .dependencies = featureSet(&[_]Feature{
......@@ -74,7 +74,7 @@ pub const all_features = blk: {
7474 .memmappedregs,
7575 }),
7676 };
77 result[@intFromEnum(Feature.avr2)] = .{
77 result[@backingInt(Feature.avr2)] = .{
7878 .llvm_name = "avr2",
7979 .description = "The device is a part of the avr2 family",
8080 .dependencies = featureSet(&[_]Feature{
......@@ -84,7 +84,7 @@ pub const all_features = blk: {
8484 .sram,
8585 }),
8686 };
87 result[@intFromEnum(Feature.avr25)] = .{
87 result[@backingInt(Feature.avr25)] = .{
8888 .llvm_name = "avr25",
8989 .description = "The device is a part of the avr25 family",
9090 .dependencies = featureSet(&[_]Feature{
......@@ -95,7 +95,7 @@ pub const all_features = blk: {
9595 .spm,
9696 }),
9797 };
98 result[@intFromEnum(Feature.avr3)] = .{
98 result[@backingInt(Feature.avr3)] = .{
9999 .llvm_name = "avr3",
100100 .description = "The device is a part of the avr3 family",
101101 .dependencies = featureSet(&[_]Feature{
......@@ -103,7 +103,7 @@ pub const all_features = blk: {
103103 .jmpcall,
104104 }),
105105 };
106 result[@intFromEnum(Feature.avr31)] = .{
106 result[@backingInt(Feature.avr31)] = .{
107107 .llvm_name = "avr31",
108108 .description = "The device is a part of the avr31 family",
109109 .dependencies = featureSet(&[_]Feature{
......@@ -111,7 +111,7 @@ pub const all_features = blk: {
111111 .elpm,
112112 }),
113113 };
114 result[@intFromEnum(Feature.avr35)] = .{
114 result[@backingInt(Feature.avr35)] = .{
115115 .llvm_name = "avr35",
116116 .description = "The device is a part of the avr35 family",
117117 .dependencies = featureSet(&[_]Feature{
......@@ -122,7 +122,7 @@ pub const all_features = blk: {
122122 .spm,
123123 }),
124124 };
125 result[@intFromEnum(Feature.avr4)] = .{
125 result[@backingInt(Feature.avr4)] = .{
126126 .llvm_name = "avr4",
127127 .description = "The device is a part of the avr4 family",
128128 .dependencies = featureSet(&[_]Feature{
......@@ -134,7 +134,7 @@ pub const all_features = blk: {
134134 .spm,
135135 }),
136136 };
137 result[@intFromEnum(Feature.avr5)] = .{
137 result[@backingInt(Feature.avr5)] = .{
138138 .llvm_name = "avr5",
139139 .description = "The device is a part of the avr5 family",
140140 .dependencies = featureSet(&[_]Feature{
......@@ -146,7 +146,7 @@ pub const all_features = blk: {
146146 .spm,
147147 }),
148148 };
149 result[@intFromEnum(Feature.avr51)] = .{
149 result[@backingInt(Feature.avr51)] = .{
150150 .llvm_name = "avr51",
151151 .description = "The device is a part of the avr51 family",
152152 .dependencies = featureSet(&[_]Feature{
......@@ -155,7 +155,7 @@ pub const all_features = blk: {
155155 .elpmx,
156156 }),
157157 };
158 result[@intFromEnum(Feature.avr6)] = .{
158 result[@backingInt(Feature.avr6)] = .{
159159 .llvm_name = "avr6",
160160 .description = "The device is a part of the avr6 family",
161161 .dependencies = featureSet(&[_]Feature{
......@@ -163,7 +163,7 @@ pub const all_features = blk: {
163163 .eijmpcall,
164164 }),
165165 };
166 result[@intFromEnum(Feature.avrtiny)] = .{
166 result[@backingInt(Feature.avrtiny)] = .{
167167 .llvm_name = "avrtiny",
168168 .description = "The device is a part of the avrtiny family",
169169 .dependencies = featureSet(&[_]Feature{
......@@ -174,82 +174,82 @@ pub const all_features = blk: {
174174 .tinyencoding,
175175 }),
176176 };
177 result[@intFromEnum(Feature.@"break")] = .{
177 result[@backingInt(Feature.@"break")] = .{
178178 .llvm_name = "break",
179179 .description = "The device supports the `BREAK` debugging instruction",
180180 .dependencies = featureSet(&[_]Feature{}),
181181 };
182 result[@intFromEnum(Feature.des)] = .{
182 result[@backingInt(Feature.des)] = .{
183183 .llvm_name = "des",
184184 .description = "The device supports the `DES k` encryption instruction",
185185 .dependencies = featureSet(&[_]Feature{}),
186186 };
187 result[@intFromEnum(Feature.eijmpcall)] = .{
187 result[@backingInt(Feature.eijmpcall)] = .{
188188 .llvm_name = "eijmpcall",
189189 .description = "The device supports the `EIJMP`/`EICALL` instructions",
190190 .dependencies = featureSet(&[_]Feature{}),
191191 };
192 result[@intFromEnum(Feature.elpm)] = .{
192 result[@backingInt(Feature.elpm)] = .{
193193 .llvm_name = "elpm",
194194 .description = "The device supports the ELPM instruction",
195195 .dependencies = featureSet(&[_]Feature{}),
196196 };
197 result[@intFromEnum(Feature.elpmx)] = .{
197 result[@backingInt(Feature.elpmx)] = .{
198198 .llvm_name = "elpmx",
199199 .description = "The device supports the `ELPM Rd, Z[+]` instructions",
200200 .dependencies = featureSet(&[_]Feature{}),
201201 };
202 result[@intFromEnum(Feature.ijmpcall)] = .{
202 result[@backingInt(Feature.ijmpcall)] = .{
203203 .llvm_name = "ijmpcall",
204204 .description = "The device supports `IJMP`/`ICALL`instructions",
205205 .dependencies = featureSet(&[_]Feature{}),
206206 };
207 result[@intFromEnum(Feature.jmpcall)] = .{
207 result[@backingInt(Feature.jmpcall)] = .{
208208 .llvm_name = "jmpcall",
209209 .description = "The device supports the `JMP` and `CALL` instructions",
210210 .dependencies = featureSet(&[_]Feature{}),
211211 };
212 result[@intFromEnum(Feature.lowbytefirst)] = .{
212 result[@backingInt(Feature.lowbytefirst)] = .{
213213 .llvm_name = "lowbytefirst",
214214 .description = "Do the low byte first when writing a 16-bit port or storing a 16-bit word",
215215 .dependencies = featureSet(&[_]Feature{}),
216216 };
217 result[@intFromEnum(Feature.lpm)] = .{
217 result[@backingInt(Feature.lpm)] = .{
218218 .llvm_name = "lpm",
219219 .description = "The device supports the `LPM` instruction",
220220 .dependencies = featureSet(&[_]Feature{}),
221221 };
222 result[@intFromEnum(Feature.lpmx)] = .{
222 result[@backingInt(Feature.lpmx)] = .{
223223 .llvm_name = "lpmx",
224224 .description = "The device supports the `LPM Rd, Z[+]` instruction",
225225 .dependencies = featureSet(&[_]Feature{}),
226226 };
227 result[@intFromEnum(Feature.memmappedregs)] = .{
227 result[@backingInt(Feature.memmappedregs)] = .{
228228 .llvm_name = "memmappedregs",
229229 .description = "The device has CPU registers mapped in data address space",
230230 .dependencies = featureSet(&[_]Feature{}),
231231 };
232 result[@intFromEnum(Feature.movw)] = .{
232 result[@backingInt(Feature.movw)] = .{
233233 .llvm_name = "movw",
234234 .description = "The device supports the 16-bit MOVW instruction",
235235 .dependencies = featureSet(&[_]Feature{}),
236236 };
237 result[@intFromEnum(Feature.mul)] = .{
237 result[@backingInt(Feature.mul)] = .{
238238 .llvm_name = "mul",
239239 .description = "The device supports the multiplication instructions",
240240 .dependencies = featureSet(&[_]Feature{}),
241241 };
242 result[@intFromEnum(Feature.rmw)] = .{
242 result[@backingInt(Feature.rmw)] = .{
243243 .llvm_name = "rmw",
244244 .description = "The device supports the read-write-modify instructions: XCH, LAS, LAC, LAT",
245245 .dependencies = featureSet(&[_]Feature{}),
246246 };
247 result[@intFromEnum(Feature.smallstack)] = .{
247 result[@backingInt(Feature.smallstack)] = .{
248248 .llvm_name = "smallstack",
249249 .description = "The device has an 8-bit stack pointer",
250250 .dependencies = featureSet(&[_]Feature{}),
251251 };
252 result[@intFromEnum(Feature.special)] = .{
252 result[@backingInt(Feature.special)] = .{
253253 .llvm_name = "special",
254254 .description = "Enable use of the entire instruction set - used for debugging",
255255 .dependencies = featureSet(&[_]Feature{
......@@ -272,32 +272,32 @@ pub const all_features = blk: {
272272 .sram,
273273 }),
274274 };
275 result[@intFromEnum(Feature.spm)] = .{
275 result[@backingInt(Feature.spm)] = .{
276276 .llvm_name = "spm",
277277 .description = "The device supports the `SPM` instruction",
278278 .dependencies = featureSet(&[_]Feature{}),
279279 };
280 result[@intFromEnum(Feature.spmx)] = .{
280 result[@backingInt(Feature.spmx)] = .{
281281 .llvm_name = "spmx",
282282 .description = "The device supports the `SPM Z+` instruction",
283283 .dependencies = featureSet(&[_]Feature{}),
284284 };
285 result[@intFromEnum(Feature.sram)] = .{
285 result[@backingInt(Feature.sram)] = .{
286286 .llvm_name = "sram",
287287 .description = "The device has random access memory",
288288 .dependencies = featureSet(&[_]Feature{}),
289289 };
290 result[@intFromEnum(Feature.tinyencoding)] = .{
290 result[@backingInt(Feature.tinyencoding)] = .{
291291 .llvm_name = "tinyencoding",
292292 .description = "The device has Tiny core specific instruction encodings",
293293 .dependencies = featureSet(&[_]Feature{}),
294294 };
295 result[@intFromEnum(Feature.wrappingrjmp)] = .{
295 result[@backingInt(Feature.wrappingrjmp)] = .{
296296 .llvm_name = "wrappingrjmp",
297297 .description = "The device potentially requires emitting rjmp that wraps across the flash boundary",
298298 .dependencies = featureSet(&[_]Feature{}),
299299 };
300 result[@intFromEnum(Feature.xmega)] = .{
300 result[@backingInt(Feature.xmega)] = .{
301301 .llvm_name = "xmega",
302302 .description = "The device is a part of the xmega family",
303303 .dependencies = featureSet(&[_]Feature{
......@@ -320,7 +320,7 @@ pub const all_features = blk: {
320320 .sram,
321321 }),
322322 };
323 result[@intFromEnum(Feature.xmega2)] = .{
323 result[@backingInt(Feature.xmega2)] = .{
324324 .llvm_name = "xmega2",
325325 .description = "The device is a part of the xmega2 family",
326326 .dependencies = featureSet(&[_]Feature{
......@@ -339,7 +339,7 @@ pub const all_features = blk: {
339339 .sram,
340340 }),
341341 };
342 result[@intFromEnum(Feature.xmega3)] = .{
342 result[@backingInt(Feature.xmega3)] = .{
343343 .llvm_name = "xmega3",
344344 .description = "The device is a part of the xmega3 family",
345345 .dependencies = featureSet(&[_]Feature{
......@@ -356,7 +356,7 @@ pub const all_features = blk: {
356356 .sram,
357357 }),
358358 };
359 result[@intFromEnum(Feature.xmega4)] = .{
359 result[@backingInt(Feature.xmega4)] = .{
360360 .llvm_name = "xmega4",
361361 .description = "The device is a part of the xmega4 family",
362362 .dependencies = featureSet(&[_]Feature{
......@@ -377,7 +377,7 @@ pub const all_features = blk: {
377377 .sram,
378378 }),
379379 };
380 result[@intFromEnum(Feature.xmegau)] = .{
380 result[@backingInt(Feature.xmegau)] = .{
381381 .llvm_name = "xmegau",
382382 .description = "The device is a part of the xmegau family",
383383 .dependencies = featureSet(&[_]Feature{
lib/std/Target/bpf.zig+4-4
......@@ -20,22 +20,22 @@ pub const all_features = blk: {
2020 const len = @typeInfo(Feature).@"enum".field_names.len;
2121 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
2222 var result: [len]CpuFeature = undefined;
23 result[@intFromEnum(Feature.allows_misaligned_mem_access)] = .{
23 result[@backingInt(Feature.allows_misaligned_mem_access)] = .{
2424 .llvm_name = "allows-misaligned-mem-access",
2525 .description = "Allows misaligned memory access",
2626 .dependencies = featureSet(&[_]Feature{}),
2727 };
28 result[@intFromEnum(Feature.alu32)] = .{
28 result[@backingInt(Feature.alu32)] = .{
2929 .llvm_name = "alu32",
3030 .description = "Enable ALU32 instructions",
3131 .dependencies = featureSet(&[_]Feature{}),
3232 };
33 result[@intFromEnum(Feature.dummy)] = .{
33 result[@backingInt(Feature.dummy)] = .{
3434 .llvm_name = "dummy",
3535 .description = "unused feature",
3636 .dependencies = featureSet(&[_]Feature{}),
3737 };
38 result[@intFromEnum(Feature.dwarfris)] = .{
38 result[@backingInt(Feature.dwarfris)] = .{
3939 .llvm_name = "dwarfris",
4040 .description = "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections",
4141 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/csky.zig+63-63
......@@ -79,26 +79,26 @@ pub const all_features = blk: {
7979 const len = @typeInfo(Feature).@"enum".field_names.len;
8080 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
8181 var result: [len]CpuFeature = undefined;
82 result[@intFromEnum(Feature.@"10e60")] = .{
82 result[@backingInt(Feature.@"10e60")] = .{
8383 .llvm_name = "10e60",
8484 .description = "Support CSKY 10e60 instructions",
8585 .dependencies = featureSet(&[_]Feature{
8686 .@"7e10",
8787 }),
8888 };
89 result[@intFromEnum(Feature.@"2e3")] = .{
89 result[@backingInt(Feature.@"2e3")] = .{
9090 .llvm_name = "2e3",
9191 .description = "Support CSKY 2e3 instructions",
9292 .dependencies = featureSet(&[_]Feature{
9393 .e2,
9494 }),
9595 };
96 result[@intFromEnum(Feature.@"3e3r1")] = .{
96 result[@backingInt(Feature.@"3e3r1")] = .{
9797 .llvm_name = "3e3r1",
9898 .description = "Support CSKY 3e3r1 instructions",
9999 .dependencies = featureSet(&[_]Feature{}),
100100 };
101 result[@intFromEnum(Feature.@"3e3r2")] = .{
101 result[@backingInt(Feature.@"3e3r2")] = .{
102102 .llvm_name = "3e3r2",
103103 .description = "Support CSKY 3e3r2 instructions",
104104 .dependencies = featureSet(&[_]Feature{
......@@ -106,311 +106,311 @@ pub const all_features = blk: {
106106 .doloop,
107107 }),
108108 };
109 result[@intFromEnum(Feature.@"3e3r3")] = .{
109 result[@backingInt(Feature.@"3e3r3")] = .{
110110 .llvm_name = "3e3r3",
111111 .description = "Support CSKY 3e3r3 instructions",
112112 .dependencies = featureSet(&[_]Feature{
113113 .doloop,
114114 }),
115115 };
116 result[@intFromEnum(Feature.@"3e7")] = .{
116 result[@backingInt(Feature.@"3e7")] = .{
117117 .llvm_name = "3e7",
118118 .description = "Support CSKY 3e7 instructions",
119119 .dependencies = featureSet(&[_]Feature{
120120 .@"2e3",
121121 }),
122122 };
123 result[@intFromEnum(Feature.@"7e10")] = .{
123 result[@backingInt(Feature.@"7e10")] = .{
124124 .llvm_name = "7e10",
125125 .description = "Support CSKY 7e10 instructions",
126126 .dependencies = featureSet(&[_]Feature{
127127 .@"3e7",
128128 }),
129129 };
130 result[@intFromEnum(Feature.btst16)] = .{
130 result[@backingInt(Feature.btst16)] = .{
131131 .llvm_name = "btst16",
132132 .description = "Use the 16-bit btsti instruction",
133133 .dependencies = featureSet(&[_]Feature{}),
134134 };
135 result[@intFromEnum(Feature.cache)] = .{
135 result[@backingInt(Feature.cache)] = .{
136136 .llvm_name = "cache",
137137 .description = "Enable cache",
138138 .dependencies = featureSet(&[_]Feature{}),
139139 };
140 result[@intFromEnum(Feature.ccrt)] = .{
140 result[@backingInt(Feature.ccrt)] = .{
141141 .llvm_name = "ccrt",
142142 .description = "Use CSKY compiler runtime",
143143 .dependencies = featureSet(&[_]Feature{}),
144144 };
145 result[@intFromEnum(Feature.ck801)] = .{
145 result[@backingInt(Feature.ck801)] = .{
146146 .llvm_name = "ck801",
147147 .description = "CSKY ck801 processors",
148148 .dependencies = featureSet(&[_]Feature{}),
149149 };
150 result[@intFromEnum(Feature.ck802)] = .{
150 result[@backingInt(Feature.ck802)] = .{
151151 .llvm_name = "ck802",
152152 .description = "CSKY ck802 processors",
153153 .dependencies = featureSet(&[_]Feature{}),
154154 };
155 result[@intFromEnum(Feature.ck803)] = .{
155 result[@backingInt(Feature.ck803)] = .{
156156 .llvm_name = "ck803",
157157 .description = "CSKY ck803 processors",
158158 .dependencies = featureSet(&[_]Feature{}),
159159 };
160 result[@intFromEnum(Feature.ck803s)] = .{
160 result[@backingInt(Feature.ck803s)] = .{
161161 .llvm_name = "ck803s",
162162 .description = "CSKY ck803s processors",
163163 .dependencies = featureSet(&[_]Feature{}),
164164 };
165 result[@intFromEnum(Feature.ck804)] = .{
165 result[@backingInt(Feature.ck804)] = .{
166166 .llvm_name = "ck804",
167167 .description = "CSKY ck804 processors",
168168 .dependencies = featureSet(&[_]Feature{}),
169169 };
170 result[@intFromEnum(Feature.ck805)] = .{
170 result[@backingInt(Feature.ck805)] = .{
171171 .llvm_name = "ck805",
172172 .description = "CSKY ck805 processors",
173173 .dependencies = featureSet(&[_]Feature{}),
174174 };
175 result[@intFromEnum(Feature.ck807)] = .{
175 result[@backingInt(Feature.ck807)] = .{
176176 .llvm_name = "ck807",
177177 .description = "CSKY ck807 processors",
178178 .dependencies = featureSet(&[_]Feature{}),
179179 };
180 result[@intFromEnum(Feature.ck810)] = .{
180 result[@backingInt(Feature.ck810)] = .{
181181 .llvm_name = "ck810",
182182 .description = "CSKY ck810 processors",
183183 .dependencies = featureSet(&[_]Feature{}),
184184 };
185 result[@intFromEnum(Feature.ck810v)] = .{
185 result[@backingInt(Feature.ck810v)] = .{
186186 .llvm_name = "ck810v",
187187 .description = "CSKY ck810v processors",
188188 .dependencies = featureSet(&[_]Feature{}),
189189 };
190 result[@intFromEnum(Feature.ck860)] = .{
190 result[@backingInt(Feature.ck860)] = .{
191191 .llvm_name = "ck860",
192192 .description = "CSKY ck860 processors",
193193 .dependencies = featureSet(&[_]Feature{}),
194194 };
195 result[@intFromEnum(Feature.ck860v)] = .{
195 result[@backingInt(Feature.ck860v)] = .{
196196 .llvm_name = "ck860v",
197197 .description = "CSKY ck860v processors",
198198 .dependencies = featureSet(&[_]Feature{}),
199199 };
200 result[@intFromEnum(Feature.constpool)] = .{
200 result[@backingInt(Feature.constpool)] = .{
201201 .llvm_name = "constpool",
202202 .description = "Dump the constant pool by compiler",
203203 .dependencies = featureSet(&[_]Feature{}),
204204 };
205 result[@intFromEnum(Feature.doloop)] = .{
205 result[@backingInt(Feature.doloop)] = .{
206206 .llvm_name = "doloop",
207207 .description = "Enable doloop instructions",
208208 .dependencies = featureSet(&[_]Feature{}),
209209 };
210 result[@intFromEnum(Feature.dsp1e2)] = .{
210 result[@backingInt(Feature.dsp1e2)] = .{
211211 .llvm_name = "dsp1e2",
212212 .description = "Support CSKY dsp1e2 instructions",
213213 .dependencies = featureSet(&[_]Feature{}),
214214 };
215 result[@intFromEnum(Feature.dsp_silan)] = .{
215 result[@backingInt(Feature.dsp_silan)] = .{
216216 .llvm_name = "dsp_silan",
217217 .description = "Enable DSP Silan instructions",
218218 .dependencies = featureSet(&[_]Feature{}),
219219 };
220 result[@intFromEnum(Feature.dspe60)] = .{
220 result[@backingInt(Feature.dspe60)] = .{
221221 .llvm_name = "dspe60",
222222 .description = "Support CSKY dspe60 instructions",
223223 .dependencies = featureSet(&[_]Feature{}),
224224 };
225 result[@intFromEnum(Feature.dspv2)] = .{
225 result[@backingInt(Feature.dspv2)] = .{
226226 .llvm_name = "dspv2",
227227 .description = "Enable DSP V2.0 instructions",
228228 .dependencies = featureSet(&[_]Feature{}),
229229 };
230 result[@intFromEnum(Feature.e1)] = .{
230 result[@backingInt(Feature.e1)] = .{
231231 .llvm_name = "e1",
232232 .description = "Support CSKY e1 instructions",
233233 .dependencies = featureSet(&[_]Feature{
234234 .elrw,
235235 }),
236236 };
237 result[@intFromEnum(Feature.e2)] = .{
237 result[@backingInt(Feature.e2)] = .{
238238 .llvm_name = "e2",
239239 .description = "Support CSKY e2 instructions",
240240 .dependencies = featureSet(&[_]Feature{
241241 .e1,
242242 }),
243243 };
244 result[@intFromEnum(Feature.edsp)] = .{
244 result[@backingInt(Feature.edsp)] = .{
245245 .llvm_name = "edsp",
246246 .description = "Enable DSP instructions",
247247 .dependencies = featureSet(&[_]Feature{}),
248248 };
249 result[@intFromEnum(Feature.elrw)] = .{
249 result[@backingInt(Feature.elrw)] = .{
250250 .llvm_name = "elrw",
251251 .description = "Use the extend LRW instruction",
252252 .dependencies = featureSet(&[_]Feature{}),
253253 };
254 result[@intFromEnum(Feature.fdivdu)] = .{
254 result[@backingInt(Feature.fdivdu)] = .{
255255 .llvm_name = "fdivdu",
256256 .description = "Enable float divide instructions",
257257 .dependencies = featureSet(&[_]Feature{}),
258258 };
259 result[@intFromEnum(Feature.float1e2)] = .{
259 result[@backingInt(Feature.float1e2)] = .{
260260 .llvm_name = "float1e2",
261261 .description = "Support CSKY float1e2 instructions",
262262 .dependencies = featureSet(&[_]Feature{}),
263263 };
264 result[@intFromEnum(Feature.float1e3)] = .{
264 result[@backingInt(Feature.float1e3)] = .{
265265 .llvm_name = "float1e3",
266266 .description = "Support CSKY float1e3 instructions",
267267 .dependencies = featureSet(&[_]Feature{}),
268268 };
269 result[@intFromEnum(Feature.float3e4)] = .{
269 result[@backingInt(Feature.float3e4)] = .{
270270 .llvm_name = "float3e4",
271271 .description = "Support CSKY float3e4 instructions",
272272 .dependencies = featureSet(&[_]Feature{}),
273273 };
274 result[@intFromEnum(Feature.float7e60)] = .{
274 result[@backingInt(Feature.float7e60)] = .{
275275 .llvm_name = "float7e60",
276276 .description = "Support CSKY float7e60 instructions",
277277 .dependencies = featureSet(&[_]Feature{}),
278278 };
279 result[@intFromEnum(Feature.floate1)] = .{
279 result[@backingInt(Feature.floate1)] = .{
280280 .llvm_name = "floate1",
281281 .description = "Support CSKY floate1 instructions",
282282 .dependencies = featureSet(&[_]Feature{}),
283283 };
284 result[@intFromEnum(Feature.fpuv2_df)] = .{
284 result[@backingInt(Feature.fpuv2_df)] = .{
285285 .llvm_name = "fpuv2_df",
286286 .description = "Enable FPUv2 double float instructions",
287287 .dependencies = featureSet(&[_]Feature{}),
288288 };
289 result[@intFromEnum(Feature.fpuv2_sf)] = .{
289 result[@backingInt(Feature.fpuv2_sf)] = .{
290290 .llvm_name = "fpuv2_sf",
291291 .description = "Enable FPUv2 single float instructions",
292292 .dependencies = featureSet(&[_]Feature{}),
293293 };
294 result[@intFromEnum(Feature.fpuv3_df)] = .{
294 result[@backingInt(Feature.fpuv3_df)] = .{
295295 .llvm_name = "fpuv3_df",
296296 .description = "Enable FPUv3 double float instructions",
297297 .dependencies = featureSet(&[_]Feature{}),
298298 };
299 result[@intFromEnum(Feature.fpuv3_hf)] = .{
299 result[@backingInt(Feature.fpuv3_hf)] = .{
300300 .llvm_name = "fpuv3_hf",
301301 .description = "Enable FPUv3 half precision operate instructions",
302302 .dependencies = featureSet(&[_]Feature{}),
303303 };
304 result[@intFromEnum(Feature.fpuv3_hi)] = .{
304 result[@backingInt(Feature.fpuv3_hi)] = .{
305305 .llvm_name = "fpuv3_hi",
306306 .description = "Enable FPUv3 half word converting instructions",
307307 .dependencies = featureSet(&[_]Feature{}),
308308 };
309 result[@intFromEnum(Feature.fpuv3_sf)] = .{
309 result[@backingInt(Feature.fpuv3_sf)] = .{
310310 .llvm_name = "fpuv3_sf",
311311 .description = "Enable FPUv3 single float instructions",
312312 .dependencies = featureSet(&[_]Feature{}),
313313 };
314 result[@intFromEnum(Feature.hard_float)] = .{
314 result[@backingInt(Feature.hard_float)] = .{
315315 .llvm_name = "hard-float",
316316 .description = "Use hard floating point features",
317317 .dependencies = featureSet(&[_]Feature{}),
318318 };
319 result[@intFromEnum(Feature.hard_float_abi)] = .{
319 result[@backingInt(Feature.hard_float_abi)] = .{
320320 .llvm_name = "hard-float-abi",
321321 .description = "Use hard floating point ABI to pass args",
322322 .dependencies = featureSet(&[_]Feature{}),
323323 };
324 result[@intFromEnum(Feature.hard_tp)] = .{
324 result[@backingInt(Feature.hard_tp)] = .{
325325 .llvm_name = "hard-tp",
326326 .description = "Enable TLS Pointer register",
327327 .dependencies = featureSet(&[_]Feature{}),
328328 };
329 result[@intFromEnum(Feature.high_registers)] = .{
329 result[@backingInt(Feature.high_registers)] = .{
330330 .llvm_name = "high-registers",
331331 .description = "Enable r16-r31 registers",
332332 .dependencies = featureSet(&[_]Feature{}),
333333 };
334 result[@intFromEnum(Feature.hwdiv)] = .{
334 result[@backingInt(Feature.hwdiv)] = .{
335335 .llvm_name = "hwdiv",
336336 .description = "Enable divide instructions",
337337 .dependencies = featureSet(&[_]Feature{}),
338338 };
339 result[@intFromEnum(Feature.istack)] = .{
339 result[@backingInt(Feature.istack)] = .{
340340 .llvm_name = "istack",
341341 .description = "Enable interrupt attribute",
342342 .dependencies = featureSet(&[_]Feature{}),
343343 };
344 result[@intFromEnum(Feature.java)] = .{
344 result[@backingInt(Feature.java)] = .{
345345 .llvm_name = "java",
346346 .description = "Enable java instructions",
347347 .dependencies = featureSet(&[_]Feature{}),
348348 };
349 result[@intFromEnum(Feature.mp)] = .{
349 result[@backingInt(Feature.mp)] = .{
350350 .llvm_name = "mp",
351351 .description = "Support CSKY mp instructions",
352352 .dependencies = featureSet(&[_]Feature{
353353 .@"2e3",
354354 }),
355355 };
356 result[@intFromEnum(Feature.mp1e2)] = .{
356 result[@backingInt(Feature.mp1e2)] = .{
357357 .llvm_name = "mp1e2",
358358 .description = "Support CSKY mp1e2 instructions",
359359 .dependencies = featureSet(&[_]Feature{
360360 .@"3e7",
361361 }),
362362 };
363 result[@intFromEnum(Feature.multiple_stld)] = .{
363 result[@backingInt(Feature.multiple_stld)] = .{
364364 .llvm_name = "multiple_stld",
365365 .description = "Enable multiple load/store instructions",
366366 .dependencies = featureSet(&[_]Feature{}),
367367 };
368 result[@intFromEnum(Feature.nvic)] = .{
368 result[@backingInt(Feature.nvic)] = .{
369369 .llvm_name = "nvic",
370370 .description = "Enable NVIC",
371371 .dependencies = featureSet(&[_]Feature{}),
372372 };
373 result[@intFromEnum(Feature.pushpop)] = .{
373 result[@backingInt(Feature.pushpop)] = .{
374374 .llvm_name = "pushpop",
375375 .description = "Enable push/pop instructions",
376376 .dependencies = featureSet(&[_]Feature{}),
377377 };
378 result[@intFromEnum(Feature.smart)] = .{
378 result[@backingInt(Feature.smart)] = .{
379379 .llvm_name = "smart",
380380 .description = "Let CPU work in Smart Mode",
381381 .dependencies = featureSet(&[_]Feature{}),
382382 };
383 result[@intFromEnum(Feature.soft_tp)] = .{
383 result[@backingInt(Feature.soft_tp)] = .{
384384 .llvm_name = "soft-tp",
385385 .description = "Disable TLS Pointer register",
386386 .dependencies = featureSet(&[_]Feature{}),
387387 };
388 result[@intFromEnum(Feature.stack_size)] = .{
388 result[@backingInt(Feature.stack_size)] = .{
389389 .llvm_name = "stack-size",
390390 .description = "Output stack size information",
391391 .dependencies = featureSet(&[_]Feature{}),
392392 };
393 result[@intFromEnum(Feature.trust)] = .{
393 result[@backingInt(Feature.trust)] = .{
394394 .llvm_name = "trust",
395395 .description = "Enable trust instructions",
396396 .dependencies = featureSet(&[_]Feature{}),
397397 };
398 result[@intFromEnum(Feature.vdsp2e3)] = .{
398 result[@backingInt(Feature.vdsp2e3)] = .{
399399 .llvm_name = "vdsp2e3",
400400 .description = "Support CSKY vdsp2e3 instructions",
401401 .dependencies = featureSet(&[_]Feature{}),
402402 };
403 result[@intFromEnum(Feature.vdsp2e60f)] = .{
403 result[@backingInt(Feature.vdsp2e60f)] = .{
404404 .llvm_name = "vdsp2e60f",
405405 .description = "Support CSKY vdsp2e60f instructions",
406406 .dependencies = featureSet(&[_]Feature{}),
407407 };
408 result[@intFromEnum(Feature.vdspv1)] = .{
408 result[@backingInt(Feature.vdspv1)] = .{
409409 .llvm_name = "vdspv1",
410410 .description = "Enable 128bit vdsp-v1 instructions",
411411 .dependencies = featureSet(&[_]Feature{}),
412412 };
413 result[@intFromEnum(Feature.vdspv2)] = .{
413 result[@backingInt(Feature.vdspv2)] = .{
414414 .llvm_name = "vdspv2",
415415 .description = "Enable vdsp-v2 instructions",
416416 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/hexagon.zig+47-47
......@@ -63,77 +63,77 @@ pub const all_features = blk: {
6363 const len = @typeInfo(Feature).@"enum".field_names.len;
6464 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
6565 var result: [len]CpuFeature = undefined;
66 result[@intFromEnum(Feature.audio)] = .{
66 result[@backingInt(Feature.audio)] = .{
6767 .llvm_name = "audio",
6868 .description = "Hexagon Audio extension instructions",
6969 .dependencies = featureSet(&[_]Feature{}),
7070 };
71 result[@intFromEnum(Feature.cabac)] = .{
71 result[@backingInt(Feature.cabac)] = .{
7272 .llvm_name = "cabac",
7373 .description = "Emit the CABAC instruction",
7474 .dependencies = featureSet(&[_]Feature{}),
7575 };
76 result[@intFromEnum(Feature.compound)] = .{
76 result[@backingInt(Feature.compound)] = .{
7777 .llvm_name = "compound",
7878 .description = "Use compound instructions",
7979 .dependencies = featureSet(&[_]Feature{}),
8080 };
81 result[@intFromEnum(Feature.duplex)] = .{
81 result[@backingInt(Feature.duplex)] = .{
8282 .llvm_name = "duplex",
8383 .description = "Enable generation of duplex instruction",
8484 .dependencies = featureSet(&[_]Feature{}),
8585 };
86 result[@intFromEnum(Feature.hvx)] = .{
86 result[@backingInt(Feature.hvx)] = .{
8787 .llvm_name = "hvx",
8888 .description = "Hexagon HVX instructions",
8989 .dependencies = featureSet(&[_]Feature{}),
9090 };
91 result[@intFromEnum(Feature.hvx_ieee_fp)] = .{
91 result[@backingInt(Feature.hvx_ieee_fp)] = .{
9292 .llvm_name = "hvx-ieee-fp",
9393 .description = "Hexagon HVX IEEE floating point instructions",
9494 .dependencies = featureSet(&[_]Feature{}),
9595 };
96 result[@intFromEnum(Feature.hvx_length128b)] = .{
96 result[@backingInt(Feature.hvx_length128b)] = .{
9797 .llvm_name = "hvx-length128b",
9898 .description = "Hexagon HVX 128B instructions",
9999 .dependencies = featureSet(&[_]Feature{
100100 .hvx,
101101 }),
102102 };
103 result[@intFromEnum(Feature.hvx_length64b)] = .{
103 result[@backingInt(Feature.hvx_length64b)] = .{
104104 .llvm_name = "hvx-length64b",
105105 .description = "Hexagon HVX 64B instructions",
106106 .dependencies = featureSet(&[_]Feature{
107107 .hvx,
108108 }),
109109 };
110 result[@intFromEnum(Feature.hvx_qfloat)] = .{
110 result[@backingInt(Feature.hvx_qfloat)] = .{
111111 .llvm_name = "hvx-qfloat",
112112 .description = "Hexagon HVX QFloating point instructions",
113113 .dependencies = featureSet(&[_]Feature{}),
114114 };
115 result[@intFromEnum(Feature.hvxv60)] = .{
115 result[@backingInt(Feature.hvxv60)] = .{
116116 .llvm_name = "hvxv60",
117117 .description = "Hexagon HVX instructions",
118118 .dependencies = featureSet(&[_]Feature{
119119 .hvx,
120120 }),
121121 };
122 result[@intFromEnum(Feature.hvxv62)] = .{
122 result[@backingInt(Feature.hvxv62)] = .{
123123 .llvm_name = "hvxv62",
124124 .description = "Hexagon HVX instructions",
125125 .dependencies = featureSet(&[_]Feature{
126126 .hvxv60,
127127 }),
128128 };
129 result[@intFromEnum(Feature.hvxv65)] = .{
129 result[@backingInt(Feature.hvxv65)] = .{
130130 .llvm_name = "hvxv65",
131131 .description = "Hexagon HVX instructions",
132132 .dependencies = featureSet(&[_]Feature{
133133 .hvxv62,
134134 }),
135135 };
136 result[@intFromEnum(Feature.hvxv66)] = .{
136 result[@backingInt(Feature.hvxv66)] = .{
137137 .llvm_name = "hvxv66",
138138 .description = "Hexagon HVX instructions",
139139 .dependencies = featureSet(&[_]Feature{
......@@ -141,192 +141,192 @@ pub const all_features = blk: {
141141 .zreg,
142142 }),
143143 };
144 result[@intFromEnum(Feature.hvxv67)] = .{
144 result[@backingInt(Feature.hvxv67)] = .{
145145 .llvm_name = "hvxv67",
146146 .description = "Hexagon HVX instructions",
147147 .dependencies = featureSet(&[_]Feature{
148148 .hvxv66,
149149 }),
150150 };
151 result[@intFromEnum(Feature.hvxv68)] = .{
151 result[@backingInt(Feature.hvxv68)] = .{
152152 .llvm_name = "hvxv68",
153153 .description = "Hexagon HVX instructions",
154154 .dependencies = featureSet(&[_]Feature{
155155 .hvxv67,
156156 }),
157157 };
158 result[@intFromEnum(Feature.hvxv69)] = .{
158 result[@backingInt(Feature.hvxv69)] = .{
159159 .llvm_name = "hvxv69",
160160 .description = "Hexagon HVX instructions",
161161 .dependencies = featureSet(&[_]Feature{
162162 .hvxv68,
163163 }),
164164 };
165 result[@intFromEnum(Feature.hvxv71)] = .{
165 result[@backingInt(Feature.hvxv71)] = .{
166166 .llvm_name = "hvxv71",
167167 .description = "Hexagon HVX instructions",
168168 .dependencies = featureSet(&[_]Feature{
169169 .hvxv69,
170170 }),
171171 };
172 result[@intFromEnum(Feature.hvxv73)] = .{
172 result[@backingInt(Feature.hvxv73)] = .{
173173 .llvm_name = "hvxv73",
174174 .description = "Hexagon HVX instructions",
175175 .dependencies = featureSet(&[_]Feature{
176176 .hvxv71,
177177 }),
178178 };
179 result[@intFromEnum(Feature.hvxv75)] = .{
179 result[@backingInt(Feature.hvxv75)] = .{
180180 .llvm_name = "hvxv75",
181181 .description = "Hexagon HVX instructions",
182182 .dependencies = featureSet(&[_]Feature{
183183 .hvxv73,
184184 }),
185185 };
186 result[@intFromEnum(Feature.hvxv79)] = .{
186 result[@backingInt(Feature.hvxv79)] = .{
187187 .llvm_name = "hvxv79",
188188 .description = "Hexagon HVX instructions",
189189 .dependencies = featureSet(&[_]Feature{
190190 .hvxv75,
191191 }),
192192 };
193 result[@intFromEnum(Feature.hvxv81)] = .{
193 result[@backingInt(Feature.hvxv81)] = .{
194194 .llvm_name = "hvxv81",
195195 .description = "Hexagon HVX instructions",
196196 .dependencies = featureSet(&[_]Feature{
197197 .hvxv79,
198198 }),
199199 };
200 result[@intFromEnum(Feature.long_calls)] = .{
200 result[@backingInt(Feature.long_calls)] = .{
201201 .llvm_name = "long-calls",
202202 .description = "Use constant-extended calls",
203203 .dependencies = featureSet(&[_]Feature{}),
204204 };
205 result[@intFromEnum(Feature.mem_noshuf)] = .{
205 result[@backingInt(Feature.mem_noshuf)] = .{
206206 .llvm_name = "mem_noshuf",
207207 .description = "Supports mem_noshuf feature",
208208 .dependencies = featureSet(&[_]Feature{}),
209209 };
210 result[@intFromEnum(Feature.memops)] = .{
210 result[@backingInt(Feature.memops)] = .{
211211 .llvm_name = "memops",
212212 .description = "Use memop instructions",
213213 .dependencies = featureSet(&[_]Feature{}),
214214 };
215 result[@intFromEnum(Feature.noreturn_stack_elim)] = .{
215 result[@backingInt(Feature.noreturn_stack_elim)] = .{
216216 .llvm_name = "noreturn-stack-elim",
217217 .description = "Eliminate stack allocation in a noreturn function when possible",
218218 .dependencies = featureSet(&[_]Feature{}),
219219 };
220 result[@intFromEnum(Feature.nvj)] = .{
220 result[@backingInt(Feature.nvj)] = .{
221221 .llvm_name = "nvj",
222222 .description = "Support for new-value jumps",
223223 .dependencies = featureSet(&[_]Feature{
224224 .packets,
225225 }),
226226 };
227 result[@intFromEnum(Feature.nvs)] = .{
227 result[@backingInt(Feature.nvs)] = .{
228228 .llvm_name = "nvs",
229229 .description = "Support for new-value stores",
230230 .dependencies = featureSet(&[_]Feature{
231231 .packets,
232232 }),
233233 };
234 result[@intFromEnum(Feature.packets)] = .{
234 result[@backingInt(Feature.packets)] = .{
235235 .llvm_name = "packets",
236236 .description = "Support for instruction packets",
237237 .dependencies = featureSet(&[_]Feature{}),
238238 };
239 result[@intFromEnum(Feature.prev65)] = .{
239 result[@backingInt(Feature.prev65)] = .{
240240 .llvm_name = "prev65",
241241 .description = "Support features deprecated in v65",
242242 .dependencies = featureSet(&[_]Feature{}),
243243 };
244 result[@intFromEnum(Feature.reserved_r19)] = .{
244 result[@backingInt(Feature.reserved_r19)] = .{
245245 .llvm_name = "reserved-r19",
246246 .description = "Reserve register R19",
247247 .dependencies = featureSet(&[_]Feature{}),
248248 };
249 result[@intFromEnum(Feature.small_data)] = .{
249 result[@backingInt(Feature.small_data)] = .{
250250 .llvm_name = "small-data",
251251 .description = "Allow GP-relative addressing of global variables",
252252 .dependencies = featureSet(&[_]Feature{}),
253253 };
254 result[@intFromEnum(Feature.tinycore)] = .{
254 result[@backingInt(Feature.tinycore)] = .{
255255 .llvm_name = "tinycore",
256256 .description = "Hexagon Tiny Core",
257257 .dependencies = featureSet(&[_]Feature{}),
258258 };
259 result[@intFromEnum(Feature.v5)] = .{
259 result[@backingInt(Feature.v5)] = .{
260260 .llvm_name = "v5",
261261 .description = "Enable Hexagon V5 architecture",
262262 .dependencies = featureSet(&[_]Feature{}),
263263 };
264 result[@intFromEnum(Feature.v55)] = .{
264 result[@backingInt(Feature.v55)] = .{
265265 .llvm_name = "v55",
266266 .description = "Enable Hexagon V55 architecture",
267267 .dependencies = featureSet(&[_]Feature{}),
268268 };
269 result[@intFromEnum(Feature.v60)] = .{
269 result[@backingInt(Feature.v60)] = .{
270270 .llvm_name = "v60",
271271 .description = "Enable Hexagon V60 architecture",
272272 .dependencies = featureSet(&[_]Feature{}),
273273 };
274 result[@intFromEnum(Feature.v62)] = .{
274 result[@backingInt(Feature.v62)] = .{
275275 .llvm_name = "v62",
276276 .description = "Enable Hexagon V62 architecture",
277277 .dependencies = featureSet(&[_]Feature{}),
278278 };
279 result[@intFromEnum(Feature.v65)] = .{
279 result[@backingInt(Feature.v65)] = .{
280280 .llvm_name = "v65",
281281 .description = "Enable Hexagon V65 architecture",
282282 .dependencies = featureSet(&[_]Feature{}),
283283 };
284 result[@intFromEnum(Feature.v66)] = .{
284 result[@backingInt(Feature.v66)] = .{
285285 .llvm_name = "v66",
286286 .description = "Enable Hexagon V66 architecture",
287287 .dependencies = featureSet(&[_]Feature{}),
288288 };
289 result[@intFromEnum(Feature.v67)] = .{
289 result[@backingInt(Feature.v67)] = .{
290290 .llvm_name = "v67",
291291 .description = "Enable Hexagon V67 architecture",
292292 .dependencies = featureSet(&[_]Feature{}),
293293 };
294 result[@intFromEnum(Feature.v68)] = .{
294 result[@backingInt(Feature.v68)] = .{
295295 .llvm_name = "v68",
296296 .description = "Enable Hexagon V68 architecture",
297297 .dependencies = featureSet(&[_]Feature{}),
298298 };
299 result[@intFromEnum(Feature.v69)] = .{
299 result[@backingInt(Feature.v69)] = .{
300300 .llvm_name = "v69",
301301 .description = "Enable Hexagon V69 architecture",
302302 .dependencies = featureSet(&[_]Feature{}),
303303 };
304 result[@intFromEnum(Feature.v71)] = .{
304 result[@backingInt(Feature.v71)] = .{
305305 .llvm_name = "v71",
306306 .description = "Enable Hexagon V71 architecture",
307307 .dependencies = featureSet(&[_]Feature{}),
308308 };
309 result[@intFromEnum(Feature.v73)] = .{
309 result[@backingInt(Feature.v73)] = .{
310310 .llvm_name = "v73",
311311 .description = "Enable Hexagon V73 architecture",
312312 .dependencies = featureSet(&[_]Feature{}),
313313 };
314 result[@intFromEnum(Feature.v75)] = .{
314 result[@backingInt(Feature.v75)] = .{
315315 .llvm_name = "v75",
316316 .description = "Enable Hexagon V75 architecture",
317317 .dependencies = featureSet(&[_]Feature{}),
318318 };
319 result[@intFromEnum(Feature.v79)] = .{
319 result[@backingInt(Feature.v79)] = .{
320320 .llvm_name = "v79",
321321 .description = "Enable Hexagon V79 architecture",
322322 .dependencies = featureSet(&[_]Feature{}),
323323 };
324 result[@intFromEnum(Feature.v81)] = .{
324 result[@backingInt(Feature.v81)] = .{
325325 .llvm_name = "v81",
326326 .description = "Enable Hexagon V81 architecture",
327327 .dependencies = featureSet(&[_]Feature{}),
328328 };
329 result[@intFromEnum(Feature.zreg)] = .{
329 result[@backingInt(Feature.zreg)] = .{
330330 .llvm_name = "zreg",
331331 .description = "Hexagon ZReg extension instructions",
332332 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/hppa.zig+5-5
......@@ -21,31 +21,31 @@ pub const all_features = blk: {
2121 const len = @typeInfo(Feature).@"enum".field_names.len;
2222 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
2323 var result: [len]CpuFeature = undefined;
24 result[@intFromEnum(Feature.@"64bit")] = .{
24 result[@backingInt(Feature.@"64bit")] = .{
2525 .llvm_name = null,
2626 .description = "Enable 64-bit PA-RISC 2.0",
2727 .dependencies = featureSet(&[_]Feature{
2828 .v2_0,
2929 }),
3030 };
31 result[@intFromEnum(Feature.max_1)] = .{
31 result[@backingInt(Feature.max_1)] = .{
3232 .llvm_name = null,
3333 .description = "Enable MAX-1 multimedia acceleration extensions",
3434 .dependencies = featureSet(&[_]Feature{}),
3535 };
36 result[@intFromEnum(Feature.max_2)] = .{
36 result[@backingInt(Feature.max_2)] = .{
3737 .llvm_name = null,
3838 .description = "Enable MAX-2 multimedia acceleration extensions",
3939 .dependencies = featureSet(&[_]Feature{
4040 .max_1,
4141 }),
4242 };
43 result[@intFromEnum(Feature.v1_1)] = .{
43 result[@backingInt(Feature.v1_1)] = .{
4444 .llvm_name = null,
4545 .description = "Enable ISA v1.1",
4646 .dependencies = featureSet(&[_]Feature{}),
4747 };
48 result[@intFromEnum(Feature.v2_0)] = .{
48 result[@backingInt(Feature.v2_0)] = .{
4949 .llvm_name = null,
5050 .description = "Enable ISA v2.0",
5151 .dependencies = featureSet(&[_]Feature{
lib/std/Target/kvx.zig+3-3
......@@ -19,19 +19,19 @@ pub const all_features = blk: {
1919 const len = @typeInfo(Feature).@"enum".field_names.len;
2020 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
2121 var result: [len]CpuFeature = undefined;
22 result[@intFromEnum(Feature.v3_1)] = .{
22 result[@backingInt(Feature.v3_1)] = .{
2323 .llvm_name = null,
2424 .description = "Enable ISA v3.1",
2525 .dependencies = featureSet(&[_]Feature{}),
2626 };
27 result[@intFromEnum(Feature.v3_2)] = .{
27 result[@backingInt(Feature.v3_2)] = .{
2828 .llvm_name = null,
2929 .description = "Enable ISA v3.2",
3030 .dependencies = featureSet(&[_]Feature{
3131 .v3_1,
3232 }),
3333 };
34 result[@intFromEnum(Feature.v4_1)] = .{
34 result[@backingInt(Feature.v4_1)] = .{
3535 .llvm_name = null,
3636 .description = "Enable ISA v4.1",
3737 .dependencies = featureSet(&[_]Feature{
lib/std/Target/loongarch.zig+21-21
......@@ -37,115 +37,115 @@ pub const all_features = blk: {
3737 const len = @typeInfo(Feature).@"enum".field_names.len;
3838 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
3939 var result: [len]CpuFeature = undefined;
40 result[@intFromEnum(Feature.@"32bit")] = .{
40 result[@backingInt(Feature.@"32bit")] = .{
4141 .llvm_name = "32bit",
4242 .description = "LA32 Basic Integer and Privilege Instruction Set",
4343 .dependencies = featureSet(&[_]Feature{}),
4444 };
45 result[@intFromEnum(Feature.@"32s")] = .{
45 result[@backingInt(Feature.@"32s")] = .{
4646 .llvm_name = "32s",
4747 .description = "LA32 Standard Basic Instruction Extension",
4848 .dependencies = featureSet(&[_]Feature{}),
4949 };
50 result[@intFromEnum(Feature.@"64bit")] = .{
50 result[@backingInt(Feature.@"64bit")] = .{
5151 .llvm_name = "64bit",
5252 .description = "LA64 Basic Integer and Privilege Instruction Set",
5353 .dependencies = featureSet(&[_]Feature{
5454 .@"32s",
5555 }),
5656 };
57 result[@intFromEnum(Feature.d)] = .{
57 result[@backingInt(Feature.d)] = .{
5858 .llvm_name = "d",
5959 .description = "'D' (Double-Precision Floating-Point)",
6060 .dependencies = featureSet(&[_]Feature{
6161 .f,
6262 }),
6363 };
64 result[@intFromEnum(Feature.div32)] = .{
64 result[@backingInt(Feature.div32)] = .{
6565 .llvm_name = "div32",
6666 .description = "Assume div.w[u] and mod.w[u] can handle inputs that are not sign-extended",
6767 .dependencies = featureSet(&[_]Feature{}),
6868 };
69 result[@intFromEnum(Feature.f)] = .{
69 result[@backingInt(Feature.f)] = .{
7070 .llvm_name = "f",
7171 .description = "'F' (Single-Precision Floating-Point)",
7272 .dependencies = featureSet(&[_]Feature{}),
7373 };
74 result[@intFromEnum(Feature.frecipe)] = .{
74 result[@backingInt(Feature.frecipe)] = .{
7575 .llvm_name = "frecipe",
7676 .description = "Support frecipe.{s/d} and frsqrte.{s/d} instructions",
7777 .dependencies = featureSet(&[_]Feature{}),
7878 };
79 result[@intFromEnum(Feature.la_global_with_abs)] = .{
79 result[@backingInt(Feature.la_global_with_abs)] = .{
8080 .llvm_name = "la-global-with-abs",
8181 .description = "Expand la.global as la.abs",
8282 .dependencies = featureSet(&[_]Feature{}),
8383 };
84 result[@intFromEnum(Feature.la_global_with_pcrel)] = .{
84 result[@backingInt(Feature.la_global_with_pcrel)] = .{
8585 .llvm_name = "la-global-with-pcrel",
8686 .description = "Expand la.global as la.pcrel",
8787 .dependencies = featureSet(&[_]Feature{}),
8888 };
89 result[@intFromEnum(Feature.la_local_with_abs)] = .{
89 result[@backingInt(Feature.la_local_with_abs)] = .{
9090 .llvm_name = "la-local-with-abs",
9191 .description = "Expand la.local as la.abs",
9292 .dependencies = featureSet(&[_]Feature{}),
9393 };
94 result[@intFromEnum(Feature.lam_bh)] = .{
94 result[@backingInt(Feature.lam_bh)] = .{
9595 .llvm_name = "lam-bh",
9696 .description = "Support amswap[_db].{b/h} and amadd[_db].{b/h} instructions",
9797 .dependencies = featureSet(&[_]Feature{}),
9898 };
99 result[@intFromEnum(Feature.lamcas)] = .{
99 result[@backingInt(Feature.lamcas)] = .{
100100 .llvm_name = "lamcas",
101101 .description = "Support amcas[_db].{b/h/w/d}",
102102 .dependencies = featureSet(&[_]Feature{}),
103103 };
104 result[@intFromEnum(Feature.lasx)] = .{
104 result[@backingInt(Feature.lasx)] = .{
105105 .llvm_name = "lasx",
106106 .description = "'LASX' (Loongson Advanced SIMD Extension)",
107107 .dependencies = featureSet(&[_]Feature{
108108 .lsx,
109109 }),
110110 };
111 result[@intFromEnum(Feature.lbt)] = .{
111 result[@backingInt(Feature.lbt)] = .{
112112 .llvm_name = "lbt",
113113 .description = "'LBT' (Loongson Binary Translation Extension)",
114114 .dependencies = featureSet(&[_]Feature{}),
115115 };
116 result[@intFromEnum(Feature.ld_seq_sa)] = .{
116 result[@backingInt(Feature.ld_seq_sa)] = .{
117117 .llvm_name = "ld-seq-sa",
118118 .description = "Don't use a same-address load-load barrier (dbar 0x700)",
119119 .dependencies = featureSet(&[_]Feature{}),
120120 };
121 result[@intFromEnum(Feature.lsx)] = .{
121 result[@backingInt(Feature.lsx)] = .{
122122 .llvm_name = "lsx",
123123 .description = "'LSX' (Loongson SIMD Extension)",
124124 .dependencies = featureSet(&[_]Feature{
125125 .d,
126126 }),
127127 };
128 result[@intFromEnum(Feature.lvz)] = .{
128 result[@backingInt(Feature.lvz)] = .{
129129 .llvm_name = "lvz",
130130 .description = "'LVZ' (Loongson Virtualization Extension)",
131131 .dependencies = featureSet(&[_]Feature{}),
132132 };
133 result[@intFromEnum(Feature.prefer_w_inst)] = .{
133 result[@backingInt(Feature.prefer_w_inst)] = .{
134134 .llvm_name = "prefer-w-inst",
135135 .description = "Prefer instructions with W suffix",
136136 .dependencies = featureSet(&[_]Feature{}),
137137 };
138 result[@intFromEnum(Feature.relax)] = .{
138 result[@backingInt(Feature.relax)] = .{
139139 .llvm_name = "relax",
140140 .description = "Enable Linker relaxation",
141141 .dependencies = featureSet(&[_]Feature{}),
142142 };
143 result[@intFromEnum(Feature.scq)] = .{
143 result[@backingInt(Feature.scq)] = .{
144144 .llvm_name = "scq",
145145 .description = "Support sc.q instruction",
146146 .dependencies = featureSet(&[_]Feature{}),
147147 };
148 result[@intFromEnum(Feature.ual)] = .{
148 result[@backingInt(Feature.ual)] = .{
149149 .llvm_name = "ual",
150150 .description = "Allow memory accesses to be unaligned",
151151 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/m68k.zig+23-23
......@@ -39,33 +39,33 @@ pub const all_features = blk: {
3939 const len = @typeInfo(Feature).@"enum".field_names.len;
4040 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
4141 var result: [len]CpuFeature = undefined;
42 result[@intFromEnum(Feature.isa_68000)] = .{
42 result[@backingInt(Feature.isa_68000)] = .{
4343 .llvm_name = "isa-68000",
4444 .description = "Is M68000 ISA supported",
4545 .dependencies = featureSet(&[_]Feature{}),
4646 };
47 result[@intFromEnum(Feature.isa_68010)] = .{
47 result[@backingInt(Feature.isa_68010)] = .{
4848 .llvm_name = "isa-68010",
4949 .description = "Is M68010 ISA supported",
5050 .dependencies = featureSet(&[_]Feature{
5151 .isa_68000,
5252 }),
5353 };
54 result[@intFromEnum(Feature.isa_68020)] = .{
54 result[@backingInt(Feature.isa_68020)] = .{
5555 .llvm_name = "isa-68020",
5656 .description = "Is M68020 ISA supported",
5757 .dependencies = featureSet(&[_]Feature{
5858 .isa_68010,
5959 }),
6060 };
61 result[@intFromEnum(Feature.isa_68030)] = .{
61 result[@backingInt(Feature.isa_68030)] = .{
6262 .llvm_name = "isa-68030",
6363 .description = "Is M68030 ISA supported",
6464 .dependencies = featureSet(&[_]Feature{
6565 .isa_68020,
6666 }),
6767 };
68 result[@intFromEnum(Feature.isa_68040)] = .{
68 result[@backingInt(Feature.isa_68040)] = .{
6969 .llvm_name = "isa-68040",
7070 .description = "Is M68040 ISA supported",
7171 .dependencies = featureSet(&[_]Feature{
......@@ -73,96 +73,96 @@ pub const all_features = blk: {
7373 .isa_68882,
7474 }),
7575 };
76 result[@intFromEnum(Feature.isa_68060)] = .{
76 result[@backingInt(Feature.isa_68060)] = .{
7777 .llvm_name = "isa-68060",
7878 .description = "Is M68060 ISA supported",
7979 .dependencies = featureSet(&[_]Feature{
8080 .isa_68040,
8181 }),
8282 };
83 result[@intFromEnum(Feature.isa_68881)] = .{
83 result[@backingInt(Feature.isa_68881)] = .{
8484 .llvm_name = "isa-68881",
8585 .description = "Is M68881 (FPU) ISA supported",
8686 .dependencies = featureSet(&[_]Feature{}),
8787 };
88 result[@intFromEnum(Feature.isa_68882)] = .{
88 result[@backingInt(Feature.isa_68882)] = .{
8989 .llvm_name = "isa-68882",
9090 .description = "Is M68882 (FPU) ISA supported",
9191 .dependencies = featureSet(&[_]Feature{
9292 .isa_68881,
9393 }),
9494 };
95 result[@intFromEnum(Feature.reserve_a0)] = .{
95 result[@backingInt(Feature.reserve_a0)] = .{
9696 .llvm_name = "reserve-a0",
9797 .description = "Reserve A0 register",
9898 .dependencies = featureSet(&[_]Feature{}),
9999 };
100 result[@intFromEnum(Feature.reserve_a1)] = .{
100 result[@backingInt(Feature.reserve_a1)] = .{
101101 .llvm_name = "reserve-a1",
102102 .description = "Reserve A1 register",
103103 .dependencies = featureSet(&[_]Feature{}),
104104 };
105 result[@intFromEnum(Feature.reserve_a2)] = .{
105 result[@backingInt(Feature.reserve_a2)] = .{
106106 .llvm_name = "reserve-a2",
107107 .description = "Reserve A2 register",
108108 .dependencies = featureSet(&[_]Feature{}),
109109 };
110 result[@intFromEnum(Feature.reserve_a3)] = .{
110 result[@backingInt(Feature.reserve_a3)] = .{
111111 .llvm_name = "reserve-a3",
112112 .description = "Reserve A3 register",
113113 .dependencies = featureSet(&[_]Feature{}),
114114 };
115 result[@intFromEnum(Feature.reserve_a4)] = .{
115 result[@backingInt(Feature.reserve_a4)] = .{
116116 .llvm_name = "reserve-a4",
117117 .description = "Reserve A4 register",
118118 .dependencies = featureSet(&[_]Feature{}),
119119 };
120 result[@intFromEnum(Feature.reserve_a5)] = .{
120 result[@backingInt(Feature.reserve_a5)] = .{
121121 .llvm_name = "reserve-a5",
122122 .description = "Reserve A5 register",
123123 .dependencies = featureSet(&[_]Feature{}),
124124 };
125 result[@intFromEnum(Feature.reserve_a6)] = .{
125 result[@backingInt(Feature.reserve_a6)] = .{
126126 .llvm_name = "reserve-a6",
127127 .description = "Reserve A6 register",
128128 .dependencies = featureSet(&[_]Feature{}),
129129 };
130 result[@intFromEnum(Feature.reserve_d0)] = .{
130 result[@backingInt(Feature.reserve_d0)] = .{
131131 .llvm_name = "reserve-d0",
132132 .description = "Reserve D0 register",
133133 .dependencies = featureSet(&[_]Feature{}),
134134 };
135 result[@intFromEnum(Feature.reserve_d1)] = .{
135 result[@backingInt(Feature.reserve_d1)] = .{
136136 .llvm_name = "reserve-d1",
137137 .description = "Reserve D1 register",
138138 .dependencies = featureSet(&[_]Feature{}),
139139 };
140 result[@intFromEnum(Feature.reserve_d2)] = .{
140 result[@backingInt(Feature.reserve_d2)] = .{
141141 .llvm_name = "reserve-d2",
142142 .description = "Reserve D2 register",
143143 .dependencies = featureSet(&[_]Feature{}),
144144 };
145 result[@intFromEnum(Feature.reserve_d3)] = .{
145 result[@backingInt(Feature.reserve_d3)] = .{
146146 .llvm_name = "reserve-d3",
147147 .description = "Reserve D3 register",
148148 .dependencies = featureSet(&[_]Feature{}),
149149 };
150 result[@intFromEnum(Feature.reserve_d4)] = .{
150 result[@backingInt(Feature.reserve_d4)] = .{
151151 .llvm_name = "reserve-d4",
152152 .description = "Reserve D4 register",
153153 .dependencies = featureSet(&[_]Feature{}),
154154 };
155 result[@intFromEnum(Feature.reserve_d5)] = .{
155 result[@backingInt(Feature.reserve_d5)] = .{
156156 .llvm_name = "reserve-d5",
157157 .description = "Reserve D5 register",
158158 .dependencies = featureSet(&[_]Feature{}),
159159 };
160 result[@intFromEnum(Feature.reserve_d6)] = .{
160 result[@backingInt(Feature.reserve_d6)] = .{
161161 .llvm_name = "reserve-d6",
162162 .description = "Reserve D6 register",
163163 .dependencies = featureSet(&[_]Feature{}),
164164 };
165 result[@intFromEnum(Feature.reserve_d7)] = .{
165 result[@backingInt(Feature.reserve_d7)] = .{
166166 .llvm_name = "reserve-d7",
167167 .description = "Reserve D7 register",
168168 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/mips.zig+57-57
......@@ -73,75 +73,75 @@ pub const all_features = blk: {
7373 const len = @typeInfo(Feature).@"enum".field_names.len;
7474 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
7575 var result: [len]CpuFeature = undefined;
76 result[@intFromEnum(Feature.abs2008)] = .{
76 result[@backingInt(Feature.abs2008)] = .{
7777 .llvm_name = "abs2008",
7878 .description = "Disable IEEE 754-2008 abs.fmt mode",
7979 .dependencies = featureSet(&[_]Feature{}),
8080 };
81 result[@intFromEnum(Feature.cnmips)] = .{
81 result[@backingInt(Feature.cnmips)] = .{
8282 .llvm_name = "cnmips",
8383 .description = "Octeon cnMIPS Support",
8484 .dependencies = featureSet(&[_]Feature{
8585 .mips64r2,
8686 }),
8787 };
88 result[@intFromEnum(Feature.cnmipsp)] = .{
88 result[@backingInt(Feature.cnmipsp)] = .{
8989 .llvm_name = "cnmipsp",
9090 .description = "Octeon+ cnMIPS Support",
9191 .dependencies = featureSet(&[_]Feature{
9292 .cnmips,
9393 }),
9494 };
95 result[@intFromEnum(Feature.crc)] = .{
95 result[@backingInt(Feature.crc)] = .{
9696 .llvm_name = "crc",
9797 .description = "Mips R6 CRC ASE",
9898 .dependencies = featureSet(&[_]Feature{}),
9999 };
100 result[@intFromEnum(Feature.dsp)] = .{
100 result[@backingInt(Feature.dsp)] = .{
101101 .llvm_name = "dsp",
102102 .description = "Mips DSP ASE",
103103 .dependencies = featureSet(&[_]Feature{}),
104104 };
105 result[@intFromEnum(Feature.dspr2)] = .{
105 result[@backingInt(Feature.dspr2)] = .{
106106 .llvm_name = "dspr2",
107107 .description = "Mips DSP-R2 ASE",
108108 .dependencies = featureSet(&[_]Feature{
109109 .dsp,
110110 }),
111111 };
112 result[@intFromEnum(Feature.dspr3)] = .{
112 result[@backingInt(Feature.dspr3)] = .{
113113 .llvm_name = "dspr3",
114114 .description = "Mips DSP-R3 ASE",
115115 .dependencies = featureSet(&[_]Feature{
116116 .dspr2,
117117 }),
118118 };
119 result[@intFromEnum(Feature.eva)] = .{
119 result[@backingInt(Feature.eva)] = .{
120120 .llvm_name = "eva",
121121 .description = "Mips EVA ASE",
122122 .dependencies = featureSet(&[_]Feature{}),
123123 };
124 result[@intFromEnum(Feature.fp64)] = .{
124 result[@backingInt(Feature.fp64)] = .{
125125 .llvm_name = "fp64",
126126 .description = "Support 64-bit FP registers",
127127 .dependencies = featureSet(&[_]Feature{}),
128128 };
129 result[@intFromEnum(Feature.fpxx)] = .{
129 result[@backingInt(Feature.fpxx)] = .{
130130 .llvm_name = "fpxx",
131131 .description = "Support for FPXX",
132132 .dependencies = featureSet(&[_]Feature{}),
133133 };
134 result[@intFromEnum(Feature.ginv)] = .{
134 result[@backingInt(Feature.ginv)] = .{
135135 .llvm_name = "ginv",
136136 .description = "Mips Global Invalidate ASE",
137137 .dependencies = featureSet(&[_]Feature{}),
138138 };
139 result[@intFromEnum(Feature.gp64)] = .{
139 result[@backingInt(Feature.gp64)] = .{
140140 .llvm_name = "gp64",
141141 .description = "General Purpose Registers are 64-bit wide",
142142 .dependencies = featureSet(&[_]Feature{}),
143143 };
144 result[@intFromEnum(Feature.i6400)] = .{
144 result[@backingInt(Feature.i6400)] = .{
145145 .llvm_name = "i6400",
146146 .description = "MIPS I6400 Processor",
147147 .dependencies = featureSet(&[_]Feature{
......@@ -149,7 +149,7 @@ pub const all_features = blk: {
149149 .msa,
150150 }),
151151 };
152 result[@intFromEnum(Feature.i6500)] = .{
152 result[@backingInt(Feature.i6500)] = .{
153153 .llvm_name = "i6500",
154154 .description = "MIPS I6500 Processor",
155155 .dependencies = featureSet(&[_]Feature{
......@@ -157,34 +157,34 @@ pub const all_features = blk: {
157157 .msa,
158158 }),
159159 };
160 result[@intFromEnum(Feature.long_calls)] = .{
160 result[@backingInt(Feature.long_calls)] = .{
161161 .llvm_name = "long-calls",
162162 .description = "Disable use of the jal instruction",
163163 .dependencies = featureSet(&[_]Feature{}),
164164 };
165 result[@intFromEnum(Feature.micromips)] = .{
165 result[@backingInt(Feature.micromips)] = .{
166166 .llvm_name = "micromips",
167167 .description = "microMips mode",
168168 .dependencies = featureSet(&[_]Feature{}),
169169 };
170 result[@intFromEnum(Feature.mips1)] = .{
170 result[@backingInt(Feature.mips1)] = .{
171171 .llvm_name = "mips1",
172172 .description = "Mips I ISA Support [highly experimental]",
173173 .dependencies = featureSet(&[_]Feature{}),
174174 };
175 result[@intFromEnum(Feature.mips16)] = .{
175 result[@backingInt(Feature.mips16)] = .{
176176 .llvm_name = "mips16",
177177 .description = "Mips16 mode",
178178 .dependencies = featureSet(&[_]Feature{}),
179179 };
180 result[@intFromEnum(Feature.mips2)] = .{
180 result[@backingInt(Feature.mips2)] = .{
181181 .llvm_name = "mips2",
182182 .description = "Mips II ISA Support [highly experimental]",
183183 .dependencies = featureSet(&[_]Feature{
184184 .mips1,
185185 }),
186186 };
187 result[@intFromEnum(Feature.mips3)] = .{
187 result[@backingInt(Feature.mips3)] = .{
188188 .llvm_name = "mips3",
189189 .description = "MIPS III ISA Support [highly experimental]",
190190 .dependencies = featureSet(&[_]Feature{
......@@ -195,7 +195,7 @@ pub const all_features = blk: {
195195 .mips3_32r2,
196196 }),
197197 };
198 result[@intFromEnum(Feature.mips32)] = .{
198 result[@backingInt(Feature.mips32)] = .{
199199 .llvm_name = "mips32",
200200 .description = "Mips32 ISA Support",
201201 .dependencies = featureSet(&[_]Feature{
......@@ -204,7 +204,7 @@ pub const all_features = blk: {
204204 .mips4_32,
205205 }),
206206 };
207 result[@intFromEnum(Feature.mips32r2)] = .{
207 result[@backingInt(Feature.mips32r2)] = .{
208208 .llvm_name = "mips32r2",
209209 .description = "Mips32r2 ISA Support",
210210 .dependencies = featureSet(&[_]Feature{
......@@ -214,21 +214,21 @@ pub const all_features = blk: {
214214 .mips5_32r2,
215215 }),
216216 };
217 result[@intFromEnum(Feature.mips32r3)] = .{
217 result[@backingInt(Feature.mips32r3)] = .{
218218 .llvm_name = "mips32r3",
219219 .description = "Mips32r3 ISA Support",
220220 .dependencies = featureSet(&[_]Feature{
221221 .mips32r2,
222222 }),
223223 };
224 result[@intFromEnum(Feature.mips32r5)] = .{
224 result[@backingInt(Feature.mips32r5)] = .{
225225 .llvm_name = "mips32r5",
226226 .description = "Mips32r5 ISA Support",
227227 .dependencies = featureSet(&[_]Feature{
228228 .mips32r3,
229229 }),
230230 };
231 result[@intFromEnum(Feature.mips32r6)] = .{
231 result[@backingInt(Feature.mips32r6)] = .{
232232 .llvm_name = "mips32r6",
233233 .description = "Mips32r6 ISA Support [experimental]",
234234 .dependencies = featureSet(&[_]Feature{
......@@ -238,22 +238,22 @@ pub const all_features = blk: {
238238 .nan2008,
239239 }),
240240 };
241 result[@intFromEnum(Feature.mips3_32)] = .{
241 result[@backingInt(Feature.mips3_32)] = .{
242242 .llvm_name = "mips3_32",
243243 .description = "Subset of MIPS-III that is also in MIPS32 [highly experimental]",
244244 .dependencies = featureSet(&[_]Feature{}),
245245 };
246 result[@intFromEnum(Feature.mips3_32r2)] = .{
246 result[@backingInt(Feature.mips3_32r2)] = .{
247247 .llvm_name = "mips3_32r2",
248248 .description = "Subset of MIPS-III that is also in MIPS32r2 [highly experimental]",
249249 .dependencies = featureSet(&[_]Feature{}),
250250 };
251 result[@intFromEnum(Feature.mips3d)] = .{
251 result[@backingInt(Feature.mips3d)] = .{
252252 .llvm_name = "mips3d",
253253 .description = "Mips 3D ASE",
254254 .dependencies = featureSet(&[_]Feature{}),
255255 };
256 result[@intFromEnum(Feature.mips4)] = .{
256 result[@backingInt(Feature.mips4)] = .{
257257 .llvm_name = "mips4",
258258 .description = "MIPS IV ISA Support",
259259 .dependencies = featureSet(&[_]Feature{
......@@ -262,17 +262,17 @@ pub const all_features = blk: {
262262 .mips4_32r2,
263263 }),
264264 };
265 result[@intFromEnum(Feature.mips4_32)] = .{
265 result[@backingInt(Feature.mips4_32)] = .{
266266 .llvm_name = "mips4_32",
267267 .description = "Subset of MIPS-IV that is also in MIPS32 [highly experimental]",
268268 .dependencies = featureSet(&[_]Feature{}),
269269 };
270 result[@intFromEnum(Feature.mips4_32r2)] = .{
270 result[@backingInt(Feature.mips4_32r2)] = .{
271271 .llvm_name = "mips4_32r2",
272272 .description = "Subset of MIPS-IV that is also in MIPS32r2 [highly experimental]",
273273 .dependencies = featureSet(&[_]Feature{}),
274274 };
275 result[@intFromEnum(Feature.mips5)] = .{
275 result[@backingInt(Feature.mips5)] = .{
276276 .llvm_name = "mips5",
277277 .description = "MIPS V ISA Support [highly experimental]",
278278 .dependencies = featureSet(&[_]Feature{
......@@ -280,12 +280,12 @@ pub const all_features = blk: {
280280 .mips5_32r2,
281281 }),
282282 };
283 result[@intFromEnum(Feature.mips5_32r2)] = .{
283 result[@backingInt(Feature.mips5_32r2)] = .{
284284 .llvm_name = "mips5_32r2",
285285 .description = "Subset of MIPS-V that is also in MIPS32r2 [highly experimental]",
286286 .dependencies = featureSet(&[_]Feature{}),
287287 };
288 result[@intFromEnum(Feature.mips64)] = .{
288 result[@backingInt(Feature.mips64)] = .{
289289 .llvm_name = "mips64",
290290 .description = "Mips64 ISA Support",
291291 .dependencies = featureSet(&[_]Feature{
......@@ -293,7 +293,7 @@ pub const all_features = blk: {
293293 .mips5,
294294 }),
295295 };
296 result[@intFromEnum(Feature.mips64r2)] = .{
296 result[@backingInt(Feature.mips64r2)] = .{
297297 .llvm_name = "mips64r2",
298298 .description = "Mips64r2 ISA Support",
299299 .dependencies = featureSet(&[_]Feature{
......@@ -301,7 +301,7 @@ pub const all_features = blk: {
301301 .mips64,
302302 }),
303303 };
304 result[@intFromEnum(Feature.mips64r3)] = .{
304 result[@backingInt(Feature.mips64r3)] = .{
305305 .llvm_name = "mips64r3",
306306 .description = "Mips64r3 ISA Support",
307307 .dependencies = featureSet(&[_]Feature{
......@@ -309,7 +309,7 @@ pub const all_features = blk: {
309309 .mips64r2,
310310 }),
311311 };
312 result[@intFromEnum(Feature.mips64r5)] = .{
312 result[@backingInt(Feature.mips64r5)] = .{
313313 .llvm_name = "mips64r5",
314314 .description = "Mips64r5 ISA Support",
315315 .dependencies = featureSet(&[_]Feature{
......@@ -317,7 +317,7 @@ pub const all_features = blk: {
317317 .mips64r3,
318318 }),
319319 };
320 result[@intFromEnum(Feature.mips64r6)] = .{
320 result[@backingInt(Feature.mips64r6)] = .{
321321 .llvm_name = "mips64r6",
322322 .description = "Mips64r6 ISA Support [experimental]",
323323 .dependencies = featureSet(&[_]Feature{
......@@ -325,99 +325,99 @@ pub const all_features = blk: {
325325 .mips64r5,
326326 }),
327327 };
328 result[@intFromEnum(Feature.msa)] = .{
328 result[@backingInt(Feature.msa)] = .{
329329 .llvm_name = "msa",
330330 .description = "Mips MSA ASE",
331331 .dependencies = featureSet(&[_]Feature{}),
332332 };
333 result[@intFromEnum(Feature.mt)] = .{
333 result[@backingInt(Feature.mt)] = .{
334334 .llvm_name = "mt",
335335 .description = "Mips MT ASE",
336336 .dependencies = featureSet(&[_]Feature{}),
337337 };
338 result[@intFromEnum(Feature.nan2008)] = .{
338 result[@backingInt(Feature.nan2008)] = .{
339339 .llvm_name = "nan2008",
340340 .description = "IEEE 754-2008 NaN encoding",
341341 .dependencies = featureSet(&[_]Feature{}),
342342 };
343 result[@intFromEnum(Feature.noabicalls)] = .{
343 result[@backingInt(Feature.noabicalls)] = .{
344344 .llvm_name = "noabicalls",
345345 .description = "Disable SVR4-style position-independent code",
346346 .dependencies = featureSet(&[_]Feature{}),
347347 };
348 result[@intFromEnum(Feature.nomadd4)] = .{
348 result[@backingInt(Feature.nomadd4)] = .{
349349 .llvm_name = "nomadd4",
350350 .description = "Disable 4-operand madd.fmt and related instructions",
351351 .dependencies = featureSet(&[_]Feature{}),
352352 };
353 result[@intFromEnum(Feature.nooddspreg)] = .{
353 result[@backingInt(Feature.nooddspreg)] = .{
354354 .llvm_name = "nooddspreg",
355355 .description = "Disable odd numbered single-precision registers",
356356 .dependencies = featureSet(&[_]Feature{}),
357357 };
358 result[@intFromEnum(Feature.notraps)] = .{
358 result[@backingInt(Feature.notraps)] = .{
359359 .llvm_name = null,
360360 .description = "Disable trap instructions",
361361 .dependencies = featureSet(&[_]Feature{}),
362362 };
363 result[@intFromEnum(Feature.p5600)] = .{
363 result[@backingInt(Feature.p5600)] = .{
364364 .llvm_name = "p5600",
365365 .description = "The P5600 Processor",
366366 .dependencies = featureSet(&[_]Feature{
367367 .mips32r5,
368368 }),
369369 };
370 result[@intFromEnum(Feature.ptr64)] = .{
370 result[@backingInt(Feature.ptr64)] = .{
371371 .llvm_name = "ptr64",
372372 .description = "Pointers are 64-bit wide",
373373 .dependencies = featureSet(&[_]Feature{}),
374374 };
375 result[@intFromEnum(Feature.single_float)] = .{
375 result[@backingInt(Feature.single_float)] = .{
376376 .llvm_name = "single-float",
377377 .description = "Only supports single precision float",
378378 .dependencies = featureSet(&[_]Feature{}),
379379 };
380 result[@intFromEnum(Feature.soft_float)] = .{
380 result[@backingInt(Feature.soft_float)] = .{
381381 .llvm_name = "soft-float",
382382 .description = "Does not support floating point instructions",
383383 .dependencies = featureSet(&[_]Feature{}),
384384 };
385 result[@intFromEnum(Feature.strict_align)] = .{
385 result[@backingInt(Feature.strict_align)] = .{
386386 .llvm_name = "strict-align",
387387 .description = "Disable unaligned load store for r6",
388388 .dependencies = featureSet(&[_]Feature{}),
389389 };
390 result[@intFromEnum(Feature.sym32)] = .{
390 result[@backingInt(Feature.sym32)] = .{
391391 .llvm_name = "sym32",
392392 .description = "Symbols are 32 bit on Mips64",
393393 .dependencies = featureSet(&[_]Feature{}),
394394 };
395 result[@intFromEnum(Feature.use_compact_branches)] = .{
395 result[@backingInt(Feature.use_compact_branches)] = .{
396396 .llvm_name = "use-compact-branches",
397397 .description = "Use compact branch instructions for MIPS32R6/MIPS64R6",
398398 .dependencies = featureSet(&[_]Feature{}),
399399 };
400 result[@intFromEnum(Feature.use_indirect_jump_hazard)] = .{
400 result[@backingInt(Feature.use_indirect_jump_hazard)] = .{
401401 .llvm_name = "use-indirect-jump-hazard",
402402 .description = "Use indirect jump guards to prevent certain speculation based attacks",
403403 .dependencies = featureSet(&[_]Feature{}),
404404 };
405 result[@intFromEnum(Feature.use_tcc_in_div)] = .{
405 result[@backingInt(Feature.use_tcc_in_div)] = .{
406406 .llvm_name = "use-tcc-in-div",
407407 .description = "Force the assembler to use trapping",
408408 .dependencies = featureSet(&[_]Feature{}),
409409 };
410 result[@intFromEnum(Feature.vfpu)] = .{
410 result[@backingInt(Feature.vfpu)] = .{
411411 .llvm_name = "vfpu",
412412 .description = "Enable vector FPU instructions",
413413 .dependencies = featureSet(&[_]Feature{}),
414414 };
415 result[@intFromEnum(Feature.virt)] = .{
415 result[@backingInt(Feature.virt)] = .{
416416 .llvm_name = "virt",
417417 .description = "Mips Virtualization ASE",
418418 .dependencies = featureSet(&[_]Feature{}),
419419 };
420 result[@intFromEnum(Feature.xgot)] = .{
420 result[@backingInt(Feature.xgot)] = .{
421421 .llvm_name = "xgot",
422422 .description = "Assume 32-bit GOT",
423423 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/msp430.zig+4-4
......@@ -20,22 +20,22 @@ pub const all_features = blk: {
2020 const len = @typeInfo(Feature).@"enum".field_names.len;
2121 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
2222 var result: [len]CpuFeature = undefined;
23 result[@intFromEnum(Feature.ext)] = .{
23 result[@backingInt(Feature.ext)] = .{
2424 .llvm_name = "ext",
2525 .description = "Enable MSP430-X extensions",
2626 .dependencies = featureSet(&[_]Feature{}),
2727 };
28 result[@intFromEnum(Feature.hwmult16)] = .{
28 result[@backingInt(Feature.hwmult16)] = .{
2929 .llvm_name = "hwmult16",
3030 .description = "Enable 16-bit hardware multiplier",
3131 .dependencies = featureSet(&[_]Feature{}),
3232 };
33 result[@intFromEnum(Feature.hwmult32)] = .{
33 result[@backingInt(Feature.hwmult32)] = .{
3434 .llvm_name = "hwmult32",
3535 .description = "Enable 32-bit hardware multiplier",
3636 .dependencies = featureSet(&[_]Feature{}),
3737 };
38 result[@intFromEnum(Feature.hwmultf5)] = .{
38 result[@backingInt(Feature.hwmultf5)] = .{
3939 .llvm_name = "hwmultf5",
4040 .description = "Enable F5 series hardware multiplier",
4141 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/nvptx.zig+71-71
......@@ -87,357 +87,357 @@ pub const all_features = blk: {
8787 const len = @typeInfo(Feature).@"enum".field_names.len;
8888 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
8989 var result: [len]CpuFeature = undefined;
90 result[@intFromEnum(Feature.ptx32)] = .{
90 result[@backingInt(Feature.ptx32)] = .{
9191 .llvm_name = "ptx32",
9292 .description = "Use PTX version 32",
9393 .dependencies = featureSet(&[_]Feature{}),
9494 };
95 result[@intFromEnum(Feature.ptx40)] = .{
95 result[@backingInt(Feature.ptx40)] = .{
9696 .llvm_name = "ptx40",
9797 .description = "Use PTX version 40",
9898 .dependencies = featureSet(&[_]Feature{}),
9999 };
100 result[@intFromEnum(Feature.ptx41)] = .{
100 result[@backingInt(Feature.ptx41)] = .{
101101 .llvm_name = "ptx41",
102102 .description = "Use PTX version 41",
103103 .dependencies = featureSet(&[_]Feature{}),
104104 };
105 result[@intFromEnum(Feature.ptx42)] = .{
105 result[@backingInt(Feature.ptx42)] = .{
106106 .llvm_name = "ptx42",
107107 .description = "Use PTX version 42",
108108 .dependencies = featureSet(&[_]Feature{}),
109109 };
110 result[@intFromEnum(Feature.ptx43)] = .{
110 result[@backingInt(Feature.ptx43)] = .{
111111 .llvm_name = "ptx43",
112112 .description = "Use PTX version 43",
113113 .dependencies = featureSet(&[_]Feature{}),
114114 };
115 result[@intFromEnum(Feature.ptx50)] = .{
115 result[@backingInt(Feature.ptx50)] = .{
116116 .llvm_name = "ptx50",
117117 .description = "Use PTX version 50",
118118 .dependencies = featureSet(&[_]Feature{}),
119119 };
120 result[@intFromEnum(Feature.ptx60)] = .{
120 result[@backingInt(Feature.ptx60)] = .{
121121 .llvm_name = "ptx60",
122122 .description = "Use PTX version 60",
123123 .dependencies = featureSet(&[_]Feature{}),
124124 };
125 result[@intFromEnum(Feature.ptx61)] = .{
125 result[@backingInt(Feature.ptx61)] = .{
126126 .llvm_name = "ptx61",
127127 .description = "Use PTX version 61",
128128 .dependencies = featureSet(&[_]Feature{}),
129129 };
130 result[@intFromEnum(Feature.ptx62)] = .{
130 result[@backingInt(Feature.ptx62)] = .{
131131 .llvm_name = "ptx62",
132132 .description = "Use PTX version 62",
133133 .dependencies = featureSet(&[_]Feature{}),
134134 };
135 result[@intFromEnum(Feature.ptx63)] = .{
135 result[@backingInt(Feature.ptx63)] = .{
136136 .llvm_name = "ptx63",
137137 .description = "Use PTX version 63",
138138 .dependencies = featureSet(&[_]Feature{}),
139139 };
140 result[@intFromEnum(Feature.ptx64)] = .{
140 result[@backingInt(Feature.ptx64)] = .{
141141 .llvm_name = "ptx64",
142142 .description = "Use PTX version 64",
143143 .dependencies = featureSet(&[_]Feature{}),
144144 };
145 result[@intFromEnum(Feature.ptx65)] = .{
145 result[@backingInt(Feature.ptx65)] = .{
146146 .llvm_name = "ptx65",
147147 .description = "Use PTX version 65",
148148 .dependencies = featureSet(&[_]Feature{}),
149149 };
150 result[@intFromEnum(Feature.ptx70)] = .{
150 result[@backingInt(Feature.ptx70)] = .{
151151 .llvm_name = "ptx70",
152152 .description = "Use PTX version 70",
153153 .dependencies = featureSet(&[_]Feature{}),
154154 };
155 result[@intFromEnum(Feature.ptx71)] = .{
155 result[@backingInt(Feature.ptx71)] = .{
156156 .llvm_name = "ptx71",
157157 .description = "Use PTX version 71",
158158 .dependencies = featureSet(&[_]Feature{}),
159159 };
160 result[@intFromEnum(Feature.ptx72)] = .{
160 result[@backingInt(Feature.ptx72)] = .{
161161 .llvm_name = "ptx72",
162162 .description = "Use PTX version 72",
163163 .dependencies = featureSet(&[_]Feature{}),
164164 };
165 result[@intFromEnum(Feature.ptx73)] = .{
165 result[@backingInt(Feature.ptx73)] = .{
166166 .llvm_name = "ptx73",
167167 .description = "Use PTX version 73",
168168 .dependencies = featureSet(&[_]Feature{}),
169169 };
170 result[@intFromEnum(Feature.ptx74)] = .{
170 result[@backingInt(Feature.ptx74)] = .{
171171 .llvm_name = "ptx74",
172172 .description = "Use PTX version 74",
173173 .dependencies = featureSet(&[_]Feature{}),
174174 };
175 result[@intFromEnum(Feature.ptx75)] = .{
175 result[@backingInt(Feature.ptx75)] = .{
176176 .llvm_name = "ptx75",
177177 .description = "Use PTX version 75",
178178 .dependencies = featureSet(&[_]Feature{}),
179179 };
180 result[@intFromEnum(Feature.ptx76)] = .{
180 result[@backingInt(Feature.ptx76)] = .{
181181 .llvm_name = "ptx76",
182182 .description = "Use PTX version 76",
183183 .dependencies = featureSet(&[_]Feature{}),
184184 };
185 result[@intFromEnum(Feature.ptx77)] = .{
185 result[@backingInt(Feature.ptx77)] = .{
186186 .llvm_name = "ptx77",
187187 .description = "Use PTX version 77",
188188 .dependencies = featureSet(&[_]Feature{}),
189189 };
190 result[@intFromEnum(Feature.ptx78)] = .{
190 result[@backingInt(Feature.ptx78)] = .{
191191 .llvm_name = "ptx78",
192192 .description = "Use PTX version 78",
193193 .dependencies = featureSet(&[_]Feature{}),
194194 };
195 result[@intFromEnum(Feature.ptx80)] = .{
195 result[@backingInt(Feature.ptx80)] = .{
196196 .llvm_name = "ptx80",
197197 .description = "Use PTX version 80",
198198 .dependencies = featureSet(&[_]Feature{}),
199199 };
200 result[@intFromEnum(Feature.ptx81)] = .{
200 result[@backingInt(Feature.ptx81)] = .{
201201 .llvm_name = "ptx81",
202202 .description = "Use PTX version 81",
203203 .dependencies = featureSet(&[_]Feature{}),
204204 };
205 result[@intFromEnum(Feature.ptx82)] = .{
205 result[@backingInt(Feature.ptx82)] = .{
206206 .llvm_name = "ptx82",
207207 .description = "Use PTX version 82",
208208 .dependencies = featureSet(&[_]Feature{}),
209209 };
210 result[@intFromEnum(Feature.ptx83)] = .{
210 result[@backingInt(Feature.ptx83)] = .{
211211 .llvm_name = "ptx83",
212212 .description = "Use PTX version 83",
213213 .dependencies = featureSet(&[_]Feature{}),
214214 };
215 result[@intFromEnum(Feature.ptx84)] = .{
215 result[@backingInt(Feature.ptx84)] = .{
216216 .llvm_name = "ptx84",
217217 .description = "Use PTX version 84",
218218 .dependencies = featureSet(&[_]Feature{}),
219219 };
220 result[@intFromEnum(Feature.ptx85)] = .{
220 result[@backingInt(Feature.ptx85)] = .{
221221 .llvm_name = "ptx85",
222222 .description = "Use PTX version 85",
223223 .dependencies = featureSet(&[_]Feature{}),
224224 };
225 result[@intFromEnum(Feature.ptx86)] = .{
225 result[@backingInt(Feature.ptx86)] = .{
226226 .llvm_name = "ptx86",
227227 .description = "Use PTX version 86",
228228 .dependencies = featureSet(&[_]Feature{}),
229229 };
230 result[@intFromEnum(Feature.ptx87)] = .{
230 result[@backingInt(Feature.ptx87)] = .{
231231 .llvm_name = "ptx87",
232232 .description = "Use PTX version 87",
233233 .dependencies = featureSet(&[_]Feature{}),
234234 };
235 result[@intFromEnum(Feature.ptx88)] = .{
235 result[@backingInt(Feature.ptx88)] = .{
236236 .llvm_name = "ptx88",
237237 .description = "Use PTX version 88",
238238 .dependencies = featureSet(&[_]Feature{}),
239239 };
240 result[@intFromEnum(Feature.ptx90)] = .{
240 result[@backingInt(Feature.ptx90)] = .{
241241 .llvm_name = "ptx90",
242242 .description = "Use PTX version 90",
243243 .dependencies = featureSet(&[_]Feature{}),
244244 };
245 result[@intFromEnum(Feature.sm_100)] = .{
245 result[@backingInt(Feature.sm_100)] = .{
246246 .llvm_name = "sm_100",
247247 .description = "Target SM 100",
248248 .dependencies = featureSet(&[_]Feature{}),
249249 };
250 result[@intFromEnum(Feature.sm_100a)] = .{
250 result[@backingInt(Feature.sm_100a)] = .{
251251 .llvm_name = "sm_100a",
252252 .description = "Target SM 100a",
253253 .dependencies = featureSet(&[_]Feature{}),
254254 };
255 result[@intFromEnum(Feature.sm_100f)] = .{
255 result[@backingInt(Feature.sm_100f)] = .{
256256 .llvm_name = "sm_100f",
257257 .description = "Target SM 100f",
258258 .dependencies = featureSet(&[_]Feature{}),
259259 };
260 result[@intFromEnum(Feature.sm_101)] = .{
260 result[@backingInt(Feature.sm_101)] = .{
261261 .llvm_name = "sm_101",
262262 .description = "Target SM 101",
263263 .dependencies = featureSet(&[_]Feature{}),
264264 };
265 result[@intFromEnum(Feature.sm_101a)] = .{
265 result[@backingInt(Feature.sm_101a)] = .{
266266 .llvm_name = "sm_101a",
267267 .description = "Target SM 101a",
268268 .dependencies = featureSet(&[_]Feature{}),
269269 };
270 result[@intFromEnum(Feature.sm_101f)] = .{
270 result[@backingInt(Feature.sm_101f)] = .{
271271 .llvm_name = "sm_101f",
272272 .description = "Target SM 101f",
273273 .dependencies = featureSet(&[_]Feature{}),
274274 };
275 result[@intFromEnum(Feature.sm_103)] = .{
275 result[@backingInt(Feature.sm_103)] = .{
276276 .llvm_name = "sm_103",
277277 .description = "Target SM 103",
278278 .dependencies = featureSet(&[_]Feature{}),
279279 };
280 result[@intFromEnum(Feature.sm_103a)] = .{
280 result[@backingInt(Feature.sm_103a)] = .{
281281 .llvm_name = "sm_103a",
282282 .description = "Target SM 103a",
283283 .dependencies = featureSet(&[_]Feature{}),
284284 };
285 result[@intFromEnum(Feature.sm_103f)] = .{
285 result[@backingInt(Feature.sm_103f)] = .{
286286 .llvm_name = "sm_103f",
287287 .description = "Target SM 103f",
288288 .dependencies = featureSet(&[_]Feature{}),
289289 };
290 result[@intFromEnum(Feature.sm_110)] = .{
290 result[@backingInt(Feature.sm_110)] = .{
291291 .llvm_name = "sm_110",
292292 .description = "Target SM 110",
293293 .dependencies = featureSet(&[_]Feature{}),
294294 };
295 result[@intFromEnum(Feature.sm_110a)] = .{
295 result[@backingInt(Feature.sm_110a)] = .{
296296 .llvm_name = "sm_110a",
297297 .description = "Target SM 110a",
298298 .dependencies = featureSet(&[_]Feature{}),
299299 };
300 result[@intFromEnum(Feature.sm_110f)] = .{
300 result[@backingInt(Feature.sm_110f)] = .{
301301 .llvm_name = "sm_110f",
302302 .description = "Target SM 110f",
303303 .dependencies = featureSet(&[_]Feature{}),
304304 };
305 result[@intFromEnum(Feature.sm_120)] = .{
305 result[@backingInt(Feature.sm_120)] = .{
306306 .llvm_name = "sm_120",
307307 .description = "Target SM 120",
308308 .dependencies = featureSet(&[_]Feature{}),
309309 };
310 result[@intFromEnum(Feature.sm_120a)] = .{
310 result[@backingInt(Feature.sm_120a)] = .{
311311 .llvm_name = "sm_120a",
312312 .description = "Target SM 120a",
313313 .dependencies = featureSet(&[_]Feature{}),
314314 };
315 result[@intFromEnum(Feature.sm_120f)] = .{
315 result[@backingInt(Feature.sm_120f)] = .{
316316 .llvm_name = "sm_120f",
317317 .description = "Target SM 120f",
318318 .dependencies = featureSet(&[_]Feature{}),
319319 };
320 result[@intFromEnum(Feature.sm_121)] = .{
320 result[@backingInt(Feature.sm_121)] = .{
321321 .llvm_name = "sm_121",
322322 .description = "Target SM 121",
323323 .dependencies = featureSet(&[_]Feature{}),
324324 };
325 result[@intFromEnum(Feature.sm_121a)] = .{
325 result[@backingInt(Feature.sm_121a)] = .{
326326 .llvm_name = "sm_121a",
327327 .description = "Target SM 121a",
328328 .dependencies = featureSet(&[_]Feature{}),
329329 };
330 result[@intFromEnum(Feature.sm_121f)] = .{
330 result[@backingInt(Feature.sm_121f)] = .{
331331 .llvm_name = "sm_121f",
332332 .description = "Target SM 121f",
333333 .dependencies = featureSet(&[_]Feature{}),
334334 };
335 result[@intFromEnum(Feature.sm_20)] = .{
335 result[@backingInt(Feature.sm_20)] = .{
336336 .llvm_name = "sm_20",
337337 .description = "Target SM 20",
338338 .dependencies = featureSet(&[_]Feature{}),
339339 };
340 result[@intFromEnum(Feature.sm_21)] = .{
340 result[@backingInt(Feature.sm_21)] = .{
341341 .llvm_name = "sm_21",
342342 .description = "Target SM 21",
343343 .dependencies = featureSet(&[_]Feature{}),
344344 };
345 result[@intFromEnum(Feature.sm_30)] = .{
345 result[@backingInt(Feature.sm_30)] = .{
346346 .llvm_name = "sm_30",
347347 .description = "Target SM 30",
348348 .dependencies = featureSet(&[_]Feature{}),
349349 };
350 result[@intFromEnum(Feature.sm_32)] = .{
350 result[@backingInt(Feature.sm_32)] = .{
351351 .llvm_name = "sm_32",
352352 .description = "Target SM 32",
353353 .dependencies = featureSet(&[_]Feature{}),
354354 };
355 result[@intFromEnum(Feature.sm_35)] = .{
355 result[@backingInt(Feature.sm_35)] = .{
356356 .llvm_name = "sm_35",
357357 .description = "Target SM 35",
358358 .dependencies = featureSet(&[_]Feature{}),
359359 };
360 result[@intFromEnum(Feature.sm_37)] = .{
360 result[@backingInt(Feature.sm_37)] = .{
361361 .llvm_name = "sm_37",
362362 .description = "Target SM 37",
363363 .dependencies = featureSet(&[_]Feature{}),
364364 };
365 result[@intFromEnum(Feature.sm_50)] = .{
365 result[@backingInt(Feature.sm_50)] = .{
366366 .llvm_name = "sm_50",
367367 .description = "Target SM 50",
368368 .dependencies = featureSet(&[_]Feature{}),
369369 };
370 result[@intFromEnum(Feature.sm_52)] = .{
370 result[@backingInt(Feature.sm_52)] = .{
371371 .llvm_name = "sm_52",
372372 .description = "Target SM 52",
373373 .dependencies = featureSet(&[_]Feature{}),
374374 };
375 result[@intFromEnum(Feature.sm_53)] = .{
375 result[@backingInt(Feature.sm_53)] = .{
376376 .llvm_name = "sm_53",
377377 .description = "Target SM 53",
378378 .dependencies = featureSet(&[_]Feature{}),
379379 };
380 result[@intFromEnum(Feature.sm_60)] = .{
380 result[@backingInt(Feature.sm_60)] = .{
381381 .llvm_name = "sm_60",
382382 .description = "Target SM 60",
383383 .dependencies = featureSet(&[_]Feature{}),
384384 };
385 result[@intFromEnum(Feature.sm_61)] = .{
385 result[@backingInt(Feature.sm_61)] = .{
386386 .llvm_name = "sm_61",
387387 .description = "Target SM 61",
388388 .dependencies = featureSet(&[_]Feature{}),
389389 };
390 result[@intFromEnum(Feature.sm_62)] = .{
390 result[@backingInt(Feature.sm_62)] = .{
391391 .llvm_name = "sm_62",
392392 .description = "Target SM 62",
393393 .dependencies = featureSet(&[_]Feature{}),
394394 };
395 result[@intFromEnum(Feature.sm_70)] = .{
395 result[@backingInt(Feature.sm_70)] = .{
396396 .llvm_name = "sm_70",
397397 .description = "Target SM 70",
398398 .dependencies = featureSet(&[_]Feature{}),
399399 };
400 result[@intFromEnum(Feature.sm_72)] = .{
400 result[@backingInt(Feature.sm_72)] = .{
401401 .llvm_name = "sm_72",
402402 .description = "Target SM 72",
403403 .dependencies = featureSet(&[_]Feature{}),
404404 };
405 result[@intFromEnum(Feature.sm_75)] = .{
405 result[@backingInt(Feature.sm_75)] = .{
406406 .llvm_name = "sm_75",
407407 .description = "Target SM 75",
408408 .dependencies = featureSet(&[_]Feature{}),
409409 };
410 result[@intFromEnum(Feature.sm_80)] = .{
410 result[@backingInt(Feature.sm_80)] = .{
411411 .llvm_name = "sm_80",
412412 .description = "Target SM 80",
413413 .dependencies = featureSet(&[_]Feature{}),
414414 };
415 result[@intFromEnum(Feature.sm_86)] = .{
415 result[@backingInt(Feature.sm_86)] = .{
416416 .llvm_name = "sm_86",
417417 .description = "Target SM 86",
418418 .dependencies = featureSet(&[_]Feature{}),
419419 };
420 result[@intFromEnum(Feature.sm_87)] = .{
420 result[@backingInt(Feature.sm_87)] = .{
421421 .llvm_name = "sm_87",
422422 .description = "Target SM 87",
423423 .dependencies = featureSet(&[_]Feature{}),
424424 };
425 result[@intFromEnum(Feature.sm_88)] = .{
425 result[@backingInt(Feature.sm_88)] = .{
426426 .llvm_name = "sm_88",
427427 .description = "Target SM 88",
428428 .dependencies = featureSet(&[_]Feature{}),
429429 };
430 result[@intFromEnum(Feature.sm_89)] = .{
430 result[@backingInt(Feature.sm_89)] = .{
431431 .llvm_name = "sm_89",
432432 .description = "Target SM 89",
433433 .dependencies = featureSet(&[_]Feature{}),
434434 };
435 result[@intFromEnum(Feature.sm_90)] = .{
435 result[@backingInt(Feature.sm_90)] = .{
436436 .llvm_name = "sm_90",
437437 .description = "Target SM 90",
438438 .dependencies = featureSet(&[_]Feature{}),
439439 };
440 result[@intFromEnum(Feature.sm_90a)] = .{
440 result[@backingInt(Feature.sm_90a)] = .{
441441 .llvm_name = "sm_90a",
442442 .description = "Target SM 90a",
443443 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/powerpc.zig+80-80
......@@ -96,331 +96,331 @@ pub const all_features = blk: {
9696 const len = @typeInfo(Feature).@"enum".field_names.len;
9797 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
9898 var result: [len]CpuFeature = undefined;
99 result[@intFromEnum(Feature.@"64bit")] = .{
99 result[@backingInt(Feature.@"64bit")] = .{
100100 .llvm_name = "64bit",
101101 .description = "Enable 64-bit mode",
102102 .dependencies = featureSet(&[_]Feature{
103103 .@"64bit_support",
104104 }),
105105 };
106 result[@intFromEnum(Feature.@"64bit_support")] = .{
106 result[@backingInt(Feature.@"64bit_support")] = .{
107107 .llvm_name = "64bit-support",
108108 .description = "Supports 64-bit instructions",
109109 .dependencies = featureSet(&[_]Feature{}),
110110 };
111 result[@intFromEnum(Feature.@"64bitregs")] = .{
111 result[@backingInt(Feature.@"64bitregs")] = .{
112112 .llvm_name = "64bitregs",
113113 .description = "Enable 64-bit registers usage for ppc32 [beta]",
114114 .dependencies = featureSet(&[_]Feature{}),
115115 };
116 result[@intFromEnum(Feature.allow_unaligned_fp_access)] = .{
116 result[@backingInt(Feature.allow_unaligned_fp_access)] = .{
117117 .llvm_name = "allow-unaligned-fp-access",
118118 .description = "CPU does not trap on unaligned FP access",
119119 .dependencies = featureSet(&[_]Feature{}),
120120 };
121 result[@intFromEnum(Feature.altivec)] = .{
121 result[@backingInt(Feature.altivec)] = .{
122122 .llvm_name = "altivec",
123123 .description = "Enable Altivec instructions",
124124 .dependencies = featureSet(&[_]Feature{
125125 .fpu,
126126 }),
127127 };
128 result[@intFromEnum(Feature.booke)] = .{
128 result[@backingInt(Feature.booke)] = .{
129129 .llvm_name = "booke",
130130 .description = "Enable Book E instructions",
131131 .dependencies = featureSet(&[_]Feature{
132132 .icbt,
133133 }),
134134 };
135 result[@intFromEnum(Feature.bpermd)] = .{
135 result[@backingInt(Feature.bpermd)] = .{
136136 .llvm_name = "bpermd",
137137 .description = "Enable the bpermd instruction",
138138 .dependencies = featureSet(&[_]Feature{}),
139139 };
140 result[@intFromEnum(Feature.cmpb)] = .{
140 result[@backingInt(Feature.cmpb)] = .{
141141 .llvm_name = "cmpb",
142142 .description = "Enable the cmpb instruction",
143143 .dependencies = featureSet(&[_]Feature{}),
144144 };
145 result[@intFromEnum(Feature.crbits)] = .{
145 result[@backingInt(Feature.crbits)] = .{
146146 .llvm_name = "crbits",
147147 .description = "Use condition-register bits individually",
148148 .dependencies = featureSet(&[_]Feature{}),
149149 };
150 result[@intFromEnum(Feature.crypto)] = .{
150 result[@backingInt(Feature.crypto)] = .{
151151 .llvm_name = "crypto",
152152 .description = "Enable POWER8 Crypto instructions",
153153 .dependencies = featureSet(&[_]Feature{
154154 .power8_altivec,
155155 }),
156156 };
157 result[@intFromEnum(Feature.direct_move)] = .{
157 result[@backingInt(Feature.direct_move)] = .{
158158 .llvm_name = "direct-move",
159159 .description = "Enable Power8 direct move instructions",
160160 .dependencies = featureSet(&[_]Feature{
161161 .vsx,
162162 }),
163163 };
164 result[@intFromEnum(Feature.e500)] = .{
164 result[@backingInt(Feature.e500)] = .{
165165 .llvm_name = "e500",
166166 .description = "Enable E500/E500mc instructions",
167167 .dependencies = featureSet(&[_]Feature{}),
168168 };
169 result[@intFromEnum(Feature.efpu2)] = .{
169 result[@backingInt(Feature.efpu2)] = .{
170170 .llvm_name = "efpu2",
171171 .description = "Enable Embedded Floating-Point APU 2 instructions",
172172 .dependencies = featureSet(&[_]Feature{
173173 .spe,
174174 }),
175175 };
176 result[@intFromEnum(Feature.extdiv)] = .{
176 result[@backingInt(Feature.extdiv)] = .{
177177 .llvm_name = "extdiv",
178178 .description = "Enable extended divide instructions",
179179 .dependencies = featureSet(&[_]Feature{}),
180180 };
181 result[@intFromEnum(Feature.fast_MFLR)] = .{
181 result[@backingInt(Feature.fast_MFLR)] = .{
182182 .llvm_name = "fast-MFLR",
183183 .description = "MFLR is a fast instruction",
184184 .dependencies = featureSet(&[_]Feature{}),
185185 };
186 result[@intFromEnum(Feature.fcpsgn)] = .{
186 result[@backingInt(Feature.fcpsgn)] = .{
187187 .llvm_name = "fcpsgn",
188188 .description = "Enable the fcpsgn instruction",
189189 .dependencies = featureSet(&[_]Feature{
190190 .fpu,
191191 }),
192192 };
193 result[@intFromEnum(Feature.float128)] = .{
193 result[@backingInt(Feature.float128)] = .{
194194 .llvm_name = "float128",
195195 .description = "Enable the __float128 data type for IEEE-754R Binary128.",
196196 .dependencies = featureSet(&[_]Feature{
197197 .vsx,
198198 }),
199199 };
200 result[@intFromEnum(Feature.fpcvt)] = .{
200 result[@backingInt(Feature.fpcvt)] = .{
201201 .llvm_name = "fpcvt",
202202 .description = "Enable fc[ft]* (unsigned and single-precision) and lfiwzx instructions",
203203 .dependencies = featureSet(&[_]Feature{
204204 .fpu,
205205 }),
206206 };
207 result[@intFromEnum(Feature.fprnd)] = .{
207 result[@backingInt(Feature.fprnd)] = .{
208208 .llvm_name = "fprnd",
209209 .description = "Enable the fri[mnpz] instructions",
210210 .dependencies = featureSet(&[_]Feature{
211211 .fpu,
212212 }),
213213 };
214 result[@intFromEnum(Feature.fpu)] = .{
214 result[@backingInt(Feature.fpu)] = .{
215215 .llvm_name = "fpu",
216216 .description = "Enable classic FPU instructions",
217217 .dependencies = featureSet(&[_]Feature{
218218 .hard_float,
219219 }),
220220 };
221 result[@intFromEnum(Feature.fre)] = .{
221 result[@backingInt(Feature.fre)] = .{
222222 .llvm_name = "fre",
223223 .description = "Enable the fre instruction",
224224 .dependencies = featureSet(&[_]Feature{
225225 .fpu,
226226 }),
227227 };
228 result[@intFromEnum(Feature.fres)] = .{
228 result[@backingInt(Feature.fres)] = .{
229229 .llvm_name = "fres",
230230 .description = "Enable the fres instruction",
231231 .dependencies = featureSet(&[_]Feature{
232232 .fpu,
233233 }),
234234 };
235 result[@intFromEnum(Feature.frsqrte)] = .{
235 result[@backingInt(Feature.frsqrte)] = .{
236236 .llvm_name = "frsqrte",
237237 .description = "Enable the frsqrte instruction",
238238 .dependencies = featureSet(&[_]Feature{
239239 .fpu,
240240 }),
241241 };
242 result[@intFromEnum(Feature.frsqrtes)] = .{
242 result[@backingInt(Feature.frsqrtes)] = .{
243243 .llvm_name = "frsqrtes",
244244 .description = "Enable the frsqrtes instruction",
245245 .dependencies = featureSet(&[_]Feature{
246246 .fpu,
247247 }),
248248 };
249 result[@intFromEnum(Feature.fsqrt)] = .{
249 result[@backingInt(Feature.fsqrt)] = .{
250250 .llvm_name = "fsqrt",
251251 .description = "Enable the fsqrt instruction",
252252 .dependencies = featureSet(&[_]Feature{
253253 .fpu,
254254 }),
255255 };
256 result[@intFromEnum(Feature.fuse_add_logical)] = .{
256 result[@backingInt(Feature.fuse_add_logical)] = .{
257257 .llvm_name = "fuse-add-logical",
258258 .description = "Target supports Add with Logical Operations fusion",
259259 .dependencies = featureSet(&[_]Feature{
260260 .fusion,
261261 }),
262262 };
263 result[@intFromEnum(Feature.fuse_addi_load)] = .{
263 result[@backingInt(Feature.fuse_addi_load)] = .{
264264 .llvm_name = "fuse-addi-load",
265265 .description = "Power8 Addi-Load fusion",
266266 .dependencies = featureSet(&[_]Feature{
267267 .fusion,
268268 }),
269269 };
270 result[@intFromEnum(Feature.fuse_addis_load)] = .{
270 result[@backingInt(Feature.fuse_addis_load)] = .{
271271 .llvm_name = "fuse-addis-load",
272272 .description = "Power8 Addis-Load fusion",
273273 .dependencies = featureSet(&[_]Feature{
274274 .fusion,
275275 }),
276276 };
277 result[@intFromEnum(Feature.fuse_arith_add)] = .{
277 result[@backingInt(Feature.fuse_arith_add)] = .{
278278 .llvm_name = "fuse-arith-add",
279279 .description = "Target supports Arithmetic Operations with Add fusion",
280280 .dependencies = featureSet(&[_]Feature{
281281 .fusion,
282282 }),
283283 };
284 result[@intFromEnum(Feature.fuse_back2back)] = .{
284 result[@backingInt(Feature.fuse_back2back)] = .{
285285 .llvm_name = "fuse-back2back",
286286 .description = "Target supports general back to back fusion",
287287 .dependencies = featureSet(&[_]Feature{
288288 .fusion,
289289 }),
290290 };
291 result[@intFromEnum(Feature.fuse_cmp)] = .{
291 result[@backingInt(Feature.fuse_cmp)] = .{
292292 .llvm_name = "fuse-cmp",
293293 .description = "Target supports Comparison Operations fusion",
294294 .dependencies = featureSet(&[_]Feature{
295295 .fusion,
296296 }),
297297 };
298 result[@intFromEnum(Feature.fuse_logical)] = .{
298 result[@backingInt(Feature.fuse_logical)] = .{
299299 .llvm_name = "fuse-logical",
300300 .description = "Target supports Logical Operations fusion",
301301 .dependencies = featureSet(&[_]Feature{
302302 .fusion,
303303 }),
304304 };
305 result[@intFromEnum(Feature.fuse_logical_add)] = .{
305 result[@backingInt(Feature.fuse_logical_add)] = .{
306306 .llvm_name = "fuse-logical-add",
307307 .description = "Target supports Logical with Add Operations fusion",
308308 .dependencies = featureSet(&[_]Feature{
309309 .fusion,
310310 }),
311311 };
312 result[@intFromEnum(Feature.fuse_sha3)] = .{
312 result[@backingInt(Feature.fuse_sha3)] = .{
313313 .llvm_name = "fuse-sha3",
314314 .description = "Target supports SHA3 assist fusion",
315315 .dependencies = featureSet(&[_]Feature{
316316 .fusion,
317317 }),
318318 };
319 result[@intFromEnum(Feature.fuse_store)] = .{
319 result[@backingInt(Feature.fuse_store)] = .{
320320 .llvm_name = "fuse-store",
321321 .description = "Target supports store clustering",
322322 .dependencies = featureSet(&[_]Feature{
323323 .fusion,
324324 }),
325325 };
326 result[@intFromEnum(Feature.fuse_wideimm)] = .{
326 result[@backingInt(Feature.fuse_wideimm)] = .{
327327 .llvm_name = "fuse-wideimm",
328328 .description = "Target supports Wide-Immediate fusion",
329329 .dependencies = featureSet(&[_]Feature{
330330 .fusion,
331331 }),
332332 };
333 result[@intFromEnum(Feature.fuse_zeromove)] = .{
333 result[@backingInt(Feature.fuse_zeromove)] = .{
334334 .llvm_name = "fuse-zeromove",
335335 .description = "Target supports move to SPR with branch fusion",
336336 .dependencies = featureSet(&[_]Feature{
337337 .fusion,
338338 }),
339339 };
340 result[@intFromEnum(Feature.fusion)] = .{
340 result[@backingInt(Feature.fusion)] = .{
341341 .llvm_name = "fusion",
342342 .description = "Target supports instruction fusion",
343343 .dependencies = featureSet(&[_]Feature{}),
344344 };
345 result[@intFromEnum(Feature.hard_float)] = .{
345 result[@backingInt(Feature.hard_float)] = .{
346346 .llvm_name = "hard-float",
347347 .description = "Enable floating-point instructions",
348348 .dependencies = featureSet(&[_]Feature{}),
349349 };
350 result[@intFromEnum(Feature.htm)] = .{
350 result[@backingInt(Feature.htm)] = .{
351351 .llvm_name = "htm",
352352 .description = "Enable Hardware Transactional Memory instructions",
353353 .dependencies = featureSet(&[_]Feature{}),
354354 };
355 result[@intFromEnum(Feature.icbt)] = .{
355 result[@backingInt(Feature.icbt)] = .{
356356 .llvm_name = "icbt",
357357 .description = "Enable icbt instruction",
358358 .dependencies = featureSet(&[_]Feature{}),
359359 };
360 result[@intFromEnum(Feature.invariant_function_descriptors)] = .{
360 result[@backingInt(Feature.invariant_function_descriptors)] = .{
361361 .llvm_name = "invariant-function-descriptors",
362362 .description = "Assume function descriptors are invariant",
363363 .dependencies = featureSet(&[_]Feature{}),
364364 };
365 result[@intFromEnum(Feature.isa_future_instructions)] = .{
365 result[@backingInt(Feature.isa_future_instructions)] = .{
366366 .llvm_name = "isa-future-instructions",
367367 .description = "Enable instructions for Future ISA.",
368368 .dependencies = featureSet(&[_]Feature{
369369 .isa_v31_instructions,
370370 }),
371371 };
372 result[@intFromEnum(Feature.isa_v206_instructions)] = .{
372 result[@backingInt(Feature.isa_v206_instructions)] = .{
373373 .llvm_name = "isa-v206-instructions",
374374 .description = "Enable instructions in ISA 2.06.",
375375 .dependencies = featureSet(&[_]Feature{}),
376376 };
377 result[@intFromEnum(Feature.isa_v207_instructions)] = .{
377 result[@backingInt(Feature.isa_v207_instructions)] = .{
378378 .llvm_name = "isa-v207-instructions",
379379 .description = "Enable instructions in ISA 2.07.",
380380 .dependencies = featureSet(&[_]Feature{}),
381381 };
382 result[@intFromEnum(Feature.isa_v30_instructions)] = .{
382 result[@backingInt(Feature.isa_v30_instructions)] = .{
383383 .llvm_name = "isa-v30-instructions",
384384 .description = "Enable instructions in ISA 3.0.",
385385 .dependencies = featureSet(&[_]Feature{
386386 .isa_v207_instructions,
387387 }),
388388 };
389 result[@intFromEnum(Feature.isa_v31_instructions)] = .{
389 result[@backingInt(Feature.isa_v31_instructions)] = .{
390390 .llvm_name = "isa-v31-instructions",
391391 .description = "Enable instructions in ISA 3.1.",
392392 .dependencies = featureSet(&[_]Feature{
393393 .isa_v30_instructions,
394394 }),
395395 };
396 result[@intFromEnum(Feature.isel)] = .{
396 result[@backingInt(Feature.isel)] = .{
397397 .llvm_name = "isel",
398398 .description = "Enable the isel instruction",
399399 .dependencies = featureSet(&[_]Feature{}),
400400 };
401 result[@intFromEnum(Feature.ldbrx)] = .{
401 result[@backingInt(Feature.ldbrx)] = .{
402402 .llvm_name = "ldbrx",
403403 .description = "Enable the ldbrx instruction",
404404 .dependencies = featureSet(&[_]Feature{}),
405405 };
406 result[@intFromEnum(Feature.lfiwax)] = .{
406 result[@backingInt(Feature.lfiwax)] = .{
407407 .llvm_name = "lfiwax",
408408 .description = "Enable the lfiwax instruction",
409409 .dependencies = featureSet(&[_]Feature{
410410 .fpu,
411411 }),
412412 };
413 result[@intFromEnum(Feature.longcall)] = .{
413 result[@backingInt(Feature.longcall)] = .{
414414 .llvm_name = "longcall",
415415 .description = "Always use indirect calls",
416416 .dependencies = featureSet(&[_]Feature{}),
417417 };
418 result[@intFromEnum(Feature.mfocrf)] = .{
418 result[@backingInt(Feature.mfocrf)] = .{
419419 .llvm_name = "mfocrf",
420420 .description = "Enable the MFOCRF instruction",
421421 .dependencies = featureSet(&[_]Feature{}),
422422 };
423 result[@intFromEnum(Feature.mma)] = .{
423 result[@backingInt(Feature.mma)] = .{
424424 .llvm_name = "mma",
425425 .description = "Enable MMA instructions",
426426 .dependencies = featureSet(&[_]Feature{
......@@ -429,38 +429,38 @@ pub const all_features = blk: {
429429 .power9_altivec,
430430 }),
431431 };
432 result[@intFromEnum(Feature.msync)] = .{
432 result[@backingInt(Feature.msync)] = .{
433433 .llvm_name = "msync",
434434 .description = "Has only the msync instruction instead of sync",
435435 .dependencies = featureSet(&[_]Feature{
436436 .booke,
437437 }),
438438 };
439 result[@intFromEnum(Feature.paired_vector_memops)] = .{
439 result[@backingInt(Feature.paired_vector_memops)] = .{
440440 .llvm_name = "paired-vector-memops",
441441 .description = "32Byte load and store instructions",
442442 .dependencies = featureSet(&[_]Feature{
443443 .isa_v30_instructions,
444444 }),
445445 };
446 result[@intFromEnum(Feature.partword_atomics)] = .{
446 result[@backingInt(Feature.partword_atomics)] = .{
447447 .llvm_name = "partword-atomics",
448448 .description = "Enable l[bh]arx and st[bh]cx.",
449449 .dependencies = featureSet(&[_]Feature{}),
450450 };
451 result[@intFromEnum(Feature.pcrelative_memops)] = .{
451 result[@backingInt(Feature.pcrelative_memops)] = .{
452452 .llvm_name = "pcrelative-memops",
453453 .description = "Enable PC relative Memory Ops",
454454 .dependencies = featureSet(&[_]Feature{
455455 .prefix_instrs,
456456 }),
457457 };
458 result[@intFromEnum(Feature.popcntd)] = .{
458 result[@backingInt(Feature.popcntd)] = .{
459459 .llvm_name = "popcntd",
460460 .description = "Enable the popcnt[dw] instructions",
461461 .dependencies = featureSet(&[_]Feature{}),
462462 };
463 result[@intFromEnum(Feature.power10_vector)] = .{
463 result[@backingInt(Feature.power10_vector)] = .{
464464 .llvm_name = "power10-vector",
465465 .description = "Enable POWER10 vector instructions",
466466 .dependencies = featureSet(&[_]Feature{
......@@ -468,14 +468,14 @@ pub const all_features = blk: {
468468 .power9_vector,
469469 }),
470470 };
471 result[@intFromEnum(Feature.power8_altivec)] = .{
471 result[@backingInt(Feature.power8_altivec)] = .{
472472 .llvm_name = "power8-altivec",
473473 .description = "Enable POWER8 Altivec instructions",
474474 .dependencies = featureSet(&[_]Feature{
475475 .altivec,
476476 }),
477477 };
478 result[@intFromEnum(Feature.power8_vector)] = .{
478 result[@backingInt(Feature.power8_vector)] = .{
479479 .llvm_name = "power8-vector",
480480 .description = "Enable POWER8 vector instructions",
481481 .dependencies = featureSet(&[_]Feature{
......@@ -483,7 +483,7 @@ pub const all_features = blk: {
483483 .vsx,
484484 }),
485485 };
486 result[@intFromEnum(Feature.power9_altivec)] = .{
486 result[@backingInt(Feature.power9_altivec)] = .{
487487 .llvm_name = "power9-altivec",
488488 .description = "Enable POWER9 Altivec instructions",
489489 .dependencies = featureSet(&[_]Feature{
......@@ -491,7 +491,7 @@ pub const all_features = blk: {
491491 .power8_altivec,
492492 }),
493493 };
494 result[@intFromEnum(Feature.power9_vector)] = .{
494 result[@backingInt(Feature.power9_vector)] = .{
495495 .llvm_name = "power9-vector",
496496 .description = "Enable POWER9 vector instructions",
497497 .dependencies = featureSet(&[_]Feature{
......@@ -499,93 +499,93 @@ pub const all_features = blk: {
499499 .power9_altivec,
500500 }),
501501 };
502 result[@intFromEnum(Feature.ppc4xx)] = .{
502 result[@backingInt(Feature.ppc4xx)] = .{
503503 .llvm_name = "ppc4xx",
504504 .description = "Enable PPC 4xx instructions",
505505 .dependencies = featureSet(&[_]Feature{}),
506506 };
507 result[@intFromEnum(Feature.ppc6xx)] = .{
507 result[@backingInt(Feature.ppc6xx)] = .{
508508 .llvm_name = "ppc6xx",
509509 .description = "Enable PPC 6xx instructions",
510510 .dependencies = featureSet(&[_]Feature{}),
511511 };
512 result[@intFromEnum(Feature.ppc_postra_sched)] = .{
512 result[@backingInt(Feature.ppc_postra_sched)] = .{
513513 .llvm_name = "ppc-postra-sched",
514514 .description = "Use PowerPC post-RA scheduling strategy",
515515 .dependencies = featureSet(&[_]Feature{}),
516516 };
517 result[@intFromEnum(Feature.ppc_prera_sched)] = .{
517 result[@backingInt(Feature.ppc_prera_sched)] = .{
518518 .llvm_name = "ppc-prera-sched",
519519 .description = "Use PowerPC pre-RA scheduling strategy",
520520 .dependencies = featureSet(&[_]Feature{}),
521521 };
522 result[@intFromEnum(Feature.predictable_select_expensive)] = .{
522 result[@backingInt(Feature.predictable_select_expensive)] = .{
523523 .llvm_name = "predictable-select-expensive",
524524 .description = "Prefer likely predicted branches over selects",
525525 .dependencies = featureSet(&[_]Feature{}),
526526 };
527 result[@intFromEnum(Feature.prefix_instrs)] = .{
527 result[@backingInt(Feature.prefix_instrs)] = .{
528528 .llvm_name = "prefix-instrs",
529529 .description = "Enable prefixed instructions",
530530 .dependencies = featureSet(&[_]Feature{
531531 .isa_v31_instructions,
532532 }),
533533 };
534 result[@intFromEnum(Feature.privileged)] = .{
534 result[@backingInt(Feature.privileged)] = .{
535535 .llvm_name = "privileged",
536536 .description = "Add privileged instructions",
537537 .dependencies = featureSet(&[_]Feature{}),
538538 };
539 result[@intFromEnum(Feature.quadword_atomics)] = .{
539 result[@backingInt(Feature.quadword_atomics)] = .{
540540 .llvm_name = "quadword-atomics",
541541 .description = "Enable lqarx and stqcx.",
542542 .dependencies = featureSet(&[_]Feature{}),
543543 };
544 result[@intFromEnum(Feature.recipprec)] = .{
544 result[@backingInt(Feature.recipprec)] = .{
545545 .llvm_name = "recipprec",
546546 .description = "Assume higher precision reciprocal estimates",
547547 .dependencies = featureSet(&[_]Feature{}),
548548 };
549 result[@intFromEnum(Feature.rop_protect)] = .{
549 result[@backingInt(Feature.rop_protect)] = .{
550550 .llvm_name = "rop-protect",
551551 .description = "Add ROP protect",
552552 .dependencies = featureSet(&[_]Feature{}),
553553 };
554 result[@intFromEnum(Feature.secure_plt)] = .{
554 result[@backingInt(Feature.secure_plt)] = .{
555555 .llvm_name = "secure-plt",
556556 .description = "Enable secure plt mode",
557557 .dependencies = featureSet(&[_]Feature{}),
558558 };
559 result[@intFromEnum(Feature.slow_popcntd)] = .{
559 result[@backingInt(Feature.slow_popcntd)] = .{
560560 .llvm_name = "slow-popcntd",
561561 .description = "Has slow popcnt[dw] instructions",
562562 .dependencies = featureSet(&[_]Feature{}),
563563 };
564 result[@intFromEnum(Feature.spe)] = .{
564 result[@backingInt(Feature.spe)] = .{
565565 .llvm_name = "spe",
566566 .description = "Enable SPE instructions",
567567 .dependencies = featureSet(&[_]Feature{
568568 .hard_float,
569569 }),
570570 };
571 result[@intFromEnum(Feature.stfiwx)] = .{
571 result[@backingInt(Feature.stfiwx)] = .{
572572 .llvm_name = "stfiwx",
573573 .description = "Enable the stfiwx instruction",
574574 .dependencies = featureSet(&[_]Feature{
575575 .fpu,
576576 }),
577577 };
578 result[@intFromEnum(Feature.two_const_nr)] = .{
578 result[@backingInt(Feature.two_const_nr)] = .{
579579 .llvm_name = "two-const-nr",
580580 .description = "Requires two constant Newton-Raphson computation",
581581 .dependencies = featureSet(&[_]Feature{}),
582582 };
583 result[@intFromEnum(Feature.vectors_use_two_units)] = .{
583 result[@backingInt(Feature.vectors_use_two_units)] = .{
584584 .llvm_name = "vectors-use-two-units",
585585 .description = "Vectors use two units",
586586 .dependencies = featureSet(&[_]Feature{}),
587587 };
588 result[@intFromEnum(Feature.vsx)] = .{
588 result[@backingInt(Feature.vsx)] = .{
589589 .llvm_name = "vsx",
590590 .description = "Enable VSX instructions",
591591 .dependencies = featureSet(&[_]Feature{
lib/std/Target/propeller.zig+1-1
......@@ -17,7 +17,7 @@ pub const all_features = blk: {
1717 const len = @typeInfo(Feature).@"enum".field_names.len;
1818 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
1919 var result: [len]CpuFeature = undefined;
20 result[@intFromEnum(Feature.p2)] = .{
20 result[@backingInt(Feature.p2)] = .{
2121 .llvm_name = null,
2222 .description = "Enable Propeller 2",
2323 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/riscv.zig+347-347
......@@ -364,17 +364,17 @@ pub const all_features = blk: {
364364 const len = @typeInfo(Feature).@"enum".field_names.len;
365365 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
366366 var result: [len]CpuFeature = undefined;
367 result[@intFromEnum(Feature.@"32bit")] = .{
367 result[@backingInt(Feature.@"32bit")] = .{
368368 .llvm_name = "32bit",
369369 .description = "Implements RV32",
370370 .dependencies = featureSet(&[_]Feature{}),
371371 };
372 result[@intFromEnum(Feature.@"64bit")] = .{
372 result[@backingInt(Feature.@"64bit")] = .{
373373 .llvm_name = "64bit",
374374 .description = "Implements RV64",
375375 .dependencies = featureSet(&[_]Feature{}),
376376 };
377 result[@intFromEnum(Feature.a)] = .{
377 result[@backingInt(Feature.a)] = .{
378378 .llvm_name = "a",
379379 .description = "'A' (Atomic Instructions)",
380380 .dependencies = featureSet(&[_]Feature{
......@@ -382,32 +382,32 @@ pub const all_features = blk: {
382382 .zalrsc,
383383 }),
384384 };
385 result[@intFromEnum(Feature.add_load_fusion)] = .{
385 result[@backingInt(Feature.add_load_fusion)] = .{
386386 .llvm_name = "add-load-fusion",
387387 .description = "Enable ADD(.UW) + load macrofusion",
388388 .dependencies = featureSet(&[_]Feature{}),
389389 };
390 result[@intFromEnum(Feature.addi_load_fusion)] = .{
390 result[@backingInt(Feature.addi_load_fusion)] = .{
391391 .llvm_name = "addi-load-fusion",
392392 .description = "Enable ADDI + load macrofusion",
393393 .dependencies = featureSet(&[_]Feature{}),
394394 };
395 result[@intFromEnum(Feature.andes45)] = .{
395 result[@backingInt(Feature.andes45)] = .{
396396 .llvm_name = "andes45",
397397 .description = "Andes 45-Series processors",
398398 .dependencies = featureSet(&[_]Feature{}),
399399 };
400 result[@intFromEnum(Feature.auipc_addi_fusion)] = .{
400 result[@backingInt(Feature.auipc_addi_fusion)] = .{
401401 .llvm_name = "auipc-addi-fusion",
402402 .description = "Enable AUIPC+ADDI macrofusion",
403403 .dependencies = featureSet(&[_]Feature{}),
404404 };
405 result[@intFromEnum(Feature.auipc_load_fusion)] = .{
405 result[@backingInt(Feature.auipc_load_fusion)] = .{
406406 .llvm_name = "auipc-load-fusion",
407407 .description = "Enable AUIPC + load macrofusion",
408408 .dependencies = featureSet(&[_]Feature{}),
409409 };
410 result[@intFromEnum(Feature.b)] = .{
410 result[@backingInt(Feature.b)] = .{
411411 .llvm_name = "b",
412412 .description = "'B' (the collection of the Zba, Zbb, Zbs extensions)",
413413 .dependencies = featureSet(&[_]Feature{
......@@ -416,86 +416,86 @@ pub const all_features = blk: {
416416 .zbs,
417417 }),
418418 };
419 result[@intFromEnum(Feature.bfext_fusion)] = .{
419 result[@backingInt(Feature.bfext_fusion)] = .{
420420 .llvm_name = "bfext-fusion",
421421 .description = "Enable SLLI+SRLI (bitfield extract) macrofusion",
422422 .dependencies = featureSet(&[_]Feature{}),
423423 };
424 result[@intFromEnum(Feature.c)] = .{
424 result[@backingInt(Feature.c)] = .{
425425 .llvm_name = "c",
426426 .description = "'C' (Compressed Instructions)",
427427 .dependencies = featureSet(&[_]Feature{
428428 .zca,
429429 }),
430430 };
431 result[@intFromEnum(Feature.conditional_cmv_fusion)] = .{
431 result[@backingInt(Feature.conditional_cmv_fusion)] = .{
432432 .llvm_name = "conditional-cmv-fusion",
433433 .description = "Enable branch+c.mv fusion",
434434 .dependencies = featureSet(&[_]Feature{}),
435435 };
436 result[@intFromEnum(Feature.d)] = .{
436 result[@backingInt(Feature.d)] = .{
437437 .llvm_name = "d",
438438 .description = "'D' (Double-Precision Floating-Point)",
439439 .dependencies = featureSet(&[_]Feature{
440440 .f,
441441 }),
442442 };
443 result[@intFromEnum(Feature.disable_latency_sched_heuristic)] = .{
443 result[@backingInt(Feature.disable_latency_sched_heuristic)] = .{
444444 .llvm_name = "disable-latency-sched-heuristic",
445445 .description = "Disable latency scheduling heuristic",
446446 .dependencies = featureSet(&[_]Feature{}),
447447 };
448 result[@intFromEnum(Feature.disable_misched_load_clustering)] = .{
448 result[@backingInt(Feature.disable_misched_load_clustering)] = .{
449449 .llvm_name = "disable-misched-load-clustering",
450450 .description = "Disable load clustering in the machine scheduler",
451451 .dependencies = featureSet(&[_]Feature{}),
452452 };
453 result[@intFromEnum(Feature.disable_misched_store_clustering)] = .{
453 result[@backingInt(Feature.disable_misched_store_clustering)] = .{
454454 .llvm_name = "disable-misched-store-clustering",
455455 .description = "Disable store clustering in the machine scheduler",
456456 .dependencies = featureSet(&[_]Feature{}),
457457 };
458 result[@intFromEnum(Feature.disable_postmisched_load_clustering)] = .{
458 result[@backingInt(Feature.disable_postmisched_load_clustering)] = .{
459459 .llvm_name = "disable-postmisched-load-clustering",
460460 .description = "Disable PostRA load clustering in the machine scheduler",
461461 .dependencies = featureSet(&[_]Feature{}),
462462 };
463 result[@intFromEnum(Feature.disable_postmisched_store_clustering)] = .{
463 result[@backingInt(Feature.disable_postmisched_store_clustering)] = .{
464464 .llvm_name = "disable-postmisched-store-clustering",
465465 .description = "Disable PostRA store clustering in the machine scheduler",
466466 .dependencies = featureSet(&[_]Feature{}),
467467 };
468 result[@intFromEnum(Feature.dlen_factor_2)] = .{
468 result[@backingInt(Feature.dlen_factor_2)] = .{
469469 .llvm_name = "dlen-factor-2",
470470 .description = "Vector unit DLEN(data path width) is half of VLEN",
471471 .dependencies = featureSet(&[_]Feature{}),
472472 };
473 result[@intFromEnum(Feature.e)] = .{
473 result[@backingInt(Feature.e)] = .{
474474 .llvm_name = "e",
475475 .description = "'E' (Embedded Instruction Set with 16 GPRs)",
476476 .dependencies = featureSet(&[_]Feature{}),
477477 };
478 result[@intFromEnum(Feature.enable_vsetvli_sched_heuristic)] = .{
478 result[@backingInt(Feature.enable_vsetvli_sched_heuristic)] = .{
479479 .llvm_name = "enable-vsetvli-sched-heuristic",
480480 .description = "Enable vsetvli-based scheduling heuristic",
481481 .dependencies = featureSet(&[_]Feature{}),
482482 };
483 result[@intFromEnum(Feature.exact_asm)] = .{
483 result[@backingInt(Feature.exact_asm)] = .{
484484 .llvm_name = "exact-asm",
485485 .description = "Enable Exact Assembly (Disables Compression and Relaxation)",
486486 .dependencies = featureSet(&[_]Feature{}),
487487 };
488 result[@intFromEnum(Feature.experimental)] = .{
488 result[@backingInt(Feature.experimental)] = .{
489489 .llvm_name = "experimental",
490490 .description = "Experimental intrinsics",
491491 .dependencies = featureSet(&[_]Feature{}),
492492 };
493 result[@intFromEnum(Feature.experimental_p)] = .{
493 result[@backingInt(Feature.experimental_p)] = .{
494494 .llvm_name = "experimental-p",
495495 .description = "'P' ('Base P' (Packed SIMD))",
496496 .dependencies = featureSet(&[_]Feature{}),
497497 };
498 result[@intFromEnum(Feature.experimental_rvm23u32)] = .{
498 result[@backingInt(Feature.experimental_rvm23u32)] = .{
499499 .llvm_name = "experimental-rvm23u32",
500500 .description = "RISC-V experimental-rvm23u32 profile",
501501 .dependencies = featureSet(&[_]Feature{
......@@ -512,49 +512,49 @@ pub const all_features = blk: {
512512 .zimop,
513513 }),
514514 };
515 result[@intFromEnum(Feature.experimental_smpmpmt)] = .{
515 result[@backingInt(Feature.experimental_smpmpmt)] = .{
516516 .llvm_name = "experimental-smpmpmt",
517517 .description = "'Smpmpmt' (PMP-based Memory Types Extension)",
518518 .dependencies = featureSet(&[_]Feature{}),
519519 };
520 result[@intFromEnum(Feature.experimental_svukte)] = .{
520 result[@backingInt(Feature.experimental_svukte)] = .{
521521 .llvm_name = "experimental-svukte",
522522 .description = "'Svukte' (Address-Independent Latency of User-Mode Faults to Supervisor Addresses)",
523523 .dependencies = featureSet(&[_]Feature{}),
524524 };
525 result[@intFromEnum(Feature.experimental_xrivosvisni)] = .{
525 result[@backingInt(Feature.experimental_xrivosvisni)] = .{
526526 .llvm_name = "experimental-xrivosvisni",
527527 .description = "'XRivosVisni' (Rivos Vector Integer Small New)",
528528 .dependencies = featureSet(&[_]Feature{}),
529529 };
530 result[@intFromEnum(Feature.experimental_xrivosvizip)] = .{
530 result[@backingInt(Feature.experimental_xrivosvizip)] = .{
531531 .llvm_name = "experimental-xrivosvizip",
532532 .description = "'XRivosVizip' (Rivos Vector Register Zips)",
533533 .dependencies = featureSet(&[_]Feature{}),
534534 };
535 result[@intFromEnum(Feature.experimental_xsfmclic)] = .{
535 result[@backingInt(Feature.experimental_xsfmclic)] = .{
536536 .llvm_name = "experimental-xsfmclic",
537537 .description = "'XSfmclic' (SiFive CLIC Machine-mode CSRs)",
538538 .dependencies = featureSet(&[_]Feature{}),
539539 };
540 result[@intFromEnum(Feature.experimental_xsfsclic)] = .{
540 result[@backingInt(Feature.experimental_xsfsclic)] = .{
541541 .llvm_name = "experimental-xsfsclic",
542542 .description = "'XSfsclic' (SiFive CLIC Supervisor-mode CSRs)",
543543 .dependencies = featureSet(&[_]Feature{}),
544544 };
545 result[@intFromEnum(Feature.experimental_zibi)] = .{
545 result[@backingInt(Feature.experimental_zibi)] = .{
546546 .llvm_name = "experimental-zibi",
547547 .description = "'Zibi' (Branch with Immediate)",
548548 .dependencies = featureSet(&[_]Feature{}),
549549 };
550 result[@intFromEnum(Feature.experimental_zicfilp)] = .{
550 result[@backingInt(Feature.experimental_zicfilp)] = .{
551551 .llvm_name = "experimental-zicfilp",
552552 .description = "'Zicfilp' (Landing pad)",
553553 .dependencies = featureSet(&[_]Feature{
554554 .zicsr,
555555 }),
556556 };
557 result[@intFromEnum(Feature.experimental_zicfiss)] = .{
557 result[@backingInt(Feature.experimental_zicfiss)] = .{
558558 .llvm_name = "experimental-zicfiss",
559559 .description = "'Zicfiss' (Shadow stack)",
560560 .dependencies = featureSet(&[_]Feature{
......@@ -562,14 +562,14 @@ pub const all_features = blk: {
562562 .zimop,
563563 }),
564564 };
565 result[@intFromEnum(Feature.experimental_zvbc32e)] = .{
565 result[@backingInt(Feature.experimental_zvbc32e)] = .{
566566 .llvm_name = "experimental-zvbc32e",
567567 .description = "'Zvbc32e' (Vector Carryless Multiplication with 32-bits elements)",
568568 .dependencies = featureSet(&[_]Feature{
569569 .zve32x,
570570 }),
571571 };
572 result[@intFromEnum(Feature.experimental_zvfbfa)] = .{
572 result[@backingInt(Feature.experimental_zvfbfa)] = .{
573573 .llvm_name = "experimental-zvfbfa",
574574 .description = "'Zvfbfa' (Additional BF16 vector compute support)",
575575 .dependencies = featureSet(&[_]Feature{
......@@ -577,324 +577,324 @@ pub const all_features = blk: {
577577 .zve32f,
578578 }),
579579 };
580 result[@intFromEnum(Feature.experimental_zvfofp8min)] = .{
580 result[@backingInt(Feature.experimental_zvfofp8min)] = .{
581581 .llvm_name = "experimental-zvfofp8min",
582582 .description = "'Zvfofp8min' (Vector OFP8 Converts)",
583583 .dependencies = featureSet(&[_]Feature{
584584 .zve32f,
585585 }),
586586 };
587 result[@intFromEnum(Feature.experimental_zvkgs)] = .{
587 result[@backingInt(Feature.experimental_zvkgs)] = .{
588588 .llvm_name = "experimental-zvkgs",
589589 .description = "'Zvkgs' (Vector-Scalar GCM instructions for Cryptography)",
590590 .dependencies = featureSet(&[_]Feature{
591591 .zvkg,
592592 }),
593593 };
594 result[@intFromEnum(Feature.experimental_zvqdotq)] = .{
594 result[@backingInt(Feature.experimental_zvqdotq)] = .{
595595 .llvm_name = "experimental-zvqdotq",
596596 .description = "'Zvqdotq' (Vector quad widening 4D Dot Product)",
597597 .dependencies = featureSet(&[_]Feature{
598598 .zve32x,
599599 }),
600600 };
601 result[@intFromEnum(Feature.f)] = .{
601 result[@backingInt(Feature.f)] = .{
602602 .llvm_name = "f",
603603 .description = "'F' (Single-Precision Floating-Point)",
604604 .dependencies = featureSet(&[_]Feature{
605605 .zicsr,
606606 }),
607607 };
608 result[@intFromEnum(Feature.forced_atomics)] = .{
608 result[@backingInt(Feature.forced_atomics)] = .{
609609 .llvm_name = "forced-atomics",
610610 .description = "Assume that lock-free native-width atomics are available",
611611 .dependencies = featureSet(&[_]Feature{}),
612612 };
613 result[@intFromEnum(Feature.h)] = .{
613 result[@backingInt(Feature.h)] = .{
614614 .llvm_name = "h",
615615 .description = "'H' (Hypervisor)",
616616 .dependencies = featureSet(&[_]Feature{}),
617617 };
618 result[@intFromEnum(Feature.i)] = .{
618 result[@backingInt(Feature.i)] = .{
619619 .llvm_name = "i",
620620 .description = "'I' (Base Integer Instruction Set)",
621621 .dependencies = featureSet(&[_]Feature{}),
622622 };
623 result[@intFromEnum(Feature.ld_add_fusion)] = .{
623 result[@backingInt(Feature.ld_add_fusion)] = .{
624624 .llvm_name = "ld-add-fusion",
625625 .description = "Enable LD+ADD macrofusion",
626626 .dependencies = featureSet(&[_]Feature{}),
627627 };
628 result[@intFromEnum(Feature.log_vrgather)] = .{
628 result[@backingInt(Feature.log_vrgather)] = .{
629629 .llvm_name = "log-vrgather",
630630 .description = "Has vrgather.vv with LMUL*log2(LMUL) latency",
631631 .dependencies = featureSet(&[_]Feature{}),
632632 };
633 result[@intFromEnum(Feature.lui_addi_fusion)] = .{
633 result[@backingInt(Feature.lui_addi_fusion)] = .{
634634 .llvm_name = "lui-addi-fusion",
635635 .description = "Enable LUI+ADDI macro fusion",
636636 .dependencies = featureSet(&[_]Feature{}),
637637 };
638 result[@intFromEnum(Feature.lui_load_fusion)] = .{
638 result[@backingInt(Feature.lui_load_fusion)] = .{
639639 .llvm_name = "lui-load-fusion",
640640 .description = "Enable LUI + load macrofusion",
641641 .dependencies = featureSet(&[_]Feature{}),
642642 };
643 result[@intFromEnum(Feature.m)] = .{
643 result[@backingInt(Feature.m)] = .{
644644 .llvm_name = "m",
645645 .description = "'M' (Integer Multiplication and Division)",
646646 .dependencies = featureSet(&[_]Feature{
647647 .zmmul,
648648 }),
649649 };
650 result[@intFromEnum(Feature.mips_p8700)] = .{
650 result[@backingInt(Feature.mips_p8700)] = .{
651651 .llvm_name = "mips-p8700",
652652 .description = "MIPS p8700 processor",
653653 .dependencies = featureSet(&[_]Feature{}),
654654 };
655 result[@intFromEnum(Feature.no_default_unroll)] = .{
655 result[@backingInt(Feature.no_default_unroll)] = .{
656656 .llvm_name = "no-default-unroll",
657657 .description = "Disable default unroll preference.",
658658 .dependencies = featureSet(&[_]Feature{}),
659659 };
660 result[@intFromEnum(Feature.no_sink_splat_operands)] = .{
660 result[@backingInt(Feature.no_sink_splat_operands)] = .{
661661 .llvm_name = "no-sink-splat-operands",
662662 .description = "Disable sink splat operands to enable .vx, .vf,.wx, and .wf instructions",
663663 .dependencies = featureSet(&[_]Feature{}),
664664 };
665 result[@intFromEnum(Feature.no_trailing_seq_cst_fence)] = .{
665 result[@backingInt(Feature.no_trailing_seq_cst_fence)] = .{
666666 .llvm_name = "no-trailing-seq-cst-fence",
667667 .description = "Disable trailing fence for seq-cst store.",
668668 .dependencies = featureSet(&[_]Feature{}),
669669 };
670 result[@intFromEnum(Feature.optimized_nf2_segment_load_store)] = .{
670 result[@backingInt(Feature.optimized_nf2_segment_load_store)] = .{
671671 .llvm_name = "optimized-nf2-segment-load-store",
672672 .description = "vlseg2eN.v and vsseg2eN.v are implemented as a wide memory op and shuffle",
673673 .dependencies = featureSet(&[_]Feature{}),
674674 };
675 result[@intFromEnum(Feature.optimized_nf3_segment_load_store)] = .{
675 result[@backingInt(Feature.optimized_nf3_segment_load_store)] = .{
676676 .llvm_name = "optimized-nf3-segment-load-store",
677677 .description = "vlseg3eN.v and vsseg3eN.v are implemented as a wide memory op and shuffle",
678678 .dependencies = featureSet(&[_]Feature{}),
679679 };
680 result[@intFromEnum(Feature.optimized_nf4_segment_load_store)] = .{
680 result[@backingInt(Feature.optimized_nf4_segment_load_store)] = .{
681681 .llvm_name = "optimized-nf4-segment-load-store",
682682 .description = "vlseg4eN.v and vsseg4eN.v are implemented as a wide memory op and shuffle",
683683 .dependencies = featureSet(&[_]Feature{}),
684684 };
685 result[@intFromEnum(Feature.optimized_nf5_segment_load_store)] = .{
685 result[@backingInt(Feature.optimized_nf5_segment_load_store)] = .{
686686 .llvm_name = "optimized-nf5-segment-load-store",
687687 .description = "vlseg5eN.v and vsseg5eN.v are implemented as a wide memory op and shuffle",
688688 .dependencies = featureSet(&[_]Feature{}),
689689 };
690 result[@intFromEnum(Feature.optimized_nf6_segment_load_store)] = .{
690 result[@backingInt(Feature.optimized_nf6_segment_load_store)] = .{
691691 .llvm_name = "optimized-nf6-segment-load-store",
692692 .description = "vlseg6eN.v and vsseg6eN.v are implemented as a wide memory op and shuffle",
693693 .dependencies = featureSet(&[_]Feature{}),
694694 };
695 result[@intFromEnum(Feature.optimized_nf7_segment_load_store)] = .{
695 result[@backingInt(Feature.optimized_nf7_segment_load_store)] = .{
696696 .llvm_name = "optimized-nf7-segment-load-store",
697697 .description = "vlseg7eN.v and vsseg7eN.v are implemented as a wide memory op and shuffle",
698698 .dependencies = featureSet(&[_]Feature{}),
699699 };
700 result[@intFromEnum(Feature.optimized_nf8_segment_load_store)] = .{
700 result[@backingInt(Feature.optimized_nf8_segment_load_store)] = .{
701701 .llvm_name = "optimized-nf8-segment-load-store",
702702 .description = "vlseg8eN.v and vsseg8eN.v are implemented as a wide memory op and shuffle",
703703 .dependencies = featureSet(&[_]Feature{}),
704704 };
705 result[@intFromEnum(Feature.optimized_zero_stride_load)] = .{
705 result[@backingInt(Feature.optimized_zero_stride_load)] = .{
706706 .llvm_name = "optimized-zero-stride-load",
707707 .description = "Optimized (perform fewer memory operations)zero-stride vector load",
708708 .dependencies = featureSet(&[_]Feature{}),
709709 };
710 result[@intFromEnum(Feature.permissive_zalrsc)] = .{
710 result[@backingInt(Feature.permissive_zalrsc)] = .{
711711 .llvm_name = "permissive-zalrsc",
712712 .description = "Implementation permits non-base instructions between LR/SC pairs",
713713 .dependencies = featureSet(&[_]Feature{}),
714714 };
715 result[@intFromEnum(Feature.predictable_select_expensive)] = .{
715 result[@backingInt(Feature.predictable_select_expensive)] = .{
716716 .llvm_name = "predictable-select-expensive",
717717 .description = "Prefer likely predicted branches over selects",
718718 .dependencies = featureSet(&[_]Feature{}),
719719 };
720 result[@intFromEnum(Feature.prefer_vsetvli_over_read_vlenb)] = .{
720 result[@backingInt(Feature.prefer_vsetvli_over_read_vlenb)] = .{
721721 .llvm_name = "prefer-vsetvli-over-read-vlenb",
722722 .description = "Prefer vsetvli over read vlenb CSR to calculate VLEN",
723723 .dependencies = featureSet(&[_]Feature{}),
724724 };
725 result[@intFromEnum(Feature.prefer_w_inst)] = .{
725 result[@backingInt(Feature.prefer_w_inst)] = .{
726726 .llvm_name = "prefer-w-inst",
727727 .description = "Prefer instructions with W suffix",
728728 .dependencies = featureSet(&[_]Feature{}),
729729 };
730 result[@intFromEnum(Feature.q)] = .{
730 result[@backingInt(Feature.q)] = .{
731731 .llvm_name = "q",
732732 .description = "'Q' (Quad-Precision Floating-Point)",
733733 .dependencies = featureSet(&[_]Feature{
734734 .d,
735735 }),
736736 };
737 result[@intFromEnum(Feature.relax)] = .{
737 result[@backingInt(Feature.relax)] = .{
738738 .llvm_name = "relax",
739739 .description = "Enable Linker relaxation.",
740740 .dependencies = featureSet(&[_]Feature{}),
741741 };
742 result[@intFromEnum(Feature.reserve_x1)] = .{
742 result[@backingInt(Feature.reserve_x1)] = .{
743743 .llvm_name = "reserve-x1",
744744 .description = "Reserve X1",
745745 .dependencies = featureSet(&[_]Feature{}),
746746 };
747 result[@intFromEnum(Feature.reserve_x10)] = .{
747 result[@backingInt(Feature.reserve_x10)] = .{
748748 .llvm_name = "reserve-x10",
749749 .description = "Reserve X10",
750750 .dependencies = featureSet(&[_]Feature{}),
751751 };
752 result[@intFromEnum(Feature.reserve_x11)] = .{
752 result[@backingInt(Feature.reserve_x11)] = .{
753753 .llvm_name = "reserve-x11",
754754 .description = "Reserve X11",
755755 .dependencies = featureSet(&[_]Feature{}),
756756 };
757 result[@intFromEnum(Feature.reserve_x12)] = .{
757 result[@backingInt(Feature.reserve_x12)] = .{
758758 .llvm_name = "reserve-x12",
759759 .description = "Reserve X12",
760760 .dependencies = featureSet(&[_]Feature{}),
761761 };
762 result[@intFromEnum(Feature.reserve_x13)] = .{
762 result[@backingInt(Feature.reserve_x13)] = .{
763763 .llvm_name = "reserve-x13",
764764 .description = "Reserve X13",
765765 .dependencies = featureSet(&[_]Feature{}),
766766 };
767 result[@intFromEnum(Feature.reserve_x14)] = .{
767 result[@backingInt(Feature.reserve_x14)] = .{
768768 .llvm_name = "reserve-x14",
769769 .description = "Reserve X14",
770770 .dependencies = featureSet(&[_]Feature{}),
771771 };
772 result[@intFromEnum(Feature.reserve_x15)] = .{
772 result[@backingInt(Feature.reserve_x15)] = .{
773773 .llvm_name = "reserve-x15",
774774 .description = "Reserve X15",
775775 .dependencies = featureSet(&[_]Feature{}),
776776 };
777 result[@intFromEnum(Feature.reserve_x16)] = .{
777 result[@backingInt(Feature.reserve_x16)] = .{
778778 .llvm_name = "reserve-x16",
779779 .description = "Reserve X16",
780780 .dependencies = featureSet(&[_]Feature{}),
781781 };
782 result[@intFromEnum(Feature.reserve_x17)] = .{
782 result[@backingInt(Feature.reserve_x17)] = .{
783783 .llvm_name = "reserve-x17",
784784 .description = "Reserve X17",
785785 .dependencies = featureSet(&[_]Feature{}),
786786 };
787 result[@intFromEnum(Feature.reserve_x18)] = .{
787 result[@backingInt(Feature.reserve_x18)] = .{
788788 .llvm_name = "reserve-x18",
789789 .description = "Reserve X18",
790790 .dependencies = featureSet(&[_]Feature{}),
791791 };
792 result[@intFromEnum(Feature.reserve_x19)] = .{
792 result[@backingInt(Feature.reserve_x19)] = .{
793793 .llvm_name = "reserve-x19",
794794 .description = "Reserve X19",
795795 .dependencies = featureSet(&[_]Feature{}),
796796 };
797 result[@intFromEnum(Feature.reserve_x2)] = .{
797 result[@backingInt(Feature.reserve_x2)] = .{
798798 .llvm_name = "reserve-x2",
799799 .description = "Reserve X2",
800800 .dependencies = featureSet(&[_]Feature{}),
801801 };
802 result[@intFromEnum(Feature.reserve_x20)] = .{
802 result[@backingInt(Feature.reserve_x20)] = .{
803803 .llvm_name = "reserve-x20",
804804 .description = "Reserve X20",
805805 .dependencies = featureSet(&[_]Feature{}),
806806 };
807 result[@intFromEnum(Feature.reserve_x21)] = .{
807 result[@backingInt(Feature.reserve_x21)] = .{
808808 .llvm_name = "reserve-x21",
809809 .description = "Reserve X21",
810810 .dependencies = featureSet(&[_]Feature{}),
811811 };
812 result[@intFromEnum(Feature.reserve_x22)] = .{
812 result[@backingInt(Feature.reserve_x22)] = .{
813813 .llvm_name = "reserve-x22",
814814 .description = "Reserve X22",
815815 .dependencies = featureSet(&[_]Feature{}),
816816 };
817 result[@intFromEnum(Feature.reserve_x23)] = .{
817 result[@backingInt(Feature.reserve_x23)] = .{
818818 .llvm_name = "reserve-x23",
819819 .description = "Reserve X23",
820820 .dependencies = featureSet(&[_]Feature{}),
821821 };
822 result[@intFromEnum(Feature.reserve_x24)] = .{
822 result[@backingInt(Feature.reserve_x24)] = .{
823823 .llvm_name = "reserve-x24",
824824 .description = "Reserve X24",
825825 .dependencies = featureSet(&[_]Feature{}),
826826 };
827 result[@intFromEnum(Feature.reserve_x25)] = .{
827 result[@backingInt(Feature.reserve_x25)] = .{
828828 .llvm_name = "reserve-x25",
829829 .description = "Reserve X25",
830830 .dependencies = featureSet(&[_]Feature{}),
831831 };
832 result[@intFromEnum(Feature.reserve_x26)] = .{
832 result[@backingInt(Feature.reserve_x26)] = .{
833833 .llvm_name = "reserve-x26",
834834 .description = "Reserve X26",
835835 .dependencies = featureSet(&[_]Feature{}),
836836 };
837 result[@intFromEnum(Feature.reserve_x27)] = .{
837 result[@backingInt(Feature.reserve_x27)] = .{
838838 .llvm_name = "reserve-x27",
839839 .description = "Reserve X27",
840840 .dependencies = featureSet(&[_]Feature{}),
841841 };
842 result[@intFromEnum(Feature.reserve_x28)] = .{
842 result[@backingInt(Feature.reserve_x28)] = .{
843843 .llvm_name = "reserve-x28",
844844 .description = "Reserve X28",
845845 .dependencies = featureSet(&[_]Feature{}),
846846 };
847 result[@intFromEnum(Feature.reserve_x29)] = .{
847 result[@backingInt(Feature.reserve_x29)] = .{
848848 .llvm_name = "reserve-x29",
849849 .description = "Reserve X29",
850850 .dependencies = featureSet(&[_]Feature{}),
851851 };
852 result[@intFromEnum(Feature.reserve_x3)] = .{
852 result[@backingInt(Feature.reserve_x3)] = .{
853853 .llvm_name = "reserve-x3",
854854 .description = "Reserve X3",
855855 .dependencies = featureSet(&[_]Feature{}),
856856 };
857 result[@intFromEnum(Feature.reserve_x30)] = .{
857 result[@backingInt(Feature.reserve_x30)] = .{
858858 .llvm_name = "reserve-x30",
859859 .description = "Reserve X30",
860860 .dependencies = featureSet(&[_]Feature{}),
861861 };
862 result[@intFromEnum(Feature.reserve_x31)] = .{
862 result[@backingInt(Feature.reserve_x31)] = .{
863863 .llvm_name = "reserve-x31",
864864 .description = "Reserve X31",
865865 .dependencies = featureSet(&[_]Feature{}),
866866 };
867 result[@intFromEnum(Feature.reserve_x4)] = .{
867 result[@backingInt(Feature.reserve_x4)] = .{
868868 .llvm_name = "reserve-x4",
869869 .description = "Reserve X4",
870870 .dependencies = featureSet(&[_]Feature{}),
871871 };
872 result[@intFromEnum(Feature.reserve_x5)] = .{
872 result[@backingInt(Feature.reserve_x5)] = .{
873873 .llvm_name = "reserve-x5",
874874 .description = "Reserve X5",
875875 .dependencies = featureSet(&[_]Feature{}),
876876 };
877 result[@intFromEnum(Feature.reserve_x6)] = .{
877 result[@backingInt(Feature.reserve_x6)] = .{
878878 .llvm_name = "reserve-x6",
879879 .description = "Reserve X6",
880880 .dependencies = featureSet(&[_]Feature{}),
881881 };
882 result[@intFromEnum(Feature.reserve_x7)] = .{
882 result[@backingInt(Feature.reserve_x7)] = .{
883883 .llvm_name = "reserve-x7",
884884 .description = "Reserve X7",
885885 .dependencies = featureSet(&[_]Feature{}),
886886 };
887 result[@intFromEnum(Feature.reserve_x8)] = .{
887 result[@backingInt(Feature.reserve_x8)] = .{
888888 .llvm_name = "reserve-x8",
889889 .description = "Reserve X8",
890890 .dependencies = featureSet(&[_]Feature{}),
891891 };
892 result[@intFromEnum(Feature.reserve_x9)] = .{
892 result[@backingInt(Feature.reserve_x9)] = .{
893893 .llvm_name = "reserve-x9",
894894 .description = "Reserve X9",
895895 .dependencies = featureSet(&[_]Feature{}),
896896 };
897 result[@intFromEnum(Feature.rva20s64)] = .{
897 result[@backingInt(Feature.rva20s64)] = .{
898898 .llvm_name = "rva20s64",
899899 .description = "RISC-V rva20s64 profile",
900900 .dependencies = featureSet(&[_]Feature{
......@@ -918,7 +918,7 @@ pub const all_features = blk: {
918918 .zifencei,
919919 }),
920920 };
921 result[@intFromEnum(Feature.rva20u64)] = .{
921 result[@backingInt(Feature.rva20u64)] = .{
922922 .llvm_name = "rva20u64",
923923 .description = "RISC-V rva20u64 profile",
924924 .dependencies = featureSet(&[_]Feature{
......@@ -936,7 +936,7 @@ pub const all_features = blk: {
936936 .zicntr,
937937 }),
938938 };
939 result[@intFromEnum(Feature.rva22s64)] = .{
939 result[@backingInt(Feature.rva22s64)] = .{
940940 .llvm_name = "rva22s64",
941941 .description = "RISC-V rva22s64 profile",
942942 .dependencies = featureSet(&[_]Feature{
......@@ -972,7 +972,7 @@ pub const all_features = blk: {
972972 .zkt,
973973 }),
974974 };
975 result[@intFromEnum(Feature.rva22u64)] = .{
975 result[@backingInt(Feature.rva22u64)] = .{
976976 .llvm_name = "rva22u64",
977977 .description = "RISC-V rva22u64 profile",
978978 .dependencies = featureSet(&[_]Feature{
......@@ -999,7 +999,7 @@ pub const all_features = blk: {
999999 .zkt,
10001000 }),
10011001 };
1002 result[@intFromEnum(Feature.rva23s64)] = .{
1002 result[@backingInt(Feature.rva23s64)] = .{
10031003 .llvm_name = "rva23s64",
10041004 .description = "RISC-V rva23s64 profile",
10051005 .dependencies = featureSet(&[_]Feature{
......@@ -1052,7 +1052,7 @@ pub const all_features = blk: {
10521052 .zvkt,
10531053 }),
10541054 };
1055 result[@intFromEnum(Feature.rva23u64)] = .{
1055 result[@backingInt(Feature.rva23u64)] = .{
10561056 .llvm_name = "rva23u64",
10571057 .description = "RISC-V rva23u64 profile",
10581058 .dependencies = featureSet(&[_]Feature{
......@@ -1090,7 +1090,7 @@ pub const all_features = blk: {
10901090 .zvkt,
10911091 }),
10921092 };
1093 result[@intFromEnum(Feature.rvb23s64)] = .{
1093 result[@backingInt(Feature.rvb23s64)] = .{
10941094 .llvm_name = "rvb23s64",
10951095 .description = "RISC-V rvb23s64 profile",
10961096 .dependencies = featureSet(&[_]Feature{
......@@ -1136,7 +1136,7 @@ pub const all_features = blk: {
11361136 .zkt,
11371137 }),
11381138 };
1139 result[@intFromEnum(Feature.rvb23u64)] = .{
1139 result[@backingInt(Feature.rvb23u64)] = .{
11401140 .llvm_name = "rvb23u64",
11411141 .description = "RISC-V rvb23u64 profile",
11421142 .dependencies = featureSet(&[_]Feature{
......@@ -1169,7 +1169,7 @@ pub const all_features = blk: {
11691169 .zkt,
11701170 }),
11711171 };
1172 result[@intFromEnum(Feature.rvi20u32)] = .{
1172 result[@backingInt(Feature.rvi20u32)] = .{
11731173 .llvm_name = "rvi20u32",
11741174 .description = "RISC-V rvi20u32 profile",
11751175 .dependencies = featureSet(&[_]Feature{
......@@ -1177,7 +1177,7 @@ pub const all_features = blk: {
11771177 .i,
11781178 }),
11791179 };
1180 result[@intFromEnum(Feature.rvi20u64)] = .{
1180 result[@backingInt(Feature.rvi20u64)] = .{
11811181 .llvm_name = "rvi20u64",
11821182 .description = "RISC-V rvi20u64 profile",
11831183 .dependencies = featureSet(&[_]Feature{
......@@ -1185,22 +1185,22 @@ pub const all_features = blk: {
11851185 .i,
11861186 }),
11871187 };
1188 result[@intFromEnum(Feature.save_restore)] = .{
1188 result[@backingInt(Feature.save_restore)] = .{
11891189 .llvm_name = "save-restore",
11901190 .description = "Enable save/restore.",
11911191 .dependencies = featureSet(&[_]Feature{}),
11921192 };
1193 result[@intFromEnum(Feature.sdext)] = .{
1193 result[@backingInt(Feature.sdext)] = .{
11941194 .llvm_name = "sdext",
11951195 .description = "'Sdext' (External debugger)",
11961196 .dependencies = featureSet(&[_]Feature{}),
11971197 };
1198 result[@intFromEnum(Feature.sdtrig)] = .{
1198 result[@backingInt(Feature.sdtrig)] = .{
11991199 .llvm_name = "sdtrig",
12001200 .description = "'Sdtrig' (Debugger triggers)",
12011201 .dependencies = featureSet(&[_]Feature{}),
12021202 };
1203 result[@intFromEnum(Feature.sha)] = .{
1203 result[@backingInt(Feature.sha)] = .{
12041204 .llvm_name = "sha",
12051205 .description = "'Sha' (Augmented Hypervisor)",
12061206 .dependencies = featureSet(&[_]Feature{
......@@ -1214,291 +1214,291 @@ pub const all_features = blk: {
12141214 .ssstateen,
12151215 }),
12161216 };
1217 result[@intFromEnum(Feature.shcounterenw)] = .{
1217 result[@backingInt(Feature.shcounterenw)] = .{
12181218 .llvm_name = "shcounterenw",
12191219 .description = "'Shcounterenw' (Support writeable hcounteren enable bit for any hpmcounter that is not read-only zero)",
12201220 .dependencies = featureSet(&[_]Feature{}),
12211221 };
1222 result[@intFromEnum(Feature.shgatpa)] = .{
1222 result[@backingInt(Feature.shgatpa)] = .{
12231223 .llvm_name = "shgatpa",
12241224 .description = "'Shgatpa' (SvNNx4 mode supported for all modes supported by satp, as well as Bare)",
12251225 .dependencies = featureSet(&[_]Feature{}),
12261226 };
1227 result[@intFromEnum(Feature.shifted_zextw_fusion)] = .{
1227 result[@backingInt(Feature.shifted_zextw_fusion)] = .{
12281228 .llvm_name = "shifted-zextw-fusion",
12291229 .description = "Enable SLLI+SRLI to be fused when computing (shifted) word zero extension",
12301230 .dependencies = featureSet(&[_]Feature{}),
12311231 };
1232 result[@intFromEnum(Feature.shlcofideleg)] = .{
1232 result[@backingInt(Feature.shlcofideleg)] = .{
12331233 .llvm_name = "shlcofideleg",
12341234 .description = "'Shlcofideleg' (Delegating LCOFI Interrupts to VS-mode)",
12351235 .dependencies = featureSet(&[_]Feature{}),
12361236 };
1237 result[@intFromEnum(Feature.short_forward_branch_ialu)] = .{
1237 result[@backingInt(Feature.short_forward_branch_ialu)] = .{
12381238 .llvm_name = "short-forward-branch-ialu",
12391239 .description = "Enable short forward branch optimization for RVI base instructions",
12401240 .dependencies = featureSet(&[_]Feature{}),
12411241 };
1242 result[@intFromEnum(Feature.short_forward_branch_iload)] = .{
1242 result[@backingInt(Feature.short_forward_branch_iload)] = .{
12431243 .llvm_name = "short-forward-branch-iload",
12441244 .description = "Enable short forward branch optimization for load instructions",
12451245 .dependencies = featureSet(&[_]Feature{
12461246 .short_forward_branch_ialu,
12471247 }),
12481248 };
1249 result[@intFromEnum(Feature.short_forward_branch_iminmax)] = .{
1249 result[@backingInt(Feature.short_forward_branch_iminmax)] = .{
12501250 .llvm_name = "short-forward-branch-iminmax",
12511251 .description = "Enable short forward branch optimization for MIN,MAX instructions in Zbb",
12521252 .dependencies = featureSet(&[_]Feature{
12531253 .short_forward_branch_ialu,
12541254 }),
12551255 };
1256 result[@intFromEnum(Feature.short_forward_branch_imul)] = .{
1256 result[@backingInt(Feature.short_forward_branch_imul)] = .{
12571257 .llvm_name = "short-forward-branch-imul",
12581258 .description = "Enable short forward branch optimization for MUL instruction",
12591259 .dependencies = featureSet(&[_]Feature{
12601260 .short_forward_branch_ialu,
12611261 }),
12621262 };
1263 result[@intFromEnum(Feature.shtvala)] = .{
1263 result[@backingInt(Feature.shtvala)] = .{
12641264 .llvm_name = "shtvala",
12651265 .description = "'Shtvala' (htval provides all needed values)",
12661266 .dependencies = featureSet(&[_]Feature{}),
12671267 };
1268 result[@intFromEnum(Feature.shvsatpa)] = .{
1268 result[@backingInt(Feature.shvsatpa)] = .{
12691269 .llvm_name = "shvsatpa",
12701270 .description = "'Shvsatpa' (vsatp supports all modes supported by satp)",
12711271 .dependencies = featureSet(&[_]Feature{}),
12721272 };
1273 result[@intFromEnum(Feature.shvstvala)] = .{
1273 result[@backingInt(Feature.shvstvala)] = .{
12741274 .llvm_name = "shvstvala",
12751275 .description = "'Shvstvala' (vstval provides all needed values)",
12761276 .dependencies = featureSet(&[_]Feature{}),
12771277 };
1278 result[@intFromEnum(Feature.shvstvecd)] = .{
1278 result[@backingInt(Feature.shvstvecd)] = .{
12791279 .llvm_name = "shvstvecd",
12801280 .description = "'Shvstvecd' (vstvec supports Direct mode)",
12811281 .dependencies = featureSet(&[_]Feature{}),
12821282 };
1283 result[@intFromEnum(Feature.shxadd_load_fusion)] = .{
1283 result[@backingInt(Feature.shxadd_load_fusion)] = .{
12841284 .llvm_name = "shxadd-load-fusion",
12851285 .description = "Enable SH(1|2|3)ADD(.UW) + load macrofusion",
12861286 .dependencies = featureSet(&[_]Feature{}),
12871287 };
1288 result[@intFromEnum(Feature.single_element_vec_fp64)] = .{
1288 result[@backingInt(Feature.single_element_vec_fp64)] = .{
12891289 .llvm_name = "single-element-vec-fp64",
12901290 .description = "Certain vector FP64 operations produce a single result element per cycle",
12911291 .dependencies = featureSet(&[_]Feature{}),
12921292 };
1293 result[@intFromEnum(Feature.smaia)] = .{
1293 result[@backingInt(Feature.smaia)] = .{
12941294 .llvm_name = "smaia",
12951295 .description = "'Smaia' (Advanced Interrupt Architecture Machine Level)",
12961296 .dependencies = featureSet(&[_]Feature{}),
12971297 };
1298 result[@intFromEnum(Feature.smcdeleg)] = .{
1298 result[@backingInt(Feature.smcdeleg)] = .{
12991299 .llvm_name = "smcdeleg",
13001300 .description = "'Smcdeleg' (Counter Delegation Machine Level)",
13011301 .dependencies = featureSet(&[_]Feature{}),
13021302 };
1303 result[@intFromEnum(Feature.smcntrpmf)] = .{
1303 result[@backingInt(Feature.smcntrpmf)] = .{
13041304 .llvm_name = "smcntrpmf",
13051305 .description = "'Smcntrpmf' (Cycle and Instret Privilege Mode Filtering)",
13061306 .dependencies = featureSet(&[_]Feature{}),
13071307 };
1308 result[@intFromEnum(Feature.smcsrind)] = .{
1308 result[@backingInt(Feature.smcsrind)] = .{
13091309 .llvm_name = "smcsrind",
13101310 .description = "'Smcsrind' (Indirect CSR Access Machine Level)",
13111311 .dependencies = featureSet(&[_]Feature{}),
13121312 };
1313 result[@intFromEnum(Feature.smctr)] = .{
1313 result[@backingInt(Feature.smctr)] = .{
13141314 .llvm_name = "smctr",
13151315 .description = "'Smctr' (Control Transfer Records Machine Level)",
13161316 .dependencies = featureSet(&[_]Feature{
13171317 .sscsrind,
13181318 }),
13191319 };
1320 result[@intFromEnum(Feature.smdbltrp)] = .{
1320 result[@backingInt(Feature.smdbltrp)] = .{
13211321 .llvm_name = "smdbltrp",
13221322 .description = "'Smdbltrp' (Double Trap Machine Level)",
13231323 .dependencies = featureSet(&[_]Feature{
13241324 .zicsr,
13251325 }),
13261326 };
1327 result[@intFromEnum(Feature.smepmp)] = .{
1327 result[@backingInt(Feature.smepmp)] = .{
13281328 .llvm_name = "smepmp",
13291329 .description = "'Smepmp' (Enhanced Physical Memory Protection)",
13301330 .dependencies = featureSet(&[_]Feature{}),
13311331 };
1332 result[@intFromEnum(Feature.smmpm)] = .{
1332 result[@backingInt(Feature.smmpm)] = .{
13331333 .llvm_name = "smmpm",
13341334 .description = "'Smmpm' (Machine-level Pointer Masking for M-mode)",
13351335 .dependencies = featureSet(&[_]Feature{}),
13361336 };
1337 result[@intFromEnum(Feature.smnpm)] = .{
1337 result[@backingInt(Feature.smnpm)] = .{
13381338 .llvm_name = "smnpm",
13391339 .description = "'Smnpm' (Machine-level Pointer Masking for next lower privilege mode)",
13401340 .dependencies = featureSet(&[_]Feature{}),
13411341 };
1342 result[@intFromEnum(Feature.smrnmi)] = .{
1342 result[@backingInt(Feature.smrnmi)] = .{
13431343 .llvm_name = "smrnmi",
13441344 .description = "'Smrnmi' (Resumable Non-Maskable Interrupts)",
13451345 .dependencies = featureSet(&[_]Feature{}),
13461346 };
1347 result[@intFromEnum(Feature.smstateen)] = .{
1347 result[@backingInt(Feature.smstateen)] = .{
13481348 .llvm_name = "smstateen",
13491349 .description = "'Smstateen' (Machine-mode view of the state-enable extension)",
13501350 .dependencies = featureSet(&[_]Feature{}),
13511351 };
1352 result[@intFromEnum(Feature.ssaia)] = .{
1352 result[@backingInt(Feature.ssaia)] = .{
13531353 .llvm_name = "ssaia",
13541354 .description = "'Ssaia' (Advanced Interrupt Architecture Supervisor Level)",
13551355 .dependencies = featureSet(&[_]Feature{}),
13561356 };
1357 result[@intFromEnum(Feature.ssccfg)] = .{
1357 result[@backingInt(Feature.ssccfg)] = .{
13581358 .llvm_name = "ssccfg",
13591359 .description = "'Ssccfg' (Counter Configuration Supervisor Level)",
13601360 .dependencies = featureSet(&[_]Feature{}),
13611361 };
1362 result[@intFromEnum(Feature.ssccptr)] = .{
1362 result[@backingInt(Feature.ssccptr)] = .{
13631363 .llvm_name = "ssccptr",
13641364 .description = "'Ssccptr' (Main memory supports page table reads)",
13651365 .dependencies = featureSet(&[_]Feature{}),
13661366 };
1367 result[@intFromEnum(Feature.sscofpmf)] = .{
1367 result[@backingInt(Feature.sscofpmf)] = .{
13681368 .llvm_name = "sscofpmf",
13691369 .description = "'Sscofpmf' (Count Overflow and Mode-Based Filtering)",
13701370 .dependencies = featureSet(&[_]Feature{}),
13711371 };
1372 result[@intFromEnum(Feature.sscounterenw)] = .{
1372 result[@backingInt(Feature.sscounterenw)] = .{
13731373 .llvm_name = "sscounterenw",
13741374 .description = "'Sscounterenw' (Support writeable scounteren enable bit for any hpmcounter that is not read-only zero)",
13751375 .dependencies = featureSet(&[_]Feature{}),
13761376 };
1377 result[@intFromEnum(Feature.sscsrind)] = .{
1377 result[@backingInt(Feature.sscsrind)] = .{
13781378 .llvm_name = "sscsrind",
13791379 .description = "'Sscsrind' (Indirect CSR Access Supervisor Level)",
13801380 .dependencies = featureSet(&[_]Feature{}),
13811381 };
1382 result[@intFromEnum(Feature.ssctr)] = .{
1382 result[@backingInt(Feature.ssctr)] = .{
13831383 .llvm_name = "ssctr",
13841384 .description = "'Ssctr' (Control Transfer Records Supervisor Level)",
13851385 .dependencies = featureSet(&[_]Feature{
13861386 .sscsrind,
13871387 }),
13881388 };
1389 result[@intFromEnum(Feature.ssdbltrp)] = .{
1389 result[@backingInt(Feature.ssdbltrp)] = .{
13901390 .llvm_name = "ssdbltrp",
13911391 .description = "'Ssdbltrp' (Double Trap Supervisor Level)",
13921392 .dependencies = featureSet(&[_]Feature{
13931393 .zicsr,
13941394 }),
13951395 };
1396 result[@intFromEnum(Feature.ssnpm)] = .{
1396 result[@backingInt(Feature.ssnpm)] = .{
13971397 .llvm_name = "ssnpm",
13981398 .description = "'Ssnpm' (Supervisor-level Pointer Masking for next lower privilege mode)",
13991399 .dependencies = featureSet(&[_]Feature{}),
14001400 };
1401 result[@intFromEnum(Feature.sspm)] = .{
1401 result[@backingInt(Feature.sspm)] = .{
14021402 .llvm_name = "sspm",
14031403 .description = "'Sspm' (Indicates Supervisor-mode Pointer Masking)",
14041404 .dependencies = featureSet(&[_]Feature{}),
14051405 };
1406 result[@intFromEnum(Feature.ssqosid)] = .{
1406 result[@backingInt(Feature.ssqosid)] = .{
14071407 .llvm_name = "ssqosid",
14081408 .description = "'Ssqosid' (Quality-of-Service (QoS) Identifiers)",
14091409 .dependencies = featureSet(&[_]Feature{}),
14101410 };
1411 result[@intFromEnum(Feature.ssstateen)] = .{
1411 result[@backingInt(Feature.ssstateen)] = .{
14121412 .llvm_name = "ssstateen",
14131413 .description = "'Ssstateen' (Supervisor-mode view of the state-enable extension)",
14141414 .dependencies = featureSet(&[_]Feature{}),
14151415 };
1416 result[@intFromEnum(Feature.ssstrict)] = .{
1416 result[@backingInt(Feature.ssstrict)] = .{
14171417 .llvm_name = "ssstrict",
14181418 .description = "'Ssstrict' (No non-conforming extensions are present)",
14191419 .dependencies = featureSet(&[_]Feature{}),
14201420 };
1421 result[@intFromEnum(Feature.sstc)] = .{
1421 result[@backingInt(Feature.sstc)] = .{
14221422 .llvm_name = "sstc",
14231423 .description = "'Sstc' (Supervisor-mode timer interrupts)",
14241424 .dependencies = featureSet(&[_]Feature{}),
14251425 };
1426 result[@intFromEnum(Feature.sstvala)] = .{
1426 result[@backingInt(Feature.sstvala)] = .{
14271427 .llvm_name = "sstvala",
14281428 .description = "'Sstvala' (stval provides all needed values)",
14291429 .dependencies = featureSet(&[_]Feature{}),
14301430 };
1431 result[@intFromEnum(Feature.sstvecd)] = .{
1431 result[@backingInt(Feature.sstvecd)] = .{
14321432 .llvm_name = "sstvecd",
14331433 .description = "'Sstvecd' (stvec supports Direct mode)",
14341434 .dependencies = featureSet(&[_]Feature{}),
14351435 };
1436 result[@intFromEnum(Feature.ssu64xl)] = .{
1436 result[@backingInt(Feature.ssu64xl)] = .{
14371437 .llvm_name = "ssu64xl",
14381438 .description = "'Ssu64xl' (UXLEN=64 supported)",
14391439 .dependencies = featureSet(&[_]Feature{}),
14401440 };
1441 result[@intFromEnum(Feature.supm)] = .{
1441 result[@backingInt(Feature.supm)] = .{
14421442 .llvm_name = "supm",
14431443 .description = "'Supm' (Indicates User-mode Pointer Masking)",
14441444 .dependencies = featureSet(&[_]Feature{}),
14451445 };
1446 result[@intFromEnum(Feature.svade)] = .{
1446 result[@backingInt(Feature.svade)] = .{
14471447 .llvm_name = "svade",
14481448 .description = "'Svade' (Raise exceptions on improper A/D bits)",
14491449 .dependencies = featureSet(&[_]Feature{}),
14501450 };
1451 result[@intFromEnum(Feature.svadu)] = .{
1451 result[@backingInt(Feature.svadu)] = .{
14521452 .llvm_name = "svadu",
14531453 .description = "'Svadu' (Hardware A/D updates)",
14541454 .dependencies = featureSet(&[_]Feature{}),
14551455 };
1456 result[@intFromEnum(Feature.svbare)] = .{
1456 result[@backingInt(Feature.svbare)] = .{
14571457 .llvm_name = "svbare",
14581458 .description = "'Svbare' (satp mode Bare supported)",
14591459 .dependencies = featureSet(&[_]Feature{}),
14601460 };
1461 result[@intFromEnum(Feature.svinval)] = .{
1461 result[@backingInt(Feature.svinval)] = .{
14621462 .llvm_name = "svinval",
14631463 .description = "'Svinval' (Fine-Grained Address-Translation Cache Invalidation)",
14641464 .dependencies = featureSet(&[_]Feature{}),
14651465 };
1466 result[@intFromEnum(Feature.svnapot)] = .{
1466 result[@backingInt(Feature.svnapot)] = .{
14671467 .llvm_name = "svnapot",
14681468 .description = "'Svnapot' (NAPOT Translation Contiguity)",
14691469 .dependencies = featureSet(&[_]Feature{}),
14701470 };
1471 result[@intFromEnum(Feature.svpbmt)] = .{
1471 result[@backingInt(Feature.svpbmt)] = .{
14721472 .llvm_name = "svpbmt",
14731473 .description = "'Svpbmt' (Page-Based Memory Types)",
14741474 .dependencies = featureSet(&[_]Feature{}),
14751475 };
1476 result[@intFromEnum(Feature.svvptc)] = .{
1476 result[@backingInt(Feature.svvptc)] = .{
14771477 .llvm_name = "svvptc",
14781478 .description = "'Svvptc' (Obviating Memory-Management Instructions after Marking PTEs Valid)",
14791479 .dependencies = featureSet(&[_]Feature{}),
14801480 };
1481 result[@intFromEnum(Feature.tagged_globals)] = .{
1481 result[@backingInt(Feature.tagged_globals)] = .{
14821482 .llvm_name = "tagged-globals",
14831483 .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits",
14841484 .dependencies = featureSet(&[_]Feature{}),
14851485 };
1486 result[@intFromEnum(Feature.unaligned_scalar_mem)] = .{
1486 result[@backingInt(Feature.unaligned_scalar_mem)] = .{
14871487 .llvm_name = "unaligned-scalar-mem",
14881488 .description = "Has reasonably performant unaligned scalar loads and stores",
14891489 .dependencies = featureSet(&[_]Feature{}),
14901490 };
1491 result[@intFromEnum(Feature.unaligned_vector_mem)] = .{
1491 result[@backingInt(Feature.unaligned_vector_mem)] = .{
14921492 .llvm_name = "unaligned-vector-mem",
14931493 .description = "Has reasonably performant unaligned vector loads and stores",
14941494 .dependencies = featureSet(&[_]Feature{}),
14951495 };
1496 result[@intFromEnum(Feature.use_postra_scheduler)] = .{
1496 result[@backingInt(Feature.use_postra_scheduler)] = .{
14971497 .llvm_name = "use-postra-scheduler",
14981498 .description = "Schedule again after register allocation",
14991499 .dependencies = featureSet(&[_]Feature{}),
15001500 };
1501 result[@intFromEnum(Feature.v)] = .{
1501 result[@backingInt(Feature.v)] = .{
15021502 .llvm_name = "v",
15031503 .description = "'V' (Vector Extension for Application Processors)",
15041504 .dependencies = featureSet(&[_]Feature{
......@@ -1506,131 +1506,131 @@ pub const all_features = blk: {
15061506 .zvl128b,
15071507 }),
15081508 };
1509 result[@intFromEnum(Feature.ventana_veyron)] = .{
1509 result[@backingInt(Feature.ventana_veyron)] = .{
15101510 .llvm_name = "ventana-veyron",
15111511 .description = "Ventana Veyron-Series processors",
15121512 .dependencies = featureSet(&[_]Feature{}),
15131513 };
1514 result[@intFromEnum(Feature.vl_dependent_latency)] = .{
1514 result[@backingInt(Feature.vl_dependent_latency)] = .{
15151515 .llvm_name = "vl-dependent-latency",
15161516 .description = "Latency of vector instructions is dependent on the dynamic value of vl",
15171517 .dependencies = featureSet(&[_]Feature{}),
15181518 };
1519 result[@intFromEnum(Feature.vxrm_pipeline_flush)] = .{
1519 result[@backingInt(Feature.vxrm_pipeline_flush)] = .{
15201520 .llvm_name = "vxrm-pipeline-flush",
15211521 .description = "VXRM writes causes pipeline flush",
15221522 .dependencies = featureSet(&[_]Feature{}),
15231523 };
1524 result[@intFromEnum(Feature.xandesbfhcvt)] = .{
1524 result[@backingInt(Feature.xandesbfhcvt)] = .{
15251525 .llvm_name = "xandesbfhcvt",
15261526 .description = "'XAndesBFHCvt' (Andes Scalar BFLOAT16 Conversion Extension)",
15271527 .dependencies = featureSet(&[_]Feature{
15281528 .f,
15291529 }),
15301530 };
1531 result[@intFromEnum(Feature.xandesperf)] = .{
1531 result[@backingInt(Feature.xandesperf)] = .{
15321532 .llvm_name = "xandesperf",
15331533 .description = "'XAndesPerf' (Andes Performance Extension)",
15341534 .dependencies = featureSet(&[_]Feature{}),
15351535 };
1536 result[@intFromEnum(Feature.xandesvbfhcvt)] = .{
1536 result[@backingInt(Feature.xandesvbfhcvt)] = .{
15371537 .llvm_name = "xandesvbfhcvt",
15381538 .description = "'XAndesVBFHCvt' (Andes Vector BFLOAT16 Conversion Extension)",
15391539 .dependencies = featureSet(&[_]Feature{
15401540 .zve32f,
15411541 }),
15421542 };
1543 result[@intFromEnum(Feature.xandesvdot)] = .{
1543 result[@backingInt(Feature.xandesvdot)] = .{
15441544 .llvm_name = "xandesvdot",
15451545 .description = "'XAndesVDot' (Andes Vector Dot Product Extension)",
15461546 .dependencies = featureSet(&[_]Feature{
15471547 .zve32x,
15481548 }),
15491549 };
1550 result[@intFromEnum(Feature.xandesvpackfph)] = .{
1550 result[@backingInt(Feature.xandesvpackfph)] = .{
15511551 .llvm_name = "xandesvpackfph",
15521552 .description = "'XAndesVPackFPH' (Andes Vector Packed FP16 Extension)",
15531553 .dependencies = featureSet(&[_]Feature{
15541554 .f,
15551555 }),
15561556 };
1557 result[@intFromEnum(Feature.xandesvsinth)] = .{
1557 result[@backingInt(Feature.xandesvsinth)] = .{
15581558 .llvm_name = "xandesvsinth",
15591559 .description = "'XAndesVSIntH' (Andes Vector Small INT Handling Extension)",
15601560 .dependencies = featureSet(&[_]Feature{
15611561 .zve32x,
15621562 }),
15631563 };
1564 result[@intFromEnum(Feature.xandesvsintload)] = .{
1564 result[@backingInt(Feature.xandesvsintload)] = .{
15651565 .llvm_name = "xandesvsintload",
15661566 .description = "'XAndesVSIntLoad' (Andes Vector INT4 Load Extension)",
15671567 .dependencies = featureSet(&[_]Feature{
15681568 .zve32x,
15691569 }),
15701570 };
1571 result[@intFromEnum(Feature.xcvalu)] = .{
1571 result[@backingInt(Feature.xcvalu)] = .{
15721572 .llvm_name = "xcvalu",
15731573 .description = "'XCValu' (CORE-V ALU Operations)",
15741574 .dependencies = featureSet(&[_]Feature{}),
15751575 };
1576 result[@intFromEnum(Feature.xcvbi)] = .{
1576 result[@backingInt(Feature.xcvbi)] = .{
15771577 .llvm_name = "xcvbi",
15781578 .description = "'XCVbi' (CORE-V Immediate Branching)",
15791579 .dependencies = featureSet(&[_]Feature{}),
15801580 };
1581 result[@intFromEnum(Feature.xcvbitmanip)] = .{
1581 result[@backingInt(Feature.xcvbitmanip)] = .{
15821582 .llvm_name = "xcvbitmanip",
15831583 .description = "'XCVbitmanip' (CORE-V Bit Manipulation)",
15841584 .dependencies = featureSet(&[_]Feature{}),
15851585 };
1586 result[@intFromEnum(Feature.xcvelw)] = .{
1586 result[@backingInt(Feature.xcvelw)] = .{
15871587 .llvm_name = "xcvelw",
15881588 .description = "'XCVelw' (CORE-V Event Load Word)",
15891589 .dependencies = featureSet(&[_]Feature{}),
15901590 };
1591 result[@intFromEnum(Feature.xcvmac)] = .{
1591 result[@backingInt(Feature.xcvmac)] = .{
15921592 .llvm_name = "xcvmac",
15931593 .description = "'XCVmac' (CORE-V Multiply-Accumulate)",
15941594 .dependencies = featureSet(&[_]Feature{}),
15951595 };
1596 result[@intFromEnum(Feature.xcvmem)] = .{
1596 result[@backingInt(Feature.xcvmem)] = .{
15971597 .llvm_name = "xcvmem",
15981598 .description = "'XCVmem' (CORE-V Post-incrementing Load & Store)",
15991599 .dependencies = featureSet(&[_]Feature{}),
16001600 };
1601 result[@intFromEnum(Feature.xcvsimd)] = .{
1601 result[@backingInt(Feature.xcvsimd)] = .{
16021602 .llvm_name = "xcvsimd",
16031603 .description = "'XCVsimd' (CORE-V SIMD ALU)",
16041604 .dependencies = featureSet(&[_]Feature{}),
16051605 };
1606 result[@intFromEnum(Feature.xmipscbop)] = .{
1606 result[@backingInt(Feature.xmipscbop)] = .{
16071607 .llvm_name = "xmipscbop",
16081608 .description = "'XMIPSCBOP' (MIPS Software Prefetch)",
16091609 .dependencies = featureSet(&[_]Feature{}),
16101610 };
1611 result[@intFromEnum(Feature.xmipscmov)] = .{
1611 result[@backingInt(Feature.xmipscmov)] = .{
16121612 .llvm_name = "xmipscmov",
16131613 .description = "'XMIPSCMov' (MIPS conditional move instruction (mips.ccmov))",
16141614 .dependencies = featureSet(&[_]Feature{}),
16151615 };
1616 result[@intFromEnum(Feature.xmipsexectl)] = .{
1616 result[@backingInt(Feature.xmipsexectl)] = .{
16171617 .llvm_name = "xmipsexectl",
16181618 .description = "'XMIPSEXECTL' (MIPS execution control)",
16191619 .dependencies = featureSet(&[_]Feature{}),
16201620 };
1621 result[@intFromEnum(Feature.xmipslsp)] = .{
1621 result[@backingInt(Feature.xmipslsp)] = .{
16221622 .llvm_name = "xmipslsp",
16231623 .description = "'XMIPSLSP' (MIPS optimization for hardware load-store bonding)",
16241624 .dependencies = featureSet(&[_]Feature{}),
16251625 };
1626 result[@intFromEnum(Feature.xqccmp)] = .{
1626 result[@backingInt(Feature.xqccmp)] = .{
16271627 .llvm_name = "xqccmp",
16281628 .description = "'Xqccmp' (Qualcomm 16-bit Push/Pop and Double Moves)",
16291629 .dependencies = featureSet(&[_]Feature{
16301630 .zca,
16311631 }),
16321632 };
1633 result[@intFromEnum(Feature.xqci)] = .{
1633 result[@backingInt(Feature.xqci)] = .{
16341634 .llvm_name = "xqci",
16351635 .description = "'Xqci' (Qualcomm uC Extension)",
16361636 .dependencies = featureSet(&[_]Feature{
......@@ -1654,124 +1654,124 @@ pub const all_features = blk: {
16541654 .xqcisync,
16551655 }),
16561656 };
1657 result[@intFromEnum(Feature.xqcia)] = .{
1657 result[@backingInt(Feature.xqcia)] = .{
16581658 .llvm_name = "xqcia",
16591659 .description = "'Xqcia' (Qualcomm uC Arithmetic Extension)",
16601660 .dependencies = featureSet(&[_]Feature{}),
16611661 };
1662 result[@intFromEnum(Feature.xqciac)] = .{
1662 result[@backingInt(Feature.xqciac)] = .{
16631663 .llvm_name = "xqciac",
16641664 .description = "'Xqciac' (Qualcomm uC Load-Store Address Calculation Extension)",
16651665 .dependencies = featureSet(&[_]Feature{
16661666 .zca,
16671667 }),
16681668 };
1669 result[@intFromEnum(Feature.xqcibi)] = .{
1669 result[@backingInt(Feature.xqcibi)] = .{
16701670 .llvm_name = "xqcibi",
16711671 .description = "'Xqcibi' (Qualcomm uC Branch Immediate Extension)",
16721672 .dependencies = featureSet(&[_]Feature{
16731673 .zca,
16741674 }),
16751675 };
1676 result[@intFromEnum(Feature.xqcibm)] = .{
1676 result[@backingInt(Feature.xqcibm)] = .{
16771677 .llvm_name = "xqcibm",
16781678 .description = "'Xqcibm' (Qualcomm uC Bit Manipulation Extension)",
16791679 .dependencies = featureSet(&[_]Feature{
16801680 .zca,
16811681 }),
16821682 };
1683 result[@intFromEnum(Feature.xqcicli)] = .{
1683 result[@backingInt(Feature.xqcicli)] = .{
16841684 .llvm_name = "xqcicli",
16851685 .description = "'Xqcicli' (Qualcomm uC Conditional Load Immediate Extension)",
16861686 .dependencies = featureSet(&[_]Feature{}),
16871687 };
1688 result[@intFromEnum(Feature.xqcicm)] = .{
1688 result[@backingInt(Feature.xqcicm)] = .{
16891689 .llvm_name = "xqcicm",
16901690 .description = "'Xqcicm' (Qualcomm uC Conditional Move Extension)",
16911691 .dependencies = featureSet(&[_]Feature{
16921692 .zca,
16931693 }),
16941694 };
1695 result[@intFromEnum(Feature.xqcics)] = .{
1695 result[@backingInt(Feature.xqcics)] = .{
16961696 .llvm_name = "xqcics",
16971697 .description = "'Xqcics' (Qualcomm uC Conditional Select Extension)",
16981698 .dependencies = featureSet(&[_]Feature{}),
16991699 };
1700 result[@intFromEnum(Feature.xqcicsr)] = .{
1700 result[@backingInt(Feature.xqcicsr)] = .{
17011701 .llvm_name = "xqcicsr",
17021702 .description = "'Xqcicsr' (Qualcomm uC CSR Extension)",
17031703 .dependencies = featureSet(&[_]Feature{}),
17041704 };
1705 result[@intFromEnum(Feature.xqciint)] = .{
1705 result[@backingInt(Feature.xqciint)] = .{
17061706 .llvm_name = "xqciint",
17071707 .description = "'Xqciint' (Qualcomm uC Interrupts Extension)",
17081708 .dependencies = featureSet(&[_]Feature{
17091709 .zca,
17101710 }),
17111711 };
1712 result[@intFromEnum(Feature.xqciio)] = .{
1712 result[@backingInt(Feature.xqciio)] = .{
17131713 .llvm_name = "xqciio",
17141714 .description = "'Xqciio' (Qualcomm uC External Input Output Extension)",
17151715 .dependencies = featureSet(&[_]Feature{}),
17161716 };
1717 result[@intFromEnum(Feature.xqcilb)] = .{
1717 result[@backingInt(Feature.xqcilb)] = .{
17181718 .llvm_name = "xqcilb",
17191719 .description = "'Xqcilb' (Qualcomm uC Long Branch Extension)",
17201720 .dependencies = featureSet(&[_]Feature{
17211721 .zca,
17221722 }),
17231723 };
1724 result[@intFromEnum(Feature.xqcili)] = .{
1724 result[@backingInt(Feature.xqcili)] = .{
17251725 .llvm_name = "xqcili",
17261726 .description = "'Xqcili' (Qualcomm uC Load Large Immediate Extension)",
17271727 .dependencies = featureSet(&[_]Feature{
17281728 .zca,
17291729 }),
17301730 };
1731 result[@intFromEnum(Feature.xqcilia)] = .{
1731 result[@backingInt(Feature.xqcilia)] = .{
17321732 .llvm_name = "xqcilia",
17331733 .description = "'Xqcilia' (Qualcomm uC Large Immediate Arithmetic Extension)",
17341734 .dependencies = featureSet(&[_]Feature{
17351735 .zca,
17361736 }),
17371737 };
1738 result[@intFromEnum(Feature.xqcilo)] = .{
1738 result[@backingInt(Feature.xqcilo)] = .{
17391739 .llvm_name = "xqcilo",
17401740 .description = "'Xqcilo' (Qualcomm uC Large Offset Load Store Extension)",
17411741 .dependencies = featureSet(&[_]Feature{
17421742 .zca,
17431743 }),
17441744 };
1745 result[@intFromEnum(Feature.xqcilsm)] = .{
1745 result[@backingInt(Feature.xqcilsm)] = .{
17461746 .llvm_name = "xqcilsm",
17471747 .description = "'Xqcilsm' (Qualcomm uC Load Store Multiple Extension)",
17481748 .dependencies = featureSet(&[_]Feature{}),
17491749 };
1750 result[@intFromEnum(Feature.xqcisim)] = .{
1750 result[@backingInt(Feature.xqcisim)] = .{
17511751 .llvm_name = "xqcisim",
17521752 .description = "'Xqcisim' (Qualcomm uC Simulation Hint Extension)",
17531753 .dependencies = featureSet(&[_]Feature{
17541754 .zca,
17551755 }),
17561756 };
1757 result[@intFromEnum(Feature.xqcisls)] = .{
1757 result[@backingInt(Feature.xqcisls)] = .{
17581758 .llvm_name = "xqcisls",
17591759 .description = "'Xqcisls' (Qualcomm uC Scaled Load Store Extension)",
17601760 .dependencies = featureSet(&[_]Feature{}),
17611761 };
1762 result[@intFromEnum(Feature.xqcisync)] = .{
1762 result[@backingInt(Feature.xqcisync)] = .{
17631763 .llvm_name = "xqcisync",
17641764 .description = "'Xqcisync' (Qualcomm uC Sync Delay Extension)",
17651765 .dependencies = featureSet(&[_]Feature{
17661766 .zca,
17671767 }),
17681768 };
1769 result[@intFromEnum(Feature.xsfcease)] = .{
1769 result[@backingInt(Feature.xsfcease)] = .{
17701770 .llvm_name = "xsfcease",
17711771 .description = "'XSfcease' (SiFive sf.cease Instruction)",
17721772 .dependencies = featureSet(&[_]Feature{}),
17731773 };
1774 result[@intFromEnum(Feature.xsfmm128t)] = .{
1774 result[@backingInt(Feature.xsfmm128t)] = .{
17751775 .llvm_name = "xsfmm128t",
17761776 .description = "'XSfmm128t' (TE=128 configuration)",
17771777 .dependencies = featureSet(&[_]Feature{
......@@ -1779,7 +1779,7 @@ pub const all_features = blk: {
17791779 .zvl512b,
17801780 }),
17811781 };
1782 result[@intFromEnum(Feature.xsfmm16t)] = .{
1782 result[@backingInt(Feature.xsfmm16t)] = .{
17831783 .llvm_name = "xsfmm16t",
17841784 .description = "'XSfmm16t' (TE=16 configuration)",
17851785 .dependencies = featureSet(&[_]Feature{
......@@ -1787,7 +1787,7 @@ pub const all_features = blk: {
17871787 .zvl64b,
17881788 }),
17891789 };
1790 result[@intFromEnum(Feature.xsfmm32a16f)] = .{
1790 result[@backingInt(Feature.xsfmm32a16f)] = .{
17911791 .llvm_name = "xsfmm32a16f",
17921792 .description = "'XSfmm32a16f' (TEW=32-bit accumulation, operands - float: 16b, widen=2 (IEEE, BF))",
17931793 .dependencies = featureSet(&[_]Feature{
......@@ -1795,7 +1795,7 @@ pub const all_features = blk: {
17951795 .zve32f,
17961796 }),
17971797 };
1798 result[@intFromEnum(Feature.xsfmm32a32f)] = .{
1798 result[@backingInt(Feature.xsfmm32a32f)] = .{
17991799 .llvm_name = "xsfmm32a32f",
18001800 .description = "'XSfmm32a32f' (TEW=32-bit accumulation, operands - float: 32b)",
18011801 .dependencies = featureSet(&[_]Feature{
......@@ -1803,7 +1803,7 @@ pub const all_features = blk: {
18031803 .zve32f,
18041804 }),
18051805 };
1806 result[@intFromEnum(Feature.xsfmm32a8f)] = .{
1806 result[@backingInt(Feature.xsfmm32a8f)] = .{
18071807 .llvm_name = "xsfmm32a8f",
18081808 .description = "'XSfmm32a8f' (TEW=32-bit accumulation, operands - float: fp8)",
18091809 .dependencies = featureSet(&[_]Feature{
......@@ -1811,14 +1811,14 @@ pub const all_features = blk: {
18111811 .zve32f,
18121812 }),
18131813 };
1814 result[@intFromEnum(Feature.xsfmm32a8i)] = .{
1814 result[@backingInt(Feature.xsfmm32a8i)] = .{
18151815 .llvm_name = "xsfmm32a8i",
18161816 .description = "'XSfmm32a8i' (TEW=32-bit accumulation, operands - int: 8b)",
18171817 .dependencies = featureSet(&[_]Feature{
18181818 .xsfmmbase,
18191819 }),
18201820 };
1821 result[@intFromEnum(Feature.xsfmm32t)] = .{
1821 result[@backingInt(Feature.xsfmm32t)] = .{
18221822 .llvm_name = "xsfmm32t",
18231823 .description = "'XSfmm32t' (TE=32 configuration)",
18241824 .dependencies = featureSet(&[_]Feature{
......@@ -1826,7 +1826,7 @@ pub const all_features = blk: {
18261826 .zvl128b,
18271827 }),
18281828 };
1829 result[@intFromEnum(Feature.xsfmm64a64f)] = .{
1829 result[@backingInt(Feature.xsfmm64a64f)] = .{
18301830 .llvm_name = "xsfmm64a64f",
18311831 .description = "'XSfmm64a64f' (TEW=64-bit accumulation, operands - float: fp64)",
18321832 .dependencies = featureSet(&[_]Feature{
......@@ -1834,7 +1834,7 @@ pub const all_features = blk: {
18341834 .zve64d,
18351835 }),
18361836 };
1837 result[@intFromEnum(Feature.xsfmm64t)] = .{
1837 result[@backingInt(Feature.xsfmm64t)] = .{
18381838 .llvm_name = "xsfmm64t",
18391839 .description = "'XSfmm64t' (TE=64 configuration)",
18401840 .dependencies = featureSet(&[_]Feature{
......@@ -1842,47 +1842,47 @@ pub const all_features = blk: {
18421842 .zvl256b,
18431843 }),
18441844 };
1845 result[@intFromEnum(Feature.xsfmmbase)] = .{
1845 result[@backingInt(Feature.xsfmmbase)] = .{
18461846 .llvm_name = "xsfmmbase",
18471847 .description = "'XSfmmbase' (All non arithmetic instructions for all TEWs and sf.vtzero)",
18481848 .dependencies = featureSet(&[_]Feature{
18491849 .zve32x,
18501850 }),
18511851 };
1852 result[@intFromEnum(Feature.xsfvcp)] = .{
1852 result[@backingInt(Feature.xsfvcp)] = .{
18531853 .llvm_name = "xsfvcp",
18541854 .description = "'XSfvcp' (SiFive Custom Vector Coprocessor Interface Instructions)",
18551855 .dependencies = featureSet(&[_]Feature{
18561856 .zve32x,
18571857 }),
18581858 };
1859 result[@intFromEnum(Feature.xsfvfbfexp16e)] = .{
1859 result[@backingInt(Feature.xsfvfbfexp16e)] = .{
18601860 .llvm_name = "xsfvfbfexp16e",
18611861 .description = "'XSfvfbfexp16e' (SiFive Vector Floating-Point Exponential Function Instruction, BFloat16)",
18621862 .dependencies = featureSet(&[_]Feature{}),
18631863 };
1864 result[@intFromEnum(Feature.xsfvfexp16e)] = .{
1864 result[@backingInt(Feature.xsfvfexp16e)] = .{
18651865 .llvm_name = "xsfvfexp16e",
18661866 .description = "'XSfvfexp16e' (SiFive Vector Floating-Point Exponential Function Instruction, Half Precision)",
18671867 .dependencies = featureSet(&[_]Feature{
18681868 .zvfh,
18691869 }),
18701870 };
1871 result[@intFromEnum(Feature.xsfvfexp32e)] = .{
1871 result[@backingInt(Feature.xsfvfexp32e)] = .{
18721872 .llvm_name = "xsfvfexp32e",
18731873 .description = "'XSfvfexp32e' (SiFive Vector Floating-Point Exponential Function Instruction, Single Precision)",
18741874 .dependencies = featureSet(&[_]Feature{
18751875 .zve32f,
18761876 }),
18771877 };
1878 result[@intFromEnum(Feature.xsfvfexpa)] = .{
1878 result[@backingInt(Feature.xsfvfexpa)] = .{
18791879 .llvm_name = "xsfvfexpa",
18801880 .description = "'XSfvfexpa' (SiFive Vector Floating-Point Exponential Approximation Instruction)",
18811881 .dependencies = featureSet(&[_]Feature{
18821882 .zve32f,
18831883 }),
18841884 };
1885 result[@intFromEnum(Feature.xsfvfexpa64e)] = .{
1885 result[@backingInt(Feature.xsfvfexpa64e)] = .{
18861886 .llvm_name = "xsfvfexpa64e",
18871887 .description = "'XSfvfexpa64e' (SiFive Vector Floating-Point Exponential Approximation Instruction with Double-Precision)",
18881888 .dependencies = featureSet(&[_]Feature{
......@@ -1890,14 +1890,14 @@ pub const all_features = blk: {
18901890 .zve64d,
18911891 }),
18921892 };
1893 result[@intFromEnum(Feature.xsfvfnrclipxfqf)] = .{
1893 result[@backingInt(Feature.xsfvfnrclipxfqf)] = .{
18941894 .llvm_name = "xsfvfnrclipxfqf",
18951895 .description = "'XSfvfnrclipxfqf' (SiFive FP32-to-int8 Ranged Clip Instructions)",
18961896 .dependencies = featureSet(&[_]Feature{
18971897 .zve32f,
18981898 }),
18991899 };
1900 result[@intFromEnum(Feature.xsfvfwmaccqqq)] = .{
1900 result[@backingInt(Feature.xsfvfwmaccqqq)] = .{
19011901 .llvm_name = "xsfvfwmaccqqq",
19021902 .description = "'XSfvfwmaccqqq' (SiFive Matrix Multiply Accumulate Instruction (4-by-4))",
19031903 .dependencies = featureSet(&[_]Feature{
......@@ -1905,7 +1905,7 @@ pub const all_features = blk: {
19051905 .zvl128b,
19061906 }),
19071907 };
1908 result[@intFromEnum(Feature.xsfvqmaccdod)] = .{
1908 result[@backingInt(Feature.xsfvqmaccdod)] = .{
19091909 .llvm_name = "xsfvqmaccdod",
19101910 .description = "'XSfvqmaccdod' (SiFive Int8 Matrix Multiplication Instructions (2-by-8 and 8-by-2))",
19111911 .dependencies = featureSet(&[_]Feature{
......@@ -1913,7 +1913,7 @@ pub const all_features = blk: {
19131913 .zvl128b,
19141914 }),
19151915 };
1916 result[@intFromEnum(Feature.xsfvqmaccqoq)] = .{
1916 result[@backingInt(Feature.xsfvqmaccqoq)] = .{
19171917 .llvm_name = "xsfvqmaccqoq",
19181918 .description = "'XSfvqmaccqoq' (SiFive Int8 Matrix Multiplication Instructions (4-by-8 and 8-by-4))",
19191919 .dependencies = featureSet(&[_]Feature{
......@@ -1921,189 +1921,189 @@ pub const all_features = blk: {
19211921 .zvl256b,
19221922 }),
19231923 };
1924 result[@intFromEnum(Feature.xsifivecdiscarddlone)] = .{
1924 result[@backingInt(Feature.xsifivecdiscarddlone)] = .{
19251925 .llvm_name = "xsifivecdiscarddlone",
19261926 .description = "'XSiFivecdiscarddlone' (SiFive sf.cdiscard.d.l1 Instruction)",
19271927 .dependencies = featureSet(&[_]Feature{}),
19281928 };
1929 result[@intFromEnum(Feature.xsifivecflushdlone)] = .{
1929 result[@backingInt(Feature.xsifivecflushdlone)] = .{
19301930 .llvm_name = "xsifivecflushdlone",
19311931 .description = "'XSiFivecflushdlone' (SiFive sf.cflush.d.l1 Instruction)",
19321932 .dependencies = featureSet(&[_]Feature{}),
19331933 };
1934 result[@intFromEnum(Feature.xsmtvdot)] = .{
1934 result[@backingInt(Feature.xsmtvdot)] = .{
19351935 .llvm_name = "xsmtvdot",
19361936 .description = "'XSMTVDot' (SpacemiT Vector Dot Product Extension)",
19371937 .dependencies = featureSet(&[_]Feature{
19381938 .zve32f,
19391939 }),
19401940 };
1941 result[@intFromEnum(Feature.xtheadba)] = .{
1941 result[@backingInt(Feature.xtheadba)] = .{
19421942 .llvm_name = "xtheadba",
19431943 .description = "'XTHeadBa' (T-Head address calculation instructions)",
19441944 .dependencies = featureSet(&[_]Feature{}),
19451945 };
1946 result[@intFromEnum(Feature.xtheadbb)] = .{
1946 result[@backingInt(Feature.xtheadbb)] = .{
19471947 .llvm_name = "xtheadbb",
19481948 .description = "'XTHeadBb' (T-Head basic bit-manipulation instructions)",
19491949 .dependencies = featureSet(&[_]Feature{}),
19501950 };
1951 result[@intFromEnum(Feature.xtheadbs)] = .{
1951 result[@backingInt(Feature.xtheadbs)] = .{
19521952 .llvm_name = "xtheadbs",
19531953 .description = "'XTHeadBs' (T-Head single-bit instructions)",
19541954 .dependencies = featureSet(&[_]Feature{}),
19551955 };
1956 result[@intFromEnum(Feature.xtheadcmo)] = .{
1956 result[@backingInt(Feature.xtheadcmo)] = .{
19571957 .llvm_name = "xtheadcmo",
19581958 .description = "'XTHeadCmo' (T-Head cache management instructions)",
19591959 .dependencies = featureSet(&[_]Feature{}),
19601960 };
1961 result[@intFromEnum(Feature.xtheadcondmov)] = .{
1961 result[@backingInt(Feature.xtheadcondmov)] = .{
19621962 .llvm_name = "xtheadcondmov",
19631963 .description = "'XTHeadCondMov' (T-Head conditional move instructions)",
19641964 .dependencies = featureSet(&[_]Feature{}),
19651965 };
1966 result[@intFromEnum(Feature.xtheadfmemidx)] = .{
1966 result[@backingInt(Feature.xtheadfmemidx)] = .{
19671967 .llvm_name = "xtheadfmemidx",
19681968 .description = "'XTHeadFMemIdx' (T-Head FP Indexed Memory Operations)",
19691969 .dependencies = featureSet(&[_]Feature{}),
19701970 };
1971 result[@intFromEnum(Feature.xtheadmac)] = .{
1971 result[@backingInt(Feature.xtheadmac)] = .{
19721972 .llvm_name = "xtheadmac",
19731973 .description = "'XTHeadMac' (T-Head Multiply-Accumulate Instructions)",
19741974 .dependencies = featureSet(&[_]Feature{}),
19751975 };
1976 result[@intFromEnum(Feature.xtheadmemidx)] = .{
1976 result[@backingInt(Feature.xtheadmemidx)] = .{
19771977 .llvm_name = "xtheadmemidx",
19781978 .description = "'XTHeadMemIdx' (T-Head Indexed Memory Operations)",
19791979 .dependencies = featureSet(&[_]Feature{}),
19801980 };
1981 result[@intFromEnum(Feature.xtheadmempair)] = .{
1981 result[@backingInt(Feature.xtheadmempair)] = .{
19821982 .llvm_name = "xtheadmempair",
19831983 .description = "'XTHeadMemPair' (T-Head two-GPR Memory Operations)",
19841984 .dependencies = featureSet(&[_]Feature{}),
19851985 };
1986 result[@intFromEnum(Feature.xtheadsync)] = .{
1986 result[@backingInt(Feature.xtheadsync)] = .{
19871987 .llvm_name = "xtheadsync",
19881988 .description = "'XTHeadSync' (T-Head multicore synchronization instructions)",
19891989 .dependencies = featureSet(&[_]Feature{}),
19901990 };
1991 result[@intFromEnum(Feature.xtheadvdot)] = .{
1991 result[@backingInt(Feature.xtheadvdot)] = .{
19921992 .llvm_name = "xtheadvdot",
19931993 .description = "'XTHeadVdot' (T-Head Vector Extensions for Dot)",
19941994 .dependencies = featureSet(&[_]Feature{
19951995 .v,
19961996 }),
19971997 };
1998 result[@intFromEnum(Feature.xventanacondops)] = .{
1998 result[@backingInt(Feature.xventanacondops)] = .{
19991999 .llvm_name = "xventanacondops",
20002000 .description = "'XVentanaCondOps' (Ventana Conditional Ops)",
20012001 .dependencies = featureSet(&[_]Feature{}),
20022002 };
2003 result[@intFromEnum(Feature.xwchc)] = .{
2003 result[@backingInt(Feature.xwchc)] = .{
20042004 .llvm_name = "xwchc",
20052005 .description = "'Xwchc' (WCH/QingKe additional compressed opcodes)",
20062006 .dependencies = featureSet(&[_]Feature{
20072007 .zca,
20082008 }),
20092009 };
2010 result[@intFromEnum(Feature.za128rs)] = .{
2010 result[@backingInt(Feature.za128rs)] = .{
20112011 .llvm_name = "za128rs",
20122012 .description = "'Za128rs' (Reservation Set Size of at Most 128 Bytes)",
20132013 .dependencies = featureSet(&[_]Feature{}),
20142014 };
2015 result[@intFromEnum(Feature.za64rs)] = .{
2015 result[@backingInt(Feature.za64rs)] = .{
20162016 .llvm_name = "za64rs",
20172017 .description = "'Za64rs' (Reservation Set Size of at Most 64 Bytes)",
20182018 .dependencies = featureSet(&[_]Feature{}),
20192019 };
2020 result[@intFromEnum(Feature.zaamo)] = .{
2020 result[@backingInt(Feature.zaamo)] = .{
20212021 .llvm_name = "zaamo",
20222022 .description = "'Zaamo' (Atomic Memory Operations)",
20232023 .dependencies = featureSet(&[_]Feature{}),
20242024 };
2025 result[@intFromEnum(Feature.zabha)] = .{
2025 result[@backingInt(Feature.zabha)] = .{
20262026 .llvm_name = "zabha",
20272027 .description = "'Zabha' (Byte and Halfword Atomic Memory Operations)",
20282028 .dependencies = featureSet(&[_]Feature{
20292029 .zaamo,
20302030 }),
20312031 };
2032 result[@intFromEnum(Feature.zacas)] = .{
2032 result[@backingInt(Feature.zacas)] = .{
20332033 .llvm_name = "zacas",
20342034 .description = "'Zacas' (Atomic Compare-And-Swap Instructions)",
20352035 .dependencies = featureSet(&[_]Feature{
20362036 .zaamo,
20372037 }),
20382038 };
2039 result[@intFromEnum(Feature.zalasr)] = .{
2039 result[@backingInt(Feature.zalasr)] = .{
20402040 .llvm_name = "zalasr",
20412041 .description = "'Zalasr' (Load-Acquire and Store-Release Instructions)",
20422042 .dependencies = featureSet(&[_]Feature{}),
20432043 };
2044 result[@intFromEnum(Feature.zalrsc)] = .{
2044 result[@backingInt(Feature.zalrsc)] = .{
20452045 .llvm_name = "zalrsc",
20462046 .description = "'Zalrsc' (Load-Reserved/Store-Conditional)",
20472047 .dependencies = featureSet(&[_]Feature{}),
20482048 };
2049 result[@intFromEnum(Feature.zama16b)] = .{
2049 result[@backingInt(Feature.zama16b)] = .{
20502050 .llvm_name = "zama16b",
20512051 .description = "'Zama16b' (Atomic 16-byte misaligned loads, stores and AMOs)",
20522052 .dependencies = featureSet(&[_]Feature{}),
20532053 };
2054 result[@intFromEnum(Feature.zawrs)] = .{
2054 result[@backingInt(Feature.zawrs)] = .{
20552055 .llvm_name = "zawrs",
20562056 .description = "'Zawrs' (Wait on Reservation Set)",
20572057 .dependencies = featureSet(&[_]Feature{}),
20582058 };
2059 result[@intFromEnum(Feature.zba)] = .{
2059 result[@backingInt(Feature.zba)] = .{
20602060 .llvm_name = "zba",
20612061 .description = "'Zba' (Address Generation Instructions)",
20622062 .dependencies = featureSet(&[_]Feature{}),
20632063 };
2064 result[@intFromEnum(Feature.zbb)] = .{
2064 result[@backingInt(Feature.zbb)] = .{
20652065 .llvm_name = "zbb",
20662066 .description = "'Zbb' (Basic Bit-Manipulation)",
20672067 .dependencies = featureSet(&[_]Feature{}),
20682068 };
2069 result[@intFromEnum(Feature.zbc)] = .{
2069 result[@backingInt(Feature.zbc)] = .{
20702070 .llvm_name = "zbc",
20712071 .description = "'Zbc' (Carry-Less Multiplication)",
20722072 .dependencies = featureSet(&[_]Feature{}),
20732073 };
2074 result[@intFromEnum(Feature.zbkb)] = .{
2074 result[@backingInt(Feature.zbkb)] = .{
20752075 .llvm_name = "zbkb",
20762076 .description = "'Zbkb' (Bitmanip instructions for Cryptography)",
20772077 .dependencies = featureSet(&[_]Feature{}),
20782078 };
2079 result[@intFromEnum(Feature.zbkc)] = .{
2079 result[@backingInt(Feature.zbkc)] = .{
20802080 .llvm_name = "zbkc",
20812081 .description = "'Zbkc' (Carry-less multiply instructions for Cryptography)",
20822082 .dependencies = featureSet(&[_]Feature{}),
20832083 };
2084 result[@intFromEnum(Feature.zbkx)] = .{
2084 result[@backingInt(Feature.zbkx)] = .{
20852085 .llvm_name = "zbkx",
20862086 .description = "'Zbkx' (Crossbar permutation instructions)",
20872087 .dependencies = featureSet(&[_]Feature{}),
20882088 };
2089 result[@intFromEnum(Feature.zbs)] = .{
2089 result[@backingInt(Feature.zbs)] = .{
20902090 .llvm_name = "zbs",
20912091 .description = "'Zbs' (Single-Bit Instructions)",
20922092 .dependencies = featureSet(&[_]Feature{}),
20932093 };
2094 result[@intFromEnum(Feature.zca)] = .{
2094 result[@backingInt(Feature.zca)] = .{
20952095 .llvm_name = "zca",
20962096 .description = "'Zca' (part of the C extension, excluding compressed floating point loads/stores)",
20972097 .dependencies = featureSet(&[_]Feature{}),
20982098 };
2099 result[@intFromEnum(Feature.zcb)] = .{
2099 result[@backingInt(Feature.zcb)] = .{
21002100 .llvm_name = "zcb",
21012101 .description = "'Zcb' (Compressed basic bit manipulation instructions)",
21022102 .dependencies = featureSet(&[_]Feature{
21032103 .zca,
21042104 }),
21052105 };
2106 result[@intFromEnum(Feature.zcd)] = .{
2106 result[@backingInt(Feature.zcd)] = .{
21072107 .llvm_name = "zcd",
21082108 .description = "'Zcd' (Compressed Double-Precision Floating-Point Instructions)",
21092109 .dependencies = featureSet(&[_]Feature{
......@@ -2111,7 +2111,7 @@ pub const all_features = blk: {
21112111 .zca,
21122112 }),
21132113 };
2114 result[@intFromEnum(Feature.zce)] = .{
2114 result[@backingInt(Feature.zce)] = .{
21152115 .llvm_name = "zce",
21162116 .description = "'Zce' (Compressed extensions for microcontrollers)",
21172117 .dependencies = featureSet(&[_]Feature{
......@@ -2120,7 +2120,7 @@ pub const all_features = blk: {
21202120 .zcmt,
21212121 }),
21222122 };
2123 result[@intFromEnum(Feature.zcf)] = .{
2123 result[@backingInt(Feature.zcf)] = .{
21242124 .llvm_name = "zcf",
21252125 .description = "'Zcf' (Compressed Single-Precision Floating-Point Instructions)",
21262126 .dependencies = featureSet(&[_]Feature{
......@@ -2128,7 +2128,7 @@ pub const all_features = blk: {
21282128 .zca,
21292129 }),
21302130 };
2131 result[@intFromEnum(Feature.zclsd)] = .{
2131 result[@backingInt(Feature.zclsd)] = .{
21322132 .llvm_name = "zclsd",
21332133 .description = "'Zclsd' (Compressed Load/Store Pair Instructions)",
21342134 .dependencies = featureSet(&[_]Feature{
......@@ -2136,21 +2136,21 @@ pub const all_features = blk: {
21362136 .zilsd,
21372137 }),
21382138 };
2139 result[@intFromEnum(Feature.zcmop)] = .{
2139 result[@backingInt(Feature.zcmop)] = .{
21402140 .llvm_name = "zcmop",
21412141 .description = "'Zcmop' (Compressed May-Be-Operations)",
21422142 .dependencies = featureSet(&[_]Feature{
21432143 .zca,
21442144 }),
21452145 };
2146 result[@intFromEnum(Feature.zcmp)] = .{
2146 result[@backingInt(Feature.zcmp)] = .{
21472147 .llvm_name = "zcmp",
21482148 .description = "'Zcmp' (sequenced instructions for code-size reduction)",
21492149 .dependencies = featureSet(&[_]Feature{
21502150 .zca,
21512151 }),
21522152 };
2153 result[@intFromEnum(Feature.zcmt)] = .{
2153 result[@backingInt(Feature.zcmt)] = .{
21542154 .llvm_name = "zcmt",
21552155 .description = "'Zcmt' (table jump instructions for code-size reduction)",
21562156 .dependencies = featureSet(&[_]Feature{
......@@ -2158,172 +2158,172 @@ pub const all_features = blk: {
21582158 .zicsr,
21592159 }),
21602160 };
2161 result[@intFromEnum(Feature.zdinx)] = .{
2161 result[@backingInt(Feature.zdinx)] = .{
21622162 .llvm_name = "zdinx",
21632163 .description = "'Zdinx' (Double in Integer)",
21642164 .dependencies = featureSet(&[_]Feature{
21652165 .zfinx,
21662166 }),
21672167 };
2168 result[@intFromEnum(Feature.zexth_fusion)] = .{
2168 result[@backingInt(Feature.zexth_fusion)] = .{
21692169 .llvm_name = "zexth-fusion",
21702170 .description = "Enable SLLI+SRLI to be fused to zero extension of halfword",
21712171 .dependencies = featureSet(&[_]Feature{}),
21722172 };
2173 result[@intFromEnum(Feature.zextw_fusion)] = .{
2173 result[@backingInt(Feature.zextw_fusion)] = .{
21742174 .llvm_name = "zextw-fusion",
21752175 .description = "Enable SLLI+SRLI to be fused to zero extension of word",
21762176 .dependencies = featureSet(&[_]Feature{}),
21772177 };
2178 result[@intFromEnum(Feature.zfa)] = .{
2178 result[@backingInt(Feature.zfa)] = .{
21792179 .llvm_name = "zfa",
21802180 .description = "'Zfa' (Additional Floating-Point)",
21812181 .dependencies = featureSet(&[_]Feature{
21822182 .f,
21832183 }),
21842184 };
2185 result[@intFromEnum(Feature.zfbfmin)] = .{
2185 result[@backingInt(Feature.zfbfmin)] = .{
21862186 .llvm_name = "zfbfmin",
21872187 .description = "'Zfbfmin' (Scalar BF16 Converts)",
21882188 .dependencies = featureSet(&[_]Feature{
21892189 .f,
21902190 }),
21912191 };
2192 result[@intFromEnum(Feature.zfh)] = .{
2192 result[@backingInt(Feature.zfh)] = .{
21932193 .llvm_name = "zfh",
21942194 .description = "'Zfh' (Half-Precision Floating-Point)",
21952195 .dependencies = featureSet(&[_]Feature{
21962196 .zfhmin,
21972197 }),
21982198 };
2199 result[@intFromEnum(Feature.zfhmin)] = .{
2199 result[@backingInt(Feature.zfhmin)] = .{
22002200 .llvm_name = "zfhmin",
22012201 .description = "'Zfhmin' (Half-Precision Floating-Point Minimal)",
22022202 .dependencies = featureSet(&[_]Feature{
22032203 .f,
22042204 }),
22052205 };
2206 result[@intFromEnum(Feature.zfinx)] = .{
2206 result[@backingInt(Feature.zfinx)] = .{
22072207 .llvm_name = "zfinx",
22082208 .description = "'Zfinx' (Float in Integer)",
22092209 .dependencies = featureSet(&[_]Feature{
22102210 .zicsr,
22112211 }),
22122212 };
2213 result[@intFromEnum(Feature.zhinx)] = .{
2213 result[@backingInt(Feature.zhinx)] = .{
22142214 .llvm_name = "zhinx",
22152215 .description = "'Zhinx' (Half Float in Integer)",
22162216 .dependencies = featureSet(&[_]Feature{
22172217 .zhinxmin,
22182218 }),
22192219 };
2220 result[@intFromEnum(Feature.zhinxmin)] = .{
2220 result[@backingInt(Feature.zhinxmin)] = .{
22212221 .llvm_name = "zhinxmin",
22222222 .description = "'Zhinxmin' (Half Float in Integer Minimal)",
22232223 .dependencies = featureSet(&[_]Feature{
22242224 .zfinx,
22252225 }),
22262226 };
2227 result[@intFromEnum(Feature.zic64b)] = .{
2227 result[@backingInt(Feature.zic64b)] = .{
22282228 .llvm_name = "zic64b",
22292229 .description = "'Zic64b' (Cache Block Size Is 64 Bytes)",
22302230 .dependencies = featureSet(&[_]Feature{}),
22312231 };
2232 result[@intFromEnum(Feature.zicbom)] = .{
2232 result[@backingInt(Feature.zicbom)] = .{
22332233 .llvm_name = "zicbom",
22342234 .description = "'Zicbom' (Cache-Block Management Instructions)",
22352235 .dependencies = featureSet(&[_]Feature{}),
22362236 };
2237 result[@intFromEnum(Feature.zicbop)] = .{
2237 result[@backingInt(Feature.zicbop)] = .{
22382238 .llvm_name = "zicbop",
22392239 .description = "'Zicbop' (Cache-Block Prefetch Instructions)",
22402240 .dependencies = featureSet(&[_]Feature{}),
22412241 };
2242 result[@intFromEnum(Feature.zicboz)] = .{
2242 result[@backingInt(Feature.zicboz)] = .{
22432243 .llvm_name = "zicboz",
22442244 .description = "'Zicboz' (Cache-Block Zero Instructions)",
22452245 .dependencies = featureSet(&[_]Feature{}),
22462246 };
2247 result[@intFromEnum(Feature.ziccamoa)] = .{
2247 result[@backingInt(Feature.ziccamoa)] = .{
22482248 .llvm_name = "ziccamoa",
22492249 .description = "'Ziccamoa' (Main Memory Supports All Atomics in A)",
22502250 .dependencies = featureSet(&[_]Feature{}),
22512251 };
2252 result[@intFromEnum(Feature.ziccamoc)] = .{
2252 result[@backingInt(Feature.ziccamoc)] = .{
22532253 .llvm_name = "ziccamoc",
22542254 .description = "'Ziccamoc' (Main Memory Supports Atomics in Zacas)",
22552255 .dependencies = featureSet(&[_]Feature{}),
22562256 };
2257 result[@intFromEnum(Feature.ziccif)] = .{
2257 result[@backingInt(Feature.ziccif)] = .{
22582258 .llvm_name = "ziccif",
22592259 .description = "'Ziccif' (Main Memory Supports Instruction Fetch with Atomicity Requirement)",
22602260 .dependencies = featureSet(&[_]Feature{}),
22612261 };
2262 result[@intFromEnum(Feature.zicclsm)] = .{
2262 result[@backingInt(Feature.zicclsm)] = .{
22632263 .llvm_name = "zicclsm",
22642264 .description = "'Zicclsm' (Main Memory Supports Misaligned Loads/Stores)",
22652265 .dependencies = featureSet(&[_]Feature{}),
22662266 };
2267 result[@intFromEnum(Feature.ziccrse)] = .{
2267 result[@backingInt(Feature.ziccrse)] = .{
22682268 .llvm_name = "ziccrse",
22692269 .description = "'Ziccrse' (Main Memory Supports Forward Progress on LR/SC Sequences)",
22702270 .dependencies = featureSet(&[_]Feature{}),
22712271 };
2272 result[@intFromEnum(Feature.zicntr)] = .{
2272 result[@backingInt(Feature.zicntr)] = .{
22732273 .llvm_name = "zicntr",
22742274 .description = "'Zicntr' (Base Counters and Timers)",
22752275 .dependencies = featureSet(&[_]Feature{
22762276 .zicsr,
22772277 }),
22782278 };
2279 result[@intFromEnum(Feature.zicond)] = .{
2279 result[@backingInt(Feature.zicond)] = .{
22802280 .llvm_name = "zicond",
22812281 .description = "'Zicond' (Integer Conditional Operations)",
22822282 .dependencies = featureSet(&[_]Feature{}),
22832283 };
2284 result[@intFromEnum(Feature.zicsr)] = .{
2284 result[@backingInt(Feature.zicsr)] = .{
22852285 .llvm_name = "zicsr",
22862286 .description = "'Zicsr' (CSRs)",
22872287 .dependencies = featureSet(&[_]Feature{}),
22882288 };
2289 result[@intFromEnum(Feature.zifencei)] = .{
2289 result[@backingInt(Feature.zifencei)] = .{
22902290 .llvm_name = "zifencei",
22912291 .description = "'Zifencei' (fence.i)",
22922292 .dependencies = featureSet(&[_]Feature{}),
22932293 };
2294 result[@intFromEnum(Feature.zihintntl)] = .{
2294 result[@backingInt(Feature.zihintntl)] = .{
22952295 .llvm_name = "zihintntl",
22962296 .description = "'Zihintntl' (Non-Temporal Locality Hints)",
22972297 .dependencies = featureSet(&[_]Feature{}),
22982298 };
2299 result[@intFromEnum(Feature.zihintpause)] = .{
2299 result[@backingInt(Feature.zihintpause)] = .{
23002300 .llvm_name = "zihintpause",
23012301 .description = "'Zihintpause' (Pause Hint)",
23022302 .dependencies = featureSet(&[_]Feature{}),
23032303 };
2304 result[@intFromEnum(Feature.zihpm)] = .{
2304 result[@backingInt(Feature.zihpm)] = .{
23052305 .llvm_name = "zihpm",
23062306 .description = "'Zihpm' (Hardware Performance Counters)",
23072307 .dependencies = featureSet(&[_]Feature{
23082308 .zicsr,
23092309 }),
23102310 };
2311 result[@intFromEnum(Feature.zilsd)] = .{
2311 result[@backingInt(Feature.zilsd)] = .{
23122312 .llvm_name = "zilsd",
23132313 .description = "'Zilsd' (Load/Store Pair Instructions)",
23142314 .dependencies = featureSet(&[_]Feature{}),
23152315 };
2316 result[@intFromEnum(Feature.zilsd_4byte_align)] = .{
2316 result[@backingInt(Feature.zilsd_4byte_align)] = .{
23172317 .llvm_name = "zilsd-4byte-align",
23182318 .description = "Allow 4-byte alignment for Zilsd LD/SD instructions",
23192319 .dependencies = featureSet(&[_]Feature{}),
23202320 };
2321 result[@intFromEnum(Feature.zimop)] = .{
2321 result[@backingInt(Feature.zimop)] = .{
23222322 .llvm_name = "zimop",
23232323 .description = "'Zimop' (May-Be-Operations)",
23242324 .dependencies = featureSet(&[_]Feature{}),
23252325 };
2326 result[@intFromEnum(Feature.zk)] = .{
2326 result[@backingInt(Feature.zk)] = .{
23272327 .llvm_name = "zk",
23282328 .description = "'Zk' (Standard scalar cryptography extension)",
23292329 .dependencies = featureSet(&[_]Feature{
......@@ -2332,7 +2332,7 @@ pub const all_features = blk: {
23322332 .zkt,
23332333 }),
23342334 };
2335 result[@intFromEnum(Feature.zkn)] = .{
2335 result[@backingInt(Feature.zkn)] = .{
23362336 .llvm_name = "zkn",
23372337 .description = "'Zkn' (NIST Algorithm Suite)",
23382338 .dependencies = featureSet(&[_]Feature{
......@@ -2344,27 +2344,27 @@ pub const all_features = blk: {
23442344 .zknh,
23452345 }),
23462346 };
2347 result[@intFromEnum(Feature.zknd)] = .{
2347 result[@backingInt(Feature.zknd)] = .{
23482348 .llvm_name = "zknd",
23492349 .description = "'Zknd' (NIST Suite: AES Decryption)",
23502350 .dependencies = featureSet(&[_]Feature{}),
23512351 };
2352 result[@intFromEnum(Feature.zkne)] = .{
2352 result[@backingInt(Feature.zkne)] = .{
23532353 .llvm_name = "zkne",
23542354 .description = "'Zkne' (NIST Suite: AES Encryption)",
23552355 .dependencies = featureSet(&[_]Feature{}),
23562356 };
2357 result[@intFromEnum(Feature.zknh)] = .{
2357 result[@backingInt(Feature.zknh)] = .{
23582358 .llvm_name = "zknh",
23592359 .description = "'Zknh' (NIST Suite: Hash Function Instructions)",
23602360 .dependencies = featureSet(&[_]Feature{}),
23612361 };
2362 result[@intFromEnum(Feature.zkr)] = .{
2362 result[@backingInt(Feature.zkr)] = .{
23632363 .llvm_name = "zkr",
23642364 .description = "'Zkr' (Entropy Source Extension)",
23652365 .dependencies = featureSet(&[_]Feature{}),
23662366 };
2367 result[@intFromEnum(Feature.zks)] = .{
2367 result[@backingInt(Feature.zks)] = .{
23682368 .llvm_name = "zks",
23692369 .description = "'Zks' (ShangMi Algorithm Suite)",
23702370 .dependencies = featureSet(&[_]Feature{
......@@ -2375,46 +2375,46 @@ pub const all_features = blk: {
23752375 .zksh,
23762376 }),
23772377 };
2378 result[@intFromEnum(Feature.zksed)] = .{
2378 result[@backingInt(Feature.zksed)] = .{
23792379 .llvm_name = "zksed",
23802380 .description = "'Zksed' (ShangMi Suite: SM4 Block Cipher Instructions)",
23812381 .dependencies = featureSet(&[_]Feature{}),
23822382 };
2383 result[@intFromEnum(Feature.zksh)] = .{
2383 result[@backingInt(Feature.zksh)] = .{
23842384 .llvm_name = "zksh",
23852385 .description = "'Zksh' (ShangMi Suite: SM3 Hash Function Instructions)",
23862386 .dependencies = featureSet(&[_]Feature{}),
23872387 };
2388 result[@intFromEnum(Feature.zkt)] = .{
2388 result[@backingInt(Feature.zkt)] = .{
23892389 .llvm_name = "zkt",
23902390 .description = "'Zkt' (Data Independent Execution Latency)",
23912391 .dependencies = featureSet(&[_]Feature{}),
23922392 };
2393 result[@intFromEnum(Feature.zmmul)] = .{
2393 result[@backingInt(Feature.zmmul)] = .{
23942394 .llvm_name = "zmmul",
23952395 .description = "'Zmmul' (Integer Multiplication)",
23962396 .dependencies = featureSet(&[_]Feature{}),
23972397 };
2398 result[@intFromEnum(Feature.ztso)] = .{
2398 result[@backingInt(Feature.ztso)] = .{
23992399 .llvm_name = "ztso",
24002400 .description = "'Ztso' (Memory Model - Total Store Order)",
24012401 .dependencies = featureSet(&[_]Feature{}),
24022402 };
2403 result[@intFromEnum(Feature.zvbb)] = .{
2403 result[@backingInt(Feature.zvbb)] = .{
24042404 .llvm_name = "zvbb",
24052405 .description = "'Zvbb' (Vector basic bit-manipulation instructions)",
24062406 .dependencies = featureSet(&[_]Feature{
24072407 .zvkb,
24082408 }),
24092409 };
2410 result[@intFromEnum(Feature.zvbc)] = .{
2410 result[@backingInt(Feature.zvbc)] = .{
24112411 .llvm_name = "zvbc",
24122412 .description = "'Zvbc' (Vector Carryless Multiplication)",
24132413 .dependencies = featureSet(&[_]Feature{
24142414 .zve64x,
24152415 }),
24162416 };
2417 result[@intFromEnum(Feature.zve32f)] = .{
2417 result[@backingInt(Feature.zve32f)] = .{
24182418 .llvm_name = "zve32f",
24192419 .description = "'Zve32f' (Vector Extensions for Embedded Processors with maximal 32 EEW and F extension)",
24202420 .dependencies = featureSet(&[_]Feature{
......@@ -2422,7 +2422,7 @@ pub const all_features = blk: {
24222422 .zve32x,
24232423 }),
24242424 };
2425 result[@intFromEnum(Feature.zve32x)] = .{
2425 result[@backingInt(Feature.zve32x)] = .{
24262426 .llvm_name = "zve32x",
24272427 .description = "'Zve32x' (Vector Extensions for Embedded Processors with maximal 32 EEW)",
24282428 .dependencies = featureSet(&[_]Feature{
......@@ -2430,7 +2430,7 @@ pub const all_features = blk: {
24302430 .zvl32b,
24312431 }),
24322432 };
2433 result[@intFromEnum(Feature.zve64d)] = .{
2433 result[@backingInt(Feature.zve64d)] = .{
24342434 .llvm_name = "zve64d",
24352435 .description = "'Zve64d' (Vector Extensions for Embedded Processors with maximal 64 EEW, F and D extension)",
24362436 .dependencies = featureSet(&[_]Feature{
......@@ -2438,7 +2438,7 @@ pub const all_features = blk: {
24382438 .zve64f,
24392439 }),
24402440 };
2441 result[@intFromEnum(Feature.zve64f)] = .{
2441 result[@backingInt(Feature.zve64f)] = .{
24422442 .llvm_name = "zve64f",
24432443 .description = "'Zve64f' (Vector Extensions for Embedded Processors with maximal 64 EEW and F extension)",
24442444 .dependencies = featureSet(&[_]Feature{
......@@ -2446,7 +2446,7 @@ pub const all_features = blk: {
24462446 .zve64x,
24472447 }),
24482448 };
2449 result[@intFromEnum(Feature.zve64x)] = .{
2449 result[@backingInt(Feature.zve64x)] = .{
24502450 .llvm_name = "zve64x",
24512451 .description = "'Zve64x' (Vector Extensions for Embedded Processors with maximal 64 EEW)",
24522452 .dependencies = featureSet(&[_]Feature{
......@@ -2454,14 +2454,14 @@ pub const all_features = blk: {
24542454 .zvl64b,
24552455 }),
24562456 };
2457 result[@intFromEnum(Feature.zvfbfmin)] = .{
2457 result[@backingInt(Feature.zvfbfmin)] = .{
24582458 .llvm_name = "zvfbfmin",
24592459 .description = "'Zvfbfmin' (Vector BF16 Converts)",
24602460 .dependencies = featureSet(&[_]Feature{
24612461 .zve32f,
24622462 }),
24632463 };
2464 result[@intFromEnum(Feature.zvfbfwma)] = .{
2464 result[@backingInt(Feature.zvfbfwma)] = .{
24652465 .llvm_name = "zvfbfwma",
24662466 .description = "'Zvfbfwma' (Vector BF16 widening mul-add)",
24672467 .dependencies = featureSet(&[_]Feature{
......@@ -2469,7 +2469,7 @@ pub const all_features = blk: {
24692469 .zvfbfmin,
24702470 }),
24712471 };
2472 result[@intFromEnum(Feature.zvfh)] = .{
2472 result[@backingInt(Feature.zvfh)] = .{
24732473 .llvm_name = "zvfh",
24742474 .description = "'Zvfh' (Vector Half-Precision Floating-Point)",
24752475 .dependencies = featureSet(&[_]Feature{
......@@ -2477,28 +2477,28 @@ pub const all_features = blk: {
24772477 .zvfhmin,
24782478 }),
24792479 };
2480 result[@intFromEnum(Feature.zvfhmin)] = .{
2480 result[@backingInt(Feature.zvfhmin)] = .{
24812481 .llvm_name = "zvfhmin",
24822482 .description = "'Zvfhmin' (Vector Half-Precision Floating-Point Minimal)",
24832483 .dependencies = featureSet(&[_]Feature{
24842484 .zve32f,
24852485 }),
24862486 };
2487 result[@intFromEnum(Feature.zvkb)] = .{
2487 result[@backingInt(Feature.zvkb)] = .{
24882488 .llvm_name = "zvkb",
24892489 .description = "'Zvkb' (Vector Bit-manipulation used in Cryptography)",
24902490 .dependencies = featureSet(&[_]Feature{
24912491 .zve32x,
24922492 }),
24932493 };
2494 result[@intFromEnum(Feature.zvkg)] = .{
2494 result[@backingInt(Feature.zvkg)] = .{
24952495 .llvm_name = "zvkg",
24962496 .description = "'Zvkg' (Vector GCM instructions for Cryptography)",
24972497 .dependencies = featureSet(&[_]Feature{
24982498 .zve32x,
24992499 }),
25002500 };
2501 result[@intFromEnum(Feature.zvkn)] = .{
2501 result[@backingInt(Feature.zvkn)] = .{
25022502 .llvm_name = "zvkn",
25032503 .description = "'Zvkn' (shorthand for 'Zvkned', 'Zvknhb', 'Zvkb', and 'Zvkt')",
25042504 .dependencies = featureSet(&[_]Feature{
......@@ -2508,7 +2508,7 @@ pub const all_features = blk: {
25082508 .zvkt,
25092509 }),
25102510 };
2511 result[@intFromEnum(Feature.zvknc)] = .{
2511 result[@backingInt(Feature.zvknc)] = .{
25122512 .llvm_name = "zvknc",
25132513 .description = "'Zvknc' (shorthand for 'Zvknc' and 'Zvbc')",
25142514 .dependencies = featureSet(&[_]Feature{
......@@ -2516,14 +2516,14 @@ pub const all_features = blk: {
25162516 .zvkn,
25172517 }),
25182518 };
2519 result[@intFromEnum(Feature.zvkned)] = .{
2519 result[@backingInt(Feature.zvkned)] = .{
25202520 .llvm_name = "zvkned",
25212521 .description = "'Zvkned' (Vector AES Encryption & Decryption (Single Round))",
25222522 .dependencies = featureSet(&[_]Feature{
25232523 .zve32x,
25242524 }),
25252525 };
2526 result[@intFromEnum(Feature.zvkng)] = .{
2526 result[@backingInt(Feature.zvkng)] = .{
25272527 .llvm_name = "zvkng",
25282528 .description = "'Zvkng' (shorthand for 'Zvkn' and 'Zvkg')",
25292529 .dependencies = featureSet(&[_]Feature{
......@@ -2531,21 +2531,21 @@ pub const all_features = blk: {
25312531 .zvkn,
25322532 }),
25332533 };
2534 result[@intFromEnum(Feature.zvknha)] = .{
2534 result[@backingInt(Feature.zvknha)] = .{
25352535 .llvm_name = "zvknha",
25362536 .description = "'Zvknha' (Vector SHA-2 (SHA-256 only))",
25372537 .dependencies = featureSet(&[_]Feature{
25382538 .zve32x,
25392539 }),
25402540 };
2541 result[@intFromEnum(Feature.zvknhb)] = .{
2541 result[@backingInt(Feature.zvknhb)] = .{
25422542 .llvm_name = "zvknhb",
25432543 .description = "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
25442544 .dependencies = featureSet(&[_]Feature{
25452545 .zve64x,
25462546 }),
25472547 };
2548 result[@intFromEnum(Feature.zvks)] = .{
2548 result[@backingInt(Feature.zvks)] = .{
25492549 .llvm_name = "zvks",
25502550 .description = "'Zvks' (shorthand for 'Zvksed', 'Zvksh', 'Zvkb', and 'Zvkt')",
25512551 .dependencies = featureSet(&[_]Feature{
......@@ -2555,7 +2555,7 @@ pub const all_features = blk: {
25552555 .zvkt,
25562556 }),
25572557 };
2558 result[@intFromEnum(Feature.zvksc)] = .{
2558 result[@backingInt(Feature.zvksc)] = .{
25592559 .llvm_name = "zvksc",
25602560 .description = "'Zvksc' (shorthand for 'Zvks' and 'Zvbc')",
25612561 .dependencies = featureSet(&[_]Feature{
......@@ -2563,14 +2563,14 @@ pub const all_features = blk: {
25632563 .zvks,
25642564 }),
25652565 };
2566 result[@intFromEnum(Feature.zvksed)] = .{
2566 result[@backingInt(Feature.zvksed)] = .{
25672567 .llvm_name = "zvksed",
25682568 .description = "'Zvksed' (SM4 Block Cipher Instructions)",
25692569 .dependencies = featureSet(&[_]Feature{
25702570 .zve32x,
25712571 }),
25722572 };
2573 result[@intFromEnum(Feature.zvksg)] = .{
2573 result[@backingInt(Feature.zvksg)] = .{
25742574 .llvm_name = "zvksg",
25752575 .description = "'Zvksg' (shorthand for 'Zvks' and 'Zvkg')",
25762576 .dependencies = featureSet(&[_]Feature{
......@@ -2578,94 +2578,94 @@ pub const all_features = blk: {
25782578 .zvks,
25792579 }),
25802580 };
2581 result[@intFromEnum(Feature.zvksh)] = .{
2581 result[@backingInt(Feature.zvksh)] = .{
25822582 .llvm_name = "zvksh",
25832583 .description = "'Zvksh' (SM3 Hash Function Instructions)",
25842584 .dependencies = featureSet(&[_]Feature{
25852585 .zve32x,
25862586 }),
25872587 };
2588 result[@intFromEnum(Feature.zvkt)] = .{
2588 result[@backingInt(Feature.zvkt)] = .{
25892589 .llvm_name = "zvkt",
25902590 .description = "'Zvkt' (Vector Data-Independent Execution Latency)",
25912591 .dependencies = featureSet(&[_]Feature{}),
25922592 };
2593 result[@intFromEnum(Feature.zvl1024b)] = .{
2593 result[@backingInt(Feature.zvl1024b)] = .{
25942594 .llvm_name = "zvl1024b",
25952595 .description = "'Zvl1024b' (Minimum Vector Length 1024)",
25962596 .dependencies = featureSet(&[_]Feature{
25972597 .zvl512b,
25982598 }),
25992599 };
2600 result[@intFromEnum(Feature.zvl128b)] = .{
2600 result[@backingInt(Feature.zvl128b)] = .{
26012601 .llvm_name = "zvl128b",
26022602 .description = "'Zvl128b' (Minimum Vector Length 128)",
26032603 .dependencies = featureSet(&[_]Feature{
26042604 .zvl64b,
26052605 }),
26062606 };
2607 result[@intFromEnum(Feature.zvl16384b)] = .{
2607 result[@backingInt(Feature.zvl16384b)] = .{
26082608 .llvm_name = "zvl16384b",
26092609 .description = "'Zvl16384b' (Minimum Vector Length 16384)",
26102610 .dependencies = featureSet(&[_]Feature{
26112611 .zvl8192b,
26122612 }),
26132613 };
2614 result[@intFromEnum(Feature.zvl2048b)] = .{
2614 result[@backingInt(Feature.zvl2048b)] = .{
26152615 .llvm_name = "zvl2048b",
26162616 .description = "'Zvl2048b' (Minimum Vector Length 2048)",
26172617 .dependencies = featureSet(&[_]Feature{
26182618 .zvl1024b,
26192619 }),
26202620 };
2621 result[@intFromEnum(Feature.zvl256b)] = .{
2621 result[@backingInt(Feature.zvl256b)] = .{
26222622 .llvm_name = "zvl256b",
26232623 .description = "'Zvl256b' (Minimum Vector Length 256)",
26242624 .dependencies = featureSet(&[_]Feature{
26252625 .zvl128b,
26262626 }),
26272627 };
2628 result[@intFromEnum(Feature.zvl32768b)] = .{
2628 result[@backingInt(Feature.zvl32768b)] = .{
26292629 .llvm_name = "zvl32768b",
26302630 .description = "'Zvl32768b' (Minimum Vector Length 32768)",
26312631 .dependencies = featureSet(&[_]Feature{
26322632 .zvl16384b,
26332633 }),
26342634 };
2635 result[@intFromEnum(Feature.zvl32b)] = .{
2635 result[@backingInt(Feature.zvl32b)] = .{
26362636 .llvm_name = "zvl32b",
26372637 .description = "'Zvl32b' (Minimum Vector Length 32)",
26382638 .dependencies = featureSet(&[_]Feature{}),
26392639 };
2640 result[@intFromEnum(Feature.zvl4096b)] = .{
2640 result[@backingInt(Feature.zvl4096b)] = .{
26412641 .llvm_name = "zvl4096b",
26422642 .description = "'Zvl4096b' (Minimum Vector Length 4096)",
26432643 .dependencies = featureSet(&[_]Feature{
26442644 .zvl2048b,
26452645 }),
26462646 };
2647 result[@intFromEnum(Feature.zvl512b)] = .{
2647 result[@backingInt(Feature.zvl512b)] = .{
26482648 .llvm_name = "zvl512b",
26492649 .description = "'Zvl512b' (Minimum Vector Length 512)",
26502650 .dependencies = featureSet(&[_]Feature{
26512651 .zvl256b,
26522652 }),
26532653 };
2654 result[@intFromEnum(Feature.zvl64b)] = .{
2654 result[@backingInt(Feature.zvl64b)] = .{
26552655 .llvm_name = "zvl64b",
26562656 .description = "'Zvl64b' (Minimum Vector Length 64)",
26572657 .dependencies = featureSet(&[_]Feature{
26582658 .zvl32b,
26592659 }),
26602660 };
2661 result[@intFromEnum(Feature.zvl65536b)] = .{
2661 result[@backingInt(Feature.zvl65536b)] = .{
26622662 .llvm_name = "zvl65536b",
26632663 .description = "'Zvl65536b' (Minimum Vector Length 65536)",
26642664 .dependencies = featureSet(&[_]Feature{
26652665 .zvl32768b,
26662666 }),
26672667 };
2668 result[@intFromEnum(Feature.zvl8192b)] = .{
2668 result[@backingInt(Feature.zvl8192b)] = .{
26692669 .llvm_name = "zvl8192b",
26702670 .description = "'Zvl8192b' (Minimum Vector Length 8192)",
26712671 .dependencies = featureSet(&[_]Feature{
lib/std/Target/s390x.zig+49-49
......@@ -65,247 +65,247 @@ pub const all_features = blk: {
6565 const len = @typeInfo(Feature).@"enum".field_names.len;
6666 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
6767 var result: [len]CpuFeature = undefined;
68 result[@intFromEnum(Feature.backchain)] = .{
68 result[@backingInt(Feature.backchain)] = .{
6969 .llvm_name = "backchain",
7070 .description = "Store the address of the caller's frame into the callee's stack frame",
7171 .dependencies = featureSet(&[_]Feature{}),
7272 };
73 result[@intFromEnum(Feature.bear_enhancement)] = .{
73 result[@backingInt(Feature.bear_enhancement)] = .{
7474 .llvm_name = "bear-enhancement",
7575 .description = "Assume that the BEAR-enhancement facility is installed",
7676 .dependencies = featureSet(&[_]Feature{}),
7777 };
78 result[@intFromEnum(Feature.concurrent_functions)] = .{
78 result[@backingInt(Feature.concurrent_functions)] = .{
7979 .llvm_name = "concurrent-functions",
8080 .description = "Assume that the concurrent-functions facility is installed",
8181 .dependencies = featureSet(&[_]Feature{}),
8282 };
83 result[@intFromEnum(Feature.deflate_conversion)] = .{
83 result[@backingInt(Feature.deflate_conversion)] = .{
8484 .llvm_name = "deflate-conversion",
8585 .description = "Assume that the deflate-conversion facility is installed",
8686 .dependencies = featureSet(&[_]Feature{}),
8787 };
88 result[@intFromEnum(Feature.dfp_packed_conversion)] = .{
88 result[@backingInt(Feature.dfp_packed_conversion)] = .{
8989 .llvm_name = "dfp-packed-conversion",
9090 .description = "Assume that the DFP packed-conversion facility is installed",
9191 .dependencies = featureSet(&[_]Feature{}),
9292 };
93 result[@intFromEnum(Feature.dfp_zoned_conversion)] = .{
93 result[@backingInt(Feature.dfp_zoned_conversion)] = .{
9494 .llvm_name = "dfp-zoned-conversion",
9595 .description = "Assume that the DFP zoned-conversion facility is installed",
9696 .dependencies = featureSet(&[_]Feature{}),
9797 };
98 result[@intFromEnum(Feature.distinct_ops)] = .{
98 result[@backingInt(Feature.distinct_ops)] = .{
9999 .llvm_name = "distinct-ops",
100100 .description = "Assume that the distinct-operands facility is installed",
101101 .dependencies = featureSet(&[_]Feature{}),
102102 };
103 result[@intFromEnum(Feature.enhanced_dat_2)] = .{
103 result[@backingInt(Feature.enhanced_dat_2)] = .{
104104 .llvm_name = "enhanced-dat-2",
105105 .description = "Assume that the enhanced-DAT facility 2 is installed",
106106 .dependencies = featureSet(&[_]Feature{}),
107107 };
108 result[@intFromEnum(Feature.enhanced_sort)] = .{
108 result[@backingInt(Feature.enhanced_sort)] = .{
109109 .llvm_name = "enhanced-sort",
110110 .description = "Assume that the enhanced-sort facility is installed",
111111 .dependencies = featureSet(&[_]Feature{}),
112112 };
113 result[@intFromEnum(Feature.execution_hint)] = .{
113 result[@backingInt(Feature.execution_hint)] = .{
114114 .llvm_name = "execution-hint",
115115 .description = "Assume that the execution-hint facility is installed",
116116 .dependencies = featureSet(&[_]Feature{}),
117117 };
118 result[@intFromEnum(Feature.fast_serialization)] = .{
118 result[@backingInt(Feature.fast_serialization)] = .{
119119 .llvm_name = "fast-serialization",
120120 .description = "Assume that the fast-serialization facility is installed",
121121 .dependencies = featureSet(&[_]Feature{}),
122122 };
123 result[@intFromEnum(Feature.fp_extension)] = .{
123 result[@backingInt(Feature.fp_extension)] = .{
124124 .llvm_name = "fp-extension",
125125 .description = "Assume that the floating-point extension facility is installed",
126126 .dependencies = featureSet(&[_]Feature{}),
127127 };
128 result[@intFromEnum(Feature.guarded_storage)] = .{
128 result[@backingInt(Feature.guarded_storage)] = .{
129129 .llvm_name = "guarded-storage",
130130 .description = "Assume that the guarded-storage facility is installed",
131131 .dependencies = featureSet(&[_]Feature{}),
132132 };
133 result[@intFromEnum(Feature.high_word)] = .{
133 result[@backingInt(Feature.high_word)] = .{
134134 .llvm_name = "high-word",
135135 .description = "Assume that the high-word facility is installed",
136136 .dependencies = featureSet(&[_]Feature{}),
137137 };
138 result[@intFromEnum(Feature.insert_reference_bits_multiple)] = .{
138 result[@backingInt(Feature.insert_reference_bits_multiple)] = .{
139139 .llvm_name = "insert-reference-bits-multiple",
140140 .description = "Assume that the insert-reference-bits-multiple facility is installed",
141141 .dependencies = featureSet(&[_]Feature{}),
142142 };
143 result[@intFromEnum(Feature.interlocked_access1)] = .{
143 result[@backingInt(Feature.interlocked_access1)] = .{
144144 .llvm_name = "interlocked-access1",
145145 .description = "Assume that interlocked-access facility 1 is installed",
146146 .dependencies = featureSet(&[_]Feature{}),
147147 };
148 result[@intFromEnum(Feature.load_and_trap)] = .{
148 result[@backingInt(Feature.load_and_trap)] = .{
149149 .llvm_name = "load-and-trap",
150150 .description = "Assume that the load-and-trap facility is installed",
151151 .dependencies = featureSet(&[_]Feature{}),
152152 };
153 result[@intFromEnum(Feature.load_and_zero_rightmost_byte)] = .{
153 result[@backingInt(Feature.load_and_zero_rightmost_byte)] = .{
154154 .llvm_name = "load-and-zero-rightmost-byte",
155155 .description = "Assume that the load-and-zero-rightmost-byte facility is installed",
156156 .dependencies = featureSet(&[_]Feature{}),
157157 };
158 result[@intFromEnum(Feature.load_store_on_cond)] = .{
158 result[@backingInt(Feature.load_store_on_cond)] = .{
159159 .llvm_name = "load-store-on-cond",
160160 .description = "Assume that the load/store-on-condition facility is installed",
161161 .dependencies = featureSet(&[_]Feature{}),
162162 };
163 result[@intFromEnum(Feature.load_store_on_cond_2)] = .{
163 result[@backingInt(Feature.load_store_on_cond_2)] = .{
164164 .llvm_name = "load-store-on-cond-2",
165165 .description = "Assume that the load/store-on-condition facility 2 is installed",
166166 .dependencies = featureSet(&[_]Feature{}),
167167 };
168 result[@intFromEnum(Feature.message_security_assist_extension12)] = .{
168 result[@backingInt(Feature.message_security_assist_extension12)] = .{
169169 .llvm_name = "message-security-assist-extension12",
170170 .description = "Assume that the message-security-assist extension facility 12 is installed",
171171 .dependencies = featureSet(&[_]Feature{}),
172172 };
173 result[@intFromEnum(Feature.message_security_assist_extension3)] = .{
173 result[@backingInt(Feature.message_security_assist_extension3)] = .{
174174 .llvm_name = "message-security-assist-extension3",
175175 .description = "Assume that the message-security-assist extension facility 3 is installed",
176176 .dependencies = featureSet(&[_]Feature{}),
177177 };
178 result[@intFromEnum(Feature.message_security_assist_extension4)] = .{
178 result[@backingInt(Feature.message_security_assist_extension4)] = .{
179179 .llvm_name = "message-security-assist-extension4",
180180 .description = "Assume that the message-security-assist extension facility 4 is installed",
181181 .dependencies = featureSet(&[_]Feature{}),
182182 };
183 result[@intFromEnum(Feature.message_security_assist_extension5)] = .{
183 result[@backingInt(Feature.message_security_assist_extension5)] = .{
184184 .llvm_name = "message-security-assist-extension5",
185185 .description = "Assume that the message-security-assist extension facility 5 is installed",
186186 .dependencies = featureSet(&[_]Feature{}),
187187 };
188 result[@intFromEnum(Feature.message_security_assist_extension7)] = .{
188 result[@backingInt(Feature.message_security_assist_extension7)] = .{
189189 .llvm_name = "message-security-assist-extension7",
190190 .description = "Assume that the message-security-assist extension facility 7 is installed",
191191 .dependencies = featureSet(&[_]Feature{}),
192192 };
193 result[@intFromEnum(Feature.message_security_assist_extension8)] = .{
193 result[@backingInt(Feature.message_security_assist_extension8)] = .{
194194 .llvm_name = "message-security-assist-extension8",
195195 .description = "Assume that the message-security-assist extension facility 8 is installed",
196196 .dependencies = featureSet(&[_]Feature{}),
197197 };
198 result[@intFromEnum(Feature.message_security_assist_extension9)] = .{
198 result[@backingInt(Feature.message_security_assist_extension9)] = .{
199199 .llvm_name = "message-security-assist-extension9",
200200 .description = "Assume that the message-security-assist extension facility 9 is installed",
201201 .dependencies = featureSet(&[_]Feature{}),
202202 };
203 result[@intFromEnum(Feature.miscellaneous_extensions)] = .{
203 result[@backingInt(Feature.miscellaneous_extensions)] = .{
204204 .llvm_name = "miscellaneous-extensions",
205205 .description = "Assume that the miscellaneous-extensions facility is installed",
206206 .dependencies = featureSet(&[_]Feature{}),
207207 };
208 result[@intFromEnum(Feature.miscellaneous_extensions_2)] = .{
208 result[@backingInt(Feature.miscellaneous_extensions_2)] = .{
209209 .llvm_name = "miscellaneous-extensions-2",
210210 .description = "Assume that the miscellaneous-extensions facility 2 is installed",
211211 .dependencies = featureSet(&[_]Feature{}),
212212 };
213 result[@intFromEnum(Feature.miscellaneous_extensions_3)] = .{
213 result[@backingInt(Feature.miscellaneous_extensions_3)] = .{
214214 .llvm_name = "miscellaneous-extensions-3",
215215 .description = "Assume that the miscellaneous-extensions facility 3 is installed",
216216 .dependencies = featureSet(&[_]Feature{}),
217217 };
218 result[@intFromEnum(Feature.miscellaneous_extensions_4)] = .{
218 result[@backingInt(Feature.miscellaneous_extensions_4)] = .{
219219 .llvm_name = "miscellaneous-extensions-4",
220220 .description = "Assume that the miscellaneous-extensions facility 4 is installed",
221221 .dependencies = featureSet(&[_]Feature{}),
222222 };
223 result[@intFromEnum(Feature.nnp_assist)] = .{
223 result[@backingInt(Feature.nnp_assist)] = .{
224224 .llvm_name = "nnp-assist",
225225 .description = "Assume that the NNP-assist facility is installed",
226226 .dependencies = featureSet(&[_]Feature{}),
227227 };
228 result[@intFromEnum(Feature.population_count)] = .{
228 result[@backingInt(Feature.population_count)] = .{
229229 .llvm_name = "population-count",
230230 .description = "Assume that the population-count facility is installed",
231231 .dependencies = featureSet(&[_]Feature{}),
232232 };
233 result[@intFromEnum(Feature.processor_activity_instrumentation)] = .{
233 result[@backingInt(Feature.processor_activity_instrumentation)] = .{
234234 .llvm_name = "processor-activity-instrumentation",
235235 .description = "Assume that the processor-activity-instrumentation facility is installed",
236236 .dependencies = featureSet(&[_]Feature{}),
237237 };
238 result[@intFromEnum(Feature.processor_assist)] = .{
238 result[@backingInt(Feature.processor_assist)] = .{
239239 .llvm_name = "processor-assist",
240240 .description = "Assume that the processor-assist facility is installed",
241241 .dependencies = featureSet(&[_]Feature{}),
242242 };
243 result[@intFromEnum(Feature.reset_dat_protection)] = .{
243 result[@backingInt(Feature.reset_dat_protection)] = .{
244244 .llvm_name = "reset-dat-protection",
245245 .description = "Assume that the reset-DAT-protection facility is installed",
246246 .dependencies = featureSet(&[_]Feature{}),
247247 };
248 result[@intFromEnum(Feature.reset_reference_bits_multiple)] = .{
248 result[@backingInt(Feature.reset_reference_bits_multiple)] = .{
249249 .llvm_name = "reset-reference-bits-multiple",
250250 .description = "Assume that the reset-reference-bits-multiple facility is installed",
251251 .dependencies = featureSet(&[_]Feature{}),
252252 };
253 result[@intFromEnum(Feature.soft_float)] = .{
253 result[@backingInt(Feature.soft_float)] = .{
254254 .llvm_name = "soft-float",
255255 .description = "Use software emulation for floating point",
256256 .dependencies = featureSet(&[_]Feature{}),
257257 };
258 result[@intFromEnum(Feature.test_pending_external_interruption)] = .{
258 result[@backingInt(Feature.test_pending_external_interruption)] = .{
259259 .llvm_name = "test-pending-external-interruption",
260260 .description = "Assume that the test-pending-external-interruption facility is installed",
261261 .dependencies = featureSet(&[_]Feature{}),
262262 };
263 result[@intFromEnum(Feature.transactional_execution)] = .{
263 result[@backingInt(Feature.transactional_execution)] = .{
264264 .llvm_name = "transactional-execution",
265265 .description = "Assume that the transactional-execution facility is installed",
266266 .dependencies = featureSet(&[_]Feature{}),
267267 };
268 result[@intFromEnum(Feature.unaligned_symbols)] = .{
268 result[@backingInt(Feature.unaligned_symbols)] = .{
269269 .llvm_name = "unaligned-symbols",
270270 .description = "Don't apply the ABI minimum alignment to external symbols.",
271271 .dependencies = featureSet(&[_]Feature{}),
272272 };
273 result[@intFromEnum(Feature.vector)] = .{
273 result[@backingInt(Feature.vector)] = .{
274274 .llvm_name = "vector",
275275 .description = "Assume that the vectory facility is installed",
276276 .dependencies = featureSet(&[_]Feature{}),
277277 };
278 result[@intFromEnum(Feature.vector_enhancements_1)] = .{
278 result[@backingInt(Feature.vector_enhancements_1)] = .{
279279 .llvm_name = "vector-enhancements-1",
280280 .description = "Assume that the vector enhancements facility 1 is installed",
281281 .dependencies = featureSet(&[_]Feature{}),
282282 };
283 result[@intFromEnum(Feature.vector_enhancements_2)] = .{
283 result[@backingInt(Feature.vector_enhancements_2)] = .{
284284 .llvm_name = "vector-enhancements-2",
285285 .description = "Assume that the vector enhancements facility 2 is installed",
286286 .dependencies = featureSet(&[_]Feature{}),
287287 };
288 result[@intFromEnum(Feature.vector_enhancements_3)] = .{
288 result[@backingInt(Feature.vector_enhancements_3)] = .{
289289 .llvm_name = "vector-enhancements-3",
290290 .description = "Assume that the vector enhancements facility 3 is installed",
291291 .dependencies = featureSet(&[_]Feature{}),
292292 };
293 result[@intFromEnum(Feature.vector_packed_decimal)] = .{
293 result[@backingInt(Feature.vector_packed_decimal)] = .{
294294 .llvm_name = "vector-packed-decimal",
295295 .description = "Assume that the vector packed decimal facility is installed",
296296 .dependencies = featureSet(&[_]Feature{}),
297297 };
298 result[@intFromEnum(Feature.vector_packed_decimal_enhancement)] = .{
298 result[@backingInt(Feature.vector_packed_decimal_enhancement)] = .{
299299 .llvm_name = "vector-packed-decimal-enhancement",
300300 .description = "Assume that the vector packed decimal enhancement facility is installed",
301301 .dependencies = featureSet(&[_]Feature{}),
302302 };
303 result[@intFromEnum(Feature.vector_packed_decimal_enhancement_2)] = .{
303 result[@backingInt(Feature.vector_packed_decimal_enhancement_2)] = .{
304304 .llvm_name = "vector-packed-decimal-enhancement-2",
305305 .description = "Assume that the vector packed decimal enhancement facility 2 is installed",
306306 .dependencies = featureSet(&[_]Feature{}),
307307 };
308 result[@intFromEnum(Feature.vector_packed_decimal_enhancement_3)] = .{
308 result[@backingInt(Feature.vector_packed_decimal_enhancement_3)] = .{
309309 .llvm_name = "vector-packed-decimal-enhancement-3",
310310 .description = "Assume that the vector packed decimal enhancement facility 3 is installed",
311311 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/sparc.zig+59-59
......@@ -75,111 +75,111 @@ pub const all_features = blk: {
7575 const len = @typeInfo(Feature).@"enum".field_names.len;
7676 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
7777 var result: [len]CpuFeature = undefined;
78 result[@intFromEnum(Feature.@"64bit")] = .{
78 result[@backingInt(Feature.@"64bit")] = .{
7979 .llvm_name = "64bit",
8080 .description = "Enable 64-bit mode",
8181 .dependencies = featureSet(&[_]Feature{
8282 .v9,
8383 }),
8484 };
85 result[@intFromEnum(Feature.crypto)] = .{
85 result[@backingInt(Feature.crypto)] = .{
8686 .llvm_name = "crypto",
8787 .description = "Enable cryptographic extensions",
8888 .dependencies = featureSet(&[_]Feature{
8989 .osa2011,
9090 }),
9191 };
92 result[@intFromEnum(Feature.deprecated_v8)] = .{
92 result[@backingInt(Feature.deprecated_v8)] = .{
9393 .llvm_name = "deprecated-v8",
9494 .description = "Enable deprecated V8 instructions in V9 mode",
9595 .dependencies = featureSet(&[_]Feature{}),
9696 };
97 result[@intFromEnum(Feature.detectroundchange)] = .{
97 result[@backingInt(Feature.detectroundchange)] = .{
9898 .llvm_name = "detectroundchange",
9999 .description = "LEON3 erratum detection: Detects any rounding mode change request: use only the round-to-nearest rounding mode",
100100 .dependencies = featureSet(&[_]Feature{}),
101101 };
102 result[@intFromEnum(Feature.fix_tn0009)] = .{
102 result[@backingInt(Feature.fix_tn0009)] = .{
103103 .llvm_name = "fix-tn0009",
104104 .description = "Enable workaround for errata described in GRLIB-TN-0009",
105105 .dependencies = featureSet(&[_]Feature{}),
106106 };
107 result[@intFromEnum(Feature.fix_tn0010)] = .{
107 result[@backingInt(Feature.fix_tn0010)] = .{
108108 .llvm_name = "fix-tn0010",
109109 .description = "Enable workaround for errata described in GRLIB-TN-0010",
110110 .dependencies = featureSet(&[_]Feature{}),
111111 };
112 result[@intFromEnum(Feature.fix_tn0011)] = .{
112 result[@backingInt(Feature.fix_tn0011)] = .{
113113 .llvm_name = "fix-tn0011",
114114 .description = "Enable workaround for errata described in GRLIB-TN-0011",
115115 .dependencies = featureSet(&[_]Feature{}),
116116 };
117 result[@intFromEnum(Feature.fix_tn0012)] = .{
117 result[@backingInt(Feature.fix_tn0012)] = .{
118118 .llvm_name = "fix-tn0012",
119119 .description = "Enable workaround for errata described in GRLIB-TN-0012",
120120 .dependencies = featureSet(&[_]Feature{}),
121121 };
122 result[@intFromEnum(Feature.fix_tn0013)] = .{
122 result[@backingInt(Feature.fix_tn0013)] = .{
123123 .llvm_name = "fix-tn0013",
124124 .description = "Enable workaround for errata described in GRLIB-TN-0013",
125125 .dependencies = featureSet(&[_]Feature{}),
126126 };
127 result[@intFromEnum(Feature.fixallfdivsqrt)] = .{
127 result[@backingInt(Feature.fixallfdivsqrt)] = .{
128128 .llvm_name = "fixallfdivsqrt",
129129 .description = "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store",
130130 .dependencies = featureSet(&[_]Feature{}),
131131 };
132 result[@intFromEnum(Feature.hard_quad_float)] = .{
132 result[@backingInt(Feature.hard_quad_float)] = .{
133133 .llvm_name = "hard-quad-float",
134134 .description = "Enable quad-word floating point instructions",
135135 .dependencies = featureSet(&[_]Feature{}),
136136 };
137 result[@intFromEnum(Feature.hasleoncasa)] = .{
137 result[@backingInt(Feature.hasleoncasa)] = .{
138138 .llvm_name = "hasleoncasa",
139139 .description = "Enable CASA instruction for LEON3 and LEON4 processors",
140140 .dependencies = featureSet(&[_]Feature{}),
141141 };
142 result[@intFromEnum(Feature.hasumacsmac)] = .{
142 result[@backingInt(Feature.hasumacsmac)] = .{
143143 .llvm_name = "hasumacsmac",
144144 .description = "Enable UMAC and SMAC for LEON3 and LEON4 processors",
145145 .dependencies = featureSet(&[_]Feature{}),
146146 };
147 result[@intFromEnum(Feature.insertnopload)] = .{
147 result[@backingInt(Feature.insertnopload)] = .{
148148 .llvm_name = "insertnopload",
149149 .description = "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction",
150150 .dependencies = featureSet(&[_]Feature{}),
151151 };
152 result[@intFromEnum(Feature.leon)] = .{
152 result[@backingInt(Feature.leon)] = .{
153153 .llvm_name = "leon",
154154 .description = "Enable LEON extensions",
155155 .dependencies = featureSet(&[_]Feature{}),
156156 };
157 result[@intFromEnum(Feature.leoncyclecounter)] = .{
157 result[@backingInt(Feature.leoncyclecounter)] = .{
158158 .llvm_name = "leoncyclecounter",
159159 .description = "Use the Leon cycle counter register",
160160 .dependencies = featureSet(&[_]Feature{}),
161161 };
162 result[@intFromEnum(Feature.leonpwrpsr)] = .{
162 result[@backingInt(Feature.leonpwrpsr)] = .{
163163 .llvm_name = "leonpwrpsr",
164164 .description = "Enable the PWRPSR instruction",
165165 .dependencies = featureSet(&[_]Feature{}),
166166 };
167 result[@intFromEnum(Feature.no_fmuls)] = .{
167 result[@backingInt(Feature.no_fmuls)] = .{
168168 .llvm_name = "no-fmuls",
169169 .description = "Disable the fmuls instruction.",
170170 .dependencies = featureSet(&[_]Feature{}),
171171 };
172 result[@intFromEnum(Feature.no_fsmuld)] = .{
172 result[@backingInt(Feature.no_fsmuld)] = .{
173173 .llvm_name = "no-fsmuld",
174174 .description = "Disable the fsmuld instruction.",
175175 .dependencies = featureSet(&[_]Feature{}),
176176 };
177 result[@intFromEnum(Feature.no_predictor)] = .{
177 result[@backingInt(Feature.no_predictor)] = .{
178178 .llvm_name = "no-predictor",
179179 .description = "Processor has no branch predictor, branches stall execution",
180180 .dependencies = featureSet(&[_]Feature{}),
181181 };
182 result[@intFromEnum(Feature.osa2011)] = .{
182 result[@backingInt(Feature.osa2011)] = .{
183183 .llvm_name = "osa2011",
184184 .description = "Enable Oracle SPARC Architecture 2011 extensions",
185185 .dependencies = featureSet(&[_]Feature{
......@@ -188,164 +188,164 @@ pub const all_features = blk: {
188188 .vis3,
189189 }),
190190 };
191 result[@intFromEnum(Feature.popc)] = .{
191 result[@backingInt(Feature.popc)] = .{
192192 .llvm_name = "popc",
193193 .description = "Use the popc (population count) instruction",
194194 .dependencies = featureSet(&[_]Feature{}),
195195 };
196 result[@intFromEnum(Feature.reserve_g1)] = .{
196 result[@backingInt(Feature.reserve_g1)] = .{
197197 .llvm_name = "reserve-g1",
198198 .description = "Reserve G1, making it unavailable as a GPR",
199199 .dependencies = featureSet(&[_]Feature{}),
200200 };
201 result[@intFromEnum(Feature.reserve_g2)] = .{
201 result[@backingInt(Feature.reserve_g2)] = .{
202202 .llvm_name = "reserve-g2",
203203 .description = "Reserve G2, making it unavailable as a GPR",
204204 .dependencies = featureSet(&[_]Feature{}),
205205 };
206 result[@intFromEnum(Feature.reserve_g3)] = .{
206 result[@backingInt(Feature.reserve_g3)] = .{
207207 .llvm_name = "reserve-g3",
208208 .description = "Reserve G3, making it unavailable as a GPR",
209209 .dependencies = featureSet(&[_]Feature{}),
210210 };
211 result[@intFromEnum(Feature.reserve_g4)] = .{
211 result[@backingInt(Feature.reserve_g4)] = .{
212212 .llvm_name = "reserve-g4",
213213 .description = "Reserve G4, making it unavailable as a GPR",
214214 .dependencies = featureSet(&[_]Feature{}),
215215 };
216 result[@intFromEnum(Feature.reserve_g5)] = .{
216 result[@backingInt(Feature.reserve_g5)] = .{
217217 .llvm_name = "reserve-g5",
218218 .description = "Reserve G5, making it unavailable as a GPR",
219219 .dependencies = featureSet(&[_]Feature{}),
220220 };
221 result[@intFromEnum(Feature.reserve_g6)] = .{
221 result[@backingInt(Feature.reserve_g6)] = .{
222222 .llvm_name = "reserve-g6",
223223 .description = "Reserve G6, making it unavailable as a GPR",
224224 .dependencies = featureSet(&[_]Feature{}),
225225 };
226 result[@intFromEnum(Feature.reserve_g7)] = .{
226 result[@backingInt(Feature.reserve_g7)] = .{
227227 .llvm_name = "reserve-g7",
228228 .description = "Reserve G7, making it unavailable as a GPR",
229229 .dependencies = featureSet(&[_]Feature{}),
230230 };
231 result[@intFromEnum(Feature.reserve_i0)] = .{
231 result[@backingInt(Feature.reserve_i0)] = .{
232232 .llvm_name = "reserve-i0",
233233 .description = "Reserve I0, making it unavailable as a GPR",
234234 .dependencies = featureSet(&[_]Feature{}),
235235 };
236 result[@intFromEnum(Feature.reserve_i1)] = .{
236 result[@backingInt(Feature.reserve_i1)] = .{
237237 .llvm_name = "reserve-i1",
238238 .description = "Reserve I1, making it unavailable as a GPR",
239239 .dependencies = featureSet(&[_]Feature{}),
240240 };
241 result[@intFromEnum(Feature.reserve_i2)] = .{
241 result[@backingInt(Feature.reserve_i2)] = .{
242242 .llvm_name = "reserve-i2",
243243 .description = "Reserve I2, making it unavailable as a GPR",
244244 .dependencies = featureSet(&[_]Feature{}),
245245 };
246 result[@intFromEnum(Feature.reserve_i3)] = .{
246 result[@backingInt(Feature.reserve_i3)] = .{
247247 .llvm_name = "reserve-i3",
248248 .description = "Reserve I3, making it unavailable as a GPR",
249249 .dependencies = featureSet(&[_]Feature{}),
250250 };
251 result[@intFromEnum(Feature.reserve_i4)] = .{
251 result[@backingInt(Feature.reserve_i4)] = .{
252252 .llvm_name = "reserve-i4",
253253 .description = "Reserve I4, making it unavailable as a GPR",
254254 .dependencies = featureSet(&[_]Feature{}),
255255 };
256 result[@intFromEnum(Feature.reserve_i5)] = .{
256 result[@backingInt(Feature.reserve_i5)] = .{
257257 .llvm_name = "reserve-i5",
258258 .description = "Reserve I5, making it unavailable as a GPR",
259259 .dependencies = featureSet(&[_]Feature{}),
260260 };
261 result[@intFromEnum(Feature.reserve_l0)] = .{
261 result[@backingInt(Feature.reserve_l0)] = .{
262262 .llvm_name = "reserve-l0",
263263 .description = "Reserve L0, making it unavailable as a GPR",
264264 .dependencies = featureSet(&[_]Feature{}),
265265 };
266 result[@intFromEnum(Feature.reserve_l1)] = .{
266 result[@backingInt(Feature.reserve_l1)] = .{
267267 .llvm_name = "reserve-l1",
268268 .description = "Reserve L1, making it unavailable as a GPR",
269269 .dependencies = featureSet(&[_]Feature{}),
270270 };
271 result[@intFromEnum(Feature.reserve_l2)] = .{
271 result[@backingInt(Feature.reserve_l2)] = .{
272272 .llvm_name = "reserve-l2",
273273 .description = "Reserve L2, making it unavailable as a GPR",
274274 .dependencies = featureSet(&[_]Feature{}),
275275 };
276 result[@intFromEnum(Feature.reserve_l3)] = .{
276 result[@backingInt(Feature.reserve_l3)] = .{
277277 .llvm_name = "reserve-l3",
278278 .description = "Reserve L3, making it unavailable as a GPR",
279279 .dependencies = featureSet(&[_]Feature{}),
280280 };
281 result[@intFromEnum(Feature.reserve_l4)] = .{
281 result[@backingInt(Feature.reserve_l4)] = .{
282282 .llvm_name = "reserve-l4",
283283 .description = "Reserve L4, making it unavailable as a GPR",
284284 .dependencies = featureSet(&[_]Feature{}),
285285 };
286 result[@intFromEnum(Feature.reserve_l5)] = .{
286 result[@backingInt(Feature.reserve_l5)] = .{
287287 .llvm_name = "reserve-l5",
288288 .description = "Reserve L5, making it unavailable as a GPR",
289289 .dependencies = featureSet(&[_]Feature{}),
290290 };
291 result[@intFromEnum(Feature.reserve_l6)] = .{
291 result[@backingInt(Feature.reserve_l6)] = .{
292292 .llvm_name = "reserve-l6",
293293 .description = "Reserve L6, making it unavailable as a GPR",
294294 .dependencies = featureSet(&[_]Feature{}),
295295 };
296 result[@intFromEnum(Feature.reserve_l7)] = .{
296 result[@backingInt(Feature.reserve_l7)] = .{
297297 .llvm_name = "reserve-l7",
298298 .description = "Reserve L7, making it unavailable as a GPR",
299299 .dependencies = featureSet(&[_]Feature{}),
300300 };
301 result[@intFromEnum(Feature.reserve_o0)] = .{
301 result[@backingInt(Feature.reserve_o0)] = .{
302302 .llvm_name = "reserve-o0",
303303 .description = "Reserve O0, making it unavailable as a GPR",
304304 .dependencies = featureSet(&[_]Feature{}),
305305 };
306 result[@intFromEnum(Feature.reserve_o1)] = .{
306 result[@backingInt(Feature.reserve_o1)] = .{
307307 .llvm_name = "reserve-o1",
308308 .description = "Reserve O1, making it unavailable as a GPR",
309309 .dependencies = featureSet(&[_]Feature{}),
310310 };
311 result[@intFromEnum(Feature.reserve_o2)] = .{
311 result[@backingInt(Feature.reserve_o2)] = .{
312312 .llvm_name = "reserve-o2",
313313 .description = "Reserve O2, making it unavailable as a GPR",
314314 .dependencies = featureSet(&[_]Feature{}),
315315 };
316 result[@intFromEnum(Feature.reserve_o3)] = .{
316 result[@backingInt(Feature.reserve_o3)] = .{
317317 .llvm_name = "reserve-o3",
318318 .description = "Reserve O3, making it unavailable as a GPR",
319319 .dependencies = featureSet(&[_]Feature{}),
320320 };
321 result[@intFromEnum(Feature.reserve_o4)] = .{
321 result[@backingInt(Feature.reserve_o4)] = .{
322322 .llvm_name = "reserve-o4",
323323 .description = "Reserve O4, making it unavailable as a GPR",
324324 .dependencies = featureSet(&[_]Feature{}),
325325 };
326 result[@intFromEnum(Feature.reserve_o5)] = .{
326 result[@backingInt(Feature.reserve_o5)] = .{
327327 .llvm_name = "reserve-o5",
328328 .description = "Reserve O5, making it unavailable as a GPR",
329329 .dependencies = featureSet(&[_]Feature{}),
330330 };
331 result[@intFromEnum(Feature.slow_rdpc)] = .{
331 result[@backingInt(Feature.slow_rdpc)] = .{
332332 .llvm_name = "slow-rdpc",
333333 .description = "rd %pc, %XX is slow",
334334 .dependencies = featureSet(&[_]Feature{
335335 .v9,
336336 }),
337337 };
338 result[@intFromEnum(Feature.soft_float)] = .{
338 result[@backingInt(Feature.soft_float)] = .{
339339 .llvm_name = "soft-float",
340340 .description = "Use software emulation for floating point",
341341 .dependencies = featureSet(&[_]Feature{}),
342342 };
343 result[@intFromEnum(Feature.soft_mul_div)] = .{
343 result[@backingInt(Feature.soft_mul_div)] = .{
344344 .llvm_name = "soft-mul-div",
345345 .description = "Use software emulation for integer multiply and divide",
346346 .dependencies = featureSet(&[_]Feature{}),
347347 };
348 result[@intFromEnum(Feature.ua2005)] = .{
348 result[@backingInt(Feature.ua2005)] = .{
349349 .llvm_name = "ua2005",
350350 .description = "Enable UltraSPARC Architecture 2005 extensions",
351351 .dependencies = featureSet(&[_]Feature{
......@@ -353,7 +353,7 @@ pub const all_features = blk: {
353353 .vis2,
354354 }),
355355 };
356 result[@intFromEnum(Feature.ua2007)] = .{
356 result[@backingInt(Feature.ua2007)] = .{
357357 .llvm_name = "ua2007",
358358 .description = "Enable UltraSPARC Architecture 2007 extensions",
359359 .dependencies = featureSet(&[_]Feature{
......@@ -361,31 +361,31 @@ pub const all_features = blk: {
361361 .vis2,
362362 }),
363363 };
364 result[@intFromEnum(Feature.v8plus)] = .{
364 result[@backingInt(Feature.v8plus)] = .{
365365 .llvm_name = "v8plus",
366366 .description = "Enable V8+ mode, allowing use of 64-bit V9 instructions in 32-bit code",
367367 .dependencies = featureSet(&[_]Feature{}),
368368 };
369 result[@intFromEnum(Feature.v9)] = .{
369 result[@backingInt(Feature.v9)] = .{
370370 .llvm_name = "v9",
371371 .description = "Enable SPARC-V9 instructions",
372372 .dependencies = featureSet(&[_]Feature{}),
373373 };
374 result[@intFromEnum(Feature.vis)] = .{
374 result[@backingInt(Feature.vis)] = .{
375375 .llvm_name = "vis",
376376 .description = "Enable UltraSPARC Visual Instruction Set extensions",
377377 .dependencies = featureSet(&[_]Feature{
378378 .v9,
379379 }),
380380 };
381 result[@intFromEnum(Feature.vis2)] = .{
381 result[@backingInt(Feature.vis2)] = .{
382382 .llvm_name = "vis2",
383383 .description = "Enable Visual Instruction Set extensions II",
384384 .dependencies = featureSet(&[_]Feature{
385385 .v9,
386386 }),
387387 };
388 result[@intFromEnum(Feature.vis3)] = .{
388 result[@backingInt(Feature.vis3)] = .{
389389 .llvm_name = "vis3",
390390 .description = "Enable Visual Instruction Set extensions III",
391391 .dependencies = featureSet(&[_]Feature{
lib/std/Target/spirv.zig+228-228
......@@ -245,7 +245,7 @@ pub const all_features = blk: {
245245 const len = @typeInfo(Feature).@"enum".field_names.len;
246246 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
247247 var result: [len]CpuFeature = undefined;
248 result[@intFromEnum(Feature.abort_khr)] = .{
248 result[@backingInt(Feature.abort_khr)] = .{
249249 .llvm_name = null,
250250 .description = "Enable abort_khr capability",
251251 .dependencies = featureSet(&[_]Feature{
......@@ -253,7 +253,7 @@ pub const all_features = blk: {
253253 .v1_0,
254254 }),
255255 };
256 result[@intFromEnum(Feature.arithmetic_fence_ext)] = .{
256 result[@backingInt(Feature.arithmetic_fence_ext)] = .{
257257 .llvm_name = null,
258258 .description = "Enable arithmetic_fence_ext capability",
259259 .dependencies = featureSet(&[_]Feature{
......@@ -261,7 +261,7 @@ pub const all_features = blk: {
261261 .v1_0,
262262 }),
263263 };
264 result[@intFromEnum(Feature.atomic_float16add_ext)] = .{
264 result[@backingInt(Feature.atomic_float16add_ext)] = .{
265265 .llvm_name = null,
266266 .description = "Enable atomic_float16add_ext capability",
267267 .dependencies = featureSet(&[_]Feature{
......@@ -269,7 +269,7 @@ pub const all_features = blk: {
269269 .v1_0,
270270 }),
271271 };
272 result[@intFromEnum(Feature.atomic_float16min_max_ext)] = .{
272 result[@backingInt(Feature.atomic_float16min_max_ext)] = .{
273273 .llvm_name = null,
274274 .description = "Enable atomic_float16min_max_ext capability",
275275 .dependencies = featureSet(&[_]Feature{
......@@ -277,7 +277,7 @@ pub const all_features = blk: {
277277 .v1_0,
278278 }),
279279 };
280 result[@intFromEnum(Feature.atomic_float32add_ext)] = .{
280 result[@backingInt(Feature.atomic_float32add_ext)] = .{
281281 .llvm_name = null,
282282 .description = "Enable atomic_float32add_ext capability",
283283 .dependencies = featureSet(&[_]Feature{
......@@ -285,7 +285,7 @@ pub const all_features = blk: {
285285 .v1_0,
286286 }),
287287 };
288 result[@intFromEnum(Feature.atomic_float32min_max_ext)] = .{
288 result[@backingInt(Feature.atomic_float32min_max_ext)] = .{
289289 .llvm_name = null,
290290 .description = "Enable atomic_float32min_max_ext capability",
291291 .dependencies = featureSet(&[_]Feature{
......@@ -293,7 +293,7 @@ pub const all_features = blk: {
293293 .v1_0,
294294 }),
295295 };
296 result[@intFromEnum(Feature.atomic_float64add_ext)] = .{
296 result[@backingInt(Feature.atomic_float64add_ext)] = .{
297297 .llvm_name = null,
298298 .description = "Enable atomic_float64add_ext capability",
299299 .dependencies = featureSet(&[_]Feature{
......@@ -301,7 +301,7 @@ pub const all_features = blk: {
301301 .v1_0,
302302 }),
303303 };
304 result[@intFromEnum(Feature.atomic_float64min_max_ext)] = .{
304 result[@backingInt(Feature.atomic_float64min_max_ext)] = .{
305305 .llvm_name = null,
306306 .description = "Enable atomic_float64min_max_ext capability",
307307 .dependencies = featureSet(&[_]Feature{
......@@ -309,14 +309,14 @@ pub const all_features = blk: {
309309 .v1_0,
310310 }),
311311 };
312 result[@intFromEnum(Feature.atomic_storage)] = .{
312 result[@backingInt(Feature.atomic_storage)] = .{
313313 .llvm_name = null,
314314 .description = "Enable atomic_storage capability",
315315 .dependencies = featureSet(&[_]Feature{
316316 .v1_0,
317317 }),
318318 };
319 result[@intFromEnum(Feature.atomic_storage_ops)] = .{
319 result[@backingInt(Feature.atomic_storage_ops)] = .{
320320 .llvm_name = null,
321321 .description = "Enable atomic_storage_ops capability",
322322 .dependencies = featureSet(&[_]Feature{
......@@ -324,7 +324,7 @@ pub const all_features = blk: {
324324 .v1_0,
325325 }),
326326 };
327 result[@intFromEnum(Feature.b_float16cooperative_matrix_khr)] = .{
327 result[@backingInt(Feature.b_float16cooperative_matrix_khr)] = .{
328328 .llvm_name = null,
329329 .description = "Enable b_float16cooperative_matrix_khr capability",
330330 .dependencies = featureSet(&[_]Feature{
......@@ -332,7 +332,7 @@ pub const all_features = blk: {
332332 .v1_0,
333333 }),
334334 };
335 result[@intFromEnum(Feature.b_float16dot_product_khr)] = .{
335 result[@backingInt(Feature.b_float16dot_product_khr)] = .{
336336 .llvm_name = null,
337337 .description = "Enable b_float16dot_product_khr capability",
338338 .dependencies = featureSet(&[_]Feature{
......@@ -340,7 +340,7 @@ pub const all_features = blk: {
340340 .v1_0,
341341 }),
342342 };
343 result[@intFromEnum(Feature.b_float16type_khr)] = .{
343 result[@backingInt(Feature.b_float16type_khr)] = .{
344344 .llvm_name = null,
345345 .description = "Enable b_float16type_khr capability",
346346 .dependencies = featureSet(&[_]Feature{
......@@ -348,7 +348,7 @@ pub const all_features = blk: {
348348 .v1_0,
349349 }),
350350 };
351 result[@intFromEnum(Feature.bit_instructions)] = .{
351 result[@backingInt(Feature.bit_instructions)] = .{
352352 .llvm_name = null,
353353 .description = "Enable bit_instructions capability",
354354 .dependencies = featureSet(&[_]Feature{
......@@ -356,14 +356,14 @@ pub const all_features = blk: {
356356 .v1_0,
357357 }),
358358 };
359 result[@intFromEnum(Feature.clip_distance)] = .{
359 result[@backingInt(Feature.clip_distance)] = .{
360360 .llvm_name = null,
361361 .description = "Enable clip_distance capability",
362362 .dependencies = featureSet(&[_]Feature{
363363 .v1_0,
364364 }),
365365 };
366 result[@intFromEnum(Feature.compute_derivative_group_linear_khr)] = .{
366 result[@backingInt(Feature.compute_derivative_group_linear_khr)] = .{
367367 .llvm_name = null,
368368 .description = "Enable compute_derivative_group_linear_khr capability",
369369 .dependencies = featureSet(&[_]Feature{
......@@ -371,7 +371,7 @@ pub const all_features = blk: {
371371 .v1_0,
372372 }),
373373 };
374 result[@intFromEnum(Feature.compute_derivative_group_quads_khr)] = .{
374 result[@backingInt(Feature.compute_derivative_group_quads_khr)] = .{
375375 .llvm_name = null,
376376 .description = "Enable compute_derivative_group_quads_khr capability",
377377 .dependencies = featureSet(&[_]Feature{
......@@ -379,7 +379,7 @@ pub const all_features = blk: {
379379 .v1_0,
380380 }),
381381 };
382 result[@intFromEnum(Feature.constant_data_khr)] = .{
382 result[@backingInt(Feature.constant_data_khr)] = .{
383383 .llvm_name = null,
384384 .description = "Enable constant_data_khr capability",
385385 .dependencies = featureSet(&[_]Feature{
......@@ -387,7 +387,7 @@ pub const all_features = blk: {
387387 .v1_0,
388388 }),
389389 };
390 result[@intFromEnum(Feature.cooperative_matrix_khr)] = .{
390 result[@backingInt(Feature.cooperative_matrix_khr)] = .{
391391 .llvm_name = null,
392392 .description = "Enable cooperative_matrix_khr capability",
393393 .dependencies = featureSet(&[_]Feature{
......@@ -395,14 +395,14 @@ pub const all_features = blk: {
395395 .v1_0,
396396 }),
397397 };
398 result[@intFromEnum(Feature.cull_distance)] = .{
398 result[@backingInt(Feature.cull_distance)] = .{
399399 .llvm_name = null,
400400 .description = "Enable cull_distance capability",
401401 .dependencies = featureSet(&[_]Feature{
402402 .v1_0,
403403 }),
404404 };
405 result[@intFromEnum(Feature.demote_to_helper_invocation)] = .{
405 result[@backingInt(Feature.demote_to_helper_invocation)] = .{
406406 .llvm_name = null,
407407 .description = "Enable demote_to_helper_invocation capability",
408408 .dependencies = featureSet(&[_]Feature{
......@@ -410,7 +410,7 @@ pub const all_features = blk: {
410410 .v1_6,
411411 }),
412412 };
413 result[@intFromEnum(Feature.denorm_flush_to_zero)] = .{
413 result[@backingInt(Feature.denorm_flush_to_zero)] = .{
414414 .llvm_name = null,
415415 .description = "Enable denorm_flush_to_zero capability",
416416 .dependencies = featureSet(&[_]Feature{
......@@ -418,7 +418,7 @@ pub const all_features = blk: {
418418 .v1_4,
419419 }),
420420 };
421 result[@intFromEnum(Feature.denorm_preserve)] = .{
421 result[@backingInt(Feature.denorm_preserve)] = .{
422422 .llvm_name = null,
423423 .description = "Enable denorm_preserve capability",
424424 .dependencies = featureSet(&[_]Feature{
......@@ -426,14 +426,14 @@ pub const all_features = blk: {
426426 .v1_4,
427427 }),
428428 };
429 result[@intFromEnum(Feature.derivative_control)] = .{
429 result[@backingInt(Feature.derivative_control)] = .{
430430 .llvm_name = null,
431431 .description = "Enable derivative_control capability",
432432 .dependencies = featureSet(&[_]Feature{
433433 .v1_0,
434434 }),
435435 };
436 result[@intFromEnum(Feature.descriptor_heap_ext)] = .{
436 result[@backingInt(Feature.descriptor_heap_ext)] = .{
437437 .llvm_name = null,
438438 .description = "Enable descriptor_heap_ext capability",
439439 .dependencies = featureSet(&[_]Feature{
......@@ -441,14 +441,14 @@ pub const all_features = blk: {
441441 .v1_0,
442442 }),
443443 };
444 result[@intFromEnum(Feature.device_enqueue)] = .{
444 result[@backingInt(Feature.device_enqueue)] = .{
445445 .llvm_name = null,
446446 .description = "Enable device_enqueue capability",
447447 .dependencies = featureSet(&[_]Feature{
448448 .v1_0,
449449 }),
450450 };
451 result[@intFromEnum(Feature.device_group)] = .{
451 result[@backingInt(Feature.device_group)] = .{
452452 .llvm_name = null,
453453 .description = "Enable device_group capability",
454454 .dependencies = featureSet(&[_]Feature{
......@@ -456,7 +456,7 @@ pub const all_features = blk: {
456456 .v1_3,
457457 }),
458458 };
459 result[@intFromEnum(Feature.dot_product)] = .{
459 result[@backingInt(Feature.dot_product)] = .{
460460 .llvm_name = null,
461461 .description = "Enable dot_product capability",
462462 .dependencies = featureSet(&[_]Feature{
......@@ -464,7 +464,7 @@ pub const all_features = blk: {
464464 .v1_6,
465465 }),
466466 };
467 result[@intFromEnum(Feature.dot_product_input4x8bit)] = .{
467 result[@backingInt(Feature.dot_product_input4x8bit)] = .{
468468 .llvm_name = null,
469469 .description = "Enable dot_product_input4x8bit capability",
470470 .dependencies = featureSet(&[_]Feature{
......@@ -472,7 +472,7 @@ pub const all_features = blk: {
472472 .v1_6,
473473 }),
474474 };
475 result[@intFromEnum(Feature.dot_product_input4x8bit_packed)] = .{
475 result[@backingInt(Feature.dot_product_input4x8bit_packed)] = .{
476476 .llvm_name = null,
477477 .description = "Enable dot_product_input4x8bit_packed capability",
478478 .dependencies = featureSet(&[_]Feature{
......@@ -480,7 +480,7 @@ pub const all_features = blk: {
480480 .v1_6,
481481 }),
482482 };
483 result[@intFromEnum(Feature.dot_product_input_all)] = .{
483 result[@backingInt(Feature.dot_product_input_all)] = .{
484484 .llvm_name = null,
485485 .description = "Enable dot_product_input_all capability",
486486 .dependencies = featureSet(&[_]Feature{
......@@ -488,7 +488,7 @@ pub const all_features = blk: {
488488 .v1_6,
489489 }),
490490 };
491 result[@intFromEnum(Feature.draw_parameters)] = .{
491 result[@backingInt(Feature.draw_parameters)] = .{
492492 .llvm_name = null,
493493 .description = "Enable draw_parameters capability",
494494 .dependencies = featureSet(&[_]Feature{
......@@ -496,7 +496,7 @@ pub const all_features = blk: {
496496 .v1_3,
497497 }),
498498 };
499 result[@intFromEnum(Feature.expect_assume_khr)] = .{
499 result[@backingInt(Feature.expect_assume_khr)] = .{
500500 .llvm_name = null,
501501 .description = "Enable expect_assume_khr capability",
502502 .dependencies = featureSet(&[_]Feature{
......@@ -504,28 +504,28 @@ pub const all_features = blk: {
504504 .v1_0,
505505 }),
506506 };
507 result[@intFromEnum(Feature.float16)] = .{
507 result[@backingInt(Feature.float16)] = .{
508508 .llvm_name = null,
509509 .description = "Enable float16 capability",
510510 .dependencies = featureSet(&[_]Feature{
511511 .v1_0,
512512 }),
513513 };
514 result[@intFromEnum(Feature.float16buffer)] = .{
514 result[@backingInt(Feature.float16buffer)] = .{
515515 .llvm_name = null,
516516 .description = "Enable float16buffer capability",
517517 .dependencies = featureSet(&[_]Feature{
518518 .v1_0,
519519 }),
520520 };
521 result[@intFromEnum(Feature.float64)] = .{
521 result[@backingInt(Feature.float64)] = .{
522522 .llvm_name = null,
523523 .description = "Enable float64 capability",
524524 .dependencies = featureSet(&[_]Feature{
525525 .v1_0,
526526 }),
527527 };
528 result[@intFromEnum(Feature.float8cooperative_matrix_ext)] = .{
528 result[@backingInt(Feature.float8cooperative_matrix_ext)] = .{
529529 .llvm_name = null,
530530 .description = "Enable float8cooperative_matrix_ext capability",
531531 .dependencies = featureSet(&[_]Feature{
......@@ -533,7 +533,7 @@ pub const all_features = blk: {
533533 .v1_0,
534534 }),
535535 };
536 result[@intFromEnum(Feature.float8ext)] = .{
536 result[@backingInt(Feature.float8ext)] = .{
537537 .llvm_name = null,
538538 .description = "Enable float8ext capability",
539539 .dependencies = featureSet(&[_]Feature{
......@@ -541,7 +541,7 @@ pub const all_features = blk: {
541541 .v1_0,
542542 }),
543543 };
544 result[@intFromEnum(Feature.float_controls2)] = .{
544 result[@backingInt(Feature.float_controls2)] = .{
545545 .llvm_name = null,
546546 .description = "Enable float_controls2 capability",
547547 .dependencies = featureSet(&[_]Feature{
......@@ -549,7 +549,7 @@ pub const all_features = blk: {
549549 .v1_0,
550550 }),
551551 };
552 result[@intFromEnum(Feature.fmakhr)] = .{
552 result[@backingInt(Feature.fmakhr)] = .{
553553 .llvm_name = null,
554554 .description = "Enable fmakhr capability",
555555 .dependencies = featureSet(&[_]Feature{
......@@ -557,7 +557,7 @@ pub const all_features = blk: {
557557 .v1_0,
558558 }),
559559 };
560 result[@intFromEnum(Feature.fragment_barycentric_khr)] = .{
560 result[@backingInt(Feature.fragment_barycentric_khr)] = .{
561561 .llvm_name = null,
562562 .description = "Enable fragment_barycentric_khr capability",
563563 .dependencies = featureSet(&[_]Feature{
......@@ -565,7 +565,7 @@ pub const all_features = blk: {
565565 .v1_0,
566566 }),
567567 };
568 result[@intFromEnum(Feature.fragment_density_ext)] = .{
568 result[@backingInt(Feature.fragment_density_ext)] = .{
569569 .llvm_name = null,
570570 .description = "Enable fragment_density_ext capability",
571571 .dependencies = featureSet(&[_]Feature{
......@@ -573,7 +573,7 @@ pub const all_features = blk: {
573573 .v1_0,
574574 }),
575575 };
576 result[@intFromEnum(Feature.fragment_fully_covered_ext)] = .{
576 result[@backingInt(Feature.fragment_fully_covered_ext)] = .{
577577 .llvm_name = null,
578578 .description = "Enable fragment_fully_covered_ext capability",
579579 .dependencies = featureSet(&[_]Feature{
......@@ -581,7 +581,7 @@ pub const all_features = blk: {
581581 .v1_0,
582582 }),
583583 };
584 result[@intFromEnum(Feature.fragment_shader_pixel_interlock_ext)] = .{
584 result[@backingInt(Feature.fragment_shader_pixel_interlock_ext)] = .{
585585 .llvm_name = null,
586586 .description = "Enable fragment_shader_pixel_interlock_ext capability",
587587 .dependencies = featureSet(&[_]Feature{
......@@ -589,7 +589,7 @@ pub const all_features = blk: {
589589 .v1_0,
590590 }),
591591 };
592 result[@intFromEnum(Feature.fragment_shader_sample_interlock_ext)] = .{
592 result[@backingInt(Feature.fragment_shader_sample_interlock_ext)] = .{
593593 .llvm_name = null,
594594 .description = "Enable fragment_shader_sample_interlock_ext capability",
595595 .dependencies = featureSet(&[_]Feature{
......@@ -597,7 +597,7 @@ pub const all_features = blk: {
597597 .v1_0,
598598 }),
599599 };
600 result[@intFromEnum(Feature.fragment_shader_shading_rate_interlock_ext)] = .{
600 result[@backingInt(Feature.fragment_shader_shading_rate_interlock_ext)] = .{
601601 .llvm_name = null,
602602 .description = "Enable fragment_shader_shading_rate_interlock_ext capability",
603603 .dependencies = featureSet(&[_]Feature{
......@@ -605,7 +605,7 @@ pub const all_features = blk: {
605605 .v1_0,
606606 }),
607607 };
608 result[@intFromEnum(Feature.fragment_shading_rate_khr)] = .{
608 result[@backingInt(Feature.fragment_shading_rate_khr)] = .{
609609 .llvm_name = null,
610610 .description = "Enable fragment_shading_rate_khr capability",
611611 .dependencies = featureSet(&[_]Feature{
......@@ -613,63 +613,63 @@ pub const all_features = blk: {
613613 .v1_0,
614614 }),
615615 };
616 result[@intFromEnum(Feature.generic_pointer)] = .{
616 result[@backingInt(Feature.generic_pointer)] = .{
617617 .llvm_name = null,
618618 .description = "Enable generic_pointer capability",
619619 .dependencies = featureSet(&[_]Feature{
620620 .v1_0,
621621 }),
622622 };
623 result[@intFromEnum(Feature.geometry)] = .{
623 result[@backingInt(Feature.geometry)] = .{
624624 .llvm_name = null,
625625 .description = "Enable geometry capability",
626626 .dependencies = featureSet(&[_]Feature{
627627 .v1_0,
628628 }),
629629 };
630 result[@intFromEnum(Feature.geometry_point_size)] = .{
630 result[@backingInt(Feature.geometry_point_size)] = .{
631631 .llvm_name = null,
632632 .description = "Enable geometry_point_size capability",
633633 .dependencies = featureSet(&[_]Feature{
634634 .v1_0,
635635 }),
636636 };
637 result[@intFromEnum(Feature.geometry_streams)] = .{
637 result[@backingInt(Feature.geometry_streams)] = .{
638638 .llvm_name = null,
639639 .description = "Enable geometry_streams capability",
640640 .dependencies = featureSet(&[_]Feature{
641641 .v1_0,
642642 }),
643643 };
644 result[@intFromEnum(Feature.group_non_uniform)] = .{
644 result[@backingInt(Feature.group_non_uniform)] = .{
645645 .llvm_name = null,
646646 .description = "Enable group_non_uniform capability",
647647 .dependencies = featureSet(&[_]Feature{
648648 .v1_3,
649649 }),
650650 };
651 result[@intFromEnum(Feature.group_non_uniform_arithmetic)] = .{
651 result[@backingInt(Feature.group_non_uniform_arithmetic)] = .{
652652 .llvm_name = null,
653653 .description = "Enable group_non_uniform_arithmetic capability",
654654 .dependencies = featureSet(&[_]Feature{
655655 .v1_3,
656656 }),
657657 };
658 result[@intFromEnum(Feature.group_non_uniform_ballot)] = .{
658 result[@backingInt(Feature.group_non_uniform_ballot)] = .{
659659 .llvm_name = null,
660660 .description = "Enable group_non_uniform_ballot capability",
661661 .dependencies = featureSet(&[_]Feature{
662662 .v1_3,
663663 }),
664664 };
665 result[@intFromEnum(Feature.group_non_uniform_clustered)] = .{
665 result[@backingInt(Feature.group_non_uniform_clustered)] = .{
666666 .llvm_name = null,
667667 .description = "Enable group_non_uniform_clustered capability",
668668 .dependencies = featureSet(&[_]Feature{
669669 .v1_3,
670670 }),
671671 };
672 result[@intFromEnum(Feature.group_non_uniform_partitioned_ext)] = .{
672 result[@backingInt(Feature.group_non_uniform_partitioned_ext)] = .{
673673 .llvm_name = null,
674674 .description = "Enable group_non_uniform_partitioned_ext capability",
675675 .dependencies = featureSet(&[_]Feature{
......@@ -677,14 +677,14 @@ pub const all_features = blk: {
677677 .v1_0,
678678 }),
679679 };
680 result[@intFromEnum(Feature.group_non_uniform_quad)] = .{
680 result[@backingInt(Feature.group_non_uniform_quad)] = .{
681681 .llvm_name = null,
682682 .description = "Enable group_non_uniform_quad capability",
683683 .dependencies = featureSet(&[_]Feature{
684684 .v1_3,
685685 }),
686686 };
687 result[@intFromEnum(Feature.group_non_uniform_rotate_khr)] = .{
687 result[@backingInt(Feature.group_non_uniform_rotate_khr)] = .{
688688 .llvm_name = null,
689689 .description = "Enable group_non_uniform_rotate_khr capability",
690690 .dependencies = featureSet(&[_]Feature{
......@@ -692,28 +692,28 @@ pub const all_features = blk: {
692692 .v1_0,
693693 }),
694694 };
695 result[@intFromEnum(Feature.group_non_uniform_shuffle)] = .{
695 result[@backingInt(Feature.group_non_uniform_shuffle)] = .{
696696 .llvm_name = null,
697697 .description = "Enable group_non_uniform_shuffle capability",
698698 .dependencies = featureSet(&[_]Feature{
699699 .v1_3,
700700 }),
701701 };
702 result[@intFromEnum(Feature.group_non_uniform_shuffle_relative)] = .{
702 result[@backingInt(Feature.group_non_uniform_shuffle_relative)] = .{
703703 .llvm_name = null,
704704 .description = "Enable group_non_uniform_shuffle_relative capability",
705705 .dependencies = featureSet(&[_]Feature{
706706 .v1_3,
707707 }),
708708 };
709 result[@intFromEnum(Feature.group_non_uniform_vote)] = .{
709 result[@backingInt(Feature.group_non_uniform_vote)] = .{
710710 .llvm_name = null,
711711 .description = "Enable group_non_uniform_vote capability",
712712 .dependencies = featureSet(&[_]Feature{
713713 .v1_3,
714714 }),
715715 };
716 result[@intFromEnum(Feature.group_uniform_arithmetic_khr)] = .{
716 result[@backingInt(Feature.group_uniform_arithmetic_khr)] = .{
717717 .llvm_name = null,
718718 .description = "Enable group_uniform_arithmetic_khr capability",
719719 .dependencies = featureSet(&[_]Feature{
......@@ -721,84 +721,84 @@ pub const all_features = blk: {
721721 .v1_0,
722722 }),
723723 };
724 result[@intFromEnum(Feature.groups)] = .{
724 result[@backingInt(Feature.groups)] = .{
725725 .llvm_name = null,
726726 .description = "Enable groups capability",
727727 .dependencies = featureSet(&[_]Feature{
728728 .v1_0,
729729 }),
730730 };
731 result[@intFromEnum(Feature.image_basic)] = .{
731 result[@backingInt(Feature.image_basic)] = .{
732732 .llvm_name = null,
733733 .description = "Enable image_basic capability",
734734 .dependencies = featureSet(&[_]Feature{
735735 .v1_0,
736736 }),
737737 };
738 result[@intFromEnum(Feature.image_buffer)] = .{
738 result[@backingInt(Feature.image_buffer)] = .{
739739 .llvm_name = null,
740740 .description = "Enable image_buffer capability",
741741 .dependencies = featureSet(&[_]Feature{
742742 .v1_0,
743743 }),
744744 };
745 result[@intFromEnum(Feature.image_cube_array)] = .{
745 result[@backingInt(Feature.image_cube_array)] = .{
746746 .llvm_name = null,
747747 .description = "Enable image_cube_array capability",
748748 .dependencies = featureSet(&[_]Feature{
749749 .v1_0,
750750 }),
751751 };
752 result[@intFromEnum(Feature.image_gather_extended)] = .{
752 result[@backingInt(Feature.image_gather_extended)] = .{
753753 .llvm_name = null,
754754 .description = "Enable image_gather_extended capability",
755755 .dependencies = featureSet(&[_]Feature{
756756 .v1_0,
757757 }),
758758 };
759 result[@intFromEnum(Feature.image_mipmap)] = .{
759 result[@backingInt(Feature.image_mipmap)] = .{
760760 .llvm_name = null,
761761 .description = "Enable image_mipmap capability",
762762 .dependencies = featureSet(&[_]Feature{
763763 .v1_0,
764764 }),
765765 };
766 result[@intFromEnum(Feature.image_ms_array)] = .{
766 result[@backingInt(Feature.image_ms_array)] = .{
767767 .llvm_name = null,
768768 .description = "Enable image_ms_array capability",
769769 .dependencies = featureSet(&[_]Feature{
770770 .v1_0,
771771 }),
772772 };
773 result[@intFromEnum(Feature.image_query)] = .{
773 result[@backingInt(Feature.image_query)] = .{
774774 .llvm_name = null,
775775 .description = "Enable image_query capability",
776776 .dependencies = featureSet(&[_]Feature{
777777 .v1_0,
778778 }),
779779 };
780 result[@intFromEnum(Feature.image_read_write)] = .{
780 result[@backingInt(Feature.image_read_write)] = .{
781781 .llvm_name = null,
782782 .description = "Enable image_read_write capability",
783783 .dependencies = featureSet(&[_]Feature{
784784 .v1_0,
785785 }),
786786 };
787 result[@intFromEnum(Feature.image_rect)] = .{
787 result[@backingInt(Feature.image_rect)] = .{
788788 .llvm_name = null,
789789 .description = "Enable image_rect capability",
790790 .dependencies = featureSet(&[_]Feature{
791791 .v1_0,
792792 }),
793793 };
794 result[@intFromEnum(Feature.input_attachment)] = .{
794 result[@backingInt(Feature.input_attachment)] = .{
795795 .llvm_name = null,
796796 .description = "Enable input_attachment capability",
797797 .dependencies = featureSet(&[_]Feature{
798798 .v1_0,
799799 }),
800800 };
801 result[@intFromEnum(Feature.input_attachment_array_dynamic_indexing)] = .{
801 result[@backingInt(Feature.input_attachment_array_dynamic_indexing)] = .{
802802 .llvm_name = null,
803803 .description = "Enable input_attachment_array_dynamic_indexing capability",
804804 .dependencies = featureSet(&[_]Feature{
......@@ -806,7 +806,7 @@ pub const all_features = blk: {
806806 .v1_5,
807807 }),
808808 };
809 result[@intFromEnum(Feature.input_attachment_array_non_uniform_indexing)] = .{
809 result[@backingInt(Feature.input_attachment_array_non_uniform_indexing)] = .{
810810 .llvm_name = null,
811811 .description = "Enable input_attachment_array_non_uniform_indexing capability",
812812 .dependencies = featureSet(&[_]Feature{
......@@ -814,28 +814,28 @@ pub const all_features = blk: {
814814 .v1_5,
815815 }),
816816 };
817 result[@intFromEnum(Feature.int16)] = .{
817 result[@backingInt(Feature.int16)] = .{
818818 .llvm_name = null,
819819 .description = "Enable int16 capability",
820820 .dependencies = featureSet(&[_]Feature{
821821 .v1_0,
822822 }),
823823 };
824 result[@intFromEnum(Feature.int64)] = .{
824 result[@backingInt(Feature.int64)] = .{
825825 .llvm_name = null,
826826 .description = "Enable int64 capability",
827827 .dependencies = featureSet(&[_]Feature{
828828 .v1_0,
829829 }),
830830 };
831 result[@intFromEnum(Feature.int64atomics)] = .{
831 result[@backingInt(Feature.int64atomics)] = .{
832832 .llvm_name = null,
833833 .description = "Enable int64atomics capability",
834834 .dependencies = featureSet(&[_]Feature{
835835 .v1_0,
836836 }),
837837 };
838 result[@intFromEnum(Feature.int64image_ext)] = .{
838 result[@backingInt(Feature.int64image_ext)] = .{
839839 .llvm_name = null,
840840 .description = "Enable int64image_ext capability",
841841 .dependencies = featureSet(&[_]Feature{
......@@ -843,28 +843,28 @@ pub const all_features = blk: {
843843 .v1_0,
844844 }),
845845 };
846 result[@intFromEnum(Feature.int8)] = .{
846 result[@backingInt(Feature.int8)] = .{
847847 .llvm_name = null,
848848 .description = "Enable int8 capability",
849849 .dependencies = featureSet(&[_]Feature{
850850 .v1_0,
851851 }),
852852 };
853 result[@intFromEnum(Feature.interpolation_function)] = .{
853 result[@backingInt(Feature.interpolation_function)] = .{
854854 .llvm_name = null,
855855 .description = "Enable interpolation_function capability",
856856 .dependencies = featureSet(&[_]Feature{
857857 .v1_0,
858858 }),
859859 };
860 result[@intFromEnum(Feature.literal_sampler)] = .{
860 result[@backingInt(Feature.literal_sampler)] = .{
861861 .llvm_name = null,
862862 .description = "Enable literal_sampler capability",
863863 .dependencies = featureSet(&[_]Feature{
864864 .v1_0,
865865 }),
866866 };
867 result[@intFromEnum(Feature.long_vector_ext)] = .{
867 result[@backingInt(Feature.long_vector_ext)] = .{
868868 .llvm_name = null,
869869 .description = "Enable long_vector_ext capability",
870870 .dependencies = featureSet(&[_]Feature{
......@@ -872,14 +872,14 @@ pub const all_features = blk: {
872872 .v1_0,
873873 }),
874874 };
875 result[@intFromEnum(Feature.matrix)] = .{
875 result[@backingInt(Feature.matrix)] = .{
876876 .llvm_name = null,
877877 .description = "Enable matrix capability",
878878 .dependencies = featureSet(&[_]Feature{
879879 .v1_0,
880880 }),
881881 };
882 result[@intFromEnum(Feature.mesh_shading_ext)] = .{
882 result[@backingInt(Feature.mesh_shading_ext)] = .{
883883 .llvm_name = null,
884884 .description = "Enable mesh_shading_ext capability",
885885 .dependencies = featureSet(&[_]Feature{
......@@ -887,14 +887,14 @@ pub const all_features = blk: {
887887 .v1_0,
888888 }),
889889 };
890 result[@intFromEnum(Feature.min_lod)] = .{
890 result[@backingInt(Feature.min_lod)] = .{
891891 .llvm_name = null,
892892 .description = "Enable min_lod capability",
893893 .dependencies = featureSet(&[_]Feature{
894894 .v1_0,
895895 }),
896896 };
897 result[@intFromEnum(Feature.multi_view)] = .{
897 result[@backingInt(Feature.multi_view)] = .{
898898 .llvm_name = null,
899899 .description = "Enable multi_view capability",
900900 .dependencies = featureSet(&[_]Feature{
......@@ -902,21 +902,21 @@ pub const all_features = blk: {
902902 .v1_3,
903903 }),
904904 };
905 result[@intFromEnum(Feature.multi_viewport)] = .{
905 result[@backingInt(Feature.multi_viewport)] = .{
906906 .llvm_name = null,
907907 .description = "Enable multi_viewport capability",
908908 .dependencies = featureSet(&[_]Feature{
909909 .v1_0,
910910 }),
911911 };
912 result[@intFromEnum(Feature.named_barrier)] = .{
912 result[@backingInt(Feature.named_barrier)] = .{
913913 .llvm_name = null,
914914 .description = "Enable named_barrier capability",
915915 .dependencies = featureSet(&[_]Feature{
916916 .v1_1,
917917 }),
918918 };
919 result[@intFromEnum(Feature.opt_none_ext)] = .{
919 result[@backingInt(Feature.opt_none_ext)] = .{
920920 .llvm_name = null,
921921 .description = "Enable opt_none_ext capability",
922922 .dependencies = featureSet(&[_]Feature{
......@@ -924,21 +924,21 @@ pub const all_features = blk: {
924924 .v1_0,
925925 }),
926926 };
927 result[@intFromEnum(Feature.pipe_storage)] = .{
927 result[@backingInt(Feature.pipe_storage)] = .{
928928 .llvm_name = null,
929929 .description = "Enable pipe_storage capability",
930930 .dependencies = featureSet(&[_]Feature{
931931 .v1_1,
932932 }),
933933 };
934 result[@intFromEnum(Feature.pipes)] = .{
934 result[@backingInt(Feature.pipes)] = .{
935935 .llvm_name = null,
936936 .description = "Enable pipes capability",
937937 .dependencies = featureSet(&[_]Feature{
938938 .v1_0,
939939 }),
940940 };
941 result[@intFromEnum(Feature.poison_freeze_khr)] = .{
941 result[@backingInt(Feature.poison_freeze_khr)] = .{
942942 .llvm_name = null,
943943 .description = "Enable poison_freeze_khr capability",
944944 .dependencies = featureSet(&[_]Feature{
......@@ -946,7 +946,7 @@ pub const all_features = blk: {
946946 .v1_0,
947947 }),
948948 };
949 result[@intFromEnum(Feature.quad_control_khr)] = .{
949 result[@backingInt(Feature.quad_control_khr)] = .{
950950 .llvm_name = null,
951951 .description = "Enable quad_control_khr capability",
952952 .dependencies = featureSet(&[_]Feature{
......@@ -954,7 +954,7 @@ pub const all_features = blk: {
954954 .v1_0,
955955 }),
956956 };
957 result[@intFromEnum(Feature.ray_cull_mask_khr)] = .{
957 result[@backingInt(Feature.ray_cull_mask_khr)] = .{
958958 .llvm_name = null,
959959 .description = "Enable ray_cull_mask_khr capability",
960960 .dependencies = featureSet(&[_]Feature{
......@@ -962,7 +962,7 @@ pub const all_features = blk: {
962962 .v1_0,
963963 }),
964964 };
965 result[@intFromEnum(Feature.ray_query_khr)] = .{
965 result[@backingInt(Feature.ray_query_khr)] = .{
966966 .llvm_name = null,
967967 .description = "Enable ray_query_khr capability",
968968 .dependencies = featureSet(&[_]Feature{
......@@ -970,7 +970,7 @@ pub const all_features = blk: {
970970 .v1_0,
971971 }),
972972 };
973 result[@intFromEnum(Feature.ray_query_position_fetch_khr)] = .{
973 result[@backingInt(Feature.ray_query_position_fetch_khr)] = .{
974974 .llvm_name = null,
975975 .description = "Enable ray_query_position_fetch_khr capability",
976976 .dependencies = featureSet(&[_]Feature{
......@@ -978,7 +978,7 @@ pub const all_features = blk: {
978978 .v1_0,
979979 }),
980980 };
981 result[@intFromEnum(Feature.ray_query_provisional_khr)] = .{
981 result[@backingInt(Feature.ray_query_provisional_khr)] = .{
982982 .llvm_name = null,
983983 .description = "Enable ray_query_provisional_khr capability",
984984 .dependencies = featureSet(&[_]Feature{
......@@ -986,7 +986,7 @@ pub const all_features = blk: {
986986 .v1_0,
987987 }),
988988 };
989 result[@intFromEnum(Feature.ray_tracing_khr)] = .{
989 result[@backingInt(Feature.ray_tracing_khr)] = .{
990990 .llvm_name = null,
991991 .description = "Enable ray_tracing_khr capability",
992992 .dependencies = featureSet(&[_]Feature{
......@@ -994,7 +994,7 @@ pub const all_features = blk: {
994994 .v1_0,
995995 }),
996996 };
997 result[@intFromEnum(Feature.ray_tracing_opacity_micromap_ext)] = .{
997 result[@backingInt(Feature.ray_tracing_opacity_micromap_ext)] = .{
998998 .llvm_name = null,
999999 .description = "Enable ray_tracing_opacity_micromap_ext capability",
10001000 .dependencies = featureSet(&[_]Feature{
......@@ -1002,7 +1002,7 @@ pub const all_features = blk: {
10021002 .v1_0,
10031003 }),
10041004 };
1005 result[@intFromEnum(Feature.ray_tracing_position_fetch_khr)] = .{
1005 result[@backingInt(Feature.ray_tracing_position_fetch_khr)] = .{
10061006 .llvm_name = null,
10071007 .description = "Enable ray_tracing_position_fetch_khr capability",
10081008 .dependencies = featureSet(&[_]Feature{
......@@ -1010,7 +1010,7 @@ pub const all_features = blk: {
10101010 .v1_0,
10111011 }),
10121012 };
1013 result[@intFromEnum(Feature.ray_tracing_provisional_khr)] = .{
1013 result[@backingInt(Feature.ray_tracing_provisional_khr)] = .{
10141014 .llvm_name = null,
10151015 .description = "Enable ray_tracing_provisional_khr capability",
10161016 .dependencies = featureSet(&[_]Feature{
......@@ -1018,7 +1018,7 @@ pub const all_features = blk: {
10181018 .v1_0,
10191019 }),
10201020 };
1021 result[@intFromEnum(Feature.ray_traversal_primitive_culling_khr)] = .{
1021 result[@backingInt(Feature.ray_traversal_primitive_culling_khr)] = .{
10221022 .llvm_name = null,
10231023 .description = "Enable ray_traversal_primitive_culling_khr capability",
10241024 .dependencies = featureSet(&[_]Feature{
......@@ -1027,7 +1027,7 @@ pub const all_features = blk: {
10271027 .v1_0,
10281028 }),
10291029 };
1030 result[@intFromEnum(Feature.replicated_composites_ext)] = .{
1030 result[@backingInt(Feature.replicated_composites_ext)] = .{
10311031 .llvm_name = null,
10321032 .description = "Enable replicated_composites_ext capability",
10331033 .dependencies = featureSet(&[_]Feature{
......@@ -1035,7 +1035,7 @@ pub const all_features = blk: {
10351035 .v1_0,
10361036 }),
10371037 };
1038 result[@intFromEnum(Feature.runtime_descriptor_array)] = .{
1038 result[@backingInt(Feature.runtime_descriptor_array)] = .{
10391039 .llvm_name = null,
10401040 .description = "Enable runtime_descriptor_array capability",
10411041 .dependencies = featureSet(&[_]Feature{
......@@ -1043,7 +1043,7 @@ pub const all_features = blk: {
10431043 .v1_5,
10441044 }),
10451045 };
1046 result[@intFromEnum(Feature.sample_mask_post_depth_coverage)] = .{
1046 result[@backingInt(Feature.sample_mask_post_depth_coverage)] = .{
10471047 .llvm_name = null,
10481048 .description = "Enable sample_mask_post_depth_coverage capability",
10491049 .dependencies = featureSet(&[_]Feature{
......@@ -1051,35 +1051,35 @@ pub const all_features = blk: {
10511051 .v1_0,
10521052 }),
10531053 };
1054 result[@intFromEnum(Feature.sample_rate_shading)] = .{
1054 result[@backingInt(Feature.sample_rate_shading)] = .{
10551055 .llvm_name = null,
10561056 .description = "Enable sample_rate_shading capability",
10571057 .dependencies = featureSet(&[_]Feature{
10581058 .v1_0,
10591059 }),
10601060 };
1061 result[@intFromEnum(Feature.sampled_buffer)] = .{
1061 result[@backingInt(Feature.sampled_buffer)] = .{
10621062 .llvm_name = null,
10631063 .description = "Enable sampled_buffer capability",
10641064 .dependencies = featureSet(&[_]Feature{
10651065 .v1_0,
10661066 }),
10671067 };
1068 result[@intFromEnum(Feature.sampled_cube_array)] = .{
1068 result[@backingInt(Feature.sampled_cube_array)] = .{
10691069 .llvm_name = null,
10701070 .description = "Enable sampled_cube_array capability",
10711071 .dependencies = featureSet(&[_]Feature{
10721072 .v1_0,
10731073 }),
10741074 };
1075 result[@intFromEnum(Feature.sampled_image_array_dynamic_indexing)] = .{
1075 result[@backingInt(Feature.sampled_image_array_dynamic_indexing)] = .{
10761076 .llvm_name = null,
10771077 .description = "Enable sampled_image_array_dynamic_indexing capability",
10781078 .dependencies = featureSet(&[_]Feature{
10791079 .v1_0,
10801080 }),
10811081 };
1082 result[@intFromEnum(Feature.sampled_image_array_non_uniform_indexing)] = .{
1082 result[@backingInt(Feature.sampled_image_array_non_uniform_indexing)] = .{
10831083 .llvm_name = null,
10841084 .description = "Enable sampled_image_array_non_uniform_indexing capability",
10851085 .dependencies = featureSet(&[_]Feature{
......@@ -1087,14 +1087,14 @@ pub const all_features = blk: {
10871087 .v1_5,
10881088 }),
10891089 };
1090 result[@intFromEnum(Feature.sampled_rect)] = .{
1090 result[@backingInt(Feature.sampled_rect)] = .{
10911091 .llvm_name = null,
10921092 .description = "Enable sampled_rect capability",
10931093 .dependencies = featureSet(&[_]Feature{
10941094 .v1_0,
10951095 }),
10961096 };
1097 result[@intFromEnum(Feature.shader64bit_indexing_ext)] = .{
1097 result[@backingInt(Feature.shader64bit_indexing_ext)] = .{
10981098 .llvm_name = null,
10991099 .description = "Enable shader64bit_indexing_ext capability",
11001100 .dependencies = featureSet(&[_]Feature{
......@@ -1102,7 +1102,7 @@ pub const all_features = blk: {
11021102 .v1_0,
11031103 }),
11041104 };
1105 result[@intFromEnum(Feature.shader_clock_khr)] = .{
1105 result[@backingInt(Feature.shader_clock_khr)] = .{
11061106 .llvm_name = null,
11071107 .description = "Enable shader_clock_khr capability",
11081108 .dependencies = featureSet(&[_]Feature{
......@@ -1110,7 +1110,7 @@ pub const all_features = blk: {
11101110 .v1_0,
11111111 }),
11121112 };
1113 result[@intFromEnum(Feature.shader_invocation_reorder_ext)] = .{
1113 result[@backingInt(Feature.shader_invocation_reorder_ext)] = .{
11141114 .llvm_name = null,
11151115 .description = "Enable shader_invocation_reorder_ext capability",
11161116 .dependencies = featureSet(&[_]Feature{
......@@ -1118,14 +1118,14 @@ pub const all_features = blk: {
11181118 .v1_0,
11191119 }),
11201120 };
1121 result[@intFromEnum(Feature.shader_layer)] = .{
1121 result[@backingInt(Feature.shader_layer)] = .{
11221122 .llvm_name = null,
11231123 .description = "Enable shader_layer capability",
11241124 .dependencies = featureSet(&[_]Feature{
11251125 .v1_5,
11261126 }),
11271127 };
1128 result[@intFromEnum(Feature.shader_non_uniform)] = .{
1128 result[@backingInt(Feature.shader_non_uniform)] = .{
11291129 .llvm_name = null,
11301130 .description = "Enable shader_non_uniform capability",
11311131 .dependencies = featureSet(&[_]Feature{
......@@ -1133,14 +1133,14 @@ pub const all_features = blk: {
11331133 .v1_5,
11341134 }),
11351135 };
1136 result[@intFromEnum(Feature.shader_viewport_index)] = .{
1136 result[@backingInt(Feature.shader_viewport_index)] = .{
11371137 .llvm_name = null,
11381138 .description = "Enable shader_viewport_index capability",
11391139 .dependencies = featureSet(&[_]Feature{
11401140 .v1_5,
11411141 }),
11421142 };
1143 result[@intFromEnum(Feature.shader_viewport_index_layer_ext)] = .{
1143 result[@backingInt(Feature.shader_viewport_index_layer_ext)] = .{
11441144 .llvm_name = null,
11451145 .description = "Enable shader_viewport_index_layer_ext capability",
11461146 .dependencies = featureSet(&[_]Feature{
......@@ -1148,7 +1148,7 @@ pub const all_features = blk: {
11481148 .v1_0,
11491149 }),
11501150 };
1151 result[@intFromEnum(Feature.signed_zero_inf_nan_preserve)] = .{
1151 result[@backingInt(Feature.signed_zero_inf_nan_preserve)] = .{
11521152 .llvm_name = null,
11531153 .description = "Enable signed_zero_inf_nan_preserve capability",
11541154 .dependencies = featureSet(&[_]Feature{
......@@ -1156,309 +1156,309 @@ pub const all_features = blk: {
11561156 .v1_4,
11571157 }),
11581158 };
1159 result[@intFromEnum(Feature.sparse_residency)] = .{
1159 result[@backingInt(Feature.sparse_residency)] = .{
11601160 .llvm_name = null,
11611161 .description = "Enable sparse_residency capability",
11621162 .dependencies = featureSet(&[_]Feature{
11631163 .v1_0,
11641164 }),
11651165 };
1166 result[@intFromEnum(Feature.SPV_EXT_arithmetic_fence)] = .{
1166 result[@backingInt(Feature.SPV_EXT_arithmetic_fence)] = .{
11671167 .llvm_name = null,
11681168 .description = "Enable SPV_EXT_arithmetic_fence extension",
11691169 .dependencies = featureSet(&[_]Feature{}),
11701170 };
1171 result[@intFromEnum(Feature.SPV_EXT_demote_to_helper_invocation)] = .{
1171 result[@backingInt(Feature.SPV_EXT_demote_to_helper_invocation)] = .{
11721172 .llvm_name = null,
11731173 .description = "Enable SPV_EXT_demote_to_helper_invocation extension",
11741174 .dependencies = featureSet(&[_]Feature{}),
11751175 };
1176 result[@intFromEnum(Feature.SPV_EXT_descriptor_heap)] = .{
1176 result[@backingInt(Feature.SPV_EXT_descriptor_heap)] = .{
11771177 .llvm_name = null,
11781178 .description = "Enable SPV_EXT_descriptor_heap extension",
11791179 .dependencies = featureSet(&[_]Feature{}),
11801180 };
1181 result[@intFromEnum(Feature.SPV_EXT_descriptor_indexing)] = .{
1181 result[@backingInt(Feature.SPV_EXT_descriptor_indexing)] = .{
11821182 .llvm_name = null,
11831183 .description = "Enable SPV_EXT_descriptor_indexing extension",
11841184 .dependencies = featureSet(&[_]Feature{}),
11851185 };
1186 result[@intFromEnum(Feature.SPV_EXT_float8)] = .{
1186 result[@backingInt(Feature.SPV_EXT_float8)] = .{
11871187 .llvm_name = null,
11881188 .description = "Enable SPV_EXT_float8 extension",
11891189 .dependencies = featureSet(&[_]Feature{}),
11901190 };
1191 result[@intFromEnum(Feature.SPV_EXT_fragment_fully_covered)] = .{
1191 result[@backingInt(Feature.SPV_EXT_fragment_fully_covered)] = .{
11921192 .llvm_name = null,
11931193 .description = "Enable SPV_EXT_fragment_fully_covered extension",
11941194 .dependencies = featureSet(&[_]Feature{}),
11951195 };
1196 result[@intFromEnum(Feature.SPV_EXT_fragment_invocation_density)] = .{
1196 result[@backingInt(Feature.SPV_EXT_fragment_invocation_density)] = .{
11971197 .llvm_name = null,
11981198 .description = "Enable SPV_EXT_fragment_invocation_density extension",
11991199 .dependencies = featureSet(&[_]Feature{}),
12001200 };
1201 result[@intFromEnum(Feature.SPV_EXT_fragment_shader_interlock)] = .{
1201 result[@backingInt(Feature.SPV_EXT_fragment_shader_interlock)] = .{
12021202 .llvm_name = null,
12031203 .description = "Enable SPV_EXT_fragment_shader_interlock extension",
12041204 .dependencies = featureSet(&[_]Feature{}),
12051205 };
1206 result[@intFromEnum(Feature.SPV_EXT_long_vector)] = .{
1206 result[@backingInt(Feature.SPV_EXT_long_vector)] = .{
12071207 .llvm_name = null,
12081208 .description = "Enable SPV_EXT_long_vector extension",
12091209 .dependencies = featureSet(&[_]Feature{}),
12101210 };
1211 result[@intFromEnum(Feature.SPV_EXT_mesh_shader)] = .{
1211 result[@backingInt(Feature.SPV_EXT_mesh_shader)] = .{
12121212 .llvm_name = null,
12131213 .description = "Enable SPV_EXT_mesh_shader extension",
12141214 .dependencies = featureSet(&[_]Feature{}),
12151215 };
1216 result[@intFromEnum(Feature.SPV_EXT_opacity_micromap)] = .{
1216 result[@backingInt(Feature.SPV_EXT_opacity_micromap)] = .{
12171217 .llvm_name = null,
12181218 .description = "Enable SPV_EXT_opacity_micromap extension",
12191219 .dependencies = featureSet(&[_]Feature{}),
12201220 };
1221 result[@intFromEnum(Feature.SPV_EXT_optnone)] = .{
1221 result[@backingInt(Feature.SPV_EXT_optnone)] = .{
12221222 .llvm_name = null,
12231223 .description = "Enable SPV_EXT_optnone extension",
12241224 .dependencies = featureSet(&[_]Feature{}),
12251225 };
1226 result[@intFromEnum(Feature.SPV_EXT_physical_storage_buffer)] = .{
1226 result[@backingInt(Feature.SPV_EXT_physical_storage_buffer)] = .{
12271227 .llvm_name = null,
12281228 .description = "Enable SPV_EXT_physical_storage_buffer extension",
12291229 .dependencies = featureSet(&[_]Feature{}),
12301230 };
1231 result[@intFromEnum(Feature.SPV_EXT_replicated_composites)] = .{
1231 result[@backingInt(Feature.SPV_EXT_replicated_composites)] = .{
12321232 .llvm_name = null,
12331233 .description = "Enable SPV_EXT_replicated_composites extension",
12341234 .dependencies = featureSet(&[_]Feature{}),
12351235 };
1236 result[@intFromEnum(Feature.SPV_EXT_shader_64bit_indexing)] = .{
1236 result[@backingInt(Feature.SPV_EXT_shader_64bit_indexing)] = .{
12371237 .llvm_name = null,
12381238 .description = "Enable SPV_EXT_shader_64bit_indexing extension",
12391239 .dependencies = featureSet(&[_]Feature{}),
12401240 };
1241 result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float16_add)] = .{
1241 result[@backingInt(Feature.SPV_EXT_shader_atomic_float16_add)] = .{
12421242 .llvm_name = null,
12431243 .description = "Enable SPV_EXT_shader_atomic_float16_add extension",
12441244 .dependencies = featureSet(&[_]Feature{}),
12451245 };
1246 result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float_add)] = .{
1246 result[@backingInt(Feature.SPV_EXT_shader_atomic_float_add)] = .{
12471247 .llvm_name = null,
12481248 .description = "Enable SPV_EXT_shader_atomic_float_add extension",
12491249 .dependencies = featureSet(&[_]Feature{}),
12501250 };
1251 result[@intFromEnum(Feature.SPV_EXT_shader_atomic_float_min_max)] = .{
1251 result[@backingInt(Feature.SPV_EXT_shader_atomic_float_min_max)] = .{
12521252 .llvm_name = null,
12531253 .description = "Enable SPV_EXT_shader_atomic_float_min_max extension",
12541254 .dependencies = featureSet(&[_]Feature{}),
12551255 };
1256 result[@intFromEnum(Feature.SPV_EXT_shader_image_int64)] = .{
1256 result[@backingInt(Feature.SPV_EXT_shader_image_int64)] = .{
12571257 .llvm_name = null,
12581258 .description = "Enable SPV_EXT_shader_image_int64 extension",
12591259 .dependencies = featureSet(&[_]Feature{}),
12601260 };
1261 result[@intFromEnum(Feature.SPV_EXT_shader_invocation_reorder)] = .{
1261 result[@backingInt(Feature.SPV_EXT_shader_invocation_reorder)] = .{
12621262 .llvm_name = null,
12631263 .description = "Enable SPV_EXT_shader_invocation_reorder extension",
12641264 .dependencies = featureSet(&[_]Feature{}),
12651265 };
1266 result[@intFromEnum(Feature.SPV_EXT_shader_stencil_export)] = .{
1266 result[@backingInt(Feature.SPV_EXT_shader_stencil_export)] = .{
12671267 .llvm_name = null,
12681268 .description = "Enable SPV_EXT_shader_stencil_export extension",
12691269 .dependencies = featureSet(&[_]Feature{}),
12701270 };
1271 result[@intFromEnum(Feature.SPV_EXT_shader_subgroup_partitioned)] = .{
1271 result[@backingInt(Feature.SPV_EXT_shader_subgroup_partitioned)] = .{
12721272 .llvm_name = null,
12731273 .description = "Enable SPV_EXT_shader_subgroup_partitioned extension",
12741274 .dependencies = featureSet(&[_]Feature{}),
12751275 };
1276 result[@intFromEnum(Feature.SPV_EXT_shader_tile_image)] = .{
1276 result[@backingInt(Feature.SPV_EXT_shader_tile_image)] = .{
12771277 .llvm_name = null,
12781278 .description = "Enable SPV_EXT_shader_tile_image extension",
12791279 .dependencies = featureSet(&[_]Feature{}),
12801280 };
1281 result[@intFromEnum(Feature.SPV_EXT_shader_viewport_index_layer)] = .{
1281 result[@backingInt(Feature.SPV_EXT_shader_viewport_index_layer)] = .{
12821282 .llvm_name = null,
12831283 .description = "Enable SPV_EXT_shader_viewport_index_layer extension",
12841284 .dependencies = featureSet(&[_]Feature{}),
12851285 };
1286 result[@intFromEnum(Feature.SPV_KHR_16bit_storage)] = .{
1286 result[@backingInt(Feature.SPV_KHR_16bit_storage)] = .{
12871287 .llvm_name = null,
12881288 .description = "Enable SPV_KHR_16bit_storage extension",
12891289 .dependencies = featureSet(&[_]Feature{}),
12901290 };
1291 result[@intFromEnum(Feature.SPV_KHR_8bit_storage)] = .{
1291 result[@backingInt(Feature.SPV_KHR_8bit_storage)] = .{
12921292 .llvm_name = null,
12931293 .description = "Enable SPV_KHR_8bit_storage extension",
12941294 .dependencies = featureSet(&[_]Feature{}),
12951295 };
1296 result[@intFromEnum(Feature.SPV_KHR_abort)] = .{
1296 result[@backingInt(Feature.SPV_KHR_abort)] = .{
12971297 .llvm_name = null,
12981298 .description = "Enable SPV_KHR_abort extension",
12991299 .dependencies = featureSet(&[_]Feature{}),
13001300 };
1301 result[@intFromEnum(Feature.SPV_KHR_bfloat16)] = .{
1301 result[@backingInt(Feature.SPV_KHR_bfloat16)] = .{
13021302 .llvm_name = null,
13031303 .description = "Enable SPV_KHR_bfloat16 extension",
13041304 .dependencies = featureSet(&[_]Feature{}),
13051305 };
1306 result[@intFromEnum(Feature.SPV_KHR_bit_instructions)] = .{
1306 result[@backingInt(Feature.SPV_KHR_bit_instructions)] = .{
13071307 .llvm_name = null,
13081308 .description = "Enable SPV_KHR_bit_instructions extension",
13091309 .dependencies = featureSet(&[_]Feature{}),
13101310 };
1311 result[@intFromEnum(Feature.SPV_KHR_compute_shader_derivatives)] = .{
1311 result[@backingInt(Feature.SPV_KHR_compute_shader_derivatives)] = .{
13121312 .llvm_name = null,
13131313 .description = "Enable SPV_KHR_compute_shader_derivatives extension",
13141314 .dependencies = featureSet(&[_]Feature{}),
13151315 };
1316 result[@intFromEnum(Feature.SPV_KHR_constant_data)] = .{
1316 result[@backingInt(Feature.SPV_KHR_constant_data)] = .{
13171317 .llvm_name = null,
13181318 .description = "Enable SPV_KHR_constant_data extension",
13191319 .dependencies = featureSet(&[_]Feature{}),
13201320 };
1321 result[@intFromEnum(Feature.SPV_KHR_cooperative_matrix)] = .{
1321 result[@backingInt(Feature.SPV_KHR_cooperative_matrix)] = .{
13221322 .llvm_name = null,
13231323 .description = "Enable SPV_KHR_cooperative_matrix extension",
13241324 .dependencies = featureSet(&[_]Feature{}),
13251325 };
1326 result[@intFromEnum(Feature.SPV_KHR_device_group)] = .{
1326 result[@backingInt(Feature.SPV_KHR_device_group)] = .{
13271327 .llvm_name = null,
13281328 .description = "Enable SPV_KHR_device_group extension",
13291329 .dependencies = featureSet(&[_]Feature{}),
13301330 };
1331 result[@intFromEnum(Feature.SPV_KHR_expect_assume)] = .{
1331 result[@backingInt(Feature.SPV_KHR_expect_assume)] = .{
13321332 .llvm_name = null,
13331333 .description = "Enable SPV_KHR_expect_assume extension",
13341334 .dependencies = featureSet(&[_]Feature{}),
13351335 };
1336 result[@intFromEnum(Feature.SPV_KHR_float_controls)] = .{
1336 result[@backingInt(Feature.SPV_KHR_float_controls)] = .{
13371337 .llvm_name = null,
13381338 .description = "Enable SPV_KHR_float_controls extension",
13391339 .dependencies = featureSet(&[_]Feature{}),
13401340 };
1341 result[@intFromEnum(Feature.SPV_KHR_float_controls2)] = .{
1341 result[@backingInt(Feature.SPV_KHR_float_controls2)] = .{
13421342 .llvm_name = null,
13431343 .description = "Enable SPV_KHR_float_controls2 extension",
13441344 .dependencies = featureSet(&[_]Feature{}),
13451345 };
1346 result[@intFromEnum(Feature.SPV_KHR_fma)] = .{
1346 result[@backingInt(Feature.SPV_KHR_fma)] = .{
13471347 .llvm_name = null,
13481348 .description = "Enable SPV_KHR_fma extension",
13491349 .dependencies = featureSet(&[_]Feature{}),
13501350 };
1351 result[@intFromEnum(Feature.SPV_KHR_fragment_shader_barycentric)] = .{
1351 result[@backingInt(Feature.SPV_KHR_fragment_shader_barycentric)] = .{
13521352 .llvm_name = null,
13531353 .description = "Enable SPV_KHR_fragment_shader_barycentric extension",
13541354 .dependencies = featureSet(&[_]Feature{}),
13551355 };
1356 result[@intFromEnum(Feature.SPV_KHR_fragment_shading_rate)] = .{
1356 result[@backingInt(Feature.SPV_KHR_fragment_shading_rate)] = .{
13571357 .llvm_name = null,
13581358 .description = "Enable SPV_KHR_fragment_shading_rate extension",
13591359 .dependencies = featureSet(&[_]Feature{}),
13601360 };
1361 result[@intFromEnum(Feature.SPV_KHR_integer_dot_product)] = .{
1361 result[@backingInt(Feature.SPV_KHR_integer_dot_product)] = .{
13621362 .llvm_name = null,
13631363 .description = "Enable SPV_KHR_integer_dot_product extension",
13641364 .dependencies = featureSet(&[_]Feature{}),
13651365 };
1366 result[@intFromEnum(Feature.SPV_KHR_multiview)] = .{
1366 result[@backingInt(Feature.SPV_KHR_multiview)] = .{
13671367 .llvm_name = null,
13681368 .description = "Enable SPV_KHR_multiview extension",
13691369 .dependencies = featureSet(&[_]Feature{}),
13701370 };
1371 result[@intFromEnum(Feature.SPV_KHR_poison_freeze)] = .{
1371 result[@backingInt(Feature.SPV_KHR_poison_freeze)] = .{
13721372 .llvm_name = null,
13731373 .description = "Enable SPV_KHR_poison_freeze extension",
13741374 .dependencies = featureSet(&[_]Feature{}),
13751375 };
1376 result[@intFromEnum(Feature.SPV_KHR_post_depth_coverage)] = .{
1376 result[@backingInt(Feature.SPV_KHR_post_depth_coverage)] = .{
13771377 .llvm_name = null,
13781378 .description = "Enable SPV_KHR_post_depth_coverage extension",
13791379 .dependencies = featureSet(&[_]Feature{}),
13801380 };
1381 result[@intFromEnum(Feature.SPV_KHR_quad_control)] = .{
1381 result[@backingInt(Feature.SPV_KHR_quad_control)] = .{
13821382 .llvm_name = null,
13831383 .description = "Enable SPV_KHR_quad_control extension",
13841384 .dependencies = featureSet(&[_]Feature{}),
13851385 };
1386 result[@intFromEnum(Feature.SPV_KHR_ray_cull_mask)] = .{
1386 result[@backingInt(Feature.SPV_KHR_ray_cull_mask)] = .{
13871387 .llvm_name = null,
13881388 .description = "Enable SPV_KHR_ray_cull_mask extension",
13891389 .dependencies = featureSet(&[_]Feature{}),
13901390 };
1391 result[@intFromEnum(Feature.SPV_KHR_ray_query)] = .{
1391 result[@backingInt(Feature.SPV_KHR_ray_query)] = .{
13921392 .llvm_name = null,
13931393 .description = "Enable SPV_KHR_ray_query extension",
13941394 .dependencies = featureSet(&[_]Feature{}),
13951395 };
1396 result[@intFromEnum(Feature.SPV_KHR_ray_tracing)] = .{
1396 result[@backingInt(Feature.SPV_KHR_ray_tracing)] = .{
13971397 .llvm_name = null,
13981398 .description = "Enable SPV_KHR_ray_tracing extension",
13991399 .dependencies = featureSet(&[_]Feature{}),
14001400 };
1401 result[@intFromEnum(Feature.SPV_KHR_ray_tracing_position_fetch)] = .{
1401 result[@backingInt(Feature.SPV_KHR_ray_tracing_position_fetch)] = .{
14021402 .llvm_name = null,
14031403 .description = "Enable SPV_KHR_ray_tracing_position_fetch extension",
14041404 .dependencies = featureSet(&[_]Feature{}),
14051405 };
1406 result[@intFromEnum(Feature.SPV_KHR_shader_atomic_counter_ops)] = .{
1406 result[@backingInt(Feature.SPV_KHR_shader_atomic_counter_ops)] = .{
14071407 .llvm_name = null,
14081408 .description = "Enable SPV_KHR_shader_atomic_counter_ops extension",
14091409 .dependencies = featureSet(&[_]Feature{}),
14101410 };
1411 result[@intFromEnum(Feature.SPV_KHR_shader_ballot)] = .{
1411 result[@backingInt(Feature.SPV_KHR_shader_ballot)] = .{
14121412 .llvm_name = null,
14131413 .description = "Enable SPV_KHR_shader_ballot extension",
14141414 .dependencies = featureSet(&[_]Feature{}),
14151415 };
1416 result[@intFromEnum(Feature.SPV_KHR_shader_clock)] = .{
1416 result[@backingInt(Feature.SPV_KHR_shader_clock)] = .{
14171417 .llvm_name = null,
14181418 .description = "Enable SPV_KHR_shader_clock extension",
14191419 .dependencies = featureSet(&[_]Feature{}),
14201420 };
1421 result[@intFromEnum(Feature.SPV_KHR_shader_draw_parameters)] = .{
1421 result[@backingInt(Feature.SPV_KHR_shader_draw_parameters)] = .{
14221422 .llvm_name = null,
14231423 .description = "Enable SPV_KHR_shader_draw_parameters extension",
14241424 .dependencies = featureSet(&[_]Feature{}),
14251425 };
1426 result[@intFromEnum(Feature.SPV_KHR_subgroup_rotate)] = .{
1426 result[@backingInt(Feature.SPV_KHR_subgroup_rotate)] = .{
14271427 .llvm_name = null,
14281428 .description = "Enable SPV_KHR_subgroup_rotate extension",
14291429 .dependencies = featureSet(&[_]Feature{}),
14301430 };
1431 result[@intFromEnum(Feature.SPV_KHR_subgroup_vote)] = .{
1431 result[@backingInt(Feature.SPV_KHR_subgroup_vote)] = .{
14321432 .llvm_name = null,
14331433 .description = "Enable SPV_KHR_subgroup_vote extension",
14341434 .dependencies = featureSet(&[_]Feature{}),
14351435 };
1436 result[@intFromEnum(Feature.SPV_KHR_uniform_group_instructions)] = .{
1436 result[@backingInt(Feature.SPV_KHR_uniform_group_instructions)] = .{
14371437 .llvm_name = null,
14381438 .description = "Enable SPV_KHR_uniform_group_instructions extension",
14391439 .dependencies = featureSet(&[_]Feature{}),
14401440 };
1441 result[@intFromEnum(Feature.SPV_KHR_untyped_pointers)] = .{
1441 result[@backingInt(Feature.SPV_KHR_untyped_pointers)] = .{
14421442 .llvm_name = null,
14431443 .description = "Enable SPV_KHR_untyped_pointers extension",
14441444 .dependencies = featureSet(&[_]Feature{}),
14451445 };
1446 result[@intFromEnum(Feature.SPV_KHR_variable_pointers)] = .{
1446 result[@backingInt(Feature.SPV_KHR_variable_pointers)] = .{
14471447 .llvm_name = null,
14481448 .description = "Enable SPV_KHR_variable_pointers extension",
14491449 .dependencies = featureSet(&[_]Feature{}),
14501450 };
1451 result[@intFromEnum(Feature.SPV_KHR_vulkan_memory_model)] = .{
1451 result[@backingInt(Feature.SPV_KHR_vulkan_memory_model)] = .{
14521452 .llvm_name = null,
14531453 .description = "Enable SPV_KHR_vulkan_memory_model extension",
14541454 .dependencies = featureSet(&[_]Feature{}),
14551455 };
1456 result[@intFromEnum(Feature.SPV_KHR_workgroup_memory_explicit_layout)] = .{
1456 result[@backingInt(Feature.SPV_KHR_workgroup_memory_explicit_layout)] = .{
14571457 .llvm_name = null,
14581458 .description = "Enable SPV_KHR_workgroup_memory_explicit_layout extension",
14591459 .dependencies = featureSet(&[_]Feature{}),
14601460 };
1461 result[@intFromEnum(Feature.stencil_export_ext)] = .{
1461 result[@backingInt(Feature.stencil_export_ext)] = .{
14621462 .llvm_name = null,
14631463 .description = "Enable stencil_export_ext capability",
14641464 .dependencies = featureSet(&[_]Feature{
......@@ -1466,7 +1466,7 @@ pub const all_features = blk: {
14661466 .v1_0,
14671467 }),
14681468 };
1469 result[@intFromEnum(Feature.storage_buffer16bit_access)] = .{
1469 result[@backingInt(Feature.storage_buffer16bit_access)] = .{
14701470 .llvm_name = null,
14711471 .description = "Enable storage_buffer16bit_access capability",
14721472 .dependencies = featureSet(&[_]Feature{
......@@ -1474,7 +1474,7 @@ pub const all_features = blk: {
14741474 .v1_3,
14751475 }),
14761476 };
1477 result[@intFromEnum(Feature.storage_buffer8bit_access)] = .{
1477 result[@backingInt(Feature.storage_buffer8bit_access)] = .{
14781478 .llvm_name = null,
14791479 .description = "Enable storage_buffer8bit_access capability",
14801480 .dependencies = featureSet(&[_]Feature{
......@@ -1482,14 +1482,14 @@ pub const all_features = blk: {
14821482 .v1_5,
14831483 }),
14841484 };
1485 result[@intFromEnum(Feature.storage_buffer_array_dynamic_indexing)] = .{
1485 result[@backingInt(Feature.storage_buffer_array_dynamic_indexing)] = .{
14861486 .llvm_name = null,
14871487 .description = "Enable storage_buffer_array_dynamic_indexing capability",
14881488 .dependencies = featureSet(&[_]Feature{
14891489 .v1_0,
14901490 }),
14911491 };
1492 result[@intFromEnum(Feature.storage_buffer_array_non_uniform_indexing)] = .{
1492 result[@backingInt(Feature.storage_buffer_array_non_uniform_indexing)] = .{
14931493 .llvm_name = null,
14941494 .description = "Enable storage_buffer_array_non_uniform_indexing capability",
14951495 .dependencies = featureSet(&[_]Feature{
......@@ -1497,14 +1497,14 @@ pub const all_features = blk: {
14971497 .v1_5,
14981498 }),
14991499 };
1500 result[@intFromEnum(Feature.storage_image_array_dynamic_indexing)] = .{
1500 result[@backingInt(Feature.storage_image_array_dynamic_indexing)] = .{
15011501 .llvm_name = null,
15021502 .description = "Enable storage_image_array_dynamic_indexing capability",
15031503 .dependencies = featureSet(&[_]Feature{
15041504 .v1_0,
15051505 }),
15061506 };
1507 result[@intFromEnum(Feature.storage_image_array_non_uniform_indexing)] = .{
1507 result[@backingInt(Feature.storage_image_array_non_uniform_indexing)] = .{
15081508 .llvm_name = null,
15091509 .description = "Enable storage_image_array_non_uniform_indexing capability",
15101510 .dependencies = featureSet(&[_]Feature{
......@@ -1512,35 +1512,35 @@ pub const all_features = blk: {
15121512 .v1_5,
15131513 }),
15141514 };
1515 result[@intFromEnum(Feature.storage_image_extended_formats)] = .{
1515 result[@backingInt(Feature.storage_image_extended_formats)] = .{
15161516 .llvm_name = null,
15171517 .description = "Enable storage_image_extended_formats capability",
15181518 .dependencies = featureSet(&[_]Feature{
15191519 .v1_0,
15201520 }),
15211521 };
1522 result[@intFromEnum(Feature.storage_image_multisample)] = .{
1522 result[@backingInt(Feature.storage_image_multisample)] = .{
15231523 .llvm_name = null,
15241524 .description = "Enable storage_image_multisample capability",
15251525 .dependencies = featureSet(&[_]Feature{
15261526 .v1_0,
15271527 }),
15281528 };
1529 result[@intFromEnum(Feature.storage_image_read_without_format)] = .{
1529 result[@backingInt(Feature.storage_image_read_without_format)] = .{
15301530 .llvm_name = null,
15311531 .description = "Enable storage_image_read_without_format capability",
15321532 .dependencies = featureSet(&[_]Feature{
15331533 .v1_0,
15341534 }),
15351535 };
1536 result[@intFromEnum(Feature.storage_image_write_without_format)] = .{
1536 result[@backingInt(Feature.storage_image_write_without_format)] = .{
15371537 .llvm_name = null,
15381538 .description = "Enable storage_image_write_without_format capability",
15391539 .dependencies = featureSet(&[_]Feature{
15401540 .v1_0,
15411541 }),
15421542 };
1543 result[@intFromEnum(Feature.storage_input_output16)] = .{
1543 result[@backingInt(Feature.storage_input_output16)] = .{
15441544 .llvm_name = null,
15451545 .description = "Enable storage_input_output16 capability",
15461546 .dependencies = featureSet(&[_]Feature{
......@@ -1548,7 +1548,7 @@ pub const all_features = blk: {
15481548 .v1_3,
15491549 }),
15501550 };
1551 result[@intFromEnum(Feature.storage_push_constant16)] = .{
1551 result[@backingInt(Feature.storage_push_constant16)] = .{
15521552 .llvm_name = null,
15531553 .description = "Enable storage_push_constant16 capability",
15541554 .dependencies = featureSet(&[_]Feature{
......@@ -1556,7 +1556,7 @@ pub const all_features = blk: {
15561556 .v1_3,
15571557 }),
15581558 };
1559 result[@intFromEnum(Feature.storage_push_constant8)] = .{
1559 result[@backingInt(Feature.storage_push_constant8)] = .{
15601560 .llvm_name = null,
15611561 .description = "Enable storage_push_constant8 capability",
15621562 .dependencies = featureSet(&[_]Feature{
......@@ -1564,7 +1564,7 @@ pub const all_features = blk: {
15641564 .v1_5,
15651565 }),
15661566 };
1567 result[@intFromEnum(Feature.storage_texel_buffer_array_dynamic_indexing)] = .{
1567 result[@backingInt(Feature.storage_texel_buffer_array_dynamic_indexing)] = .{
15681568 .llvm_name = null,
15691569 .description = "Enable storage_texel_buffer_array_dynamic_indexing capability",
15701570 .dependencies = featureSet(&[_]Feature{
......@@ -1572,7 +1572,7 @@ pub const all_features = blk: {
15721572 .v1_5,
15731573 }),
15741574 };
1575 result[@intFromEnum(Feature.storage_texel_buffer_array_non_uniform_indexing)] = .{
1575 result[@backingInt(Feature.storage_texel_buffer_array_non_uniform_indexing)] = .{
15761576 .llvm_name = null,
15771577 .description = "Enable storage_texel_buffer_array_non_uniform_indexing capability",
15781578 .dependencies = featureSet(&[_]Feature{
......@@ -1580,7 +1580,7 @@ pub const all_features = blk: {
15801580 .v1_5,
15811581 }),
15821582 };
1583 result[@intFromEnum(Feature.subgroup_ballot_khr)] = .{
1583 result[@backingInt(Feature.subgroup_ballot_khr)] = .{
15841584 .llvm_name = null,
15851585 .description = "Enable subgroup_ballot_khr capability",
15861586 .dependencies = featureSet(&[_]Feature{
......@@ -1588,14 +1588,14 @@ pub const all_features = blk: {
15881588 .v1_0,
15891589 }),
15901590 };
1591 result[@intFromEnum(Feature.subgroup_dispatch)] = .{
1591 result[@backingInt(Feature.subgroup_dispatch)] = .{
15921592 .llvm_name = null,
15931593 .description = "Enable subgroup_dispatch capability",
15941594 .dependencies = featureSet(&[_]Feature{
15951595 .v1_1,
15961596 }),
15971597 };
1598 result[@intFromEnum(Feature.subgroup_vote_khr)] = .{
1598 result[@backingInt(Feature.subgroup_vote_khr)] = .{
15991599 .llvm_name = null,
16001600 .description = "Enable subgroup_vote_khr capability",
16011601 .dependencies = featureSet(&[_]Feature{
......@@ -1603,21 +1603,21 @@ pub const all_features = blk: {
16031603 .v1_0,
16041604 }),
16051605 };
1606 result[@intFromEnum(Feature.tessellation)] = .{
1606 result[@backingInt(Feature.tessellation)] = .{
16071607 .llvm_name = null,
16081608 .description = "Enable tessellation capability",
16091609 .dependencies = featureSet(&[_]Feature{
16101610 .v1_0,
16111611 }),
16121612 };
1613 result[@intFromEnum(Feature.tessellation_point_size)] = .{
1613 result[@backingInt(Feature.tessellation_point_size)] = .{
16141614 .llvm_name = null,
16151615 .description = "Enable tessellation_point_size capability",
16161616 .dependencies = featureSet(&[_]Feature{
16171617 .v1_0,
16181618 }),
16191619 };
1620 result[@intFromEnum(Feature.tile_image_color_read_access_ext)] = .{
1620 result[@backingInt(Feature.tile_image_color_read_access_ext)] = .{
16211621 .llvm_name = null,
16221622 .description = "Enable tile_image_color_read_access_ext capability",
16231623 .dependencies = featureSet(&[_]Feature{
......@@ -1625,7 +1625,7 @@ pub const all_features = blk: {
16251625 .v1_0,
16261626 }),
16271627 };
1628 result[@intFromEnum(Feature.tile_image_depth_read_access_ext)] = .{
1628 result[@backingInt(Feature.tile_image_depth_read_access_ext)] = .{
16291629 .llvm_name = null,
16301630 .description = "Enable tile_image_depth_read_access_ext capability",
16311631 .dependencies = featureSet(&[_]Feature{
......@@ -1633,7 +1633,7 @@ pub const all_features = blk: {
16331633 .v1_0,
16341634 }),
16351635 };
1636 result[@intFromEnum(Feature.tile_image_stencil_read_access_ext)] = .{
1636 result[@backingInt(Feature.tile_image_stencil_read_access_ext)] = .{
16371637 .llvm_name = null,
16381638 .description = "Enable tile_image_stencil_read_access_ext capability",
16391639 .dependencies = featureSet(&[_]Feature{
......@@ -1641,14 +1641,14 @@ pub const all_features = blk: {
16411641 .v1_0,
16421642 }),
16431643 };
1644 result[@intFromEnum(Feature.transform_feedback)] = .{
1644 result[@backingInt(Feature.transform_feedback)] = .{
16451645 .llvm_name = null,
16461646 .description = "Enable transform_feedback capability",
16471647 .dependencies = featureSet(&[_]Feature{
16481648 .v1_0,
16491649 }),
16501650 };
1651 result[@intFromEnum(Feature.uniform_and_storage_buffer16bit_access)] = .{
1651 result[@backingInt(Feature.uniform_and_storage_buffer16bit_access)] = .{
16521652 .llvm_name = null,
16531653 .description = "Enable uniform_and_storage_buffer16bit_access capability",
16541654 .dependencies = featureSet(&[_]Feature{
......@@ -1656,7 +1656,7 @@ pub const all_features = blk: {
16561656 .v1_3,
16571657 }),
16581658 };
1659 result[@intFromEnum(Feature.uniform_and_storage_buffer8bit_access)] = .{
1659 result[@backingInt(Feature.uniform_and_storage_buffer8bit_access)] = .{
16601660 .llvm_name = null,
16611661 .description = "Enable uniform_and_storage_buffer8bit_access capability",
16621662 .dependencies = featureSet(&[_]Feature{
......@@ -1664,14 +1664,14 @@ pub const all_features = blk: {
16641664 .v1_5,
16651665 }),
16661666 };
1667 result[@intFromEnum(Feature.uniform_buffer_array_dynamic_indexing)] = .{
1667 result[@backingInt(Feature.uniform_buffer_array_dynamic_indexing)] = .{
16681668 .llvm_name = null,
16691669 .description = "Enable uniform_buffer_array_dynamic_indexing capability",
16701670 .dependencies = featureSet(&[_]Feature{
16711671 .v1_0,
16721672 }),
16731673 };
1674 result[@intFromEnum(Feature.uniform_buffer_array_non_uniform_indexing)] = .{
1674 result[@backingInt(Feature.uniform_buffer_array_non_uniform_indexing)] = .{
16751675 .llvm_name = null,
16761676 .description = "Enable uniform_buffer_array_non_uniform_indexing capability",
16771677 .dependencies = featureSet(&[_]Feature{
......@@ -1679,14 +1679,14 @@ pub const all_features = blk: {
16791679 .v1_5,
16801680 }),
16811681 };
1682 result[@intFromEnum(Feature.uniform_decoration)] = .{
1682 result[@backingInt(Feature.uniform_decoration)] = .{
16831683 .llvm_name = null,
16841684 .description = "Enable uniform_decoration capability",
16851685 .dependencies = featureSet(&[_]Feature{
16861686 .v1_6,
16871687 }),
16881688 };
1689 result[@intFromEnum(Feature.uniform_texel_buffer_array_dynamic_indexing)] = .{
1689 result[@backingInt(Feature.uniform_texel_buffer_array_dynamic_indexing)] = .{
16901690 .llvm_name = null,
16911691 .description = "Enable uniform_texel_buffer_array_dynamic_indexing capability",
16921692 .dependencies = featureSet(&[_]Feature{
......@@ -1694,7 +1694,7 @@ pub const all_features = blk: {
16941694 .v1_5,
16951695 }),
16961696 };
1697 result[@intFromEnum(Feature.uniform_texel_buffer_array_non_uniform_indexing)] = .{
1697 result[@backingInt(Feature.uniform_texel_buffer_array_non_uniform_indexing)] = .{
16981698 .llvm_name = null,
16991699 .description = "Enable uniform_texel_buffer_array_non_uniform_indexing capability",
17001700 .dependencies = featureSet(&[_]Feature{
......@@ -1702,7 +1702,7 @@ pub const all_features = blk: {
17021702 .v1_5,
17031703 }),
17041704 };
1705 result[@intFromEnum(Feature.untyped_pointers_khr)] = .{
1705 result[@backingInt(Feature.untyped_pointers_khr)] = .{
17061706 .llvm_name = null,
17071707 .description = "Enable untyped_pointers_khr capability",
17081708 .dependencies = featureSet(&[_]Feature{
......@@ -1710,54 +1710,54 @@ pub const all_features = blk: {
17101710 .v1_0,
17111711 }),
17121712 };
1713 result[@intFromEnum(Feature.v1_0)] = .{
1713 result[@backingInt(Feature.v1_0)] = .{
17141714 .llvm_name = null,
17151715 .description = "Enable v1_0 extension",
17161716 .dependencies = featureSet(&[_]Feature{}),
17171717 };
1718 result[@intFromEnum(Feature.v1_1)] = .{
1718 result[@backingInt(Feature.v1_1)] = .{
17191719 .llvm_name = null,
17201720 .description = "Enable v1_1 extension",
17211721 .dependencies = featureSet(&[_]Feature{
17221722 .v1_0,
17231723 }),
17241724 };
1725 result[@intFromEnum(Feature.v1_2)] = .{
1725 result[@backingInt(Feature.v1_2)] = .{
17261726 .llvm_name = null,
17271727 .description = "Enable v1_2 extension",
17281728 .dependencies = featureSet(&[_]Feature{
17291729 .v1_1,
17301730 }),
17311731 };
1732 result[@intFromEnum(Feature.v1_3)] = .{
1732 result[@backingInt(Feature.v1_3)] = .{
17331733 .llvm_name = null,
17341734 .description = "Enable v1_3 extension",
17351735 .dependencies = featureSet(&[_]Feature{
17361736 .v1_2,
17371737 }),
17381738 };
1739 result[@intFromEnum(Feature.v1_4)] = .{
1739 result[@backingInt(Feature.v1_4)] = .{
17401740 .llvm_name = null,
17411741 .description = "Enable v1_4 extension",
17421742 .dependencies = featureSet(&[_]Feature{
17431743 .v1_3,
17441744 }),
17451745 };
1746 result[@intFromEnum(Feature.v1_5)] = .{
1746 result[@backingInt(Feature.v1_5)] = .{
17471747 .llvm_name = null,
17481748 .description = "Enable v1_5 extension",
17491749 .dependencies = featureSet(&[_]Feature{
17501750 .v1_4,
17511751 }),
17521752 };
1753 result[@intFromEnum(Feature.v1_6)] = .{
1753 result[@backingInt(Feature.v1_6)] = .{
17541754 .llvm_name = null,
17551755 .description = "Enable v1_6 extension",
17561756 .dependencies = featureSet(&[_]Feature{
17571757 .v1_5,
17581758 }),
17591759 };
1760 result[@intFromEnum(Feature.variable_pointers)] = .{
1760 result[@backingInt(Feature.variable_pointers)] = .{
17611761 .llvm_name = null,
17621762 .description = "Enable variable_pointers capability",
17631763 .dependencies = featureSet(&[_]Feature{
......@@ -1765,7 +1765,7 @@ pub const all_features = blk: {
17651765 .v1_3,
17661766 }),
17671767 };
1768 result[@intFromEnum(Feature.variable_pointers_storage_buffer)] = .{
1768 result[@backingInt(Feature.variable_pointers_storage_buffer)] = .{
17691769 .llvm_name = null,
17701770 .description = "Enable variable_pointers_storage_buffer capability",
17711771 .dependencies = featureSet(&[_]Feature{
......@@ -1773,14 +1773,14 @@ pub const all_features = blk: {
17731773 .v1_3,
17741774 }),
17751775 };
1776 result[@intFromEnum(Feature.vector16)] = .{
1776 result[@backingInt(Feature.vector16)] = .{
17771777 .llvm_name = null,
17781778 .description = "Enable vector16 capability",
17791779 .dependencies = featureSet(&[_]Feature{
17801780 .v1_0,
17811781 }),
17821782 };
1783 result[@intFromEnum(Feature.vulkan_memory_model)] = .{
1783 result[@backingInt(Feature.vulkan_memory_model)] = .{
17841784 .llvm_name = null,
17851785 .description = "Enable vulkan_memory_model capability",
17861786 .dependencies = featureSet(&[_]Feature{
......@@ -1788,7 +1788,7 @@ pub const all_features = blk: {
17881788 .v1_5,
17891789 }),
17901790 };
1791 result[@intFromEnum(Feature.vulkan_memory_model_device_scope)] = .{
1791 result[@backingInt(Feature.vulkan_memory_model_device_scope)] = .{
17921792 .llvm_name = null,
17931793 .description = "Enable vulkan_memory_model_device_scope capability",
17941794 .dependencies = featureSet(&[_]Feature{
......@@ -1796,7 +1796,7 @@ pub const all_features = blk: {
17961796 .v1_5,
17971797 }),
17981798 };
1799 result[@intFromEnum(Feature.workgroup_memory_explicit_layout16bit_access_khr)] = .{
1799 result[@backingInt(Feature.workgroup_memory_explicit_layout16bit_access_khr)] = .{
18001800 .llvm_name = null,
18011801 .description = "Enable workgroup_memory_explicit_layout16bit_access_khr capability",
18021802 .dependencies = featureSet(&[_]Feature{
......@@ -1804,7 +1804,7 @@ pub const all_features = blk: {
18041804 .v1_0,
18051805 }),
18061806 };
1807 result[@intFromEnum(Feature.workgroup_memory_explicit_layout8bit_access_khr)] = .{
1807 result[@backingInt(Feature.workgroup_memory_explicit_layout8bit_access_khr)] = .{
18081808 .llvm_name = null,
18091809 .description = "Enable workgroup_memory_explicit_layout8bit_access_khr capability",
18101810 .dependencies = featureSet(&[_]Feature{
......@@ -1812,7 +1812,7 @@ pub const all_features = blk: {
18121812 .v1_0,
18131813 }),
18141814 };
1815 result[@intFromEnum(Feature.workgroup_memory_explicit_layout_khr)] = .{
1815 result[@backingInt(Feature.workgroup_memory_explicit_layout_khr)] = .{
18161816 .llvm_name = null,
18171817 .description = "Enable workgroup_memory_explicit_layout_khr capability",
18181818 .dependencies = featureSet(&[_]Feature{
lib/std/Target/ve.zig+1-1
......@@ -17,7 +17,7 @@ pub const all_features = blk: {
1717 const len = @typeInfo(Feature).@"enum".field_names.len;
1818 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
1919 var result: [len]CpuFeature = undefined;
20 result[@intFromEnum(Feature.vpu)] = .{
20 result[@backingInt(Feature.vpu)] = .{
2121 .llvm_name = "vpu",
2222 .description = "Enable the VPU",
2323 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/wasm.zig+19-19
......@@ -35,103 +35,103 @@ pub const all_features = blk: {
3535 const len = @typeInfo(Feature).@"enum".field_names.len;
3636 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
3737 var result: [len]CpuFeature = undefined;
38 result[@intFromEnum(Feature.atomics)] = .{
38 result[@backingInt(Feature.atomics)] = .{
3939 .llvm_name = "atomics",
4040 .description = "Enable Atomics",
4141 .dependencies = featureSet(&[_]Feature{}),
4242 };
43 result[@intFromEnum(Feature.bulk_memory)] = .{
43 result[@backingInt(Feature.bulk_memory)] = .{
4444 .llvm_name = "bulk-memory",
4545 .description = "Enable bulk memory operations",
4646 .dependencies = featureSet(&[_]Feature{
4747 .bulk_memory_opt,
4848 }),
4949 };
50 result[@intFromEnum(Feature.bulk_memory_opt)] = .{
50 result[@backingInt(Feature.bulk_memory_opt)] = .{
5151 .llvm_name = "bulk-memory-opt",
5252 .description = "Enable bulk memory optimization operations",
5353 .dependencies = featureSet(&[_]Feature{}),
5454 };
55 result[@intFromEnum(Feature.call_indirect_overlong)] = .{
55 result[@backingInt(Feature.call_indirect_overlong)] = .{
5656 .llvm_name = "call-indirect-overlong",
5757 .description = "Enable overlong encoding for call_indirect immediates",
5858 .dependencies = featureSet(&[_]Feature{}),
5959 };
60 result[@intFromEnum(Feature.exception_handling)] = .{
60 result[@backingInt(Feature.exception_handling)] = .{
6161 .llvm_name = "exception-handling",
6262 .description = "Enable Wasm exception handling",
6363 .dependencies = featureSet(&[_]Feature{}),
6464 };
65 result[@intFromEnum(Feature.extended_const)] = .{
65 result[@backingInt(Feature.extended_const)] = .{
6666 .llvm_name = "extended-const",
6767 .description = "Enable extended const expressions",
6868 .dependencies = featureSet(&[_]Feature{}),
6969 };
70 result[@intFromEnum(Feature.fp16)] = .{
70 result[@backingInt(Feature.fp16)] = .{
7171 .llvm_name = "fp16",
7272 .description = "Enable FP16 instructions",
7373 .dependencies = featureSet(&[_]Feature{}),
7474 };
75 result[@intFromEnum(Feature.gc)] = .{
75 result[@backingInt(Feature.gc)] = .{
7676 .llvm_name = "gc",
7777 .description = "Enable wasm gc",
7878 .dependencies = featureSet(&[_]Feature{}),
7979 };
80 result[@intFromEnum(Feature.multimemory)] = .{
80 result[@backingInt(Feature.multimemory)] = .{
8181 .llvm_name = "multimemory",
8282 .description = "Enable multiple memories",
8383 .dependencies = featureSet(&[_]Feature{}),
8484 };
85 result[@intFromEnum(Feature.multivalue)] = .{
85 result[@backingInt(Feature.multivalue)] = .{
8686 .llvm_name = "multivalue",
8787 .description = "Enable multivalue blocks, instructions, and functions",
8888 .dependencies = featureSet(&[_]Feature{}),
8989 };
90 result[@intFromEnum(Feature.mutable_globals)] = .{
90 result[@backingInt(Feature.mutable_globals)] = .{
9191 .llvm_name = "mutable-globals",
9292 .description = "Enable mutable globals",
9393 .dependencies = featureSet(&[_]Feature{}),
9494 };
95 result[@intFromEnum(Feature.nontrapping_bulk_memory_len0)] = .{
95 result[@backingInt(Feature.nontrapping_bulk_memory_len0)] = .{
9696 .llvm_name = null,
9797 .description = "Bulk memory operations with a zero length do not trap",
9898 .dependencies = featureSet(&[_]Feature{
9999 .bulk_memory_opt,
100100 }),
101101 };
102 result[@intFromEnum(Feature.nontrapping_fptoint)] = .{
102 result[@backingInt(Feature.nontrapping_fptoint)] = .{
103103 .llvm_name = "nontrapping-fptoint",
104104 .description = "Enable non-trapping float-to-int conversion operators",
105105 .dependencies = featureSet(&[_]Feature{}),
106106 };
107 result[@intFromEnum(Feature.reference_types)] = .{
107 result[@backingInt(Feature.reference_types)] = .{
108108 .llvm_name = "reference-types",
109109 .description = "Enable reference types",
110110 .dependencies = featureSet(&[_]Feature{
111111 .call_indirect_overlong,
112112 }),
113113 };
114 result[@intFromEnum(Feature.relaxed_simd)] = .{
114 result[@backingInt(Feature.relaxed_simd)] = .{
115115 .llvm_name = "relaxed-simd",
116116 .description = "Enable relaxed-simd instructions",
117117 .dependencies = featureSet(&[_]Feature{}),
118118 };
119 result[@intFromEnum(Feature.sign_ext)] = .{
119 result[@backingInt(Feature.sign_ext)] = .{
120120 .llvm_name = "sign-ext",
121121 .description = "Enable sign extension operators",
122122 .dependencies = featureSet(&[_]Feature{}),
123123 };
124 result[@intFromEnum(Feature.simd128)] = .{
124 result[@backingInt(Feature.simd128)] = .{
125125 .llvm_name = "simd128",
126126 .description = "Enable 128-bit SIMD",
127127 .dependencies = featureSet(&[_]Feature{}),
128128 };
129 result[@intFromEnum(Feature.tail_call)] = .{
129 result[@backingInt(Feature.tail_call)] = .{
130130 .llvm_name = "tail-call",
131131 .description = "Enable tail call instructions",
132132 .dependencies = featureSet(&[_]Feature{}),
133133 };
134 result[@intFromEnum(Feature.wide_arithmetic)] = .{
134 result[@backingInt(Feature.wide_arithmetic)] = .{
135135 .llvm_name = "wide-arithmetic",
136136 .description = "Enable wide-arithmetic instructions",
137137 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/x86.zig+202-202
......@@ -218,121 +218,121 @@ pub const all_features = blk: {
218218 const len = @typeInfo(Feature).@"enum".field_names.len;
219219 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
220220 var result: [len]CpuFeature = undefined;
221 result[@intFromEnum(Feature.@"16bit_mode")] = .{
221 result[@backingInt(Feature.@"16bit_mode")] = .{
222222 .llvm_name = "16bit-mode",
223223 .description = "16-bit mode (i8086)",
224224 .dependencies = featureSet(&[_]Feature{}),
225225 };
226 result[@intFromEnum(Feature.@"32bit_mode")] = .{
226 result[@backingInt(Feature.@"32bit_mode")] = .{
227227 .llvm_name = "32bit-mode",
228228 .description = "32-bit mode (80386)",
229229 .dependencies = featureSet(&[_]Feature{}),
230230 };
231 result[@intFromEnum(Feature.@"3dnow")] = .{
231 result[@backingInt(Feature.@"3dnow")] = .{
232232 .llvm_name = null,
233233 .description = "Enable 3DNow! instructions",
234234 .dependencies = featureSet(&[_]Feature{
235235 .mmx,
236236 }),
237237 };
238 result[@intFromEnum(Feature.@"3dnowa")] = .{
238 result[@backingInt(Feature.@"3dnowa")] = .{
239239 .llvm_name = null,
240240 .description = "Enable 3DNow! Athlon instructions",
241241 .dependencies = featureSet(&[_]Feature{
242242 .@"3dnow",
243243 }),
244244 };
245 result[@intFromEnum(Feature.@"64bit")] = .{
245 result[@backingInt(Feature.@"64bit")] = .{
246246 .llvm_name = "64bit",
247247 .description = "Support 64-bit instructions",
248248 .dependencies = featureSet(&[_]Feature{}),
249249 };
250 result[@intFromEnum(Feature.adx)] = .{
250 result[@backingInt(Feature.adx)] = .{
251251 .llvm_name = "adx",
252252 .description = "Support ADX instructions",
253253 .dependencies = featureSet(&[_]Feature{}),
254254 };
255 result[@intFromEnum(Feature.aes)] = .{
255 result[@backingInt(Feature.aes)] = .{
256256 .llvm_name = "aes",
257257 .description = "Enable AES instructions",
258258 .dependencies = featureSet(&[_]Feature{
259259 .sse2,
260260 }),
261261 };
262 result[@intFromEnum(Feature.allow_light_256_bit)] = .{
262 result[@backingInt(Feature.allow_light_256_bit)] = .{
263263 .llvm_name = "allow-light-256-bit",
264264 .description = "Enable generation of 256-bit load/stores even if we prefer 128-bit",
265265 .dependencies = featureSet(&[_]Feature{}),
266266 };
267 result[@intFromEnum(Feature.amx_avx512)] = .{
267 result[@backingInt(Feature.amx_avx512)] = .{
268268 .llvm_name = "amx-avx512",
269269 .description = "Support AMX-AVX512 instructions",
270270 .dependencies = featureSet(&[_]Feature{
271271 .amx_tile,
272272 }),
273273 };
274 result[@intFromEnum(Feature.amx_bf16)] = .{
274 result[@backingInt(Feature.amx_bf16)] = .{
275275 .llvm_name = "amx-bf16",
276276 .description = "Support AMX-BF16 instructions",
277277 .dependencies = featureSet(&[_]Feature{
278278 .amx_tile,
279279 }),
280280 };
281 result[@intFromEnum(Feature.amx_complex)] = .{
281 result[@backingInt(Feature.amx_complex)] = .{
282282 .llvm_name = "amx-complex",
283283 .description = "Support AMX-COMPLEX instructions",
284284 .dependencies = featureSet(&[_]Feature{
285285 .amx_tile,
286286 }),
287287 };
288 result[@intFromEnum(Feature.amx_fp16)] = .{
288 result[@backingInt(Feature.amx_fp16)] = .{
289289 .llvm_name = "amx-fp16",
290290 .description = "Support AMX amx-fp16 instructions",
291291 .dependencies = featureSet(&[_]Feature{
292292 .amx_tile,
293293 }),
294294 };
295 result[@intFromEnum(Feature.amx_fp8)] = .{
295 result[@backingInt(Feature.amx_fp8)] = .{
296296 .llvm_name = "amx-fp8",
297297 .description = "Support AMX-FP8 instructions",
298298 .dependencies = featureSet(&[_]Feature{
299299 .amx_tile,
300300 }),
301301 };
302 result[@intFromEnum(Feature.amx_int8)] = .{
302 result[@backingInt(Feature.amx_int8)] = .{
303303 .llvm_name = "amx-int8",
304304 .description = "Support AMX-INT8 instructions",
305305 .dependencies = featureSet(&[_]Feature{
306306 .amx_tile,
307307 }),
308308 };
309 result[@intFromEnum(Feature.amx_movrs)] = .{
309 result[@backingInt(Feature.amx_movrs)] = .{
310310 .llvm_name = "amx-movrs",
311311 .description = "Support AMX-MOVRS instructions",
312312 .dependencies = featureSet(&[_]Feature{
313313 .amx_tile,
314314 }),
315315 };
316 result[@intFromEnum(Feature.amx_tf32)] = .{
316 result[@backingInt(Feature.amx_tf32)] = .{
317317 .llvm_name = "amx-tf32",
318318 .description = "Support AMX-TF32 instructions",
319319 .dependencies = featureSet(&[_]Feature{
320320 .amx_tile,
321321 }),
322322 };
323 result[@intFromEnum(Feature.amx_tile)] = .{
323 result[@backingInt(Feature.amx_tile)] = .{
324324 .llvm_name = "amx-tile",
325325 .description = "Support AMX-TILE instructions",
326326 .dependencies = featureSet(&[_]Feature{}),
327327 };
328 result[@intFromEnum(Feature.avx)] = .{
328 result[@backingInt(Feature.avx)] = .{
329329 .llvm_name = "avx",
330330 .description = "Enable AVX instructions",
331331 .dependencies = featureSet(&[_]Feature{
332332 .sse4_2,
333333 }),
334334 };
335 result[@intFromEnum(Feature.avx10_1)] = .{
335 result[@backingInt(Feature.avx10_1)] = .{
336336 .llvm_name = "avx10.1",
337337 .description = "Support AVX10.1 instruction",
338338 .dependencies = featureSet(&[_]Feature{
......@@ -349,63 +349,63 @@ pub const all_features = blk: {
349349 .avx512vpopcntdq,
350350 }),
351351 };
352 result[@intFromEnum(Feature.avx10_2)] = .{
352 result[@backingInt(Feature.avx10_2)] = .{
353353 .llvm_name = "avx10.2",
354354 .description = "Support AVX10.2 instruction",
355355 .dependencies = featureSet(&[_]Feature{
356356 .avx10_1,
357357 }),
358358 };
359 result[@intFromEnum(Feature.avx2)] = .{
359 result[@backingInt(Feature.avx2)] = .{
360360 .llvm_name = "avx2",
361361 .description = "Enable AVX2 instructions",
362362 .dependencies = featureSet(&[_]Feature{
363363 .avx,
364364 }),
365365 };
366 result[@intFromEnum(Feature.avx512bf16)] = .{
366 result[@backingInt(Feature.avx512bf16)] = .{
367367 .llvm_name = "avx512bf16",
368368 .description = "Support bfloat16 floating point",
369369 .dependencies = featureSet(&[_]Feature{
370370 .avx512bw,
371371 }),
372372 };
373 result[@intFromEnum(Feature.avx512bitalg)] = .{
373 result[@backingInt(Feature.avx512bitalg)] = .{
374374 .llvm_name = "avx512bitalg",
375375 .description = "Enable AVX-512 Bit Algorithms",
376376 .dependencies = featureSet(&[_]Feature{
377377 .avx512bw,
378378 }),
379379 };
380 result[@intFromEnum(Feature.avx512bw)] = .{
380 result[@backingInt(Feature.avx512bw)] = .{
381381 .llvm_name = "avx512bw",
382382 .description = "Enable AVX-512 Byte and Word Instructions",
383383 .dependencies = featureSet(&[_]Feature{
384384 .avx512f,
385385 }),
386386 };
387 result[@intFromEnum(Feature.avx512cd)] = .{
387 result[@backingInt(Feature.avx512cd)] = .{
388388 .llvm_name = "avx512cd",
389389 .description = "Enable AVX-512 Conflict Detection Instructions",
390390 .dependencies = featureSet(&[_]Feature{
391391 .avx512f,
392392 }),
393393 };
394 result[@intFromEnum(Feature.avx512dq)] = .{
394 result[@backingInt(Feature.avx512dq)] = .{
395395 .llvm_name = "avx512dq",
396396 .description = "Enable AVX-512 Doubleword and Quadword Instructions",
397397 .dependencies = featureSet(&[_]Feature{
398398 .avx512f,
399399 }),
400400 };
401 result[@intFromEnum(Feature.avx512er)] = .{
401 result[@backingInt(Feature.avx512er)] = .{
402402 .llvm_name = null,
403403 .description = "Enable AVX-512 Exponential and Reciprocal Instructions",
404404 .dependencies = featureSet(&[_]Feature{
405405 .avx512f,
406406 }),
407407 };
408 result[@intFromEnum(Feature.avx512f)] = .{
408 result[@backingInt(Feature.avx512f)] = .{
409409 .llvm_name = "avx512f",
410410 .description = "Enable AVX-512 instructions",
411411 .dependencies = featureSet(&[_]Feature{
......@@ -414,341 +414,341 @@ pub const all_features = blk: {
414414 .fma,
415415 }),
416416 };
417 result[@intFromEnum(Feature.avx512fp16)] = .{
417 result[@backingInt(Feature.avx512fp16)] = .{
418418 .llvm_name = "avx512fp16",
419419 .description = "Support 16-bit floating point",
420420 .dependencies = featureSet(&[_]Feature{
421421 .avx512bw,
422422 }),
423423 };
424 result[@intFromEnum(Feature.avx512ifma)] = .{
424 result[@backingInt(Feature.avx512ifma)] = .{
425425 .llvm_name = "avx512ifma",
426426 .description = "Enable AVX-512 Integer Fused Multiple-Add",
427427 .dependencies = featureSet(&[_]Feature{
428428 .avx512f,
429429 }),
430430 };
431 result[@intFromEnum(Feature.avx512pf)] = .{
431 result[@backingInt(Feature.avx512pf)] = .{
432432 .llvm_name = null,
433433 .description = "Enable AVX-512 PreFetch Instructions",
434434 .dependencies = featureSet(&[_]Feature{
435435 .avx512f,
436436 }),
437437 };
438 result[@intFromEnum(Feature.avx512vbmi)] = .{
438 result[@backingInt(Feature.avx512vbmi)] = .{
439439 .llvm_name = "avx512vbmi",
440440 .description = "Enable AVX-512 Vector Byte Manipulation Instructions",
441441 .dependencies = featureSet(&[_]Feature{
442442 .avx512bw,
443443 }),
444444 };
445 result[@intFromEnum(Feature.avx512vbmi2)] = .{
445 result[@backingInt(Feature.avx512vbmi2)] = .{
446446 .llvm_name = "avx512vbmi2",
447447 .description = "Enable AVX-512 further Vector Byte Manipulation Instructions",
448448 .dependencies = featureSet(&[_]Feature{
449449 .avx512bw,
450450 }),
451451 };
452 result[@intFromEnum(Feature.avx512vl)] = .{
452 result[@backingInt(Feature.avx512vl)] = .{
453453 .llvm_name = "avx512vl",
454454 .description = "Enable AVX-512 Vector Length eXtensions",
455455 .dependencies = featureSet(&[_]Feature{
456456 .avx512f,
457457 }),
458458 };
459 result[@intFromEnum(Feature.avx512vnni)] = .{
459 result[@backingInt(Feature.avx512vnni)] = .{
460460 .llvm_name = "avx512vnni",
461461 .description = "Enable AVX-512 Vector Neural Network Instructions",
462462 .dependencies = featureSet(&[_]Feature{
463463 .avx512f,
464464 }),
465465 };
466 result[@intFromEnum(Feature.avx512vp2intersect)] = .{
466 result[@backingInt(Feature.avx512vp2intersect)] = .{
467467 .llvm_name = "avx512vp2intersect",
468468 .description = "Enable AVX-512 vp2intersect",
469469 .dependencies = featureSet(&[_]Feature{
470470 .avx512f,
471471 }),
472472 };
473 result[@intFromEnum(Feature.avx512vpopcntdq)] = .{
473 result[@backingInt(Feature.avx512vpopcntdq)] = .{
474474 .llvm_name = "avx512vpopcntdq",
475475 .description = "Enable AVX-512 Population Count Instructions",
476476 .dependencies = featureSet(&[_]Feature{
477477 .avx512f,
478478 }),
479479 };
480 result[@intFromEnum(Feature.avxifma)] = .{
480 result[@backingInt(Feature.avxifma)] = .{
481481 .llvm_name = "avxifma",
482482 .description = "Enable AVX-IFMA",
483483 .dependencies = featureSet(&[_]Feature{
484484 .avx2,
485485 }),
486486 };
487 result[@intFromEnum(Feature.avxneconvert)] = .{
487 result[@backingInt(Feature.avxneconvert)] = .{
488488 .llvm_name = "avxneconvert",
489489 .description = "Support AVX-NE-CONVERT instructions",
490490 .dependencies = featureSet(&[_]Feature{
491491 .avx2,
492492 }),
493493 };
494 result[@intFromEnum(Feature.avxvnni)] = .{
494 result[@backingInt(Feature.avxvnni)] = .{
495495 .llvm_name = "avxvnni",
496496 .description = "Support AVX_VNNI encoding",
497497 .dependencies = featureSet(&[_]Feature{
498498 .avx2,
499499 }),
500500 };
501 result[@intFromEnum(Feature.avxvnniint16)] = .{
501 result[@backingInt(Feature.avxvnniint16)] = .{
502502 .llvm_name = "avxvnniint16",
503503 .description = "Enable AVX-VNNI-INT16",
504504 .dependencies = featureSet(&[_]Feature{
505505 .avx2,
506506 }),
507507 };
508 result[@intFromEnum(Feature.avxvnniint8)] = .{
508 result[@backingInt(Feature.avxvnniint8)] = .{
509509 .llvm_name = "avxvnniint8",
510510 .description = "Enable AVX-VNNI-INT8",
511511 .dependencies = featureSet(&[_]Feature{
512512 .avx2,
513513 }),
514514 };
515 result[@intFromEnum(Feature.bmi)] = .{
515 result[@backingInt(Feature.bmi)] = .{
516516 .llvm_name = "bmi",
517517 .description = "Support BMI instructions",
518518 .dependencies = featureSet(&[_]Feature{}),
519519 };
520 result[@intFromEnum(Feature.bmi2)] = .{
520 result[@backingInt(Feature.bmi2)] = .{
521521 .llvm_name = "bmi2",
522522 .description = "Support BMI2 instructions",
523523 .dependencies = featureSet(&[_]Feature{}),
524524 };
525 result[@intFromEnum(Feature.branch_hint)] = .{
525 result[@backingInt(Feature.branch_hint)] = .{
526526 .llvm_name = "branch-hint",
527527 .description = "Target has branch hint feature",
528528 .dependencies = featureSet(&[_]Feature{}),
529529 };
530 result[@intFromEnum(Feature.branchfusion)] = .{
530 result[@backingInt(Feature.branchfusion)] = .{
531531 .llvm_name = "branchfusion",
532532 .description = "CMP/TEST can be fused with conditional branches",
533533 .dependencies = featureSet(&[_]Feature{}),
534534 };
535 result[@intFromEnum(Feature.bsf_bsr_0_clobbers_result)] = .{
535 result[@backingInt(Feature.bsf_bsr_0_clobbers_result)] = .{
536536 .llvm_name = null,
537537 .description = "BSF/BSR may clobber the lower 32-bits of the result register when the source is zero",
538538 .dependencies = featureSet(&[_]Feature{}),
539539 };
540 result[@intFromEnum(Feature.ccmp)] = .{
540 result[@backingInt(Feature.ccmp)] = .{
541541 .llvm_name = "ccmp",
542542 .description = "Support conditional cmp & test instructions",
543543 .dependencies = featureSet(&[_]Feature{}),
544544 };
545 result[@intFromEnum(Feature.cf)] = .{
545 result[@backingInt(Feature.cf)] = .{
546546 .llvm_name = "cf",
547547 .description = "Support conditional faulting",
548548 .dependencies = featureSet(&[_]Feature{}),
549549 };
550 result[@intFromEnum(Feature.cldemote)] = .{
550 result[@backingInt(Feature.cldemote)] = .{
551551 .llvm_name = "cldemote",
552552 .description = "Enable Cache Line Demote",
553553 .dependencies = featureSet(&[_]Feature{}),
554554 };
555 result[@intFromEnum(Feature.clflushopt)] = .{
555 result[@backingInt(Feature.clflushopt)] = .{
556556 .llvm_name = "clflushopt",
557557 .description = "Flush A Cache Line Optimized",
558558 .dependencies = featureSet(&[_]Feature{}),
559559 };
560 result[@intFromEnum(Feature.clwb)] = .{
560 result[@backingInt(Feature.clwb)] = .{
561561 .llvm_name = "clwb",
562562 .description = "Cache Line Write Back",
563563 .dependencies = featureSet(&[_]Feature{}),
564564 };
565 result[@intFromEnum(Feature.clzero)] = .{
565 result[@backingInt(Feature.clzero)] = .{
566566 .llvm_name = "clzero",
567567 .description = "Enable Cache Line Zero",
568568 .dependencies = featureSet(&[_]Feature{}),
569569 };
570 result[@intFromEnum(Feature.cmov)] = .{
570 result[@backingInt(Feature.cmov)] = .{
571571 .llvm_name = "cmov",
572572 .description = "Enable conditional move instructions",
573573 .dependencies = featureSet(&[_]Feature{}),
574574 };
575 result[@intFromEnum(Feature.cmpccxadd)] = .{
575 result[@backingInt(Feature.cmpccxadd)] = .{
576576 .llvm_name = "cmpccxadd",
577577 .description = "Support CMPCCXADD instructions",
578578 .dependencies = featureSet(&[_]Feature{}),
579579 };
580 result[@intFromEnum(Feature.crc32)] = .{
580 result[@backingInt(Feature.crc32)] = .{
581581 .llvm_name = "crc32",
582582 .description = "Enable SSE 4.2 CRC32 instruction (used when SSE4.2 is supported but function is GPR only)",
583583 .dependencies = featureSet(&[_]Feature{}),
584584 };
585 result[@intFromEnum(Feature.cx16)] = .{
585 result[@backingInt(Feature.cx16)] = .{
586586 .llvm_name = "cx16",
587587 .description = "64-bit with cmpxchg16b (this is true for most x86-64 chips, but not the first AMD chips)",
588588 .dependencies = featureSet(&[_]Feature{
589589 .cx8,
590590 }),
591591 };
592 result[@intFromEnum(Feature.cx8)] = .{
592 result[@backingInt(Feature.cx8)] = .{
593593 .llvm_name = "cx8",
594594 .description = "Support CMPXCHG8B instructions",
595595 .dependencies = featureSet(&[_]Feature{}),
596596 };
597 result[@intFromEnum(Feature.egpr)] = .{
597 result[@backingInt(Feature.egpr)] = .{
598598 .llvm_name = "egpr",
599599 .description = "Support extended general purpose register",
600600 .dependencies = featureSet(&[_]Feature{}),
601601 };
602 result[@intFromEnum(Feature.enqcmd)] = .{
602 result[@backingInt(Feature.enqcmd)] = .{
603603 .llvm_name = "enqcmd",
604604 .description = "Has ENQCMD instructions",
605605 .dependencies = featureSet(&[_]Feature{}),
606606 };
607 result[@intFromEnum(Feature.ermsb)] = .{
607 result[@backingInt(Feature.ermsb)] = .{
608608 .llvm_name = "ermsb",
609609 .description = "REP MOVS/STOS are fast",
610610 .dependencies = featureSet(&[_]Feature{}),
611611 };
612 result[@intFromEnum(Feature.f16c)] = .{
612 result[@backingInt(Feature.f16c)] = .{
613613 .llvm_name = "f16c",
614614 .description = "Support 16-bit floating point conversion instructions",
615615 .dependencies = featureSet(&[_]Feature{
616616 .avx,
617617 }),
618618 };
619 result[@intFromEnum(Feature.false_deps_getmant)] = .{
619 result[@backingInt(Feature.false_deps_getmant)] = .{
620620 .llvm_name = "false-deps-getmant",
621621 .description = "VGETMANTSS/SD/SH and VGETMANDPS/PD(memory version) has a false dependency on dest register",
622622 .dependencies = featureSet(&[_]Feature{}),
623623 };
624 result[@intFromEnum(Feature.false_deps_lzcnt_tzcnt)] = .{
624 result[@backingInt(Feature.false_deps_lzcnt_tzcnt)] = .{
625625 .llvm_name = "false-deps-lzcnt-tzcnt",
626626 .description = "LZCNT/TZCNT have a false dependency on dest register",
627627 .dependencies = featureSet(&[_]Feature{}),
628628 };
629 result[@intFromEnum(Feature.false_deps_mulc)] = .{
629 result[@backingInt(Feature.false_deps_mulc)] = .{
630630 .llvm_name = "false-deps-mulc",
631631 .description = "VF[C]MULCPH/SH has a false dependency on dest register",
632632 .dependencies = featureSet(&[_]Feature{}),
633633 };
634 result[@intFromEnum(Feature.false_deps_mullq)] = .{
634 result[@backingInt(Feature.false_deps_mullq)] = .{
635635 .llvm_name = "false-deps-mullq",
636636 .description = "VPMULLQ has a false dependency on dest register",
637637 .dependencies = featureSet(&[_]Feature{}),
638638 };
639 result[@intFromEnum(Feature.false_deps_perm)] = .{
639 result[@backingInt(Feature.false_deps_perm)] = .{
640640 .llvm_name = "false-deps-perm",
641641 .description = "VPERMD/Q/PS/PD has a false dependency on dest register",
642642 .dependencies = featureSet(&[_]Feature{}),
643643 };
644 result[@intFromEnum(Feature.false_deps_popcnt)] = .{
644 result[@backingInt(Feature.false_deps_popcnt)] = .{
645645 .llvm_name = "false-deps-popcnt",
646646 .description = "POPCNT has a false dependency on dest register",
647647 .dependencies = featureSet(&[_]Feature{}),
648648 };
649 result[@intFromEnum(Feature.false_deps_range)] = .{
649 result[@backingInt(Feature.false_deps_range)] = .{
650650 .llvm_name = "false-deps-range",
651651 .description = "VRANGEPD/PS/SD/SS has a false dependency on dest register",
652652 .dependencies = featureSet(&[_]Feature{}),
653653 };
654 result[@intFromEnum(Feature.fast_11bytenop)] = .{
654 result[@backingInt(Feature.fast_11bytenop)] = .{
655655 .llvm_name = "fast-11bytenop",
656656 .description = "Target can quickly decode up to 11 byte NOPs",
657657 .dependencies = featureSet(&[_]Feature{}),
658658 };
659 result[@intFromEnum(Feature.fast_15bytenop)] = .{
659 result[@backingInt(Feature.fast_15bytenop)] = .{
660660 .llvm_name = "fast-15bytenop",
661661 .description = "Target can quickly decode up to 15 byte NOPs",
662662 .dependencies = featureSet(&[_]Feature{}),
663663 };
664 result[@intFromEnum(Feature.fast_7bytenop)] = .{
664 result[@backingInt(Feature.fast_7bytenop)] = .{
665665 .llvm_name = "fast-7bytenop",
666666 .description = "Target can quickly decode up to 7 byte NOPs",
667667 .dependencies = featureSet(&[_]Feature{}),
668668 };
669 result[@intFromEnum(Feature.fast_bextr)] = .{
669 result[@backingInt(Feature.fast_bextr)] = .{
670670 .llvm_name = "fast-bextr",
671671 .description = "Indicates that the BEXTR instruction is implemented as a single uop with good throughput",
672672 .dependencies = featureSet(&[_]Feature{}),
673673 };
674 result[@intFromEnum(Feature.fast_dpwssd)] = .{
674 result[@backingInt(Feature.fast_dpwssd)] = .{
675675 .llvm_name = "fast-dpwssd",
676676 .description = "Prefer vpdpwssd instruction over vpmaddwd+vpaddd instruction sequence",
677677 .dependencies = featureSet(&[_]Feature{}),
678678 };
679 result[@intFromEnum(Feature.fast_gather)] = .{
679 result[@backingInt(Feature.fast_gather)] = .{
680680 .llvm_name = "fast-gather",
681681 .description = "Indicates if gather is reasonably fast (this is true for Skylake client and all AVX-512 CPUs)",
682682 .dependencies = featureSet(&[_]Feature{}),
683683 };
684 result[@intFromEnum(Feature.fast_hops)] = .{
684 result[@backingInt(Feature.fast_hops)] = .{
685685 .llvm_name = "fast-hops",
686686 .description = "Prefer horizontal vector math instructions (haddp, phsub, etc.) over normal vector instructions with shuffles",
687687 .dependencies = featureSet(&[_]Feature{}),
688688 };
689 result[@intFromEnum(Feature.fast_imm16)] = .{
689 result[@backingInt(Feature.fast_imm16)] = .{
690690 .llvm_name = "fast-imm16",
691691 .description = "Prefer a i16 instruction with i16 immediate over extension to i32",
692692 .dependencies = featureSet(&[_]Feature{}),
693693 };
694 result[@intFromEnum(Feature.fast_lzcnt)] = .{
694 result[@backingInt(Feature.fast_lzcnt)] = .{
695695 .llvm_name = "fast-lzcnt",
696696 .description = "LZCNT instructions are as fast as most simple integer ops",
697697 .dependencies = featureSet(&[_]Feature{}),
698698 };
699 result[@intFromEnum(Feature.fast_movbe)] = .{
699 result[@backingInt(Feature.fast_movbe)] = .{
700700 .llvm_name = "fast-movbe",
701701 .description = "Prefer a movbe over a single-use load + bswap / single-use bswap + store",
702702 .dependencies = featureSet(&[_]Feature{}),
703703 };
704 result[@intFromEnum(Feature.fast_scalar_fsqrt)] = .{
704 result[@backingInt(Feature.fast_scalar_fsqrt)] = .{
705705 .llvm_name = "fast-scalar-fsqrt",
706706 .description = "Scalar SQRT is fast (disable Newton-Raphson)",
707707 .dependencies = featureSet(&[_]Feature{}),
708708 };
709 result[@intFromEnum(Feature.fast_scalar_shift_masks)] = .{
709 result[@backingInt(Feature.fast_scalar_shift_masks)] = .{
710710 .llvm_name = "fast-scalar-shift-masks",
711711 .description = "Prefer a left/right scalar logical shift pair over a shift+and pair",
712712 .dependencies = featureSet(&[_]Feature{}),
713713 };
714 result[@intFromEnum(Feature.fast_shld_rotate)] = .{
714 result[@backingInt(Feature.fast_shld_rotate)] = .{
715715 .llvm_name = "fast-shld-rotate",
716716 .description = "SHLD can be used as a faster rotate",
717717 .dependencies = featureSet(&[_]Feature{}),
718718 };
719 result[@intFromEnum(Feature.fast_variable_crosslane_shuffle)] = .{
719 result[@backingInt(Feature.fast_variable_crosslane_shuffle)] = .{
720720 .llvm_name = "fast-variable-crosslane-shuffle",
721721 .description = "Cross-lane shuffles with variable masks are fast",
722722 .dependencies = featureSet(&[_]Feature{}),
723723 };
724 result[@intFromEnum(Feature.fast_variable_perlane_shuffle)] = .{
724 result[@backingInt(Feature.fast_variable_perlane_shuffle)] = .{
725725 .llvm_name = "fast-variable-perlane-shuffle",
726726 .description = "Per-lane shuffles with variable masks are fast",
727727 .dependencies = featureSet(&[_]Feature{}),
728728 };
729 result[@intFromEnum(Feature.fast_vector_fsqrt)] = .{
729 result[@backingInt(Feature.fast_vector_fsqrt)] = .{
730730 .llvm_name = "fast-vector-fsqrt",
731731 .description = "Vector SQRT is fast (disable Newton-Raphson)",
732732 .dependencies = featureSet(&[_]Feature{}),
733733 };
734 result[@intFromEnum(Feature.fast_vector_shift_masks)] = .{
734 result[@backingInt(Feature.fast_vector_shift_masks)] = .{
735735 .llvm_name = "fast-vector-shift-masks",
736736 .description = "Prefer a left/right vector logical shift pair over a shift+and pair",
737737 .dependencies = featureSet(&[_]Feature{}),
738738 };
739 result[@intFromEnum(Feature.faster_shift_than_shuffle)] = .{
739 result[@backingInt(Feature.faster_shift_than_shuffle)] = .{
740740 .llvm_name = "faster-shift-than-shuffle",
741741 .description = "Shifts are faster (or as fast) as shuffle",
742742 .dependencies = featureSet(&[_]Feature{}),
743743 };
744 result[@intFromEnum(Feature.fma)] = .{
744 result[@backingInt(Feature.fma)] = .{
745745 .llvm_name = "fma",
746746 .description = "Enable three-operand fused multiple-add",
747747 .dependencies = featureSet(&[_]Feature{
748748 .avx,
749749 }),
750750 };
751 result[@intFromEnum(Feature.fma4)] = .{
751 result[@backingInt(Feature.fma4)] = .{
752752 .llvm_name = "fma4",
753753 .description = "Enable four-operand fused multiple-add",
754754 .dependencies = featureSet(&[_]Feature{
......@@ -756,288 +756,288 @@ pub const all_features = blk: {
756756 .sse4a,
757757 }),
758758 };
759 result[@intFromEnum(Feature.fsgsbase)] = .{
759 result[@backingInt(Feature.fsgsbase)] = .{
760760 .llvm_name = "fsgsbase",
761761 .description = "Support FS/GS Base instructions",
762762 .dependencies = featureSet(&[_]Feature{}),
763763 };
764 result[@intFromEnum(Feature.fsrm)] = .{
764 result[@backingInt(Feature.fsrm)] = .{
765765 .llvm_name = "fsrm",
766766 .description = "REP MOVSB of short lengths is faster",
767767 .dependencies = featureSet(&[_]Feature{}),
768768 };
769 result[@intFromEnum(Feature.fxsr)] = .{
769 result[@backingInt(Feature.fxsr)] = .{
770770 .llvm_name = "fxsr",
771771 .description = "Support fxsave/fxrestore instructions",
772772 .dependencies = featureSet(&[_]Feature{}),
773773 };
774 result[@intFromEnum(Feature.gfni)] = .{
774 result[@backingInt(Feature.gfni)] = .{
775775 .llvm_name = "gfni",
776776 .description = "Enable Galois Field Arithmetic Instructions",
777777 .dependencies = featureSet(&[_]Feature{
778778 .sse2,
779779 }),
780780 };
781 result[@intFromEnum(Feature.harden_sls_ijmp)] = .{
781 result[@backingInt(Feature.harden_sls_ijmp)] = .{
782782 .llvm_name = "harden-sls-ijmp",
783783 .description = "Harden against straight line speculation across indirect JMP instructions.",
784784 .dependencies = featureSet(&[_]Feature{}),
785785 };
786 result[@intFromEnum(Feature.harden_sls_ret)] = .{
786 result[@backingInt(Feature.harden_sls_ret)] = .{
787787 .llvm_name = "harden-sls-ret",
788788 .description = "Harden against straight line speculation across RET instructions.",
789789 .dependencies = featureSet(&[_]Feature{}),
790790 };
791 result[@intFromEnum(Feature.hreset)] = .{
791 result[@backingInt(Feature.hreset)] = .{
792792 .llvm_name = "hreset",
793793 .description = "Has hreset instruction",
794794 .dependencies = featureSet(&[_]Feature{}),
795795 };
796 result[@intFromEnum(Feature.idivl_to_divb)] = .{
796 result[@backingInt(Feature.idivl_to_divb)] = .{
797797 .llvm_name = "idivl-to-divb",
798798 .description = "Use 8-bit divide for positive values less than 256",
799799 .dependencies = featureSet(&[_]Feature{}),
800800 };
801 result[@intFromEnum(Feature.idivq_to_divl)] = .{
801 result[@backingInt(Feature.idivq_to_divl)] = .{
802802 .llvm_name = "idivq-to-divl",
803803 .description = "Use 32-bit divide for positive values less than 2^32",
804804 .dependencies = featureSet(&[_]Feature{}),
805805 };
806 result[@intFromEnum(Feature.inline_asm_use_gpr32)] = .{
806 result[@backingInt(Feature.inline_asm_use_gpr32)] = .{
807807 .llvm_name = "inline-asm-use-gpr32",
808808 .description = "Enable use of GPR32 in inline assembly for APX",
809809 .dependencies = featureSet(&[_]Feature{}),
810810 };
811 result[@intFromEnum(Feature.invpcid)] = .{
811 result[@backingInt(Feature.invpcid)] = .{
812812 .llvm_name = "invpcid",
813813 .description = "Invalidate Process-Context Identifier",
814814 .dependencies = featureSet(&[_]Feature{}),
815815 };
816 result[@intFromEnum(Feature.kl)] = .{
816 result[@backingInt(Feature.kl)] = .{
817817 .llvm_name = "kl",
818818 .description = "Support Key Locker kl Instructions",
819819 .dependencies = featureSet(&[_]Feature{
820820 .sse2,
821821 }),
822822 };
823 result[@intFromEnum(Feature.lea_sp)] = .{
823 result[@backingInt(Feature.lea_sp)] = .{
824824 .llvm_name = "lea-sp",
825825 .description = "Use LEA for adjusting the stack pointer (this is an optimization for Intel Atom processors)",
826826 .dependencies = featureSet(&[_]Feature{}),
827827 };
828 result[@intFromEnum(Feature.lea_uses_ag)] = .{
828 result[@backingInt(Feature.lea_uses_ag)] = .{
829829 .llvm_name = "lea-uses-ag",
830830 .description = "LEA instruction needs inputs at AG stage",
831831 .dependencies = featureSet(&[_]Feature{}),
832832 };
833 result[@intFromEnum(Feature.lvi_cfi)] = .{
833 result[@backingInt(Feature.lvi_cfi)] = .{
834834 .llvm_name = "lvi-cfi",
835835 .description = "Prevent indirect calls/branches from using a memory operand, and precede all indirect calls/branches from a register with an LFENCE instruction to serialize control flow. Also decompose RET instructions into a POP+LFENCE+JMP sequence.",
836836 .dependencies = featureSet(&[_]Feature{}),
837837 };
838 result[@intFromEnum(Feature.lvi_load_hardening)] = .{
838 result[@backingInt(Feature.lvi_load_hardening)] = .{
839839 .llvm_name = "lvi-load-hardening",
840840 .description = "Insert LFENCE instructions to prevent data speculatively injected into loads from being used maliciously.",
841841 .dependencies = featureSet(&[_]Feature{}),
842842 };
843 result[@intFromEnum(Feature.lwp)] = .{
843 result[@backingInt(Feature.lwp)] = .{
844844 .llvm_name = "lwp",
845845 .description = "Enable LWP instructions",
846846 .dependencies = featureSet(&[_]Feature{}),
847847 };
848 result[@intFromEnum(Feature.lzcnt)] = .{
848 result[@backingInt(Feature.lzcnt)] = .{
849849 .llvm_name = "lzcnt",
850850 .description = "Support LZCNT instruction",
851851 .dependencies = featureSet(&[_]Feature{}),
852852 };
853 result[@intFromEnum(Feature.macrofusion)] = .{
853 result[@backingInt(Feature.macrofusion)] = .{
854854 .llvm_name = "macrofusion",
855855 .description = "Various instructions can be fused with conditional branches",
856856 .dependencies = featureSet(&[_]Feature{}),
857857 };
858 result[@intFromEnum(Feature.mmx)] = .{
858 result[@backingInt(Feature.mmx)] = .{
859859 .llvm_name = "mmx",
860860 .description = "Enable MMX instructions",
861861 .dependencies = featureSet(&[_]Feature{}),
862862 };
863 result[@intFromEnum(Feature.movbe)] = .{
863 result[@backingInt(Feature.movbe)] = .{
864864 .llvm_name = "movbe",
865865 .description = "Support MOVBE instruction",
866866 .dependencies = featureSet(&[_]Feature{}),
867867 };
868 result[@intFromEnum(Feature.movdir64b)] = .{
868 result[@backingInt(Feature.movdir64b)] = .{
869869 .llvm_name = "movdir64b",
870870 .description = "Support movdir64b instruction (direct store 64 bytes)",
871871 .dependencies = featureSet(&[_]Feature{}),
872872 };
873 result[@intFromEnum(Feature.movdiri)] = .{
873 result[@backingInt(Feature.movdiri)] = .{
874874 .llvm_name = "movdiri",
875875 .description = "Support movdiri instruction (direct store integer)",
876876 .dependencies = featureSet(&[_]Feature{}),
877877 };
878 result[@intFromEnum(Feature.movrs)] = .{
878 result[@backingInt(Feature.movrs)] = .{
879879 .llvm_name = "movrs",
880880 .description = "Enable MOVRS",
881881 .dependencies = featureSet(&[_]Feature{}),
882882 };
883 result[@intFromEnum(Feature.mwaitx)] = .{
883 result[@backingInt(Feature.mwaitx)] = .{
884884 .llvm_name = "mwaitx",
885885 .description = "Enable MONITORX/MWAITX timer functionality",
886886 .dependencies = featureSet(&[_]Feature{}),
887887 };
888 result[@intFromEnum(Feature.ndd)] = .{
888 result[@backingInt(Feature.ndd)] = .{
889889 .llvm_name = "ndd",
890890 .description = "Support non-destructive destination",
891891 .dependencies = featureSet(&[_]Feature{}),
892892 };
893 result[@intFromEnum(Feature.nf)] = .{
893 result[@backingInt(Feature.nf)] = .{
894894 .llvm_name = "nf",
895895 .description = "Support status flags update suppression",
896896 .dependencies = featureSet(&[_]Feature{}),
897897 };
898 result[@intFromEnum(Feature.no_bypass_delay)] = .{
898 result[@backingInt(Feature.no_bypass_delay)] = .{
899899 .llvm_name = "no-bypass-delay",
900900 .description = "Has no bypass delay when using the 'wrong' domain",
901901 .dependencies = featureSet(&[_]Feature{}),
902902 };
903 result[@intFromEnum(Feature.no_bypass_delay_blend)] = .{
903 result[@backingInt(Feature.no_bypass_delay_blend)] = .{
904904 .llvm_name = "no-bypass-delay-blend",
905905 .description = "Has no bypass delay when using the 'wrong' blend type",
906906 .dependencies = featureSet(&[_]Feature{}),
907907 };
908 result[@intFromEnum(Feature.no_bypass_delay_mov)] = .{
908 result[@backingInt(Feature.no_bypass_delay_mov)] = .{
909909 .llvm_name = "no-bypass-delay-mov",
910910 .description = "Has no bypass delay when using the 'wrong' mov type",
911911 .dependencies = featureSet(&[_]Feature{}),
912912 };
913 result[@intFromEnum(Feature.no_bypass_delay_shuffle)] = .{
913 result[@backingInt(Feature.no_bypass_delay_shuffle)] = .{
914914 .llvm_name = "no-bypass-delay-shuffle",
915915 .description = "Has no bypass delay when using the 'wrong' shuffle type",
916916 .dependencies = featureSet(&[_]Feature{}),
917917 };
918 result[@intFromEnum(Feature.nopl)] = .{
918 result[@backingInt(Feature.nopl)] = .{
919919 .llvm_name = "nopl",
920920 .description = "Enable NOPL instruction (generally pentium pro+)",
921921 .dependencies = featureSet(&[_]Feature{}),
922922 };
923 result[@intFromEnum(Feature.pad_short_functions)] = .{
923 result[@backingInt(Feature.pad_short_functions)] = .{
924924 .llvm_name = "pad-short-functions",
925925 .description = "Pad short functions (to prevent a stall when returning too early)",
926926 .dependencies = featureSet(&[_]Feature{}),
927927 };
928 result[@intFromEnum(Feature.pclmul)] = .{
928 result[@backingInt(Feature.pclmul)] = .{
929929 .llvm_name = "pclmul",
930930 .description = "Enable packed carry-less multiplication instructions",
931931 .dependencies = featureSet(&[_]Feature{
932932 .sse2,
933933 }),
934934 };
935 result[@intFromEnum(Feature.pconfig)] = .{
935 result[@backingInt(Feature.pconfig)] = .{
936936 .llvm_name = "pconfig",
937937 .description = "platform configuration instruction",
938938 .dependencies = featureSet(&[_]Feature{}),
939939 };
940 result[@intFromEnum(Feature.pku)] = .{
940 result[@backingInt(Feature.pku)] = .{
941941 .llvm_name = "pku",
942942 .description = "Enable protection keys",
943943 .dependencies = featureSet(&[_]Feature{}),
944944 };
945 result[@intFromEnum(Feature.popcnt)] = .{
945 result[@backingInt(Feature.popcnt)] = .{
946946 .llvm_name = "popcnt",
947947 .description = "Support POPCNT instruction",
948948 .dependencies = featureSet(&[_]Feature{}),
949949 };
950 result[@intFromEnum(Feature.ppx)] = .{
950 result[@backingInt(Feature.ppx)] = .{
951951 .llvm_name = "ppx",
952952 .description = "Support Push-Pop Acceleration",
953953 .dependencies = featureSet(&[_]Feature{}),
954954 };
955 result[@intFromEnum(Feature.prefer_128_bit)] = .{
955 result[@backingInt(Feature.prefer_128_bit)] = .{
956956 .llvm_name = "prefer-128-bit",
957957 .description = "Prefer 128-bit AVX instructions",
958958 .dependencies = featureSet(&[_]Feature{}),
959959 };
960 result[@intFromEnum(Feature.prefer_256_bit)] = .{
960 result[@backingInt(Feature.prefer_256_bit)] = .{
961961 .llvm_name = "prefer-256-bit",
962962 .description = "Prefer 256-bit AVX instructions",
963963 .dependencies = featureSet(&[_]Feature{}),
964964 };
965 result[@intFromEnum(Feature.prefer_legacy_setcc)] = .{
965 result[@backingInt(Feature.prefer_legacy_setcc)] = .{
966966 .llvm_name = "prefer-legacy-setcc",
967967 .description = "Prefer to emit legacy SetCC.",
968968 .dependencies = featureSet(&[_]Feature{}),
969969 };
970 result[@intFromEnum(Feature.prefer_mask_registers)] = .{
970 result[@backingInt(Feature.prefer_mask_registers)] = .{
971971 .llvm_name = "prefer-mask-registers",
972972 .description = "Prefer AVX512 mask registers over PTEST/MOVMSK",
973973 .dependencies = featureSet(&[_]Feature{}),
974974 };
975 result[@intFromEnum(Feature.prefer_movmsk_over_vtest)] = .{
975 result[@backingInt(Feature.prefer_movmsk_over_vtest)] = .{
976976 .llvm_name = "prefer-movmsk-over-vtest",
977977 .description = "Prefer movmsk over vtest instruction",
978978 .dependencies = featureSet(&[_]Feature{}),
979979 };
980 result[@intFromEnum(Feature.prefer_no_gather)] = .{
980 result[@backingInt(Feature.prefer_no_gather)] = .{
981981 .llvm_name = "prefer-no-gather",
982982 .description = "Prefer no gather instructions",
983983 .dependencies = featureSet(&[_]Feature{}),
984984 };
985 result[@intFromEnum(Feature.prefer_no_scatter)] = .{
985 result[@backingInt(Feature.prefer_no_scatter)] = .{
986986 .llvm_name = "prefer-no-scatter",
987987 .description = "Prefer no scatter instructions",
988988 .dependencies = featureSet(&[_]Feature{}),
989989 };
990 result[@intFromEnum(Feature.prefetchi)] = .{
990 result[@backingInt(Feature.prefetchi)] = .{
991991 .llvm_name = "prefetchi",
992992 .description = "Prefetch instruction with T0 or T1 Hint",
993993 .dependencies = featureSet(&[_]Feature{}),
994994 };
995 result[@intFromEnum(Feature.prefetchwt1)] = .{
995 result[@backingInt(Feature.prefetchwt1)] = .{
996996 .llvm_name = null,
997997 .description = "Prefetch with Intent to Write and T1 Hint",
998998 .dependencies = featureSet(&[_]Feature{}),
999999 };
1000 result[@intFromEnum(Feature.prfchw)] = .{
1000 result[@backingInt(Feature.prfchw)] = .{
10011001 .llvm_name = "prfchw",
10021002 .description = "Support PRFCHW instructions",
10031003 .dependencies = featureSet(&[_]Feature{}),
10041004 };
1005 result[@intFromEnum(Feature.ptwrite)] = .{
1005 result[@backingInt(Feature.ptwrite)] = .{
10061006 .llvm_name = "ptwrite",
10071007 .description = "Support ptwrite instruction",
10081008 .dependencies = featureSet(&[_]Feature{}),
10091009 };
1010 result[@intFromEnum(Feature.push2pop2)] = .{
1010 result[@backingInt(Feature.push2pop2)] = .{
10111011 .llvm_name = "push2pop2",
10121012 .description = "Support PUSH2/POP2 instructions",
10131013 .dependencies = featureSet(&[_]Feature{}),
10141014 };
1015 result[@intFromEnum(Feature.raoint)] = .{
1015 result[@backingInt(Feature.raoint)] = .{
10161016 .llvm_name = "raoint",
10171017 .description = "Support RAO-INT instructions",
10181018 .dependencies = featureSet(&[_]Feature{}),
10191019 };
1020 result[@intFromEnum(Feature.rdpid)] = .{
1020 result[@backingInt(Feature.rdpid)] = .{
10211021 .llvm_name = "rdpid",
10221022 .description = "Support RDPID instructions",
10231023 .dependencies = featureSet(&[_]Feature{}),
10241024 };
1025 result[@intFromEnum(Feature.rdpru)] = .{
1025 result[@backingInt(Feature.rdpru)] = .{
10261026 .llvm_name = "rdpru",
10271027 .description = "Support RDPRU instructions",
10281028 .dependencies = featureSet(&[_]Feature{}),
10291029 };
1030 result[@intFromEnum(Feature.rdrnd)] = .{
1030 result[@backingInt(Feature.rdrnd)] = .{
10311031 .llvm_name = "rdrnd",
10321032 .description = "Support RDRAND instruction",
10331033 .dependencies = featureSet(&[_]Feature{}),
10341034 };
1035 result[@intFromEnum(Feature.rdseed)] = .{
1035 result[@backingInt(Feature.rdseed)] = .{
10361036 .llvm_name = "rdseed",
10371037 .description = "Support RDSEED instruction",
10381038 .dependencies = featureSet(&[_]Feature{}),
10391039 };
1040 result[@intFromEnum(Feature.retpoline)] = .{
1040 result[@backingInt(Feature.retpoline)] = .{
10411041 .llvm_name = "retpoline",
10421042 .description = "Remove speculation of indirect branches from the generated code, either by avoiding them entirely or lowering them with a speculation blocking construct",
10431043 .dependencies = featureSet(&[_]Feature{
......@@ -1045,180 +1045,180 @@ pub const all_features = blk: {
10451045 .retpoline_indirect_calls,
10461046 }),
10471047 };
1048 result[@intFromEnum(Feature.retpoline_external_thunk)] = .{
1048 result[@backingInt(Feature.retpoline_external_thunk)] = .{
10491049 .llvm_name = "retpoline-external-thunk",
10501050 .description = "When lowering an indirect call or branch using a `retpoline`, rely on the specified user provided thunk rather than emitting one ourselves. Only has effect when combined with some other retpoline feature",
10511051 .dependencies = featureSet(&[_]Feature{
10521052 .retpoline_indirect_calls,
10531053 }),
10541054 };
1055 result[@intFromEnum(Feature.retpoline_indirect_branches)] = .{
1055 result[@backingInt(Feature.retpoline_indirect_branches)] = .{
10561056 .llvm_name = "retpoline-indirect-branches",
10571057 .description = "Remove speculation of indirect branches from the generated code",
10581058 .dependencies = featureSet(&[_]Feature{}),
10591059 };
1060 result[@intFromEnum(Feature.retpoline_indirect_calls)] = .{
1060 result[@backingInt(Feature.retpoline_indirect_calls)] = .{
10611061 .llvm_name = "retpoline-indirect-calls",
10621062 .description = "Remove speculation of indirect calls from the generated code",
10631063 .dependencies = featureSet(&[_]Feature{}),
10641064 };
1065 result[@intFromEnum(Feature.rtm)] = .{
1065 result[@backingInt(Feature.rtm)] = .{
10661066 .llvm_name = "rtm",
10671067 .description = "Support RTM instructions",
10681068 .dependencies = featureSet(&[_]Feature{}),
10691069 };
1070 result[@intFromEnum(Feature.sahf)] = .{
1070 result[@backingInt(Feature.sahf)] = .{
10711071 .llvm_name = "sahf",
10721072 .description = "Support LAHF and SAHF instructions in 64-bit mode",
10731073 .dependencies = featureSet(&[_]Feature{}),
10741074 };
1075 result[@intFromEnum(Feature.sbb_dep_breaking)] = .{
1075 result[@backingInt(Feature.sbb_dep_breaking)] = .{
10761076 .llvm_name = "sbb-dep-breaking",
10771077 .description = "SBB with same register has no source dependency",
10781078 .dependencies = featureSet(&[_]Feature{}),
10791079 };
1080 result[@intFromEnum(Feature.serialize)] = .{
1080 result[@backingInt(Feature.serialize)] = .{
10811081 .llvm_name = "serialize",
10821082 .description = "Has serialize instruction",
10831083 .dependencies = featureSet(&[_]Feature{}),
10841084 };
1085 result[@intFromEnum(Feature.seses)] = .{
1085 result[@backingInt(Feature.seses)] = .{
10861086 .llvm_name = "seses",
10871087 .description = "Prevent speculative execution side channel timing attacks by inserting a speculation barrier before memory reads, memory writes, and conditional branches. Implies LVI Control Flow integrity.",
10881088 .dependencies = featureSet(&[_]Feature{
10891089 .lvi_cfi,
10901090 }),
10911091 };
1092 result[@intFromEnum(Feature.sgx)] = .{
1092 result[@backingInt(Feature.sgx)] = .{
10931093 .llvm_name = "sgx",
10941094 .description = "Enable Software Guard Extensions",
10951095 .dependencies = featureSet(&[_]Feature{}),
10961096 };
1097 result[@intFromEnum(Feature.sha)] = .{
1097 result[@backingInt(Feature.sha)] = .{
10981098 .llvm_name = "sha",
10991099 .description = "Enable SHA instructions",
11001100 .dependencies = featureSet(&[_]Feature{
11011101 .sse2,
11021102 }),
11031103 };
1104 result[@intFromEnum(Feature.sha512)] = .{
1104 result[@backingInt(Feature.sha512)] = .{
11051105 .llvm_name = "sha512",
11061106 .description = "Support SHA512 instructions",
11071107 .dependencies = featureSet(&[_]Feature{
11081108 .avx2,
11091109 }),
11101110 };
1111 result[@intFromEnum(Feature.shstk)] = .{
1111 result[@backingInt(Feature.shstk)] = .{
11121112 .llvm_name = "shstk",
11131113 .description = "Support CET Shadow-Stack instructions",
11141114 .dependencies = featureSet(&[_]Feature{}),
11151115 };
1116 result[@intFromEnum(Feature.slow_3ops_lea)] = .{
1116 result[@backingInt(Feature.slow_3ops_lea)] = .{
11171117 .llvm_name = "slow-3ops-lea",
11181118 .description = "LEA instruction with 3 ops or certain registers is slow",
11191119 .dependencies = featureSet(&[_]Feature{}),
11201120 };
1121 result[@intFromEnum(Feature.slow_incdec)] = .{
1121 result[@backingInt(Feature.slow_incdec)] = .{
11221122 .llvm_name = "slow-incdec",
11231123 .description = "INC and DEC instructions are slower than ADD and SUB",
11241124 .dependencies = featureSet(&[_]Feature{}),
11251125 };
1126 result[@intFromEnum(Feature.slow_lea)] = .{
1126 result[@backingInt(Feature.slow_lea)] = .{
11271127 .llvm_name = "slow-lea",
11281128 .description = "LEA instruction with certain arguments is slow",
11291129 .dependencies = featureSet(&[_]Feature{}),
11301130 };
1131 result[@intFromEnum(Feature.slow_pmaddwd)] = .{
1131 result[@backingInt(Feature.slow_pmaddwd)] = .{
11321132 .llvm_name = "slow-pmaddwd",
11331133 .description = "PMADDWD is slower than PMULLD",
11341134 .dependencies = featureSet(&[_]Feature{}),
11351135 };
1136 result[@intFromEnum(Feature.slow_pmulld)] = .{
1136 result[@backingInt(Feature.slow_pmulld)] = .{
11371137 .llvm_name = "slow-pmulld",
11381138 .description = "PMULLD instruction is slow (compared to PMULLW/PMULHW and PMULUDQ)",
11391139 .dependencies = featureSet(&[_]Feature{}),
11401140 };
1141 result[@intFromEnum(Feature.slow_pmullq)] = .{
1141 result[@backingInt(Feature.slow_pmullq)] = .{
11421142 .llvm_name = "slow-pmullq",
11431143 .description = "PMULLQ instruction is slow",
11441144 .dependencies = featureSet(&[_]Feature{}),
11451145 };
1146 result[@intFromEnum(Feature.slow_shld)] = .{
1146 result[@backingInt(Feature.slow_shld)] = .{
11471147 .llvm_name = "slow-shld",
11481148 .description = "SHLD instruction is slow",
11491149 .dependencies = featureSet(&[_]Feature{}),
11501150 };
1151 result[@intFromEnum(Feature.slow_two_mem_ops)] = .{
1151 result[@backingInt(Feature.slow_two_mem_ops)] = .{
11521152 .llvm_name = "slow-two-mem-ops",
11531153 .description = "Two memory operand instructions are slow",
11541154 .dependencies = featureSet(&[_]Feature{}),
11551155 };
1156 result[@intFromEnum(Feature.slow_unaligned_mem_16)] = .{
1156 result[@backingInt(Feature.slow_unaligned_mem_16)] = .{
11571157 .llvm_name = "slow-unaligned-mem-16",
11581158 .description = "Slow unaligned 16-byte memory access",
11591159 .dependencies = featureSet(&[_]Feature{}),
11601160 };
1161 result[@intFromEnum(Feature.slow_unaligned_mem_32)] = .{
1161 result[@backingInt(Feature.slow_unaligned_mem_32)] = .{
11621162 .llvm_name = "slow-unaligned-mem-32",
11631163 .description = "Slow unaligned 32-byte memory access",
11641164 .dependencies = featureSet(&[_]Feature{}),
11651165 };
1166 result[@intFromEnum(Feature.sm3)] = .{
1166 result[@backingInt(Feature.sm3)] = .{
11671167 .llvm_name = "sm3",
11681168 .description = "Support SM3 instructions",
11691169 .dependencies = featureSet(&[_]Feature{
11701170 .avx,
11711171 }),
11721172 };
1173 result[@intFromEnum(Feature.sm4)] = .{
1173 result[@backingInt(Feature.sm4)] = .{
11741174 .llvm_name = "sm4",
11751175 .description = "Support SM4 instructions",
11761176 .dependencies = featureSet(&[_]Feature{
11771177 .avx2,
11781178 }),
11791179 };
1180 result[@intFromEnum(Feature.smap)] = .{
1180 result[@backingInt(Feature.smap)] = .{
11811181 .llvm_name = null,
11821182 .description = "Enable Supervisor Mode Access Prevention",
11831183 .dependencies = featureSet(&[_]Feature{}),
11841184 };
1185 result[@intFromEnum(Feature.smep)] = .{
1185 result[@backingInt(Feature.smep)] = .{
11861186 .llvm_name = null,
11871187 .description = "Enable Supervisor Mode Execution Prevention",
11881188 .dependencies = featureSet(&[_]Feature{}),
11891189 };
1190 result[@intFromEnum(Feature.soft_float)] = .{
1190 result[@backingInt(Feature.soft_float)] = .{
11911191 .llvm_name = "soft-float",
11921192 .description = "Use software floating point features",
11931193 .dependencies = featureSet(&[_]Feature{}),
11941194 };
1195 result[@intFromEnum(Feature.sse)] = .{
1195 result[@backingInt(Feature.sse)] = .{
11961196 .llvm_name = "sse",
11971197 .description = "Enable SSE instructions",
11981198 .dependencies = featureSet(&[_]Feature{}),
11991199 };
1200 result[@intFromEnum(Feature.sse2)] = .{
1200 result[@backingInt(Feature.sse2)] = .{
12011201 .llvm_name = "sse2",
12021202 .description = "Enable SSE2 instructions",
12031203 .dependencies = featureSet(&[_]Feature{
12041204 .sse,
12051205 }),
12061206 };
1207 result[@intFromEnum(Feature.sse3)] = .{
1207 result[@backingInt(Feature.sse3)] = .{
12081208 .llvm_name = "sse3",
12091209 .description = "Enable SSE3 instructions",
12101210 .dependencies = featureSet(&[_]Feature{
12111211 .sse2,
12121212 }),
12131213 };
1214 result[@intFromEnum(Feature.sse4_1)] = .{
1214 result[@backingInt(Feature.sse4_1)] = .{
12151215 .llvm_name = "sse4.1",
12161216 .description = "Enable SSE 4.1 instructions",
12171217 .dependencies = featureSet(&[_]Feature{
12181218 .ssse3,
12191219 }),
12201220 };
1221 result[@intFromEnum(Feature.sse4_2)] = .{
1221 result[@backingInt(Feature.sse4_2)] = .{
12221222 .llvm_name = "sse4.2",
12231223 .description = "Enable SSE 4.2 instructions",
12241224 .dependencies = featureSet(&[_]Feature{
......@@ -1226,66 +1226,66 @@ pub const all_features = blk: {
12261226 .sse4_1,
12271227 }),
12281228 };
1229 result[@intFromEnum(Feature.sse4a)] = .{
1229 result[@backingInt(Feature.sse4a)] = .{
12301230 .llvm_name = "sse4a",
12311231 .description = "Support SSE 4a instructions",
12321232 .dependencies = featureSet(&[_]Feature{
12331233 .sse3,
12341234 }),
12351235 };
1236 result[@intFromEnum(Feature.sse_unaligned_mem)] = .{
1236 result[@backingInt(Feature.sse_unaligned_mem)] = .{
12371237 .llvm_name = "sse-unaligned-mem",
12381238 .description = "Allow unaligned memory operands with SSE instructions (this may require setting a configuration bit in the processor)",
12391239 .dependencies = featureSet(&[_]Feature{}),
12401240 };
1241 result[@intFromEnum(Feature.ssse3)] = .{
1241 result[@backingInt(Feature.ssse3)] = .{
12421242 .llvm_name = "ssse3",
12431243 .description = "Enable SSSE3 instructions",
12441244 .dependencies = featureSet(&[_]Feature{
12451245 .sse3,
12461246 }),
12471247 };
1248 result[@intFromEnum(Feature.tagged_globals)] = .{
1248 result[@backingInt(Feature.tagged_globals)] = .{
12491249 .llvm_name = "tagged-globals",
12501250 .description = "Use an instruction sequence for taking the address of a global that allows a memory tag in the upper address bits.",
12511251 .dependencies = featureSet(&[_]Feature{}),
12521252 };
1253 result[@intFromEnum(Feature.tbm)] = .{
1253 result[@backingInt(Feature.tbm)] = .{
12541254 .llvm_name = "tbm",
12551255 .description = "Enable TBM instructions",
12561256 .dependencies = featureSet(&[_]Feature{}),
12571257 };
1258 result[@intFromEnum(Feature.tsxldtrk)] = .{
1258 result[@backingInt(Feature.tsxldtrk)] = .{
12591259 .llvm_name = "tsxldtrk",
12601260 .description = "Support TSXLDTRK instructions",
12611261 .dependencies = featureSet(&[_]Feature{}),
12621262 };
1263 result[@intFromEnum(Feature.tuning_fast_imm_vector_shift)] = .{
1263 result[@backingInt(Feature.tuning_fast_imm_vector_shift)] = .{
12641264 .llvm_name = "tuning-fast-imm-vector-shift",
12651265 .description = "Vector shifts are fast (2/cycle) as opposed to slow (1/cycle)",
12661266 .dependencies = featureSet(&[_]Feature{}),
12671267 };
1268 result[@intFromEnum(Feature.uintr)] = .{
1268 result[@backingInt(Feature.uintr)] = .{
12691269 .llvm_name = "uintr",
12701270 .description = "Has UINTR Instructions",
12711271 .dependencies = featureSet(&[_]Feature{}),
12721272 };
1273 result[@intFromEnum(Feature.use_glm_div_sqrt_costs)] = .{
1273 result[@backingInt(Feature.use_glm_div_sqrt_costs)] = .{
12741274 .llvm_name = "use-glm-div-sqrt-costs",
12751275 .description = "Use Goldmont specific floating point div/sqrt costs",
12761276 .dependencies = featureSet(&[_]Feature{}),
12771277 };
1278 result[@intFromEnum(Feature.use_slm_arith_costs)] = .{
1278 result[@backingInt(Feature.use_slm_arith_costs)] = .{
12791279 .llvm_name = "use-slm-arith-costs",
12801280 .description = "Use Silvermont specific arithmetic costs",
12811281 .dependencies = featureSet(&[_]Feature{}),
12821282 };
1283 result[@intFromEnum(Feature.usermsr)] = .{
1283 result[@backingInt(Feature.usermsr)] = .{
12841284 .llvm_name = "usermsr",
12851285 .description = "Support USERMSR instructions",
12861286 .dependencies = featureSet(&[_]Feature{}),
12871287 };
1288 result[@intFromEnum(Feature.vaes)] = .{
1288 result[@backingInt(Feature.vaes)] = .{
12891289 .llvm_name = "vaes",
12901290 .description = "Promote selected AES instructions to AVX512/AVX registers",
12911291 .dependencies = featureSet(&[_]Feature{
......@@ -1293,7 +1293,7 @@ pub const all_features = blk: {
12931293 .avx2,
12941294 }),
12951295 };
1296 result[@intFromEnum(Feature.vpclmulqdq)] = .{
1296 result[@backingInt(Feature.vpclmulqdq)] = .{
12971297 .llvm_name = "vpclmulqdq",
12981298 .description = "Enable vpclmulqdq instructions",
12991299 .dependencies = featureSet(&[_]Feature{
......@@ -1301,72 +1301,72 @@ pub const all_features = blk: {
13011301 .pclmul,
13021302 }),
13031303 };
1304 result[@intFromEnum(Feature.vzeroupper)] = .{
1304 result[@backingInt(Feature.vzeroupper)] = .{
13051305 .llvm_name = "vzeroupper",
13061306 .description = "Should insert vzeroupper instructions",
13071307 .dependencies = featureSet(&[_]Feature{}),
13081308 };
1309 result[@intFromEnum(Feature.waitpkg)] = .{
1309 result[@backingInt(Feature.waitpkg)] = .{
13101310 .llvm_name = "waitpkg",
13111311 .description = "Wait and pause enhancements",
13121312 .dependencies = featureSet(&[_]Feature{}),
13131313 };
1314 result[@intFromEnum(Feature.wbnoinvd)] = .{
1314 result[@backingInt(Feature.wbnoinvd)] = .{
13151315 .llvm_name = "wbnoinvd",
13161316 .description = "Write Back No Invalidate",
13171317 .dependencies = featureSet(&[_]Feature{}),
13181318 };
1319 result[@intFromEnum(Feature.widekl)] = .{
1319 result[@backingInt(Feature.widekl)] = .{
13201320 .llvm_name = "widekl",
13211321 .description = "Support Key Locker wide Instructions",
13221322 .dependencies = featureSet(&[_]Feature{
13231323 .kl,
13241324 }),
13251325 };
1326 result[@intFromEnum(Feature.x32)] = .{
1326 result[@backingInt(Feature.x32)] = .{
13271327 .llvm_name = "x32",
13281328 .description = "64-bit with ILP32 programming model (e.g. x32 ABI)",
13291329 .dependencies = featureSet(&[_]Feature{}),
13301330 };
1331 result[@intFromEnum(Feature.x87)] = .{
1331 result[@backingInt(Feature.x87)] = .{
13321332 .llvm_name = "x87",
13331333 .description = "Enable X87 float instructions",
13341334 .dependencies = featureSet(&[_]Feature{}),
13351335 };
1336 result[@intFromEnum(Feature.xop)] = .{
1336 result[@backingInt(Feature.xop)] = .{
13371337 .llvm_name = "xop",
13381338 .description = "Enable XOP instructions",
13391339 .dependencies = featureSet(&[_]Feature{
13401340 .fma4,
13411341 }),
13421342 };
1343 result[@intFromEnum(Feature.xsave)] = .{
1343 result[@backingInt(Feature.xsave)] = .{
13441344 .llvm_name = "xsave",
13451345 .description = "Support xsave instructions",
13461346 .dependencies = featureSet(&[_]Feature{}),
13471347 };
1348 result[@intFromEnum(Feature.xsavec)] = .{
1348 result[@backingInt(Feature.xsavec)] = .{
13491349 .llvm_name = "xsavec",
13501350 .description = "Support xsavec instructions",
13511351 .dependencies = featureSet(&[_]Feature{
13521352 .xsave,
13531353 }),
13541354 };
1355 result[@intFromEnum(Feature.xsaveopt)] = .{
1355 result[@backingInt(Feature.xsaveopt)] = .{
13561356 .llvm_name = "xsaveopt",
13571357 .description = "Support xsaveopt instructions",
13581358 .dependencies = featureSet(&[_]Feature{
13591359 .xsave,
13601360 }),
13611361 };
1362 result[@intFromEnum(Feature.xsaves)] = .{
1362 result[@backingInt(Feature.xsaves)] = .{
13631363 .llvm_name = "xsaves",
13641364 .description = "Support xsaves instructions",
13651365 .dependencies = featureSet(&[_]Feature{
13661366 .xsave,
13671367 }),
13681368 };
1369 result[@intFromEnum(Feature.zu)] = .{
1369 result[@backingInt(Feature.zu)] = .{
13701370 .llvm_name = "zu",
13711371 .description = "Support zero-upper SETcc/IMUL",
13721372 .dependencies = featureSet(&[_]Feature{}),
lib/std/Target/xtensa.zig+37-37
......@@ -53,197 +53,197 @@ pub const all_features = blk: {
5353 const len = @typeInfo(Feature).@"enum".field_names.len;
5454 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
5555 var result: [len]CpuFeature = undefined;
56 result[@intFromEnum(Feature.bool)] = .{
56 result[@backingInt(Feature.bool)] = .{
5757 .llvm_name = "bool",
5858 .description = "Enable Xtensa Boolean extension",
5959 .dependencies = featureSet(&[_]Feature{}),
6060 };
61 result[@intFromEnum(Feature.clamps)] = .{
61 result[@backingInt(Feature.clamps)] = .{
6262 .llvm_name = "clamps",
6363 .description = "Enable Xtensa CLAMPS option",
6464 .dependencies = featureSet(&[_]Feature{}),
6565 };
66 result[@intFromEnum(Feature.coprocessor)] = .{
66 result[@backingInt(Feature.coprocessor)] = .{
6767 .llvm_name = "coprocessor",
6868 .description = "Enable Xtensa Coprocessor option",
6969 .dependencies = featureSet(&[_]Feature{}),
7070 };
71 result[@intFromEnum(Feature.dcache)] = .{
71 result[@backingInt(Feature.dcache)] = .{
7272 .llvm_name = "dcache",
7373 .description = "Enable Xtensa Data Cache option",
7474 .dependencies = featureSet(&[_]Feature{}),
7575 };
76 result[@intFromEnum(Feature.debug)] = .{
76 result[@backingInt(Feature.debug)] = .{
7777 .llvm_name = "debug",
7878 .description = "Enable Xtensa Debug option",
7979 .dependencies = featureSet(&[_]Feature{}),
8080 };
81 result[@intFromEnum(Feature.density)] = .{
81 result[@backingInt(Feature.density)] = .{
8282 .llvm_name = "density",
8383 .description = "Enable Density instructions",
8484 .dependencies = featureSet(&[_]Feature{}),
8585 };
86 result[@intFromEnum(Feature.dfpaccel)] = .{
86 result[@backingInt(Feature.dfpaccel)] = .{
8787 .llvm_name = "dfpaccel",
8888 .description = "Enable Xtensa Double Precision FP acceleration",
8989 .dependencies = featureSet(&[_]Feature{}),
9090 };
91 result[@intFromEnum(Feature.div32)] = .{
91 result[@backingInt(Feature.div32)] = .{
9292 .llvm_name = "div32",
9393 .description = "Enable Xtensa Div32 option",
9494 .dependencies = featureSet(&[_]Feature{}),
9595 };
96 result[@intFromEnum(Feature.exception)] = .{
96 result[@backingInt(Feature.exception)] = .{
9797 .llvm_name = "exception",
9898 .description = "Enable Xtensa Exception option",
9999 .dependencies = featureSet(&[_]Feature{}),
100100 };
101 result[@intFromEnum(Feature.extendedl32r)] = .{
101 result[@backingInt(Feature.extendedl32r)] = .{
102102 .llvm_name = "extendedl32r",
103103 .description = "Enable Xtensa Extended L32R option",
104104 .dependencies = featureSet(&[_]Feature{}),
105105 };
106 result[@intFromEnum(Feature.forced_atomics)] = .{
106 result[@backingInt(Feature.forced_atomics)] = .{
107107 .llvm_name = "forced-atomics",
108108 .description = "Assume that lock-free native-width atomics are available",
109109 .dependencies = featureSet(&[_]Feature{}),
110110 };
111 result[@intFromEnum(Feature.fp)] = .{
111 result[@backingInt(Feature.fp)] = .{
112112 .llvm_name = "fp",
113113 .description = "Enable Xtensa Single FP instructions",
114114 .dependencies = featureSet(&[_]Feature{}),
115115 };
116 result[@intFromEnum(Feature.highpriinterrupts)] = .{
116 result[@backingInt(Feature.highpriinterrupts)] = .{
117117 .llvm_name = "highpriinterrupts",
118118 .description = "Enable Xtensa HighPriInterrupts option",
119119 .dependencies = featureSet(&[_]Feature{}),
120120 };
121 result[@intFromEnum(Feature.highpriinterrupts_level3)] = .{
121 result[@backingInt(Feature.highpriinterrupts_level3)] = .{
122122 .llvm_name = "highpriinterrupts-level3",
123123 .description = "Enable Xtensa HighPriInterrupts Level3",
124124 .dependencies = featureSet(&[_]Feature{
125125 .highpriinterrupts,
126126 }),
127127 };
128 result[@intFromEnum(Feature.highpriinterrupts_level4)] = .{
128 result[@backingInt(Feature.highpriinterrupts_level4)] = .{
129129 .llvm_name = "highpriinterrupts-level4",
130130 .description = "Enable Xtensa HighPriInterrupts Level4",
131131 .dependencies = featureSet(&[_]Feature{
132132 .highpriinterrupts,
133133 }),
134134 };
135 result[@intFromEnum(Feature.highpriinterrupts_level5)] = .{
135 result[@backingInt(Feature.highpriinterrupts_level5)] = .{
136136 .llvm_name = "highpriinterrupts-level5",
137137 .description = "Enable Xtensa HighPriInterrupts Level5",
138138 .dependencies = featureSet(&[_]Feature{
139139 .highpriinterrupts,
140140 }),
141141 };
142 result[@intFromEnum(Feature.highpriinterrupts_level6)] = .{
142 result[@backingInt(Feature.highpriinterrupts_level6)] = .{
143143 .llvm_name = "highpriinterrupts-level6",
144144 .description = "Enable Xtensa HighPriInterrupts Level6",
145145 .dependencies = featureSet(&[_]Feature{
146146 .highpriinterrupts,
147147 }),
148148 };
149 result[@intFromEnum(Feature.highpriinterrupts_level7)] = .{
149 result[@backingInt(Feature.highpriinterrupts_level7)] = .{
150150 .llvm_name = "highpriinterrupts-level7",
151151 .description = "Enable Xtensa HighPriInterrupts Level7",
152152 .dependencies = featureSet(&[_]Feature{
153153 .highpriinterrupts,
154154 }),
155155 };
156 result[@intFromEnum(Feature.interrupt)] = .{
156 result[@backingInt(Feature.interrupt)] = .{
157157 .llvm_name = "interrupt",
158158 .description = "Enable Xtensa Interrupt option",
159159 .dependencies = featureSet(&[_]Feature{}),
160160 };
161 result[@intFromEnum(Feature.loop)] = .{
161 result[@backingInt(Feature.loop)] = .{
162162 .llvm_name = "loop",
163163 .description = "Enable Xtensa Loop extension",
164164 .dependencies = featureSet(&[_]Feature{}),
165165 };
166 result[@intFromEnum(Feature.mac16)] = .{
166 result[@backingInt(Feature.mac16)] = .{
167167 .llvm_name = "mac16",
168168 .description = "Enable Xtensa MAC16 instructions",
169169 .dependencies = featureSet(&[_]Feature{}),
170170 };
171 result[@intFromEnum(Feature.minmax)] = .{
171 result[@backingInt(Feature.minmax)] = .{
172172 .llvm_name = "minmax",
173173 .description = "Enable Xtensa MINMAX option",
174174 .dependencies = featureSet(&[_]Feature{}),
175175 };
176 result[@intFromEnum(Feature.miscsr)] = .{
176 result[@backingInt(Feature.miscsr)] = .{
177177 .llvm_name = "miscsr",
178178 .description = "Enable Xtensa Miscellaneous SR option",
179179 .dependencies = featureSet(&[_]Feature{}),
180180 };
181 result[@intFromEnum(Feature.mul16)] = .{
181 result[@backingInt(Feature.mul16)] = .{
182182 .llvm_name = "mul16",
183183 .description = "Enable Xtensa Mul16 option",
184184 .dependencies = featureSet(&[_]Feature{}),
185185 };
186 result[@intFromEnum(Feature.mul32)] = .{
186 result[@backingInt(Feature.mul32)] = .{
187187 .llvm_name = "mul32",
188188 .description = "Enable Xtensa Mul32 option",
189189 .dependencies = featureSet(&[_]Feature{}),
190190 };
191 result[@intFromEnum(Feature.mul32high)] = .{
191 result[@backingInt(Feature.mul32high)] = .{
192192 .llvm_name = "mul32high",
193193 .description = "Enable Xtensa Mul32High option",
194194 .dependencies = featureSet(&[_]Feature{}),
195195 };
196 result[@intFromEnum(Feature.nsa)] = .{
196 result[@backingInt(Feature.nsa)] = .{
197197 .llvm_name = "nsa",
198198 .description = "Enable Xtensa NSA option",
199199 .dependencies = featureSet(&[_]Feature{}),
200200 };
201 result[@intFromEnum(Feature.prid)] = .{
201 result[@backingInt(Feature.prid)] = .{
202202 .llvm_name = "prid",
203203 .description = "Enable Xtensa Processor ID option",
204204 .dependencies = featureSet(&[_]Feature{}),
205205 };
206 result[@intFromEnum(Feature.regprotect)] = .{
206 result[@backingInt(Feature.regprotect)] = .{
207207 .llvm_name = "regprotect",
208208 .description = "Enable Xtensa Region Protection option",
209209 .dependencies = featureSet(&[_]Feature{}),
210210 };
211 result[@intFromEnum(Feature.rvector)] = .{
211 result[@backingInt(Feature.rvector)] = .{
212212 .llvm_name = "rvector",
213213 .description = "Enable Xtensa Relocatable Vector option",
214214 .dependencies = featureSet(&[_]Feature{}),
215215 };
216 result[@intFromEnum(Feature.s32c1i)] = .{
216 result[@backingInt(Feature.s32c1i)] = .{
217217 .llvm_name = "s32c1i",
218218 .description = "Enable Xtensa S32C1I option",
219219 .dependencies = featureSet(&[_]Feature{}),
220220 };
221 result[@intFromEnum(Feature.sext)] = .{
221 result[@backingInt(Feature.sext)] = .{
222222 .llvm_name = "sext",
223223 .description = "Enable Xtensa Sign Extend option",
224224 .dependencies = featureSet(&[_]Feature{}),
225225 };
226 result[@intFromEnum(Feature.threadptr)] = .{
226 result[@backingInt(Feature.threadptr)] = .{
227227 .llvm_name = "threadptr",
228228 .description = "Enable Xtensa THREADPTR option",
229229 .dependencies = featureSet(&[_]Feature{}),
230230 };
231 result[@intFromEnum(Feature.timers1)] = .{
231 result[@backingInt(Feature.timers1)] = .{
232232 .llvm_name = "timers1",
233233 .description = "Enable Xtensa Timers 1",
234234 .dependencies = featureSet(&[_]Feature{}),
235235 };
236 result[@intFromEnum(Feature.timers2)] = .{
236 result[@backingInt(Feature.timers2)] = .{
237237 .llvm_name = "timers2",
238238 .description = "Enable Xtensa Timers 2",
239239 .dependencies = featureSet(&[_]Feature{}),
240240 };
241 result[@intFromEnum(Feature.timers3)] = .{
241 result[@backingInt(Feature.timers3)] = .{
242242 .llvm_name = "timers3",
243243 .description = "Enable Xtensa Timers 3",
244244 .dependencies = featureSet(&[_]Feature{}),
245245 };
246 result[@intFromEnum(Feature.windowed)] = .{
246 result[@backingInt(Feature.windowed)] = .{
247247 .llvm_name = "windowed",
248248 .description = "Enable Xtensa Windowed Register option",
249249 .dependencies = featureSet(&[_]Feature{}),
lib/std/Thread.zig+13-13
......@@ -67,7 +67,7 @@ pub fn setName(self: Thread, io: Io, name: []const u8) SetNameError!void {
6767 return;
6868 } else {
6969 const err = std.c.pthread_setname_np(self.getHandle(), name_with_terminator.ptr);
70 switch (@as(posix.E, @enumFromInt(err))) {
70 switch (@as(posix.E, @fromBackingInt(@intCast(err)))) {
7171 .SUCCESS => return,
7272 .RANGE => unreachable,
7373 else => |e| return posix.unexpectedErrno(e),
......@@ -101,14 +101,14 @@ pub fn setName(self: Thread, io: Io, name: []const u8) SetNameError!void {
101101 if (self.getHandle() != std.c.pthread_self()) return error.Unsupported;
102102
103103 const err = std.c.pthread_setname_np(name_with_terminator.ptr);
104 switch (@as(posix.E, @enumFromInt(err))) {
104 switch (@as(posix.E, @fromBackingInt(@intCast(err)))) {
105105 .SUCCESS => return,
106106 else => |e| return posix.unexpectedErrno(e),
107107 }
108108 },
109109 .serenity => if (use_pthreads) {
110110 const err = std.c.pthread_setname_np(self.getHandle(), name_with_terminator.ptr);
111 switch (@as(posix.E, @enumFromInt(err))) {
111 switch (@as(posix.E, @fromBackingInt(@intCast(err)))) {
112112 .SUCCESS => return,
113113 .NAMETOOLONG => unreachable,
114114 .SRCH => unreachable,
......@@ -117,7 +117,7 @@ pub fn setName(self: Thread, io: Io, name: []const u8) SetNameError!void {
117117 },
118118 .netbsd, .illumos => if (use_pthreads) {
119119 const err = std.c.pthread_setname_np(self.getHandle(), name_with_terminator.ptr, null);
120 switch (@as(posix.E, @enumFromInt(err))) {
120 switch (@as(posix.E, @fromBackingInt(@intCast(err)))) {
121121 .SUCCESS => return,
122122 .INVAL => unreachable,
123123 .SRCH => unreachable,
......@@ -135,7 +135,7 @@ pub fn setName(self: Thread, io: Io, name: []const u8) SetNameError!void {
135135 },
136136 .dragonfly => if (use_pthreads) {
137137 const err = std.c.pthread_setname_np(self.getHandle(), name_with_terminator.ptr);
138 switch (@as(posix.E, @enumFromInt(err))) {
138 switch (@as(posix.E, @fromBackingInt(@intCast(err)))) {
139139 .SUCCESS => return,
140140 .INVAL => unreachable,
141141 .FAULT => unreachable,
......@@ -168,7 +168,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
168168 return std.mem.sliceTo(buffer, 0);
169169 } else {
170170 const err = std.c.pthread_getname_np(self.getHandle(), buffer.ptr, max_name_len + 1);
171 switch (@as(posix.E, @enumFromInt(err))) {
171 switch (@as(posix.E, @fromBackingInt(@intCast(err)))) {
172172 .SUCCESS => return std.mem.sliceTo(buffer, 0),
173173 .RANGE => unreachable,
174174 else => |e| return posix.unexpectedErrno(e),
......@@ -211,7 +211,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
211211 },
212212 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => if (use_pthreads) {
213213 const err = std.c.pthread_getname_np(self.getHandle(), buffer.ptr, max_name_len + 1);
214 switch (@as(posix.E, @enumFromInt(err))) {
214 switch (@as(posix.E, @fromBackingInt(@intCast(err)))) {
215215 .SUCCESS => return std.mem.sliceTo(buffer, 0),
216216 .SRCH => unreachable,
217217 else => |e| return posix.unexpectedErrno(e),
......@@ -219,7 +219,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
219219 },
220220 .serenity => if (use_pthreads) {
221221 const err = std.c.pthread_getname_np(self.getHandle(), buffer.ptr, max_name_len + 1);
222 switch (@as(posix.E, @enumFromInt(err))) {
222 switch (@as(posix.E, @fromBackingInt(@intCast(err)))) {
223223 .SUCCESS => return,
224224 .NAMETOOLONG => unreachable,
225225 .SRCH => unreachable,
......@@ -229,7 +229,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
229229 },
230230 .netbsd, .illumos => if (use_pthreads) {
231231 const err = std.c.pthread_getname_np(self.getHandle(), buffer.ptr, max_name_len + 1);
232 switch (@as(posix.E, @enumFromInt(err))) {
232 switch (@as(posix.E, @fromBackingInt(@intCast(err)))) {
233233 .SUCCESS => return std.mem.sliceTo(buffer, 0),
234234 .INVAL => unreachable,
235235 .SRCH => unreachable,
......@@ -245,7 +245,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co
245245 },
246246 .dragonfly => if (use_pthreads) {
247247 const err = std.c.pthread_getname_np(self.getHandle(), buffer.ptr, max_name_len + 1);
248 switch (@as(posix.E, @enumFromInt(err))) {
248 switch (@as(posix.E, @fromBackingInt(@intCast(err)))) {
249249 .SUCCESS => return std.mem.sliceTo(buffer, 0),
250250 .INVAL => unreachable,
251251 .FAULT => unreachable,
......@@ -429,7 +429,7 @@ fn callFn(comptime f: anytype, args: anytype) switch (Impl) {
429429
430430 const status = @call(.auto, f, args);
431431 switch (Impl) {
432 WindowsThreadImpl => return @enumFromInt(status),
432 WindowsThreadImpl => return @fromBackingInt(@intCast(status)),
433433 LinuxThreadImpl => return status,
434434 // pthreads don't support exit status, ignore value
435435 PosixThreadImpl => return default_value,
......@@ -598,7 +598,7 @@ const WindowsThreadImpl = struct {
598598 instance,
599599 .{ .CREATE_SUSPENDED = true },
600600 0,
601 @enumFromInt(stack_size),
601 @fromBackingInt(@intCast(stack_size)),
602602 .default,
603603 &attr_list,
604604 )) {
......@@ -712,7 +712,7 @@ const PosixThreadImpl = struct {
712712 // The "proper" way to get the cpu count would be to query
713713 // /dev/kstat via ioctls, and traverse a linked list for each
714714 // cpu. (illumos)
715 const rc = c.sysconf(@intFromEnum(std.c._SC.NPROCESSORS_ONLN));
715 const rc = c.sysconf(@backingInt(std.c._SC.NPROCESSORS_ONLN));
716716 return switch (posix.errno(rc)) {
717717 .SUCCESS => @as(usize, @intCast(rc)),
718718 else => |err| posix.unexpectedErrno(err),
lib/std/c.zig+20-20
......@@ -74,7 +74,7 @@ pub inline fn versionCheck(comptime version: std.SemanticVersion) bool {
7474
7575/// Get the errno if rc is -1 and SUCCESS if rc is not -1.
7676pub fn errno(rc: anytype) E {
77 return if (rc == -1) @enumFromInt(_errno().*) else .SUCCESS;
77 return if (rc == -1) @fromBackingInt(@intCast(_errno().*)) else .SUCCESS;
7878}
7979
8080pub const ino_t = switch (native_os) {
......@@ -3720,16 +3720,16 @@ pub const W = switch (native_os) {
37203720 return @as(u8, @intCast(x >> 8));
37213721 }
37223722 pub fn TERMSIG(x: u32) SIG {
3723 return @enumFromInt(status(x));
3723 return @fromBackingInt(@intCast(status(x)));
37243724 }
37253725 pub fn STOPSIG(x: u32) SIG {
3726 return @enumFromInt(x >> 8);
3726 return @fromBackingInt(@intCast(x >> 8));
37273727 }
37283728 pub fn IFEXITED(x: u32) bool {
37293729 return status(x) == 0;
37303730 }
37313731 pub fn IFSTOPPED(x: u32) bool {
3732 return status(x) == stopped and @as(u32, @intFromEnum(STOPSIG(x))) != 0x13;
3732 return status(x) == stopped and @as(u32, @backingInt(STOPSIG(x))) != 0x13;
37333733 }
37343734 pub fn IFSIGNALED(x: u32) bool {
37353735 return status(x) != stopped and status(x) != 0;
......@@ -3753,10 +3753,10 @@ pub const W = switch (native_os) {
37533753 return @as(u8, @intCast((s & 0xff00) >> 8));
37543754 }
37553755 pub fn TERMSIG(s: u32) SIG {
3756 return @enumFromInt(s & 0x7f);
3756 return @fromBackingInt(@intCast(s & 0x7f));
37573757 }
37583758 pub fn STOPSIG(s: u32) SIG {
3759 return @enumFromInt(EXITSTATUS(s));
3759 return @fromBackingInt(@intCast(EXITSTATUS(s)));
37603760 }
37613761 pub fn IFEXITED(s: u32) bool {
37623762 return (s & 0x7f) == 0;
......@@ -3781,10 +3781,10 @@ pub const W = switch (native_os) {
37813781 return @as(u8, @intCast((s >> 8) & 0xff));
37823782 }
37833783 pub fn TERMSIG(s: u32) SIG {
3784 return @enumFromInt(s & 0x7f);
3784 return @fromBackingInt(@intCast(s & 0x7f));
37853785 }
37863786 pub fn STOPSIG(s: u32) SIG {
3787 return @enumFromInt(EXITSTATUS(s));
3787 return @fromBackingInt(@intCast(EXITSTATUS(s)));
37883788 }
37893789 pub fn IFEXITED(s: u32) bool {
37903790 return (s & 0x7f) == 0;
......@@ -3815,10 +3815,10 @@ pub const W = switch (native_os) {
38153815 return @as(u8, @intCast((s >> 8) & 0xff));
38163816 }
38173817 pub fn TERMSIG(s: u32) SIG {
3818 return @enumFromInt(s & 0x7f);
3818 return @fromBackingInt(@intCast(s & 0x7f));
38193819 }
38203820 pub fn STOPSIG(s: u32) SIG {
3821 return @enumFromInt(EXITSTATUS(s));
3821 return @fromBackingInt(@intCast(EXITSTATUS(s)));
38223822 }
38233823 pub fn IFEXITED(s: u32) bool {
38243824 return (s & 0x7f) == 0;
......@@ -3849,10 +3849,10 @@ pub const W = switch (native_os) {
38493849 return @as(u8, @intCast((s & 0xff00) >> 8));
38503850 }
38513851 pub fn TERMSIG(s: u32) SIG {
3852 return @enumFromInt(s & 0x7f);
3852 return @fromBackingInt(@intCast(s & 0x7f));
38533853 }
38543854 pub fn STOPSIG(s: u32) SIG {
3855 return @enumFromInt(EXITSTATUS(s));
3855 return @fromBackingInt(@intCast(EXITSTATUS(s)));
38563856 }
38573857 pub fn IFEXITED(s: u32) bool {
38583858 return (s & 0x7f) == 0;
......@@ -3877,11 +3877,11 @@ pub const W = switch (native_os) {
38773877 }
38783878
38793879 pub fn TERMSIG(s: u32) SIG {
3880 return @enumFromInt((s >> 8) & 0xff);
3880 return @fromBackingInt(@intCast((s >> 8) & 0xff));
38813881 }
38823882
38833883 pub fn STOPSIG(s: u32) SIG {
3884 return @enumFromInt((s >> 16) & 0xff);
3884 return @fromBackingInt(@intCast((s >> 16) & 0xff));
38853885 }
38863886
38873887 pub fn IFEXITED(s: u32) bool {
......@@ -3905,10 +3905,10 @@ pub const W = switch (native_os) {
39053905 return @as(u8, @intCast((s >> 8) & 0xff));
39063906 }
39073907 pub fn TERMSIG(s: u32) SIG {
3908 return @enumFromInt(s & 0x7f);
3908 return @fromBackingInt(@intCast(s & 0x7f));
39093909 }
39103910 pub fn STOPSIG(s: u32) SIG {
3911 return @enumFromInt(EXITSTATUS(s));
3911 return @fromBackingInt(@intCast(EXITSTATUS(s)));
39123912 }
39133913 pub fn IFEXITED(s: u32) bool {
39143914 return (s & 0x7f) == 0;
......@@ -3940,11 +3940,11 @@ pub const W = switch (native_os) {
39403940 }
39413941
39423942 pub fn STOPSIG(s: u32) SIG {
3943 return @enumFromInt(EXITSTATUS(s));
3943 return @fromBackingInt(@intCast(EXITSTATUS(s)));
39443944 }
39453945
39463946 pub fn TERMSIG(s: u32) SIG {
3947 return @enumFromInt(s & 0x7f);
3947 return @fromBackingInt(@intCast(s & 0x7f));
39483948 }
39493949
39503950 pub fn IFEXITED(s: u32) bool {
......@@ -10551,7 +10551,7 @@ const sigrt_private = struct {
1055110551 return switch (native_os) {
1055210552 .freebsd => 65,
1055310553 .netbsd => 33,
10554 .illumos => @truncate(sysconf(@intFromEnum(_SC.SIGRT_MIN))),
10554 .illumos => @truncate(sysconf(@backingInt(_SC.SIGRT_MIN))),
1055510555 .haiku => @truncate(@as(c_uint, @bitCast(private.__signal_get_sigrtmin()))),
1055610556 else => @truncate(@as(c_uint, @bitCast(private.__libc_current_sigrtmin()))),
1055710557 };
......@@ -10561,7 +10561,7 @@ const sigrt_private = struct {
1056110561 return switch (native_os) {
1056210562 .freebsd => 126,
1056310563 .netbsd => 63,
10564 .illumos => @truncate(sysconf(@intFromEnum(_SC.SIGRT_MAX))),
10564 .illumos => @truncate(sysconf(@backingInt(_SC.SIGRT_MAX))),
1056510565 .haiku => @truncate(@as(c_uint, @bitCast(private.__signal_get_sigrtmax()))),
1056610566 else => @truncate(@as(c_uint, @bitCast(private.__libc_current_sigrtmax()))),
1056710567 };
lib/std/c/darwin.zig+2-2
......@@ -1138,10 +1138,10 @@ pub const mach_msg_return_t = enum(kern_return_t) {
11381138 error_code: mach_msg_return_t,
11391139 resource_error: ?MACH.MSG,
11401140 } {
1141 const return_code: mach_msg_return_t = @enumFromInt(@intFromEnum(ret) & ~MACH.MSG.MASK);
1141 const return_code: mach_msg_return_t = @fromBackingInt(@intCast(@backingInt(ret) & ~MACH.MSG.MASK));
11421142 switch (return_code) {
11431143 .RCV_HEADER_ERROR, .RCV_BODY_ERROR => {
1144 const resource_error: MACH.MSG = @bitCast(@intFromEnum(ret) & MACH.MSG.MASK);
1144 const resource_error: MACH.MSG = @bitCast(@backingInt(ret) & MACH.MSG.MASK);
11451145 return .{
11461146 .error_code = return_code,
11471147 .resource_error = resource_error,
lib/std/c/illumos.zig+1-1
......@@ -322,7 +322,7 @@ const IoCtlCommand = enum(u32) {
322322fn ioImpl(cmd: IoCtlCommand, io_type: u8, nr: u8, comptime IOT: type) i32 {
323323 const size = @as(u32, @intCast(@as(u8, @truncate(@sizeOf(IOT))))) << 16;
324324 const t = @as(u32, @intCast(io_type)) << 8;
325 return @as(i32, @bitCast(@intFromEnum(cmd) | size | t | nr));
325 return @as(i32, @bitCast(@backingInt(cmd) | size | t | nr));
326326}
327327
328328pub fn IO(io_type: u8, nr: u8) i32 {
lib/std/coff.zig+13-13
......@@ -99,8 +99,8 @@ pub const Header = extern struct {
9999
100100// OptionalHeader.magic values
101101// see https://msdn.microsoft.com/en-us/library/windows/desktop/ms680339(v=vs.85).aspx
102pub const IMAGE_NT_OPTIONAL_HDR32_MAGIC = @intFromEnum(OptionalHeader.Magic.PE32);
103pub const IMAGE_NT_OPTIONAL_HDR64_MAGIC = @intFromEnum(OptionalHeader.Magic.@"PE32+");
102pub const IMAGE_NT_OPTIONAL_HDR32_MAGIC = @backingInt(OptionalHeader.Magic.PE32);
103pub const IMAGE_NT_OPTIONAL_HDR64_MAGIC = @backingInt(OptionalHeader.Magic.@"PE32+");
104104
105105pub const DllFlags = packed struct(u16) {
106106 _reserved_0: u5 = 0,
......@@ -655,12 +655,12 @@ pub const SectionHeader = extern struct {
655655
656656 pub fn toByteUnits(a: Align) ?u16 {
657657 if (a == .NONE) return null;
658 return @as(u16, 1) << (@intFromEnum(a) - 1);
658 return @as(u16, 1) << (@backingInt(a) - 1);
659659 }
660660
661661 pub fn fromByteUnits(n: u16) Align {
662662 std.debug.assert(std.math.isPowerOfTwo(n));
663 return @enumFromInt(@ctz(n) + 1);
663 return @fromBackingInt(@intCast(@ctz(n) + 1));
664664 }
665665
666666 pub fn alignment(a: Align) ?std.mem.Alignment {
......@@ -1058,9 +1058,9 @@ pub const Coff = struct {
10581058 assert(self.is_image);
10591059
10601060 const data_dirs = self.getDataDirectories();
1061 if (@intFromEnum(IMAGE.DIRECTORY_ENTRY.DEBUG) >= data_dirs.len) return null;
1061 if (@backingInt(IMAGE.DIRECTORY_ENTRY.DEBUG) >= data_dirs.len) return null;
10621062
1063 const debug_dir = data_dirs[@intFromEnum(IMAGE.DIRECTORY_ENTRY.DEBUG)];
1063 const debug_dir = data_dirs[@backingInt(IMAGE.DIRECTORY_ENTRY.DEBUG)];
10641064 var reader: std.Io.Reader = .fixed(self.data);
10651065
10661066 if (self.is_loaded) {
......@@ -1125,7 +1125,7 @@ pub const Coff = struct {
11251125
11261126 pub fn getImageBase(self: Coff) u64 {
11271127 const hdr = self.getOptionalHeader();
1128 return switch (@intFromEnum(hdr.magic)) {
1128 return switch (@backingInt(hdr.magic)) {
11291129 IMAGE_NT_OPTIONAL_HDR32_MAGIC => self.getOptionalHeader32().image_base,
11301130 IMAGE_NT_OPTIONAL_HDR64_MAGIC => self.getOptionalHeader64().image_base,
11311131 else => unreachable, // We assume we have validated the header already
......@@ -1134,7 +1134,7 @@ pub const Coff = struct {
11341134
11351135 pub fn getNumberOfDataDirectories(self: Coff) u32 {
11361136 const hdr = self.getOptionalHeader();
1137 return switch (@intFromEnum(hdr.magic)) {
1137 return switch (@backingInt(hdr.magic)) {
11381138 IMAGE_NT_OPTIONAL_HDR32_MAGIC => self.getOptionalHeader32().number_of_rva_and_sizes,
11391139 IMAGE_NT_OPTIONAL_HDR64_MAGIC => self.getOptionalHeader64().number_of_rva_and_sizes,
11401140 else => unreachable, // We assume we have validated the header already
......@@ -1143,7 +1143,7 @@ pub const Coff = struct {
11431143
11441144 pub fn getDataDirectories(self: *const Coff) []align(1) const ImageDataDirectory {
11451145 const hdr = self.getOptionalHeader();
1146 const size: usize = switch (@intFromEnum(hdr.magic)) {
1146 const size: usize = switch (@backingInt(hdr.magic)) {
11471147 IMAGE_NT_OPTIONAL_HDR32_MAGIC => @sizeOf(OptionalHeader.PE32),
11481148 IMAGE_NT_OPTIONAL_HDR64_MAGIC => @sizeOf(OptionalHeader.@"PE32+"),
11491149 else => unreachable, // We assume we have validated the header already
......@@ -1268,9 +1268,9 @@ pub const Symtab = struct {
12681268 return .{
12691269 .name = raw[0..8].*,
12701270 .value = mem.readInt(u32, raw[8..12], .little),
1271 .section_number = @as(SectionNumber, @enumFromInt(mem.readInt(u16, raw[12..14], .little))),
1271 .section_number = @as(SectionNumber, @fromBackingInt(@intCast(mem.readInt(u16, raw[12..14], .little)))),
12721272 .type = @as(SymType, @bitCast(mem.readInt(u16, raw[14..16], .little))),
1273 .storage_class = @as(StorageClass, @enumFromInt(raw[16])),
1273 .storage_class = @as(StorageClass, @fromBackingInt(@intCast(raw[16]))),
12741274 .number_of_aux_symbols = raw[17],
12751275 };
12761276 }
......@@ -1298,7 +1298,7 @@ pub const Symtab = struct {
12981298 fn asWeakExtDef(raw: []const u8) WeakExternalDefinition {
12991299 return .{
13001300 .tag_index = mem.readInt(u32, raw[0..4], .little),
1301 .flag = @as(WeakExternalFlag, @enumFromInt(mem.readInt(u32, raw[4..8], .little))),
1301 .flag = @as(WeakExternalFlag, @fromBackingInt(@intCast(mem.readInt(u32, raw[4..8], .little)))),
13021302 .unused = raw[8..18].*,
13031303 };
13041304 }
......@@ -1316,7 +1316,7 @@ pub const Symtab = struct {
13161316 .number_of_linenumbers = mem.readInt(u16, raw[6..8], .little),
13171317 .checksum = mem.readInt(u32, raw[8..12], .little),
13181318 .number = mem.readInt(u16, raw[12..14], .little),
1319 .selection = @as(ComdatSelection, @enumFromInt(raw[14])),
1319 .selection = @as(ComdatSelection, @fromBackingInt(@intCast(raw[14]))),
13201320 .unused = raw[15..18].*,
13211321 };
13221322 }
lib/std/compress/flate/Compress.zig+13-13
......@@ -1679,7 +1679,7 @@ pub const Raw = struct {
16791679 const is_pattern = rem_splat != splat and vec.len == pattern.len;
16801680 if (is_pattern) assert(pattern.len != 0); // exceeded countSplat
16811681
1682 if (!is_pattern or rem_splat == 0 or pattern.len > @intFromEnum(block_limit) / 2) {
1682 if (!is_pattern or rem_splat == 0 or pattern.len > @backingInt(block_limit) / 2) {
16831683 rem_data_elem = rem_data_elem[vec.len..];
16841684 block_limit = block_limit.subtract(vec.len).?;
16851685
......@@ -1701,7 +1701,7 @@ pub const Raw = struct {
17011701 }
17021702 if (block_limit == .nothing) break;
17031703 } else {
1704 const out_splat = @intFromEnum(block_limit) / pattern.len;
1704 const out_splat = @backingInt(block_limit) / pattern.len;
17051705 assert(out_splat >= 2);
17061706
17071707 try r.output.writeSplatAll(vecs[0..vecs_n], out_splat);
......@@ -2155,7 +2155,7 @@ pub const Huffman = struct {
21552155 const bytes = block_limit.sliceConst(rem_data_elem);
21562156 const is_pattern = rem_splat != splat and bytes.len == pattern.len;
21572157
2158 const mul = if (!is_pattern) 1 else @intFromEnum(block_limit) / pattern.len;
2158 const mul = if (!is_pattern) 1 else @backingInt(block_limit) / pattern.len;
21592159 assert(mul != 0);
21602160 if (is_pattern) assert(mul <= rem_splat + 1); // one more for `rem_data`
21612161
......@@ -2231,11 +2231,11 @@ pub const Huffman = struct {
22312231 @subWithOverflow(data.len - (rem_data.len - @intFromBool(in_pattern)), 1);
22322232 const is_elem = in_data == 0 and data[vec_elem_i].len == rem_data_elem.len;
22332233
2234 if (!is_elem or rem_data_elem.len > @intFromEnum(block_limit)) {
2234 if (!is_elem or rem_data_elem.len > @backingInt(block_limit)) {
22352235 block_limit = block_limit.subtract(rem_data_elem.len) orelse {
2236 try h.bit_writer.output.writeAll(rem_data_elem[0..@intFromEnum(block_limit)]);
2237 h.hasher.update(rem_data_elem[0..@intFromEnum(block_limit)]);
2238 rem_data_elem = rem_data_elem[@intFromEnum(block_limit)..];
2236 try h.bit_writer.output.writeAll(rem_data_elem[0..@backingInt(block_limit)]);
2237 h.hasher.update(rem_data_elem[0..@backingInt(block_limit)]);
2238 rem_data_elem = rem_data_elem[@backingInt(block_limit)..];
22392239 assert(rem_data_elem.len != 0);
22402240 break;
22412241 };
......@@ -2259,7 +2259,7 @@ pub const Huffman = struct {
22592259 vec_n += 1;
22602260 } else vec_splat: {
22612261 // For `pattern.len == 0`, the value of `vec_splat` does not matter.
2262 const vec_splat = @intFromEnum(vlimit) / @max(1, pattern.len);
2262 const vec_splat = @backingInt(vlimit) / @max(1, pattern.len);
22632263 if (pattern.len != 0) assert(vec_splat <= rem_splat + 1);
22642264 vlimit = vlimit.subtract(pattern.len * vec_splat).?;
22652265 vec_n += 1;
......@@ -2267,7 +2267,7 @@ pub const Huffman = struct {
22672267 };
22682268
22692269 const n = if (vec_n != 0) n: {
2270 assert(@intFromEnum(block_limit) - @intFromEnum(vlimit) ==
2270 assert(@backingInt(block_limit) - @backingInt(vlimit) ==
22712271 Writer.countSplat(rem_data[0..vec_n], vec_splat));
22722272 break :n try h.bit_writer.output.writeSplat(rem_data[0..vec_n], vec_splat);
22732273 } else 0; // Still go into the case below to advance the vector
......@@ -2278,8 +2278,8 @@ pub const Huffman = struct {
22782278 const elem = rem_data[0];
22792279 rem_data = rem_data[1..];
22802280 consumed = consumed.subtract(elem.len) orelse {
2281 h.hasher.update(elem[0..@intFromEnum(consumed)]);
2282 rem_data_elem = elem[@intFromEnum(consumed)..];
2281 h.hasher.update(elem[0..@backingInt(consumed)]);
2282 rem_data_elem = elem[@backingInt(consumed)..];
22832283 break;
22842284 };
22852285 h.hasher.update(elem);
......@@ -2297,8 +2297,8 @@ pub const Huffman = struct {
22972297 break;
22982298 }
22992299
2300 const splatted = @intFromEnum(consumed) / pattern.len;
2301 const partial = @intFromEnum(consumed) % pattern.len;
2300 const splatted = @backingInt(consumed) / pattern.len;
2301 const partial = @backingInt(consumed) % pattern.len;
23022302 for (0..splatted) |_| h.hasher.update(pattern);
23032303 h.hasher.update(pattern[0..partial]);
23042304
lib/std/compress/flate/Decompress.zig+9-9
......@@ -131,7 +131,7 @@ fn discardDirect(r: *Reader, limit: std.Io.Limit) Reader.Error!usize {
131131 error.WriteFailed => unreachable,
132132 error.ReadFailed, error.EndOfStream => |e| return e,
133133 };
134 assert(n <= @intFromEnum(limit));
134 assert(n <= @backingInt(limit));
135135 return n;
136136}
137137
......@@ -268,7 +268,7 @@ fn streamFallible(d: *Decompress, w: *Writer, limit: std.Io.Limit) Reader.Stream
268268}
269269
270270fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader.StreamError)!usize {
271 var remaining = @intFromEnum(limit);
271 var remaining = @backingInt(limit);
272272 const in = d.input;
273273 sw: switch (d.state) {
274274 .protocol_header => switch (d.container_metadata.container()) {
......@@ -316,7 +316,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader
316316 },
317317 .block_header => {
318318 d.final_block = (try d.takeIntBits(u1)) != 0;
319 const block_type: BlockType = @enumFromInt(try d.takeIntBits(u2));
319 const block_type: BlockType = @fromBackingInt(@intCast(try d.takeIntBits(u2)));
320320 switch (block_type) {
321321 .stored => {
322322 d.alignBitsForward();
......@@ -380,7 +380,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader
380380 d.state = .{ .stored_block = @intCast(remaining_len - n) };
381381 }
382382 w.advance(n);
383 return @intFromEnum(limit) - remaining + n;
383 return @backingInt(limit) - remaining + n;
384384 },
385385 .fixed_block => while (true) {
386386 // Consume bytes
......@@ -408,7 +408,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader
408408 try w.writeBytePreserve(flate.history_len, byte);
409409 } else {
410410 d.state = .{ .fixed_block_literal = byte };
411 return @intFromEnum(limit) - remaining;
411 return @backingInt(limit) - remaining;
412412 }
413413 },
414414 .fixed_block_literal => |symbol| {
......@@ -426,7 +426,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader
426426 continue :sw .fixed_block;
427427 } else {
428428 d.state = .{ .fixed_block_match = length };
429 return @intFromEnum(limit) - remaining;
429 return @backingInt(limit) - remaining;
430430 }
431431 },
432432 // In larger archives most blocks are usually dynamic, so
......@@ -457,7 +457,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader
457457 try w.writeBytePreserve(flate.history_len, byte);
458458 } else {
459459 d.state = .{ .dynamic_block_literal = byte };
460 return @intFromEnum(limit) - remaining;
460 return @backingInt(limit) - remaining;
461461 }
462462 },
463463 .dynamic_block_literal => |symbol| {
......@@ -476,7 +476,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader
476476 continue :sw .dynamic_block;
477477 } else {
478478 d.state = .{ .dynamic_block_match = length };
479 return @intFromEnum(limit) - remaining;
479 return @backingInt(limit) - remaining;
480480 }
481481 },
482482 .protocol_footer => {
......@@ -492,7 +492,7 @@ fn streamInner(d: *Decompress, w: *Writer, limit: std.Io.Limit) (Error || Reader
492492 .raw => {},
493493 }
494494 d.state = .end;
495 return @intFromEnum(limit) - remaining;
495 return @backingInt(limit) - remaining;
496496 },
497497 .end => return error.EndOfStream,
498498 }
lib/std/compress/xz/Decompress.zig+1-1
......@@ -219,7 +219,7 @@ fn readBlock(input: *Reader, allocating: *Writer.Allocating) !void {
219219 _,
220220 };
221221
222 const filter_id: FilterId = @enumFromInt(try input.takeLeb128(u64));
222 const filter_id: FilterId = @fromBackingInt(@intCast(try input.takeLeb128(u64)));
223223 if (filter_id != .lzma2) return error.Unsupported;
224224
225225 const properties_size = try input.takeLeb128(u64);
lib/std/compress/zstd/Decompress.zig+15-15
......@@ -175,7 +175,7 @@ fn discardDirect(r: *Reader, limit: std.Io.Limit) Reader.Error!usize {
175175 error.WriteFailed => unreachable,
176176 error.ReadFailed, error.EndOfStream => |e| return e,
177177 };
178 assert(n <= @intFromEnum(limit));
178 assert(n <= @backingInt(limit));
179179 return n;
180180}
181181
......@@ -297,7 +297,7 @@ fn readInFrame(d: *Decompress, w: *Writer, limit: Limit, state: *State.InFrame)
297297 const block_size = block_header.size;
298298 const frame_block_size_max = state.frame.block_size_max;
299299 if (frame_block_size_max < block_size) return error.BlockOversize;
300 if (@intFromEnum(limit) < block_size) return error.OutputBufferUndersize;
300 if (@backingInt(limit) < block_size) return error.OutputBufferUndersize;
301301 var bytes_written: usize = 0;
302302 switch (block_header.type) {
303303 .raw => {
......@@ -320,7 +320,7 @@ fn readInFrame(d: *Decompress, w: *Writer, limit: Limit, state: *State.InFrame)
320320 try decode.prepare(in, &remaining, literals, sequences_header);
321321
322322 {
323 if (sequence_buffer.len < @intFromEnum(remaining))
323 if (sequence_buffer.len < @backingInt(remaining))
324324 return error.SequenceBufferUndersize;
325325 const seq_slice = remaining.slice(&sequence_buffer);
326326 try in.readSliceAll(seq_slice);
......@@ -409,16 +409,16 @@ pub const Frame = struct {
409409 _,
410410
411411 pub fn kind(m: Magic) ?Kind {
412 return switch (@intFromEnum(m)) {
413 @intFromEnum(Magic.zstandard) => .zstandard,
414 @intFromEnum(Skippable.magic_min)...@intFromEnum(Skippable.magic_max) => .skippable,
412 return switch (@backingInt(m)) {
413 @backingInt(Magic.zstandard) => .zstandard,
414 @backingInt(Skippable.magic_min)...@backingInt(Skippable.magic_max) => .skippable,
415415 else => null,
416416 };
417417 }
418418
419419 pub fn isSkippable(m: Magic) bool {
420 return switch (@intFromEnum(m)) {
421 @intFromEnum(Skippable.magic_min)...@intFromEnum(Skippable.magic_max) => true,
420 return switch (@backingInt(m)) {
421 @backingInt(Skippable.magic_min)...@backingInt(Skippable.magic_max) => true,
422422 else => false,
423423 };
424424 }
......@@ -902,8 +902,8 @@ pub const Frame = struct {
902902 };
903903
904904 pub const Skippable = struct {
905 pub const magic_min: Magic = @enumFromInt(0x184D2A50);
906 pub const magic_max: Magic = @enumFromInt(0x184D2A5F);
905 pub const magic_min: Magic = @fromBackingInt(@intCast(0x184D2A50));
906 pub const magic_max: Magic = @fromBackingInt(@intCast(0x184D2A5F));
907907
908908 pub const Header = struct {
909909 magic_number: u32,
......@@ -1001,7 +1001,7 @@ pub const LiteralsSection = struct {
10011001 pub fn decode(in: *Reader, remaining: *Limit) !Header {
10021002 remaining.* = remaining.subtract(1) orelse return error.EndOfStream;
10031003 const byte0 = try in.takeByte();
1004 const block_type: BlockType = @enumFromInt(byte0 & 0b11);
1004 const block_type: BlockType = @fromBackingInt(@intCast(byte0 & 0b11));
10051005 const size_format: u2 = @intCast((byte0 & 0b1100) >> 2);
10061006 var regenerated_size: u20 = undefined;
10071007 var compressed_size: ?u18 = null;
......@@ -1330,7 +1330,7 @@ pub const LiteralsSection = struct {
13301330 try HuffmanTree.decode(in, remaining)
13311331 else
13321332 null;
1333 const huffman_tree_size = @intFromEnum(before_remaining) - @intFromEnum(remaining.*);
1333 const huffman_tree_size = @backingInt(before_remaining) - @backingInt(remaining.*);
13341334 const total_streams_size = std.math.sub(usize, header.compressed_size.?, huffman_tree_size) catch
13351335 return error.MalformedLiteralsSection;
13361336 if (total_streams_size > buffer.len) return error.MalformedLiteralsSection;
......@@ -1398,9 +1398,9 @@ pub const SequencesSection = struct {
13981398
13991399 const compression_modes = try in.takeByte();
14001400
1401 const matches_mode: Header.Mode = @enumFromInt((compression_modes & 0b00001100) >> 2);
1402 const offsets_mode: Header.Mode = @enumFromInt((compression_modes & 0b00110000) >> 4);
1403 const literal_mode: Header.Mode = @enumFromInt((compression_modes & 0b11000000) >> 6);
1401 const matches_mode: Header.Mode = @fromBackingInt(@intCast((compression_modes & 0b00001100) >> 2));
1402 const offsets_mode: Header.Mode = @fromBackingInt(@intCast((compression_modes & 0b00110000) >> 4));
1403 const literal_mode: Header.Mode = @fromBackingInt(@intCast((compression_modes & 0b11000000) >> 6));
14041404 if (compression_modes & 0b11 != 0) return error.ReservedBitSet;
14051405
14061406 return .{
lib/std/crypto/Certificate.zig+2-2
......@@ -327,7 +327,7 @@ pub const Parsed = struct {
327327 while (name_i < general_names.slice.end) {
328328 const general_name = try der.Element.parse(subject_alt_name, name_i);
329329 name_i = general_name.slice.end;
330 switch (@as(GeneralNameTag, @enumFromInt(@intFromEnum(general_name.identifier.tag)))) {
330 switch (@as(GeneralNameTag, @fromBackingInt(@intCast(@backingInt(general_name.identifier.tag))))) {
331331 .dNSName => {
332332 const dns_name = subject_alt_name[general_name.slice.start..general_name.slice.end];
333333 if (checkHostName(host_name, dns_name)) return;
......@@ -642,7 +642,7 @@ const Date = struct {
642642 while (month < date.month) : (month += 1) {
643643 const days: u64 = std.time.epoch.getDaysInMonth(
644644 date.year,
645 @enumFromInt(month),
645 @fromBackingInt(@intCast(month)),
646646 );
647647 sec += days * std.time.epoch.secs_per_day;
648648 }
lib/std/crypto/Certificate/Bundle/macos.zig+1-1
......@@ -55,7 +55,7 @@ fn scanReader(cb: *Bundle, gpa: Allocator, reader: *Io.Reader, now_sec: i64) !vo
5555
5656 const table_header = try reader.takeStruct(TableHeader, .big);
5757
58 if (@as(std.c.DB_RECORDTYPE, @enumFromInt(table_header.table_id)) != .X509_CERTIFICATE) {
58 if (@as(std.c.DB_RECORDTYPE, @fromBackingInt(@intCast(table_header.table_id))) != .X509_CERTIFICATE) {
5959 continue;
6060 }
6161
lib/std/crypto/argon2.zig+2-2
......@@ -119,7 +119,7 @@ fn initHash(
119119 mem.writeInt(u32, parameters[8..12], params.m, .little);
120120 mem.writeInt(u32, parameters[12..16], params.t, .little);
121121 mem.writeInt(u32, parameters[16..20], version, .little);
122 mem.writeInt(u32, parameters[20..24], @intFromEnum(mode), .little);
122 mem.writeInt(u32, parameters[20..24], @backingInt(mode), .little);
123123 b2.update(&parameters);
124124 mem.writeInt(u32, &tmp, @as(u32, @intCast(password.len)), .little);
125125 b2.update(&tmp);
......@@ -290,7 +290,7 @@ fn processSegment(
290290 in[2] = slice;
291291 in[3] = memory;
292292 in[4] = passes;
293 in[5] = @intFromEnum(mode);
293 in[5] = @backingInt(mode);
294294 }
295295 var index: u32 = 0;
296296 if (n == 0 and slice == 0) {
lib/std/crypto/codecs/asn1.zig+6-6
......@@ -86,14 +86,14 @@ pub const Tag = struct {
8686 }
8787
8888 return Tag{
89 .number = @enumFromInt(number),
89 .number = @fromBackingInt(@intCast(number)),
9090 .constructed = tag1.constructed,
9191 .class = tag1.class,
9292 };
9393 }
9494
9595 pub fn encodeToSlice(self: Tag, buf: *[max_encoded_len]u8) []const u8 {
96 const n = @intFromEnum(self.number);
96 const n = @backingInt(self.number);
9797 var tag1: FirstTag = .{
9898 .number = undefined,
9999 .constructed = self.constructed,
......@@ -175,7 +175,7 @@ test Tag {
175175 const buf = [_]u8{0xa3};
176176 var reader: std.Io.Reader = .fixed(&buf);
177177 const t = Tag.decode(&reader);
178 try std.testing.expectEqual(Tag.init(@enumFromInt(3), true, .context_specific), t);
178 try std.testing.expectEqual(Tag.init(@fromBackingInt(@intCast(3)), true, .context_specific), t);
179179}
180180
181181test "Tag.encode produces the exact bytes from X.690" {
......@@ -190,7 +190,7 @@ test "Tag.encode produces the exact bytes from X.690" {
190190 .{ .number = 65535, .expected = &.{ 0x1f, 0x83, 0xff, 0x7f } },
191191 };
192192 for (cases) |c| {
193 const tag = Tag.init(@enumFromInt(c.number), false, .universal);
193 const tag = Tag.init(@fromBackingInt(@intCast(c.number)), false, .universal);
194194 var buf: [Tag.max_encoded_len]u8 = undefined;
195195 try std.testing.expectEqualSlices(u8, c.expected, tag.encodeToSlice(&buf));
196196 }
......@@ -198,7 +198,7 @@ test "Tag.encode produces the exact bytes from X.690" {
198198
199199test "Tag.encode/decode round trip" {
200200 for ([_]u16{ 0, 30, 31, 32, 127, 128, 16383, 16384, 65535 }) |n| {
201 const tag = Tag.init(@enumFromInt(n), false, .universal);
201 const tag = Tag.init(@fromBackingInt(@intCast(n)), false, .universal);
202202 var buf: [Tag.max_encoded_len]u8 = undefined;
203203 const encoded = tag.encodeToSlice(&buf);
204204 var reader: std.Io.Reader = .fixed(encoded);
......@@ -346,7 +346,7 @@ pub const FieldTag = struct {
346346 }
347347
348348 pub fn toTag(self: FieldTag) Tag {
349 return Tag.init(@enumFromInt(self.number), self.explicit, self.class);
349 return Tag.init(@fromBackingInt(@intCast(self.number)), self.explicit, self.class);
350350 }
351351};
352352
lib/std/crypto/codecs/asn1/Oid.zig+1-1
......@@ -191,7 +191,7 @@ pub fn StaticMap(comptime Enum: type) type {
191191 @compileError("Field '" ++ f_name ++ "' missing Oid.StaticMap entry");
192192 }
193193 const encoded = &encodeComptime(@field(key_pairs, f_name));
194 const tag: Enum = @enumFromInt(f_value);
194 const tag: Enum = @fromBackingInt(@intCast(f_value));
195195 static_key_pairs[i] = .{ encoded, tag };
196196 enum_to_oid.set(tag, encoded);
197197 };
lib/std/crypto/codecs/asn1/der/Decoder.zig+2-2
......@@ -72,7 +72,7 @@ pub fn any(self: *Decoder, comptime T: type) !T {
7272 if (@hasDecl(T, "oids")) {
7373 return T.oids.oidToEnum(bytes) orelse return error.UnknownOid;
7474 }
75 return @enumFromInt(try int(e.tag_type, bytes));
75 return @fromBackingInt(@intCast(try int(e.tag_type, bytes)));
7676 },
7777 .optional => |o| return self.any(o.child) catch return null,
7878 else => @compileError("cannot decode type " ++ @typeName(T)),
......@@ -94,7 +94,7 @@ pub fn element(
9494 const res = try Element.decode(self.bytes, self.index);
9595 var e = expected;
9696 if (self.field_tag) |ft| {
97 e.number = @enumFromInt(ft.number);
97 e.number = @fromBackingInt(@intCast(ft.number));
9898 e.class = ft.class;
9999 }
100100 if (!e.match(res.tag)) {
lib/std/crypto/codecs/asn1/der/Encoder.zig+2-2
......@@ -68,7 +68,7 @@ fn anyTag(self: *Encoder, tag_: Tag, val: anytype) !void {
6868 if (@hasDecl(T, "oids")) {
6969 return self.any(T.oids.enumToOid(val));
7070 } else {
71 try self.int(e.tag_type, @intFromEnum(val));
71 try self.int(e.tag_type, @backingInt(val));
7272 }
7373 },
7474 .optional => if (val) |v| return try self.anyTag(tag_, v) else return,
......@@ -91,7 +91,7 @@ fn mergedTag(self: *Encoder, tag_: Tag) Tag {
9191 var res = tag_;
9292 if (self.field_tag) |ft| {
9393 if (!ft.explicit) {
94 res.number = @enumFromInt(ft.number);
94 res.number = @fromBackingInt(@intCast(ft.number));
9595 res.class = ft.class;
9696 }
9797 }
lib/std/crypto/tls.zig+5-5
......@@ -48,8 +48,8 @@ pub const hello_retry_request_sequence = [32]u8{
4848};
4949
5050pub const close_notify_alert = [_]u8{
51 @intFromEnum(Alert.Level.warning),
52 @intFromEnum(Alert.Description.close_notify),
51 @backingInt(Alert.Level.warning),
52 @backingInt(Alert.Description.close_notify),
5353};
5454
5555pub const ProtocolVersion = enum(u16) {
......@@ -595,7 +595,7 @@ pub fn hmac(comptime Hmac: type, message: []const u8, key: [Hmac.key_length]u8)
595595}
596596
597597pub fn extension(et: ExtensionType, bytes: anytype) [2 + 2 + bytes.len]u8 {
598 return int(u16, @intFromEnum(et)) ++ array(u16, u8, bytes);
598 return int(u16, @backingInt(et)) ++ array(u16, u8, bytes);
599599}
600600
601601pub fn array(
......@@ -614,7 +614,7 @@ pub fn array(
614614 arr[len_size + elem_size * index ..][0..elem_size],
615615 switch (@typeInfo(Elem)) {
616616 .int => @as(Elem, elem),
617 .@"enum" => @intFromEnum(@as(Elem, elem)),
617 .@"enum" => @backingInt(@as(Elem, elem)),
618618 else => @bitCast(@as(Elem, elem)),
619619 },
620620 .big,
......@@ -711,7 +711,7 @@ pub const Decoder = struct {
711711 },
712712 .@"enum" => |info| {
713713 if (info.mode == .exhaustive) @compileError("exhaustive enum cannot be used");
714 return @enumFromInt(d.decode(info.tag_type));
714 return @fromBackingInt(@intCast(d.decode(info.tag_type)));
715715 },
716716 else => @compileError("unsupported type: " ++ @typeName(T)),
717717 }
lib/std/crypto/tls/Client.zig+36-36
......@@ -237,16 +237,16 @@ pub fn init(input: *Reader, output: *Writer, options: Options) InitError!Client
237237 })) ++ tls.extension(.key_share, array(
238238 u16,
239239 u8,
240 int(u16, @intFromEnum(tls.NamedGroup.x25519_ml_kem768)) ++
240 int(u16, @backingInt(tls.NamedGroup.x25519_ml_kem768)) ++
241241 array(u16, u8, key_share.ml_kem768_kp.public_key.toBytes() ++ key_share.x25519_kp.public_key) ++
242 int(u16, @intFromEnum(tls.NamedGroup.secp256r1)) ++
242 int(u16, @backingInt(tls.NamedGroup.secp256r1)) ++
243243 array(u16, u8, key_share.secp256r1_kp.public_key.toUncompressedSec1()) ++
244 int(u16, @intFromEnum(tls.NamedGroup.secp384r1)) ++
244 int(u16, @backingInt(tls.NamedGroup.secp384r1)) ++
245245 array(u16, u8, key_share.secp384r1_kp.public_key.toUncompressedSec1()) ++
246 int(u16, @intFromEnum(tls.NamedGroup.x25519)) ++
246 int(u16, @backingInt(tls.NamedGroup.x25519)) ++
247247 array(u16, u8, key_share.x25519_kp.public_key),
248248 ));
249 const server_name_extension = int(u16, @intFromEnum(tls.ExtensionType.server_name)) ++
249 const server_name_extension = int(u16, @backingInt(tls.ExtensionType.server_name)) ++
250250 int(u16, 2 + 1 + 2 + host_len) ++ // byte length of this extension payload
251251 int(u16, 1 + 2 + host_len) ++ // server_name_list byte count
252252 .{0x00} ++ // name_type
......@@ -262,19 +262,19 @@ pub fn init(input: *Reader, output: *Writer, options: Options) InitError!Client
262262 server_name_extension;
263263
264264 const client_hello =
265 int(u16, @intFromEnum(tls.ProtocolVersion.tls_1_2)) ++
265 int(u16, @backingInt(tls.ProtocolVersion.tls_1_2)) ++
266266 client_hello_rand ++
267267 [1]u8{32} ++ legacy_session_id ++
268268 cipher_suites ++
269269 array(u8, tls.CompressionMethod, .{.null}) ++
270270 extensions_header;
271271
272 const out_handshake = .{@intFromEnum(tls.HandshakeType.client_hello)} ++
272 const out_handshake = .{@backingInt(tls.HandshakeType.client_hello)} ++
273273 int(u24, @intCast(client_hello.len - server_name_extension.len + server_name_extension_len)) ++
274274 client_hello;
275275
276 const cleartext_header_buf = .{@intFromEnum(tls.ContentType.handshake)} ++
277 int(u16, @intFromEnum(tls.ProtocolVersion.tls_1_0)) ++
276 const cleartext_header_buf = .{@backingInt(tls.ContentType.handshake)} ++
277 int(u16, @backingInt(tls.ProtocolVersion.tls_1_0)) ++
278278 int(u16, @intCast(out_handshake.len - server_name_extension.len + server_name_extension_len)) ++
279279 out_handshake;
280280 const cleartext_header = switch (options.host) {
......@@ -389,7 +389,7 @@ pub fn init(input: *Reader, output: *Writer, options: Options) InitError!Client
389389 }
390390 read_seq += 1;
391391 cleartext_fragment_end -= 1;
392 const ct: tls.ContentType = @enumFromInt(cleartext_buf[cleartext_fragment_end]);
392 const ct: tls.ContentType = @fromBackingInt(@intCast(cleartext_buf[cleartext_fragment_end]));
393393 if (ct != .handshake) return error.TlsUnexpectedMessage;
394394 break :content .{ tls.Decoder.fromTheirSlice(@constCast(cleartext_buf[cleartext_fragment_start..cleartext_fragment_end])), ct };
395395 },
......@@ -495,7 +495,7 @@ pub fn init(input: *Reader, output: *Writer, options: Options) InitError!Client
495495 }
496496 }
497497
498 tls_version = @enumFromInt(supported_version orelse legacy_version);
498 tls_version = @fromBackingInt(@intCast(supported_version orelse legacy_version));
499499 switch (tls_version) {
500500 .tls_1_3 => if (!mem.eql(u8, legacy_session_id_echo, &legacy_session_id)) return error.TlsIllegalParameter,
501501 .tls_1_2 => if (mem.eql(u8, server_hello_rand[24..31], "DOWNGRD") and
......@@ -739,14 +739,14 @@ pub fn init(input: *Reader, output: *Writer, options: Options) InitError!Client
739739 else => return error.TlsIllegalParameter,
740740 };
741741
742 const client_key_exchange_prefix = .{@intFromEnum(tls.ContentType.handshake)} ++
743 int(u16, @intFromEnum(tls.ProtocolVersion.tls_1_2)) ++
742 const client_key_exchange_prefix = .{@backingInt(tls.ContentType.handshake)} ++
743 int(u16, @backingInt(tls.ProtocolVersion.tls_1_2)) ++
744744 int(u16, @intCast(public_key_bytes.len + 5)) ++ // record length
745 .{@intFromEnum(tls.HandshakeType.client_key_exchange)} ++
745 .{@backingInt(tls.HandshakeType.client_key_exchange)} ++
746746 int(u24, @intCast(public_key_bytes.len + 1)) ++ // handshake message length
747747 .{@as(u8, @intCast(public_key_bytes.len))}; // public key length
748 const client_change_cipher_spec_msg = .{@intFromEnum(tls.ContentType.change_cipher_spec)} ++
749 int(u16, @intFromEnum(tls.ProtocolVersion.tls_1_2)) ++
748 const client_change_cipher_spec_msg = .{@backingInt(tls.ContentType.change_cipher_spec)} ++
749 int(u16, @backingInt(tls.ProtocolVersion.tls_1_2)) ++
750750 array(u16, tls.ChangeCipherSpecType, .{.change_cipher_spec});
751751 const pre_master_secret = key_share.getSharedSecret().?;
752752 switch (handshake_cipher) {
......@@ -771,7 +771,7 @@ pub fn init(input: *Reader, output: *Writer, options: Options) InitError!Client
771771 &.{ "key expansion", &server_hello_rand, &client_hello_rand },
772772 @sizeOf(P.Tls_1_2),
773773 );
774 const client_verify_cleartext = .{@intFromEnum(tls.HandshakeType.finished)} ++
774 const client_verify_cleartext = .{@backingInt(tls.HandshakeType.finished)} ++
775775 array(u24, u8, hmacExpandLabel(
776776 P.Hmac,
777777 &master_secret,
......@@ -795,8 +795,8 @@ pub fn init(input: *Reader, output: *Writer, options: Options) InitError!Client
795795 const operand: V = pad ++ @as([8]u8, @bitCast(@byteSwap(write_seq)));
796796 break :nonce @as(V, pv.app_cipher.client_write_IV ++ pv.app_cipher.client_salt) ^ operand;
797797 };
798 var client_verify_msg = .{@intFromEnum(tls.ContentType.handshake)} ++
799 int(u16, @intFromEnum(tls.ProtocolVersion.tls_1_2)) ++
798 var client_verify_msg = .{@backingInt(tls.ContentType.handshake)} ++
799 int(u16, @backingInt(tls.ProtocolVersion.tls_1_2)) ++
800800 array(u16, u8, nonce[P.fixed_iv_length..].* ++
801801 @as([client_verify_cleartext.len + P.mac_length]u8, undefined));
802802 P.AEAD.encrypt(
......@@ -846,8 +846,8 @@ pub fn init(input: *Reader, output: *Writer, options: Options) InitError!Client
846846 if (cipher_state == .cleartext) return error.TlsUnexpectedMessage;
847847 if (handshake_state != .finished) return error.TlsUnexpectedMessage;
848848 // This message is to trick buggy proxies into behaving correctly.
849 const client_change_cipher_spec_msg = .{@intFromEnum(tls.ContentType.change_cipher_spec)} ++
850 int(u16, @intFromEnum(tls.ProtocolVersion.tls_1_2)) ++
849 const client_change_cipher_spec_msg = .{@backingInt(tls.ContentType.change_cipher_spec)} ++
850 int(u16, @backingInt(tls.ProtocolVersion.tls_1_2)) ++
851851 array(u16, tls.ChangeCipherSpecType, .{.change_cipher_spec});
852852 const app_cipher = app_cipher: switch (handshake_cipher) {
853853 inline else => |*p, tag| switch (tls_version) {
......@@ -861,14 +861,14 @@ pub fn init(input: *Reader, output: *Writer, options: Options) InitError!Client
861861 if (!std.crypto.timing_safe.eql([P.Hmac.mac_length]u8, expected_server_verify_data, hsd.array(P.Hmac.mac_length).*)) return error.TlsDecryptError;
862862 const handshake_hash = p.transcript_hash.finalResult();
863863 const verify_data = tls.hmac(P.Hmac, &handshake_hash, pv.client_finished_key);
864 const out_cleartext = .{@intFromEnum(tls.HandshakeType.finished)} ++
864 const out_cleartext = .{@backingInt(tls.HandshakeType.finished)} ++
865865 array(u24, u8, verify_data) ++
866 .{@intFromEnum(tls.ContentType.handshake)};
866 .{@backingInt(tls.ContentType.handshake)};
867867
868868 const wrapped_len = out_cleartext.len + P.AEAD.tag_length;
869869
870 var finished_msg = .{@intFromEnum(tls.ContentType.application_data)} ++
871 int(u16, @intFromEnum(tls.ProtocolVersion.tls_1_2)) ++
870 var finished_msg = .{@backingInt(tls.ContentType.application_data)} ++
871 int(u16, @backingInt(tls.ProtocolVersion.tls_1_2)) ++
872872 array(u16, u8, @as([wrapped_len]u8, undefined));
873873
874874 const ad = finished_msg[0..tls.record_header_len];
......@@ -1051,14 +1051,14 @@ fn prepareCiphertextRecord(
10511051 };
10521052
10531053 @memcpy(cleartext_buf[0..encrypted_content_len], bytes[bytes_i..][0..encrypted_content_len]);
1054 cleartext_buf[encrypted_content_len] = @intFromEnum(inner_content_type);
1054 cleartext_buf[encrypted_content_len] = @backingInt(inner_content_type);
10551055 bytes_i += encrypted_content_len;
10561056 const ciphertext_len = encrypted_content_len + 1;
10571057 const cleartext = cleartext_buf[0..ciphertext_len];
10581058
10591059 const ad = ciphertext_buf[ciphertext_end..][0..tls.record_header_len];
1060 ad.* = .{@intFromEnum(tls.ContentType.application_data)} ++
1061 int(u16, @intFromEnum(tls.ProtocolVersion.tls_1_2)) ++
1060 ad.* = .{@backingInt(tls.ContentType.application_data)} ++
1061 int(u16, @backingInt(tls.ProtocolVersion.tls_1_2)) ++
10621062 int(u16, ciphertext_len + P.AEAD.tag_length);
10631063 ciphertext_end += ad.len;
10641064 const ciphertext = ciphertext_buf[ciphertext_end..][0..ciphertext_len];
......@@ -1096,8 +1096,8 @@ fn prepareCiphertextRecord(
10961096
10971097 const record_header = ciphertext_buf[ciphertext_end..][0..tls.record_header_len];
10981098 ciphertext_end += tls.record_header_len;
1099 record_header.* = .{@intFromEnum(inner_content_type)} ++
1100 int(u16, @intFromEnum(tls.ProtocolVersion.tls_1_2)) ++
1099 record_header.* = .{@backingInt(inner_content_type)} ++
1100 int(u16, @backingInt(tls.ProtocolVersion.tls_1_2)) ++
11011101 int(u16, P.record_iv_length + message_len + P.mac_length);
11021102 const ad = mem.toBytes(big(c.write_seq)) ++ record_header[0 .. 1 + 2] ++ int(u16, message_len);
11031103 const record_iv = ciphertext_buf[ciphertext_end..][0..P.record_iv_length];
......@@ -1160,7 +1160,7 @@ fn readIndirect(c: *Client) Reader.Error!usize {
11601160 },
11611161 error.ReadFailed => |e| return e,
11621162 };
1163 const ct: tls.ContentType = @enumFromInt(record_header[0]);
1163 const ct: tls.ContentType = @fromBackingInt(@intCast(record_header[0]));
11641164 const legacy_version = mem.readInt(u16, record_header[1..][0..2], .big);
11651165 _ = legacy_version;
11661166 const record_len = mem.readInt(u16, record_header[3..][0..2], .big);
......@@ -1197,7 +1197,7 @@ fn readIndirect(c: *Client) Reader.Error!usize {
11971197 // TODO use scalar, non-slice version
11981198 const msg = mem.trimEnd(u8, cleartext, "\x00");
11991199 if (msg.len == 0) return failRead(c, error.TlsDecodeError);
1200 break :cleartext .{ msg.len - 1, @enumFromInt(msg[msg.len - 1]) };
1200 break :cleartext .{ msg.len - 1, @fromBackingInt(@intCast(msg[msg.len - 1])) };
12011201 },
12021202 .tls_1_2 => {
12031203 const pv = &p.tls_1_2;
......@@ -1234,8 +1234,8 @@ fn readIndirect(c: *Client) Reader.Error!usize {
12341234 .alert => {
12351235 if (cleartext.len != 2) return failRead(c, error.TlsDecodeError);
12361236 const alert: tls.Alert = .{
1237 .level = @enumFromInt(cleartext[0]),
1238 .description = @enumFromInt(cleartext[1]),
1237 .level = @fromBackingInt(@intCast(cleartext[0])),
1238 .description = @fromBackingInt(@intCast(cleartext[1])),
12391239 };
12401240 switch (alert.description) {
12411241 .close_notify => {
......@@ -1255,7 +1255,7 @@ fn readIndirect(c: *Client) Reader.Error!usize {
12551255 .handshake => {
12561256 var ct_i: usize = 0;
12571257 while (true) {
1258 const handshake_type: tls.HandshakeType = @enumFromInt(cleartext[ct_i]);
1258 const handshake_type: tls.HandshakeType = @fromBackingInt(@intCast(cleartext[ct_i]));
12591259 ct_i += 1;
12601260 const handshake_len = mem.readInt(u24, cleartext[ct_i..][0..3], .big);
12611261 ct_i += 3;
......@@ -1286,7 +1286,7 @@ fn readIndirect(c: *Client) Reader.Error!usize {
12861286 }
12871287 c.read_seq = 0;
12881288
1289 switch (@as(tls.KeyUpdateRequest, @enumFromInt(handshake[0]))) {
1289 switch (@as(tls.KeyUpdateRequest, @fromBackingInt(@intCast(handshake[0])))) {
12901290 .update_requested => {
12911291 switch (c.application_cipher) {
12921292 inline else => |*p| {
lib/std/debug.zig+1-1
......@@ -844,7 +844,7 @@ pub fn writeErrorReturnTrace(et: *const std.builtin.StackTrace, t: Io.Terminal)
844844 // writing the stack trace.
845845 const len = @min(et.instruction_addresses.len, et.index);
846846 const skipped = et.index - len;
847 try writeTrace(et.instruction_addresses[0..len], @enumFromInt(skipped), t, false);
847 try writeTrace(et.instruction_addresses[0..len], @fromBackingInt(@intCast(skipped)), t, false);
848848}
849849
850850/// Write a previously captured stack trace to `writer`, annotated with source locations.
lib/std/debug/Coverage.zig+12-12
......@@ -41,13 +41,13 @@ pub const String = enum(u32) {
4141
4242 pub fn eql(self: @This(), a: String, b: String, b_index: usize) bool {
4343 _ = b_index;
44 const a_slice = span(self.string_bytes[@intFromEnum(a)..]);
45 const b_slice = span(self.string_bytes[@intFromEnum(b)..]);
44 const a_slice = span(self.string_bytes[@backingInt(a)..]);
45 const b_slice = span(self.string_bytes[@backingInt(b)..]);
4646 return std.mem.eql(u8, a_slice, b_slice);
4747 }
4848
4949 pub fn hash(self: @This(), a: String) u32 {
50 return @truncate(Hash.hash(0, span(self.string_bytes[@intFromEnum(a)..])));
50 return @truncate(Hash.hash(0, span(self.string_bytes[@backingInt(a)..])));
5151 }
5252 };
5353
......@@ -56,7 +56,7 @@ pub const String = enum(u32) {
5656
5757 pub fn eql(self: @This(), a_slice: []const u8, b: String, b_index: usize) bool {
5858 _ = b_index;
59 const b_slice = span(self.string_bytes[@intFromEnum(b)..]);
59 const b_slice = span(self.string_bytes[@backingInt(b)..]);
6060 return std.mem.eql(u8, a_slice, b_slice);
6161 }
6262 pub fn hash(self: @This(), a: []const u8) u32 {
......@@ -91,15 +91,15 @@ pub const File = extern struct {
9191 string_bytes: []const u8,
9292
9393 pub fn hash(self: MapContext, a: File) u32 {
94 const a_basename = span(self.string_bytes[@intFromEnum(a.basename)..]);
94 const a_basename = span(self.string_bytes[@backingInt(a.basename)..]);
9595 return @truncate(Hash.hash(a.directory_index, a_basename));
9696 }
9797
9898 pub fn eql(self: MapContext, a: File, b: File, b_index: usize) bool {
9999 _ = b_index;
100100 if (a.directory_index != b.directory_index) return false;
101 const a_basename = span(self.string_bytes[@intFromEnum(a.basename)..]);
102 const b_basename = span(self.string_bytes[@intFromEnum(b.basename)..]);
101 const a_basename = span(self.string_bytes[@backingInt(a.basename)..]);
102 const b_basename = span(self.string_bytes[@backingInt(b.basename)..]);
103103 return std.mem.eql(u8, a_basename, b_basename);
104104 }
105105 };
......@@ -120,7 +120,7 @@ pub const File = extern struct {
120120 pub fn eql(self: @This(), a: Entry, b: File, b_index: usize) bool {
121121 _ = b_index;
122122 if (a.directory_index != b.directory_index) return false;
123 const b_basename = span(self.string_bytes[@intFromEnum(b.basename)..]);
123 const b_basename = span(self.string_bytes[@backingInt(b.basename)..]);
124124 return std.mem.eql(u8, a.basename, b_basename);
125125 }
126126 };
......@@ -134,11 +134,11 @@ pub fn deinit(cov: *Coverage, gpa: Allocator) void {
134134}
135135
136136pub fn fileAt(cov: *Coverage, index: File.Index) *File {
137 return &cov.files.keys()[@intFromEnum(index)];
137 return &cov.files.keys()[@backingInt(index)];
138138}
139139
140140pub fn stringAt(cov: *Coverage, index: String) [:0]const u8 {
141 return span(cov.string_bytes.items[@intFromEnum(index)..]);
141 return span(cov.string_bytes.items[@backingInt(index)..]);
142142}
143143
144144pub const ResolveAddressesDwarfError = Dwarf.ScanError || Io.Cancelable;
......@@ -232,7 +232,7 @@ pub fn resolveAddressesDwarf(
232232 .basename = addStringAssumeCapacity(cov, file_entry.path),
233233 };
234234 out.* = .{
235 .file = @enumFromInt(file_gop.index),
235 .file = @fromBackingInt(@intCast(file_gop.index)),
236236 .line = entry.line,
237237 .column = entry.column,
238238 };
......@@ -240,7 +240,7 @@ pub fn resolveAddressesDwarf(
240240}
241241
242242pub fn addStringAssumeCapacity(cov: *Coverage, s: []const u8) String {
243 const result: String = @enumFromInt(cov.string_bytes.items.len);
243 const result: String = @fromBackingInt(@intCast(cov.string_bytes.items.len));
244244 cov.string_bytes.appendSliceAssumeCapacity(s);
245245 cov.string_bytes.appendAssumeCapacity(0);
246246 return result;
lib/std/debug/Dwarf.zig+1-1
......@@ -323,7 +323,7 @@ const Func = struct {
323323};
324324
325325pub fn section(di: Dwarf, dwarf_section: Section.Id) ?[]const u8 {
326 return if (di.sections[@intFromEnum(dwarf_section)]) |s| s.data else null;
326 return if (di.sections[@backingInt(dwarf_section)]) |s| s.data else null;
327327}
328328
329329pub fn deinit(di: *Dwarf, gpa: Allocator) void {
lib/std/debug/Dwarf/Unwind/VirtualMachine.zig+1-1
......@@ -459,7 +459,7 @@ pub const Instruction = union(enum) {
459459 .def_cfa_offset_sf => .{ .def_cfa_offset_sf = try reader.takeLeb128(i64) },
460460 .def_cfa_expression => .{ .def_cfa_expr = try reader.takeLeb128(usize) },
461461
462 _ => switch (@intFromEnum(inst.low.extended)) {
462 _ => switch (@backingInt(inst.low.extended)) {
463463 0x1C...0x3F => return error.UnimplementedUserOpcode,
464464 else => return error.InvalidOpcode,
465465 },
lib/std/debug/ElfFile.zig+1-1
......@@ -504,7 +504,7 @@ fn loadInner(
504504 @typeInfo(Section.Id).@"enum".field_values,
505505 ) |s_name, s_value| {
506506 if (std.mem.eql(u8, "." ++ s_name, name)) {
507 break @enumFromInt(s_value);
507 break @fromBackingInt(@intCast(s_value));
508508 }
509509 } else continue;
510510
lib/std/debug/MachOFile.zig+4-4
......@@ -516,10 +516,10 @@ fn loadOFile(gpa: Allocator, io: Io, o_file_name: []const u8) !OFile {
516516 };
517517 }
518518
519 if (sections[@intFromEnum(Dwarf.Section.Id.debug_info)] == null or
520 sections[@intFromEnum(Dwarf.Section.Id.debug_abbrev)] == null or
521 sections[@intFromEnum(Dwarf.Section.Id.debug_str)] == null or
522 sections[@intFromEnum(Dwarf.Section.Id.debug_line)] == null)
519 if (sections[@backingInt(Dwarf.Section.Id.debug_info)] == null or
520 sections[@backingInt(Dwarf.Section.Id.debug_abbrev)] == null or
521 sections[@backingInt(Dwarf.Section.Id.debug_str)] == null or
522 sections[@backingInt(Dwarf.Section.Id.debug_line)] == null)
523523 {
524524 return error.MissingDebugInfo;
525525 }
lib/std/debug/Pdb.zig+3-3
......@@ -935,7 +935,7 @@ pub fn getStreamById(self: *Pdb, id: u32) ?*MsfStream {
935935}
936936
937937pub fn getStream(self: *Pdb, stream: pdb.StreamType) ?*MsfStream {
938 const id = @intFromEnum(stream);
938 const id = @backingInt(stream);
939939 return self.getStreamById(id);
940940}
941941
......@@ -1078,7 +1078,7 @@ const MsfStream = struct {
10781078 return error.ReadFailed;
10791079 };
10801080
1081 var remaining = @intFromEnum(limit);
1081 var remaining = @backingInt(limit);
10821082 while (remaining != 0) {
10831083 const stream_len: usize = @min(remaining, ms.block_size - offset);
10841084 const n = try ms.file_reader.interface.stream(w, .limited(stream_len));
......@@ -1098,7 +1098,7 @@ const MsfStream = struct {
10981098 }
10991099 }
11001100
1101 const total = @intFromEnum(limit) - remaining;
1101 const total = @backingInt(limit) - remaining;
11021102 ms.next_read_pos += total;
11031103 return total;
11041104 }
lib/std/dynamic_library.zig+1-1
......@@ -530,7 +530,7 @@ fn checkver(def_arg: *elf.Verdef, vsym_arg: elf.Versym, vername: []const u8, str
530530 var def = def_arg;
531531 const vsym_index = vsym_arg.VERSION;
532532 while (true) {
533 if (0 == (def.flags & elf.VER_FLG_BASE) and @intFromEnum(def.ndx) == vsym_index) break;
533 if (0 == (def.flags & elf.VER_FLG_BASE) and @backingInt(def.ndx) == vsym_index) break;
534534 if (def.next == 0) return false;
535535 def = @ptrFromInt(@intFromPtr(def) + def.next);
536536 }
lib/std/elf.zig+125-125
......@@ -268,8 +268,8 @@ pub const Versym = packed struct(u16) {
268268 VERSION: u15,
269269 HIDDEN: bool,
270270
271 pub const LOCAL: Versym = @bitCast(@intFromEnum(VER_NDX.LOCAL));
272 pub const GLOBAL: Versym = @bitCast(@intFromEnum(VER_NDX.GLOBAL));
271 pub const LOCAL: Versym = @bitCast(@backingInt(VER_NDX.LOCAL));
272 pub const GLOBAL: Versym = @bitCast(@backingInt(VER_NDX.GLOBAL));
273273};
274274
275275pub const VER_NDX = enum(u16) {
......@@ -291,178 +291,178 @@ pub const VER_FLG_BASE = 1;
291291pub const VER_FLG_WEAK = 2;
292292
293293/// Deprecated, use `@intFromEnum(std.elf.PT.NULL)`
294pub const PT_NULL = @intFromEnum(std.elf.PT.NULL);
294pub const PT_NULL = @backingInt(std.elf.PT.NULL);
295295/// Deprecated, use `@intFromEnum(std.elf.PT.LOAD)`
296pub const PT_LOAD = @intFromEnum(std.elf.PT.LOAD);
296pub const PT_LOAD = @backingInt(std.elf.PT.LOAD);
297297/// Deprecated, use `@intFromEnum(std.elf.PT.DYNAMIC)`
298pub const PT_DYNAMIC = @intFromEnum(std.elf.PT.DYNAMIC);
298pub const PT_DYNAMIC = @backingInt(std.elf.PT.DYNAMIC);
299299/// Deprecated, use `@intFromEnum(std.elf.PT.INTERP)`
300pub const PT_INTERP = @intFromEnum(std.elf.PT.INTERP);
300pub const PT_INTERP = @backingInt(std.elf.PT.INTERP);
301301/// Deprecated, use `@intFromEnum(std.elf.PT.NOTE)`
302pub const PT_NOTE = @intFromEnum(std.elf.PT.NOTE);
302pub const PT_NOTE = @backingInt(std.elf.PT.NOTE);
303303/// Deprecated, use `@intFromEnum(std.elf.PT.SHLIB)`
304pub const PT_SHLIB = @intFromEnum(std.elf.PT.SHLIB);
304pub const PT_SHLIB = @backingInt(std.elf.PT.SHLIB);
305305/// Deprecated, use `@intFromEnum(std.elf.PT.PHDR)`
306pub const PT_PHDR = @intFromEnum(std.elf.PT.PHDR);
306pub const PT_PHDR = @backingInt(std.elf.PT.PHDR);
307307/// Deprecated, use `@intFromEnum(std.elf.PT.TLS)`
308pub const PT_TLS = @intFromEnum(std.elf.PT.TLS);
308pub const PT_TLS = @backingInt(std.elf.PT.TLS);
309309/// Deprecated, use `std.elf.PT.NUM`.
310310pub const PT_NUM = PT.NUM;
311311/// Deprecated, use `@intFromEnum(std.elf.PT.LOOS)`
312pub const PT_LOOS = @intFromEnum(std.elf.PT.LOOS);
312pub const PT_LOOS = @backingInt(std.elf.PT.LOOS);
313313/// Deprecated, use `@intFromEnum(std.elf.PT.GNU_EH_FRAME)`
314pub const PT_GNU_EH_FRAME = @intFromEnum(std.elf.PT.GNU_EH_FRAME);
314pub const PT_GNU_EH_FRAME = @backingInt(std.elf.PT.GNU_EH_FRAME);
315315/// Deprecated, use `@intFromEnum(std.elf.PT.GNU_STACK)`
316pub const PT_GNU_STACK = @intFromEnum(std.elf.PT.GNU_STACK);
316pub const PT_GNU_STACK = @backingInt(std.elf.PT.GNU_STACK);
317317/// Deprecated, use `@intFromEnum(std.elf.PT.GNU_RELRO)`
318pub const PT_GNU_RELRO = @intFromEnum(std.elf.PT.GNU_RELRO);
318pub const PT_GNU_RELRO = @backingInt(std.elf.PT.GNU_RELRO);
319319/// Deprecated, use `@intFromEnum(std.elf.PT.LOSUNW)`
320pub const PT_LOSUNW = @intFromEnum(std.elf.PT.LOSUNW);
320pub const PT_LOSUNW = @backingInt(std.elf.PT.LOSUNW);
321321/// Deprecated, use `@intFromEnum(std.elf.PT.SUNWBSS)`
322pub const PT_SUNWBSS = @intFromEnum(std.elf.PT.SUNWBSS);
322pub const PT_SUNWBSS = @backingInt(std.elf.PT.SUNWBSS);
323323/// Deprecated, use `@intFromEnum(std.elf.PT.SUNWSTACK)`
324pub const PT_SUNWSTACK = @intFromEnum(std.elf.PT.SUNWSTACK);
324pub const PT_SUNWSTACK = @backingInt(std.elf.PT.SUNWSTACK);
325325/// Deprecated, use `@intFromEnum(std.elf.PT.HISUNW)`
326pub const PT_HISUNW = @intFromEnum(std.elf.PT.HISUNW);
326pub const PT_HISUNW = @backingInt(std.elf.PT.HISUNW);
327327/// Deprecated, use `@intFromEnum(std.elf.PT.HIOS)`
328pub const PT_HIOS = @intFromEnum(std.elf.PT.HIOS);
328pub const PT_HIOS = @backingInt(std.elf.PT.HIOS);
329329/// Deprecated, use `@intFromEnum(std.elf.PT.LOPROC)`
330pub const PT_LOPROC = @intFromEnum(std.elf.PT.LOPROC);
330pub const PT_LOPROC = @backingInt(std.elf.PT.LOPROC);
331331/// Deprecated, use `@intFromEnum(std.elf.PT.HIPROC)`
332pub const PT_HIPROC = @intFromEnum(std.elf.PT.HIPROC);
332pub const PT_HIPROC = @backingInt(std.elf.PT.HIPROC);
333333
334334pub const PN_XNUM = 0xffff;
335335
336336/// Deprecated, use `@intFromEnum(std.elf.SHT.NULL)`
337pub const SHT_NULL = @intFromEnum(std.elf.SHT.NULL);
337pub const SHT_NULL = @backingInt(std.elf.SHT.NULL);
338338/// Deprecated, use `@intFromEnum(std.elf.SHT.PROGBITS)`
339pub const SHT_PROGBITS = @intFromEnum(std.elf.SHT.PROGBITS);
339pub const SHT_PROGBITS = @backingInt(std.elf.SHT.PROGBITS);
340340/// Deprecated, use `@intFromEnum(std.elf.SHT.SYMTAB)`
341pub const SHT_SYMTAB = @intFromEnum(std.elf.SHT.SYMTAB);
341pub const SHT_SYMTAB = @backingInt(std.elf.SHT.SYMTAB);
342342/// Deprecated, use `@intFromEnum(std.elf.SHT.STRTAB)`
343pub const SHT_STRTAB = @intFromEnum(std.elf.SHT.STRTAB);
343pub const SHT_STRTAB = @backingInt(std.elf.SHT.STRTAB);
344344/// Deprecated, use `@intFromEnum(std.elf.SHT.RELA)`
345pub const SHT_RELA = @intFromEnum(std.elf.SHT.RELA);
345pub const SHT_RELA = @backingInt(std.elf.SHT.RELA);
346346/// Deprecated, use `@intFromEnum(std.elf.SHT.HASH)`
347pub const SHT_HASH = @intFromEnum(std.elf.SHT.HASH);
347pub const SHT_HASH = @backingInt(std.elf.SHT.HASH);
348348/// Deprecated, use `@intFromEnum(std.elf.SHT.DYNAMIC)`
349pub const SHT_DYNAMIC = @intFromEnum(std.elf.SHT.DYNAMIC);
349pub const SHT_DYNAMIC = @backingInt(std.elf.SHT.DYNAMIC);
350350/// Deprecated, use `@intFromEnum(std.elf.SHT.NOTE)`
351pub const SHT_NOTE = @intFromEnum(std.elf.SHT.NOTE);
351pub const SHT_NOTE = @backingInt(std.elf.SHT.NOTE);
352352/// Deprecated, use `@intFromEnum(std.elf.SHT.NOBITS)`
353pub const SHT_NOBITS = @intFromEnum(std.elf.SHT.NOBITS);
353pub const SHT_NOBITS = @backingInt(std.elf.SHT.NOBITS);
354354/// Deprecated, use `@intFromEnum(std.elf.SHT.REL)`
355pub const SHT_REL = @intFromEnum(std.elf.SHT.REL);
355pub const SHT_REL = @backingInt(std.elf.SHT.REL);
356356/// Deprecated, use `@intFromEnum(std.elf.SHT.SHLIB)`
357pub const SHT_SHLIB = @intFromEnum(std.elf.SHT.SHLIB);
357pub const SHT_SHLIB = @backingInt(std.elf.SHT.SHLIB);
358358/// Deprecated, use `@intFromEnum(std.elf.SHT.DYNSYM)`
359pub const SHT_DYNSYM = @intFromEnum(std.elf.SHT.DYNSYM);
359pub const SHT_DYNSYM = @backingInt(std.elf.SHT.DYNSYM);
360360/// Deprecated, use `@intFromEnum(std.elf.SHT.INIT_ARRAY)`
361pub const SHT_INIT_ARRAY = @intFromEnum(std.elf.SHT.INIT_ARRAY);
361pub const SHT_INIT_ARRAY = @backingInt(std.elf.SHT.INIT_ARRAY);
362362/// Deprecated, use `@intFromEnum(std.elf.SHT.FINI_ARRAY)`
363pub const SHT_FINI_ARRAY = @intFromEnum(std.elf.SHT.FINI_ARRAY);
363pub const SHT_FINI_ARRAY = @backingInt(std.elf.SHT.FINI_ARRAY);
364364/// Deprecated, use `@intFromEnum(std.elf.SHT.PREINIT_ARRAY)`
365pub const SHT_PREINIT_ARRAY = @intFromEnum(std.elf.SHT.PREINIT_ARRAY);
365pub const SHT_PREINIT_ARRAY = @backingInt(std.elf.SHT.PREINIT_ARRAY);
366366/// Deprecated, use `@intFromEnum(std.elf.SHT.GROUP)`
367pub const SHT_GROUP = @intFromEnum(std.elf.SHT.GROUP);
367pub const SHT_GROUP = @backingInt(std.elf.SHT.GROUP);
368368/// Deprecated, use `@intFromEnum(std.elf.SHT.SYMTAB_SHNDX)`
369pub const SHT_SYMTAB_SHNDX = @intFromEnum(std.elf.SHT.SYMTAB_SHNDX);
369pub const SHT_SYMTAB_SHNDX = @backingInt(std.elf.SHT.SYMTAB_SHNDX);
370370/// Deprecated, use `@intFromEnum(std.elf.SHT.RELR)`
371pub const SHT_RELR = @intFromEnum(std.elf.SHT.RELR);
371pub const SHT_RELR = @backingInt(std.elf.SHT.RELR);
372372/// Deprecated, use `std.elf.SHT.NUM`.
373373pub const SHT_NUM = SHT.NUM;
374374/// Deprecated, use `@intFromEnum(std.elf.SHT.LOOS)`
375pub const SHT_LOOS = @intFromEnum(std.elf.SHT.LOOS);
375pub const SHT_LOOS = @backingInt(std.elf.SHT.LOOS);
376376/// Deprecated, use `@intFromEnum(std.elf.SHT.LLVM_ADDRSIG)`
377pub const SHT_LLVM_ADDRSIG = @intFromEnum(std.elf.SHT.LLVM_ADDRSIG);
377pub const SHT_LLVM_ADDRSIG = @backingInt(std.elf.SHT.LLVM_ADDRSIG);
378378/// Deprecated, use `@intFromEnum(std.elf.SHT.GNU_HASH)`
379pub const SHT_GNU_HASH = @intFromEnum(std.elf.SHT.GNU_HASH);
379pub const SHT_GNU_HASH = @backingInt(std.elf.SHT.GNU_HASH);
380380/// Deprecated, use `@intFromEnum(std.elf.SHT.GNU_VERDEF)`
381pub const SHT_GNU_VERDEF = @intFromEnum(std.elf.SHT.GNU_VERDEF);
381pub const SHT_GNU_VERDEF = @backingInt(std.elf.SHT.GNU_VERDEF);
382382/// Deprecated, use `@intFromEnum(std.elf.SHT.GNU_VERNEED)`
383pub const SHT_GNU_VERNEED = @intFromEnum(std.elf.SHT.GNU_VERNEED);
383pub const SHT_GNU_VERNEED = @backingInt(std.elf.SHT.GNU_VERNEED);
384384/// Deprecated, use `@intFromEnum(std.elf.SHT.GNU_VERSYM)`
385pub const SHT_GNU_VERSYM = @intFromEnum(std.elf.SHT.GNU_VERSYM);
385pub const SHT_GNU_VERSYM = @backingInt(std.elf.SHT.GNU_VERSYM);
386386/// Deprecated, use `@intFromEnum(std.elf.SHT.HIOS)`
387pub const SHT_HIOS = @intFromEnum(std.elf.SHT.HIOS);
387pub const SHT_HIOS = @backingInt(std.elf.SHT.HIOS);
388388/// Deprecated, use `@intFromEnum(std.elf.SHT.LOPROC)`
389pub const SHT_LOPROC = @intFromEnum(std.elf.SHT.LOPROC);
389pub const SHT_LOPROC = @backingInt(std.elf.SHT.LOPROC);
390390/// Deprecated, use `@intFromEnum(std.elf.SHT.X86_64_UNWIND)`
391pub const SHT_X86_64_UNWIND = @intFromEnum(std.elf.SHT.X86_64_UNWIND);
391pub const SHT_X86_64_UNWIND = @backingInt(std.elf.SHT.X86_64_UNWIND);
392392/// Deprecated, use `@intFromEnum(std.elf.SHT.HIPROC)`
393pub const SHT_HIPROC = @intFromEnum(std.elf.SHT.HIPROC);
393pub const SHT_HIPROC = @backingInt(std.elf.SHT.HIPROC);
394394/// Deprecated, use `@intFromEnum(std.elf.SHT.LOUSER)`
395pub const SHT_LOUSER = @intFromEnum(std.elf.SHT.LOUSER);
395pub const SHT_LOUSER = @backingInt(std.elf.SHT.LOUSER);
396396/// Deprecated, use `@intFromEnum(std.elf.SHT.HIUSER)`
397pub const SHT_HIUSER = @intFromEnum(std.elf.SHT.HIUSER);
397pub const SHT_HIUSER = @backingInt(std.elf.SHT.HIUSER);
398398
399399// Note type for .note.gnu.build_id
400400pub const NT_GNU_BUILD_ID = 3;
401401
402402/// Deprecated, use `@intFromEnum(std.elf.STB.LOCAL)`
403pub const STB_LOCAL = @intFromEnum(STB.LOCAL);
403pub const STB_LOCAL = @backingInt(STB.LOCAL);
404404/// Deprecated, use `@intFromEnum(std.elf.STB.GLOBAL)`
405pub const STB_GLOBAL = @intFromEnum(STB.GLOBAL);
405pub const STB_GLOBAL = @backingInt(STB.GLOBAL);
406406/// Deprecated, use `@intFromEnum(std.elf.STB.WEAK)`
407pub const STB_WEAK = @intFromEnum(STB.WEAK);
407pub const STB_WEAK = @backingInt(STB.WEAK);
408408/// Deprecated, use `std.elf.STB.NUM`
409409pub const STB_NUM = STB.NUM;
410410/// Deprecated, use `@intFromEnum(std.elf.STB.LOOS)`
411pub const STB_LOOS = @intFromEnum(STB.LOOS);
411pub const STB_LOOS = @backingInt(STB.LOOS);
412412/// Deprecated, use `@intFromEnum(std.elf.STB.GNU_UNIQUE)`
413pub const STB_GNU_UNIQUE = @intFromEnum(STB.GNU_UNIQUE);
413pub const STB_GNU_UNIQUE = @backingInt(STB.GNU_UNIQUE);
414414/// Deprecated, use `@intFromEnum(std.elf.STB.HIOS)`
415pub const STB_HIOS = @intFromEnum(STB.HIOS);
415pub const STB_HIOS = @backingInt(STB.HIOS);
416416/// Deprecated, use `@intFromEnum(std.elf.STB.LOPROC)`
417pub const STB_LOPROC = @intFromEnum(STB.LOPROC);
417pub const STB_LOPROC = @backingInt(STB.LOPROC);
418418/// Deprecated, use `@intFromEnum(std.elf.STB.HIPROC)`
419pub const STB_HIPROC = @intFromEnum(STB.HIPROC);
419pub const STB_HIPROC = @backingInt(STB.HIPROC);
420420
421421/// Deprecated, use `@intFromEnum(std.elf.STB.MIPS_SPLIT_COMMON)`
422pub const STB_MIPS_SPLIT_COMMON = @intFromEnum(STB.MIBS_SPLIT_COMMON);
422pub const STB_MIPS_SPLIT_COMMON = @backingInt(STB.MIBS_SPLIT_COMMON);
423423
424424/// Deprecated, use `@intFromEnum(std.elf.STT.NOTYPE)`
425pub const STT_NOTYPE = @intFromEnum(STT.NOTYPE);
425pub const STT_NOTYPE = @backingInt(STT.NOTYPE);
426426/// Deprecated, use `@intFromEnum(std.elf.STT.OBJECT)`
427pub const STT_OBJECT = @intFromEnum(STT.OBJECT);
427pub const STT_OBJECT = @backingInt(STT.OBJECT);
428428/// Deprecated, use `@intFromEnum(std.elf.STT.FUNC)`
429pub const STT_FUNC = @intFromEnum(STT.FUNC);
429pub const STT_FUNC = @backingInt(STT.FUNC);
430430/// Deprecated, use `@intFromEnum(std.elf.STT.SECTION)`
431pub const STT_SECTION = @intFromEnum(STT.SECTION);
431pub const STT_SECTION = @backingInt(STT.SECTION);
432432/// Deprecated, use `@intFromEnum(std.elf.STT.FILE)`
433pub const STT_FILE = @intFromEnum(STT.FILE);
433pub const STT_FILE = @backingInt(STT.FILE);
434434/// Deprecated, use `@intFromEnum(std.elf.STT.COMMON)`
435pub const STT_COMMON = @intFromEnum(STT.COMMON);
435pub const STT_COMMON = @backingInt(STT.COMMON);
436436/// Deprecated, use `@intFromEnum(std.elf.STT.TLS)`
437pub const STT_TLS = @intFromEnum(STT.TLS);
437pub const STT_TLS = @backingInt(STT.TLS);
438438/// Deprecated, use `std.elf.STT.NUM`
439439pub const STT_NUM = STT.NUM;
440440/// Deprecated, use `@intFromEnum(std.elf.STT.LOOS)`
441pub const STT_LOOS = @intFromEnum(STT.LOOS);
441pub const STT_LOOS = @backingInt(STT.LOOS);
442442/// Deprecated, use `@intFromEnum(std.elf.STT.GNU_IFUNC)`
443pub const STT_GNU_IFUNC = @intFromEnum(STT.GNU_IFUNC);
443pub const STT_GNU_IFUNC = @backingInt(STT.GNU_IFUNC);
444444/// Deprecated, use `@intFromEnum(std.elf.STT.HIOS)`
445pub const STT_HIOS = @intFromEnum(STT.HIOS);
445pub const STT_HIOS = @backingInt(STT.HIOS);
446446/// Deprecated, use `@intFromEnum(std.elf.STT.LOPROC)`
447pub const STT_LOPROC = @intFromEnum(STT.LOPROC);
447pub const STT_LOPROC = @backingInt(STT.LOPROC);
448448/// Deprecated, use `@intFromEnum(std.elf.STT.HIPROC)`
449pub const STT_HIPROC = @intFromEnum(STT.HIPROC);
449pub const STT_HIPROC = @backingInt(STT.HIPROC);
450450
451451/// Deprecated, use `@intFromEnum(std.elf.STT.SPARC_REGISTER)`
452pub const STT_SPARC_REGISTER = @intFromEnum(STT.SPARC_REGISTER);
452pub const STT_SPARC_REGISTER = @backingInt(STT.SPARC_REGISTER);
453453
454454/// Deprecated, use `@intFromEnum(std.elf.STT.PARISC_MILLICODE)`
455pub const STT_PARISC_MILLICODE = @intFromEnum(STT.PARISC_MILLICODE);
455pub const STT_PARISC_MILLICODE = @backingInt(STT.PARISC_MILLICODE);
456456
457457/// Deprecated, use `@intFromEnum(std.elf.STT.HP_OPAQUE)`
458pub const STT_HP_OPAQUE = @intFromEnum(STT.HP_OPAQUE);
458pub const STT_HP_OPAQUE = @backingInt(STT.HP_OPAQUE);
459459/// Deprecated, use `@intFromEnum(std.elf.STT.HP_STUB)`
460pub const STT_HP_STUB = @intFromEnum(STT.HP_STUB);
460pub const STT_HP_STUB = @backingInt(STT.HP_STUB);
461461
462462/// Deprecated, use `@intFromEnum(std.elf.STT.ARM_TFUNC)`
463pub const STT_ARM_TFUNC = @intFromEnum(STT.ARM_TFUNC);
463pub const STT_ARM_TFUNC = @backingInt(STT.ARM_TFUNC);
464464/// Deprecated, use `@intFromEnum(std.elf.STT.ARM_16BIT)`
465pub const STT_ARM_16BIT = @intFromEnum(STT.ARM_16BIT);
465pub const STT_ARM_16BIT = @backingInt(STT.ARM_16BIT);
466466
467467pub const PT = enum(Word) {
468468 /// Program header table entry unused
......@@ -487,29 +487,29 @@ pub const PT = enum(Word) {
487487 pub const NUM = @typeInfo(PT).@"enum".field_names.len;
488488
489489 /// Start of OS-specific
490 pub const LOOS: PT = @enumFromInt(0x60000000);
490 pub const LOOS: PT = @fromBackingInt(@intCast(0x60000000));
491491 /// End of OS-specific
492 pub const HIOS: PT = @enumFromInt(0x6fffffff);
492 pub const HIOS: PT = @fromBackingInt(@intCast(0x6fffffff));
493493
494494 /// GCC .eh_frame_hdr segment
495 pub const GNU_EH_FRAME: PT = @enumFromInt(0x6474e550);
495 pub const GNU_EH_FRAME: PT = @fromBackingInt(@intCast(0x6474e550));
496496 /// Indicates stack executability
497 pub const GNU_STACK: PT = @enumFromInt(0x6474e551);
497 pub const GNU_STACK: PT = @fromBackingInt(@intCast(0x6474e551));
498498 /// Read-only after relocation
499 pub const GNU_RELRO: PT = @enumFromInt(0x6474e552);
499 pub const GNU_RELRO: PT = @fromBackingInt(@intCast(0x6474e552));
500500
501 pub const LOSUNW: PT = @enumFromInt(0x6ffffffa);
502 pub const HISUNW: PT = @enumFromInt(0x6fffffff);
501 pub const LOSUNW: PT = @fromBackingInt(@intCast(0x6ffffffa));
502 pub const HISUNW: PT = @fromBackingInt(@intCast(0x6fffffff));
503503
504504 /// Sun specific segment
505 pub const SUNWBSS: PT = @enumFromInt(0x6ffffffa);
505 pub const SUNWBSS: PT = @fromBackingInt(@intCast(0x6ffffffa));
506506 /// Stack segment
507 pub const SUNWSTACK: PT = @enumFromInt(0x6ffffffb);
507 pub const SUNWSTACK: PT = @fromBackingInt(@intCast(0x6ffffffb));
508508
509509 /// Start of processor-specific
510 pub const LOPROC: PT = @enumFromInt(0x70000000);
510 pub const LOPROC: PT = @fromBackingInt(@intCast(0x70000000));
511511 /// End of processor-specific
512 pub const HIPROC: PT = @enumFromInt(0x7fffffff);
512 pub const HIPROC: PT = @fromBackingInt(@intCast(0x7fffffff));
513513};
514514
515515pub const SHT = enum(Word) {
......@@ -555,34 +555,34 @@ pub const SHT = enum(Word) {
555555 pub const NUM = @typeInfo(SHT).@"enum".field_names.len;
556556
557557 /// Start of OS-specific
558 pub const LOOS: SHT = @enumFromInt(0x60000000);
558 pub const LOOS: SHT = @fromBackingInt(@intCast(0x60000000));
559559 /// End of OS-specific
560 pub const HIOS: SHT = @enumFromInt(0x6fffffff);
560 pub const HIOS: SHT = @fromBackingInt(@intCast(0x6fffffff));
561561
562562 /// LLVM address-significance table
563 pub const LLVM_ADDRSIG: SHT = @enumFromInt(0x6fff4c03);
563 pub const LLVM_ADDRSIG: SHT = @fromBackingInt(@intCast(0x6fff4c03));
564564
565565 /// GNU hash table
566 pub const GNU_HASH: SHT = @enumFromInt(0x6ffffff6);
566 pub const GNU_HASH: SHT = @fromBackingInt(@intCast(0x6ffffff6));
567567 /// GNU version definition table
568 pub const GNU_VERDEF: SHT = @enumFromInt(0x6ffffffd);
568 pub const GNU_VERDEF: SHT = @fromBackingInt(@intCast(0x6ffffffd));
569569 /// GNU needed versions table
570 pub const GNU_VERNEED: SHT = @enumFromInt(0x6ffffffe);
570 pub const GNU_VERNEED: SHT = @fromBackingInt(@intCast(0x6ffffffe));
571571 /// GNU symbol version table
572 pub const GNU_VERSYM: SHT = @enumFromInt(0x6fffffff);
572 pub const GNU_VERSYM: SHT = @fromBackingInt(@intCast(0x6fffffff));
573573
574574 /// Start of processor-specific
575 pub const LOPROC: SHT = @enumFromInt(0x70000000);
575 pub const LOPROC: SHT = @fromBackingInt(@intCast(0x70000000));
576576 /// End of processor-specific
577 pub const HIPROC: SHT = @enumFromInt(0x7fffffff);
577 pub const HIPROC: SHT = @fromBackingInt(@intCast(0x7fffffff));
578578
579579 /// Unwind information
580 pub const X86_64_UNWIND: SHT = @enumFromInt(0x70000001);
580 pub const X86_64_UNWIND: SHT = @fromBackingInt(@intCast(0x70000001));
581581
582582 /// Start of application-specific
583 pub const LOUSER: SHT = @enumFromInt(0x80000000);
583 pub const LOUSER: SHT = @fromBackingInt(@intCast(0x80000000));
584584 /// End of application-specific
585 pub const HIUSER: SHT = @enumFromInt(0xffffffff);
585 pub const HIUSER: SHT = @fromBackingInt(@intCast(0xffffffff));
586586};
587587
588588pub const STB = enum(u4) {
......@@ -598,19 +598,19 @@ pub const STB = enum(u4) {
598598 pub const NUM = @typeInfo(STB).@"enum".field_names.len;
599599
600600 /// Start of OS-specific
601 pub const LOOS: STB = @enumFromInt(10);
601 pub const LOOS: STB = @fromBackingInt(@intCast(10));
602602 /// End of OS-specific
603 pub const HIOS: STB = @enumFromInt(12);
603 pub const HIOS: STB = @fromBackingInt(@intCast(12));
604604
605605 /// Unique symbol
606 pub const GNU_UNIQUE: STB = @enumFromInt(@intFromEnum(LOOS) + 0);
606 pub const GNU_UNIQUE: STB = @fromBackingInt(@intCast(@backingInt(LOOS) + 0));
607607
608608 /// Start of processor-specific
609 pub const LOPROC: STB = @enumFromInt(13);
609 pub const LOPROC: STB = @fromBackingInt(@intCast(13));
610610 /// End of processor-specific
611 pub const HIPROC: STB = @enumFromInt(15);
611 pub const HIPROC: STB = @fromBackingInt(@intCast(15));
612612
613 pub const MIPS_SPLIT_COMMON: STB = @enumFromInt(@intFromEnum(LOPROC) + 0);
613 pub const MIPS_SPLIT_COMMON: STB = @fromBackingInt(@intCast(@backingInt(LOPROC) + 0));
614614};
615615
616616pub const STT = enum(u4) {
......@@ -634,27 +634,27 @@ pub const STT = enum(u4) {
634634 pub const NUM = @typeInfo(STT).@"enum".field_names.len;
635635
636636 /// Start of OS-specific
637 pub const LOOS: STT = @enumFromInt(10);
637 pub const LOOS: STT = @fromBackingInt(@intCast(10));
638638 /// End of OS-specific
639 pub const HIOS: STT = @enumFromInt(12);
639 pub const HIOS: STT = @fromBackingInt(@intCast(12));
640640
641641 /// Symbol is indirect code object
642 pub const GNU_IFUNC: STT = @enumFromInt(@intFromEnum(LOOS) + 0);
642 pub const GNU_IFUNC: STT = @fromBackingInt(@intCast(@backingInt(LOOS) + 0));
643643
644 pub const HP_OPAQUE: STT = @enumFromInt(@intFromEnum(LOOS) + 1);
645 pub const HP_STUB: STT = @enumFromInt(@intFromEnum(LOOS) + 2);
644 pub const HP_OPAQUE: STT = @fromBackingInt(@intCast(@backingInt(LOOS) + 1));
645 pub const HP_STUB: STT = @fromBackingInt(@intCast(@backingInt(LOOS) + 2));
646646
647647 /// Start of processor-specific
648 pub const LOPROC: STT = @enumFromInt(13);
648 pub const LOPROC: STT = @fromBackingInt(@intCast(13));
649649 /// End of processor-specific
650 pub const HIPROC: STT = @enumFromInt(15);
650 pub const HIPROC: STT = @fromBackingInt(@intCast(15));
651651
652 pub const SPARC_REGISTER: STT = @enumFromInt(@intFromEnum(LOPROC) + 0);
652 pub const SPARC_REGISTER: STT = @fromBackingInt(@intCast(@backingInt(LOPROC) + 0));
653653
654 pub const PARISC_MILLICODE: STT = @enumFromInt(@intFromEnum(LOPROC) + 0);
654 pub const PARISC_MILLICODE: STT = @fromBackingInt(@intCast(@backingInt(LOPROC) + 0));
655655
656 pub const ARM_TFUNC: STT = @enumFromInt(@intFromEnum(LOPROC) + 0);
657 pub const ARM_16BIT: STT = @enumFromInt(@intFromEnum(HIPROC) + 2);
656 pub const ARM_TFUNC: STT = @fromBackingInt(@intCast(@backingInt(LOPROC) + 0));
657 pub const ARM_16BIT: STT = @fromBackingInt(@intCast(@backingInt(HIPROC) + 2));
658658};
659659
660660pub const STV = enum(u3) {
......@@ -823,7 +823,7 @@ pub const Header = struct {
823823 else => @compileError("bad type"),
824824 },
825825 .endian = endian,
826 .os_abi = @enumFromInt(hdr.e_ident[EI.OSABI]),
826 .os_abi = @fromBackingInt(@intCast(hdr.e_ident[EI.OSABI])),
827827 .abi_version = hdr.e_ident[EI.ABIVERSION],
828828 .type = hdr.e_type,
829829 .machine = hdr.e_machine,
......@@ -1629,11 +1629,11 @@ pub const Ident = extern struct {
16291629};
16301630
16311631/// Deprecated, use `@intFromEnum(std.elf.CLASS.NONE)`
1632pub const ELFCLASSNONE = @intFromEnum(CLASS.NONE);
1632pub const ELFCLASSNONE = @backingInt(CLASS.NONE);
16331633/// Deprecated, use `@intFromEnum(std.elf.CLASS.@"32")`
1634pub const ELFCLASS32 = @intFromEnum(CLASS.@"32");
1634pub const ELFCLASS32 = @backingInt(CLASS.@"32");
16351635/// Deprecated, use `@intFromEnum(std.elf.CLASS.@"64")`
1636pub const ELFCLASS64 = @intFromEnum(CLASS.@"64");
1636pub const ELFCLASS64 = @backingInt(CLASS.@"64");
16371637/// Deprecated, use `@intFromEnum(std.elf.CLASS.NUM)`
16381638pub const ELFCLASSNUM = CLASS.NUM;
16391639pub const CLASS = enum(u8) {
......@@ -1662,11 +1662,11 @@ pub const CLASS = enum(u8) {
16621662};
16631663
16641664/// Deprecated, use `@intFromEnum(std.elf.DATA.NONE)`
1665pub const ELFDATANONE = @intFromEnum(DATA.NONE);
1665pub const ELFDATANONE = @backingInt(DATA.NONE);
16661666/// Deprecated, use `@intFromEnum(std.elf.DATA.@"2LSB")`
1667pub const ELFDATA2LSB = @intFromEnum(DATA.@"2LSB");
1667pub const ELFDATA2LSB = @backingInt(DATA.@"2LSB");
16681668/// Deprecated, use `@intFromEnum(std.elf.DATA.@"2MSB")`
1669pub const ELFDATA2MSB = @intFromEnum(DATA.@"2MSB");
1669pub const ELFDATA2MSB = @backingInt(DATA.@"2MSB");
16701670/// Deprecated, use `@intFromEnum(std.elf.DATA.NUM)`
16711671pub const ELFDATANUM = DATA.NUM;
16721672pub const DATA = enum(u8) {
lib/std/enums.zig+25-25
......@@ -11,7 +11,7 @@ pub fn fromInt(comptime E: type, integer: anytype) ?E {
1111 const enum_info = @typeInfo(E).@"enum";
1212 if (enum_info.mode == .nonexhaustive) {
1313 if (std.math.cast(enum_info.tag_type, integer)) |tag| {
14 return @enumFromInt(tag);
14 return @fromBackingInt(@intCast(tag));
1515 }
1616 return null;
1717 }
......@@ -21,7 +21,7 @@ pub fn fromInt(comptime E: type, integer: anytype) ?E {
2121 // without requiring an inline loop.
2222 // This generates better machine code.
2323 for (values(E)) |value| {
24 if (@intFromEnum(value) == integer) return value;
24 if (@backingInt(value) == integer) return value;
2525 }
2626 return null;
2727}
......@@ -43,7 +43,7 @@ pub inline fn valuesFromFields(comptime E: type, comptime field_values: []const
4343 @setEvalBranchQuota(@typeInfo(E).@"enum".field_names.len + eval_branch_quota_cushion);
4444 var result: [field_values.len]E = undefined;
4545 for (&result, field_values) |*r, f_value| {
46 r.* = @enumFromInt(f_value);
46 r.* = @fromBackingInt(@intCast(f_value));
4747 }
4848 const final = result;
4949 return &final;
......@@ -64,7 +64,7 @@ pub fn tagName(comptime E: type, e: E) ?[:0]const u8 {
6464 const field_values = @typeInfo(E).@"enum".field_values;
6565 @setEvalBranchQuota(field_names.len);
6666 return inline for (field_names, field_values) |f_name, f_value| {
67 if (@intFromEnum(e) == f_value) break f_name;
67 if (@backingInt(e) == f_value) break f_name;
6868 } else null;
6969}
7070
......@@ -72,7 +72,7 @@ test tagName {
7272 const E = enum(u8) { a, b, _ };
7373 try testing.expect(tagName(E, .a) != null);
7474 try testing.expectEqualStrings("a", tagName(E, .a).?);
75 try testing.expect(tagName(E, @as(E, @enumFromInt(42))) == null);
75 try testing.expect(tagName(E, @as(E, @fromBackingInt(@intCast(42)))) == null);
7676}
7777
7878/// Determines the length of a direct-mapped enum array, indexed by
......@@ -168,7 +168,7 @@ pub fn directEnumArrayDefault(
168168 var result: [len]Data = @splat(default orelse undefined);
169169 inline for (@typeInfo(@TypeOf(init_values)).@"struct".field_names) |f_name| {
170170 const enum_value = @field(E, f_name);
171 const index = @as(usize, @intCast(@intFromEnum(enum_value)));
171 const index = @as(usize, @intCast(@backingInt(enum_value)));
172172 result[index] = @field(init_values, f_name);
173173 }
174174 return result;
......@@ -222,8 +222,8 @@ test fromInt {
222222 try testing.expect(fromInt(E1, zero).? == E1.A);
223223 try testing.expect(fromInt(E2, one).? == E2.B);
224224 try testing.expect(fromInt(E3, zero).? == E3.A);
225 try testing.expect(fromInt(E3, 127).? == @as(E3, @enumFromInt(127)));
226 try testing.expect(fromInt(E3, -128).? == @as(E3, @enumFromInt(-128)));
225 try testing.expect(fromInt(E3, 127).? == @as(E3, @fromBackingInt(@intCast(127))));
226 try testing.expect(fromInt(E3, -128).? == @as(E3, @fromBackingInt(@intCast(-128))));
227227 try testing.expectEqual(null, fromInt(E1, one));
228228 try testing.expectEqual(null, fromInt(E3, 128));
229229 try testing.expectEqual(null, fromInt(E3, -129));
......@@ -677,7 +677,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type {
677677 const info = @typeInfo(E).@"enum";
678678 inline for (info.field_names, info.field_values) |field_name, field_value| {
679679 const c = @field(init_counts, field_name);
680 const key: E = @enumFromInt(field_value);
680 const key: E = @fromBackingInt(@intCast(field_value));
681681 self.counts.set(key, c);
682682 }
683683 return self;
......@@ -746,7 +746,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type {
746746 /// asserts operation will not overflow any key.
747747 pub fn addSetAssertSafe(self: *Self, other: Self) void {
748748 inline for (@typeInfo(E).@"enum".field_values) |field_value| {
749 const key = @as(E, @enumFromInt(field_value));
749 const key = @as(E, @fromBackingInt(@intCast(field_value)));
750750 self.addAssertSafe(key, other.getCount(key));
751751 }
752752 }
......@@ -754,7 +754,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type {
754754 /// Increases the all key counts by given multiset.
755755 pub fn addSet(self: *Self, other: Self) error{Overflow}!void {
756756 inline for (@typeInfo(E).@"enum".field_values) |field_value| {
757 const key = @as(E, @enumFromInt(field_value));
757 const key = @as(E, @fromBackingInt(@intCast(field_value)));
758758 try self.add(key, other.getCount(key));
759759 }
760760 }
......@@ -764,7 +764,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type {
764764 /// then that key will have a key count of zero.
765765 pub fn removeSet(self: *Self, other: Self) void {
766766 inline for (@typeInfo(E).@"enum".field_values) |field_value| {
767 const key = @as(E, @enumFromInt(field_value));
767 const key = @as(E, @fromBackingInt(@intCast(field_value)));
768768 self.remove(key, other.getCount(key));
769769 }
770770 }
......@@ -773,7 +773,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type {
773773 /// given multiset.
774774 pub fn eql(self: Self, other: Self) bool {
775775 inline for (@typeInfo(E).@"enum".field_values) |field_value| {
776 const key = @as(E, @enumFromInt(field_value));
776 const key = @as(E, @fromBackingInt(@intCast(field_value)));
777777 if (self.getCount(key) != other.getCount(key)) {
778778 return false;
779779 }
......@@ -785,7 +785,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type {
785785 /// equal to the given multiset.
786786 pub fn subsetOf(self: Self, other: Self) bool {
787787 inline for (@typeInfo(E).@"enum".field_values) |field_value| {
788 const key = @as(E, @enumFromInt(field_value));
788 const key = @as(E, @fromBackingInt(@intCast(field_value)));
789789 if (self.getCount(key) > other.getCount(key)) {
790790 return false;
791791 }
......@@ -797,7 +797,7 @@ pub fn BoundedEnumMultiset(comptime E: type, comptime CountSize: type) type {
797797 /// equal to the given multiset.
798798 pub fn supersetOf(self: Self, other: Self) bool {
799799 inline for (@typeInfo(E).@"enum".field_values) |field_value| {
800 const key = @as(E, @enumFromInt(field_value));
800 const key = @as(E, @fromBackingInt(@intCast(field_value)));
801801 if (self.getCount(key) < other.getCount(key)) {
802802 return false;
803803 }
......@@ -1284,18 +1284,18 @@ pub fn EnumIndexer(comptime E: type) type {
12841284
12851285 pub fn indexOf(e: E) usize {
12861286 if (backing_int_sign == .unsigned)
1287 return @intFromEnum(e);
1287 return @backingInt(e);
12881288
1289 return if (@intFromEnum(e) < 0)
1290 @intCast(@intFromEnum(e) - min_value)
1289 return if (@backingInt(e) < 0)
1290 @intCast(@backingInt(e) - min_value)
12911291 else
1292 @as(RangeType, -min_value) + @as(RangeType, @intCast(@intFromEnum(e)));
1292 @as(RangeType, -min_value) + @as(RangeType, @intCast(@backingInt(e)));
12931293 }
12941294 pub fn keyForIndex(i: usize) E {
12951295 if (backing_int_sign == .unsigned)
1296 return @enumFromInt(i);
1296 return @fromBackingInt(@intCast(i));
12971297
1298 return @enumFromInt(@as(@Int(.signed, @bitSizeOf(RangeType) + 1), @intCast(i)) + min_value);
1298 return @fromBackingInt(@intCast(@as(@Int(.signed, @bitSizeOf(RangeType) + 1), @intCast(i)) + min_value));
12991299 }
13001300 };
13011301 }
......@@ -1330,14 +1330,14 @@ pub fn EnumIndexer(comptime E: type) type {
13301330 pub const Key = E;
13311331 pub const count: comptime_int = fields_len;
13321332 pub fn indexOf(e: E) usize {
1333 return @as(usize, @intCast(@intFromEnum(e) - min));
1333 return @as(usize, @intCast(@backingInt(e) - min));
13341334 }
13351335 pub fn keyForIndex(i: usize) E {
13361336 // TODO fix addition semantics. This calculation
13371337 // gives up some safety to avoid artificially limiting
13381338 // the range of signed enum values to max_isize.
13391339 const enum_value = if (min < 0) @as(isize, @bitCast(i)) +% min else i + min;
1340 return @as(E, @enumFromInt(@as(@typeInfo(E).@"enum".tag_type, @intCast(enum_value))));
1340 return @as(E, @fromBackingInt(@intCast(@as(@typeInfo(E).@"enum".tag_type, @intCast(enum_value)))));
13411341 }
13421342 };
13431343 }
......@@ -1384,8 +1384,8 @@ test "EnumIndexer non-exhaustive" {
13841384 };
13851385 const Indexer = EnumIndexer(E);
13861386
1387 const min_tag: E = @enumFromInt(std.math.minInt(BackingInt));
1388 const max_tag: E = @enumFromInt(std.math.maxInt(BackingInt));
1387 const min_tag: E = @fromBackingInt(@intCast(std.math.minInt(BackingInt)));
1388 const max_tag: E = @fromBackingInt(@intCast(std.math.maxInt(BackingInt)));
13891389
13901390 const RangedType = @Int(.unsigned, @bitSizeOf(BackingInt));
13911391 const max_index: comptime_int = std.math.maxInt(RangedType);
lib/std/fmt.zig+3-3
......@@ -947,15 +947,15 @@ test "non-exhaustive enum" {
947947 };
948948 try expectFmt("enum: .One\n", "enum: {}\n", .{Enum.One});
949949 try expectFmt("enum: .Two\n", "enum: {}\n", .{Enum.Two});
950 try expectFmt("enum: @enumFromInt(4660)\n", "enum: {}\n", .{@as(Enum, @enumFromInt(0x1234))});
950 try expectFmt("enum: @enumFromInt(4660)\n", "enum: {}\n", .{@as(Enum, @fromBackingInt(@intCast(0x1234)))});
951951 try expectFmt("enum: f\n", "enum: {x}\n", .{Enum.One});
952952 try expectFmt("enum: beef\n", "enum: {x}\n", .{Enum.Two});
953953 try expectFmt("enum: BEEF\n", "enum: {X}\n", .{Enum.Two});
954 try expectFmt("enum: 1234\n", "enum: {x}\n", .{@as(Enum, @enumFromInt(0x1234))});
954 try expectFmt("enum: 1234\n", "enum: {x}\n", .{@as(Enum, @fromBackingInt(@intCast(0x1234)))});
955955
956956 try expectFmt("enum: 15\n", "enum: {d}\n", .{Enum.One});
957957 try expectFmt("enum: 48879\n", "enum: {d}\n", .{Enum.Two});
958 try expectFmt("enum: 4660\n", "enum: {d}\n", .{@as(Enum, @enumFromInt(0x1234))});
958 try expectFmt("enum: 4660\n", "enum: {d}\n", .{@as(Enum, @fromBackingInt(@intCast(0x1234)))});
959959}
960960
961961test "float.scientific" {
lib/std/hash/auto_hash.zig+1-1
......@@ -106,7 +106,7 @@ pub fn hash(hasher: anytype, key: anytype, comptime strat: HashStrategy) void {
106106 },
107107
108108 .bool => hash(hasher, @intFromBool(key), strat),
109 .@"enum" => hash(hasher, @intFromEnum(key), strat),
109 .@"enum" => hash(hasher, @backingInt(key), strat),
110110 .error_set => hash(hasher, @intFromError(key), strat),
111111 .@"anyframe", .@"fn" => hash(hasher, @intFromPtr(key), strat),
112112
lib/std/heap.zig+2-2
......@@ -78,7 +78,7 @@ pub fn defaultQueryPageSize() usize {
7878 if (size > 0) return size;
7979 size = size: switch (builtin.os.tag) {
8080 .linux => if (builtin.link_libc)
81 @max(std.c.sysconf(@intFromEnum(std.c._SC.PAGESIZE)), 0)
81 @max(std.c.sysconf(@backingInt(std.c._SC.PAGESIZE)), 0)
8282 else
8383 std.os.linux.getauxval(std.elf.AT_PAGESZ),
8484 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => {
......@@ -109,7 +109,7 @@ pub fn defaultQueryPageSize() usize {
109109 }
110110 },
111111 else => if (builtin.link_libc)
112 @max(std.c.sysconf(@intFromEnum(std.c._SC.PAGESIZE)), 0)
112 @max(std.c.sysconf(@backingInt(std.c._SC.PAGESIZE)), 0)
113113 else if (builtin.os.tag == .freestanding or builtin.os.tag == .other)
114114 @compileError("unsupported target: freestanding/other")
115115 else
lib/std/heap/ArenaAllocator.zig+12-12
......@@ -765,7 +765,7 @@ fn fuzzMultiThreaded(fuzz_init: FuzzContext.Init, smith: *std.testing.Smith) any
765765 .@"1",
766766 .fromByteUnits(2 * std.heap.page_size_max),
767767 ),
768 @enumFromInt(alloc_index),
768 @fromBackingInt(@intCast(alloc_index)),
769769 }) catch unreachable;
770770 },
771771 .resize => group.concurrent(io, FuzzContext.doOneResize, .{ &ctx, nextLen(smith) }) catch unreachable,
......@@ -877,7 +877,7 @@ const FuzzContext = struct {
877877 for (ctx.allocs[0..n_allocs]) |allocation| {
878878 const len: usize = switch (allocation.common.len) {
879879 .free => continue,
880 _ => |len| @intFromEnum(len),
880 _ => |len| @backingInt(len),
881881 };
882882 const control = allocation.control_ptr[0..len];
883883 const sample = allocation.sample_ptr[0..len];
......@@ -887,7 +887,7 @@ const FuzzContext = struct {
887887
888888 fn doOneAlloc(ctx: *FuzzContext, len: usize, alignment: Alignment, index: Alloc.Index) void {
889889 @disableInstrumentation();
890 assert(ctx.allocs[@intFromEnum(index)].common.len == .free);
890 assert(ctx.allocs[@backingInt(index)].common.len == .free);
891891
892892 const control_ptr = ctx.control_allocator.rawAlloc(len, alignment, @returnAddress()) orelse
893893 return;
......@@ -896,11 +896,11 @@ const FuzzContext = struct {
896896 return;
897897 };
898898
899 ctx.allocs[@intFromEnum(index)] = .{
899 ctx.allocs[@backingInt(index)] = .{
900900 .control_ptr = control_ptr,
901901 .sample_ptr = sample_ptr,
902902 .common = .{
903 .len = @enumFromInt(len),
903 .len = @fromBackingInt(@intCast(len)),
904904 .alignment = alignment,
905905 },
906906 };
......@@ -918,9 +918,9 @@ const FuzzContext = struct {
918918 const index = @atomicRmw(Alloc.Index, &ctx.last_alloc_index, .Xchg, .none, .acquire);
919919 if (index == .none) return;
920920
921 const allocation = &ctx.allocs[@intFromEnum(index)];
921 const allocation = &ctx.allocs[@backingInt(index)];
922922 assert(allocation.common.len != .free);
923 const memory = allocation.sample_ptr[0..@intFromEnum(allocation.common.len)];
923 const memory = allocation.sample_ptr[0..@backingInt(allocation.common.len)];
924924 const alignment = allocation.common.alignment;
925925
926926 assert(alignment.check(@intFromPtr(allocation.control_ptr)));
......@@ -940,11 +940,11 @@ const FuzzContext = struct {
940940 return;
941941 }
942942
943 ctx.allocs[@intFromEnum(index)] = .{
943 ctx.allocs[@backingInt(index)] = .{
944944 .control_ptr = new_control_ptr,
945945 .sample_ptr = memory.ptr,
946946 .common = .{
947 .len = @enumFromInt(new_len),
947 .len = @fromBackingInt(@intCast(new_len)),
948948 .alignment = alignment,
949949 },
950950 };
......@@ -972,9 +972,9 @@ const FuzzContext = struct {
972972 const index = @atomicRmw(Alloc.Index, &ctx.last_alloc_index, .Xchg, .none, .acquire);
973973 if (index == .none) return;
974974
975 const allocation = &ctx.allocs[@intFromEnum(index)];
975 const allocation = &ctx.allocs[@backingInt(index)];
976976 assert(allocation.common.len != .free);
977 const len: usize = @intFromEnum(allocation.common.len);
977 const len: usize = @backingInt(allocation.common.len);
978978 const alignment = allocation.common.alignment;
979979
980980 assert(alignment.check(@intFromPtr(allocation.control_ptr)));
......@@ -983,7 +983,7 @@ const FuzzContext = struct {
983983 ctx.control_allocator.rawFree(allocation.control_ptr[0..len], alignment, @returnAddress());
984984 ctx.sample_allocator.rawFree(allocation.sample_ptr[0..len], alignment, @returnAddress());
985985
986 ctx.allocs[@intFromEnum(index)] = .{
986 ctx.allocs[@backingInt(index)] = .{
987987 .control_ptr = undefined,
988988 .sample_ptr = undefined,
989989 .common = .{
lib/std/heap/SafeAllocator.zig+18-18
......@@ -359,12 +359,12 @@ const AllocFooter = struct {
359359
360360 fn storedXor(m: Modify, ptr: *Modify) Modify {
361361 const addr_hash: u16 = @truncate(std.hash.int(@intFromPtr(ptr)));
362 return @enumFromInt(@intFromEnum(m) ^ addr_hash);
362 return @fromBackingInt(@intCast(@backingInt(m) ^ addr_hash));
363363 }
364364 };
365365
366366 fn isExtended(f: *AllocFooter) bool {
367 return @intFromEnum(f.data.len) >= Data.Len.extended_start;
367 return @backingInt(f.data.len) >= Data.Len.extended_start;
368368 }
369369
370370 fn extended(f: *AllocFooter) *Extended {
......@@ -380,13 +380,13 @@ const AllocFooter = struct {
380380 }
381381
382382 fn userLen(f: *AllocFooter) usize {
383 const len_int = @intFromEnum(f.data.len);
383 const len_int = @backingInt(f.data.len);
384384 return if (len_int < Data.Len.extended_start) len_int else f.extended().len;
385385 }
386386
387387 fn userAlign(f: *AllocFooter) Alignment {
388 const high = (@intFromEnum(f.data.len) -| Data.Len.extended_start) << 2;
389 return @enumFromInt(high | f.data.alignment);
388 const high = (@backingInt(f.data.len) -| Data.Len.extended_start) << 2;
389 return @fromBackingInt(@intCast(high | f.data.alignment));
390390 }
391391
392392 fn bucketPrev(f: *AllocFooter, b: *Bucket, s: *SafeAllocator) ?*AllocFooter {
......@@ -439,7 +439,7 @@ const AllocFooter = struct {
439439 /// Assumes the footer is in a bucket allocation; all
440440 /// large allocations require an extended header.
441441 fn requiresExtended(len: usize, alignment: Alignment) bool {
442 return len >= Data.Len.extended_start or @intFromEnum(alignment) > math.maxInt(u2);
442 return len >= Data.Len.extended_start or @backingInt(alignment) > math.maxInt(u2);
443443 }
444444
445445 fn lenBucket(s: *SafeAllocator, is_extended: bool) usize {
......@@ -592,15 +592,15 @@ const AllocFooter = struct {
592592
593593 if (!is_extended) {
594594 footer.data = .{
595 .len = @enumFromInt(len),
596 .alignment = @intCast(@intFromEnum(alignment)),
595 .len = @fromBackingInt(@intCast(len)),
596 .alignment = @intCast(@backingInt(alignment)),
597597 .prev_extended = prev_extended,
598598 };
599599 assert(!footer.isExtended());
600600 } else {
601601 footer.data = .{
602 .len = @enumFromInt(Data.Len.extended_start + (@intFromEnum(alignment) >> 2)),
603 .alignment = @truncate(@intFromEnum(alignment)),
602 .len = @fromBackingInt(@intCast(Data.Len.extended_start + (@backingInt(alignment) >> 2))),
603 .alignment = @truncate(@backingInt(alignment)),
604604 .prev_extended = prev_extended,
605605 };
606606 assert(footer.isExtended());
......@@ -720,7 +720,7 @@ fn deinitLeakedBucket(s: *SafeAllocator, b: *Bucket, log: bool) usize {
720720
721721 footer = footer.bucketPrev(b, s) orelse break;
722722 }
723 s.backing.rawFree(b.bytes(s), @enumFromInt(s.bucket_size_log2), 0);
723 s.backing.rawFree(b.bytes(s), @fromBackingInt(@intCast(s.bucket_size_log2)), 0);
724724
725725 assert(leaks == expected.n);
726726 return leaks;
......@@ -875,7 +875,7 @@ fn captureStackTrace(trace_buf: []usize, ra: usize) void {
875875 }
876876
877877 const t = std.debug.captureCurrentStackTrace(.{ .first_address = ra }, trace_buf[1..]);
878 const skipped = @intFromEnum(t.skipped) *
878 const skipped = @backingInt(t.skipped) *
879879 @intFromBool(t.return_addresses.len == trace_buf[1..].len);
880880 trace_buf[0] = t.return_addresses.len +| skipped;
881881}
......@@ -888,7 +888,7 @@ fn formatStackTrace(trace_buf: []usize) std.debug.FormatStackTrace {
888888 break :trace .{
889889 .return_addresses = addrs[0..@min(frames, addrs.len)],
890890 .skipped = switch (frames) {
891 else => @enumFromInt(frames -| addrs.len),
891 else => @fromBackingInt(@intCast(frames -| addrs.len)),
892892 0, math.maxInt(usize) => .unknown,
893893 },
894894 };
......@@ -937,7 +937,7 @@ fn allocBucket(
937937 @branchHint(.unlikely);
938938 freeAllocEntry(t, b.entry);
939939 b.check(s);
940 s.backing.rawFree(b.bytes(s), @enumFromInt(s.bucket_size_log2), ra);
940 s.backing.rawFree(b.bytes(s), @fromBackingInt(@intCast(s.bucket_size_log2)), ra);
941941 }
942942
943943 return null;
......@@ -1096,7 +1096,7 @@ fn alloc(ctx: *anyopaque, len: usize, alignment: Alignment, ra: usize) ?[*]u8 {
10961096 const entry = s.newAllocEntry(t, ra) catch return null;
10971097 const bucket: *Bucket = @ptrCast(@alignCast(s.backing.rawAlloc(
10981098 s.bucketSize(),
1099 @enumFromInt(s.bucket_size_log2),
1099 @fromBackingInt(@intCast(s.bucket_size_log2)),
11001100 ra,
11011101 ) orelse {
11021102 freeAllocEntry(t, entry);
......@@ -1171,7 +1171,7 @@ fn free(ctx: *anyopaque, memory: []u8, alignment: Alignment, ra: usize) void {
11711171 freeAllocEntry(t, b.entry);
11721172 t.mutex.unlock();
11731173 b.check(s);
1174 s.backing.rawFree(b.bytes(s), @enumFromInt(s.bucket_size_log2), ra);
1174 s.backing.rawFree(b.bytes(s), @fromBackingInt(@intCast(s.bucket_size_log2)), ra);
11751175 }
11761176}
11771177
......@@ -1346,8 +1346,8 @@ const Smith = std.testing.Smith;
13461346const fuzz_probs = struct {
13471347 const alignment: []const Smith.Weight = &.{
13481348 .rangeAtMost(Alignment, .@"1", .@"16", 32), // ~75%
1349 .rangeAtMost(Alignment, .@"16", @enumFromInt(@bitSizeOf(usize) - 1), 1),
1350 .value(Alignment, @enumFromInt(@bitSizeOf(usize) - 1), 32), // More likely overflow cases
1349 .rangeAtMost(Alignment, .@"16", @fromBackingInt(@intCast(@bitSizeOf(usize) - 1)), 1),
1350 .value(Alignment, @fromBackingInt(@intCast(@bitSizeOf(usize) - 1)), 32), // More likely overflow cases
13511351 };
13521352
13531353 const eos: []const Smith.Weight = &.{
lib/std/heap/SmpAllocator.zig+1-1
......@@ -216,7 +216,7 @@ fn free(context: *anyopaque, memory: []u8, alignment: Alignment, ra: usize) void
216216}
217217
218218fn sizeClassIndex(len: usize, alignment: Alignment) usize {
219 return @max(@bitSizeOf(usize) - @clz(len - 1), @intFromEnum(alignment), min_class) - min_class;
219 return @max(@bitSizeOf(usize) - @clz(len - 1), @backingInt(alignment), min_class) - min_class;
220220}
221221
222222fn slotSize(class: usize) usize {
lib/std/heap/debug_allocator.zig+11-11
......@@ -230,8 +230,8 @@ pub fn DebugAllocator(comptime config: Config) type {
230230 }
231231
232232 fn getStackTrace(self: *LargeAlloc, trace_kind: TraceKind) std.debug.StackTrace {
233 assert(@intFromEnum(trace_kind) < trace_n);
234 const stack_addresses = &self.stack_addresses[@intFromEnum(trace_kind)];
233 assert(@backingInt(trace_kind) < trace_n);
234 const stack_addresses = &self.stack_addresses[@backingInt(trace_kind)];
235235 var len: usize = 0;
236236 while (len < stack_n and stack_addresses[len] != 0) {
237237 len += 1;
......@@ -243,8 +243,8 @@ pub fn DebugAllocator(comptime config: Config) type {
243243 }
244244
245245 fn captureStackTrace(self: *LargeAlloc, ret_addr: usize, trace_kind: TraceKind) void {
246 assert(@intFromEnum(trace_kind) < trace_n);
247 const stack_addresses = &self.stack_addresses[@intFromEnum(trace_kind)];
246 assert(@backingInt(trace_kind) < trace_n);
247 const stack_addresses = &self.stack_addresses[@backingInt(trace_kind)];
248248 collectStackTrace(ret_addr, stack_addresses);
249249 }
250250 };
......@@ -297,7 +297,7 @@ pub fn DebugAllocator(comptime config: Config) type {
297297 ) *[stack_n]usize {
298298 const start_ptr = @as([*]u8, @ptrCast(bucket)) + bucketStackFramesStart(slot_count);
299299 const addr = start_ptr + one_trace_size * traces_per_slot * slot_index +
300 @intFromEnum(trace_kind) * @as(usize, one_trace_size);
300 @backingInt(trace_kind) * @as(usize, one_trace_size);
301301 return @ptrCast(@alignCast(addr));
302302 }
303303
......@@ -586,7 +586,7 @@ pub fn DebugAllocator(comptime config: Config) type {
586586 // If this would move the allocation into a small size class,
587587 // refuse the request, because it would require creating small
588588 // allocation metadata.
589 const new_size_class_index: usize = @max(@bitSizeOf(usize) - @clz(new_size - 1), @intFromEnum(alignment));
589 const new_size_class_index: usize = @max(@bitSizeOf(usize) - @clz(new_size - 1), @backingInt(alignment));
590590 if (new_size_class_index < self.buckets.len) return null;
591591
592592 // Do memory limit accounting with requested sizes rather than what
......@@ -727,7 +727,7 @@ pub fn DebugAllocator(comptime config: Config) type {
727727 self.total_requested_bytes = new_req_bytes;
728728 }
729729
730 const size_class_index: usize = @max(@bitSizeOf(usize) - @clz(len - 1), @intFromEnum(alignment));
730 const size_class_index: usize = @max(@bitSizeOf(usize) - @clz(len - 1), @backingInt(alignment));
731731 if (size_class_index >= self.buckets.len) {
732732 @branchHint(.unlikely);
733733 self.large_allocations.ensureUnusedCapacity(self.backing_allocator, 1) catch return null;
......@@ -834,7 +834,7 @@ pub fn DebugAllocator(comptime config: Config) type {
834834 if (have_mutex) std.Io.Threaded.mutexLock(&self.mutex);
835835 defer if (have_mutex) std.Io.Threaded.mutexUnlock(&self.mutex);
836836
837 const size_class_index: usize = @max(@bitSizeOf(usize) - @clz(memory.len - 1), @intFromEnum(alignment));
837 const size_class_index: usize = @max(@bitSizeOf(usize) - @clz(memory.len - 1), @backingInt(alignment));
838838 if (size_class_index >= self.buckets.len) {
839839 return self.resizeLarge(memory, alignment, new_len, return_address, false) != null;
840840 } else {
......@@ -853,7 +853,7 @@ pub fn DebugAllocator(comptime config: Config) type {
853853 if (have_mutex) std.Io.Threaded.mutexLock(&self.mutex);
854854 defer if (have_mutex) std.Io.Threaded.mutexUnlock(&self.mutex);
855855
856 const size_class_index: usize = @max(@bitSizeOf(usize) - @clz(memory.len - 1), @intFromEnum(alignment));
856 const size_class_index: usize = @max(@bitSizeOf(usize) - @clz(memory.len - 1), @backingInt(alignment));
857857 if (size_class_index >= self.buckets.len) {
858858 return self.resizeLarge(memory, alignment, new_len, return_address, true);
859859 } else {
......@@ -871,7 +871,7 @@ pub fn DebugAllocator(comptime config: Config) type {
871871 if (have_mutex) std.Io.Threaded.mutexLock(&self.mutex);
872872 defer if (have_mutex) std.Io.Threaded.mutexUnlock(&self.mutex);
873873
874 const size_class_index: usize = @max(@bitSizeOf(usize) - @clz(old_memory.len - 1), @intFromEnum(alignment));
874 const size_class_index: usize = @max(@bitSizeOf(usize) - @clz(old_memory.len - 1), @backingInt(alignment));
875875 if (size_class_index >= self.buckets.len) {
876876 @branchHint(.unlikely);
877877 self.freeLarge(old_memory, alignment, return_address);
......@@ -990,7 +990,7 @@ pub fn DebugAllocator(comptime config: Config) type {
990990 return_address: usize,
991991 size_class_index: usize,
992992 ) bool {
993 const new_size_class_index: usize = @max(@bitSizeOf(usize) - @clz(new_len - 1), @intFromEnum(alignment));
993 const new_size_class_index: usize = @max(@bitSizeOf(usize) - @clz(new_len - 1), @backingInt(alignment));
994994 if (!config.safety) {
995995 if (new_size_class_index != size_class_index) return false;
996996 // Still account for total even if safety is off
lib/std/http.zig+5-5
......@@ -247,7 +247,7 @@ pub const Status = enum(u10) {
247247 };
248248
249249 pub fn class(self: Status) Class {
250 return switch (@intFromEnum(self)) {
250 return switch (@backingInt(self)) {
251251 100...199 => .informational,
252252 200...299 => .success,
253253 300...399 => .redirect,
......@@ -338,11 +338,11 @@ pub const Reader = struct {
338338 _,
339339
340340 pub fn init(integer: u64) RemainingChunkLen {
341 return @enumFromInt(integer);
341 return @fromBackingInt(@intCast(integer));
342342 }
343343
344344 pub fn int(rcl: RemainingChunkLen) u64 {
345 return @intFromEnum(rcl);
345 return @backingInt(rcl);
346346 }
347347 };
348348
......@@ -597,8 +597,8 @@ pub const Reader = struct {
597597 continue :len .head;
598598 },
599599 else => |remaining_chunk_len| {
600 const n = try in.stream(w, limit.min(.limited64(@intFromEnum(remaining_chunk_len) - 2)));
601 chunk_len_ptr.* = .init(@intFromEnum(remaining_chunk_len) - n);
600 const n = try in.stream(w, limit.min(.limited64(@backingInt(remaining_chunk_len) - 2)));
601 chunk_len_ptr.* = .init(@backingInt(remaining_chunk_len) - n);
602602 return n;
603603 },
604604 }
lib/std/http/Client.zig+11-11
......@@ -531,7 +531,7 @@ pub const Response = struct {
531531 else => return error.HttpHeadersInvalid,
532532 };
533533 if (first_line[8] != ' ') return error.HttpHeadersInvalid;
534 const status: http.Status = @enumFromInt(parseInt3(first_line[9..12]));
534 const status: http.Status = @fromBackingInt(@intCast(parseInt3(first_line[9..12])));
535535 const reason = mem.trimStart(u8, first_line[12..], " ");
536536
537537 res.version = version;
......@@ -825,9 +825,9 @@ pub const Request = struct {
825825
826826 pub const default_accept_encoding: [@typeInfo(http.ContentEncoding).@"enum".field_names.len]bool = b: {
827827 var result: [@typeInfo(http.ContentEncoding).@"enum".field_names.len]bool = @splat(false);
828 result[@intFromEnum(http.ContentEncoding.gzip)] = true;
829 result[@intFromEnum(http.ContentEncoding.deflate)] = true;
830 result[@intFromEnum(http.ContentEncoding.identity)] = true;
828 result[@backingInt(http.ContentEncoding.gzip)] = true;
829 result[@backingInt(http.ContentEncoding.deflate)] = true;
830 result[@backingInt(http.ContentEncoding.identity)] = true;
831831 break :b result;
832832 };
833833
......@@ -864,20 +864,20 @@ pub const Request = struct {
864864
865865 pub fn init(n: u16) RedirectBehavior {
866866 assert(n != std.math.maxInt(u16));
867 return @enumFromInt(n);
867 return @fromBackingInt(@intCast(n));
868868 }
869869
870870 pub fn subtractOne(rb: *RedirectBehavior) void {
871871 switch (rb.*) {
872872 .not_allowed => unreachable,
873873 .unhandled => unreachable,
874 _ => rb.* = @enumFromInt(@intFromEnum(rb.*) - 1),
874 _ => rb.* = @fromBackingInt(@intCast(@backingInt(rb.*) - 1)),
875875 }
876876 }
877877
878878 pub fn remaining(rb: RedirectBehavior) u16 {
879879 assert(rb != .unhandled);
880 return @intFromEnum(rb);
880 return @backingInt(rb);
881881 }
882882 };
883883
......@@ -1037,7 +1037,7 @@ pub const Request = struct {
10371037 try w.writeAll("accept-encoding: ");
10381038 for (r.accept_encoding, 0..) |enabled, i| {
10391039 if (!enabled) continue;
1040 const tag: http.ContentEncoding = @enumFromInt(i);
1040 const tag: http.ContentEncoding = @fromBackingInt(@intCast(i));
10411041 if (tag == .identity) continue;
10421042 const tag_name = @tagName(tag);
10431043 try w.ensureUnusedCapacity(tag_name.len + 2);
......@@ -1188,7 +1188,7 @@ pub const Request = struct {
11881188 continue;
11891189 }
11901190
1191 if (!r.accept_encoding[@intFromEnum(head.content_encoding)])
1191 if (!r.accept_encoding[@backingInt(head.content_encoding)])
11921192 return error.HttpContentEncodingUnsupported;
11931193
11941194 r.response_transfer_encoding = head.transfer_encoding;
......@@ -1654,7 +1654,7 @@ pub const RequestOptions = struct {
16541654 ///
16551655 /// This will only follow redirects for repeatable requests (ie. with no
16561656 /// payload or the server has acknowledged the payload).
1657 redirect_behavior: Request.RedirectBehavior = @enumFromInt(3),
1657 redirect_behavior: Request.RedirectBehavior = @fromBackingInt(@intCast(3)),
16581658
16591659 /// Must be an already acquired connection.
16601660 connection: ?*Connection = null,
......@@ -1813,7 +1813,7 @@ pub fn fetch(client: *Client, options: FetchOptions) FetchError!FetchResult {
18131813 if (options.payload != null) .POST else .GET;
18141814
18151815 const redirect_behavior: Request.RedirectBehavior = options.redirect_behavior orelse
1816 if (options.payload == null) @enumFromInt(3) else .unhandled;
1816 if (options.payload == null) @fromBackingInt(@intCast(3)) else .unhandled;
18171817
18181818 var req = try request(client, method, uri, .{
18191819 .redirect_behavior = redirect_behavior,
lib/std/http/Server.zig+5-5
......@@ -353,7 +353,7 @@ pub const Request = struct {
353353
354354 const out = request.server.out;
355355 try out.print("{s} {d} {s}\r\n", .{
356 @tagName(options.version), @intFromEnum(options.status), phrase,
356 @tagName(options.version), @backingInt(options.status), phrase,
357357 });
358358
359359 switch (options.version) {
......@@ -424,7 +424,7 @@ pub const Request = struct {
424424 const out = request.server.out;
425425
426426 try out.print("{s} {d} {s}\r\n", .{
427 @tagName(o.version), @intFromEnum(o.status), phrase,
427 @tagName(o.version), @backingInt(o.status), phrase,
428428 });
429429
430430 switch (o.version) {
......@@ -544,7 +544,7 @@ pub const Request = struct {
544544 sha1.update("258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
545545 var digest: [std.crypto.hash.Sha1.digest_length]u8 = undefined;
546546 sha1.final(&digest);
547 try out.print("{s} {d} {s}\r\n", .{ @tagName(version), @intFromEnum(status), phrase });
547 try out.print("{s} {d} {s}\r\n", .{ @tagName(version), @backingInt(status), phrase });
548548 try out.writeAll("connection: upgrade\r\nupgrade: websocket\r\nsec-websocket-accept: ");
549549 const base64_digest = try out.writableArray(28);
550550 assert(std.base64.standard.Encoder.encode(base64_digest, &digest).len == base64_digest.len);
......@@ -723,7 +723,7 @@ pub const WebSocket = struct {
723723 const len: usize = switch (h1.payload_len) {
724724 .len16 => try in.takeInt(u16, .big),
725725 .len64 => std.math.cast(usize, try in.takeInt(u64, .big)) orelse return error.MessageOversize,
726 else => @intFromEnum(h1.payload_len),
726 else => @backingInt(h1.payload_len),
727727 };
728728 if (len > in.buffer.len) return error.MessageOversize;
729729 const mask: [4]u8 = (try in.takeArray(4)).*;
......@@ -781,7 +781,7 @@ pub const WebSocket = struct {
781781 })));
782782 switch (total_len) {
783783 0...125 => try out.writeByte(@bitCast(@as(Header1, .{
784 .payload_len = @enumFromInt(total_len),
784 .payload_len = @fromBackingInt(@intCast(total_len)),
785785 .mask = false,
786786 }))),
787787 126...0xffff => {
lib/std/json/Stringify.zig+5-5
......@@ -127,7 +127,7 @@ pub fn endObject(self: *Stringify) Error!void {
127127fn pushIndentation(self: *Stringify, mode: IndentationMode) !void {
128128 switch (safety_checks) {
129129 .checked_to_fixed_depth => {
130 BitStack.pushWithStateAssumeCapacity(&self.nesting_stack, &self.indent_level, @intFromEnum(mode));
130 BitStack.pushWithStateAssumeCapacity(&self.nesting_stack, &self.indent_level, @backingInt(mode));
131131 },
132132 .assumed_correct => {
133133 self.indent_level += 1;
......@@ -137,7 +137,7 @@ fn pushIndentation(self: *Stringify, mode: IndentationMode) !void {
137137fn popIndentation(self: *Stringify, expected_mode: IndentationMode) void {
138138 switch (safety_checks) {
139139 .checked_to_fixed_depth => {
140 assert(BitStack.popWithState(&self.nesting_stack, &self.indent_level) == @intFromEnum(expected_mode));
140 assert(BitStack.popWithState(&self.nesting_stack, &self.indent_level) == @backingInt(expected_mode));
141141 },
142142 .assumed_correct => {
143143 self.indent_level -= 1;
......@@ -202,7 +202,7 @@ fn valueDone(self: *Stringify) void {
202202fn isObjectKeyExpected(self: *const Stringify) ?bool {
203203 switch (safety_checks) {
204204 .checked_to_fixed_depth => return self.indent_level > 0 and
205 BitStack.peekWithState(&self.nesting_stack, self.indent_level) == @intFromEnum(IndentationMode.object) and
205 BitStack.peekWithState(&self.nesting_stack, self.indent_level) == @backingInt(IndentationMode.object) and
206206 self.next_punctuation != .colon,
207207 .assumed_correct => return null,
208208 }
......@@ -407,7 +407,7 @@ pub fn write(self: *Stringify, v: anytype) Error!void {
407407 break;
408408 }
409409 } else {
410 return self.write(@intFromEnum(v));
410 return self.write(@backingInt(v));
411411 }
412412 }
413413
......@@ -858,7 +858,7 @@ test "stringify non-exhaustive enum" {
858858 _,
859859 };
860860 try testStringify("\"foo\"", E.foo, .{});
861 try testStringify("1", @as(E, @enumFromInt(1)), .{});
861 try testStringify("1", @as(E, @fromBackingInt(@intCast(1))), .{});
862862}
863863
864864test "stringify enum literals" {
lib/std/lang.zig+1-1
......@@ -911,7 +911,7 @@ pub const Endian = enum {
911911 little,
912912
913913 pub const native = builtin.target.cpu.arch.endian();
914 pub const foreign: Endian = @enumFromInt(1 - @intFromEnum(native));
914 pub const foreign: Endian = @fromBackingInt(@intCast(1 - @backingInt(native)));
915915};
916916
917917/// This data structure is used by the Zig language code generation and
lib/std/log.zig+2-2
......@@ -75,9 +75,9 @@ fn log(
7575/// Determine if a specific log message level and scope combination are enabled for logging.
7676pub fn logEnabled(comptime level: Level, comptime scope: @EnumLiteral()) bool {
7777 inline for (std.options.log_scope_levels) |scope_level| {
78 if (scope_level.scope == scope) return @intFromEnum(level) <= @intFromEnum(scope_level.level);
78 if (scope_level.scope == scope) return @backingInt(level) <= @backingInt(scope_level.level);
7979 }
80 return @intFromEnum(level) <= @intFromEnum(std.options.log_level);
80 return @backingInt(level) <= @backingInt(std.options.log_level);
8181}
8282
8383pub const terminalMode = std.Options.logTerminalMode;
lib/std/math.zig+1-1
......@@ -1643,7 +1643,7 @@ pub const CompareOperator = enum {
16431643
16441644 test reverse {
16451645 inline for (@typeInfo(CompareOperator).@"enum".field_values) |op_field_value| {
1646 const op = @as(CompareOperator, @enumFromInt(op_field_value));
1646 const op = @as(CompareOperator, @fromBackingInt(@intCast(op_field_value)));
16471647 try testing.expect(compare(2, op, 3) == compare(3, op.reverse(), 2));
16481648 try testing.expect(compare(3, op, 3) == compare(3, op.reverse(), 3));
16491649 try testing.expect(compare(4, op, 3) == compare(3, op.reverse(), 4));
lib/std/math/float.zig+2-2
......@@ -92,13 +92,13 @@ pub fn FloatRepr(comptime Float: type) type {
9292 pub fn unbias(biased: BiasedExponent) Exponent {
9393 switch (biased) {
9494 .denormal => unreachable,
95 else => return @bitCast(@intFromEnum(biased) -% @intFromEnum(BiasedExponent.zero)),
95 else => return @bitCast(@backingInt(biased) -% @backingInt(BiasedExponent.zero)),
9696 .infinite => unreachable,
9797 }
9898 }
9999
100100 pub fn bias(unbiased: Exponent) BiasedExponent {
101 return @enumFromInt(@intFromEnum(BiasedExponent.zero) +% @as(Int, @bitCast(unbiased)));
101 return @fromBackingInt(@intCast(@backingInt(BiasedExponent.zero) +% @as(Int, @bitCast(unbiased))));
102102 }
103103 };
104104
lib/std/mem.zig+13-13
......@@ -32,12 +32,12 @@ pub const Alignment = enum(math.Log2Int(usize)) {
3232 _,
3333
3434 pub fn toByteUnits(a: Alignment) usize {
35 return @as(usize, 1) << @intFromEnum(a);
35 return @as(usize, 1) << @backingInt(a);
3636 }
3737
3838 pub fn fromByteUnits(n: usize) Alignment {
3939 assert(std.math.isPowerOfTwo(n));
40 return @enumFromInt(@ctz(n));
40 return @fromBackingInt(@intCast(@ctz(n)));
4141 }
4242
4343 pub fn fromByteUnitsOptional(maybe_n: ?usize) ?Alignment {
......@@ -49,36 +49,36 @@ pub const Alignment = enum(math.Log2Int(usize)) {
4949 }
5050
5151 pub fn order(lhs: Alignment, rhs: Alignment) std.math.Order {
52 return std.math.order(@intFromEnum(lhs), @intFromEnum(rhs));
52 return std.math.order(@backingInt(lhs), @backingInt(rhs));
5353 }
5454
5555 pub fn compare(lhs: Alignment, op: std.math.CompareOperator, rhs: Alignment) bool {
56 return std.math.compare(@intFromEnum(lhs), op, @intFromEnum(rhs));
56 return std.math.compare(@backingInt(lhs), op, @backingInt(rhs));
5757 }
5858
5959 pub fn max(lhs: Alignment, rhs: Alignment) Alignment {
60 return @enumFromInt(@max(@intFromEnum(lhs), @intFromEnum(rhs)));
60 return @fromBackingInt(@intCast(@max(@backingInt(lhs), @backingInt(rhs))));
6161 }
6262
6363 pub fn min(lhs: Alignment, rhs: Alignment) Alignment {
64 return @enumFromInt(@min(@intFromEnum(lhs), @intFromEnum(rhs)));
64 return @fromBackingInt(@intCast(@min(@backingInt(lhs), @backingInt(rhs))));
6565 }
6666
6767 /// Return next address with this alignment.
6868 pub fn forward(a: Alignment, address: usize) usize {
69 const x = (@as(usize, 1) << @intFromEnum(a)) - 1;
69 const x = (@as(usize, 1) << @backingInt(a)) - 1;
7070 return (address + x) & ~x;
7171 }
7272
7373 /// Return previous address with this alignment.
7474 pub fn backward(a: Alignment, address: usize) usize {
75 const x = (@as(usize, 1) << @intFromEnum(a)) - 1;
75 const x = (@as(usize, 1) << @backingInt(a)) - 1;
7676 return address & ~x;
7777 }
7878
7979 /// Return whether address is aligned to this amount.
8080 pub fn check(a: Alignment, address: usize) bool {
81 return @ctz(address) >= @intFromEnum(a);
81 return @ctz(address) >= @backingInt(a);
8282 }
8383};
8484
......@@ -280,7 +280,7 @@ pub fn zeroes(comptime T: type) T {
280280 return @as(T, 0);
281281 },
282282 .@"enum" => {
283 return @as(T, @enumFromInt(0));
283 return @as(T, @fromBackingInt(@intCast(0)));
284284 },
285285 .void => {
286286 return {};
......@@ -2233,7 +2233,7 @@ pub fn byteSwapAllFieldsAligned(comptime S: type, comptime a: Alignment, ptr: *a
22332233 .@"struct" => byteSwapAllFieldsAligned(f_type, .fromByteUnits(f_attr.@"align" orelse @alignOf(f_type)), &@field(ptr, f_name)),
22342234 .@"union", .array => byteSwapAllFieldsAligned(f_type, .fromByteUnits(f_attr.@"align" orelse @alignOf(f_type)), &@field(ptr, f_name)),
22352235 .@"enum" => {
2236 @field(ptr, f_name) = @enumFromInt(@byteSwap(@intFromEnum(@field(ptr, f_name))));
2236 @field(ptr, f_name) = @fromBackingInt(@intCast(@byteSwap(@backingInt(@field(ptr, f_name)))));
22372237 },
22382238 .bool => {},
22392239 .float => |float| {
......@@ -2364,7 +2364,7 @@ pub fn byteSwapAllElements(comptime Elem: type, slice: []Elem) void {
23642364 switch (@typeInfo(@TypeOf(elem.*))) {
23652365 .@"struct", .@"union", .array => byteSwapAllFields(@TypeOf(elem.*), elem),
23662366 .@"enum" => {
2367 elem.* = @enumFromInt(@byteSwap(@intFromEnum(elem.*)));
2367 elem.* = @fromBackingInt(@intCast(@byteSwap(@backingInt(elem.*))));
23682368 },
23692369 .bool => {},
23702370 .float => |float| {
......@@ -4784,7 +4784,7 @@ pub fn doNotOptimizeAway(val: anytype) void {
47844784 const t = @typeInfo(@TypeOf(val));
47854785 switch (t) {
47864786 .void, .null, .comptime_int, .comptime_float => return,
4787 .@"enum" => doNotOptimizeAway(@intFromEnum(val)),
4787 .@"enum" => doNotOptimizeAway(@backingInt(val)),
47884788 .bool => doNotOptimizeAway(@intFromBool(val)),
47894789 .int => {
47904790 const bits = t.int.bits;
lib/std/meta.zig+2-2
......@@ -253,7 +253,7 @@ pub fn fieldInfo(comptime T: type, comptime field: FieldEnum(T)) switch (@typeIn
253253 .error_set => struct { name: [:0]const u8 },
254254 else => @compileError("Expected struct, union, error set or enum type, found '" ++ @typeName(T) ++ "'"),
255255} {
256 const idx = @intFromEnum(field);
256 const idx = @backingInt(field);
257257 return switch (@typeInfo(T)) {
258258 .@"struct" => |info| .{
259259 .name = info.field_names[idx],
......@@ -399,7 +399,7 @@ pub fn FieldEnum(comptime T: type) type {
399399 switch (@typeInfo(T)) {
400400 .@"union" => |@"union"| if (@"union".tag_type) |EnumTag| {
401401 for (std.enums.values(EnumTag), 0..) |v, i| {
402 if (@intFromEnum(v) != i) break; // enum values not consecutive
402 if (@backingInt(v) != i) break; // enum values not consecutive
403403 if (!std.mem.eql(u8, @tagName(v), field_names[i])) break; // fields out of order
404404 } else {
405405 return EnumTag;
lib/std/meta/trailer_flags.zig+5-5
......@@ -42,7 +42,7 @@ pub fn TrailerFlags(comptime Fields: type) type {
4242 pub const Self = @This();
4343
4444 pub fn has(self: Self, comptime field: FieldEnum) bool {
45 const field_index = @intFromEnum(field);
45 const field_index = @backingInt(field);
4646 return (self.bits & (1 << field_index)) != 0;
4747 }
4848
......@@ -53,7 +53,7 @@ pub fn TrailerFlags(comptime Fields: type) type {
5353 }
5454
5555 pub fn setFlag(self: *Self, comptime field: FieldEnum) void {
56 const field_index = @intFromEnum(field);
56 const field_index = @backingInt(field);
5757 self.bits |= 1 << field_index;
5858 }
5959
......@@ -71,7 +71,7 @@ pub fn TrailerFlags(comptime Fields: type) type {
7171 pub fn setMany(self: Self, p: [*]align(@alignOf(Fields)) u8, fields: FieldValues) void {
7272 inline for (@typeInfo(Fields).@"struct".field_names, 0..) |field_name, i| {
7373 if (@field(fields, field_name)) |value|
74 self.set(p, @as(FieldEnum, @enumFromInt(i)), value);
74 self.set(p, @as(FieldEnum, @fromBackingInt(@intCast(i))), value);
7575 }
7676 }
7777
......@@ -102,7 +102,7 @@ pub fn TrailerFlags(comptime Fields: type) type {
102102 var off: usize = 0;
103103 inline for (@typeInfo(Fields).@"struct".field_types, 0..) |field_type, i| {
104104 const active = (self.bits & (1 << i)) != 0;
105 if (i == @intFromEnum(field)) {
105 if (i == @backingInt(field)) {
106106 assert(active);
107107 return mem.alignForward(usize, off, @alignOf(field_type));
108108 } else if (active) {
......@@ -113,7 +113,7 @@ pub fn TrailerFlags(comptime Fields: type) type {
113113 }
114114
115115 pub fn Field(comptime field: FieldEnum) type {
116 return @typeInfo(Fields).@"struct".field_types[@intFromEnum(field)];
116 return @typeInfo(Fields).@"struct".field_types[@backingInt(field)];
117117 }
118118
119119 pub fn sizeInBytes(self: Self) usize {
lib/std/multi_array_list.zig+13-13
......@@ -92,7 +92,7 @@ pub fn MultiArrayList(comptime T: type) type {
9292 if (self.capacity == 0) {
9393 return &[_]F{};
9494 }
95 const byte_ptr = self.ptrs[@intFromEnum(field)];
95 const byte_ptr = self.ptrs[@backingInt(field)];
9696 const casted_ptr: [*]F = if (@sizeOf(F) == 0)
9797 undefined
9898 else
......@@ -107,14 +107,14 @@ pub fn MultiArrayList(comptime T: type) type {
107107 else => unreachable,
108108 };
109109 inline for (field_names, 0..) |field_name, i| {
110 self.items(@as(Field, @enumFromInt(i)))[index] = @field(e, field_name);
110 self.items(@as(Field, @fromBackingInt(@intCast(i))))[index] = @field(e, field_name);
111111 }
112112 }
113113
114114 pub fn get(self: Slice, index: usize) T {
115115 var result: Elem = undefined;
116116 inline for (field_names, 0..) |field_name, i| {
117 @field(result, field_name) = self.items(@as(Field, @enumFromInt(i)))[index];
117 @field(result, field_name) = self.items(@as(Field, @fromBackingInt(@intCast(i))))[index];
118118 }
119119 return switch (@typeInfo(T)) {
120120 .@"struct" => result,
......@@ -361,7 +361,7 @@ pub fn MultiArrayList(comptime T: type) type {
361361 };
362362 const slices = self.slice();
363363 inline for (field_names, 0..) |field_name, field_index| {
364 const field_slice = slices.items(@as(Field, @enumFromInt(field_index)));
364 const field_slice = slices.items(@as(Field, @fromBackingInt(@intCast(field_index))));
365365 var i: usize = self.len - 1;
366366 while (i > index) : (i -= 1) {
367367 field_slice[i] = field_slice[i - 1];
......@@ -387,7 +387,7 @@ pub fn MultiArrayList(comptime T: type) type {
387387 pub fn swapRemove(self: *Self, index: usize) void {
388388 const slices = self.slice();
389389 inline for (field_names, 0..) |_, i| {
390 const field_slice = slices.items(@as(Field, @enumFromInt(i)));
390 const field_slice = slices.items(@as(Field, @fromBackingInt(@intCast(i))));
391391 field_slice[index] = field_slice[self.len - 1];
392392 field_slice[self.len - 1] = undefined;
393393 }
......@@ -399,7 +399,7 @@ pub fn MultiArrayList(comptime T: type) type {
399399 pub fn orderedRemove(self: *Self, index: usize) void {
400400 const slices = self.slice();
401401 inline for (field_names, 0..) |_, field_index| {
402 const field_slice = slices.items(@as(Field, @enumFromInt(field_index)));
402 const field_slice = slices.items(@as(Field, @fromBackingInt(@intCast(field_index))));
403403 var i = index;
404404 while (i < self.len - 1) : (i += 1) {
405405 field_slice[i] = field_slice[i + 1];
......@@ -430,7 +430,7 @@ pub fn MultiArrayList(comptime T: type) type {
430430 const start = removed + 1;
431431 const len = end - start; // safety checks `sorted_indexes` are sorted
432432 inline for (field_names, 0..) |_, field_index| {
433 const field_slice = slices.items(@enumFromInt(field_index));
433 const field_slice = slices.items(@fromBackingInt(@intCast(field_index)));
434434 @memmove(field_slice[start - shift ..][0..len], field_slice[start..][0..len]); // safety checks initial `sorted_indexes` are in range
435435 }
436436 shift += 1;
......@@ -439,7 +439,7 @@ pub fn MultiArrayList(comptime T: type) type {
439439 const end = self.len;
440440 const len = end - start; // safety checks final `sorted_indexes` are in range
441441 inline for (field_names, 0..) |_, field_index| {
442 const field_slice = slices.items(@enumFromInt(field_index));
442 const field_slice = slices.items(@fromBackingInt(@intCast(field_index)));
443443 @memmove(field_slice[start - shift ..][0..len], field_slice[start..][0..len]);
444444 }
445445 self.len = end - shift;
......@@ -465,7 +465,7 @@ pub fn MultiArrayList(comptime T: type) type {
465465 const self_slice = self.slice();
466466 inline for (field_types, 0..) |field_type, i| {
467467 if (@sizeOf(field_type) != 0) {
468 const field = @as(Field, @enumFromInt(i));
468 const field = @as(Field, @fromBackingInt(@intCast(i)));
469469 const dest_slice = self_slice.items(field)[new_len..];
470470 // We use memset here for more efficient codegen in safety-checked,
471471 // valgrind-enabled builds. Otherwise the valgrind client request
......@@ -486,7 +486,7 @@ pub fn MultiArrayList(comptime T: type) type {
486486 const other_slice = other.slice();
487487 inline for (field_types, 0..) |field_type, i| {
488488 if (@sizeOf(field_type) != 0) {
489 const field = @as(Field, @enumFromInt(i));
489 const field = @as(Field, @fromBackingInt(@intCast(i)));
490490 @memcpy(other_slice.items(field), self_slice.items(field));
491491 }
492492 }
......@@ -558,7 +558,7 @@ pub fn MultiArrayList(comptime T: type) type {
558558 const other_slice = other.slice();
559559 inline for (field_types, 0..) |field_type, i| {
560560 if (@sizeOf(field_type) != 0) {
561 const field = @as(Field, @enumFromInt(i));
561 const field = @as(Field, @fromBackingInt(@intCast(i)));
562562 @memcpy(other_slice.items(field), self_slice.items(field));
563563 }
564564 }
......@@ -577,7 +577,7 @@ pub fn MultiArrayList(comptime T: type) type {
577577 const result_slice = result.slice();
578578 inline for (field_types, 0..) |field_type, i| {
579579 if (@sizeOf(field_type) != 0) {
580 const field = @as(Field, @enumFromInt(i));
580 const field = @as(Field, @fromBackingInt(@intCast(i)));
581581 @memcpy(result_slice.items(field), self_slice.items(field));
582582 }
583583 }
......@@ -594,7 +594,7 @@ pub fn MultiArrayList(comptime T: type) type {
594594 pub fn swap(sc: @This(), a_index: usize, b_index: usize) void {
595595 inline for (field_types, 0..) |field_type, i| {
596596 if (@sizeOf(field_type) != 0) {
597 const field: Field = @enumFromInt(i);
597 const field: Field = @fromBackingInt(@intCast(i));
598598 const ptr = sc.slice.items(field);
599599 mem.swap(field_type, &ptr[a_index], &ptr[b_index]);
600600 }
lib/std/os/emscripten.zig+79-79
......@@ -28,85 +28,85 @@ pub fn CPU_COUNT(set: cpu_set_t) cpu_count_t {
2828}
2929
3030pub const E = enum(u16) {
31 SUCCESS = @intFromEnum(wasi.errno_t.SUCCESS),
32 @"2BIG" = @intFromEnum(wasi.errno_t.@"2BIG"),
33 ACCES = @intFromEnum(wasi.errno_t.ACCES),
34 ADDRINUSE = @intFromEnum(wasi.errno_t.ADDRINUSE),
35 ADDRNOTAVAIL = @intFromEnum(wasi.errno_t.ADDRNOTAVAIL),
36 AFNOSUPPORT = @intFromEnum(wasi.errno_t.AFNOSUPPORT),
31 SUCCESS = @backingInt(wasi.errno_t.SUCCESS),
32 @"2BIG" = @backingInt(wasi.errno_t.@"2BIG"),
33 ACCES = @backingInt(wasi.errno_t.ACCES),
34 ADDRINUSE = @backingInt(wasi.errno_t.ADDRINUSE),
35 ADDRNOTAVAIL = @backingInt(wasi.errno_t.ADDRNOTAVAIL),
36 AFNOSUPPORT = @backingInt(wasi.errno_t.AFNOSUPPORT),
3737 /// This is also the error code used for `WOULDBLOCK`.
38 AGAIN = @intFromEnum(wasi.errno_t.AGAIN),
39 ALREADY = @intFromEnum(wasi.errno_t.ALREADY),
40 BADF = @intFromEnum(wasi.errno_t.BADF),
41 BADMSG = @intFromEnum(wasi.errno_t.BADMSG),
42 BUSY = @intFromEnum(wasi.errno_t.BUSY),
43 CANCELED = @intFromEnum(wasi.errno_t.CANCELED),
44 CHILD = @intFromEnum(wasi.errno_t.CHILD),
45 CONNABORTED = @intFromEnum(wasi.errno_t.CONNABORTED),
46 CONNREFUSED = @intFromEnum(wasi.errno_t.CONNREFUSED),
47 CONNRESET = @intFromEnum(wasi.errno_t.CONNRESET),
48 DEADLK = @intFromEnum(wasi.errno_t.DEADLK),
49 DESTADDRREQ = @intFromEnum(wasi.errno_t.DESTADDRREQ),
50 DOM = @intFromEnum(wasi.errno_t.DOM),
51 DQUOT = @intFromEnum(wasi.errno_t.DQUOT),
52 EXIST = @intFromEnum(wasi.errno_t.EXIST),
53 FAULT = @intFromEnum(wasi.errno_t.FAULT),
54 FBIG = @intFromEnum(wasi.errno_t.FBIG),
55 HOSTUNREACH = @intFromEnum(wasi.errno_t.HOSTUNREACH),
56 IDRM = @intFromEnum(wasi.errno_t.IDRM),
57 ILSEQ = @intFromEnum(wasi.errno_t.ILSEQ),
58 INPROGRESS = @intFromEnum(wasi.errno_t.INPROGRESS),
59 INTR = @intFromEnum(wasi.errno_t.INTR),
60 INVAL = @intFromEnum(wasi.errno_t.INVAL),
61 IO = @intFromEnum(wasi.errno_t.IO),
62 ISCONN = @intFromEnum(wasi.errno_t.ISCONN),
63 ISDIR = @intFromEnum(wasi.errno_t.ISDIR),
64 LOOP = @intFromEnum(wasi.errno_t.LOOP),
65 MFILE = @intFromEnum(wasi.errno_t.MFILE),
66 MLINK = @intFromEnum(wasi.errno_t.MLINK),
67 MSGSIZE = @intFromEnum(wasi.errno_t.MSGSIZE),
68 MULTIHOP = @intFromEnum(wasi.errno_t.MULTIHOP),
69 NAMETOOLONG = @intFromEnum(wasi.errno_t.NAMETOOLONG),
70 NETDOWN = @intFromEnum(wasi.errno_t.NETDOWN),
71 NETRESET = @intFromEnum(wasi.errno_t.NETRESET),
72 NETUNREACH = @intFromEnum(wasi.errno_t.NETUNREACH),
73 NFILE = @intFromEnum(wasi.errno_t.NFILE),
74 NOBUFS = @intFromEnum(wasi.errno_t.NOBUFS),
75 NODEV = @intFromEnum(wasi.errno_t.NODEV),
76 NOENT = @intFromEnum(wasi.errno_t.NOENT),
77 NOEXEC = @intFromEnum(wasi.errno_t.NOEXEC),
78 NOLCK = @intFromEnum(wasi.errno_t.NOLCK),
79 NOLINK = @intFromEnum(wasi.errno_t.NOLINK),
80 NOMEM = @intFromEnum(wasi.errno_t.NOMEM),
81 NOMSG = @intFromEnum(wasi.errno_t.NOMSG),
82 NOPROTOOPT = @intFromEnum(wasi.errno_t.NOPROTOOPT),
83 NOSPC = @intFromEnum(wasi.errno_t.NOSPC),
84 NOSYS = @intFromEnum(wasi.errno_t.NOSYS),
85 NOTCONN = @intFromEnum(wasi.errno_t.NOTCONN),
86 NOTDIR = @intFromEnum(wasi.errno_t.NOTDIR),
87 NOTEMPTY = @intFromEnum(wasi.errno_t.NOTEMPTY),
88 NOTRECOVERABLE = @intFromEnum(wasi.errno_t.NOTRECOVERABLE),
89 NOTSOCK = @intFromEnum(wasi.errno_t.NOTSOCK),
38 AGAIN = @backingInt(wasi.errno_t.AGAIN),
39 ALREADY = @backingInt(wasi.errno_t.ALREADY),
40 BADF = @backingInt(wasi.errno_t.BADF),
41 BADMSG = @backingInt(wasi.errno_t.BADMSG),
42 BUSY = @backingInt(wasi.errno_t.BUSY),
43 CANCELED = @backingInt(wasi.errno_t.CANCELED),
44 CHILD = @backingInt(wasi.errno_t.CHILD),
45 CONNABORTED = @backingInt(wasi.errno_t.CONNABORTED),
46 CONNREFUSED = @backingInt(wasi.errno_t.CONNREFUSED),
47 CONNRESET = @backingInt(wasi.errno_t.CONNRESET),
48 DEADLK = @backingInt(wasi.errno_t.DEADLK),
49 DESTADDRREQ = @backingInt(wasi.errno_t.DESTADDRREQ),
50 DOM = @backingInt(wasi.errno_t.DOM),
51 DQUOT = @backingInt(wasi.errno_t.DQUOT),
52 EXIST = @backingInt(wasi.errno_t.EXIST),
53 FAULT = @backingInt(wasi.errno_t.FAULT),
54 FBIG = @backingInt(wasi.errno_t.FBIG),
55 HOSTUNREACH = @backingInt(wasi.errno_t.HOSTUNREACH),
56 IDRM = @backingInt(wasi.errno_t.IDRM),
57 ILSEQ = @backingInt(wasi.errno_t.ILSEQ),
58 INPROGRESS = @backingInt(wasi.errno_t.INPROGRESS),
59 INTR = @backingInt(wasi.errno_t.INTR),
60 INVAL = @backingInt(wasi.errno_t.INVAL),
61 IO = @backingInt(wasi.errno_t.IO),
62 ISCONN = @backingInt(wasi.errno_t.ISCONN),
63 ISDIR = @backingInt(wasi.errno_t.ISDIR),
64 LOOP = @backingInt(wasi.errno_t.LOOP),
65 MFILE = @backingInt(wasi.errno_t.MFILE),
66 MLINK = @backingInt(wasi.errno_t.MLINK),
67 MSGSIZE = @backingInt(wasi.errno_t.MSGSIZE),
68 MULTIHOP = @backingInt(wasi.errno_t.MULTIHOP),
69 NAMETOOLONG = @backingInt(wasi.errno_t.NAMETOOLONG),
70 NETDOWN = @backingInt(wasi.errno_t.NETDOWN),
71 NETRESET = @backingInt(wasi.errno_t.NETRESET),
72 NETUNREACH = @backingInt(wasi.errno_t.NETUNREACH),
73 NFILE = @backingInt(wasi.errno_t.NFILE),
74 NOBUFS = @backingInt(wasi.errno_t.NOBUFS),
75 NODEV = @backingInt(wasi.errno_t.NODEV),
76 NOENT = @backingInt(wasi.errno_t.NOENT),
77 NOEXEC = @backingInt(wasi.errno_t.NOEXEC),
78 NOLCK = @backingInt(wasi.errno_t.NOLCK),
79 NOLINK = @backingInt(wasi.errno_t.NOLINK),
80 NOMEM = @backingInt(wasi.errno_t.NOMEM),
81 NOMSG = @backingInt(wasi.errno_t.NOMSG),
82 NOPROTOOPT = @backingInt(wasi.errno_t.NOPROTOOPT),
83 NOSPC = @backingInt(wasi.errno_t.NOSPC),
84 NOSYS = @backingInt(wasi.errno_t.NOSYS),
85 NOTCONN = @backingInt(wasi.errno_t.NOTCONN),
86 NOTDIR = @backingInt(wasi.errno_t.NOTDIR),
87 NOTEMPTY = @backingInt(wasi.errno_t.NOTEMPTY),
88 NOTRECOVERABLE = @backingInt(wasi.errno_t.NOTRECOVERABLE),
89 NOTSOCK = @backingInt(wasi.errno_t.NOTSOCK),
9090 /// This is also the code used for `NOTSUP`.
91 OPNOTSUPP = @intFromEnum(wasi.errno_t.OPNOTSUPP),
92 NOTTY = @intFromEnum(wasi.errno_t.NOTTY),
93 NXIO = @intFromEnum(wasi.errno_t.NXIO),
94 OVERFLOW = @intFromEnum(wasi.errno_t.OVERFLOW),
95 OWNERDEAD = @intFromEnum(wasi.errno_t.OWNERDEAD),
96 PERM = @intFromEnum(wasi.errno_t.PERM),
97 PIPE = @intFromEnum(wasi.errno_t.PIPE),
98 PROTO = @intFromEnum(wasi.errno_t.PROTO),
99 PROTONOSUPPORT = @intFromEnum(wasi.errno_t.PROTONOSUPPORT),
100 PROTOTYPE = @intFromEnum(wasi.errno_t.PROTOTYPE),
101 RANGE = @intFromEnum(wasi.errno_t.RANGE),
102 ROFS = @intFromEnum(wasi.errno_t.ROFS),
103 SPIPE = @intFromEnum(wasi.errno_t.SPIPE),
104 SRCH = @intFromEnum(wasi.errno_t.SRCH),
105 STALE = @intFromEnum(wasi.errno_t.STALE),
106 TIMEDOUT = @intFromEnum(wasi.errno_t.TIMEDOUT),
107 TXTBSY = @intFromEnum(wasi.errno_t.TXTBSY),
108 XDEV = @intFromEnum(wasi.errno_t.XDEV),
109 NOTCAPABLE = @intFromEnum(wasi.errno_t.NOTCAPABLE),
91 OPNOTSUPP = @backingInt(wasi.errno_t.OPNOTSUPP),
92 NOTTY = @backingInt(wasi.errno_t.NOTTY),
93 NXIO = @backingInt(wasi.errno_t.NXIO),
94 OVERFLOW = @backingInt(wasi.errno_t.OVERFLOW),
95 OWNERDEAD = @backingInt(wasi.errno_t.OWNERDEAD),
96 PERM = @backingInt(wasi.errno_t.PERM),
97 PIPE = @backingInt(wasi.errno_t.PIPE),
98 PROTO = @backingInt(wasi.errno_t.PROTO),
99 PROTONOSUPPORT = @backingInt(wasi.errno_t.PROTONOSUPPORT),
100 PROTOTYPE = @backingInt(wasi.errno_t.PROTOTYPE),
101 RANGE = @backingInt(wasi.errno_t.RANGE),
102 ROFS = @backingInt(wasi.errno_t.ROFS),
103 SPIPE = @backingInt(wasi.errno_t.SPIPE),
104 SRCH = @backingInt(wasi.errno_t.SRCH),
105 STALE = @backingInt(wasi.errno_t.STALE),
106 TIMEDOUT = @backingInt(wasi.errno_t.TIMEDOUT),
107 TXTBSY = @backingInt(wasi.errno_t.TXTBSY),
108 XDEV = @backingInt(wasi.errno_t.XDEV),
109 NOTCAPABLE = @backingInt(wasi.errno_t.NOTCAPABLE),
110110
111111 ENOSTR = 100,
112112 EBFONT = 101,
......@@ -209,10 +209,10 @@ pub const W = struct {
209209 return @as(u8, @intCast((s & 0xff00) >> 8));
210210 }
211211 pub fn TERMSIG(s: u32) SIG {
212 return @enumFromInt(s & 0x7f);
212 return @fromBackingInt(@intCast(s & 0x7f));
213213 }
214214 pub fn STOPSIG(s: u32) SIG {
215 return @enumFromInt(EXITSTATUS(s));
215 return @fromBackingInt(@intCast(EXITSTATUS(s)));
216216 }
217217 pub fn IFEXITED(s: u32) bool {
218218 return (s & 0x7f) == 0;
lib/std/os/linux.zig+44-44
......@@ -755,7 +755,7 @@ fn splitValue64(val: i64) [2]u32 {
755755pub fn errno(r: u64) E {
756756 const signed_r: i32 = @bitCast(@as(u32, @truncate(r)));
757757 const int = if (signed_r > -4096 and signed_r < 0) -signed_r else 0;
758 return @enumFromInt(int);
758 return @fromBackingInt(@intCast(int));
759759}
760760
761761pub fn brk(addr: usize) usize {
......@@ -822,7 +822,7 @@ pub fn fork() usize {
822822 } else if (@hasField(SYS, "fork")) {
823823 return syscall0(.fork);
824824 } else {
825 return syscall2(.clone, @intFromEnum(SIG.CHLD), 0);
825 return syscall2(.clone, @backingInt(SIG.CHLD), 0);
826826 }
827827}
828828
......@@ -945,7 +945,7 @@ pub fn futex2_waitv(
945945 nr_futexes,
946946 @as(u32, @bitCast(flags)),
947947 @intFromPtr(timeout),
948 @intFromEnum(clockid),
948 @backingInt(clockid),
949949 );
950950}
951951
......@@ -974,7 +974,7 @@ pub fn futex2_wait(
974974 mask,
975975 @as(u32, @bitCast(flags)),
976976 @intFromPtr(timeout),
977 @intFromEnum(clockid),
977 @backingInt(clockid),
978978 );
979979}
980980
......@@ -1250,7 +1250,7 @@ pub const FSCONFIG_CMD = enum(u32) {
12501250};
12511251
12521252pub fn fsconfig(fd: fd_t, cmd: FSCONFIG_CMD, key: ?[*:0]const u8, value: ?[*:0]const u8, aux: u32) usize {
1253 return syscall5(.fsconfig, @as(u32, @bitCast(fd)), @intFromEnum(cmd), @intFromPtr(key), @intFromPtr(value), aux);
1253 return syscall5(.fsconfig, @as(u32, @bitCast(fd)), @backingInt(cmd), @intFromPtr(key), @intFromPtr(value), aux);
12541254}
12551255
12561256pub const FSMOUNT = packed struct(u32) {
......@@ -1897,9 +1897,9 @@ pub const LINUX_REBOOT = struct {
18971897pub fn reboot(magic: LINUX_REBOOT.MAGIC1, magic2: LINUX_REBOOT.MAGIC2, cmd: LINUX_REBOOT.CMD, arg: ?*const anyopaque) usize {
18981898 return std.os.linux.syscall4(
18991899 .reboot,
1900 @intFromEnum(magic),
1901 @intFromEnum(magic2),
1902 @intFromEnum(cmd),
1900 @backingInt(magic),
1901 @backingInt(magic2),
1902 @backingInt(cmd),
19031903 @intFromPtr(arg),
19041904 );
19051905}
......@@ -1909,15 +1909,15 @@ pub fn getrandom(buf: [*]u8, count: usize, flags: u32) usize {
19091909}
19101910
19111911pub fn kill(pid: pid_t, sig: SIG) usize {
1912 return syscall2(.kill, @as(u32, @bitCast(pid)), @intFromEnum(sig));
1912 return syscall2(.kill, @as(u32, @bitCast(pid)), @backingInt(sig));
19131913}
19141914
19151915pub fn tkill(tid: pid_t, sig: SIG) usize {
1916 return syscall2(.tkill, @as(u32, @bitCast(tid)), @intFromEnum(sig));
1916 return syscall2(.tkill, @as(u32, @bitCast(tid)), @backingInt(sig));
19171917}
19181918
19191919pub fn tgkill(tgid: pid_t, tid: pid_t, sig: SIG) usize {
1920 return syscall3(.tgkill, @as(u32, @bitCast(tgid)), @as(u32, @bitCast(tid)), @intFromEnum(sig));
1920 return syscall3(.tgkill, @as(u32, @bitCast(tgid)), @as(u32, @bitCast(tid)), @backingInt(sig));
19211921}
19221922
19231923pub fn link(oldpath: [*:0]const u8, newpath: [*:0]const u8) usize {
......@@ -1979,7 +1979,7 @@ pub fn wait4(pid: pid_t, status: *i32, flags: u32, usage: ?*rusage) usize {
19791979pub fn waitid(id_type: P, id: pid_t, infop: *siginfo_t, flags: u32, usage: ?*rusage) usize {
19801980 return syscall5(
19811981 .waitid,
1982 @intFromEnum(id_type),
1982 @backingInt(id_type),
19831983 @as(u32, @bitCast(id)),
19841984 @intFromPtr(infop),
19851985 flags,
......@@ -2146,14 +2146,14 @@ pub fn clock_gettime(clk_id: clockid_t, tp: *timespec) usize {
21462146 if (ptr) |f| {
21472147 const rc = f(clk_id, tp);
21482148 switch (rc) {
2149 0, @as(usize, @bitCast(-@as(isize, @intFromEnum(E.INVAL)))) => return rc,
2149 0, @as(usize, @bitCast(-@as(isize, @backingInt(E.INVAL)))) => return rc,
21502150 else => {},
21512151 }
21522152 }
21532153 }
21542154 return syscall2(
21552155 if (@hasField(SYS, "clock_gettime") and native_arch != .hexagon) .clock_gettime else .clock_gettime64,
2156 @intFromEnum(clk_id),
2156 @backingInt(clk_id),
21572157 @intFromPtr(tp),
21582158 );
21592159}
......@@ -2165,13 +2165,13 @@ fn init_vdso_clock_gettime(clk: clockid_t, ts: *timespec) callconv(.c) usize {
21652165 @atomicStore(?VdsoClockGettime, &vdso_clock_gettime, ptr, .monotonic);
21662166 // Call into the VDSO if available
21672167 if (ptr) |f| return f(clk, ts);
2168 return @bitCast(-@as(isize, @intFromEnum(E.NOSYS)));
2168 return @bitCast(-@as(isize, @backingInt(E.NOSYS)));
21692169}
21702170
21712171pub fn clock_getres(clk_id: clockid_t, tp: *timespec) usize {
21722172 return syscall2(
21732173 if (@hasField(SYS, "clock_getres") and native_arch != .hexagon) .clock_getres else .clock_getres_time64,
2174 @intFromEnum(clk_id),
2174 @backingInt(clk_id),
21752175 @intFromPtr(tp),
21762176 );
21772177}
......@@ -2179,7 +2179,7 @@ pub fn clock_getres(clk_id: clockid_t, tp: *timespec) usize {
21792179pub fn clock_settime(clk_id: clockid_t, tp: *const timespec) usize {
21802180 return syscall2(
21812181 if (@hasField(SYS, "clock_settime") and native_arch != .hexagon) .clock_settime else .clock_settime64,
2182 @intFromEnum(clk_id),
2182 @backingInt(clk_id),
21832183 @intFromPtr(tp),
21842184 );
21852185}
......@@ -2187,7 +2187,7 @@ pub fn clock_settime(clk_id: clockid_t, tp: *const timespec) usize {
21872187pub fn clock_nanosleep(clockid: clockid_t, flags: TIMER, request: *const timespec, remain: ?*timespec) usize {
21882188 return syscall4(
21892189 if (@hasField(SYS, "clock_nanosleep") and native_arch != .hexagon) .clock_nanosleep else .clock_nanosleep_time64,
2190 @intFromEnum(clockid),
2190 @backingInt(clockid),
21912191 @as(u32, @bitCast(flags)),
21922192 @intFromPtr(request),
21932193 @intFromPtr(remain),
......@@ -2384,8 +2384,8 @@ pub fn sigprocmask(flags: u32, noalias set: ?*const sigset_t, noalias oldset: ?*
23842384}
23852385
23862386pub fn sigaction(sig: SIG, noalias act: ?*const Sigaction, noalias oact: ?*Sigaction) usize {
2387 assert(@intFromEnum(sig) > 0);
2388 assert(@intFromEnum(sig) < NSIG);
2387 assert(@backingInt(sig) > 0);
2388 assert(@backingInt(sig) < NSIG);
23892389 assert(sig != .KILL);
23902390 assert(sig != .STOP);
23912391
......@@ -2418,8 +2418,8 @@ pub fn sigaction(sig: SIG, noalias act: ?*const Sigaction, noalias oact: ?*Sigac
24182418
24192419 const result = switch (native_arch) {
24202420 // The sparc version of rt_sigaction needs the restorer function to be passed as an argument too.
2421 .sparc, .sparc64 => syscall5(.rt_sigaction, @intFromEnum(sig), ksa_arg, oldksa_arg, @intFromPtr(ksa.restorer), mask_size),
2422 else => syscall4(.rt_sigaction, @intFromEnum(sig), ksa_arg, oldksa_arg, mask_size),
2421 .sparc, .sparc64 => syscall5(.rt_sigaction, @backingInt(sig), ksa_arg, oldksa_arg, @intFromPtr(ksa.restorer), mask_size),
2422 else => syscall4(.rt_sigaction, @backingInt(sig), ksa_arg, oldksa_arg, mask_size),
24232423 };
24242424 if (errno(result) != .SUCCESS) return result;
24252425
......@@ -2468,9 +2468,9 @@ pub fn sigfillset() sigset_t {
24682468}
24692469
24702470fn sigset_bit_index(sig: SIG) struct { word: usize, mask: SigsetElement } {
2471 assert(@intFromEnum(sig) > 0);
2472 assert(@intFromEnum(sig) < NSIG);
2473 const bit = @intFromEnum(sig) - 1;
2471 assert(@backingInt(sig) > 0);
2472 assert(@backingInt(sig) < NSIG);
2473 const bit = @backingInt(sig) - 1;
24742474 return .{
24752475 .word = bit / @bitSizeOf(SigsetElement),
24762476 .mask = @as(SigsetElement, 1) << @truncate(bit % @bitSizeOf(SigsetElement)),
......@@ -2833,7 +2833,7 @@ pub fn eventfd(count: u32, flags: u32) usize {
28332833pub fn timerfd_create(clockid: timerfd_clockid_t, flags: TFD) usize {
28342834 return syscall2(
28352835 .timerfd_create,
2836 @intFromEnum(clockid),
2836 @backingInt(clockid),
28372837 @as(u32, @bitCast(flags)),
28382838 );
28392839}
......@@ -2909,7 +2909,7 @@ pub fn io_uring_enter(fd: fd_t, to_submit: u32, min_complete: u32, flags: u32, s
29092909}
29102910
29112911pub fn io_uring_register(fd: fd_t, opcode: IORING_REGISTER, arg: ?*const anyopaque, nr_args: u32) usize {
2912 return syscall4(.io_uring_register, @as(u32, @bitCast(fd)), @intFromEnum(opcode), @intFromPtr(arg), nr_args);
2912 return syscall4(.io_uring_register, @as(u32, @bitCast(fd)), @backingInt(opcode), @intFromPtr(arg), nr_args);
29132913}
29142914
29152915pub fn memfd_create(name: [*:0]const u8, flags: u32) usize {
......@@ -2925,7 +2925,7 @@ pub fn tcgetattr(fd: fd_t, termios_p: *termios) usize {
29252925}
29262926
29272927pub fn tcsetattr(fd: fd_t, optional_action: TCSA, termios_p: *const termios) usize {
2928 return syscall3(.ioctl, @as(u32, @bitCast(fd)), T.CSETS + @intFromEnum(optional_action), @intFromPtr(termios_p));
2928 return syscall3(.ioctl, @as(u32, @bitCast(fd)), T.CSETS + @backingInt(optional_action), @intFromPtr(termios_p));
29292929}
29302930
29312931pub fn tcgetpgrp(fd: fd_t, pgrp: *pid_t) usize {
......@@ -2961,7 +2961,7 @@ pub fn copy_file_range(fd_in: fd_t, off_in: ?*off_t, fd_out: fd_t, off_out: ?*of
29612961}
29622962
29632963pub fn bpf(cmd: BPF.Cmd, attr: *BPF.Attr, size: u32) usize {
2964 return syscall3(.bpf, @intFromEnum(cmd), @intFromPtr(attr), size);
2964 return syscall3(.bpf, @backingInt(cmd), @intFromPtr(attr), size);
29652965}
29662966
29672967pub fn sync() void {
......@@ -2998,7 +2998,7 @@ pub fn prlimit(pid: pid_t, resource: rlimit_resource, new_limit: ?*const rlimit,
29982998 return syscall4(
29992999 .prlimit64,
30003000 @as(u32, @bitCast(pid)),
3001 @as(u32, @bitCast(@as(i32, @intFromEnum(resource)))),
3001 @as(u32, @bitCast(@as(i32, @backingInt(resource)))),
30023002 @intFromPtr(new_limit),
30033003 @intFromPtr(old_limit),
30043004 );
......@@ -3029,7 +3029,7 @@ pub fn pidfd_send_signal(pidfd: fd_t, sig: SIG, info: ?*siginfo_t, flags: u32) u
30293029 return syscall4(
30303030 .pidfd_send_signal,
30313031 @as(u32, @bitCast(pidfd)),
3032 @intFromEnum(sig),
3032 @backingInt(sig),
30333033 @intFromPtr(info),
30343034 flags,
30353035 );
......@@ -4346,10 +4346,10 @@ pub const W = struct {
43464346 return @as(u8, @intCast((s & 0xff00) >> 8));
43474347 }
43484348 pub fn TERMSIG(s: u32) SIG {
4349 return @enumFromInt(s & 0x7f);
4349 return @fromBackingInt(@intCast(s & 0x7f));
43504350 }
43514351 pub fn STOPSIG(s: u32) SIG {
4352 return @enumFromInt(EXITSTATUS(s));
4352 return @fromBackingInt(@intCast(EXITSTATUS(s)));
43534353 }
43544354 pub fn IFEXITED(s: u32) bool {
43554355 return (s & 0x7f) == 0;
......@@ -7258,26 +7258,26 @@ pub const IOSQE_BIT = enum(u8) {
72587258// io_uring_sqe.flags
72597259
72607260/// use fixed fileset
7261pub const IOSQE_FIXED_FILE = 1 << @intFromEnum(IOSQE_BIT.FIXED_FILE);
7261pub const IOSQE_FIXED_FILE = 1 << @backingInt(IOSQE_BIT.FIXED_FILE);
72627262
72637263/// issue after inflight IO
7264pub const IOSQE_IO_DRAIN = 1 << @intFromEnum(IOSQE_BIT.IO_DRAIN);
7264pub const IOSQE_IO_DRAIN = 1 << @backingInt(IOSQE_BIT.IO_DRAIN);
72657265
72667266/// links next sqe
7267pub const IOSQE_IO_LINK = 1 << @intFromEnum(IOSQE_BIT.IO_LINK);
7267pub const IOSQE_IO_LINK = 1 << @backingInt(IOSQE_BIT.IO_LINK);
72687268
72697269/// like LINK, but stronger
7270pub const IOSQE_IO_HARDLINK = 1 << @intFromEnum(IOSQE_BIT.IO_HARDLINK);
7270pub const IOSQE_IO_HARDLINK = 1 << @backingInt(IOSQE_BIT.IO_HARDLINK);
72717271
72727272/// always go async
7273pub const IOSQE_ASYNC = 1 << @intFromEnum(IOSQE_BIT.ASYNC);
7273pub const IOSQE_ASYNC = 1 << @backingInt(IOSQE_BIT.ASYNC);
72747274
72757275/// select buffer from buf_group
7276pub const IOSQE_BUFFER_SELECT = 1 << @intFromEnum(IOSQE_BIT.BUFFER_SELECT);
7276pub const IOSQE_BUFFER_SELECT = 1 << @backingInt(IOSQE_BIT.BUFFER_SELECT);
72777277
72787278/// don't post CQE if request succeeded
72797279/// Available since Linux 5.17
7280pub const IOSQE_CQE_SKIP_SUCCESS = 1 << @intFromEnum(IOSQE_BIT.CQE_SKIP_SUCCESS);
7280pub const IOSQE_CQE_SKIP_SUCCESS = 1 << @backingInt(IOSQE_BIT.CQE_SKIP_SUCCESS);
72817281
72827282pub const IORING_OP = enum(u8) {
72837283 NOP,
......@@ -7437,7 +7437,7 @@ pub const io_uring_cqe = extern struct {
74377437
74387438 pub fn err(self: io_uring_cqe) E {
74397439 if (self.res > -4096 and self.res < 0) {
7440 return @as(E, @enumFromInt(-self.res));
7440 return @as(E, @fromBackingInt(@intCast(-self.res)));
74417441 }
74427442 return .SUCCESS;
74437443 }
......@@ -7724,8 +7724,8 @@ pub const io_uring_probe = extern struct {
77247724
77257725 /// Is the operation supported on the running kernel.
77267726 pub fn is_supported(self: @This(), op: IORING_OP) bool {
7727 const i = @intFromEnum(op);
7728 if (i > @intFromEnum(self.last_op) or i >= self.ops_len)
7727 const i = @backingInt(op);
7728 if (i > @backingInt(self.last_op) or i >= self.ops_len)
77297729 return false;
77307730 return self.ops[i].is_supported();
77317731 }
......@@ -10741,7 +10741,7 @@ pub const AUDIT = struct {
1074110741 LOONGARCH64 = toAudit(.LOONGARCH, @"64BIT" | LE),
1074210742
1074310743 fn toAudit(em: elf.EM, flags: u32) u32 {
10744 return @intFromEnum(em) | flags;
10744 return @backingInt(em) | flags;
1074510745 }
1074610746
1074710747 pub const current: AUDIT.ARCH = switch (native_arch) {
lib/std/os/linux/IoUring/test.zig+9-9
......@@ -589,7 +589,7 @@ test "sendmsg/recvmsg" {
589589 try testing.expectEqual(@as(u32, 2), ring.cq_ready());
590590
591591 const cqe_sendmsg = try ring.copy_cqe();
592 if (cqe_sendmsg.res == -@as(i32, @intFromEnum(linux.E.INVAL))) return error.SkipZigTest;
592 if (cqe_sendmsg.res == -@as(i32, @backingInt(linux.E.INVAL))) return error.SkipZigTest;
593593 try testing.expectEqual(linux.io_uring_cqe{
594594 .user_data = 0x11111111,
595595 .res = buffer_send.len,
......@@ -597,7 +597,7 @@ test "sendmsg/recvmsg" {
597597 }, cqe_sendmsg);
598598
599599 const cqe_recvmsg = try ring.copy_cqe();
600 if (cqe_recvmsg.res == -@as(i32, @intFromEnum(linux.E.INVAL))) return error.SkipZigTest;
600 if (cqe_recvmsg.res == -@as(i32, @backingInt(linux.E.INVAL))) return error.SkipZigTest;
601601 try testing.expectEqual(linux.io_uring_cqe{
602602 .user_data = 0x22222222,
603603 .res = buffer_recv.len,
......@@ -631,7 +631,7 @@ test "timeout (after a relative time)" {
631631
632632 try testing.expectEqual(linux.io_uring_cqe{
633633 .user_data = 0x55555555,
634 .res = -@as(i32, @intFromEnum(linux.E.TIME)),
634 .res = -@as(i32, @backingInt(linux.E.TIME)),
635635 .flags = 0,
636636 }, cqe);
637637
......@@ -716,7 +716,7 @@ test "timeout_remove" {
716716 if (cqe.user_data == 0x88888888) {
717717 try testing.expectEqual(linux.io_uring_cqe{
718718 .user_data = 0x88888888,
719 .res = -@as(i32, @intFromEnum(linux.E.CANCELED)),
719 .res = -@as(i32, @backingInt(linux.E.CANCELED)),
720720 .flags = 0,
721721 }, cqe);
722722 } else if (cqe.user_data == 0x99999999) {
......@@ -759,16 +759,16 @@ test "accept/connect/recv/link_timeout" {
759759 const cqe = try ring.copy_cqe();
760760 switch (cqe.user_data) {
761761 0xffffffff => {
762 if (cqe.res != -@as(i32, @intFromEnum(linux.E.INTR)) and
763 cqe.res != -@as(i32, @intFromEnum(linux.E.CANCELED)))
762 if (cqe.res != -@as(i32, @backingInt(linux.E.INTR)) and
763 cqe.res != -@as(i32, @backingInt(linux.E.CANCELED)))
764764 {
765765 std.debug.print("Req 0x{x} got {d}\n", .{ cqe.user_data, cqe.res });
766766 try testing.expect(false);
767767 }
768768 },
769769 0x22222222 => {
770 if (cqe.res != -@as(i32, @intFromEnum(linux.E.ALREADY)) and
771 cqe.res != -@as(i32, @intFromEnum(linux.E.TIME)))
770 if (cqe.res != -@as(i32, @backingInt(linux.E.ALREADY)) and
771 cqe.res != -@as(i32, @backingInt(linux.E.TIME)))
772772 {
773773 std.debug.print("Req 0x{x} got {d}\n", .{ cqe.user_data, cqe.res });
774774 try testing.expect(false);
......@@ -922,7 +922,7 @@ test "accept/connect/recv/cancel" {
922922
923923 try testing.expectEqual(linux.io_uring_cqe{
924924 .user_data = 0xffffffff,
925 .res = -@as(i32, @intFromEnum(linux.E.CANCELED)),
925 .res = -@as(i32, @backingInt(linux.E.CANCELED)),
926926 .flags = 0,
927927 }, cqe_recv);
928928
lib/std/os/linux/aarch64.zig+9-9
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u64 {
1010 return asm volatile ("svc #0"
1111 : [ret] "={x0}" (-> u64),
12 : [number] "{x8}" (@intFromEnum(number)),
12 : [number] "{x8}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u64 {
2020 return asm volatile ("svc #0"
2121 : [ret] "={x0}" (-> u64),
22 : [number] "{x8}" (@intFromEnum(number)),
22 : [number] "{x8}" (@backingInt(number)),
2323 [arg1] "{x0}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u64 {
3232 return asm volatile ("svc #0"
3333 : [ret] "={x0}" (-> u64),
34 : [number] "{x8}" (@intFromEnum(number)),
34 : [number] "{x8}" (@backingInt(number)),
3535 [arg1] "{x0}" (arg1),
3636 [arg2] "{x1}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u64 {
4646 return asm volatile ("svc #0"
4747 : [ret] "={x0}" (-> u64),
48 : [number] "{x8}" (@intFromEnum(number)),
48 : [number] "{x8}" (@backingInt(number)),
4949 [arg1] "{x0}" (arg1),
5050 [arg2] "{x1}" (arg2),
5151 [arg3] "{x2}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u64 {
6262 return asm volatile ("svc #0"
6363 : [ret] "={x0}" (-> u64),
64 : [number] "{x8}" (@intFromEnum(number)),
64 : [number] "{x8}" (@backingInt(number)),
6565 [arg1] "{x0}" (arg1),
6666 [arg2] "{x1}" (arg2),
6767 [arg3] "{x2}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u64 {
8080 return asm volatile ("svc #0"
8181 : [ret] "={x0}" (-> u64),
82 : [number] "{x8}" (@intFromEnum(number)),
82 : [number] "{x8}" (@backingInt(number)),
8383 [arg1] "{x0}" (arg1),
8484 [arg2] "{x1}" (arg2),
8585 [arg3] "{x2}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u64 {
100100 return asm volatile ("svc #0"
101101 : [ret] "={x0}" (-> u64),
102 : [number] "{x8}" (@intFromEnum(number)),
102 : [number] "{x8}" (@backingInt(number)),
103103 [arg1] "{x0}" (arg1),
104104 [arg2] "{x1}" (arg2),
105105 [arg3] "{x2}" (arg3),
......@@ -157,12 +157,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
157157 \\ mov x8, %[number]
158158 \\ svc #0
159159 :
160 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
160 : [number] "i" (@backingInt(SYS.rt_sigreturn)),
161161 ),
162162 else => asm volatile (
163163 \\ svc #0
164164 :
165 : [number] "{x8}" (@intFromEnum(SYS.rt_sigreturn)),
165 : [number] "{x8}" (@backingInt(SYS.rt_sigreturn)),
166166 ),
167167 }
168168}
lib/std/os/linux/arc.zig+9-9
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u32 {
1010 return asm volatile ("trap_s 0"
1111 : [ret] "={r0}" (-> u32),
12 : [number] "{r8}" (@intFromEnum(number)),
12 : [number] "{r8}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u32 {
2020 return asm volatile ("trap_s 0"
2121 : [ret] "={r0}" (-> u32),
22 : [number] "{r8}" (@intFromEnum(number)),
22 : [number] "{r8}" (@backingInt(number)),
2323 [arg1] "{r0}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u32 {
3232 return asm volatile ("trap_s 0"
3333 : [ret] "={r0}" (-> u32),
34 : [number] "{r8}" (@intFromEnum(number)),
34 : [number] "{r8}" (@backingInt(number)),
3535 [arg1] "{r0}" (arg1),
3636 [arg2] "{r1}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u32 {
4646 return asm volatile ("trap_s 0"
4747 : [ret] "={r0}" (-> u32),
48 : [number] "{r8}" (@intFromEnum(number)),
48 : [number] "{r8}" (@backingInt(number)),
4949 [arg1] "{r0}" (arg1),
5050 [arg2] "{r1}" (arg2),
5151 [arg3] "{r2}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u32 {
6262 return asm volatile ("trap_s 0"
6363 : [ret] "={r0}" (-> u32),
64 : [number] "{r8}" (@intFromEnum(number)),
64 : [number] "{r8}" (@backingInt(number)),
6565 [arg1] "{r0}" (arg1),
6666 [arg2] "{r1}" (arg2),
6767 [arg3] "{r2}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u32 {
8080 return asm volatile ("trap_s 0"
8181 : [ret] "={r0}" (-> u32),
82 : [number] "{r8}" (@intFromEnum(number)),
82 : [number] "{r8}" (@backingInt(number)),
8383 [arg1] "{r0}" (arg1),
8484 [arg2] "{r1}" (arg2),
8585 [arg3] "{r2}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u32 {
100100 return asm volatile ("trap_s 0"
101101 : [ret] "={r0}" (-> u32),
102 : [number] "{r8}" (@intFromEnum(number)),
102 : [number] "{r8}" (@backingInt(number)),
103103 [arg1] "{r0}" (arg1),
104104 [arg2] "{r1}" (arg2),
105105 [arg3] "{r2}" (arg3),
......@@ -158,12 +158,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
158158 \\ mov r8, %[number]
159159 \\ trap_s 0
160160 :
161 : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
161 : [number] "I" (@backingInt(SYS.rt_sigreturn)),
162162 ),
163163 else => asm volatile (
164164 \\ trap_s 0
165165 :
166 : [number] "{r8}" (@intFromEnum(SYS.rt_sigreturn)),
166 : [number] "{r8}" (@backingInt(SYS.rt_sigreturn)),
167167 ),
168168 }
169169}
lib/std/os/linux/arm.zig+11-11
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u32 {
1010 return asm volatile ("svc #0"
1111 : [ret] "={r0}" (-> u32),
12 : [number] "{r7}" (@intFromEnum(number)),
12 : [number] "{r7}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u32 {
2020 return asm volatile ("svc #0"
2121 : [ret] "={r0}" (-> u32),
22 : [number] "{r7}" (@intFromEnum(number)),
22 : [number] "{r7}" (@backingInt(number)),
2323 [arg1] "{r0}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u32 {
3232 return asm volatile ("svc #0"
3333 : [ret] "={r0}" (-> u32),
34 : [number] "{r7}" (@intFromEnum(number)),
34 : [number] "{r7}" (@backingInt(number)),
3535 [arg1] "{r0}" (arg1),
3636 [arg2] "{r1}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u32 {
4646 return asm volatile ("svc #0"
4747 : [ret] "={r0}" (-> u32),
48 : [number] "{r7}" (@intFromEnum(number)),
48 : [number] "{r7}" (@backingInt(number)),
4949 [arg1] "{r0}" (arg1),
5050 [arg2] "{r1}" (arg2),
5151 [arg3] "{r2}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u32 {
6262 return asm volatile ("svc #0"
6363 : [ret] "={r0}" (-> u32),
64 : [number] "{r7}" (@intFromEnum(number)),
64 : [number] "{r7}" (@backingInt(number)),
6565 [arg1] "{r0}" (arg1),
6666 [arg2] "{r1}" (arg2),
6767 [arg3] "{r2}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u32 {
8080 return asm volatile ("svc #0"
8181 : [ret] "={r0}" (-> u32),
82 : [number] "{r7}" (@intFromEnum(number)),
82 : [number] "{r7}" (@backingInt(number)),
8383 [arg1] "{r0}" (arg1),
8484 [arg2] "{r1}" (arg2),
8585 [arg3] "{r2}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u32 {
100100 return asm volatile ("svc #0"
101101 : [ret] "={r0}" (-> u32),
102 : [number] "{r7}" (@intFromEnum(number)),
102 : [number] "{r7}" (@backingInt(number)),
103103 [arg1] "{r0}" (arg1),
104104 [arg2] "{r1}" (arg2),
105105 [arg3] "{r2}" (arg3),
......@@ -151,12 +151,12 @@ pub fn restore() callconv(.naked) noreturn {
151151 \\ mov r7, %[number]
152152 \\ svc #0
153153 :
154 : [number] "I" (@intFromEnum(SYS.sigreturn)),
154 : [number] "I" (@backingInt(SYS.sigreturn)),
155155 ),
156156 else => asm volatile (
157157 \\ svc #0
158158 :
159 : [number] "{r7}" (@intFromEnum(SYS.sigreturn)),
159 : [number] "{r7}" (@backingInt(SYS.sigreturn)),
160160 ),
161161 }
162162}
......@@ -167,12 +167,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
167167 \\ mov r7, %[number]
168168 \\ svc #0
169169 :
170 : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
170 : [number] "I" (@backingInt(SYS.rt_sigreturn)),
171171 ),
172172 else => asm volatile (
173173 \\ svc #0
174174 :
175 : [number] "{r7}" (@intFromEnum(SYS.rt_sigreturn)),
175 : [number] "{r7}" (@backingInt(SYS.rt_sigreturn)),
176176 ),
177177 }
178178}
lib/std/os/linux/bpf.zig+24-24
......@@ -547,10 +547,10 @@ pub const Insn = packed struct {
547547
548548 return Insn{
549549 .code = code | src_type,
550 .dst = @intFromEnum(dst),
550 .dst = @backingInt(dst),
551551 .src = switch (imm_or_reg) {
552552 .imm => 0,
553 .reg => |r| @intFromEnum(r),
553 .reg => |r| @backingInt(r),
554554 },
555555 .off = off,
556556 .imm = switch (imm_or_reg) {
......@@ -567,7 +567,7 @@ pub const Insn = packed struct {
567567 else => @compileError("width must be 32 or 64"),
568568 };
569569
570 return imm_reg(width_bitfield | @intFromEnum(op), dst, src, 0);
570 return imm_reg(width_bitfield | @backingInt(op), dst, src, 0);
571571 }
572572
573573 pub fn mov(dst: Reg, src: anytype) Insn {
......@@ -623,7 +623,7 @@ pub const Insn = packed struct {
623623 }
624624
625625 pub fn jmp(op: JmpOp, dst: Reg, src: anytype, off: i16) Insn {
626 return imm_reg(JMP | @intFromEnum(op), dst, src, off);
626 return imm_reg(JMP | @backingInt(op), dst, src, off);
627627 }
628628
629629 pub fn ja(off: i16) Insn {
......@@ -677,8 +677,8 @@ pub const Insn = packed struct {
677677 pub fn xadd(dst: Reg, src: Reg) Insn {
678678 return Insn{
679679 .code = STX | XADD | DW,
680 .dst = @intFromEnum(dst),
681 .src = @intFromEnum(src),
680 .dst = @backingInt(dst),
681 .src = @backingInt(src),
682682 .off = 0,
683683 .imm = 0,
684684 };
......@@ -686,9 +686,9 @@ pub const Insn = packed struct {
686686
687687 fn ld(mode: Mode, size: Size, dst: Reg, src: Reg, imm: i32) Insn {
688688 return Insn{
689 .code = @intFromEnum(mode) | @intFromEnum(size) | LD,
690 .dst = @intFromEnum(dst),
691 .src = @intFromEnum(src),
689 .code = @backingInt(mode) | @backingInt(size) | LD,
690 .dst = @backingInt(dst),
691 .src = @backingInt(src),
692692 .off = 0,
693693 .imm = imm,
694694 };
......@@ -704,9 +704,9 @@ pub const Insn = packed struct {
704704
705705 pub fn ldx(size: Size, dst: Reg, src: Reg, off: i16) Insn {
706706 return Insn{
707 .code = MEM | @intFromEnum(size) | LDX,
708 .dst = @intFromEnum(dst),
709 .src = @intFromEnum(src),
707 .code = MEM | @backingInt(size) | LDX,
708 .dst = @backingInt(dst),
709 .src = @backingInt(src),
710710 .off = off,
711711 .imm = 0,
712712 };
......@@ -715,8 +715,8 @@ pub const Insn = packed struct {
715715 fn ld_imm_impl1(dst: Reg, src: Reg, imm: u64) Insn {
716716 return Insn{
717717 .code = LD | DW | IMM,
718 .dst = @intFromEnum(dst),
719 .src = @intFromEnum(src),
718 .dst = @backingInt(dst),
719 .src = @backingInt(src),
720720 .off = 0,
721721 .imm = @as(i32, @bitCast(@as(u32, @truncate(imm)))),
722722 };
......@@ -741,7 +741,7 @@ pub const Insn = packed struct {
741741 }
742742
743743 pub fn ld_map_fd1(dst: Reg, map_fd: fd_t) Insn {
744 return ld_imm_impl1(dst, @as(Reg, @enumFromInt(PSEUDO_MAP_FD)), @as(u64, @intCast(map_fd)));
744 return ld_imm_impl1(dst, @as(Reg, @fromBackingInt(@intCast(PSEUDO_MAP_FD))), @as(u64, @intCast(map_fd)));
745745 }
746746
747747 pub fn ld_map_fd2(map_fd: fd_t) Insn {
......@@ -750,8 +750,8 @@ pub const Insn = packed struct {
750750
751751 pub fn st(size: Size, dst: Reg, off: i16, imm: i32) Insn {
752752 return Insn{
753 .code = MEM | @intFromEnum(size) | ST,
754 .dst = @intFromEnum(dst),
753 .code = MEM | @backingInt(size) | ST,
754 .dst = @backingInt(dst),
755755 .src = 0,
756756 .off = off,
757757 .imm = imm,
......@@ -760,9 +760,9 @@ pub const Insn = packed struct {
760760
761761 pub fn stx(size: Size, dst: Reg, off: i16, src: Reg) Insn {
762762 return Insn{
763 .code = MEM | @intFromEnum(size) | STX,
764 .dst = @intFromEnum(dst),
765 .src = @intFromEnum(src),
763 .code = MEM | @backingInt(size) | STX,
764 .dst = @backingInt(dst),
765 .src = @backingInt(src),
766766 .off = off,
767767 .imm = 0,
768768 };
......@@ -774,7 +774,7 @@ pub const Insn = packed struct {
774774 .big => 0xdc,
775775 .little => 0xd4,
776776 },
777 .dst = @intFromEnum(dst),
777 .dst = @backingInt(dst),
778778 .src = 0,
779779 .off = 0,
780780 .imm = switch (size) {
......@@ -800,7 +800,7 @@ pub const Insn = packed struct {
800800 .dst = 0,
801801 .src = 0,
802802 .off = 0,
803 .imm = @intFromEnum(helper),
803 .imm = @backingInt(helper),
804804 };
805805 }
806806
......@@ -1614,7 +1614,7 @@ pub fn map_create(map_type: MapType, key_size: u32, value_size: u32, max_entries
16141614 .map_create = std.mem.zeroes(MapCreateAttr),
16151615 };
16161616
1617 attr.map_create.map_type = @intFromEnum(map_type);
1617 attr.map_create.map_type = @backingInt(map_type);
16181618 attr.map_create.key_size = key_size;
16191619 attr.map_create.value_size = value_size;
16201620 attr.map_create.max_entries = max_entries;
......@@ -1769,7 +1769,7 @@ pub fn prog_load(
17691769 .prog_load = std.mem.zeroes(ProgLoadAttr),
17701770 };
17711771
1772 attr.prog_load.prog_type = @intFromEnum(prog_type);
1772 attr.prog_load.prog_type = @backingInt(prog_type);
17731773 attr.prog_load.insns = @intFromPtr(insns.ptr);
17741774 attr.prog_load.insn_cnt = @as(u32, @intCast(insns.len));
17751775 attr.prog_load.license = @intFromPtr(license.ptr);
lib/std/os/linux/csky.zig+7-7
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u32 {
1010 return asm volatile ("trap 0"
1111 : [ret] "={r0}" (-> u32),
12 : [number] "{r7}" (@intFromEnum(number)),
12 : [number] "{r7}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u32 {
2020 return asm volatile ("trap 0"
2121 : [ret] "={r0}" (-> u32),
22 : [number] "{r7}" (@intFromEnum(number)),
22 : [number] "{r7}" (@backingInt(number)),
2323 [arg1] "{r0}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u32 {
3232 return asm volatile ("trap 0"
3333 : [ret] "={r0}" (-> u32),
34 : [number] "{r7}" (@intFromEnum(number)),
34 : [number] "{r7}" (@backingInt(number)),
3535 [arg1] "{r0}" (arg1),
3636 [arg2] "{r1}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u32 {
4646 return asm volatile ("trap 0"
4747 : [ret] "={r0}" (-> u32),
48 : [number] "{r7}" (@intFromEnum(number)),
48 : [number] "{r7}" (@backingInt(number)),
4949 [arg1] "{r0}" (arg1),
5050 [arg2] "{r1}" (arg2),
5151 [arg3] "{r2}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u32 {
6262 return asm volatile ("trap 0"
6363 : [ret] "={r0}" (-> u32),
64 : [number] "{r7}" (@intFromEnum(number)),
64 : [number] "{r7}" (@backingInt(number)),
6565 [arg1] "{r0}" (arg1),
6666 [arg2] "{r1}" (arg2),
6767 [arg3] "{r2}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u32 {
8080 return asm volatile ("trap 0"
8181 : [ret] "={r0}" (-> u32),
82 : [number] "{r7}" (@intFromEnum(number)),
82 : [number] "{r7}" (@backingInt(number)),
8383 [arg1] "{r0}" (arg1),
8484 [arg2] "{r1}" (arg2),
8585 [arg3] "{r2}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u32 {
100100 return asm volatile ("trap 0"
101101 : [ret] "={r0}" (-> u32),
102 : [number] "{r7}" (@intFromEnum(number)),
102 : [number] "{r7}" (@backingInt(number)),
103103 [arg1] "{r0}" (arg1),
104104 [arg2] "{r1}" (arg2),
105105 [arg3] "{r2}" (arg3),
lib/std/os/linux/hexagon.zig+7-7
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u32 {
1010 return asm volatile ("trap0(#1)"
1111 : [ret] "={r0}" (-> u32),
12 : [number] "{r6}" (@intFromEnum(number)),
12 : [number] "{r6}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u32 {
2020 return asm volatile ("trap0(#1)"
2121 : [ret] "={r0}" (-> u32),
22 : [number] "{r6}" (@intFromEnum(number)),
22 : [number] "{r6}" (@backingInt(number)),
2323 [arg1] "{r0}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u32 {
3232 return asm volatile ("trap0(#1)"
3333 : [ret] "={r0}" (-> u32),
34 : [number] "{r6}" (@intFromEnum(number)),
34 : [number] "{r6}" (@backingInt(number)),
3535 [arg1] "{r0}" (arg1),
3636 [arg2] "{r1}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u32 {
4646 return asm volatile ("trap0(#1)"
4747 : [ret] "={r0}" (-> u32),
48 : [number] "{r6}" (@intFromEnum(number)),
48 : [number] "{r6}" (@backingInt(number)),
4949 [arg1] "{r0}" (arg1),
5050 [arg2] "{r1}" (arg2),
5151 [arg3] "{r2}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u32 {
6262 return asm volatile ("trap0(#1)"
6363 : [ret] "={r0}" (-> u32),
64 : [number] "{r6}" (@intFromEnum(number)),
64 : [number] "{r6}" (@backingInt(number)),
6565 [arg1] "{r0}" (arg1),
6666 [arg2] "{r1}" (arg2),
6767 [arg3] "{r2}" (arg3),
......@@ -72,7 +72,7 @@ pub fn syscall4(
7272pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
7373 return asm volatile ("trap0(#1)"
7474 : [ret] "={r0}" (-> u32),
75 : [number] "{r6}" (@intFromEnum(number)),
75 : [number] "{r6}" (@backingInt(number)),
7676 [arg1] "{r0}" (arg1),
7777 [arg2] "{r1}" (arg2),
7878 [arg3] "{r2}" (arg3),
......@@ -92,7 +92,7 @@ pub fn syscall6(
9292) u32 {
9393 return asm volatile ("trap0(#1)"
9494 : [ret] "={r0}" (-> u32),
95 : [number] "{r6}" (@intFromEnum(number)),
95 : [number] "{r6}" (@backingInt(number)),
9696 [arg1] "{r0}" (arg1),
9797 [arg2] "{r1}" (arg2),
9898 [arg3] "{r2}" (arg3),
lib/std/os/linux/io_uring_sqe.zig+2-2
......@@ -615,7 +615,7 @@ pub const io_uring_sqe = extern struct {
615615 options: u32,
616616 flags: u32,
617617 ) void {
618 sqe.prep_rw(.WAITID, id, 0, @intFromEnum(id_type), @intFromPtr(infop));
618 sqe.prep_rw(.WAITID, id, 0, @backingInt(id_type), @intFromPtr(infop));
619619 sqe.rw_flags = flags;
620620 sqe.splice_fd_in = @bitCast(options);
621621 }
......@@ -652,7 +652,7 @@ pub const io_uring_sqe = extern struct {
652652 ) void {
653653 sqe.prep_rw(.URING_CMD, fd, 0, 0, 0);
654654 // off is overloaded with cmd_op, https://github.com/axboe/liburing/blob/e1003e496e66f9b0ae06674869795edf772d5500/src/include/liburing/io_uring.h#L39
655 sqe.off = @intFromEnum(cmd_op);
655 sqe.off = @backingInt(cmd_op);
656656 // addr is overloaded, https://github.com/axboe/liburing/blob/e1003e496e66f9b0ae06674869795edf772d5500/src/include/liburing/io_uring.h#L46
657657 sqe.addr = @bitCast(packed struct {
658658 level: u32,
lib/std/os/linux/loongarch32.zig+7-7
......@@ -10,7 +10,7 @@ pub fn syscall0(
1010 return asm volatile (
1111 \\ syscall 0
1212 : [ret] "={$r4}" (-> u32),
13 : [number] "{$r11}" (@intFromEnum(number)),
13 : [number] "{$r11}" (@backingInt(number)),
1414 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
1515}
1616
......@@ -21,7 +21,7 @@ pub fn syscall1(
2121 return asm volatile (
2222 \\ syscall 0
2323 : [ret] "={$r4}" (-> u32),
24 : [number] "{$r11}" (@intFromEnum(number)),
24 : [number] "{$r11}" (@backingInt(number)),
2525 [arg1] "{$r4}" (arg1),
2626 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
2727}
......@@ -34,7 +34,7 @@ pub fn syscall2(
3434 return asm volatile (
3535 \\ syscall 0
3636 : [ret] "={$r4}" (-> u32),
37 : [number] "{$r11}" (@intFromEnum(number)),
37 : [number] "{$r11}" (@backingInt(number)),
3838 [arg1] "{$r4}" (arg1),
3939 [arg2] "{$r5}" (arg2),
4040 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
......@@ -49,7 +49,7 @@ pub fn syscall3(
4949 return asm volatile (
5050 \\ syscall 0
5151 : [ret] "={$r4}" (-> u32),
52 : [number] "{$r11}" (@intFromEnum(number)),
52 : [number] "{$r11}" (@backingInt(number)),
5353 [arg1] "{$r4}" (arg1),
5454 [arg2] "{$r5}" (arg2),
5555 [arg3] "{$r6}" (arg3),
......@@ -66,7 +66,7 @@ pub fn syscall4(
6666 return asm volatile (
6767 \\ syscall 0
6868 : [ret] "={$r4}" (-> u32),
69 : [number] "{$r11}" (@intFromEnum(number)),
69 : [number] "{$r11}" (@backingInt(number)),
7070 [arg1] "{$r4}" (arg1),
7171 [arg2] "{$r5}" (arg2),
7272 [arg3] "{$r6}" (arg3),
......@@ -85,7 +85,7 @@ pub fn syscall5(
8585 return asm volatile (
8686 \\ syscall 0
8787 : [ret] "={$r4}" (-> u32),
88 : [number] "{$r11}" (@intFromEnum(number)),
88 : [number] "{$r11}" (@backingInt(number)),
8989 [arg1] "{$r4}" (arg1),
9090 [arg2] "{$r5}" (arg2),
9191 [arg3] "{$r6}" (arg3),
......@@ -106,7 +106,7 @@ pub fn syscall6(
106106 return asm volatile (
107107 \\ syscall 0
108108 : [ret] "={$r4}" (-> u32),
109 : [number] "{$r11}" (@intFromEnum(number)),
109 : [number] "{$r11}" (@backingInt(number)),
110110 [arg1] "{$r4}" (arg1),
111111 [arg2] "{$r5}" (arg2),
112112 [arg3] "{$r6}" (arg3),
lib/std/os/linux/loongarch64.zig+7-7
......@@ -10,7 +10,7 @@ pub fn syscall0(
1010 return asm volatile (
1111 \\ syscall 0
1212 : [ret] "={$r4}" (-> u64),
13 : [number] "{$r11}" (@intFromEnum(number)),
13 : [number] "{$r11}" (@backingInt(number)),
1414 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
1515}
1616
......@@ -21,7 +21,7 @@ pub fn syscall1(
2121 return asm volatile (
2222 \\ syscall 0
2323 : [ret] "={$r4}" (-> u64),
24 : [number] "{$r11}" (@intFromEnum(number)),
24 : [number] "{$r11}" (@backingInt(number)),
2525 [arg1] "{$r4}" (arg1),
2626 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
2727}
......@@ -34,7 +34,7 @@ pub fn syscall2(
3434 return asm volatile (
3535 \\ syscall 0
3636 : [ret] "={$r4}" (-> u64),
37 : [number] "{$r11}" (@intFromEnum(number)),
37 : [number] "{$r11}" (@backingInt(number)),
3838 [arg1] "{$r4}" (arg1),
3939 [arg2] "{$r5}" (arg2),
4040 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
......@@ -49,7 +49,7 @@ pub fn syscall3(
4949 return asm volatile (
5050 \\ syscall 0
5151 : [ret] "={$r4}" (-> u64),
52 : [number] "{$r11}" (@intFromEnum(number)),
52 : [number] "{$r11}" (@backingInt(number)),
5353 [arg1] "{$r4}" (arg1),
5454 [arg2] "{$r5}" (arg2),
5555 [arg3] "{$r6}" (arg3),
......@@ -66,7 +66,7 @@ pub fn syscall4(
6666 return asm volatile (
6767 \\ syscall 0
6868 : [ret] "={$r4}" (-> u64),
69 : [number] "{$r11}" (@intFromEnum(number)),
69 : [number] "{$r11}" (@backingInt(number)),
7070 [arg1] "{$r4}" (arg1),
7171 [arg2] "{$r5}" (arg2),
7272 [arg3] "{$r6}" (arg3),
......@@ -85,7 +85,7 @@ pub fn syscall5(
8585 return asm volatile (
8686 \\ syscall 0
8787 : [ret] "={$r4}" (-> u64),
88 : [number] "{$r11}" (@intFromEnum(number)),
88 : [number] "{$r11}" (@backingInt(number)),
8989 [arg1] "{$r4}" (arg1),
9090 [arg2] "{$r5}" (arg2),
9191 [arg3] "{$r6}" (arg3),
......@@ -106,7 +106,7 @@ pub fn syscall6(
106106 return asm volatile (
107107 \\ syscall 0
108108 : [ret] "={$r4}" (-> u64),
109 : [number] "{$r11}" (@intFromEnum(number)),
109 : [number] "{$r11}" (@backingInt(number)),
110110 [arg1] "{$r4}" (arg1),
111111 [arg2] "{$r5}" (arg2),
112112 [arg3] "{$r6}" (arg3),
lib/std/os/linux/m68k.zig+8-8
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u32 {
1010 return asm volatile ("trap #0"
1111 : [ret] "={d0}" (-> u32),
12 : [number] "{d0}" (@intFromEnum(number)),
12 : [number] "{d0}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u32 {
2020 return asm volatile ("trap #0"
2121 : [ret] "={d0}" (-> u32),
22 : [number] "{d0}" (@intFromEnum(number)),
22 : [number] "{d0}" (@backingInt(number)),
2323 [arg1] "{d1}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u32 {
3232 return asm volatile ("trap #0"
3333 : [ret] "={d0}" (-> u32),
34 : [number] "{d0}" (@intFromEnum(number)),
34 : [number] "{d0}" (@backingInt(number)),
3535 [arg1] "{d1}" (arg1),
3636 [arg2] "{d2}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u32 {
4646 return asm volatile ("trap #0"
4747 : [ret] "={d0}" (-> u32),
48 : [number] "{d0}" (@intFromEnum(number)),
48 : [number] "{d0}" (@backingInt(number)),
4949 [arg1] "{d1}" (arg1),
5050 [arg2] "{d2}" (arg2),
5151 [arg3] "{d3}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u32 {
6262 return asm volatile ("trap #0"
6363 : [ret] "={d0}" (-> u32),
64 : [number] "{d0}" (@intFromEnum(number)),
64 : [number] "{d0}" (@backingInt(number)),
6565 [arg1] "{d1}" (arg1),
6666 [arg2] "{d2}" (arg2),
6767 [arg3] "{d3}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u32 {
8080 return asm volatile ("trap #0"
8181 : [ret] "={d0}" (-> u32),
82 : [number] "{d0}" (@intFromEnum(number)),
82 : [number] "{d0}" (@backingInt(number)),
8383 [arg1] "{d1}" (arg1),
8484 [arg2] "{d2}" (arg2),
8585 [arg3] "{d3}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u32 {
100100 return asm volatile ("trap #0"
101101 : [ret] "={d0}" (-> u32),
102 : [number] "{d0}" (@intFromEnum(number)),
102 : [number] "{d0}" (@backingInt(number)),
103103 [arg1] "{d1}" (arg1),
104104 [arg2] "{d2}" (arg2),
105105 [arg3] "{d3}" (arg3),
......@@ -167,7 +167,7 @@ pub const restore = restore_rt;
167167pub fn restore_rt() callconv(.naked) noreturn {
168168 asm volatile ("trap #0"
169169 :
170 : [number] "{d0}" (@intFromEnum(SYS.rt_sigreturn)),
170 : [number] "{d0}" (@backingInt(SYS.rt_sigreturn)),
171171 );
172172}
173173
lib/std/os/linux/microblaze.zig+9-9
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u32 {
1010 return asm volatile ("brki r14, 0x8"
1111 : [ret] "={r3}" (-> u32),
12 : [number] "{r12}" (@intFromEnum(number)),
12 : [number] "{r12}" (@backingInt(number)),
1313 : .{ .r4 = true, .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u32 {
2020 return asm volatile ("brki r14, 0x8"
2121 : [ret] "={r3}" (-> u32),
22 : [number] "{r12}" (@intFromEnum(number)),
22 : [number] "{r12}" (@backingInt(number)),
2323 [arg1] "{r5}" (arg1),
2424 : .{ .r4 = true, .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u32 {
3232 return asm volatile ("brki r14, 0x8"
3333 : [ret] "={r3}" (-> u32),
34 : [number] "{r12}" (@intFromEnum(number)),
34 : [number] "{r12}" (@backingInt(number)),
3535 [arg1] "{r5}" (arg1),
3636 [arg2] "{r6}" (arg2),
3737 : .{ .r4 = true, .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u32 {
4646 return asm volatile ("brki r14, 0x8"
4747 : [ret] "={r3}" (-> u32),
48 : [number] "{r12}" (@intFromEnum(number)),
48 : [number] "{r12}" (@backingInt(number)),
4949 [arg1] "{r5}" (arg1),
5050 [arg2] "{r6}" (arg2),
5151 [arg3] "{r7}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u32 {
6262 return asm volatile ("brki r14, 0x8"
6363 : [ret] "={r3}" (-> u32),
64 : [number] "{r12}" (@intFromEnum(number)),
64 : [number] "{r12}" (@backingInt(number)),
6565 [arg1] "{r5}" (arg1),
6666 [arg2] "{r6}" (arg2),
6767 [arg3] "{r7}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u32 {
8080 return asm volatile ("brki r14, 0x8"
8181 : [ret] "={r3}" (-> u32),
82 : [number] "{r12}" (@intFromEnum(number)),
82 : [number] "{r12}" (@backingInt(number)),
8383 [arg1] "{r5}" (arg1),
8484 [arg2] "{r6}" (arg2),
8585 [arg3] "{r7}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u32 {
100100 return asm volatile ("brki r14, 0x8"
101101 : [ret] "={r3}" (-> u32),
102 : [number] "{r12}" (@intFromEnum(number)),
102 : [number] "{r12}" (@backingInt(number)),
103103 [arg1] "{r5}" (arg1),
104104 [arg2] "{r6}" (arg2),
105105 [arg3] "{r7}" (arg3),
......@@ -153,7 +153,7 @@ pub fn restore() callconv(.naked) noreturn {
153153 asm volatile (
154154 \\ brki r14, 0x8
155155 :
156 : [number] "{r7}" (@intFromEnum(SYS.sigreturn)),
156 : [number] "{r7}" (@backingInt(SYS.sigreturn)),
157157 );
158158}
159159
......@@ -161,7 +161,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
161161 asm volatile (
162162 \\ brki r14, 0x8
163163 :
164 : [number] "{r7}" (@intFromEnum(SYS.rt_sigreturn)),
164 : [number] "{r7}" (@backingInt(SYS.rt_sigreturn)),
165165 );
166166}
167167
lib/std/os/linux/mips.zig+9-9
......@@ -14,7 +14,7 @@ pub fn syscall0(
1414 \\ subu $v0, $zero, $v0
1515 \\1:
1616 : [ret] "={$2}" (-> u32),
17 : [number] "{$2}" (@intFromEnum(number)),
17 : [number] "{$2}" (@backingInt(number)),
1818 : .{ .r1 = true, .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
1919}
2020
......@@ -29,7 +29,7 @@ pub fn syscall1(
2929 \\ subu $v0, $zero, $v0
3030 \\1:
3131 : [ret] "={$2}" (-> u32),
32 : [number] "{$2}" (@intFromEnum(number)),
32 : [number] "{$2}" (@backingInt(number)),
3333 [arg1] "{$4}" (arg1),
3434 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
3535}
......@@ -46,7 +46,7 @@ pub fn syscall2(
4646 \\ subu $v0, $zero, $v0
4747 \\1:
4848 : [ret] "={$2}" (-> u32),
49 : [number] "{$2}" (@intFromEnum(number)),
49 : [number] "{$2}" (@backingInt(number)),
5050 [arg1] "{$4}" (arg1),
5151 [arg2] "{$5}" (arg2),
5252 : .{ .r1 = true, .r3 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
......@@ -65,7 +65,7 @@ pub fn syscall3(
6565 \\ subu $v0, $zero, $v0
6666 \\1:
6767 : [ret] "={$2}" (-> u32),
68 : [number] "{$2}" (@intFromEnum(number)),
68 : [number] "{$2}" (@backingInt(number)),
6969 [arg1] "{$4}" (arg1),
7070 [arg2] "{$5}" (arg2),
7171 [arg3] "{$6}" (arg3),
......@@ -86,7 +86,7 @@ pub fn syscall4(
8686 \\ subu $v0, $zero, $v0
8787 \\1:
8888 : [ret] "={$2}" (-> u32),
89 : [number] "{$2}" (@intFromEnum(number)),
89 : [number] "{$2}" (@backingInt(number)),
9090 [arg1] "{$4}" (arg1),
9191 [arg2] "{$5}" (arg2),
9292 [arg3] "{$6}" (arg3),
......@@ -115,7 +115,7 @@ pub fn syscall5(
115115 \\ subu $v0, $zero, $v0
116116 \\1:
117117 : [ret] "={$2}" (-> u32),
118 : [number] "{$2}" (@intFromEnum(number)),
118 : [number] "{$2}" (@backingInt(number)),
119119 [arg1] "{$4}" (arg1),
120120 [arg2] "{$5}" (arg2),
121121 [arg3] "{$6}" (arg3),
......@@ -144,7 +144,7 @@ pub fn syscall6(
144144 \\ subu $v0, $zero, $v0
145145 \\1:
146146 : [ret] "={$2}" (-> u32),
147 : [number] "{$2}" (@intFromEnum(number)),
147 : [number] "{$2}" (@backingInt(number)),
148148 [arg1] "{$4}" (arg1),
149149 [arg2] "{$5}" (arg2),
150150 [arg3] "{$6}" (arg3),
......@@ -176,7 +176,7 @@ pub fn syscall7(
176176 \\ subu $v0, $zero, $v0
177177 \\1:
178178 : [ret] "={$2}" (-> u32),
179 : [number] "{$2}" (@intFromEnum(number)),
179 : [number] "{$2}" (@backingInt(number)),
180180 [arg1] "{$4}" (arg1),
181181 [arg2] "{$5}" (arg2),
182182 [arg3] "{$6}" (arg3),
......@@ -201,7 +201,7 @@ pub fn syscall_pipe(
201201 \\ sw $v1, 4($a0)
202202 \\2:
203203 : [ret] "={$2}" (-> u32),
204 : [number] "{$2}" (@intFromEnum(SYS.pipe)),
204 : [number] "{$2}" (@backingInt(SYS.pipe)),
205205 [fd] "{$4}" (fd),
206206 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
207207}
lib/std/os/linux/mips64.zig+8-8
......@@ -14,7 +14,7 @@ pub fn syscall0(
1414 \\ dsubu $v0, $zero, $v0
1515 \\1:
1616 : [ret] "={$2}" (-> u64),
17 : [number] "{$2}" (@intFromEnum(number)),
17 : [number] "{$2}" (@backingInt(number)),
1818 : .{ .r1 = true, .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
1919}
2020
......@@ -29,7 +29,7 @@ pub fn syscall1(
2929 \\ dsubu $v0, $zero, $v0
3030 \\1:
3131 : [ret] "={$2}" (-> u64),
32 : [number] "{$2}" (@intFromEnum(number)),
32 : [number] "{$2}" (@backingInt(number)),
3333 [arg1] "{$4}" (arg1),
3434 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
3535}
......@@ -46,7 +46,7 @@ pub fn syscall2(
4646 \\ dsubu $v0, $zero, $v0
4747 \\1:
4848 : [ret] "={$2}" (-> u64),
49 : [number] "{$2}" (@intFromEnum(number)),
49 : [number] "{$2}" (@backingInt(number)),
5050 [arg1] "{$4}" (arg1),
5151 [arg2] "{$5}" (arg2),
5252 : .{ .r1 = true, .r3 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
......@@ -65,7 +65,7 @@ pub fn syscall3(
6565 \\ dsubu $v0, $zero, $v0
6666 \\1:
6767 : [ret] "={$2}" (-> u64),
68 : [number] "{$2}" (@intFromEnum(number)),
68 : [number] "{$2}" (@backingInt(number)),
6969 [arg1] "{$4}" (arg1),
7070 [arg2] "{$5}" (arg2),
7171 [arg3] "{$6}" (arg3),
......@@ -86,7 +86,7 @@ pub fn syscall4(
8686 \\ dsubu $v0, $zero, $v0
8787 \\1:
8888 : [ret] "={$2}" (-> u64),
89 : [number] "{$2}" (@intFromEnum(number)),
89 : [number] "{$2}" (@backingInt(number)),
9090 [arg1] "{$4}" (arg1),
9191 [arg2] "{$5}" (arg2),
9292 [arg3] "{$6}" (arg3),
......@@ -109,7 +109,7 @@ pub fn syscall5(
109109 \\ dsubu $v0, $zero, $v0
110110 \\1:
111111 : [ret] "={$2}" (-> u64),
112 : [number] "{$2}" (@intFromEnum(number)),
112 : [number] "{$2}" (@backingInt(number)),
113113 [arg1] "{$4}" (arg1),
114114 [arg2] "{$5}" (arg2),
115115 [arg3] "{$6}" (arg3),
......@@ -134,7 +134,7 @@ pub fn syscall6(
134134 \\ dsubu $v0, $zero, $v0
135135 \\1:
136136 : [ret] "={$2}" (-> u64),
137 : [number] "{$2}" (@intFromEnum(number)),
137 : [number] "{$2}" (@backingInt(number)),
138138 [arg1] "{$4}" (arg1),
139139 [arg2] "{$5}" (arg2),
140140 [arg3] "{$6}" (arg3),
......@@ -158,7 +158,7 @@ pub fn syscall_pipe(
158158 \\ sw $v1, 4($a0)
159159 \\2:
160160 : [ret] "={$2}" (-> u64),
161 : [number] "{$2}" (@intFromEnum(SYS.pipe)),
161 : [number] "{$2}" (@backingInt(SYS.pipe)),
162162 [fd] "{$4}" (fd),
163163 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
164164}
lib/std/os/linux/mipsn32.zig+9-9
......@@ -14,7 +14,7 @@ pub fn syscall0(
1414 \\ subu $v0, $zero, $v0
1515 \\1:
1616 : [ret] "={$2}" (-> u32),
17 : [number] "{$2}" (@intFromEnum(number)),
17 : [number] "{$2}" (@backingInt(number)),
1818 : .{ .r1 = true, .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
1919}
2020
......@@ -29,7 +29,7 @@ pub fn syscall1(
2929 \\ subu $v0, $zero, $v0
3030 \\1:
3131 : [ret] "={$2}" (-> u32),
32 : [number] "{$2}" (@intFromEnum(number)),
32 : [number] "{$2}" (@backingInt(number)),
3333 [arg1] "{$4}" (arg1),
3434 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
3535}
......@@ -46,7 +46,7 @@ pub fn syscall2(
4646 \\ subu $v0, $zero, $v0
4747 \\1:
4848 : [ret] "={$2}" (-> u32),
49 : [number] "{$2}" (@intFromEnum(number)),
49 : [number] "{$2}" (@backingInt(number)),
5050 [arg1] "{$4}" (arg1),
5151 [arg2] "{$5}" (arg2),
5252 : .{ .r1 = true, .r3 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
......@@ -65,7 +65,7 @@ pub fn syscall3(
6565 \\ subu $v0, $zero, $v0
6666 \\1:
6767 : [ret] "={$2}" (-> u32),
68 : [number] "{$2}" (@intFromEnum(number)),
68 : [number] "{$2}" (@backingInt(number)),
6969 [arg1] "{$4}" (arg1),
7070 [arg2] "{$5}" (arg2),
7171 [arg3] "{$6}" (arg3),
......@@ -86,7 +86,7 @@ pub fn syscall4(
8686 \\ subu $v0, $zero, $v0
8787 \\1:
8888 : [ret] "={$2}" (-> u32),
89 : [number] "{$2}" (@intFromEnum(number)),
89 : [number] "{$2}" (@backingInt(number)),
9090 [arg1] "{$4}" (arg1),
9191 [arg2] "{$5}" (arg2),
9292 [arg3] "{$6}" (arg3),
......@@ -109,7 +109,7 @@ pub fn syscall5(
109109 \\ subu $v0, $zero, $v0
110110 \\1:
111111 : [ret] "={$2}" (-> u32),
112 : [number] "{$2}" (@intFromEnum(number)),
112 : [number] "{$2}" (@backingInt(number)),
113113 [arg1] "{$4}" (arg1),
114114 [arg2] "{$5}" (arg2),
115115 [arg3] "{$6}" (arg3),
......@@ -134,7 +134,7 @@ pub fn syscall6(
134134 \\ subu $v0, $zero, $v0
135135 \\1:
136136 : [ret] "={$2}" (-> u32),
137 : [number] "{$2}" (@intFromEnum(number)),
137 : [number] "{$2}" (@backingInt(number)),
138138 [arg1] "{$4}" (arg1),
139139 [arg2] "{$5}" (arg2),
140140 [arg3] "{$6}" (arg3),
......@@ -158,7 +158,7 @@ pub fn syscall_pipe(
158158 \\ sw $v1, 4($a0)
159159 \\2:
160160 : [ret] "={$2}" (-> u32),
161 : [number] "{$2}" (@intFromEnum(SYS.pipe)),
161 : [number] "{$2}" (@backingInt(SYS.pipe)),
162162 [fd] "{$4}" (fd),
163163 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
164164}
......@@ -175,7 +175,7 @@ pub fn syscall_lseek(
175175 \\ dsubu $v0, $zero, $v0
176176 \\1:
177177 : [ret] "={$2}" (-> u64),
178 : [number] "{$2}" (@intFromEnum(SYS.lseek)),
178 : [number] "{$2}" (@backingInt(SYS.lseek)),
179179 [fd] "{$4}" (@as(u32, @bitCast(fd))),
180180 [offset] "{$5}" (@as(u64, @bitCast(offset))),
181181 [whence] "{$6}" (whence),
lib/std/os/linux/or1k.zig+7-7
......@@ -10,7 +10,7 @@ pub fn syscall0(
1010 return asm volatile (
1111 \\ l.sys 1
1212 : [ret] "={r11}" (-> u32),
13 : [number] "{r11}" (@intFromEnum(number)),
13 : [number] "{r11}" (@backingInt(number)),
1414 : .{ .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r12 = true, .r13 = true, .r15 = true, .r17 = true, .r19 = true, .r21 = true, .r23 = true, .r25 = true, .r27 = true, .r29 = true, .r31 = true, .memory = true });
1515}
1616
......@@ -21,7 +21,7 @@ pub fn syscall1(
2121 return asm volatile (
2222 \\ l.sys 1
2323 : [ret] "={r11}" (-> u32),
24 : [number] "{r11}" (@intFromEnum(number)),
24 : [number] "{r11}" (@backingInt(number)),
2525 [arg1] "{r3}" (arg1),
2626 : .{ .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r12 = true, .r13 = true, .r15 = true, .r17 = true, .r19 = true, .r21 = true, .r23 = true, .r25 = true, .r27 = true, .r29 = true, .r31 = true, .memory = true });
2727}
......@@ -34,7 +34,7 @@ pub fn syscall2(
3434 return asm volatile (
3535 \\ l.sys 1
3636 : [ret] "={r11}" (-> u32),
37 : [number] "{r11}" (@intFromEnum(number)),
37 : [number] "{r11}" (@backingInt(number)),
3838 [arg1] "{r3}" (arg1),
3939 [arg2] "{r4}" (arg2),
4040 : .{ .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r12 = true, .r13 = true, .r15 = true, .r17 = true, .r19 = true, .r21 = true, .r23 = true, .r25 = true, .r27 = true, .r29 = true, .r31 = true, .memory = true });
......@@ -49,7 +49,7 @@ pub fn syscall3(
4949 return asm volatile (
5050 \\ l.sys 1
5151 : [ret] "={r11}" (-> u32),
52 : [number] "{r11}" (@intFromEnum(number)),
52 : [number] "{r11}" (@backingInt(number)),
5353 [arg1] "{r3}" (arg1),
5454 [arg2] "{r4}" (arg2),
5555 [arg3] "{r5}" (arg3),
......@@ -66,7 +66,7 @@ pub fn syscall4(
6666 return asm volatile (
6767 \\ l.sys 1
6868 : [ret] "={r11}" (-> u32),
69 : [number] "{r11}" (@intFromEnum(number)),
69 : [number] "{r11}" (@backingInt(number)),
7070 [arg1] "{r3}" (arg1),
7171 [arg2] "{r4}" (arg2),
7272 [arg3] "{r5}" (arg3),
......@@ -85,7 +85,7 @@ pub fn syscall5(
8585 return asm volatile (
8686 \\ l.sys 1
8787 : [ret] "={r11}" (-> u32),
88 : [number] "{r11}" (@intFromEnum(number)),
88 : [number] "{r11}" (@backingInt(number)),
8989 [arg1] "{r3}" (arg1),
9090 [arg2] "{r4}" (arg2),
9191 [arg3] "{r5}" (arg3),
......@@ -106,7 +106,7 @@ pub fn syscall6(
106106 return asm volatile (
107107 \\ l.sys 1
108108 : [ret] "={r11}" (-> u32),
109 : [number] "{r11}" (@intFromEnum(number)),
109 : [number] "{r11}" (@backingInt(number)),
110110 [arg1] "{r3}" (arg1),
111111 [arg2] "{r4}" (arg2),
112112 [arg3] "{r5}" (arg3),
lib/std/os/linux/powerpc.zig+11-11
......@@ -19,7 +19,7 @@ pub fn syscall0(
1919 \\ 1:
2020 : [ret] "={r3}" (-> u32),
2121 [r0_out] "={r0}" (r0_out),
22 : [number] "{r0}" (@intFromEnum(number)),
22 : [number] "{r0}" (@backingInt(number)),
2323 : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
2424}
2525
......@@ -36,7 +36,7 @@ pub fn syscall1(
3636 \\ 1:
3737 : [ret] "={r3}" (-> u32),
3838 [r0_out] "={r0}" (r0_out),
39 : [number] "{r0}" (@intFromEnum(number)),
39 : [number] "{r0}" (@backingInt(number)),
4040 [arg1] "{r3}" (arg1),
4141 : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
4242}
......@@ -57,7 +57,7 @@ pub fn syscall2(
5757 : [ret] "={r3}" (-> u32),
5858 [r0_out] "={r0}" (r0_out),
5959 [r4_out] "={r4}" (r4_out),
60 : [number] "{r0}" (@intFromEnum(number)),
60 : [number] "{r0}" (@backingInt(number)),
6161 [arg1] "{r3}" (arg1),
6262 [arg2] "{r4}" (arg2),
6363 : .{ .memory = true, .cr0 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
......@@ -82,7 +82,7 @@ pub fn syscall3(
8282 [r0_out] "={r0}" (r0_out),
8383 [r4_out] "={r4}" (r4_out),
8484 [r5_out] "={r5}" (r5_out),
85 : [number] "{r0}" (@intFromEnum(number)),
85 : [number] "{r0}" (@backingInt(number)),
8686 [arg1] "{r3}" (arg1),
8787 [arg2] "{r4}" (arg2),
8888 [arg3] "{r5}" (arg3),
......@@ -111,7 +111,7 @@ pub fn syscall4(
111111 [r4_out] "={r4}" (r4_out),
112112 [r5_out] "={r5}" (r5_out),
113113 [r6_out] "={r6}" (r6_out),
114 : [number] "{r0}" (@intFromEnum(number)),
114 : [number] "{r0}" (@backingInt(number)),
115115 [arg1] "{r3}" (arg1),
116116 [arg2] "{r4}" (arg2),
117117 [arg3] "{r5}" (arg3),
......@@ -144,7 +144,7 @@ pub fn syscall5(
144144 [r5_out] "={r5}" (r5_out),
145145 [r6_out] "={r6}" (r6_out),
146146 [r7_out] "={r7}" (r7_out),
147 : [number] "{r0}" (@intFromEnum(number)),
147 : [number] "{r0}" (@backingInt(number)),
148148 [arg1] "{r3}" (arg1),
149149 [arg2] "{r4}" (arg2),
150150 [arg3] "{r5}" (arg3),
......@@ -181,7 +181,7 @@ pub fn syscall6(
181181 [r6_out] "={r6}" (r6_out),
182182 [r7_out] "={r7}" (r7_out),
183183 [r8_out] "={r8}" (r8_out),
184 : [number] "{r0}" (@intFromEnum(number)),
184 : [number] "{r0}" (@backingInt(number)),
185185 [arg1] "{r3}" (arg1),
186186 [arg2] "{r4}" (arg2),
187187 [arg3] "{r5}" (arg3),
......@@ -267,12 +267,12 @@ pub fn restore() callconv(.naked) noreturn {
267267 \\ li 0, %[number]
268268 \\ sc
269269 :
270 : [number] "i" (@intFromEnum(SYS.sigreturn)),
270 : [number] "i" (@backingInt(SYS.sigreturn)),
271271 ),
272272 else => asm volatile (
273273 \\ sc
274274 :
275 : [number] "{r0}" (@intFromEnum(SYS.sigreturn)),
275 : [number] "{r0}" (@backingInt(SYS.sigreturn)),
276276 ),
277277 }
278278}
......@@ -283,12 +283,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
283283 \\ li 0, %[number]
284284 \\ sc
285285 :
286 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
286 : [number] "i" (@backingInt(SYS.rt_sigreturn)),
287287 ),
288288 else => asm volatile (
289289 \\ sc
290290 :
291 : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
291 : [number] "{r0}" (@backingInt(SYS.rt_sigreturn)),
292292 ),
293293 }
294294}
lib/std/os/linux/powerpc64.zig+11-11
......@@ -19,7 +19,7 @@ pub fn syscall0(
1919 \\ 1:
2020 : [ret] "={r3}" (-> u64),
2121 [r0_out] "={r0}" (r0_out),
22 : [number] "{r0}" (@intFromEnum(number)),
22 : [number] "{r0}" (@backingInt(number)),
2323 : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
2424}
2525
......@@ -36,7 +36,7 @@ pub fn syscall1(
3636 \\ 1:
3737 : [ret] "={r3}" (-> u64),
3838 [r0_out] "={r0}" (r0_out),
39 : [number] "{r0}" (@intFromEnum(number)),
39 : [number] "{r0}" (@backingInt(number)),
4040 [arg1] "{r3}" (arg1),
4141 : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
4242}
......@@ -57,7 +57,7 @@ pub fn syscall2(
5757 : [ret] "={r3}" (-> u64),
5858 [r0_out] "={r0}" (r0_out),
5959 [r4_out] "={r4}" (r4_out),
60 : [number] "{r0}" (@intFromEnum(number)),
60 : [number] "{r0}" (@backingInt(number)),
6161 [arg1] "{r3}" (arg1),
6262 [arg2] "{r4}" (arg2),
6363 : .{ .memory = true, .cr0 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
......@@ -82,7 +82,7 @@ pub fn syscall3(
8282 [r0_out] "={r0}" (r0_out),
8383 [r4_out] "={r4}" (r4_out),
8484 [r5_out] "={r5}" (r5_out),
85 : [number] "{r0}" (@intFromEnum(number)),
85 : [number] "{r0}" (@backingInt(number)),
8686 [arg1] "{r3}" (arg1),
8787 [arg2] "{r4}" (arg2),
8888 [arg3] "{r5}" (arg3),
......@@ -111,7 +111,7 @@ pub fn syscall4(
111111 [r4_out] "={r4}" (r4_out),
112112 [r5_out] "={r5}" (r5_out),
113113 [r6_out] "={r6}" (r6_out),
114 : [number] "{r0}" (@intFromEnum(number)),
114 : [number] "{r0}" (@backingInt(number)),
115115 [arg1] "{r3}" (arg1),
116116 [arg2] "{r4}" (arg2),
117117 [arg3] "{r5}" (arg3),
......@@ -144,7 +144,7 @@ pub fn syscall5(
144144 [r5_out] "={r5}" (r5_out),
145145 [r6_out] "={r6}" (r6_out),
146146 [r7_out] "={r7}" (r7_out),
147 : [number] "{r0}" (@intFromEnum(number)),
147 : [number] "{r0}" (@backingInt(number)),
148148 [arg1] "{r3}" (arg1),
149149 [arg2] "{r4}" (arg2),
150150 [arg3] "{r5}" (arg3),
......@@ -181,7 +181,7 @@ pub fn syscall6(
181181 [r6_out] "={r6}" (r6_out),
182182 [r7_out] "={r7}" (r7_out),
183183 [r8_out] "={r8}" (r8_out),
184 : [number] "{r0}" (@intFromEnum(number)),
184 : [number] "{r0}" (@backingInt(number)),
185185 [arg1] "{r3}" (arg1),
186186 [arg2] "{r4}" (arg2),
187187 [arg3] "{r5}" (arg3),
......@@ -252,12 +252,12 @@ pub fn restore() callconv(.naked) noreturn {
252252 \\ li 0, %[number]
253253 \\ sc
254254 :
255 : [number] "i" (@intFromEnum(SYS.sigreturn)),
255 : [number] "i" (@backingInt(SYS.sigreturn)),
256256 ),
257257 else => asm volatile (
258258 \\ sc
259259 :
260 : [number] "{r0}" (@intFromEnum(SYS.sigreturn)),
260 : [number] "{r0}" (@backingInt(SYS.sigreturn)),
261261 ),
262262 }
263263}
......@@ -268,12 +268,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
268268 \\ li 0, %[number]
269269 \\ sc
270270 :
271 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
271 : [number] "i" (@backingInt(SYS.rt_sigreturn)),
272272 ),
273273 else => asm volatile (
274274 \\ sc
275275 :
276 : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
276 : [number] "{r0}" (@backingInt(SYS.rt_sigreturn)),
277277 ),
278278 }
279279}
lib/std/os/linux/riscv32.zig+7-7
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u32 {
1010 return asm volatile ("ecall"
1111 : [ret] "={x10}" (-> u32),
12 : [number] "{x17}" (@intFromEnum(number)),
12 : [number] "{x17}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u32 {
2020 return asm volatile ("ecall"
2121 : [ret] "={x10}" (-> u32),
22 : [number] "{x17}" (@intFromEnum(number)),
22 : [number] "{x17}" (@backingInt(number)),
2323 [arg1] "{x10}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u32 {
3232 return asm volatile ("ecall"
3333 : [ret] "={x10}" (-> u32),
34 : [number] "{x17}" (@intFromEnum(number)),
34 : [number] "{x17}" (@backingInt(number)),
3535 [arg1] "{x10}" (arg1),
3636 [arg2] "{x11}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u32 {
4646 return asm volatile ("ecall"
4747 : [ret] "={x10}" (-> u32),
48 : [number] "{x17}" (@intFromEnum(number)),
48 : [number] "{x17}" (@backingInt(number)),
4949 [arg1] "{x10}" (arg1),
5050 [arg2] "{x11}" (arg2),
5151 [arg3] "{x12}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u32 {
6262 return asm volatile ("ecall"
6363 : [ret] "={x10}" (-> u32),
64 : [number] "{x17}" (@intFromEnum(number)),
64 : [number] "{x17}" (@backingInt(number)),
6565 [arg1] "{x10}" (arg1),
6666 [arg2] "{x11}" (arg2),
6767 [arg3] "{x12}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u32 {
8080 return asm volatile ("ecall"
8181 : [ret] "={x10}" (-> u32),
82 : [number] "{x17}" (@intFromEnum(number)),
82 : [number] "{x17}" (@backingInt(number)),
8383 [arg1] "{x10}" (arg1),
8484 [arg2] "{x11}" (arg2),
8585 [arg3] "{x12}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u32 {
100100 return asm volatile ("ecall"
101101 : [ret] "={x10}" (-> u32),
102 : [number] "{x17}" (@intFromEnum(number)),
102 : [number] "{x17}" (@backingInt(number)),
103103 [arg1] "{x10}" (arg1),
104104 [arg2] "{x11}" (arg2),
105105 [arg3] "{x12}" (arg3),
lib/std/os/linux/riscv64.zig+7-7
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u64 {
1010 return asm volatile ("ecall"
1111 : [ret] "={x10}" (-> u64),
12 : [number] "{x17}" (@intFromEnum(number)),
12 : [number] "{x17}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u64 {
2020 return asm volatile ("ecall"
2121 : [ret] "={x10}" (-> u64),
22 : [number] "{x17}" (@intFromEnum(number)),
22 : [number] "{x17}" (@backingInt(number)),
2323 [arg1] "{x10}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u64 {
3232 return asm volatile ("ecall"
3333 : [ret] "={x10}" (-> u64),
34 : [number] "{x17}" (@intFromEnum(number)),
34 : [number] "{x17}" (@backingInt(number)),
3535 [arg1] "{x10}" (arg1),
3636 [arg2] "{x11}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u64 {
4646 return asm volatile ("ecall"
4747 : [ret] "={x10}" (-> u64),
48 : [number] "{x17}" (@intFromEnum(number)),
48 : [number] "{x17}" (@backingInt(number)),
4949 [arg1] "{x10}" (arg1),
5050 [arg2] "{x11}" (arg2),
5151 [arg3] "{x12}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u64 {
6262 return asm volatile ("ecall"
6363 : [ret] "={x10}" (-> u64),
64 : [number] "{x17}" (@intFromEnum(number)),
64 : [number] "{x17}" (@backingInt(number)),
6565 [arg1] "{x10}" (arg1),
6666 [arg2] "{x11}" (arg2),
6767 [arg3] "{x12}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u64 {
8080 return asm volatile ("ecall"
8181 : [ret] "={x10}" (-> u64),
82 : [number] "{x17}" (@intFromEnum(number)),
82 : [number] "{x17}" (@backingInt(number)),
8383 [arg1] "{x10}" (arg1),
8484 [arg2] "{x11}" (arg2),
8585 [arg3] "{x12}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u64 {
100100 return asm volatile ("ecall"
101101 : [ret] "={x10}" (-> u64),
102 : [number] "{x17}" (@intFromEnum(number)),
102 : [number] "{x17}" (@backingInt(number)),
103103 [arg1] "{x10}" (arg1),
104104 [arg2] "{x11}" (arg2),
105105 [arg3] "{x12}" (arg3),
lib/std/os/linux/s390x.zig+9-9
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u64 {
1010 return asm volatile ("svc 0"
1111 : [ret] "={r2}" (-> u64),
12 : [number] "{r1}" (@intFromEnum(number)),
12 : [number] "{r1}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u64 {
2020 return asm volatile ("svc 0"
2121 : [ret] "={r2}" (-> u64),
22 : [number] "{r1}" (@intFromEnum(number)),
22 : [number] "{r1}" (@backingInt(number)),
2323 [arg1] "{r2}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u64 {
3232 return asm volatile ("svc 0"
3333 : [ret] "={r2}" (-> u64),
34 : [number] "{r1}" (@intFromEnum(number)),
34 : [number] "{r1}" (@backingInt(number)),
3535 [arg1] "{r2}" (arg1),
3636 [arg2] "{r3}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u64 {
4646 return asm volatile ("svc 0"
4747 : [ret] "={r2}" (-> u64),
48 : [number] "{r1}" (@intFromEnum(number)),
48 : [number] "{r1}" (@backingInt(number)),
4949 [arg1] "{r2}" (arg1),
5050 [arg2] "{r3}" (arg2),
5151 [arg3] "{r4}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u64 {
6262 return asm volatile ("svc 0"
6363 : [ret] "={r2}" (-> u64),
64 : [number] "{r1}" (@intFromEnum(number)),
64 : [number] "{r1}" (@backingInt(number)),
6565 [arg1] "{r2}" (arg1),
6666 [arg2] "{r3}" (arg2),
6767 [arg3] "{r4}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u64 {
8080 return asm volatile ("svc 0"
8181 : [ret] "={r2}" (-> u64),
82 : [number] "{r1}" (@intFromEnum(number)),
82 : [number] "{r1}" (@backingInt(number)),
8383 [arg1] "{r2}" (arg1),
8484 [arg2] "{r3}" (arg2),
8585 [arg3] "{r4}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u64 {
100100 return asm volatile ("svc 0"
101101 : [ret] "={r2}" (-> u64),
102 : [number] "{r1}" (@intFromEnum(number)),
102 : [number] "{r1}" (@backingInt(number)),
103103 [arg1] "{r2}" (arg1),
104104 [arg2] "{r3}" (arg2),
105105 [arg3] "{r4}" (arg3),
......@@ -177,7 +177,7 @@ pub fn restore() callconv(.naked) noreturn {
177177 asm volatile (
178178 \\svc 0
179179 :
180 : [number] "{r1}" (@intFromEnum(SYS.sigreturn)),
180 : [number] "{r1}" (@backingInt(SYS.sigreturn)),
181181 );
182182}
183183
......@@ -185,7 +185,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
185185 asm volatile (
186186 \\svc 0
187187 :
188 : [number] "{r1}" (@intFromEnum(SYS.rt_sigreturn)),
188 : [number] "{r1}" (@backingInt(SYS.rt_sigreturn)),
189189 );
190190}
191191
lib/std/os/linux/sh.zig+9-9
......@@ -15,7 +15,7 @@ pub fn syscall0(
1515 \\ or r0, r0
1616 \\ or r0, r0
1717 : [ret] "={r0}" (-> u32),
18 : [number] "{r3}" (@intFromEnum(number)),
18 : [number] "{r3}" (@backingInt(number)),
1919 : .{ .memory = true });
2020}
2121
......@@ -31,7 +31,7 @@ pub fn syscall1(
3131 \\ or r0, r0
3232 \\ or r0, r0
3333 : [ret] "={r0}" (-> u32),
34 : [number] "{r3}" (@intFromEnum(number)),
34 : [number] "{r3}" (@backingInt(number)),
3535 [arg1] "{r4}" (arg1),
3636 : .{ .memory = true });
3737}
......@@ -49,7 +49,7 @@ pub fn syscall2(
4949 \\ or r0, r0
5050 \\ or r0, r0
5151 : [ret] "={r0}" (-> u32),
52 : [number] "{r3}" (@intFromEnum(number)),
52 : [number] "{r3}" (@backingInt(number)),
5353 [arg1] "{r4}" (arg1),
5454 [arg2] "{r5}" (arg2),
5555 : .{ .memory = true });
......@@ -69,7 +69,7 @@ pub fn syscall3(
6969 \\ or r0, r0
7070 \\ or r0, r0
7171 : [ret] "={r0}" (-> u32),
72 : [number] "{r3}" (@intFromEnum(number)),
72 : [number] "{r3}" (@backingInt(number)),
7373 [arg1] "{r4}" (arg1),
7474 [arg2] "{r5}" (arg2),
7575 [arg3] "{r6}" (arg3),
......@@ -91,7 +91,7 @@ pub fn syscall4(
9191 \\ or r0, r0
9292 \\ or r0, r0
9393 : [ret] "={r0}" (-> u32),
94 : [number] "{r3}" (@intFromEnum(number)),
94 : [number] "{r3}" (@backingInt(number)),
9595 [arg1] "{r4}" (arg1),
9696 [arg2] "{r5}" (arg2),
9797 [arg3] "{r6}" (arg3),
......@@ -115,7 +115,7 @@ pub fn syscall5(
115115 \\ or r0, r0
116116 \\ or r0, r0
117117 : [ret] "={r0}" (-> u32),
118 : [number] "{r3}" (@intFromEnum(number)),
118 : [number] "{r3}" (@backingInt(number)),
119119 [arg1] "{r4}" (arg1),
120120 [arg2] "{r5}" (arg2),
121121 [arg3] "{r6}" (arg3),
......@@ -141,7 +141,7 @@ pub fn syscall6(
141141 \\ or r0, r0
142142 \\ or r0, r0
143143 : [ret] "={r0}" (-> u32),
144 : [number] "{r3}" (@intFromEnum(number)),
144 : [number] "{r3}" (@backingInt(number)),
145145 [arg1] "{r4}" (arg1),
146146 [arg2] "{r5}" (arg2),
147147 [arg3] "{r6}" (arg3),
......@@ -217,7 +217,7 @@ pub fn restore() callconv(.naked) noreturn {
217217 \\ or r0, r0
218218 \\ or r0, r0
219219 :
220 : [number] "{r3}" (@intFromEnum(SYS.sigreturn)),
220 : [number] "{r3}" (@backingInt(SYS.sigreturn)),
221221 );
222222}
223223
......@@ -230,7 +230,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
230230 \\ or r0, r0
231231 \\ or r0, r0
232232 :
233 : [number] "{r3}" (@intFromEnum(SYS.rt_sigreturn)),
233 : [number] "{r3}" (@backingInt(SYS.rt_sigreturn)),
234234 );
235235}
236236
lib/std/os/linux/sparc.zig+10-10
......@@ -14,7 +14,7 @@ pub fn syscall0(
1414 \\ neg %%o0
1515 \\1:
1616 : [ret] "={o0}" (-> u32),
17 : [number] "{g1}" (@intFromEnum(number)),
17 : [number] "{g1}" (@backingInt(number)),
1818 : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
1919}
2020
......@@ -29,7 +29,7 @@ pub fn syscall1(
2929 \\ neg %%o0
3030 \\1:
3131 : [ret] "={o0}" (-> u32),
32 : [number] "{g1}" (@intFromEnum(number)),
32 : [number] "{g1}" (@backingInt(number)),
3333 [arg1] "{o0}" (arg1),
3434 : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
3535}
......@@ -46,7 +46,7 @@ pub fn syscall2(
4646 \\ neg %%o0
4747 \\1:
4848 : [ret] "={o0}" (-> u32),
49 : [number] "{g1}" (@intFromEnum(number)),
49 : [number] "{g1}" (@backingInt(number)),
5050 [arg1] "{o0}" (arg1),
5151 [arg2] "{o1}" (arg2),
5252 : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
......@@ -65,7 +65,7 @@ pub fn syscall3(
6565 \\ neg %%o0
6666 \\1:
6767 : [ret] "={o0}" (-> u32),
68 : [number] "{g1}" (@intFromEnum(number)),
68 : [number] "{g1}" (@backingInt(number)),
6969 [arg1] "{o0}" (arg1),
7070 [arg2] "{o1}" (arg2),
7171 [arg3] "{o2}" (arg3),
......@@ -86,7 +86,7 @@ pub fn syscall4(
8686 \\ neg %%o0
8787 \\1:
8888 : [ret] "={o0}" (-> u32),
89 : [number] "{g1}" (@intFromEnum(number)),
89 : [number] "{g1}" (@backingInt(number)),
9090 [arg1] "{o0}" (arg1),
9191 [arg2] "{o1}" (arg2),
9292 [arg3] "{o2}" (arg3),
......@@ -109,7 +109,7 @@ pub fn syscall5(
109109 \\ neg %%o0
110110 \\1:
111111 : [ret] "={o0}" (-> u32),
112 : [number] "{g1}" (@intFromEnum(number)),
112 : [number] "{g1}" (@backingInt(number)),
113113 [arg1] "{o0}" (arg1),
114114 [arg2] "{o1}" (arg2),
115115 [arg3] "{o2}" (arg3),
......@@ -134,7 +134,7 @@ pub fn syscall6(
134134 \\ neg %%o0
135135 \\1:
136136 : [ret] "={o0}" (-> u32),
137 : [number] "{g1}" (@intFromEnum(number)),
137 : [number] "{g1}" (@backingInt(number)),
138138 [arg1] "{o0}" (arg1),
139139 [arg2] "{o1}" (arg2),
140140 [arg3] "{o2}" (arg3),
......@@ -161,7 +161,7 @@ pub fn syscall_pipe(
161161 \\ clr %%o0
162162 \\2:
163163 : [ret] "={o0}" (-> u32),
164 : [number] "{g1}" (@intFromEnum(SYS.pipe)),
164 : [number] "{g1}" (@backingInt(SYS.pipe)),
165165 [arg] "r" (fd),
166166 : .{ .memory = true, .g3 = true });
167167}
......@@ -184,7 +184,7 @@ pub fn syscall_fork() u32 {
184184 \\ and %%o1, %%o0, %%o0
185185 \\2:
186186 : [ret] "={o0}" (-> u32),
187 : [number] "{g1}" (@intFromEnum(SYS.fork)),
187 : [number] "{g1}" (@backingInt(SYS.fork)),
188188 : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
189189}
190190
......@@ -265,7 +265,7 @@ pub const restore = restore_rt;
265265pub fn restore_rt() callconv(.c) void {
266266 return asm volatile ("t 0x10"
267267 :
268 : [number] "{g1}" (@intFromEnum(SYS.rt_sigreturn)),
268 : [number] "{g1}" (@backingInt(SYS.rt_sigreturn)),
269269 : .{ .memory = true, .xcc = true, .o0 = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
270270}
271271
lib/std/os/linux/sparc64.zig+10-10
......@@ -14,7 +14,7 @@ pub fn syscall0(
1414 \\ neg %%o0
1515 \\1:
1616 : [ret] "={o0}" (-> u64),
17 : [number] "{g1}" (@intFromEnum(number)),
17 : [number] "{g1}" (@backingInt(number)),
1818 : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
1919}
2020
......@@ -29,7 +29,7 @@ pub fn syscall1(
2929 \\ neg %%o0
3030 \\1:
3131 : [ret] "={o0}" (-> u64),
32 : [number] "{g1}" (@intFromEnum(number)),
32 : [number] "{g1}" (@backingInt(number)),
3333 [arg1] "{o0}" (arg1),
3434 : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
3535}
......@@ -46,7 +46,7 @@ pub fn syscall2(
4646 \\ neg %%o0
4747 \\1:
4848 : [ret] "={o0}" (-> u64),
49 : [number] "{g1}" (@intFromEnum(number)),
49 : [number] "{g1}" (@backingInt(number)),
5050 [arg1] "{o0}" (arg1),
5151 [arg2] "{o1}" (arg2),
5252 : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
......@@ -65,7 +65,7 @@ pub fn syscall3(
6565 \\ neg %%o0
6666 \\1:
6767 : [ret] "={o0}" (-> u64),
68 : [number] "{g1}" (@intFromEnum(number)),
68 : [number] "{g1}" (@backingInt(number)),
6969 [arg1] "{o0}" (arg1),
7070 [arg2] "{o1}" (arg2),
7171 [arg3] "{o2}" (arg3),
......@@ -86,7 +86,7 @@ pub fn syscall4(
8686 \\ neg %%o0
8787 \\1:
8888 : [ret] "={o0}" (-> u64),
89 : [number] "{g1}" (@intFromEnum(number)),
89 : [number] "{g1}" (@backingInt(number)),
9090 [arg1] "{o0}" (arg1),
9191 [arg2] "{o1}" (arg2),
9292 [arg3] "{o2}" (arg3),
......@@ -109,7 +109,7 @@ pub fn syscall5(
109109 \\ neg %%o0
110110 \\1:
111111 : [ret] "={o0}" (-> u64),
112 : [number] "{g1}" (@intFromEnum(number)),
112 : [number] "{g1}" (@backingInt(number)),
113113 [arg1] "{o0}" (arg1),
114114 [arg2] "{o1}" (arg2),
115115 [arg3] "{o2}" (arg3),
......@@ -134,7 +134,7 @@ pub fn syscall6(
134134 \\ neg %%o0
135135 \\1:
136136 : [ret] "={o0}" (-> u64),
137 : [number] "{g1}" (@intFromEnum(number)),
137 : [number] "{g1}" (@backingInt(number)),
138138 [arg1] "{o0}" (arg1),
139139 [arg2] "{o1}" (arg2),
140140 [arg3] "{o2}" (arg3),
......@@ -161,7 +161,7 @@ pub fn syscall_pipe(
161161 \\ clr %%o0
162162 \\2:
163163 : [ret] "={o0}" (-> u64),
164 : [number] "{g1}" (@intFromEnum(SYS.pipe)),
164 : [number] "{g1}" (@backingInt(SYS.pipe)),
165165 [arg] "r" (fd),
166166 : .{ .memory = true, .g3 = true });
167167}
......@@ -184,7 +184,7 @@ pub fn syscall_fork() u64 {
184184 \\ and %%o1, %%o0, %%o0
185185 \\2:
186186 : [ret] "={o0}" (-> u64),
187 : [number] "{g1}" (@intFromEnum(SYS.fork)),
187 : [number] "{g1}" (@backingInt(SYS.fork)),
188188 : .{ .memory = true, .xcc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
189189}
190190
......@@ -264,7 +264,7 @@ pub const restore = restore_rt;
264264pub fn restore_rt() callconv(.c) void {
265265 return asm volatile ("t 0x6d"
266266 :
267 : [number] "{g1}" (@intFromEnum(SYS.rt_sigreturn)),
267 : [number] "{g1}" (@backingInt(SYS.rt_sigreturn)),
268268 : .{ .memory = true, .xcc = true, .o0 = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
269269}
270270
lib/std/os/linux/test.zig+3-3
......@@ -186,8 +186,8 @@ test "sysinfo" {
186186}
187187
188188comptime {
189 assert(128 == @as(u32, @bitCast(linux.FUTEX_OP{ .cmd = @enumFromInt(0), .private = true, .realtime = false })));
190 assert(256 == @as(u32, @bitCast(linux.FUTEX_OP{ .cmd = @enumFromInt(0), .private = false, .realtime = true })));
189 assert(128 == @as(u32, @bitCast(linux.FUTEX_OP{ .cmd = @fromBackingInt(@intCast(0)), .private = true, .realtime = false })));
190 assert(256 == @as(u32, @bitCast(linux.FUTEX_OP{ .cmd = @fromBackingInt(@intCast(0)), .private = false, .realtime = true })));
191191
192192 // Check futex_param4 union is packed correctly
193193 const param_union = linux.futex_param4{
......@@ -277,7 +277,7 @@ test "futex v1" {
277277
278278comptime {
279279 assert(2 == @as(u32, @bitCast(linux.FUTEX2_FLAGS{ .size = .U32, .private = false })));
280 assert(128 == @as(u32, @bitCast(linux.FUTEX2_FLAGS{ .size = @enumFromInt(0), .private = true })));
280 assert(128 == @as(u32, @bitCast(linux.FUTEX2_FLAGS{ .size = @fromBackingInt(@intCast(0)), .private = true })));
281281}
282282
283283test "futex2_waitv" {
lib/std/os/linux/thumb.zig+7-7
......@@ -12,7 +12,7 @@ pub const syscall_arg_t = arm.syscall_arg_t;
1212pub fn syscall0(
1313 number: SYS,
1414) u32 {
15 var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
15 var buf: [2]syscall_arg_t = .{ @backingInt(number), undefined };
1616 return asm volatile (
1717 \\ str r7, [%[tmp], #4]
1818 \\ ldr r7, [%[tmp]]
......@@ -27,7 +27,7 @@ pub fn syscall1(
2727 number: SYS,
2828 arg1: syscall_arg_t,
2929) u32 {
30 var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
30 var buf: [2]syscall_arg_t = .{ @backingInt(number), undefined };
3131 return asm volatile (
3232 \\ str r7, [%[tmp], #4]
3333 \\ ldr r7, [%[tmp]]
......@@ -44,7 +44,7 @@ pub fn syscall2(
4444 arg1: syscall_arg_t,
4545 arg2: syscall_arg_t,
4646) u32 {
47 var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
47 var buf: [2]syscall_arg_t = .{ @backingInt(number), undefined };
4848 return asm volatile (
4949 \\ str r7, [%[tmp], #4]
5050 \\ ldr r7, [%[tmp]]
......@@ -63,7 +63,7 @@ pub fn syscall3(
6363 arg2: syscall_arg_t,
6464 arg3: syscall_arg_t,
6565) u32 {
66 var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
66 var buf: [2]syscall_arg_t = .{ @backingInt(number), undefined };
6767 return asm volatile (
6868 \\ str r7, [%[tmp], #4]
6969 \\ ldr r7, [%[tmp]]
......@@ -84,7 +84,7 @@ pub fn syscall4(
8484 arg3: syscall_arg_t,
8585 arg4: syscall_arg_t,
8686) u32 {
87 var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
87 var buf: [2]syscall_arg_t = .{ @backingInt(number), undefined };
8888 return asm volatile (
8989 \\ str r7, [%[tmp], #4]
9090 \\ ldr r7, [%[tmp]]
......@@ -107,7 +107,7 @@ pub fn syscall5(
107107 arg4: syscall_arg_t,
108108 arg5: syscall_arg_t,
109109) u32 {
110 var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
110 var buf: [2]syscall_arg_t = .{ @backingInt(number), undefined };
111111 return asm volatile (
112112 \\ str r7, [%[tmp], #4]
113113 \\ ldr r7, [%[tmp]]
......@@ -132,7 +132,7 @@ pub fn syscall6(
132132 arg5: syscall_arg_t,
133133 arg6: syscall_arg_t,
134134) u32 {
135 var buf: [2]syscall_arg_t = .{ @intFromEnum(number), undefined };
135 var buf: [2]syscall_arg_t = .{ @backingInt(number), undefined };
136136 return asm volatile (
137137 \\ str r7, [%[tmp], #4]
138138 \\ ldr r7, [%[tmp]]
lib/std/os/linux/vdso.zig+1-1
......@@ -84,7 +84,7 @@ fn checkver(def_arg: *elf.Verdef, vsym_arg: elf.Versym, vername: []const u8, str
8484 var def = def_arg;
8585 const vsym_index = vsym_arg.VERSION;
8686 while (true) {
87 if (0 == (def.flags & elf.VER_FLG_BASE) and @intFromEnum(def.ndx) == vsym_index) break;
87 if (0 == (def.flags & elf.VER_FLG_BASE) and @backingInt(def.ndx) == vsym_index) break;
8888 if (def.next == 0) return false;
8989 def = @ptrFromInt(@intFromPtr(def) + def.next);
9090 }
lib/std/os/linux/x32.zig+10-10
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u32 {
1010 return asm volatile ("syscall"
1111 : [ret] "={rax}" (-> u32),
12 : [number] "{rax}" (@intFromEnum(number)),
12 : [number] "{rax}" (@backingInt(number)),
1313 : .{ .rcx = true, .r11 = true, .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u32 {
2020 return asm volatile ("syscall"
2121 : [ret] "={rax}" (-> u32),
22 : [number] "{rax}" (@intFromEnum(number)),
22 : [number] "{rax}" (@backingInt(number)),
2323 [arg1] "{rdi}" (arg1),
2424 : .{ .rcx = true, .r11 = true, .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u32 {
3232 return asm volatile ("syscall"
3333 : [ret] "={rax}" (-> u32),
34 : [number] "{rax}" (@intFromEnum(number)),
34 : [number] "{rax}" (@backingInt(number)),
3535 [arg1] "{rdi}" (arg1),
3636 [arg2] "{rsi}" (arg2),
3737 : .{ .rcx = true, .r11 = true, .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u32 {
4646 return asm volatile ("syscall"
4747 : [ret] "={rax}" (-> u32),
48 : [number] "{rax}" (@intFromEnum(number)),
48 : [number] "{rax}" (@backingInt(number)),
4949 [arg1] "{rdi}" (arg1),
5050 [arg2] "{rsi}" (arg2),
5151 [arg3] "{rdx}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u32 {
6262 return asm volatile ("syscall"
6363 : [ret] "={rax}" (-> u32),
64 : [number] "{rax}" (@intFromEnum(number)),
64 : [number] "{rax}" (@backingInt(number)),
6565 [arg1] "{rdi}" (arg1),
6666 [arg2] "{rsi}" (arg2),
6767 [arg3] "{rdx}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u32 {
8080 return asm volatile ("syscall"
8181 : [ret] "={rax}" (-> u32),
82 : [number] "{rax}" (@intFromEnum(number)),
82 : [number] "{rax}" (@backingInt(number)),
8383 [arg1] "{rdi}" (arg1),
8484 [arg2] "{rsi}" (arg2),
8585 [arg3] "{rdx}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u32 {
100100 return asm volatile ("syscall"
101101 : [ret] "={rax}" (-> u32),
102 : [number] "{rax}" (@intFromEnum(number)),
102 : [number] "{rax}" (@backingInt(number)),
103103 [arg1] "{rdi}" (arg1),
104104 [arg2] "{rsi}" (arg2),
105105 [arg3] "{rdx}" (arg3),
......@@ -116,7 +116,7 @@ pub fn syscall_lseek(
116116) u64 {
117117 return asm volatile ("syscall"
118118 : [ret] "={rax}" (-> u64),
119 : [number] "{rax}" (@intFromEnum(SYS.lseek)),
119 : [number] "{rax}" (@backingInt(SYS.lseek)),
120120 [fd] "{rdi}" (@as(u32, @bitCast(fd))),
121121 [offset] "{rsi}" (@as(u64, @bitCast(offset))),
122122 [whence] "{rdx}" (whence),
......@@ -165,12 +165,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
165165 \\ movl %[number], %%eax
166166 \\ syscall
167167 :
168 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
168 : [number] "i" (@backingInt(SYS.rt_sigreturn)),
169169 ),
170170 else => asm volatile (
171171 \\ syscall
172172 :
173 : [number] "{rax}" (@intFromEnum(SYS.rt_sigreturn)),
173 : [number] "{rax}" (@backingInt(SYS.rt_sigreturn)),
174174 ),
175175 }
176176}
lib/std/os/linux/x86.zig+12-12
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u32 {
1010 return asm volatile ("int $0x80"
1111 : [ret] "={eax}" (-> u32),
12 : [number] "{eax}" (@intFromEnum(number)),
12 : [number] "{eax}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u32 {
2020 return asm volatile ("int $0x80"
2121 : [ret] "={eax}" (-> u32),
22 : [number] "{eax}" (@intFromEnum(number)),
22 : [number] "{eax}" (@backingInt(number)),
2323 [arg1] "{ebx}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u32 {
3232 return asm volatile ("int $0x80"
3333 : [ret] "={eax}" (-> u32),
34 : [number] "{eax}" (@intFromEnum(number)),
34 : [number] "{eax}" (@backingInt(number)),
3535 [arg1] "{ebx}" (arg1),
3636 [arg2] "{ecx}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u32 {
4646 return asm volatile ("int $0x80"
4747 : [ret] "={eax}" (-> u32),
48 : [number] "{eax}" (@intFromEnum(number)),
48 : [number] "{eax}" (@backingInt(number)),
4949 [arg1] "{ebx}" (arg1),
5050 [arg2] "{ecx}" (arg2),
5151 [arg3] "{edx}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u32 {
6262 return asm volatile ("int $0x80"
6363 : [ret] "={eax}" (-> u32),
64 : [number] "{eax}" (@intFromEnum(number)),
64 : [number] "{eax}" (@backingInt(number)),
6565 [arg1] "{ebx}" (arg1),
6666 [arg2] "{ecx}" (arg2),
6767 [arg3] "{edx}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u32 {
8080 return asm volatile ("int $0x80"
8181 : [ret] "={eax}" (-> u32),
82 : [number] "{eax}" (@intFromEnum(number)),
82 : [number] "{eax}" (@backingInt(number)),
8383 [arg1] "{ebx}" (arg1),
8484 [arg2] "{ecx}" (arg2),
8585 [arg3] "{edx}" (arg3),
......@@ -117,7 +117,7 @@ pub fn syscall6(
117117 \\ pop %%ebp
118118 \\ pop %%edi
119119 : [ret] "={eax}" (-> u32),
120 : [number] "{eax}" (@intFromEnum(number)),
120 : [number] "{eax}" (@backingInt(number)),
121121 [arg1] "{ebx}" (arg1),
122122 [arg2] "{ecx}" (arg2),
123123 [arg3] "{edx}" (arg3),
......@@ -129,7 +129,7 @@ pub fn syscall6(
129129pub fn socketcall(call: u32, args: [*]const u32) u32 {
130130 return asm volatile ("int $0x80"
131131 : [ret] "={eax}" (-> u32),
132 : [number] "{eax}" (@intFromEnum(SYS.socketcall)),
132 : [number] "{eax}" (@backingInt(SYS.socketcall)),
133133 [arg1] "{ebx}" (call),
134134 [arg2] "{ecx}" (@intFromPtr(args)),
135135 : .{ .memory = true });
......@@ -192,13 +192,13 @@ pub fn restore() callconv(.naked) noreturn {
192192 \\ movl %[number], %%eax
193193 \\ int $0x80
194194 :
195 : [number] "i" (@intFromEnum(SYS.sigreturn)),
195 : [number] "i" (@backingInt(SYS.sigreturn)),
196196 ),
197197 else => asm volatile (
198198 \\ addl $4, %%esp
199199 \\ int $0x80
200200 :
201 : [number] "{eax}" (@intFromEnum(SYS.sigreturn)),
201 : [number] "{eax}" (@backingInt(SYS.sigreturn)),
202202 ),
203203 }
204204}
......@@ -209,12 +209,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
209209 \\ movl %[number], %%eax
210210 \\ int $0x80
211211 :
212 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
212 : [number] "i" (@backingInt(SYS.rt_sigreturn)),
213213 ),
214214 else => asm volatile (
215215 \\ int $0x80
216216 :
217 : [number] "{eax}" (@intFromEnum(SYS.rt_sigreturn)),
217 : [number] "{eax}" (@backingInt(SYS.rt_sigreturn)),
218218 ),
219219 }
220220}
lib/std/os/linux/x86_64.zig+9-9
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u64 {
1010 return asm volatile ("syscall"
1111 : [ret] "={rax}" (-> u64),
12 : [number] "{rax}" (@intFromEnum(number)),
12 : [number] "{rax}" (@backingInt(number)),
1313 : .{ .rcx = true, .r11 = true, .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u64 {
2020 return asm volatile ("syscall"
2121 : [ret] "={rax}" (-> u64),
22 : [number] "{rax}" (@intFromEnum(number)),
22 : [number] "{rax}" (@backingInt(number)),
2323 [arg1] "{rdi}" (arg1),
2424 : .{ .rcx = true, .r11 = true, .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u64 {
3232 return asm volatile ("syscall"
3333 : [ret] "={rax}" (-> u64),
34 : [number] "{rax}" (@intFromEnum(number)),
34 : [number] "{rax}" (@backingInt(number)),
3535 [arg1] "{rdi}" (arg1),
3636 [arg2] "{rsi}" (arg2),
3737 : .{ .rcx = true, .r11 = true, .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u64 {
4646 return asm volatile ("syscall"
4747 : [ret] "={rax}" (-> u64),
48 : [number] "{rax}" (@intFromEnum(number)),
48 : [number] "{rax}" (@backingInt(number)),
4949 [arg1] "{rdi}" (arg1),
5050 [arg2] "{rsi}" (arg2),
5151 [arg3] "{rdx}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u64 {
6262 return asm volatile ("syscall"
6363 : [ret] "={rax}" (-> u64),
64 : [number] "{rax}" (@intFromEnum(number)),
64 : [number] "{rax}" (@backingInt(number)),
6565 [arg1] "{rdi}" (arg1),
6666 [arg2] "{rsi}" (arg2),
6767 [arg3] "{rdx}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u64 {
8080 return asm volatile ("syscall"
8181 : [ret] "={rax}" (-> u64),
82 : [number] "{rax}" (@intFromEnum(number)),
82 : [number] "{rax}" (@backingInt(number)),
8383 [arg1] "{rdi}" (arg1),
8484 [arg2] "{rsi}" (arg2),
8585 [arg3] "{rdx}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u64 {
100100 return asm volatile ("syscall"
101101 : [ret] "={rax}" (-> u64),
102 : [number] "{rax}" (@intFromEnum(number)),
102 : [number] "{rax}" (@backingInt(number)),
103103 [arg1] "{rdi}" (arg1),
104104 [arg2] "{rsi}" (arg2),
105105 [arg3] "{rdx}" (arg3),
......@@ -151,12 +151,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
151151 \\ movl %[number], %%eax
152152 \\ syscall
153153 :
154 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
154 : [number] "i" (@backingInt(SYS.rt_sigreturn)),
155155 ),
156156 else => asm volatile (
157157 \\ syscall
158158 :
159 : [number] "{rax}" (@intFromEnum(SYS.rt_sigreturn)),
159 : [number] "{rax}" (@backingInt(SYS.rt_sigreturn)),
160160 ),
161161 }
162162}
lib/std/os/linux/xtensa.zig+9-9
......@@ -9,7 +9,7 @@ pub fn syscall0(
99) u32 {
1010 return asm volatile ("syscall"
1111 : [ret] "={a2}" (-> u32),
12 : [number] "{a2}" (@intFromEnum(number)),
12 : [number] "{a2}" (@backingInt(number)),
1313 : .{ .memory = true });
1414}
1515
......@@ -19,7 +19,7 @@ pub fn syscall1(
1919) u32 {
2020 return asm volatile ("syscall"
2121 : [ret] "={a2}" (-> u32),
22 : [number] "{a2}" (@intFromEnum(number)),
22 : [number] "{a2}" (@backingInt(number)),
2323 [arg1] "{a6}" (arg1),
2424 : .{ .memory = true });
2525}
......@@ -31,7 +31,7 @@ pub fn syscall2(
3131) u32 {
3232 return asm volatile ("syscall"
3333 : [ret] "={a2}" (-> u32),
34 : [number] "{a2}" (@intFromEnum(number)),
34 : [number] "{a2}" (@backingInt(number)),
3535 [arg1] "{a6}" (arg1),
3636 [arg2] "{a3}" (arg2),
3737 : .{ .memory = true });
......@@ -45,7 +45,7 @@ pub fn syscall3(
4545) u32 {
4646 return asm volatile ("syscall"
4747 : [ret] "={a2}" (-> u32),
48 : [number] "{a2}" (@intFromEnum(number)),
48 : [number] "{a2}" (@backingInt(number)),
4949 [arg1] "{a6}" (arg1),
5050 [arg2] "{a3}" (arg2),
5151 [arg3] "{a4}" (arg3),
......@@ -61,7 +61,7 @@ pub fn syscall4(
6161) u32 {
6262 return asm volatile ("syscall"
6363 : [ret] "={a2}" (-> u32),
64 : [number] "{a2}" (@intFromEnum(number)),
64 : [number] "{a2}" (@backingInt(number)),
6565 [arg1] "{a6}" (arg1),
6666 [arg2] "{a3}" (arg2),
6767 [arg3] "{a4}" (arg3),
......@@ -79,7 +79,7 @@ pub fn syscall5(
7979) u32 {
8080 return asm volatile ("syscall"
8181 : [ret] "={a2}" (-> u32),
82 : [number] "{a2}" (@intFromEnum(number)),
82 : [number] "{a2}" (@backingInt(number)),
8383 [arg1] "{a6}" (arg1),
8484 [arg2] "{a3}" (arg2),
8585 [arg3] "{a4}" (arg3),
......@@ -99,7 +99,7 @@ pub fn syscall6(
9999) u32 {
100100 return asm volatile ("syscall"
101101 : [ret] "={a2}" (-> u32),
102 : [number] "{a2}" (@intFromEnum(number)),
102 : [number] "{a2}" (@backingInt(number)),
103103 [arg1] "{a6}" (arg1),
104104 [arg2] "{a3}" (arg2),
105105 [arg3] "{a4}" (arg3),
......@@ -178,12 +178,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
178178 \\ movi a2, %[number]
179179 \\ syscall
180180 :
181 : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
181 : [number] "I" (@backingInt(SYS.rt_sigreturn)),
182182 ),
183183 else => asm volatile (
184184 \\ syscall
185185 :
186 : [number] "{a2}" (@intFromEnum(SYS.rt_sigreturn)),
186 : [number] "{a2}" (@backingInt(SYS.rt_sigreturn)),
187187 ),
188188 }
189189}
lib/std/os/plan9.zig+1-1
......@@ -100,7 +100,7 @@ pub const E = enum(u16) {
100100pub fn errno(r: usize) E {
101101 const signed_r: isize = @bitCast(r);
102102 const int = if (signed_r > -4096 and signed_r < 0) -signed_r else 0;
103 return @enumFromInt(int);
103 return @fromBackingInt(@intCast(int));
104104}
105105
106106// The max bytes that can be in the errstr buff
lib/std/os/plan9/x86_64.zig+4-4
......@@ -10,7 +10,7 @@ pub fn syscall1(sys: plan9.SYS, arg0: usize) usize {
1010 \\pop %%r11
1111 : [ret] "={rax}" (-> usize),
1212 : [arg0] "{r8}" (arg0),
13 [syscall_number] "{rbp}" (@intFromEnum(sys)),
13 [syscall_number] "{rbp}" (@backingInt(sys)),
1414 : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
1515}
1616pub fn syscall2(sys: plan9.SYS, arg0: usize, arg1: usize) usize {
......@@ -25,7 +25,7 @@ pub fn syscall2(sys: plan9.SYS, arg0: usize, arg1: usize) usize {
2525 : [ret] "={rax}" (-> usize),
2626 : [arg0] "{r8}" (arg0),
2727 [arg1] "{r9}" (arg1),
28 [syscall_number] "{rbp}" (@intFromEnum(sys)),
28 [syscall_number] "{rbp}" (@backingInt(sys)),
2929 : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
3030}
3131pub fn syscall3(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize) usize {
......@@ -43,7 +43,7 @@ pub fn syscall3(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize) usize {
4343 : [arg0] "{r8}" (arg0),
4444 [arg1] "{r9}" (arg1),
4545 [arg2] "{r10}" (arg2),
46 [syscall_number] "{rbp}" (@intFromEnum(sys)),
46 [syscall_number] "{rbp}" (@backingInt(sys)),
4747 : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
4848}
4949pub fn syscall4(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize, arg3: usize) usize {
......@@ -64,6 +64,6 @@ pub fn syscall4(sys: plan9.SYS, arg0: usize, arg1: usize, arg2: usize, arg3: usi
6464 [arg1] "{r9}" (arg1),
6565 [arg2] "{r10}" (arg2),
6666 [arg3] "{r11}" (arg3),
67 [syscall_number] "{rbp}" (@intFromEnum(sys)),
67 [syscall_number] "{rbp}" (@backingInt(sys)),
6868 : .{ .rcx = true, .rax = true, .rbp = true, .r11 = true, .memory = true });
6969}
lib/std/os/uefi.zig+1-1
......@@ -181,7 +181,7 @@ pub const Time = extern struct {
181181 var days: u9 = 0;
182182 var month: u4 = 0;
183183 while (month < max_month) : (month += 1) {
184 days += std.time.epoch.getDaysInMonth(year, @enumFromInt(month + 1));
184 days += std.time.epoch.getDaysInMonth(year, @fromBackingInt(@intCast(month + 1)));
185185 }
186186 return days;
187187 }
lib/std/os/uefi/pool_allocator.zig+3-3
......@@ -117,7 +117,7 @@ fn uefi_alloc(
117117) ?[*]u8 {
118118 _ = ret_addr;
119119
120 std.debug.assert(@intFromEnum(alignment) <= 3);
120 std.debug.assert(@backingInt(alignment) <= 3);
121121
122122 const slice = uefi.system_table.boot_services.?.allocatePool(
123123 uefi.efi_pool_memory_type,
......@@ -136,7 +136,7 @@ fn uefi_resize(
136136) bool {
137137 _ = ret_addr;
138138
139 std.debug.assert(@intFromEnum(alignment) <= 3);
139 std.debug.assert(@backingInt(alignment) <= 3);
140140
141141 if (new_len > buf.len) return false;
142142 return true;
......@@ -151,7 +151,7 @@ fn uefi_remap(
151151) ?[*]u8 {
152152 _ = ret_addr;
153153
154 std.debug.assert(@intFromEnum(alignment) <= 3);
154 std.debug.assert(@backingInt(alignment) <= 3);
155155
156156 if (new_len > buf.len) return null;
157157 return buf.ptr;
lib/std/os/uefi/protocol/device_path.zig+2-2
......@@ -26,7 +26,7 @@ pub const DevicePath = extern struct {
2626
2727 /// Returns the next DevicePath node in the sequence, if any.
2828 pub fn next(self: *const DevicePath) ?*const DevicePath {
29 const subtype: uefi.DevicePath.End.Subtype = @enumFromInt(self.subtype);
29 const subtype: uefi.DevicePath.End.Subtype = @fromBackingInt(@intCast(self.subtype));
3030 if (self.type == .end and subtype == .end_entire) return null;
3131 const bytes: [*]const u8 = @ptrCast(self);
3232 return @ptrCast(bytes + self.length);
......@@ -106,7 +106,7 @@ pub const DevicePath = extern struct {
106106
107107 inline for (type_info.field_names, type_info.field_types) |subtype_name, subtype_type| {
108108 // The tag names match the union names, so just grab that off the enum
109 const tag_val: u8 = @intFromEnum(@field(TTag, subtype_name));
109 const tag_val: u8 = @backingInt(@field(TTag, subtype_name));
110110
111111 if (self.subtype == tag_val) {
112112 // e.g. expr = .{ .pci = @ptrCast(...) }
lib/std/os/uefi/tables.zig+14-14
......@@ -24,11 +24,11 @@ pub const TimerDelay = enum(u32) {
2424pub const MemoryType = enum(u32) {
2525 pub const Oem = math.IntFittingRange(
2626 0,
27 @intFromEnum(MemoryType.oem_end) - @intFromEnum(MemoryType.oem_start),
27 @backingInt(MemoryType.oem_end) - @backingInt(MemoryType.oem_start),
2828 );
2929 pub const Vendor = math.IntFittingRange(
3030 0,
31 @intFromEnum(MemoryType.vendor_end) - @intFromEnum(MemoryType.vendor_start),
31 @backingInt(MemoryType.vendor_end) - @backingInt(MemoryType.vendor_start),
3232 );
3333
3434 /// can only be allocated using .allocate_any_pages mode unless you are explicitly targeting an interface that states otherwise
......@@ -65,28 +65,28 @@ pub const MemoryType = enum(u32) {
6565 _,
6666
6767 pub fn fromOem(value: Oem) MemoryType {
68 const oem_start = @intFromEnum(MemoryType.oem_start);
69 return @enumFromInt(oem_start + value);
68 const oem_start = @backingInt(MemoryType.oem_start);
69 return @fromBackingInt(@intCast(oem_start + value));
7070 }
7171
7272 pub fn toOem(memtype: MemoryType) ?Oem {
73 const as_int = @intFromEnum(memtype);
74 const oem_start = @intFromEnum(MemoryType.oem_start);
73 const as_int = @backingInt(memtype);
74 const oem_start = @backingInt(MemoryType.oem_start);
7575 if (as_int < oem_start) return null;
76 if (as_int > @intFromEnum(MemoryType.oem_end)) return null;
76 if (as_int > @backingInt(MemoryType.oem_end)) return null;
7777 return @truncate(as_int - oem_start);
7878 }
7979
8080 pub fn fromVendor(value: Vendor) MemoryType {
81 const vendor_start = @intFromEnum(MemoryType.vendor_start);
82 return @enumFromInt(vendor_start + value);
81 const vendor_start = @backingInt(MemoryType.vendor_start);
82 return @fromBackingInt(@intCast(vendor_start + value));
8383 }
8484
8585 pub fn toVendor(memtype: MemoryType) ?Vendor {
86 const as_int = @intFromEnum(memtype);
87 const vendor_start = @intFromEnum(MemoryType.vendor_start);
88 if (as_int < @intFromEnum(MemoryType.vendor_end)) return null;
89 if (as_int > @intFromEnum(MemoryType.vendor_end)) return null;
86 const as_int = @backingInt(memtype);
87 const vendor_start = @backingInt(MemoryType.vendor_start);
88 if (as_int < @backingInt(MemoryType.vendor_end)) return null;
89 if (as_int > @backingInt(MemoryType.vendor_end)) return null;
9090 return @truncate(as_int - vendor_start);
9191 }
9292
......@@ -98,7 +98,7 @@ pub const MemoryType = enum(u32) {
9898 else if (std.enums.tagName(MemoryType, self)) |name|
9999 try w.print("{s}", .{name})
100100 else
101 try w.print("INVALID({X})", .{@intFromEnum(self)});
101 try w.print("INVALID({X})", .{@backingInt(self)});
102102 }
103103};
104104
lib/std/os/windows.zig+12-12
......@@ -77,7 +77,7 @@ pub const PS = struct {
7777 _,
7878
7979 pub fn construct(num: NUM, thread: bool, input: bool, additive: bool) ULONG_PTR {
80 var val: ULONG_PTR = @intFromEnum(num);
80 var val: ULONG_PTR = @backingInt(num);
8181 if (thread) val |= 0x10000;
8282 if (input) val |= 0x20000;
8383 if (additive) val |= 0x40000;
......@@ -739,7 +739,7 @@ pub const FILE = struct {
739739 SYNCHRONOUS_NONALERT = 0b10,
740740 _,
741741
742 pub const VALID_FLAGS: @This() = @enumFromInt(0b11);
742 pub const VALID_FLAGS: @This() = @fromBackingInt(@intCast(0b11));
743743 },
744744 /// The file being opened must not be a directory file or this call
745745 /// fails. The file object being opened can represent a data file, a
......@@ -1975,7 +1975,7 @@ pub const HEAP = opaque {
19751975 CSR_PORT,
19761976 _,
19771977
1978 pub const MASK: CLASS = @enumFromInt(maxInt(@typeInfo(CLASS).@"enum".tag_type));
1978 pub const MASK: CLASS = @fromBackingInt(@intCast(maxInt(@typeInfo(CLASS).@"enum".tag_type)));
19791979 };
19801980
19811981 pub const CREATE = packed struct(ULONG) {
......@@ -1990,7 +1990,7 @@ pub const HEAP = opaque {
19901990 /// Callers are therefore responsible for synchronizing access to hardened heaps.
19911991 HARDENED: bool = false,
19921992 Reserved10: u2 = 0,
1993 CLASS: CLASS = @enumFromInt(0),
1993 CLASS: CLASS = @fromBackingInt(@intCast(0)),
19941994 /// Create heap with 16 byte alignment (obsolete)
19951995 ALIGN_16: bool = false,
19961996 /// Create heap call tracing enabled (obsolete)
......@@ -2035,7 +2035,7 @@ pub const HEAP = opaque {
20352035 FLAG3: bool = false,
20362036 } = .{},
20372037 } = .{},
2038 CLASS: CLASS = @enumFromInt(0),
2038 CLASS: CLASS = @fromBackingInt(@intCast(0)),
20392039 Reserved16: u2 = 0,
20402040 TAG: u12 = 0,
20412041 Reserved30: u2 = 0,
......@@ -3945,7 +3945,7 @@ pub fn unexpectedError(err: Win32Error) UnexpectedError {
39453945pub fn unexpectedStatus(status: NTSTATUS) UnexpectedError {
39463946 if (std.options.unexpected_error_tracing) {
39473947 std.debug.print("error.Unexpected NTSTATUS=0x{x} ({s})\n", .{
3948 @intFromEnum(status),
3948 @backingInt(status),
39493949 std.enums.tagName(NTSTATUS, status) orelse "<unnamed>",
39503950 });
39513951 std.debug.dumpCurrentStackTrace(.{ .first_address = @returnAddress() });
......@@ -3956,7 +3956,7 @@ pub fn unexpectedStatus(status: NTSTATUS) UnexpectedError {
39563956pub fn statusBug(status: NTSTATUS) UnexpectedError {
39573957 switch (builtin.mode) {
39583958 .Debug => std.debug.panic("programmer bug caused syscall status: 0x{x} ({s})", .{
3959 @intFromEnum(status),
3959 @backingInt(status),
39603960 std.enums.tagName(NTSTATUS, status) orelse "<unnamed>",
39613961 }),
39623962 else => return error.Unexpected,
......@@ -3966,7 +3966,7 @@ pub fn statusBug(status: NTSTATUS) UnexpectedError {
39663966pub fn errorBug(err: Win32Error) UnexpectedError {
39673967 switch (builtin.mode) {
39683968 .Debug => std.debug.panic("programmer bug caused syscall error: 0x{x} ({s})", .{
3969 @intFromEnum(err),
3969 @backingInt(err),
39703970 std.enums.tagName(Win32Error, err) orelse "<unnamed>",
39713971 }),
39723972 else => return error.Unexpected,
......@@ -4091,7 +4091,7 @@ fn Bool(comptime BackingInteger: type) type {
40914091 _,
40924092
40934093 /// This is not the only truthy value, comparisons against this value are always a bug.
4094 pub const TRUE: @This() = @enumFromInt(1);
4094 pub const TRUE: @This() = @fromBackingInt(@intCast(1));
40954095
40964096 pub const Backing = BackingInteger;
40974097
......@@ -4100,7 +4100,7 @@ fn Bool(comptime BackingInteger: type) type {
41004100 }
41014101
41024102 pub fn fromBool(b: bool) @This() {
4103 return @enumFromInt(@intFromBool(b));
4103 return @fromBackingInt(@intCast(@intFromBool(b)));
41044104 }
41054105 };
41064106}
......@@ -5947,8 +5947,8 @@ pub const KUSER_SHARED_DATA = extern struct {
59475947pub const SharedUserData: *const KUSER_SHARED_DATA = @ptrFromInt(0x7FFE0000);
59485948
59495949pub fn IsProcessorFeaturePresent(feature: PF) bool {
5950 if (@intFromEnum(feature) >= PROCESSOR_FEATURE_MAX) return false;
5951 return SharedUserData.ProcessorFeatures[@intFromEnum(feature)].toBool();
5950 if (@backingInt(feature) >= PROCESSOR_FEATURE_MAX) return false;
5951 return SharedUserData.ProcessorFeatures[@backingInt(feature)].toBool();
59525952}
59535953
59545954// https://github.com/reactos/reactos/blob/master/sdk/include/ndk/pstypes.h#L977-L983
lib/std/os/windows/crypt32.zig+3-3
......@@ -73,7 +73,7 @@ pub const CERT_STORE = struct {
7373 _,
7474
7575 pub fn fromString(str: LPCSTR) PROV {
76 return @enumFromInt(@intFromPtr(str));
76 return @fromBackingInt(@intCast(@intFromPtr(str)));
7777 }
7878 };
7979
......@@ -159,7 +159,7 @@ pub const HCERTCHAINENGINE = enum(usize) {
159159 _,
160160
161161 pub fn fromHandle(handle: HANDLE) HCERTCHAINENGINE {
162 return @enumFromInt(@intFromPtr(handle));
162 return @fromBackingInt(@intCast(@intFromPtr(handle)));
163163 }
164164};
165165
......@@ -210,7 +210,7 @@ pub const CERT_CHAIN = packed struct(DWORD) {
210210 _,
211211
212212 pub fn fromString(str: LPCSTR) POLICY {
213 return @enumFromInt(@intFromPtr(str));
213 return @fromBackingInt(@intCast(@intFromPtr(str)));
214214 }
215215
216216 pub const PARA = extern struct {
lib/std/posix.zig+6-6
......@@ -651,7 +651,7 @@ pub fn mmap(
651651 const rc = mmap_sym(ptr, length, prot, @bitCast(flags), fd, @bitCast(offset));
652652 const err: E = if (builtin.link_libc) blk: {
653653 if (rc != std.c.MAP_FAILED) return @as([*]align(page_size_min) u8, @ptrCast(@alignCast(rc)))[0..length];
654 break :blk @enumFromInt(system._errno().*);
654 break :blk @fromBackingInt(@intCast(system._errno().*));
655655 } else blk: {
656656 const err = errno(rc);
657657 if (err == .SUCCESS) return @as([*]align(page_size_min) u8, @ptrFromInt(rc))[0..length];
......@@ -687,7 +687,7 @@ pub fn munmap(memory: []align(page_size_min) const u8) void {
687687 .INVAL => unreachable, // Invalid parameters.
688688 .NOMEM => unreachable, // Attempted to unmap a region in the middle of an existing mapping.
689689 else => |e| if (std.options.unexpected_error_tracing) {
690 std.debug.panic("unexpected errno: {d} ({t})", .{ @intFromEnum(e), e });
690 std.debug.panic("unexpected errno: {d} ({t})", .{ @backingInt(e), e });
691691 } else unreachable,
692692 }
693693}
......@@ -710,7 +710,7 @@ pub fn mremap(
710710 const rc = system.mremap(old_address, old_len, new_len, flags, new_address);
711711 const err: E = if (builtin.link_libc) blk: {
712712 if (rc != std.c.MAP_FAILED) return @as([*]align(page_size_min) u8, @ptrCast(@alignCast(rc)))[0..new_len];
713 break :blk @enumFromInt(system._errno().*);
713 break :blk @fromBackingInt(@intCast(system._errno().*));
714714 } else blk: {
715715 const err = errno(rc);
716716 if (err == .SUCCESS) return @as([*]align(page_size_min) u8, @ptrFromInt(rc))[0..new_len];
......@@ -1299,7 +1299,7 @@ pub fn prctl(option: PR, args: anytype) PrctlError!u31 {
12991299 inline while (i < args.len) : (i += 1) buf[i] = args[i];
13001300 }
13011301
1302 const rc = system.prctl(@intFromEnum(option), buf[0], buf[1], buf[2], buf[3]);
1302 const rc = system.prctl(@backingInt(option), buf[0], buf[1], buf[2], buf[3]);
13031303 switch (errno(rc)) {
13041304 .SUCCESS => return @intCast(rc),
13051305 .ACCES => return error.AccessDenied,
......@@ -1545,7 +1545,7 @@ pub fn ptrace(request: u32, pid: pid_t, addr: usize, data: usize) PtraceError!vo
15451545 },
15461546
15471547 .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => switch (errno(std.c.ptrace(
1548 @enumFromInt(request),
1548 @fromBackingInt(@intCast(request)),
15491549 pid,
15501550 @ptrFromInt(addr),
15511551 @intCast(data),
......@@ -1668,7 +1668,7 @@ pub const UnexpectedError = std.Io.UnexpectedError;
16681668/// and you get an unexpected error.
16691669pub fn unexpectedErrno(err: E) UnexpectedError {
16701670 if (std.options.unexpected_error_tracing) {
1671 std.debug.print("unexpected errno: {d}\n", .{@intFromEnum(err)});
1671 std.debug.print("unexpected errno: {d}\n", .{@backingInt(err)});
16721672 std.debug.dumpCurrentStackTrace(.{});
16731673 }
16741674 return error.Unexpected;
lib/std/posix/test.zig+1-1
......@@ -333,7 +333,7 @@ test "getrlimit and setrlimit" {
333333 if (posix.system.rlimit_resource == void) return error.SkipZigTest;
334334
335335 inline for (@typeInfo(posix.rlimit_resource).@"enum".field_values) |field_value| {
336 const resource: posix.rlimit_resource = @enumFromInt(field_value);
336 const resource: posix.rlimit_resource = @fromBackingInt(@intCast(field_value));
337337 const limit = try posix.getrlimit(resource);
338338
339339 // XNU kernel does not support RLIMIT_STACK if a custom stack is active,
lib/std/process.zig+2-2
......@@ -875,10 +875,10 @@ pub fn exit(status: u8) noreturn {
875875 // exit() is only available if exitBootServices() has not been called yet.
876876 // This call to exit should not fail, so we catch-ignore errors.
877877 if (uefi.system_table.boot_services) |bs| {
878 bs.exit(uefi.handle, @enumFromInt(status), null) catch {};
878 bs.exit(uefi.handle, @fromBackingInt(@intCast(status)), null) catch {};
879879 }
880880 // If we can't exit, reboot the system instead.
881 uefi.system_table.runtime_services.resetSystem(.cold, @enumFromInt(status), null);
881 uefi.system_table.runtime_services.resetSystem(.cold, @fromBackingInt(@intCast(status)), null);
882882 },
883883 else => posix.system.exit(status),
884884 }
lib/std/simd.zig+1-1
......@@ -90,7 +90,7 @@ pub fn suggestVectorLength(comptime T: type) ?comptime_int {
9090
9191test "suggestVectorLengthForCpu works with signed and unsigned values" {
9292 comptime var cpu = std.Target.Cpu.baseline(std.Target.Cpu.Arch.x86_64, builtin.os);
93 comptime cpu.features.addFeature(@intFromEnum(std.Target.x86.Feature.avx512f));
93 comptime cpu.features.addFeature(@backingInt(std.Target.x86.Feature.avx512f));
9494 comptime cpu.features.populateDependencies(&std.Target.x86.all_features);
9595 const expected_len: usize = switch (builtin.zig_backend) {
9696 .stage2_x86_64 => 8,
lib/std/spirv.zig+3-3
......@@ -60,8 +60,8 @@ pub fn controlBarrier(
6060 asm volatile (
6161 \\OpControlBarrier %exec %mem %sem
6262 :
63 : [exec] "" (@as(u32, @intFromEnum(execution))),
64 [mem] "" (@as(u32, @intFromEnum(memory))),
63 : [exec] "" (@as(u32, @backingInt(execution))),
64 [mem] "" (@as(u32, @backingInt(memory))),
6565 [sem] "" (@as(u32, @bitCast(semantics))),
6666 );
6767}
......@@ -70,7 +70,7 @@ pub fn memoryBarrier(comptime memory: Scope, comptime semantics: MemorySemantics
7070 asm volatile (
7171 \\OpMemoryBarrier %mem %sem
7272 :
73 : [mem] "" (@as(u32, @intFromEnum(memory))),
73 : [mem] "" (@as(u32, @backingInt(memory))),
7474 [sem] "" (@as(u32, @bitCast(semantics))),
7575 );
7676}
lib/std/start.zig+2-2
......@@ -141,14 +141,14 @@ fn EfiMain(handle: uefi.Handle, system_table: *uefi.tables.SystemTable) callconv
141141 return 0;
142142 },
143143 uefi.Status => {
144 return @intFromEnum(root.main());
144 return @backingInt(root.main());
145145 },
146146 uefi.Error!void => {
147147 root.main() catch |err| switch (err) {
148148 error.Unexpected => @panic("EfiMain: unexpected error"),
149149 else => {
150150 const status = uefi.Status.fromError(@errorCast(err));
151 return @intFromEnum(status);
151 return @backingInt(status);
152152 },
153153 };
154154
lib/std/static_string_map.zig+1-1
......@@ -117,7 +117,7 @@ pub fn StaticStringMapWithEql(
117117
118118 var sorted_keys: [field_names.len][]const u8 = field_names[0..field_names.len].*;
119119 var sorted_vals: [field_names.len]V = undefined;
120 for (&sorted_vals, @typeInfo(V).@"enum".field_values) |*x, i| x.* = @enumFromInt(i);
120 for (&sorted_vals, @typeInfo(V).@"enum".field_values) |*x, i| x.* = @fromBackingInt(@intCast(i));
121121
122122 for (field_names) |field_name| {
123123 self.min_len = @min(self.min_len, field_name.len);
lib/std/tar.zig+1-1
......@@ -241,7 +241,7 @@ const Header = struct {
241241 }
242242
243243 pub fn kind(header: Header) Kind {
244 const result: Kind = @enumFromInt(header.bytes[156]);
244 const result: Kind = @fromBackingInt(@intCast(header.bytes[156]));
245245 if (result == .normal_alias) return .normal;
246246 return result;
247247 }
lib/std/testing/Smith.zig+9-9
......@@ -169,7 +169,7 @@ test baselineWeights {
169169fn valueFromInt(T: anytype, int: Backing(T)) T {
170170 @disableInstrumentation();
171171 return switch (@typeInfo(T)) {
172 .@"enum" => @enumFromInt(int),
172 .@"enum" => @fromBackingInt(@intCast(int)),
173173 else => @bitCast(int),
174174 };
175175}
......@@ -369,7 +369,7 @@ fn UnionTagWithoutUninitializable(T: type) type {
369369 else => {},
370370 }
371371 field_names[n_fields] = f_name;
372 field_values[n_fields] = @intFromEnum(@field(Tag, f_name));
372 field_values[n_fields] = @backingInt(@field(Tag, f_name));
373373 n_fields += 1;
374374 }
375375 return @Enum(e.tag_type, .exhaustive, field_names[0..n_fields], field_values[0..n_fields]);
......@@ -400,8 +400,8 @@ pub fn valueWithHash(s: *Smith, T: type, hash: u32) T {
400400 break :v s.valueWeightedWithHash(T, baselineWeights(T), hash);
401401 }
402402 break :v std.enums.fromInt(T, s.valueWithHash(e.tag_type, hash)) orelse
403 @enumFromInt(e.field_values[0]);
404 } else @enumFromInt(s.valueWithHash(e.tag_type, hash)),
403 @fromBackingInt(@intCast(e.field_values[0]));
404 } else @fromBackingInt(@intCast(s.valueWithHash(e.tag_type, hash))),
405405 .optional => |o| if (s.valueWithHash(bool, hash))
406406 null
407407 else
......@@ -718,7 +718,7 @@ test value {
718718 io: u128 = (1 << 80) | (1 << 23),
719719 fd: f64 = std.math.pi,
720720 ft: f80 = std.math.e,
721 eh: enum(u16) { a, _ } = @enumFromInt(999),
721 eh: enum(u16) { a, _ } = @fromBackingInt(@intCast(999)),
722722 eo: enum(u128) { a, b, _ } = .b,
723723 aw: [3]u32 = .{ 1 << 30, 1 << 20, 1 << 10 },
724724 vw: @Vector(3, u32) = .{ 1 << 10, 1 << 20, 1 << 30 },
......@@ -747,7 +747,7 @@ test value {
747747 };
748748 const s: S = .{};
749749 const ft_bits: u80 = @bitCast(s.ft);
750 const eo_bits = @intFromEnum(s.eo);
750 const eo_bits = @backingInt(s.eo);
751751
752752 var smith: Smith = .{
753753 .in = constructInput(&.{
......@@ -758,7 +758,7 @@ test value {
758758 .{ .int = @truncate(s.io) }, .{ .int = @intCast(s.io >> 64) }, // io
759759 .{ .int = @bitCast(s.fd) }, // fd
760760 .{ .int = @truncate(ft_bits) }, .{ .int = @intCast(ft_bits >> 64) }, // ft
761 .{ .int = @intFromEnum(s.eh) }, // eh
761 .{ .int = @backingInt(s.eh) }, // eh
762762 .{ .int = @truncate(eo_bits) }, .{ .int = @intCast(eo_bits >> 64) }, // eo
763763 .{ .int = s.aw[0] }, .{ .int = s.aw[1] }, .{ .int = s.aw[2] }, // aw
764764 .{ .int = s.vw[0] }, .{ .int = s.vw[1] }, .{ .int = s.vw[2] }, // vw
......@@ -767,8 +767,8 @@ test value {
767767 .{ .int = s.s.q }, // s.q
768768 //sz
769769 .{ .int = @as(u8, @bitCast(s.sp)) }, // sp
770 .{ .int = s.si.a }, .{ .int = @intFromEnum(s.si.b) }, // si
771 .{ .int = @intFromEnum(s.u) }, .{ .int = s.u.b }, // u
770 .{ .int = s.si.a }, .{ .int = @backingInt(s.si.b) }, // si
771 .{ .int = @backingInt(s.u) }, .{ .int = s.u.b }, // u
772772 .{ .int = @as(u16, @bitCast(s.up)) }, // up
773773 // invalid values
774774 .{ .int = 555 }, // invalid.ib
lib/std/time/epoch.zig+2-2
......@@ -81,7 +81,7 @@ pub const Month = enum(u4) {
8181 /// return the numeric calendar value for the given month
8282 /// i.e. jan=1, feb=2, etc
8383 pub fn numeric(self: Month) u4 {
84 return @intFromEnum(self);
84 return @backingInt(self);
8585 }
8686};
8787
......@@ -119,7 +119,7 @@ pub const YearAndDay = struct {
119119 if (days_left < days_in_month)
120120 break;
121121 days_left -= days_in_month;
122 month = @as(Month, @enumFromInt(@intFromEnum(month) + 1));
122 month = @as(Month, @fromBackingInt(@intCast(@backingInt(month) + 1)));
123123 }
124124 return .{ .month = month, .day_index = @as(u5, @intCast(days_left)) };
125125 }
lib/std/valgrind.zig+1-1
......@@ -144,7 +144,7 @@ pub fn IsTool(base: [2]u8, code: usize) bool {
144144}
145145
146146fn doClientRequestExpr(default: usize, request: ClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) usize {
147 return doClientRequest(default, @as(usize, @intCast(@intFromEnum(request))), a1, a2, a3, a4, a5);
147 return doClientRequest(default, @as(usize, @intCast(@backingInt(request))), a1, a2, a3, a4, a5);
148148}
149149
150150fn doClientRequestStmt(request: ClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) void {
lib/std/valgrind/cachegrind.zig+1-1
......@@ -7,7 +7,7 @@ pub const ClientRequest = enum(usize) {
77};
88
99fn doClientRequestExpr(default: usize, request: ClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) usize {
10 return valgrind.doClientRequest(default, @as(usize, @intCast(@intFromEnum(request))), a1, a2, a3, a4, a5);
10 return valgrind.doClientRequest(default, @as(usize, @intCast(@backingInt(request))), a1, a2, a3, a4, a5);
1111}
1212
1313fn doClientRequestStmt(request: ClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) void {
lib/std/valgrind/callgrind.zig+1-1
......@@ -11,7 +11,7 @@ pub const ClientRequest = enum(usize) {
1111};
1212
1313fn doClientRequestExpr(default: usize, request: ClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) usize {
14 return valgrind.doClientRequest(default, @as(usize, @intCast(@intFromEnum(request))), a1, a2, a3, a4, a5);
14 return valgrind.doClientRequest(default, @as(usize, @intCast(@backingInt(request))), a1, a2, a3, a4, a5);
1515}
1616
1717fn doClientRequestStmt(request: ClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) void {
lib/std/valgrind/memcheck.zig+1-1
......@@ -21,7 +21,7 @@ pub const ClientRequest = enum(usize) {
2121};
2222
2323fn doClientRequestExpr(default: usize, request: ClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) usize {
24 return valgrind.doClientRequest(default, @as(usize, @intCast(@intFromEnum(request))), a1, a2, a3, a4, a5);
24 return valgrind.doClientRequest(default, @as(usize, @intCast(@backingInt(request))), a1, a2, a3, a4, a5);
2525}
2626
2727fn doClientRequestStmt(request: ClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) void {
lib/std/wasm.zig+1-1
......@@ -664,7 +664,7 @@ pub const BlockType = enum(u8) {
664664 v128 = 0x7B,
665665
666666 pub fn fromValtype(valtype: Valtype) BlockType {
667 return @enumFromInt(@intFromEnum(valtype));
667 return @fromBackingInt(@intCast(@backingInt(valtype)));
668668 }
669669};
670670
lib/std/zig.zig+2-2
......@@ -1764,12 +1764,12 @@ pub fn buildExeSubprocess(
17641764 received_fs_inputs = true;
17651765 var it = mem.splitScalar(u8, body, 0);
17661766 while (it.next()) |prefixed_path| {
1767 const prefix: Server.Message.PathPrefix = @enumFromInt(prefixed_path[0] - 1);
1767 const prefix: Server.Message.PathPrefix = @fromBackingInt(@intCast(prefixed_path[0] - 1));
17681768 const sub_path = try gpa.dupe(u8, prefixed_path[1..]);
17691769 var keep = false;
17701770 defer if (!keep) gpa.free(sub_path);
17711771 keep = man.addPrefixedPathPost(.{
1772 .prefix = @intFromEnum(prefix),
1772 .prefix = @backingInt(prefix),
17731773 .sub_path = sub_path,
17741774 }) catch |err| switch (err) {
17751775 error.Canceled, error.OutOfMemory => |e| return e,
lib/std/zig/Ast.zig+40-40
......@@ -41,15 +41,15 @@ pub const OptionalTokenIndex = enum(u32) {
4141 _,
4242
4343 pub fn unwrap(oti: OptionalTokenIndex) ?TokenIndex {
44 return if (oti == .none) null else @intFromEnum(oti);
44 return if (oti == .none) null else @backingInt(oti);
4545 }
4646
4747 pub fn fromToken(ti: TokenIndex) OptionalTokenIndex {
48 return @enumFromInt(ti);
48 return @fromBackingInt(@intCast(ti));
4949 }
5050
5151 pub fn fromOptional(oti: ?TokenIndex) OptionalTokenIndex {
52 return if (oti) |ti| @enumFromInt(ti) else .none;
52 return if (oti) |ti| @fromBackingInt(@intCast(ti)) else .none;
5353 }
5454};
5555
......@@ -61,17 +61,17 @@ pub const TokenOffset = enum(i32) {
6161 pub fn init(base: TokenIndex, destination: TokenIndex) TokenOffset {
6262 const base_i64: i64 = base;
6363 const destination_i64: i64 = destination;
64 return @enumFromInt(destination_i64 - base_i64);
64 return @fromBackingInt(@intCast(destination_i64 - base_i64));
6565 }
6666
6767 pub fn toOptional(to: TokenOffset) OptionalTokenOffset {
68 const result: OptionalTokenOffset = @enumFromInt(@intFromEnum(to));
68 const result: OptionalTokenOffset = @fromBackingInt(@intCast(@backingInt(to)));
6969 assert(result != .none);
7070 return result;
7171 }
7272
7373 pub fn toAbsolute(offset: TokenOffset, base: TokenIndex) TokenIndex {
74 return @intCast(@as(i64, base) + @intFromEnum(offset));
74 return @intCast(@as(i64, base) + @backingInt(offset));
7575 }
7676};
7777
......@@ -81,7 +81,7 @@ pub const OptionalTokenOffset = enum(i32) {
8181 _,
8282
8383 pub fn unwrap(oto: OptionalTokenOffset) ?TokenOffset {
84 return if (oto == .none) null else @enumFromInt(@intFromEnum(oto));
84 return if (oto == .none) null else @fromBackingInt(@intCast(@backingInt(oto)));
8585 }
8686};
8787
......@@ -94,15 +94,15 @@ pub fn tokenStart(tree: *const Ast, token_index: TokenIndex) ByteOffset {
9494}
9595
9696pub fn nodeTag(tree: *const Ast, node: Node.Index) Node.Tag {
97 return tree.nodes.items(.tag)[@intFromEnum(node)];
97 return tree.nodes.items(.tag)[@backingInt(node)];
9898}
9999
100100pub fn nodeMainToken(tree: *const Ast, node: Node.Index) TokenIndex {
101 return tree.nodes.items(.main_token)[@intFromEnum(node)];
101 return tree.nodes.items(.main_token)[@backingInt(node)];
102102}
103103
104104pub fn nodeData(tree: *const Ast, node: Node.Index) Node.Data {
105 return tree.nodes.items(.data)[@intFromEnum(node)];
105 return tree.nodes.items(.data)[@backingInt(node)];
106106}
107107
108108pub fn isTokenPrecededByTags(
......@@ -295,11 +295,11 @@ pub fn tokenSlice(tree: Ast, token_index: TokenIndex) []const u8 {
295295}
296296
297297pub fn extraDataSlice(tree: Ast, range: Node.SubRange, comptime T: type) []const T {
298 return @ptrCast(tree.extra_data[@intFromEnum(range.start)..@intFromEnum(range.end)]);
298 return @ptrCast(tree.extra_data[@backingInt(range.start)..@backingInt(range.end)]);
299299}
300300
301301pub fn extraDataSliceWithLen(tree: Ast, start: ExtraIndex, len: u32, comptime T: type) []const T {
302 return @ptrCast(tree.extra_data[@intFromEnum(start)..][0..len]);
302 return @ptrCast(tree.extra_data[@backingInt(start)..][0..len]);
303303}
304304
305305pub fn extraData(tree: Ast, index: ExtraIndex, comptime T: type) T {
......@@ -311,8 +311,8 @@ pub fn extraData(tree: Ast, index: ExtraIndex, comptime T: type) T {
311311 Node.OptionalIndex,
312312 OptionalTokenIndex,
313313 ExtraIndex,
314 => @enumFromInt(tree.extra_data[@intFromEnum(index) + i]),
315 TokenIndex => tree.extra_data[@intFromEnum(index) + i],
314 => @fromBackingInt(@intCast(tree.extra_data[@backingInt(index) + i])),
315 TokenIndex => tree.extra_data[@backingInt(index) + i],
316316 else => @compileError("unexpected field type: " ++ @typeName(field_type)),
317317 };
318318 }
......@@ -330,7 +330,7 @@ pub fn rootDecls(tree: Ast) []const Node.Index {
330330 switch (tree.mode) {
331331 .zig => return tree.extraDataSlice(tree.nodeData(.root).extra_range, Node.Index),
332332 // Ensure that the returned slice points into the existing memory of the Ast
333 .zon => return (&tree.nodes.items(.data)[@intFromEnum(Node.Index.root)].node)[0..1],
333 .zon => return (&tree.nodes.items(.data)[@backingInt(Node.Index.root)].node)[0..1],
334334 }
335335}
336336
......@@ -994,7 +994,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
994994 const params = tree.extraData(extra_index, Node.SubRange);
995995 assert(params.start != params.end);
996996 end_offset += 1; // for the rparen
997 n = @enumFromInt(tree.extra_data[@intFromEnum(params.end) - 1]); // last parameter
997 n = @fromBackingInt(@intCast(tree.extra_data[@backingInt(params.end) - 1])); // last parameter
998998 },
999999 .tagged_union_enum_tag => {
10001000 const arg, const extra_index = tree.nodeData(n).node_and_extra;
......@@ -1004,7 +1004,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
10041004 n = arg;
10051005 } else {
10061006 end_offset += 1; // for the rbrace
1007 n = @enumFromInt(tree.extra_data[@intFromEnum(members.end) - 1]); // last parameter
1007 n = @fromBackingInt(@intCast(tree.extra_data[@backingInt(members.end) - 1])); // last parameter
10081008 }
10091009 },
10101010 .call_comma,
......@@ -1014,7 +1014,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
10141014 const params = tree.extraData(extra_index, Node.SubRange);
10151015 assert(params.start != params.end);
10161016 end_offset += 2; // for the comma/semicolon + rparen/rbrace
1017 n = @enumFromInt(tree.extra_data[@intFromEnum(params.end) - 1]); // last parameter
1017 n = @fromBackingInt(@intCast(tree.extra_data[@backingInt(params.end) - 1])); // last parameter
10181018 },
10191019 .@"switch" => {
10201020 const condition, const extra_index = tree.nodeData(n).node_and_extra;
......@@ -1024,7 +1024,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
10241024 n = condition;
10251025 } else {
10261026 end_offset += 1; // for the rbrace
1027 n = @enumFromInt(tree.extra_data[@intFromEnum(cases.end) - 1]); // last case
1027 n = @fromBackingInt(@intCast(tree.extra_data[@backingInt(cases.end) - 1])); // last case
10281028 }
10291029 },
10301030 .container_decl_arg => {
......@@ -1035,7 +1035,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
10351035 n = arg;
10361036 } else {
10371037 end_offset += 1; // for the rbrace
1038 n = @enumFromInt(tree.extra_data[@intFromEnum(members.end) - 1]); // last parameter
1038 n = @fromBackingInt(@intCast(tree.extra_data[@backingInt(members.end) - 1])); // last parameter
10391039 }
10401040 },
10411041 .@"asm" => {
......@@ -1050,7 +1050,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
10501050 const elements = tree.extraData(extra_index, Node.SubRange);
10511051 assert(elements.start != elements.end);
10521052 end_offset += 1; // for the rbrace
1053 n = @enumFromInt(tree.extra_data[@intFromEnum(elements.end) - 1]); // last element
1053 n = @fromBackingInt(@intCast(tree.extra_data[@backingInt(elements.end) - 1])); // last element
10541054 },
10551055 .array_init_comma,
10561056 .struct_init_comma,
......@@ -1061,7 +1061,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
10611061 const members = tree.extraData(extra_index, Node.SubRange);
10621062 assert(members.start != members.end);
10631063 end_offset += 2; // for the comma + rbrace
1064 n = @enumFromInt(tree.extra_data[@intFromEnum(members.end) - 1]); // last parameter
1064 n = @fromBackingInt(@intCast(tree.extra_data[@backingInt(members.end) - 1])); // last parameter
10651065 },
10661066 .array_init_dot,
10671067 .struct_init_dot,
......@@ -1073,7 +1073,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
10731073 const range = tree.nodeData(n).extra_range;
10741074 assert(range.start != range.end);
10751075 end_offset += 1; // for the rbrace
1076 n = @enumFromInt(tree.extra_data[@intFromEnum(range.end) - 1]); // last statement
1076 n = @fromBackingInt(@intCast(tree.extra_data[@backingInt(range.end) - 1])); // last statement
10771077 },
10781078 .array_init_dot_comma,
10791079 .struct_init_dot_comma,
......@@ -1085,7 +1085,7 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
10851085 const range = tree.nodeData(n).extra_range;
10861086 assert(range.start != range.end);
10871087 end_offset += 2; // for the comma/semicolon + rbrace/rparen
1088 n = @enumFromInt(tree.extra_data[@intFromEnum(range.end) - 1]); // last member
1088 n = @fromBackingInt(@intCast(tree.extra_data[@backingInt(range.end) - 1])); // last member
10891089 },
10901090 .call_one,
10911091 => {
......@@ -1285,8 +1285,8 @@ pub fn lastToken(tree: Ast, node: Node.Index) TokenIndex {
12851285 },
12861286 .@"for" => {
12871287 const extra_index, const extra = tree.nodeData(n).@"for";
1288 const index = @intFromEnum(extra_index) + extra.inputs + @intFromBool(extra.has_else);
1289 n = @enumFromInt(tree.extra_data[index]);
1288 const index = @backingInt(extra_index) + extra.inputs + @intFromBool(extra.has_else);
1289 n = @fromBackingInt(@intCast(tree.extra_data[index]));
12901290 },
12911291 .array_type_sentinel => {
12921292 _, const extra_index = tree.nodeData(n).node_and_extra;
......@@ -1365,9 +1365,9 @@ pub fn alignedVarDecl(tree: Ast, node: Node.Index) full.VarDecl {
13651365
13661366pub fn assignDestructure(tree: Ast, node: Node.Index) full.AssignDestructure {
13671367 const extra_index, const value_expr = tree.nodeData(node).extra_and_node;
1368 const variable_count = tree.extra_data[@intFromEnum(extra_index)];
1368 const variable_count = tree.extra_data[@backingInt(extra_index)];
13691369 return tree.fullAssignDestructureComponents(.{
1370 .variables = tree.extraDataSliceWithLen(@enumFromInt(@intFromEnum(extra_index) + 1), variable_count, Node.Index),
1370 .variables = tree.extraDataSliceWithLen(@fromBackingInt(@intCast(@backingInt(extra_index) + 1)), variable_count, Node.Index),
13711371 .equal_token = tree.nodeMainToken(node),
13721372 .value_expr = value_expr,
13731373 });
......@@ -1856,7 +1856,7 @@ pub fn switchCaseOne(tree: Ast, node: Node.Index) full.SwitchCase {
18561856 &.{}
18571857 else
18581858 // Ensure that the returned slice points into the existing memory of the Ast
1859 (@as(*const Node.Index, @ptrCast(&tree.nodes.items(.data)[@intFromEnum(node)].opt_node_and_node[0])))[0..1],
1859 (@as(*const Node.Index, @ptrCast(&tree.nodes.items(.data)[@backingInt(node)].opt_node_and_node[0])))[0..1],
18601860 .arrow_token = tree.nodeMainToken(node),
18611861 .target_expr = target_expr,
18621862 }, node);
......@@ -1932,7 +1932,7 @@ pub fn whileFull(tree: Ast, node: Node.Index) full.While {
19321932}
19331933
19341934pub fn forSimple(tree: Ast, node: Node.Index) full.For {
1935 const data = &tree.nodes.items(.data)[@intFromEnum(node)].node_and_node;
1935 const data = &tree.nodes.items(.data)[@backingInt(node)].node_and_node;
19361936 return tree.fullForComponents(.{
19371937 .for_token = tree.nodeMainToken(node),
19381938 .inputs = (&data[0])[0..1],
......@@ -1944,8 +1944,8 @@ pub fn forSimple(tree: Ast, node: Node.Index) full.For {
19441944pub fn forFull(tree: Ast, node: Node.Index) full.For {
19451945 const extra_index, const extra = tree.nodeData(node).@"for";
19461946 const inputs = tree.extraDataSliceWithLen(extra_index, extra.inputs, Node.Index);
1947 const then_expr: Node.Index = @enumFromInt(tree.extra_data[@intFromEnum(extra_index) + extra.inputs]);
1948 const else_expr: Node.OptionalIndex = if (extra.has_else) @enumFromInt(tree.extra_data[@intFromEnum(extra_index) + extra.inputs + 1]) else .none;
1947 const then_expr: Node.Index = @fromBackingInt(@intCast(tree.extra_data[@backingInt(extra_index) + extra.inputs]));
1948 const else_expr: Node.OptionalIndex = if (extra.has_else) @fromBackingInt(@intCast(tree.extra_data[@backingInt(extra_index) + extra.inputs + 1])) else .none;
19491949 return tree.fullForComponents(.{
19501950 .for_token = tree.nodeMainToken(node),
19511951 .inputs = inputs,
......@@ -2922,15 +2922,15 @@ pub const Node = struct {
29222922 _,
29232923
29242924 pub fn toOptional(i: Index) OptionalIndex {
2925 const result: OptionalIndex = @enumFromInt(@intFromEnum(i));
2925 const result: OptionalIndex = @fromBackingInt(@intCast(@backingInt(i)));
29262926 assert(result != .none);
29272927 return result;
29282928 }
29292929
29302930 pub fn toOffset(base: Index, destination: Index) Offset {
2931 const base_i64: i64 = @intFromEnum(base);
2932 const destination_i64: i64 = @intFromEnum(destination);
2933 return @enumFromInt(destination_i64 - base_i64);
2931 const base_i64: i64 = @backingInt(base);
2932 const destination_i64: i64 = @backingInt(destination);
2933 return @fromBackingInt(@intCast(destination_i64 - base_i64));
29342934 }
29352935 };
29362936
......@@ -2941,7 +2941,7 @@ pub const Node = struct {
29412941 _,
29422942
29432943 pub fn unwrap(oi: OptionalIndex) ?Index {
2944 return if (oi == .none) null else @enumFromInt(@intFromEnum(oi));
2944 return if (oi == .none) null else @fromBackingInt(@intCast(@backingInt(oi)));
29452945 }
29462946
29472947 pub fn fromOptional(oi: ?Index) OptionalIndex {
......@@ -2955,13 +2955,13 @@ pub const Node = struct {
29552955 _,
29562956
29572957 pub fn toOptional(o: Offset) OptionalOffset {
2958 const result: OptionalOffset = @enumFromInt(@intFromEnum(o));
2958 const result: OptionalOffset = @fromBackingInt(@intCast(@backingInt(o)));
29592959 assert(result != .none);
29602960 return result;
29612961 }
29622962
29632963 pub fn toAbsolute(offset: Offset, base: Index) Index {
2964 return @enumFromInt(@as(i64, @intFromEnum(base)) + @intFromEnum(offset));
2964 return @fromBackingInt(@intCast(@as(i64, @backingInt(base)) + @backingInt(offset)));
29652965 }
29662966 };
29672967
......@@ -2971,7 +2971,7 @@ pub const Node = struct {
29712971 _,
29722972
29732973 pub fn unwrap(oo: OptionalOffset) ?Offset {
2974 return if (oo == .none) null else @enumFromInt(@intFromEnum(oo));
2974 return if (oo == .none) null else @fromBackingInt(@intCast(@backingInt(oo)));
29752975 }
29762976 };
29772977
lib/std/zig/Ast/Render.zig+3-3
......@@ -2191,7 +2191,7 @@ fn renderArrayInit(
21912191 width.* = for (w) |c| {
21922192 if (!std.ascii.isPrint(c))
21932193 break .nonprint;
2194 } else @enumFromInt(w.len - @intFromBool(w[w.len - 1] == ','));
2194 } else @fromBackingInt(@intCast(w.len - @intFromBool(w[w.len - 1] == ',')));
21952195 } else {
21962196 width.* = .nonprint;
21972197 }
......@@ -2264,7 +2264,7 @@ fn renderArrayInit(
22642264 col = 0;
22652265 continue;
22662266 }
2267 col_widths[col] = @max(col_widths[col], @intFromEnum(w));
2267 col_widths[col] = @max(col_widths[col], @backingInt(w));
22682268 col += 1;
22692269 if (col == row_size) {
22702270 col = 0;
......@@ -2284,7 +2284,7 @@ fn renderArrayInit(
22842284 }
22852285 } else {
22862286 try renderExpression(r, e, .comma_space);
2287 try ais.splatByteAll(' ', col_widths[col] - @intFromEnum(w));
2287 try ais.splatByteAll(' ', col_widths[col] - @backingInt(w));
22882288 col += 1;
22892289 }
22902290 }
lib/std/zig/AstGen.zig+233-233
......@@ -103,13 +103,13 @@ fn setExtra(astgen: *AstGen, index: usize, extra: anytype) void {
103103 Ast.OptionalTokenIndex,
104104 Ast.Node.Index,
105105 Ast.Node.OptionalIndex,
106 => @intFromEnum(@field(extra, field_name)),
106 => @backingInt(@field(extra, field_name)),
107107
108108 Ast.TokenOffset,
109109 Ast.OptionalTokenOffset,
110110 Ast.Node.Offset,
111111 Ast.Node.OptionalOffset,
112 => @bitCast(@intFromEnum(@field(extra, field_name))),
112 => @bitCast(@backingInt(@field(extra, field_name))),
113113
114114 i32,
115115 Zir.Inst.Call.Flags,
......@@ -207,7 +207,7 @@ pub fn generate(gpa: Allocator, tree: Ast) Allocator.Error!Zir {
207207 break :fatal true;
208208 };
209209
210 const err_index = @intFromEnum(Zir.ExtraIndex.compile_errors);
210 const err_index = @backingInt(Zir.ExtraIndex.compile_errors);
211211 if (astgen.compile_errors.items.len == 0) {
212212 astgen.extra.items[err_index] = 0;
213213 } else {
......@@ -223,7 +223,7 @@ pub fn generate(gpa: Allocator, tree: Ast) Allocator.Error!Zir {
223223 }
224224 }
225225
226 const imports_index = @intFromEnum(Zir.ExtraIndex.imports);
226 const imports_index = @backingInt(Zir.ExtraIndex.imports);
227227 if (astgen.imports.count() == 0) {
228228 astgen.extra.items[imports_index] = 0;
229229 } else {
......@@ -1380,7 +1380,7 @@ fn fnProtoExprInner(
13801380 defer param_gz.unstack();
13811381 param_gz.is_comptime = true;
13821382 const param_type = try fullBodyExpr(&param_gz, scope, coerced_type_ri, param_type_node, .normal);
1383 const param_inst_expected: Zir.Inst.Index = @enumFromInt(astgen.instructions.len + 1);
1383 const param_inst_expected: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len + 1));
13841384 _ = try param_gz.addBreakWithSrcNode(.break_inline, param_inst_expected, param_type, param_type_node);
13851385 const name_token = param.name_token orelse tree.nodeMainToken(param_type_node);
13861386 const tag: Zir.Inst.Tag = if (is_comptime) .param_comptime else .param;
......@@ -1506,7 +1506,7 @@ fn arrayInitExpr(
15061506 .tag = .array_init_elem_type,
15071507 .data = .{ .bin = .{
15081508 .lhs = array_ty,
1509 .rhs = @enumFromInt(i),
1509 .rhs = @fromBackingInt(@intCast(i)),
15101510 } },
15111511 });
15121512 _ = try expr(gz, scope, .{ .rl = .{ .ty = this_elem_ty } }, elem_init);
......@@ -1598,7 +1598,7 @@ fn arrayInitExprAnon(
15981598
15991599 for (elements) |elem_init| {
16001600 const elem_ref = try expr(gz, scope, .{ .rl = .none }, elem_init);
1601 astgen.extra.items[extra_index] = @intFromEnum(elem_ref);
1601 astgen.extra.items[extra_index] = @backingInt(elem_ref);
16021602 extra_index += 1;
16031603 }
16041604 return try gz.addPlNodePayloadIndex(.array_init_anon, node, payload_index);
......@@ -1621,14 +1621,14 @@ fn arrayInitExprTyped(
16211621 .operands_len = @intCast(len),
16221622 });
16231623 var extra_index = try reserveExtra(astgen, len);
1624 astgen.extra.items[extra_index] = @intFromEnum(ty_inst);
1624 astgen.extra.items[extra_index] = @backingInt(ty_inst);
16251625 extra_index += 1;
16261626
16271627 if (maybe_elem_ty_inst != .none) {
16281628 const elem_ri: ResultInfo = .{ .rl = .{ .coerced_ty = maybe_elem_ty_inst } };
16291629 for (elements) |elem_init| {
16301630 const elem_inst = try expr(gz, scope, elem_ri, elem_init);
1631 astgen.extra.items[extra_index] = @intFromEnum(elem_inst);
1631 astgen.extra.items[extra_index] = @backingInt(elem_inst);
16321632 extra_index += 1;
16331633 }
16341634 } else {
......@@ -1637,12 +1637,12 @@ fn arrayInitExprTyped(
16371637 .tag = .array_init_elem_type,
16381638 .data = .{ .bin = .{
16391639 .lhs = ty_inst,
1640 .rhs = @enumFromInt(i),
1640 .rhs = @fromBackingInt(@intCast(i)),
16411641 } },
16421642 }) } };
16431643
16441644 const elem_inst = try expr(gz, scope, ri, elem_init);
1645 astgen.extra.items[extra_index] = @intFromEnum(elem_inst);
1645 astgen.extra.items[extra_index] = @backingInt(elem_inst);
16461646 extra_index += 1;
16471647 }
16481648 }
......@@ -1673,7 +1673,7 @@ fn arrayInitExprPtr(
16731673 .ptr = array_ptr_inst,
16741674 .index = @intCast(i),
16751675 });
1676 astgen.extra.items[extra_index] = @intFromEnum(elem_ptr_inst.toIndex().?);
1676 astgen.extra.items[extra_index] = @backingInt(elem_ptr_inst.toIndex().?);
16771677 extra_index += 1;
16781678 _ = try expr(gz, scope, .{ .rl = .{ .ptr = .{ .inst = elem_ptr_inst } } }, elem_init);
16791679 }
......@@ -1966,7 +1966,7 @@ fn structInitExprPtr(
19661966 .lhs = struct_ptr_inst,
19671967 .field_name_start = str_index,
19681968 });
1969 astgen.extra.items[extra_index] = @intFromEnum(field_ptr.toIndex().?);
1969 astgen.extra.items[extra_index] = @backingInt(field_ptr.toIndex().?);
19701970 extra_index += 1;
19711971 _ = try expr(gz, scope, .{ .rl = .{ .ptr = .{ .inst = field_ptr } } }, field_init);
19721972 }
......@@ -2658,11 +2658,11 @@ fn addEnsureResult(gz: *GenZir, maybe_unused_result: Zir.Inst.Ref, statement: As
26582658 // Note that this array becomes invalid after appending more items to it
26592659 // in the above while loop.
26602660 const zir_tags = gz.astgen.instructions.items(.tag);
2661 switch (zir_tags[@intFromEnum(inst)]) {
2661 switch (zir_tags[@backingInt(inst)]) {
26622662 // For some instructions, modify the zir data
26632663 // so we can avoid a separate ensure_result_used instruction.
26642664 .call, .field_call => {
2665 const break_extra = gz.astgen.instructions.items(.data)[@intFromEnum(inst)].pl_node.payload_index;
2665 const break_extra = gz.astgen.instructions.items(.data)[@backingInt(inst)].pl_node.payload_index;
26662666 comptime assert(std.meta.fieldIndex(Zir.Inst.Call, "flags") ==
26672667 std.meta.fieldIndex(Zir.Inst.FieldCall, "flags"));
26682668 const flags: *Zir.Inst.Call.Flags = @ptrCast(&gz.astgen.extra.items[
......@@ -2672,7 +2672,7 @@ fn addEnsureResult(gz: *GenZir, maybe_unused_result: Zir.Inst.Ref, statement: As
26722672 break :b true;
26732673 },
26742674 .builtin_call => {
2675 const break_extra = gz.astgen.instructions.items(.data)[@intFromEnum(inst)].pl_node.payload_index;
2675 const break_extra = gz.astgen.instructions.items(.data)[@backingInt(inst)].pl_node.payload_index;
26762676 const flags: *Zir.Inst.BuiltinCall.Flags = @ptrCast(&gz.astgen.extra.items[
26772677 break_extra + std.meta.fieldIndex(Zir.Inst.BuiltinCall, "flags").?
26782678 ]);
......@@ -2888,7 +2888,7 @@ fn addEnsureResult(gz: *GenZir, maybe_unused_result: Zir.Inst.Ref, statement: As
28882888 .array_init_elem_ptr,
28892889 => break :b false,
28902890
2891 .extended => switch (gz.astgen.instructions.items(.data)[@intFromEnum(inst)].extended.opcode) {
2891 .extended => switch (gz.astgen.instructions.items(.data)[@backingInt(inst)].extended.opcode) {
28922892 .breakpoint,
28932893 .disable_instrumentation,
28942894 .disable_intrinsics,
......@@ -3075,7 +3075,7 @@ fn deferStmt(
30753075 const expr_node = tree.nodeData(node).node;
30763076 _ = try unusedResultExpr(&defer_gen, &defer_gen.base, expr_node);
30773077 try checkUsed(gz, scope, &defer_gen.base);
3078 _ = try defer_gen.addBreak(.break_inline, @enumFromInt(0), .void_value);
3078 _ = try defer_gen.addBreak(.break_inline, @fromBackingInt(@intCast(0)), .void_value);
30793079
30803080 const body = defer_gen.instructionsSlice();
30813081 const body_len = gz.astgen.countBodyLenAfterFixupsExtraRefs(body, &.{});
......@@ -3663,12 +3663,12 @@ fn assignOp(
36633663 .tag = .extended,
36643664 .data = .{ .extended = .{
36653665 .opcode = .inplace_arith_result_ty,
3666 .small = @intFromEnum(@as(Zir.Inst.InplaceOp, switch (op_inst_tag) {
3666 .small = @backingInt(@as(Zir.Inst.InplaceOp, switch (op_inst_tag) {
36673667 .add => .add_eq,
36683668 .sub => .sub_eq,
36693669 else => unreachable,
36703670 })),
3671 .operand = @intFromEnum(lhs),
3671 .operand = @backingInt(lhs),
36723672 } },
36733673 }),
36743674 else => try gz.addUnNode(.typeof, lhs, infix_node), // same as LHS type
......@@ -3819,20 +3819,20 @@ fn ptrType(
38193819 .src_node = gz.nodeIndexToRelative(node),
38203820 });
38213821 if (sentinel_ref != .none) {
3822 gz.astgen.extra.appendAssumeCapacity(@intFromEnum(sentinel_ref));
3822 gz.astgen.extra.appendAssumeCapacity(@backingInt(sentinel_ref));
38233823 }
38243824 if (align_ref != .none) {
3825 gz.astgen.extra.appendAssumeCapacity(@intFromEnum(align_ref));
3825 gz.astgen.extra.appendAssumeCapacity(@backingInt(align_ref));
38263826 }
38273827 if (addrspace_ref != .none) {
3828 gz.astgen.extra.appendAssumeCapacity(@intFromEnum(addrspace_ref));
3828 gz.astgen.extra.appendAssumeCapacity(@backingInt(addrspace_ref));
38293829 }
38303830 if (bit_start_ref != .none) {
3831 gz.astgen.extra.appendAssumeCapacity(@intFromEnum(bit_start_ref));
3832 gz.astgen.extra.appendAssumeCapacity(@intFromEnum(bit_end_ref));
3831 gz.astgen.extra.appendAssumeCapacity(@backingInt(bit_start_ref));
3832 gz.astgen.extra.appendAssumeCapacity(@backingInt(bit_end_ref));
38333833 }
38343834
3835 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
3835 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
38363836 const result = new_index.toRef();
38373837 gz.astgen.instructions.appendAssumeCapacity(.{ .tag = .ptr_type, .data = .{
38383838 .ptr_type = .{
......@@ -3957,7 +3957,7 @@ const WipDecls = struct {
39573957 wip.* = undefined;
39583958 }
39593959 fn nextDecl(wip: *WipDecls, decl_inst: Zir.Inst.Index) void {
3960 wip.slice.get(wip.astgen)[wip.index] = @intFromEnum(decl_inst);
3960 wip.slice.get(wip.astgen)[wip.index] = @backingInt(decl_inst);
39613961 wip.index += 1;
39623962 }
39633963};
......@@ -4012,7 +4012,7 @@ fn fnDecl(
40124012 };
40134013 const lib_name = if (fn_proto.lib_name) |lib_name_token| blk: {
40144014 const lib_name_str = try astgen.strLitAsString(lib_name_token);
4015 const lib_name_slice = astgen.string_bytes.items[@intFromEnum(lib_name_str.index)..][0..lib_name_str.len];
4015 const lib_name_slice = astgen.string_bytes.items[@backingInt(lib_name_str.index)..][0..lib_name_str.len];
40164016 if (mem.findScalar(u8, lib_name_slice, 0) != null) {
40174017 return astgen.failTok(lib_name_token, "library name cannot contain null bytes", .{});
40184018 } else if (lib_name_str.len == 0) {
......@@ -4231,7 +4231,7 @@ fn fnDeclInner(
42314231 var param_gz = decl_gz.makeSubBlock(scope);
42324232 defer param_gz.unstack();
42334233 const param_type = try fullBodyExpr(&param_gz, params_scope, coerced_type_ri, param_type_node, .normal);
4234 const param_inst_expected: Zir.Inst.Index = @enumFromInt(astgen.instructions.len + 1);
4234 const param_inst_expected: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len + 1));
42354235 _ = try param_gz.addBreakWithSrcNode(.break_inline, param_inst_expected, param_type, param_type_node);
42364236 const param_type_is_generic = any_param_used;
42374237
......@@ -4276,7 +4276,7 @@ fn fnDeclInner(
42764276 // In this case we will send a len=0 body which can be encoded more efficiently.
42774277 break :inst inst;
42784278 }
4279 _ = try ret_gz.addBreak(.break_inline, @enumFromInt(0), inst);
4279 _ = try ret_gz.addBreak(.break_inline, @fromBackingInt(@intCast(0)), inst);
42804280 break :inst inst;
42814281 };
42824282 const ret_body_param_refs = try astgen.fetchRemoveRefEntries(param_insts.items);
......@@ -4299,11 +4299,11 @@ fn fnDeclInner(
42994299 // In this case we will send a len=0 body which can be encoded more efficiently.
43004300 break :blk inst;
43014301 }
4302 _ = try cc_gz.addBreak(.break_inline, @enumFromInt(0), inst);
4302 _ = try cc_gz.addBreak(.break_inline, @fromBackingInt(@intCast(0)), inst);
43034303 break :blk inst;
43044304 } else if (has_inline_keyword) {
43054305 const inst = try cc_gz.addStdLangValue(decl_node, .calling_convention_inline);
4306 _ = try cc_gz.addBreak(.break_inline, @enumFromInt(0), inst);
4306 _ = try cc_gz.addBreak(.break_inline, @fromBackingInt(@intCast(0)), inst);
43074307 break :blk inst;
43084308 } else {
43094309 break :blk .none;
......@@ -4428,7 +4428,7 @@ fn globalVarDecl(
44284428 } else false;
44294429 const lib_name = if (var_decl.lib_name) |lib_name_token| blk: {
44304430 const lib_name_str = try astgen.strLitAsString(lib_name_token);
4431 const lib_name_slice = astgen.string_bytes.items[@intFromEnum(lib_name_str.index)..][0..lib_name_str.len];
4431 const lib_name_slice = astgen.string_bytes.items[@backingInt(lib_name_str.index)..][0..lib_name_str.len];
44324432 if (mem.findScalar(u8, lib_name_slice, 0) != null) {
44334433 return astgen.failTok(lib_name_token, "library name cannot contain null bytes", .{});
44344434 } else if (lib_name_str.len == 0) {
......@@ -4650,7 +4650,7 @@ fn testDecl(
46504650 else => .empty,
46514651 .string_literal => name: {
46524652 const name = try astgen.strLitAsString(test_name_token);
4653 const slice = astgen.string_bytes.items[@intFromEnum(name.index)..][0..name.len];
4653 const slice = astgen.string_bytes.items[@backingInt(name.index)..][0..name.len];
46544654 if (mem.findScalar(u8, slice, 0) != null) {
46554655 return astgen.failTok(test_name_token, "test name cannot contain null bytes", .{});
46564656 } else if (slice.len == 0) {
......@@ -4941,7 +4941,7 @@ fn structDeclInner(
49414941 member.convertToNonTupleLike(astgen.tree);
49424942 assert(!member.ast.tuple_like);
49434943
4944 field_names.get(astgen)[field_idx] = @intFromEnum(try astgen.identAsString(member.ast.main_token));
4944 field_names.get(astgen)[field_idx] = @backingInt(try astgen.identAsString(member.ast.main_token));
49454945
49464946 {
49474947 const type_node = member.ast.type_expr.unwrap() orelse {
......@@ -5087,13 +5087,13 @@ fn tupleDecl(
50875087 }
50885088
50895089 const field_type_ref = try typeExpr(gz, scope, field.ast.type_expr.unwrap().?);
5090 astgen.scratch.appendAssumeCapacity(@intFromEnum(field_type_ref));
5090 astgen.scratch.appendAssumeCapacity(@backingInt(field_type_ref));
50915091
50925092 if (field.ast.value_expr.unwrap()) |value_expr| {
50935093 const field_init_ref = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = field_type_ref } }, value_expr, .tuple_field_default_value);
5094 astgen.scratch.appendAssumeCapacity(@intFromEnum(field_init_ref));
5094 astgen.scratch.appendAssumeCapacity(@backingInt(field_init_ref));
50955095 } else {
5096 astgen.scratch.appendAssumeCapacity(@intFromEnum(Zir.Inst.Ref.none));
5096 astgen.scratch.appendAssumeCapacity(@backingInt(Zir.Inst.Ref.none));
50975097 }
50985098 }
50995099
......@@ -5221,7 +5221,7 @@ fn unionDeclInner(
52215221 return astgen.failTok(comptime_token, "union fields cannot be marked comptime", .{});
52225222 }
52235223
5224 field_names.get(astgen)[field_idx] = @intFromEnum(try astgen.identAsString(member.ast.main_token));
5224 field_names.get(astgen)[field_idx] = @backingInt(try astgen.identAsString(member.ast.main_token));
52255225
52265226 if (member.ast.type_expr.unwrap()) |type_node| {
52275227 const type_ref = try typeExpr(&block_scope, &namespace.base, type_node);
......@@ -5454,7 +5454,7 @@ fn containerDecl(
54545454
54555455 astgen.src_hasher.update(tree.getNodeSource(member_node));
54565456
5457 field_names.get(astgen)[field_idx] = @intFromEnum(try astgen.identAsString(member.ast.main_token));
5457 field_names.get(astgen)[field_idx] = @backingInt(try astgen.identAsString(member.ast.main_token));
54585458
54595459 if (member.ast.value_expr.unwrap()) |value_node| {
54605460 if (tag_type_body_len == null) {
......@@ -5709,7 +5709,7 @@ fn errorSetDecl(gz: *GenZir, ri: ResultInfo, node: Ast.Node.Index) InnerError!Zi
57095709 }
57105710 gop.value_ptr.* = tok_i;
57115711
5712 try astgen.extra.append(gpa, @intFromEnum(str_index));
5712 try astgen.extra.append(gpa, @backingInt(str_index));
57135713 fields_len += 1;
57145714 },
57155715 else => unreachable,
......@@ -6343,7 +6343,7 @@ fn setCondBrPayload(
63436343 );
63446344
63456345 const zir_datas = astgen.instructions.items(.data);
6346 zir_datas[@intFromEnum(condbr)].pl_node.payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.CondBr{
6346 zir_datas[@backingInt(condbr)].pl_node.payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.CondBr{
63476347 .condition = cond,
63486348 .then_body_len = then_body_len,
63496349 .else_body_len = else_body_len,
......@@ -7319,7 +7319,7 @@ fn switchExpr(
73197319 // this lowering to avoiding a rather complex special case in Sema.
73207320
73217321 assert(switch_full.label_token != null); // use `switch_block_err_union` code path instead!
7322 assert(.block == astgen.instructions.items(.tag)[@intFromEnum(peer_break_target.block_inst)]);
7322 assert(.block == astgen.instructions.items(.tag)[@backingInt(peer_break_target.block_inst)]);
73237323 block_scope.break_target = peer_break_target.block_inst;
73247324 block_scope.setBreakResultInfo(peer_break_target.block_ri);
73257325 },
......@@ -7829,14 +7829,14 @@ fn switchExpr(
78297829 .scalar_cases_len = @intCast(scalar_cases_len),
78307830 },
78317831 });
7832 astgen.instructions.items(.data)[@intFromEnum(switch_block)].pl_node.payload_index = zir_payload_index;
7832 astgen.instructions.items(.data)[@backingInt(switch_block)].pl_node.payload_index = zir_payload_index;
78337833
78347834 if (multi_cases_len > 0) astgen.extra.appendAssumeCapacity(multi_cases_len);
7835 if (payload_capture_inst_is_placeholder) astgen.extra.appendAssumeCapacity(@intFromEnum(payload_capture_inst));
7836 if (tag_capture_inst_is_placeholder) astgen.extra.appendAssumeCapacity(@intFromEnum(tag_capture_inst));
7835 if (payload_capture_inst_is_placeholder) astgen.extra.appendAssumeCapacity(@backingInt(payload_capture_inst));
7836 if (tag_capture_inst_is_placeholder) astgen.extra.appendAssumeCapacity(@backingInt(tag_capture_inst));
78377837 if (needs_non_err_handling) {
78387838 const catch_or_if_src_node_offset = parent_gz.nodeIndexToRelative(catch_or_if_node);
7839 astgen.extra.appendAssumeCapacity(@bitCast(@intFromEnum(catch_or_if_src_node_offset)));
7839 astgen.extra.appendAssumeCapacity(@bitCast(@backingInt(catch_or_if_src_node_offset)));
78407840 astgen.extra.appendAssumeCapacity(@bitCast(non_err_info));
78417841 }
78427842 if (has_else) astgen.extra.appendAssumeCapacity(@bitCast(else_info));
......@@ -8484,7 +8484,7 @@ fn numberLiteral(gz: *GenZir, ri: ResultInfo, node: Ast.Node.Index, source_node:
84848484 var big_int = try std.math.big.int.Managed.init(gpa);
84858485 defer big_int.deinit();
84868486 const prefix_offset: usize = if (base == .decimal) 0 else 2;
8487 big_int.setString(@intFromEnum(base), bytes[prefix_offset..]) catch |err| switch (err) {
8487 big_int.setString(@backingInt(base), bytes[prefix_offset..]) catch |err| switch (err) {
84888488 error.InvalidCharacter => unreachable, // caught in `parseNumberLiteral`
84898489 error.InvalidBase => unreachable, // we only pass 16, 8, 2, see above
84908490 error.OutOfMemory => |e| return e,
......@@ -8586,7 +8586,7 @@ fn asmExpr(
85868586 },
85878587 else => .{
85888588 .tag = .asm_expr,
8589 .tmpl = @enumFromInt(@intFromEnum(try comptimeExpr(gz, scope, .{ .rl = .none }, full.ast.template, .inline_assembly_code))),
8589 .tmpl = @fromBackingInt(@intCast(@backingInt(try comptimeExpr(gz, scope, .{ .rl = .none }, full.ast.template, .inline_assembly_code)))),
85908590 },
85918591 };
85928592
......@@ -8903,7 +8903,7 @@ fn typeOf(
89038903
89048904 for (args, 0..) |arg, i| {
89058905 const param_ref = try reachableExpr(&typeof_scope, &typeof_scope.base, .{ .rl = .none }, arg, node);
8906 astgen.extra.items[args_index + i] = @intFromEnum(param_ref);
8906 astgen.extra.items[args_index + i] = @backingInt(param_ref);
89078907 }
89088908 _ = try typeof_scope.addBreak(.break_inline, typeof_inst.toIndex().?, .void_value);
89098909
......@@ -8952,7 +8952,7 @@ fn minMax(
89528952 var extra_index = try reserveExtra(gz.astgen, args.len);
89538953 for (args) |arg| {
89548954 const arg_ref = try expr(gz, scope, .{ .rl = .none }, arg);
8955 astgen.extra.items[extra_index] = @intFromEnum(arg_ref);
8955 astgen.extra.items[extra_index] = @backingInt(arg_ref);
89568956 extra_index += 1;
89578957 }
89588958 const tag: Zir.Inst.Extended = switch (op) {
......@@ -9023,7 +9023,7 @@ fn builtinCall(
90239023 }
90249024 const str_lit_token = tree.nodeMainToken(operand_node);
90259025 const str = try astgen.strLitAsString(str_lit_token);
9026 const str_slice = astgen.string_bytes.items[@intFromEnum(str.index)..][0..str.len];
9026 const str_slice = astgen.string_bytes.items[@backingInt(str.index)..][0..str.len];
90279027 if (mem.findScalar(u8, str_slice, 0) != null) {
90289028 return astgen.failTok(str_lit_token, "import path cannot contain null bytes", .{});
90299029 } else if (str.len == 0) {
......@@ -9054,7 +9054,7 @@ fn builtinCall(
90549054 var extra_index = try reserveExtra(gz.astgen, params.len);
90559055 for (params) |param| {
90569056 const param_ref = try expr(gz, scope, .{ .rl = .none }, param);
9057 astgen.extra.items[extra_index] = @intFromEnum(param_ref);
9057 astgen.extra.items[extra_index] = @backingInt(param_ref);
90589058 extra_index += 1;
90599059 }
90609060 const result = try gz.addExtendedMultiOpPayloadIndex(.compile_log, payload_index, params.len);
......@@ -9264,7 +9264,7 @@ fn builtinCall(
92649264 const param_types = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_type_type } }, params[0], .fn_param_types);
92659265 const param_attrs_ty = try gz.addExtendedPayloadSmall(
92669266 .reify_slice_arg_ty,
9267 @intFromEnum(Zir.Inst.ReifySliceArgInfo.type_to_fn_param_attrs),
9267 @backingInt(Zir.Inst.ReifySliceArgInfo.type_to_fn_param_attrs),
92689268 Zir.Inst.UnNode{ .node = gz.nodeIndexToRelative(params[0]), .operand = param_types },
92699269 );
92709270 const param_attrs = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = param_attrs_ty } }, params[1], .fn_param_attrs);
......@@ -9286,17 +9286,17 @@ fn builtinCall(
92869286 const field_names = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_slice_const_u8_type } }, params[2], .struct_field_names);
92879287 const field_types_ty = try gz.addExtendedPayloadSmall(
92889288 .reify_slice_arg_ty,
9289 @intFromEnum(Zir.Inst.ReifySliceArgInfo.string_to_struct_field_type),
9289 @backingInt(Zir.Inst.ReifySliceArgInfo.string_to_struct_field_type),
92909290 Zir.Inst.UnNode{ .node = gz.nodeIndexToRelative(params[2]), .operand = field_names },
92919291 );
92929292 const field_attrs_ty = try gz.addExtendedPayloadSmall(
92939293 .reify_slice_arg_ty,
9294 @intFromEnum(Zir.Inst.ReifySliceArgInfo.string_to_struct_field_attrs),
9294 @backingInt(Zir.Inst.ReifySliceArgInfo.string_to_struct_field_attrs),
92959295 Zir.Inst.UnNode{ .node = gz.nodeIndexToRelative(params[2]), .operand = field_names },
92969296 );
92979297 const field_types = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = field_types_ty } }, params[3], .struct_field_types);
92989298 const field_attrs = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = field_attrs_ty } }, params[4], .struct_field_attrs);
9299 const result = try gz.addExtendedPayloadSmall(.reify_struct, @intFromEnum(reify_name_strat), Zir.Inst.ReifyStruct{
9299 const result = try gz.addExtendedPayloadSmall(.reify_struct, @backingInt(reify_name_strat), Zir.Inst.ReifyStruct{
93009300 .src_line = gz.astgen.source_line,
93019301 .node = node,
93029302 .layout = layout,
......@@ -9314,17 +9314,17 @@ fn builtinCall(
93149314 const field_names = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = .slice_const_slice_const_u8_type } }, params[2], .union_field_names);
93159315 const field_types_ty = try gz.addExtendedPayloadSmall(
93169316 .reify_slice_arg_ty,
9317 @intFromEnum(Zir.Inst.ReifySliceArgInfo.string_to_union_field_type),
9317 @backingInt(Zir.Inst.ReifySliceArgInfo.string_to_union_field_type),
93189318 Zir.Inst.UnNode{ .node = gz.nodeIndexToRelative(params[2]), .operand = field_names },
93199319 );
93209320 const field_attrs_ty = try gz.addExtendedPayloadSmall(
93219321 .reify_slice_arg_ty,
9322 @intFromEnum(Zir.Inst.ReifySliceArgInfo.string_to_union_field_attrs),
9322 @backingInt(Zir.Inst.ReifySliceArgInfo.string_to_union_field_attrs),
93239323 Zir.Inst.UnNode{ .node = gz.nodeIndexToRelative(params[2]), .operand = field_names },
93249324 );
93259325 const field_types = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = field_types_ty } }, params[3], .union_field_types);
93269326 const field_attrs = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = field_attrs_ty } }, params[4], .union_field_attrs);
9327 const result = try gz.addExtendedPayloadSmall(.reify_union, @intFromEnum(reify_name_strat), Zir.Inst.ReifyUnion{
9327 const result = try gz.addExtendedPayloadSmall(.reify_union, @backingInt(reify_name_strat), Zir.Inst.ReifyUnion{
93289328 .src_line = gz.astgen.source_line,
93299329 .node = node,
93309330 .layout = layout,
......@@ -9346,7 +9346,7 @@ fn builtinCall(
93469346 .rhs = field_names,
93479347 });
93489348 const field_values = try comptimeExpr(gz, scope, .{ .rl = .{ .coerced_ty = field_values_ty } }, params[3], .enum_field_values);
9349 const result = try gz.addExtendedPayloadSmall(.reify_enum, @intFromEnum(reify_name_strat), Zir.Inst.ReifyEnum{
9349 const result = try gz.addExtendedPayloadSmall(.reify_enum, @backingInt(reify_name_strat), Zir.Inst.ReifyEnum{
93509350 .src_line = gz.astgen.source_line,
93519351 .node = node,
93529352 .tag_ty = tag_ty,
......@@ -9779,7 +9779,7 @@ fn floatRoundOp(
97799779 .trunc => .trunc,
97809780 else => unreachable,
97819781 };
9782 const result = try gz.addExtendedPayloadSmall(.round_op, @intFromEnum(round_op), Zir.Inst.BinNode{
9782 const result = try gz.addExtendedPayloadSmall(.round_op, @backingInt(round_op), Zir.Inst.BinNode{
97839783 .node = gz.nodeIndexToRelative(node),
97849784 .lhs = dest_type,
97859785 .rhs = operand,
......@@ -9985,7 +9985,7 @@ fn callExpr(
99859985 .field => |field| assert(field.obj_ptr != .none),
99869986 }
99879987
9988 const call_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
9988 const call_index: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len));
99899989 const call_inst = call_index.toRef();
99909990 try gz.astgen.instructions.append(astgen.gpa, undefined);
99919991 try gz.instructions.append(astgen.gpa, call_index);
......@@ -10026,14 +10026,14 @@ fn callExpr(
1002610026 .callee = callee_obj,
1002710027 .flags = .{
1002810028 .pop_error_return_trace = !propagate_error_trace,
10029 .packed_modifier = @intCast(@intFromEnum(modifier)),
10029 .packed_modifier = @intCast(@backingInt(modifier)),
1003010030 .args_len = @intCast(call.ast.params.len),
1003110031 },
1003210032 });
1003310033 if (call.ast.params.len != 0) {
1003410034 try astgen.extra.appendSlice(astgen.gpa, astgen.scratch.items[scratch_top..]);
1003510035 }
10036 gz.astgen.instructions.set(@intFromEnum(call_index), .{
10036 gz.astgen.instructions.set(@backingInt(call_index), .{
1003710037 .tag = .call,
1003810038 .data = .{ .pl_node = .{
1003910039 .src_node = gz.nodeIndexToRelative(node),
......@@ -10047,14 +10047,14 @@ fn callExpr(
1004710047 .field_name_start = callee_field.field_name_start,
1004810048 .flags = .{
1004910049 .pop_error_return_trace = !propagate_error_trace,
10050 .packed_modifier = @intCast(@intFromEnum(modifier)),
10050 .packed_modifier = @intCast(@backingInt(modifier)),
1005110051 .args_len = @intCast(call.ast.params.len),
1005210052 },
1005310053 });
1005410054 if (call.ast.params.len != 0) {
1005510055 try astgen.extra.appendSlice(astgen.gpa, astgen.scratch.items[scratch_top..]);
1005610056 }
10057 gz.astgen.instructions.set(@intFromEnum(call_index), .{
10057 gz.astgen.instructions.set(@backingInt(call_index), .{
1005810058 .tag = .field_call,
1005910059 .data = .{ .pl_node = .{
1006010060 .src_node = gz.nodeIndexToRelative(node),
......@@ -10480,8 +10480,8 @@ fn rvalueInner(
1048010480 const result = r: {
1048110481 if (raw_result.toIndex()) |result_index| {
1048210482 const zir_tags = gz.astgen.instructions.items(.tag);
10483 const data = gz.astgen.instructions.items(.data)[@intFromEnum(result_index)];
10484 if (zir_tags[@intFromEnum(result_index)].isAlwaysVoid(data)) {
10483 const data = gz.astgen.instructions.items(.data)[@backingInt(result_index)];
10484 if (zir_tags[@backingInt(result_index)].isAlwaysVoid(data)) {
1048510485 break :r Zir.Inst.Ref.void_value;
1048610486 }
1048710487 }
......@@ -10520,108 +10520,108 @@ fn rvalueInner(
1052010520 },
1052110521 .ty => |ty_inst| {
1052210522 // Quickly eliminate some common, unnecessary type coercion.
10523 const as_ty = @as(u64, @intFromEnum(Zir.Inst.Ref.type_type)) << 32;
10524 const as_bool = @as(u64, @intFromEnum(Zir.Inst.Ref.bool_type)) << 32;
10525 const as_void = @as(u64, @intFromEnum(Zir.Inst.Ref.void_type)) << 32;
10526 const as_comptime_int = @as(u64, @intFromEnum(Zir.Inst.Ref.comptime_int_type)) << 32;
10527 const as_usize = @as(u64, @intFromEnum(Zir.Inst.Ref.usize_type)) << 32;
10528 const as_u1 = @as(u64, @intFromEnum(Zir.Inst.Ref.u1_type)) << 32;
10529 const as_u8 = @as(u64, @intFromEnum(Zir.Inst.Ref.u8_type)) << 32;
10530 switch ((@as(u64, @intFromEnum(ty_inst)) << 32) | @as(u64, @intFromEnum(result))) {
10531 as_ty | @intFromEnum(Zir.Inst.Ref.u1_type),
10532 as_ty | @intFromEnum(Zir.Inst.Ref.u8_type),
10533 as_ty | @intFromEnum(Zir.Inst.Ref.i8_type),
10534 as_ty | @intFromEnum(Zir.Inst.Ref.u16_type),
10535 as_ty | @intFromEnum(Zir.Inst.Ref.u29_type),
10536 as_ty | @intFromEnum(Zir.Inst.Ref.i16_type),
10537 as_ty | @intFromEnum(Zir.Inst.Ref.u32_type),
10538 as_ty | @intFromEnum(Zir.Inst.Ref.i32_type),
10539 as_ty | @intFromEnum(Zir.Inst.Ref.u64_type),
10540 as_ty | @intFromEnum(Zir.Inst.Ref.i64_type),
10541 as_ty | @intFromEnum(Zir.Inst.Ref.u128_type),
10542 as_ty | @intFromEnum(Zir.Inst.Ref.i128_type),
10543 as_ty | @intFromEnum(Zir.Inst.Ref.usize_type),
10544 as_ty | @intFromEnum(Zir.Inst.Ref.isize_type),
10545 as_ty | @intFromEnum(Zir.Inst.Ref.c_char_type),
10546 as_ty | @intFromEnum(Zir.Inst.Ref.c_short_type),
10547 as_ty | @intFromEnum(Zir.Inst.Ref.c_ushort_type),
10548 as_ty | @intFromEnum(Zir.Inst.Ref.c_int_type),
10549 as_ty | @intFromEnum(Zir.Inst.Ref.c_uint_type),
10550 as_ty | @intFromEnum(Zir.Inst.Ref.c_long_type),
10551 as_ty | @intFromEnum(Zir.Inst.Ref.c_ulong_type),
10552 as_ty | @intFromEnum(Zir.Inst.Ref.c_longlong_type),
10553 as_ty | @intFromEnum(Zir.Inst.Ref.c_ulonglong_type),
10554 as_ty | @intFromEnum(Zir.Inst.Ref.c_longdouble_type),
10555 as_ty | @intFromEnum(Zir.Inst.Ref.f16_type),
10556 as_ty | @intFromEnum(Zir.Inst.Ref.f32_type),
10557 as_ty | @intFromEnum(Zir.Inst.Ref.f64_type),
10558 as_ty | @intFromEnum(Zir.Inst.Ref.f80_type),
10559 as_ty | @intFromEnum(Zir.Inst.Ref.f128_type),
10560 as_ty | @intFromEnum(Zir.Inst.Ref.anyopaque_type),
10561 as_ty | @intFromEnum(Zir.Inst.Ref.bool_type),
10562 as_ty | @intFromEnum(Zir.Inst.Ref.void_type),
10563 as_ty | @intFromEnum(Zir.Inst.Ref.type_type),
10564 as_ty | @intFromEnum(Zir.Inst.Ref.anyerror_type),
10565 as_ty | @intFromEnum(Zir.Inst.Ref.comptime_int_type),
10566 as_ty | @intFromEnum(Zir.Inst.Ref.comptime_float_type),
10567 as_ty | @intFromEnum(Zir.Inst.Ref.noreturn_type),
10568 as_ty | @intFromEnum(Zir.Inst.Ref.anyframe_type),
10569 as_ty | @intFromEnum(Zir.Inst.Ref.null_type),
10570 as_ty | @intFromEnum(Zir.Inst.Ref.undefined_type),
10571 as_ty | @intFromEnum(Zir.Inst.Ref.enum_literal_type),
10572 as_ty | @intFromEnum(Zir.Inst.Ref.ptr_usize_type),
10573 as_ty | @intFromEnum(Zir.Inst.Ref.ptr_const_comptime_int_type),
10574 as_ty | @intFromEnum(Zir.Inst.Ref.manyptr_u8_type),
10575 as_ty | @intFromEnum(Zir.Inst.Ref.manyptr_const_u8_type),
10576 as_ty | @intFromEnum(Zir.Inst.Ref.manyptr_const_u8_sentinel_0_type),
10577 as_ty | @intFromEnum(Zir.Inst.Ref.slice_const_u8_type),
10578 as_ty | @intFromEnum(Zir.Inst.Ref.slice_const_u8_sentinel_0_type),
10579 as_ty | @intFromEnum(Zir.Inst.Ref.anyerror_void_error_union_type),
10580 as_ty | @intFromEnum(Zir.Inst.Ref.generic_poison_type),
10581 as_ty | @intFromEnum(Zir.Inst.Ref.empty_tuple_type),
10582 as_comptime_int | @intFromEnum(Zir.Inst.Ref.zero),
10583 as_comptime_int | @intFromEnum(Zir.Inst.Ref.one),
10584 as_comptime_int | @intFromEnum(Zir.Inst.Ref.negative_one),
10585 as_usize | @intFromEnum(Zir.Inst.Ref.undef_usize),
10586 as_usize | @intFromEnum(Zir.Inst.Ref.zero_usize),
10587 as_usize | @intFromEnum(Zir.Inst.Ref.one_usize),
10588 as_u1 | @intFromEnum(Zir.Inst.Ref.undef_u1),
10589 as_u1 | @intFromEnum(Zir.Inst.Ref.zero_u1),
10590 as_u1 | @intFromEnum(Zir.Inst.Ref.one_u1),
10591 as_u8 | @intFromEnum(Zir.Inst.Ref.zero_u8),
10592 as_u8 | @intFromEnum(Zir.Inst.Ref.one_u8),
10593 as_u8 | @intFromEnum(Zir.Inst.Ref.four_u8),
10594 as_bool | @intFromEnum(Zir.Inst.Ref.undef_bool),
10595 as_bool | @intFromEnum(Zir.Inst.Ref.bool_true),
10596 as_bool | @intFromEnum(Zir.Inst.Ref.bool_false),
10597 as_void | @intFromEnum(Zir.Inst.Ref.void_value),
10523 const as_ty = @as(u64, @backingInt(Zir.Inst.Ref.type_type)) << 32;
10524 const as_bool = @as(u64, @backingInt(Zir.Inst.Ref.bool_type)) << 32;
10525 const as_void = @as(u64, @backingInt(Zir.Inst.Ref.void_type)) << 32;
10526 const as_comptime_int = @as(u64, @backingInt(Zir.Inst.Ref.comptime_int_type)) << 32;
10527 const as_usize = @as(u64, @backingInt(Zir.Inst.Ref.usize_type)) << 32;
10528 const as_u1 = @as(u64, @backingInt(Zir.Inst.Ref.u1_type)) << 32;
10529 const as_u8 = @as(u64, @backingInt(Zir.Inst.Ref.u8_type)) << 32;
10530 switch ((@as(u64, @backingInt(ty_inst)) << 32) | @as(u64, @backingInt(result))) {
10531 as_ty | @backingInt(Zir.Inst.Ref.u1_type),
10532 as_ty | @backingInt(Zir.Inst.Ref.u8_type),
10533 as_ty | @backingInt(Zir.Inst.Ref.i8_type),
10534 as_ty | @backingInt(Zir.Inst.Ref.u16_type),
10535 as_ty | @backingInt(Zir.Inst.Ref.u29_type),
10536 as_ty | @backingInt(Zir.Inst.Ref.i16_type),
10537 as_ty | @backingInt(Zir.Inst.Ref.u32_type),
10538 as_ty | @backingInt(Zir.Inst.Ref.i32_type),
10539 as_ty | @backingInt(Zir.Inst.Ref.u64_type),
10540 as_ty | @backingInt(Zir.Inst.Ref.i64_type),
10541 as_ty | @backingInt(Zir.Inst.Ref.u128_type),
10542 as_ty | @backingInt(Zir.Inst.Ref.i128_type),
10543 as_ty | @backingInt(Zir.Inst.Ref.usize_type),
10544 as_ty | @backingInt(Zir.Inst.Ref.isize_type),
10545 as_ty | @backingInt(Zir.Inst.Ref.c_char_type),
10546 as_ty | @backingInt(Zir.Inst.Ref.c_short_type),
10547 as_ty | @backingInt(Zir.Inst.Ref.c_ushort_type),
10548 as_ty | @backingInt(Zir.Inst.Ref.c_int_type),
10549 as_ty | @backingInt(Zir.Inst.Ref.c_uint_type),
10550 as_ty | @backingInt(Zir.Inst.Ref.c_long_type),
10551 as_ty | @backingInt(Zir.Inst.Ref.c_ulong_type),
10552 as_ty | @backingInt(Zir.Inst.Ref.c_longlong_type),
10553 as_ty | @backingInt(Zir.Inst.Ref.c_ulonglong_type),
10554 as_ty | @backingInt(Zir.Inst.Ref.c_longdouble_type),
10555 as_ty | @backingInt(Zir.Inst.Ref.f16_type),
10556 as_ty | @backingInt(Zir.Inst.Ref.f32_type),
10557 as_ty | @backingInt(Zir.Inst.Ref.f64_type),
10558 as_ty | @backingInt(Zir.Inst.Ref.f80_type),
10559 as_ty | @backingInt(Zir.Inst.Ref.f128_type),
10560 as_ty | @backingInt(Zir.Inst.Ref.anyopaque_type),
10561 as_ty | @backingInt(Zir.Inst.Ref.bool_type),
10562 as_ty | @backingInt(Zir.Inst.Ref.void_type),
10563 as_ty | @backingInt(Zir.Inst.Ref.type_type),
10564 as_ty | @backingInt(Zir.Inst.Ref.anyerror_type),
10565 as_ty | @backingInt(Zir.Inst.Ref.comptime_int_type),
10566 as_ty | @backingInt(Zir.Inst.Ref.comptime_float_type),
10567 as_ty | @backingInt(Zir.Inst.Ref.noreturn_type),
10568 as_ty | @backingInt(Zir.Inst.Ref.anyframe_type),
10569 as_ty | @backingInt(Zir.Inst.Ref.null_type),
10570 as_ty | @backingInt(Zir.Inst.Ref.undefined_type),
10571 as_ty | @backingInt(Zir.Inst.Ref.enum_literal_type),
10572 as_ty | @backingInt(Zir.Inst.Ref.ptr_usize_type),
10573 as_ty | @backingInt(Zir.Inst.Ref.ptr_const_comptime_int_type),
10574 as_ty | @backingInt(Zir.Inst.Ref.manyptr_u8_type),
10575 as_ty | @backingInt(Zir.Inst.Ref.manyptr_const_u8_type),
10576 as_ty | @backingInt(Zir.Inst.Ref.manyptr_const_u8_sentinel_0_type),
10577 as_ty | @backingInt(Zir.Inst.Ref.slice_const_u8_type),
10578 as_ty | @backingInt(Zir.Inst.Ref.slice_const_u8_sentinel_0_type),
10579 as_ty | @backingInt(Zir.Inst.Ref.anyerror_void_error_union_type),
10580 as_ty | @backingInt(Zir.Inst.Ref.generic_poison_type),
10581 as_ty | @backingInt(Zir.Inst.Ref.empty_tuple_type),
10582 as_comptime_int | @backingInt(Zir.Inst.Ref.zero),
10583 as_comptime_int | @backingInt(Zir.Inst.Ref.one),
10584 as_comptime_int | @backingInt(Zir.Inst.Ref.negative_one),
10585 as_usize | @backingInt(Zir.Inst.Ref.undef_usize),
10586 as_usize | @backingInt(Zir.Inst.Ref.zero_usize),
10587 as_usize | @backingInt(Zir.Inst.Ref.one_usize),
10588 as_u1 | @backingInt(Zir.Inst.Ref.undef_u1),
10589 as_u1 | @backingInt(Zir.Inst.Ref.zero_u1),
10590 as_u1 | @backingInt(Zir.Inst.Ref.one_u1),
10591 as_u8 | @backingInt(Zir.Inst.Ref.zero_u8),
10592 as_u8 | @backingInt(Zir.Inst.Ref.one_u8),
10593 as_u8 | @backingInt(Zir.Inst.Ref.four_u8),
10594 as_bool | @backingInt(Zir.Inst.Ref.undef_bool),
10595 as_bool | @backingInt(Zir.Inst.Ref.bool_true),
10596 as_bool | @backingInt(Zir.Inst.Ref.bool_false),
10597 as_void | @backingInt(Zir.Inst.Ref.void_value),
1059810598 => return result, // type of result is already correct
1059910599
10600 as_bool | @intFromEnum(Zir.Inst.Ref.undef) => return .undef_bool,
10601 as_usize | @intFromEnum(Zir.Inst.Ref.undef) => return .undef_usize,
10602 as_usize | @intFromEnum(Zir.Inst.Ref.undef_u1) => return .undef_usize,
10603 as_u1 | @intFromEnum(Zir.Inst.Ref.undef) => return .undef_u1,
10604
10605 as_usize | @intFromEnum(Zir.Inst.Ref.zero) => return .zero_usize,
10606 as_u1 | @intFromEnum(Zir.Inst.Ref.zero) => return .zero_u1,
10607 as_u8 | @intFromEnum(Zir.Inst.Ref.zero) => return .zero_u8,
10608 as_usize | @intFromEnum(Zir.Inst.Ref.one) => return .one_usize,
10609 as_u1 | @intFromEnum(Zir.Inst.Ref.one) => return .one_u1,
10610 as_u8 | @intFromEnum(Zir.Inst.Ref.one) => return .one_u8,
10611 as_comptime_int | @intFromEnum(Zir.Inst.Ref.zero_usize) => return .zero,
10612 as_u1 | @intFromEnum(Zir.Inst.Ref.zero_usize) => return .zero_u1,
10613 as_u8 | @intFromEnum(Zir.Inst.Ref.zero_usize) => return .zero_u8,
10614 as_comptime_int | @intFromEnum(Zir.Inst.Ref.one_usize) => return .one,
10615 as_u1 | @intFromEnum(Zir.Inst.Ref.one_usize) => return .one_u1,
10616 as_u8 | @intFromEnum(Zir.Inst.Ref.one_usize) => return .one_u8,
10617 as_comptime_int | @intFromEnum(Zir.Inst.Ref.zero_u1) => return .zero,
10618 as_comptime_int | @intFromEnum(Zir.Inst.Ref.zero_u8) => return .zero,
10619 as_usize | @intFromEnum(Zir.Inst.Ref.zero_u1) => return .zero_usize,
10620 as_usize | @intFromEnum(Zir.Inst.Ref.zero_u8) => return .zero_usize,
10621 as_comptime_int | @intFromEnum(Zir.Inst.Ref.one_u1) => return .one,
10622 as_comptime_int | @intFromEnum(Zir.Inst.Ref.one_u8) => return .one,
10623 as_usize | @intFromEnum(Zir.Inst.Ref.one_u1) => return .one_usize,
10624 as_usize | @intFromEnum(Zir.Inst.Ref.one_u8) => return .one_usize,
10600 as_bool | @backingInt(Zir.Inst.Ref.undef) => return .undef_bool,
10601 as_usize | @backingInt(Zir.Inst.Ref.undef) => return .undef_usize,
10602 as_usize | @backingInt(Zir.Inst.Ref.undef_u1) => return .undef_usize,
10603 as_u1 | @backingInt(Zir.Inst.Ref.undef) => return .undef_u1,
10604
10605 as_usize | @backingInt(Zir.Inst.Ref.zero) => return .zero_usize,
10606 as_u1 | @backingInt(Zir.Inst.Ref.zero) => return .zero_u1,
10607 as_u8 | @backingInt(Zir.Inst.Ref.zero) => return .zero_u8,
10608 as_usize | @backingInt(Zir.Inst.Ref.one) => return .one_usize,
10609 as_u1 | @backingInt(Zir.Inst.Ref.one) => return .one_u1,
10610 as_u8 | @backingInt(Zir.Inst.Ref.one) => return .one_u8,
10611 as_comptime_int | @backingInt(Zir.Inst.Ref.zero_usize) => return .zero,
10612 as_u1 | @backingInt(Zir.Inst.Ref.zero_usize) => return .zero_u1,
10613 as_u8 | @backingInt(Zir.Inst.Ref.zero_usize) => return .zero_u8,
10614 as_comptime_int | @backingInt(Zir.Inst.Ref.one_usize) => return .one,
10615 as_u1 | @backingInt(Zir.Inst.Ref.one_usize) => return .one_u1,
10616 as_u8 | @backingInt(Zir.Inst.Ref.one_usize) => return .one_u8,
10617 as_comptime_int | @backingInt(Zir.Inst.Ref.zero_u1) => return .zero,
10618 as_comptime_int | @backingInt(Zir.Inst.Ref.zero_u8) => return .zero,
10619 as_usize | @backingInt(Zir.Inst.Ref.zero_u1) => return .zero_usize,
10620 as_usize | @backingInt(Zir.Inst.Ref.zero_u8) => return .zero_usize,
10621 as_comptime_int | @backingInt(Zir.Inst.Ref.one_u1) => return .one,
10622 as_comptime_int | @backingInt(Zir.Inst.Ref.one_u8) => return .one,
10623 as_usize | @backingInt(Zir.Inst.Ref.one_u1) => return .one_usize,
10624 as_usize | @backingInt(Zir.Inst.Ref.one_u8) => return .one_usize,
1062510625
1062610626 // Need an explicit type coercion instruction.
1062710627 else => return gz.addPlNode(ri.zirTag(), src_node, Zir.Inst.As{
......@@ -10791,7 +10791,7 @@ fn appendErrorNodeNotes(
1079110791 @branchHint(.cold);
1079210792 const gpa = astgen.gpa;
1079310793 const string_bytes = &astgen.string_bytes;
10794 const msg: Zir.NullTerminatedString = @enumFromInt(string_bytes.items.len);
10794 const msg: Zir.NullTerminatedString = @fromBackingInt(@intCast(string_bytes.items.len));
1079510795 try string_bytes.print(gpa, format ++ "\x00", args);
1079610796 const notes_index: u32 = if (notes.len != 0) blk: {
1079710797 const notes_start = astgen.extra.items.len;
......@@ -10883,7 +10883,7 @@ fn appendErrorTokNotesOff(
1088310883 @branchHint(.cold);
1088410884 const gpa = astgen.gpa;
1088510885 const string_bytes = &astgen.string_bytes;
10886 const msg: Zir.NullTerminatedString = @enumFromInt(string_bytes.items.len);
10886 const msg: Zir.NullTerminatedString = @fromBackingInt(@intCast(string_bytes.items.len));
1088710887 try string_bytes.print(gpa, format ++ "\x00", args);
1088810888 const notes_index: u32 = if (notes.len != 0) blk: {
1088910889 const notes_start = astgen.extra.items.len;
......@@ -10919,7 +10919,7 @@ fn errNoteTokOff(
1091910919) Allocator.Error!u32 {
1092010920 @branchHint(.cold);
1092110921 const string_bytes = &astgen.string_bytes;
10922 const msg: Zir.NullTerminatedString = @enumFromInt(string_bytes.items.len);
10922 const msg: Zir.NullTerminatedString = @fromBackingInt(@intCast(string_bytes.items.len));
1092310923 try string_bytes.print(astgen.gpa, format ++ "\x00", args);
1092410924 return astgen.addExtra(Zir.Inst.CompileErrors.Item{
1092510925 .msg = msg,
......@@ -10938,7 +10938,7 @@ fn errNoteNode(
1093810938) Allocator.Error!u32 {
1093910939 @branchHint(.cold);
1094010940 const string_bytes = &astgen.string_bytes;
10941 const msg: Zir.NullTerminatedString = @enumFromInt(string_bytes.items.len);
10941 const msg: Zir.NullTerminatedString = @fromBackingInt(@intCast(string_bytes.items.len));
1094210942 try string_bytes.print(astgen.gpa, format ++ "\x00", args);
1094310943 return astgen.addExtra(Zir.Inst.CompileErrors.Item{
1094410944 .msg = msg,
......@@ -10962,11 +10962,11 @@ fn identAsString(astgen: *AstGen, ident_token: Ast.TokenIndex) !Zir.NullTerminat
1096210962 });
1096310963 if (gop.found_existing) {
1096410964 string_bytes.shrinkRetainingCapacity(str_index);
10965 return @enumFromInt(gop.key_ptr.*);
10965 return @fromBackingInt(@intCast(gop.key_ptr.*));
1096610966 } else {
1096710967 gop.key_ptr.* = str_index;
1096810968 try string_bytes.append(gpa, 0);
10969 return @enumFromInt(str_index);
10969 return @fromBackingInt(@intCast(str_index));
1097010970 }
1097110971}
1097210972
......@@ -10980,7 +10980,7 @@ fn strLitAsString(astgen: *AstGen, str_lit_token: Ast.TokenIndex) !IndexSlice {
1098010980 try astgen.parseStrLit(str_lit_token, string_bytes, token_bytes, 0);
1098110981 const key: []const u8 = string_bytes.items[str_index..];
1098210982 if (std.mem.findScalar(u8, key, 0)) |_| return .{
10983 .index = @enumFromInt(str_index),
10983 .index = @fromBackingInt(@intCast(str_index)),
1098410984 .len = @intCast(key.len),
1098510985 };
1098610986 const gop = try astgen.string_table.getOrPutContextAdapted(gpa, key, StringIndexAdapter{
......@@ -10991,7 +10991,7 @@ fn strLitAsString(astgen: *AstGen, str_lit_token: Ast.TokenIndex) !IndexSlice {
1099110991 if (gop.found_existing) {
1099210992 string_bytes.shrinkRetainingCapacity(str_index);
1099310993 return .{
10994 .index = @enumFromInt(gop.key_ptr.*),
10994 .index = @fromBackingInt(@intCast(gop.key_ptr.*)),
1099510995 .len = @intCast(key.len),
1099610996 };
1099710997 } else {
......@@ -11001,7 +11001,7 @@ fn strLitAsString(astgen: *AstGen, str_lit_token: Ast.TokenIndex) !IndexSlice {
1100111001 // be null terminated for that to work.
1100211002 try string_bytes.append(gpa, 0);
1100311003 return .{
11004 .index = @enumFromInt(str_index),
11004 .index = @fromBackingInt(@intCast(str_index)),
1100511005 .len = @intCast(key.len),
1100611006 };
1100711007 }
......@@ -11035,7 +11035,7 @@ fn strLitNodeAsString(astgen: *AstGen, node: Ast.Node.Index) !IndexSlice {
1103511035 const len = string_bytes.items.len - str_index;
1103611036 try string_bytes.append(gpa, 0);
1103711037 return IndexSlice{
11038 .index = @enumFromInt(str_index),
11038 .index = @fromBackingInt(@intCast(str_index)),
1103911039 .len = @intCast(len),
1104011040 };
1104111041}
......@@ -11333,14 +11333,14 @@ const GenZir = struct {
1133311333 if (gz.isEmpty()) return false;
1133411334 const tags = gz.astgen.instructions.items(.tag);
1133511335 const last_inst = gz.instructions.items[gz.instructions.items.len - 1];
11336 return tags[@intFromEnum(last_inst)].isNoReturn();
11336 return tags[@backingInt(last_inst)].isNoReturn();
1133711337 }
1133811338
1133911339 /// TODO all uses of this should be replaced with uses of `endsWithNoReturn`.
1134011340 fn refIsNoReturn(gz: GenZir, inst_ref: Zir.Inst.Ref) bool {
1134111341 if (inst_ref == .unreachable_value) return true;
1134211342 if (inst_ref.toIndex()) |inst_index| {
11343 return gz.astgen.instructions.items(.tag)[@intFromEnum(inst_index)].isNoReturn();
11343 return gz.astgen.instructions.items(.tag)[@backingInt(inst_index)].isNoReturn();
1134411344 }
1134511345 return false;
1134611346 }
......@@ -11391,7 +11391,7 @@ const GenZir = struct {
1139111391 @typeInfo(Zir.Inst.BoolBr).@"struct".field_names.len + body_len,
1139211392 );
1139311393 const zir_datas = astgen.instructions.items(.data);
11394 zir_datas[@intFromEnum(bool_br)].pl_node.payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.BoolBr{
11394 zir_datas[@backingInt(bool_br)].pl_node.payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.BoolBr{
1139511395 .lhs = bool_br_lhs,
1139611396 .body_len = body_len,
1139711397 });
......@@ -11408,14 +11408,14 @@ const GenZir = struct {
1140811408 const body_len = astgen.countBodyLenAfterFixups(body);
1140911409
1141011410 const zir_tags = astgen.instructions.items(.tag);
11411 assert(zir_tags[@intFromEnum(inst)] != .block_comptime); // use `setComptimeBlockBody` instead
11411 assert(zir_tags[@backingInt(inst)] != .block_comptime); // use `setComptimeBlockBody` instead
1141211412
1141311413 try astgen.extra.ensureUnusedCapacity(
1141411414 gpa,
1141511415 @typeInfo(Zir.Inst.Block).@"struct".field_names.len + body_len,
1141611416 );
1141711417 const zir_datas = astgen.instructions.items(.data);
11418 zir_datas[@intFromEnum(inst)].pl_node.payload_index = astgen.addExtraAssumeCapacity(
11418 zir_datas[@backingInt(inst)].pl_node.payload_index = astgen.addExtraAssumeCapacity(
1141911419 Zir.Inst.Block{ .body_len = body_len },
1142011420 );
1142111421 astgen.appendBodyWithFixups(body);
......@@ -11431,14 +11431,14 @@ const GenZir = struct {
1143111431 const body_len = astgen.countBodyLenAfterFixups(body);
1143211432
1143311433 const zir_tags = astgen.instructions.items(.tag);
11434 assert(zir_tags[@intFromEnum(inst)] == .block_comptime); // use `setBlockBody` instead
11434 assert(zir_tags[@backingInt(inst)] == .block_comptime); // use `setBlockBody` instead
1143511435
1143611436 try astgen.extra.ensureUnusedCapacity(
1143711437 gpa,
1143811438 @typeInfo(Zir.Inst.BlockComptime).@"struct".field_names.len + body_len,
1143911439 );
1144011440 const zir_datas = astgen.instructions.items(.data);
11441 zir_datas[@intFromEnum(inst)].pl_node.payload_index = astgen.addExtraAssumeCapacity(
11441 zir_datas[@backingInt(inst)].pl_node.payload_index = astgen.addExtraAssumeCapacity(
1144211442 Zir.Inst.BlockComptime{
1144311443 .reason = comptime_reason,
1144411444 .body_len = body_len,
......@@ -11459,7 +11459,7 @@ const GenZir = struct {
1145911459 @typeInfo(Zir.Inst.Try).@"struct".field_names.len + body_len,
1146011460 );
1146111461 const zir_datas = astgen.instructions.items(.data);
11462 zir_datas[@intFromEnum(inst)].pl_node.payload_index = astgen.addExtraAssumeCapacity(
11462 zir_datas[@backingInt(inst)].pl_node.payload_index = astgen.addExtraAssumeCapacity(
1146311463 Zir.Inst.Try{
1146411464 .operand = operand,
1146511465 .body_len = body_len,
......@@ -11507,7 +11507,7 @@ const GenZir = struct {
1150711507 const astgen = gz.astgen;
1150811508 const gpa = astgen.gpa;
1150911509 const ret_ref = if (args.ret_ref == .void_type) .none else args.ret_ref;
11510 const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
11510 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len));
1151111511
1151211512 try gz.instructions.ensureUnusedCapacity(gpa, 1);
1151311513 try astgen.instructions.ensureUnusedCapacity(gpa, 1);
......@@ -11598,11 +11598,11 @@ const GenZir = struct {
1159811598 if (cc_body.len != 0) {
1159911599 astgen.extra.appendAssumeCapacity(astgen.countBodyLenAfterFixups(cc_body));
1160011600 astgen.appendBodyWithFixups(cc_body);
11601 const break_extra = zir_datas[@intFromEnum(cc_body[cc_body.len - 1])].@"break".payload_index;
11601 const break_extra = zir_datas[@backingInt(cc_body[cc_body.len - 1])].@"break".payload_index;
1160211602 astgen.extra.items[break_extra + std.meta.fieldIndex(Zir.Inst.Break, "block_inst").?] =
11603 @intFromEnum(new_index);
11603 @backingInt(new_index);
1160411604 } else if (args.cc_ref != .none) {
11605 astgen.extra.appendAssumeCapacity(@intFromEnum(args.cc_ref));
11605 astgen.extra.appendAssumeCapacity(@backingInt(args.cc_ref));
1160611606 }
1160711607 if (ret_body.len != 0) {
1160811608 astgen.extra.appendAssumeCapacity(
......@@ -11611,11 +11611,11 @@ const GenZir = struct {
1161111611 );
1161211612 astgen.appendBodyWithFixups(args.ret_param_refs);
1161311613 astgen.appendBodyWithFixups(ret_body);
11614 const break_extra = zir_datas[@intFromEnum(ret_body[ret_body.len - 1])].@"break".payload_index;
11614 const break_extra = zir_datas[@backingInt(ret_body[ret_body.len - 1])].@"break".payload_index;
1161511615 astgen.extra.items[break_extra + std.meta.fieldIndex(Zir.Inst.Break, "block_inst").?] =
11616 @intFromEnum(new_index);
11616 @backingInt(new_index);
1161711617 } else if (ret_ref != .none) {
11618 astgen.extra.appendAssumeCapacity(@intFromEnum(ret_ref));
11618 astgen.extra.appendAssumeCapacity(@backingInt(ret_ref));
1161911619 }
1162011620
1162111621 if (args.noalias_bits != 0) {
......@@ -11652,11 +11652,11 @@ const GenZir = struct {
1165211652 astgen.appendBodyWithFixups(args.ret_param_refs);
1165311653 astgen.appendBodyWithFixups(ret_body);
1165411654
11655 const break_extra = zir_datas[@intFromEnum(ret_body[ret_body.len - 1])].@"break".payload_index;
11655 const break_extra = zir_datas[@backingInt(ret_body[ret_body.len - 1])].@"break".payload_index;
1165611656 astgen.extra.items[break_extra + std.meta.fieldIndex(Zir.Inst.Break, "block_inst").?] =
11657 @intFromEnum(new_index);
11657 @backingInt(new_index);
1165811658 } else if (ret_ref != .none) {
11659 astgen.extra.appendAssumeCapacity(@intFromEnum(ret_ref));
11659 astgen.extra.appendAssumeCapacity(@backingInt(ret_ref));
1166011660 }
1166111661 astgen.appendBodyWithFixupsExtraRefsArrayList(&astgen.extra, body, args.param_insts);
1166211662 astgen.extra.appendSliceAssumeCapacity(src_locs_and_hash);
......@@ -11704,11 +11704,11 @@ const GenZir = struct {
1170411704 try astgen.instructions.ensureUnusedCapacity(gpa, 1);
1170511705 try astgen.string_bytes.ensureUnusedCapacity(gpa, @sizeOf(std.math.big.Limb) * limbs.len);
1170611706
11707 const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
11707 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len));
1170811708 astgen.instructions.appendAssumeCapacity(.{
1170911709 .tag = .int_big,
1171011710 .data = .{ .str = .{
11711 .start = @enumFromInt(astgen.string_bytes.items.len),
11711 .start = @fromBackingInt(@intCast(astgen.string_bytes.items.len)),
1171211712 .len = @intCast(limbs.len),
1171311713 } },
1171411714 });
......@@ -11749,7 +11749,7 @@ const GenZir = struct {
1174911749 src_node: Ast.Node.Index,
1175011750 ) !Zir.Inst.Index {
1175111751 assert(operand != .none);
11752 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
11752 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
1175311753 try gz.astgen.instructions.append(gz.astgen.gpa, .{
1175411754 .tag = tag,
1175511755 .data = .{ .un_node = .{
......@@ -11772,7 +11772,7 @@ const GenZir = struct {
1177211772 try gz.astgen.instructions.ensureUnusedCapacity(gpa, 1);
1177311773
1177411774 const payload_index = try gz.astgen.addExtra(extra);
11775 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
11775 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
1177611776 gz.astgen.instructions.appendAssumeCapacity(.{
1177711777 .tag = tag,
1177811778 .data = .{ .pl_node = .{
......@@ -11829,7 +11829,7 @@ const GenZir = struct {
1182911829 gz.astgen.appendBodyWithFixupsExtraRefsArrayList(&gz.astgen.extra, param_body, prev_param_insts);
1183011830 param_gz.unstack();
1183111831
11832 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
11832 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
1183311833 gz.astgen.instructions.appendAssumeCapacity(.{
1183411834 .tag = tag,
1183511835 .data = .{ .pl_tok = .{
......@@ -11842,7 +11842,7 @@ const GenZir = struct {
1184211842 }
1184311843
1184411844 fn addStdLangValue(gz: *GenZir, src_node: Ast.Node.Index, val: Zir.Inst.StdLangValue) !Zir.Inst.Ref {
11845 return addExtendedNodeSmall(gz, .std_lang_value, src_node, @intFromEnum(val));
11845 return addExtendedNodeSmall(gz, .std_lang_value, src_node, @backingInt(val));
1184611846 }
1184711847
1184811848 fn addExtendedPayload(gz: *GenZir, opcode: Zir.Inst.Extended, extra: anytype) !Zir.Inst.Ref {
......@@ -11861,7 +11861,7 @@ const GenZir = struct {
1186111861 try gz.astgen.instructions.ensureUnusedCapacity(gpa, 1);
1186211862
1186311863 const payload_index = try gz.astgen.addExtra(extra);
11864 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
11864 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
1186511865 gz.astgen.instructions.appendAssumeCapacity(.{
1186611866 .tag = .extended,
1186711867 .data = .{ .extended = .{
......@@ -11893,7 +11893,7 @@ const GenZir = struct {
1189311893 const payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.NodeMultiOp{
1189411894 .src_node = gz.nodeIndexToRelative(node),
1189511895 });
11896 const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
11896 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len));
1189711897 astgen.instructions.appendAssumeCapacity(.{
1189811898 .tag = .extended,
1189911899 .data = .{ .extended = .{
......@@ -11918,7 +11918,7 @@ const GenZir = struct {
1191811918
1191911919 try gz.instructions.ensureUnusedCapacity(gpa, 1);
1192011920 try astgen.instructions.ensureUnusedCapacity(gpa, 1);
11921 const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
11921 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len));
1192211922 astgen.instructions.appendAssumeCapacity(.{
1192311923 .tag = .extended,
1192411924 .data = .{ .extended = .{
......@@ -11942,13 +11942,13 @@ const GenZir = struct {
1194211942
1194311943 try gz.instructions.ensureUnusedCapacity(gpa, 1);
1194411944 try astgen.instructions.ensureUnusedCapacity(gpa, 1);
11945 const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
11945 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len));
1194611946 astgen.instructions.appendAssumeCapacity(.{
1194711947 .tag = .extended,
1194811948 .data = .{ .extended = .{
1194911949 .opcode = opcode,
1195011950 .small = small,
11951 .operand = @bitCast(@intFromEnum(gz.nodeIndexToRelative(src_node))),
11951 .operand = @bitCast(@backingInt(gz.nodeIndexToRelative(src_node))),
1195211952 } },
1195311953 });
1195411954 gz.instructions.appendAssumeCapacity(new_index);
......@@ -11980,7 +11980,7 @@ const GenZir = struct {
1198011980 abs_tok_index: Ast.TokenIndex,
1198111981 ) !Zir.Inst.Index {
1198211982 const astgen = gz.astgen;
11983 const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
11983 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len));
1198411984 assert(operand != .none);
1198511985 try astgen.instructions.append(astgen.gpa, .{
1198611986 .tag = tag,
......@@ -12130,7 +12130,7 @@ const GenZir = struct {
1213012130 try gz.astgen.instructions.ensureUnusedCapacity(gpa, 1);
1213112131 try gz.astgen.extra.ensureUnusedCapacity(gpa, @typeInfo(Zir.Inst.Break).@"struct".field_names.len);
1213212132
12133 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
12133 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
1213412134 gz.astgen.instructions.appendAssumeCapacity(.{
1213512135 .tag = tag,
1213612136 .data = .{ .@"break" = .{
......@@ -12228,7 +12228,7 @@ const GenZir = struct {
1222812228 .data = .{ .extended = .{
1222912229 .opcode = opcode,
1223012230 .small = undefined,
12231 .operand = @bitCast(@intFromEnum(gz.nodeIndexToRelative(src_node))),
12231 .operand = @bitCast(@backingInt(gz.nodeIndexToRelative(src_node))),
1223212232 } },
1223312233 });
1223412234 }
......@@ -12259,10 +12259,10 @@ const GenZir = struct {
1225912259 .src_node = gz.nodeIndexToRelative(args.node),
1226012260 });
1226112261 if (args.type_inst != .none) {
12262 astgen.extra.appendAssumeCapacity(@intFromEnum(args.type_inst));
12262 astgen.extra.appendAssumeCapacity(@backingInt(args.type_inst));
1226312263 }
1226412264 if (args.align_inst != .none) {
12265 astgen.extra.appendAssumeCapacity(@intFromEnum(args.align_inst));
12265 astgen.extra.appendAssumeCapacity(@backingInt(args.align_inst));
1226612266 }
1226712267
1226812268 const has_type: u4 = @intFromBool(args.type_inst != .none);
......@@ -12271,7 +12271,7 @@ const GenZir = struct {
1227112271 const is_comptime: u4 = @intFromBool(args.is_comptime);
1227212272 const small: u16 = has_type | (has_align << 1) | (is_const << 2) | (is_comptime << 3);
1227312273
12274 const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
12274 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len));
1227512275 astgen.instructions.appendAssumeCapacity(.{
1227612276 .tag = .extended,
1227712277 .data = .{ .extended = .{
......@@ -12326,7 +12326,7 @@ const GenZir = struct {
1232612326 .inputs_len = @intCast(args.inputs.len),
1232712327 };
1232812328
12329 const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
12329 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len));
1233012330 astgen.instructions.appendAssumeCapacity(.{
1233112331 .tag = .extended,
1233212332 .data = .{ .extended = .{
......@@ -12343,7 +12343,7 @@ const GenZir = struct {
1234312343 /// Does *not* append the block instruction to the scope.
1234412344 /// Leaves the `payload_index` field undefined.
1234512345 fn makeBlockInst(gz: *GenZir, tag: Zir.Inst.Tag, node: Ast.Node.Index) !Zir.Inst.Index {
12346 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
12346 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
1234712347 const gpa = gz.astgen.gpa;
1234812348 try gz.astgen.instructions.append(gpa, .{
1234912349 .tag = tag,
......@@ -12359,7 +12359,7 @@ const GenZir = struct {
1235912359 /// Does *not* append the block instruction to the scope.
1236012360 /// Leaves the `payload_index` field undefined. Use `setDeclaration` to finalize.
1236112361 fn makeDeclaration(gz: *GenZir, node: Ast.Node.Index) !Zir.Inst.Index {
12362 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
12362 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
1236312363 try gz.astgen.instructions.append(gz.astgen.gpa, .{
1236412364 .tag = .declaration,
1236512365 .data = .{ .declaration = .{
......@@ -12375,7 +12375,7 @@ const GenZir = struct {
1237512375 fn addCondBr(gz: *GenZir, tag: Zir.Inst.Tag, node: Ast.Node.Index) !Zir.Inst.Index {
1237612376 const gpa = gz.astgen.gpa;
1237712377 try gz.instructions.ensureUnusedCapacity(gpa, 1);
12378 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
12378 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
1237912379 try gz.astgen.instructions.append(gpa, .{
1238012380 .tag = tag,
1238112381 .data = .{ .pl_node = .{
......@@ -12436,7 +12436,7 @@ const GenZir = struct {
1243612436 astgen.extra.appendSliceAssumeCapacity(@ptrCast(args.capture_names));
1243712437 astgen.extra.appendSliceAssumeCapacity(args.remaining);
1243812438
12439 astgen.instructions.set(@intFromEnum(inst), .{
12439 astgen.instructions.set(@backingInt(inst), .{
1244012440 .tag = .extended,
1244112441 .data = .{ .extended = .{
1244212442 .opcode = .struct_decl,
......@@ -12507,7 +12507,7 @@ const GenZir = struct {
1250712507 astgen.extra.appendSliceAssumeCapacity(@ptrCast(args.capture_names));
1250812508 astgen.extra.appendSliceAssumeCapacity(args.remaining);
1250912509
12510 astgen.instructions.set(@intFromEnum(inst), .{
12510 astgen.instructions.set(@backingInt(inst), .{
1251112511 .tag = .extended,
1251212512 .data = .{ .extended = .{
1251312513 .opcode = .union_decl,
......@@ -12571,7 +12571,7 @@ const GenZir = struct {
1257112571 astgen.extra.appendSliceAssumeCapacity(@ptrCast(args.capture_names));
1257212572 astgen.extra.appendSliceAssumeCapacity(args.remaining);
1257312573
12574 astgen.instructions.set(@intFromEnum(inst), .{
12574 astgen.instructions.set(@backingInt(inst), .{
1257512575 .tag = .extended,
1257612576 .data = .{ .extended = .{
1257712577 .opcode = .enum_decl,
......@@ -12620,7 +12620,7 @@ const GenZir = struct {
1262012620 astgen.extra.appendSliceAssumeCapacity(@ptrCast(args.capture_names));
1262112621 astgen.extra.appendSliceAssumeCapacity(@ptrCast(args.decls));
1262212622
12623 astgen.instructions.set(@intFromEnum(inst), .{
12623 astgen.instructions.set(@backingInt(inst), .{
1262412624 .tag = .extended,
1262512625 .data = .{ .extended = .{
1262612626 .opcode = .opaque_decl,
......@@ -12643,7 +12643,7 @@ const GenZir = struct {
1264312643 try gz.instructions.ensureUnusedCapacity(gpa, 1);
1264412644 try gz.astgen.instructions.ensureUnusedCapacity(gpa, 1);
1264512645
12646 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
12646 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
1264712647 gz.astgen.instructions.appendAssumeCapacity(inst);
1264812648 gz.instructions.appendAssumeCapacity(new_index);
1264912649 return new_index;
......@@ -12654,7 +12654,7 @@ const GenZir = struct {
1265412654 try gz.instructions.ensureUnusedCapacity(gpa, 1);
1265512655 try gz.astgen.instructions.ensureUnusedCapacity(gpa, 1);
1265612656
12657 const new_index: Zir.Inst.Index = @enumFromInt(gz.astgen.instructions.len);
12657 const new_index: Zir.Inst.Index = @fromBackingInt(@intCast(gz.astgen.instructions.len));
1265812658 gz.astgen.instructions.len += 1;
1265912659 gz.instructions.appendAssumeCapacity(new_index);
1266012660 return new_index;
......@@ -12683,7 +12683,7 @@ const GenZir = struct {
1268312683/// This can only be for short-lived references; the memory becomes invalidated
1268412684/// when another string is added.
1268512685fn nullTerminatedString(astgen: AstGen, index: Zir.NullTerminatedString) [*:0]const u8 {
12686 return @ptrCast(astgen.string_bytes.items[@intFromEnum(index)..]);
12686 return @ptrCast(astgen.string_bytes.items[@backingInt(index)..]);
1268712687}
1268812688
1268912689/// Local variables shadowing detection, including function parameters.
......@@ -13136,7 +13136,7 @@ fn scanContainer(
1313613136}
1313713137
1313813138fn appendPlaceholder(astgen: *AstGen) Allocator.Error!Zir.Inst.Index {
13139 const inst: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
13139 const inst: Zir.Inst.Index = @fromBackingInt(@intCast(astgen.instructions.len));
1314013140 try astgen.instructions.append(astgen.gpa, .{
1314113141 .tag = .extended,
1314213142 .data = .{ .extended = .{
......@@ -13183,7 +13183,7 @@ fn appendPossiblyRefdBodyInst(
1318313183 list: *std.ArrayList(u32),
1318413184 body_inst: Zir.Inst.Index,
1318513185) void {
13186 list.appendAssumeCapacity(@intFromEnum(body_inst));
13186 list.appendAssumeCapacity(@backingInt(body_inst));
1318713187 const kv = astgen.ref_table.fetchRemove(body_inst) orelse return;
1318813188 const ref_inst = kv.value;
1318913189 return appendPossiblyRefdBodyInst(astgen, list, ref_inst);
......@@ -13221,8 +13221,8 @@ fn emitDbgStmt(gz: *GenZir, lc: LineColumn) !void {
1322113221 if (gz.instructions.items.len > gz.instructions_top) {
1322213222 const astgen = gz.astgen;
1322313223 const last = gz.instructions.items[gz.instructions.items.len - 1];
13224 if (astgen.instructions.items(.tag)[@intFromEnum(last)] == .dbg_stmt) {
13225 astgen.instructions.items(.data)[@intFromEnum(last)].dbg_stmt = .{
13224 if (astgen.instructions.items(.tag)[@backingInt(last)] == .dbg_stmt) {
13225 astgen.instructions.items(.data)[@backingInt(last)].dbg_stmt = .{
1322613226 .line = lc[0],
1322713227 .column = lc[1],
1322813228 };
......@@ -13245,7 +13245,7 @@ fn emitDbgStmt(gz: *GenZir, lc: LineColumn) !void {
1324513245fn emitDbgStmtForceCurrentIndex(gz: *GenZir, lc: LineColumn) !void {
1324613246 const astgen = gz.astgen;
1324713247 if (gz.instructions.items.len > gz.instructions_top and
13248 @intFromEnum(gz.instructions.items[gz.instructions.items.len - 1]) == astgen.instructions.len - 1)
13248 @backingInt(gz.instructions.items[gz.instructions.items.len - 1]) == astgen.instructions.len - 1)
1324913249 {
1325013250 const last = astgen.instructions.len - 1;
1325113251 if (astgen.instructions.items(.tag)[last] == .dbg_stmt) {
......@@ -13523,14 +13523,14 @@ fn setDeclaration(
1352313523 .flags_0 = flags_arr[0],
1352413524 .flags_1 = flags_arr[1],
1352513525 };
13526 astgen.instructions.items(.data)[@intFromEnum(decl_inst)].declaration.payload_index =
13526 astgen.instructions.items(.data)[@backingInt(decl_inst)].declaration.payload_index =
1352713527 astgen.addExtraAssumeCapacity(extra);
1352813528
1352913529 if (id.hasName()) {
13530 astgen.extra.appendAssumeCapacity(@intFromEnum(args.name));
13530 astgen.extra.appendAssumeCapacity(@backingInt(args.name));
1353113531 }
1353213532 if (id.hasLibName()) {
13533 astgen.extra.appendAssumeCapacity(@intFromEnum(args.lib_name));
13533 astgen.extra.appendAssumeCapacity(@backingInt(args.lib_name));
1353413534 }
1353513535 if (id.hasTypeBody()) {
1353613536 astgen.extra.appendAssumeCapacity(type_len);
lib/std/zig/ErrorBundle.zig+21-21
......@@ -107,17 +107,17 @@ pub fn getMessages(eb: ErrorBundle) []const MessageIndex {
107107}
108108
109109pub fn getErrorMessage(eb: ErrorBundle, index: MessageIndex) ErrorMessage {
110 return eb.extraData(ErrorMessage, @intFromEnum(index)).data;
110 return eb.extraData(ErrorMessage, @backingInt(index)).data;
111111}
112112
113113pub fn getSourceLocation(eb: ErrorBundle, index: SourceLocationIndex) SourceLocation {
114114 assert(index != .none);
115 return eb.extraData(SourceLocation, @intFromEnum(index)).data;
115 return eb.extraData(SourceLocation, @backingInt(index)).data;
116116}
117117
118118pub fn getNotes(eb: ErrorBundle, index: MessageIndex) []const MessageIndex {
119119 const notes_len = eb.getErrorMessage(index).notes_len;
120 const start = @intFromEnum(index) + @typeInfo(ErrorMessage).@"struct".field_names.len;
120 const start = @backingInt(index) + @typeInfo(ErrorMessage).@"struct".field_names.len;
121121 return @as([]const MessageIndex, @ptrCast(eb.extra[start..][0..notes_len]));
122122}
123123
......@@ -135,8 +135,8 @@ fn extraData(eb: ErrorBundle, comptime T: type, index: usize) struct { data: T,
135135 inline for (field_names, field_types) |field_name, field_type| {
136136 @field(result, field_name) = switch (field_type) {
137137 u32 => eb.extra[i],
138 MessageIndex => @as(MessageIndex, @enumFromInt(eb.extra[i])),
139 SourceLocationIndex => @as(SourceLocationIndex, @enumFromInt(eb.extra[i])),
138 MessageIndex => @as(MessageIndex, @fromBackingInt(@intCast(eb.extra[i]))),
139 SourceLocationIndex => @as(SourceLocationIndex, @fromBackingInt(@intCast(eb.extra[i]))),
140140 else => @compileError("bad field type"),
141141 };
142142 i += 1;
......@@ -209,7 +209,7 @@ fn renderErrorMessage(
209209 const w = t.writer;
210210 const err_msg = eb.getErrorMessage(err_msg_index);
211211 if (err_msg.src_loc != .none) {
212 const src = eb.extraData(SourceLocation, @intFromEnum(err_msg.src_loc));
212 const src = eb.extraData(SourceLocation, @backingInt(err_msg.src_loc));
213213 var prefix: Writer.Discarding = .init(&.{});
214214 try w.splatByteAll(' ', indent);
215215 prefix.count += indent;
......@@ -445,20 +445,20 @@ pub const Wip = struct {
445445 try wip.addRootErrorMessage(msg);
446446 const notes_start = try wip.reserveNotes(@intCast(notes.len));
447447 for (notes_start.., notes) |i, note| {
448 wip.extra.items[i] = @intFromEnum(wip.addErrorMessageAssumeCapacity(note));
448 wip.extra.items[i] = @backingInt(wip.addErrorMessageAssumeCapacity(note));
449449 }
450450 }
451451
452452 pub fn addErrorMessage(wip: *Wip, em: ErrorMessage) Allocator.Error!MessageIndex {
453 return @enumFromInt(try addExtra(wip, em));
453 return @fromBackingInt(@intCast(try addExtra(wip, em)));
454454 }
455455
456456 pub fn addErrorMessageAssumeCapacity(wip: *Wip, em: ErrorMessage) MessageIndex {
457 return @enumFromInt(addExtraAssumeCapacity(wip, em));
457 return @fromBackingInt(@intCast(addExtraAssumeCapacity(wip, em)));
458458 }
459459
460460 pub fn addSourceLocation(wip: *Wip, sl: SourceLocation) Allocator.Error!SourceLocationIndex {
461 return @enumFromInt(try addExtra(wip, sl));
461 return @fromBackingInt(@intCast(try addExtra(wip, sl)));
462462 }
463463
464464 pub fn addReferenceTrace(wip: *Wip, rt: ReferenceTrace) Allocator.Error!void {
......@@ -477,7 +477,7 @@ pub const Wip = struct {
477477 const notes_start = wip.reserveNotes(@intCast(other_list.len)) catch unreachable;
478478 for (notes_start.., other_list) |note, message| {
479479 // This line can cause `wip.extra.items` to be resized.
480 const note_index = @intFromEnum(wip.addOtherMessage(other, message) catch unreachable);
480 const note_index = @backingInt(wip.addOtherMessage(other, message) catch unreachable);
481481 wip.extra.items[note] = note_index;
482482 }
483483 }
......@@ -512,7 +512,7 @@ pub const Wip = struct {
512512 src_path: []const u8,
513513 ) !void {
514514 const Zir = std.zig.Zir;
515 const payload_index = zir.extra[@intFromEnum(Zir.ExtraIndex.compile_errors)];
515 const payload_index = zir.extra[@backingInt(Zir.ExtraIndex.compile_errors)];
516516 assert(payload_index != 0);
517517
518518 const header = zir.extraData(Zir.Inst.CompileErrors, payload_index);
......@@ -568,7 +568,7 @@ pub const Wip = struct {
568568 const loc = std.zig.findLineColumn(source, span.main);
569569
570570 // This line can cause `wip.extra.items` to be resized.
571 const note_index = @intFromEnum(try eb.addErrorMessage(.{
571 const note_index = @backingInt(try eb.addErrorMessage(.{
572572 .msg = try eb.addString(msg),
573573 .src_loc = try eb.addSourceLocation(.{
574574 .src_path = try eb.addString(src_path),
......@@ -607,7 +607,7 @@ pub const Wip = struct {
607607 const end = token_start + @as(u32, @intCast(tree.tokenSlice(token).len));
608608 break :span .{ .start = start, .end = end, .main = start };
609609 } else {
610 break :span tree.nodeToSpan(@enumFromInt(err.node_or_offset));
610 break :span tree.nodeToSpan(@fromBackingInt(@intCast(err.node_or_offset)));
611611 }
612612 };
613613 const err_loc = std.zig.findLineColumn(source, err_span.main);
......@@ -636,13 +636,13 @@ pub const Wip = struct {
636636 const end = token_start + @as(u32, @intCast(tree.tokenSlice(token).len));
637637 break :span .{ .start = start, .end = end, .main = start };
638638 } else {
639 break :span tree.nodeToSpan(@enumFromInt(note.node_or_offset));
639 break :span tree.nodeToSpan(@fromBackingInt(@intCast(note.node_or_offset)));
640640 }
641641 };
642642 const note_loc = std.zig.findLineColumn(source, note_span.main);
643643
644644 // This line can cause `wip.extra.items` to be resized.
645 const note_index = @intFromEnum(try eb.addErrorMessage(.{
645 const note_index = @backingInt(try eb.addErrorMessage(.{
646646 .msg = try eb.addString(note.msg.get(zoir)),
647647 .src_loc = try eb.addSourceLocation(.{
648648 .src_path = try eb.addString(src_path),
......@@ -674,7 +674,7 @@ pub const Wip = struct {
674674 });
675675 const notes_start = try wip.reserveNotes(other_msg.notes_len);
676676 for (notes_start.., other.getNotes(msg_index)) |note, other_note| {
677 wip.extra.items[note] = @intFromEnum(try wip.addOtherMessage(other, other_note));
677 wip.extra.items[note] = @backingInt(try wip.addOtherMessage(other, other_note));
678678 }
679679 return msg;
680680 }
......@@ -691,7 +691,7 @@ pub const Wip = struct {
691691 defer ref_traces.deinit(wip.gpa);
692692
693693 if (other_sl.reference_trace_len > 0) {
694 var ref_index = other.extraData(SourceLocation, @intFromEnum(index)).end;
694 var ref_index = other.extraData(SourceLocation, @backingInt(index)).end;
695695 for (0..other_sl.reference_trace_len) |_| {
696696 const other_ref_trace_ed = other.extraData(ReferenceTrace, ref_index);
697697 const other_ref_trace = other_ref_trace_ed.data;
......@@ -753,8 +753,8 @@ pub const Wip = struct {
753753 inline for (field_names, field_types) |field_name, field_type| {
754754 wip.extra.items[i] = switch (field_type) {
755755 u32 => @field(extra, field_name),
756 MessageIndex => @intFromEnum(@field(extra, field_name)),
757 SourceLocationIndex => @intFromEnum(@field(extra, field_name)),
756 MessageIndex => @backingInt(@field(extra, field_name)),
757 SourceLocationIndex => @backingInt(@field(extra, field_name)),
758758 else => @compileError("bad field type"),
759759 };
760760 i += 1;
......@@ -811,7 +811,7 @@ pub const Wip = struct {
811811 .notes_len = 1,
812812 });
813813 const i = try wip.reserveNotes(1);
814 const note_index = @intFromEnum(wip.addErrorMessageAssumeCapacity(.{
814 const note_index = @backingInt(wip.addErrorMessageAssumeCapacity(.{
815815 .msg = try wip.addString("this is a note"),
816816 .src_loc = try wip.addSourceLocation(.{
817817 .src_path = try wip.addString("bar"),
lib/std/zig/Parse.zig+15-15
......@@ -34,15 +34,15 @@ fn tokenStart(p: *const Parse, token_index: TokenIndex) Ast.ByteOffset {
3434}
3535
3636fn nodeTag(p: *const Parse, node: Node.Index) Node.Tag {
37 return p.nodes.items(.tag)[@intFromEnum(node)];
37 return p.nodes.items(.tag)[@backingInt(node)];
3838}
3939
4040fn nodeMainToken(p: *const Parse, node: Node.Index) TokenIndex {
41 return p.nodes.items(.main_token)[@intFromEnum(node)];
41 return p.nodes.items(.main_token)[@backingInt(node)];
4242}
4343
4444fn nodeData(p: *const Parse, node: Node.Index) Node.Data {
45 return p.nodes.items(.data)[@intFromEnum(node)];
45 return p.nodes.items(.data)[@backingInt(node)];
4646}
4747
4848const SmallSpan = union(enum) {
......@@ -69,20 +69,20 @@ const Members = struct {
6969fn listToSpan(p: *Parse, list: []const Node.Index) Allocator.Error!Node.SubRange {
7070 try p.extra_data.appendSlice(p.gpa, @ptrCast(list));
7171 return .{
72 .start = @enumFromInt(p.extra_data.items.len - list.len),
73 .end = @enumFromInt(p.extra_data.items.len),
72 .start = @fromBackingInt(@intCast(p.extra_data.items.len - list.len)),
73 .end = @fromBackingInt(@intCast(p.extra_data.items.len)),
7474 };
7575}
7676
7777fn addNode(p: *Parse, elem: Ast.Node) Allocator.Error!Node.Index {
78 const result: Node.Index = @enumFromInt(p.nodes.len);
78 const result: Node.Index = @fromBackingInt(@intCast(p.nodes.len));
7979 try p.nodes.append(p.gpa, elem);
8080 return result;
8181}
8282
8383fn setNode(p: *Parse, i: usize, elem: Ast.Node) Node.Index {
8484 p.nodes.set(i, elem);
85 return @enumFromInt(i);
85 return @fromBackingInt(@intCast(i));
8686}
8787
8888fn reserveNode(p: *Parse, tag: Ast.Node.Tag) !usize {
......@@ -105,14 +105,14 @@ fn unreserveNode(p: *Parse, node_index: usize) void {
105105fn addExtra(p: *Parse, extra: anytype) Allocator.Error!ExtraIndex {
106106 const info = @typeInfo(@TypeOf(extra)).@"struct";
107107 try p.extra_data.ensureUnusedCapacity(p.gpa, info.field_names.len);
108 const result: ExtraIndex = @enumFromInt(p.extra_data.items.len);
108 const result: ExtraIndex = @fromBackingInt(@intCast(p.extra_data.items.len));
109109 inline for (info.field_names, info.field_types) |field_name, field_type| {
110110 const data: u32 = switch (field_type) {
111111 Node.Index,
112112 Node.OptionalIndex,
113113 OptionalTokenIndex,
114114 ExtraIndex,
115 => @intFromEnum(@field(extra, field_name)),
115 => @backingInt(@field(extra, field_name)),
116116 TokenIndex,
117117 => @field(extra, field_name),
118118 else => @compileError("unexpected field type"),
......@@ -796,9 +796,9 @@ fn parseFnProto(p: *Parse) !?Node.Index {
796796
797797fn setVarDeclInitExpr(p: *Parse, var_decl: Node.Index, init_expr: Node.OptionalIndex) void {
798798 const init_expr_result = switch (p.nodeTag(var_decl)) {
799 .simple_var_decl => &p.nodes.items(.data)[@intFromEnum(var_decl)].opt_node_and_opt_node[1],
800 .aligned_var_decl => &p.nodes.items(.data)[@intFromEnum(var_decl)].node_and_opt_node[1],
801 .local_var_decl, .global_var_decl => &p.nodes.items(.data)[@intFromEnum(var_decl)].extra_and_opt_node[1],
799 .simple_var_decl => &p.nodes.items(.data)[@backingInt(var_decl)].opt_node_and_opt_node[1],
800 .aligned_var_decl => &p.nodes.items(.data)[@backingInt(var_decl)].node_and_opt_node[1],
801 .local_var_decl, .global_var_decl => &p.nodes.items(.data)[@backingInt(var_decl)].extra_and_opt_node[1],
802802 else => unreachable,
803803 };
804804 init_expr_result.* = init_expr;
......@@ -1114,7 +1114,7 @@ fn expectVarAssignStatement(p: *Parse, comptime_token: ?TokenIndex) !Node.Index
11141114
11151115 // An actual destructure! No need for any `comptime` wrapper here.
11161116
1117 const extra_start: ExtraIndex = @enumFromInt(p.extra_data.items.len);
1117 const extra_start: ExtraIndex = @fromBackingInt(@intCast(p.extra_data.items.len));
11181118 try p.extra_data.ensureUnusedCapacity(p.gpa, lhs_count + 1);
11191119 p.extra_data.appendAssumeCapacity(@intCast(lhs_count));
11201120 p.extra_data.appendSliceAssumeCapacity(@ptrCast(p.scratch.items[scratch_top..]));
......@@ -1488,7 +1488,7 @@ fn finishAssignDestructureExpr(p: *Parse, first_lhs: Node.Index) !Node.Index {
14881488 const lhs_count = p.scratch.items.len - scratch_top;
14891489 assert(lhs_count > 1); // we already had first_lhs, and must have at least one more lvalue
14901490
1491 const extra_start: ExtraIndex = @enumFromInt(p.extra_data.items.len);
1491 const extra_start: ExtraIndex = @fromBackingInt(@intCast(p.extra_data.items.len));
14921492 try p.extra_data.ensureUnusedCapacity(p.gpa, lhs_count + 1);
14931493 p.extra_data.appendAssumeCapacity(@intCast(lhs_count));
14941494 p.extra_data.appendSliceAssumeCapacity(@ptrCast(p.scratch.items[scratch_top..]));
......@@ -1579,7 +1579,7 @@ fn parseExprPrecedence(p: *Parse, min_prec: i32) Error!?Node.Index {
15791579
15801580 while (true) {
15811581 const tok_tag = p.tokenTag(p.tok_i);
1582 const info = operTable[@as(usize, @intCast(@intFromEnum(tok_tag)))];
1582 const info = operTable[@as(usize, @intCast(@backingInt(tok_tag)))];
15831583 if (info.prec < min_prec) {
15841584 break;
15851585 }
lib/std/zig/TokenSmith.zig+2-2
......@@ -248,8 +248,8 @@ pub fn list(t: *TokenSmith) TokenList.Slice {
248248 .capacity = t.tags_len,
249249 };
250250 comptime std.debug.assert(slice.ptrs.len == 2);
251 slice.ptrs[@intFromEnum(TokenList.Field.tag)] = @ptrCast(&t.tag_buf);
252 slice.ptrs[@intFromEnum(TokenList.Field.start)] = @ptrCast(&t.start_buf);
251 slice.ptrs[@backingInt(TokenList.Field.tag)] = @ptrCast(&t.tag_buf);
252 slice.ptrs[@backingInt(TokenList.Field.start)] = @ptrCast(&t.start_buf);
253253 return slice;
254254}
255255
lib/std/zig/Zir.zig+70-70
......@@ -84,13 +84,13 @@ pub fn extraData(code: Zir, comptime T: type, index: usize) ExtraData(T) {
8484 Ast.OptionalTokenIndex,
8585 Ast.Node.Index,
8686 Ast.Node.OptionalIndex,
87 => @enumFromInt(code.extra[i]),
87 => @fromBackingInt(@intCast(code.extra[i])),
8888
8989 Ast.TokenOffset,
9090 Ast.OptionalTokenOffset,
9191 Ast.Node.Offset,
9292 Ast.Node.OptionalOffset,
93 => @enumFromInt(@as(i32, @bitCast(code.extra[i]))),
93 => @fromBackingInt(@intCast(@as(i32, @bitCast(code.extra[i])))),
9494
9595 Inst.Call.Flags,
9696 Inst.BuiltinCall.Flags,
......@@ -118,7 +118,7 @@ pub const NullTerminatedString = enum(u32) {
118118
119119/// Given an index into `string_bytes` returns the null-terminated string found there.
120120pub fn nullTerminatedString(code: Zir, index: NullTerminatedString) [:0]const u8 {
121 const slice = code.string_bytes[@intFromEnum(index)..];
121 const slice = code.string_bytes[@backingInt(index)..];
122122 return slice[0..std.mem.findScalar(u8, slice, 0).? :0];
123123}
124124
......@@ -131,7 +131,7 @@ pub fn bodySlice(zir: Zir, start: usize, len: usize) []Inst.Index {
131131}
132132
133133pub fn hasCompileErrors(code: Zir) bool {
134 if (code.extra[@intFromEnum(ExtraIndex.compile_errors)] != 0) {
134 if (code.extra[@backingInt(ExtraIndex.compile_errors)] != 0) {
135135 return true;
136136 } else {
137137 assert(code.instructions.len != 0); // i.e. lowering did not fail
......@@ -2202,11 +2202,11 @@ pub const Inst = struct {
22022202 _,
22032203
22042204 pub fn toRef(i: Index) Inst.Ref {
2205 return @enumFromInt(Ref.static_len + @intFromEnum(i));
2205 return @fromBackingInt(@intCast(Ref.static_len + @backingInt(i)));
22062206 }
22072207
22082208 pub fn toOptional(i: Index) OptionalIndex {
2209 return @enumFromInt(@intFromEnum(i));
2209 return @fromBackingInt(@intCast(@backingInt(i)));
22102210 }
22112211 };
22122212
......@@ -2218,7 +2218,7 @@ pub const Inst = struct {
22182218 _,
22192219
22202220 pub fn unwrap(oi: OptionalIndex) ?Index {
2221 return if (oi == .none) null else @enumFromInt(@intFromEnum(oi));
2221 return if (oi == .none) null else @fromBackingInt(@intCast(@backingInt(oi)));
22222222 }
22232223 };
22242224
......@@ -2370,9 +2370,9 @@ pub const Inst = struct {
23702370
23712371 pub fn toIndex(inst: Ref) ?Index {
23722372 assert(inst != .none);
2373 const ref_int = @intFromEnum(inst);
2373 const ref_int = @backingInt(inst);
23742374 if (ref_int >= static_len) {
2375 return @enumFromInt(ref_int - static_len);
2375 return @fromBackingInt(@intCast(ref_int - static_len));
23762376 } else {
23772377 return null;
23782378 }
......@@ -2429,7 +2429,7 @@ pub const Inst = struct {
24292429 len: u32,
24302430
24312431 pub fn get(self: @This(), code: Zir) []const u8 {
2432 return code.string_bytes[@intFromEnum(self.start)..][0..self.len];
2432 return code.string_bytes[@backingInt(self.start)..][0..self.len];
24332433 }
24342434 },
24352435 str_tok: struct {
......@@ -3009,7 +3009,7 @@ pub const Inst = struct {
30093009 pub fn isNamedTest(name: Name, zir: Zir) bool {
30103010 return switch (name) {
30113011 .@"comptime", .unnamed_test => false,
3012 _ => zir.string_bytes[@intFromEnum(name)] == 0,
3012 _ => zir.string_bytes[@backingInt(name)] == 0,
30133013 };
30143014 }
30153015 pub fn toString(name: Name, zir: Zir) ?NullTerminatedString {
......@@ -3017,12 +3017,12 @@ pub const Inst = struct {
30173017 .@"comptime", .unnamed_test => return null,
30183018 _ => {},
30193019 }
3020 const idx: u32 = @intFromEnum(name);
3020 const idx: u32 = @backingInt(name);
30213021 if (zir.string_bytes[idx] == 0) {
30223022 // Named test
3023 return @enumFromInt(idx + 1);
3023 return @fromBackingInt(@intCast(idx + 1));
30243024 }
3025 return @enumFromInt(idx);
3025 return @fromBackingInt(@intCast(idx));
30263026 }
30273027 };
30283028
......@@ -3441,8 +3441,8 @@ pub const Inst = struct {
34413441
34423442 pub fn wrap(unwrapped: ItemInfo.Unwrapped) ItemInfo {
34433443 const data_uncasted: u32 = switch (unwrapped) {
3444 .enum_literal => |str_index| @intFromEnum(str_index),
3445 .error_value => |str_index| @intFromEnum(str_index),
3444 .enum_literal => |str_index| @backingInt(str_index),
3445 .error_value => |str_index| @backingInt(str_index),
34463446 .body_len => |body_len| body_len,
34473447 .under => 0,
34483448 };
......@@ -3451,8 +3451,8 @@ pub const Inst = struct {
34513451
34523452 pub fn unwrap(item_info: ItemInfo) ItemInfo.Unwrapped {
34533453 return switch (item_info.kind) {
3454 .enum_literal => .{ .enum_literal = @enumFromInt(item_info.data) },
3455 .error_value => .{ .error_value = @enumFromInt(item_info.data) },
3454 .enum_literal => .{ .enum_literal = @fromBackingInt(@intCast(item_info.data)) },
3455 .error_value => .{ .error_value = @fromBackingInt(@intCast(item_info.data)) },
34563456 .body_len => .{ .body_len = item_info.data },
34573457 .under => .under,
34583458 };
......@@ -3557,29 +3557,29 @@ pub const Inst = struct {
35573557 },
35583558 .instruction => |inst| .{
35593559 .tag = .instruction,
3560 .data = @intCast(@intFromEnum(inst)),
3560 .data = @intCast(@backingInt(inst)),
35613561 },
35623562 .instruction_load => |inst| .{
35633563 .tag = .instruction_load,
3564 .data = @intCast(@intFromEnum(inst)),
3564 .data = @intCast(@backingInt(inst)),
35653565 },
35663566 .decl_val => |str| .{
35673567 .tag = .decl_val,
3568 .data = @intCast(@intFromEnum(str)),
3568 .data = @intCast(@backingInt(str)),
35693569 },
35703570 .decl_ref => |str| .{
35713571 .tag = .decl_ref,
3572 .data = @intCast(@intFromEnum(str)),
3572 .data = @intCast(@backingInt(str)),
35733573 },
35743574 };
35753575 }
35763576 pub fn unwrap(cap: Capture) Unwrapped {
35773577 return switch (cap.tag) {
35783578 .nested => .{ .nested = @intCast(cap.data) },
3579 .instruction => .{ .instruction = @enumFromInt(cap.data) },
3580 .instruction_load => .{ .instruction_load = @enumFromInt(cap.data) },
3581 .decl_val => .{ .decl_val = @enumFromInt(cap.data) },
3582 .decl_ref => .{ .decl_ref = @enumFromInt(cap.data) },
3579 .instruction => .{ .instruction = @fromBackingInt(@intCast(cap.data)) },
3580 .instruction_load => .{ .instruction_load = @fromBackingInt(@intCast(cap.data)) },
3581 .decl_val => .{ .decl_val = @fromBackingInt(@intCast(cap.data)) },
3582 .decl_ref => .{ .decl_ref = @fromBackingInt(@intCast(cap.data)) },
35833583 };
35843584 }
35853585 };
......@@ -4084,8 +4084,8 @@ pub fn findTrackableFields(
40844084 var found_defers: std.AutoHashMapUnmanaged(u32, void) = .empty;
40854085 defer found_defers.deinit(gpa);
40864086
4087 assert(zir.instructions.items(.tag)[@intFromEnum(type_decl_inst)] == .extended);
4088 switch (zir.instructions.items(.data)[@intFromEnum(type_decl_inst)].extended.opcode) {
4087 assert(zir.instructions.items(.tag)[@backingInt(type_decl_inst)] == .extended);
4088 switch (zir.instructions.items(.data)[@backingInt(type_decl_inst)].extended.opcode) {
40894089 .struct_decl => {
40904090 const struct_decl = zir.getStructDecl(type_decl_inst);
40914091 var it = struct_decl.iterateFields();
......@@ -4128,7 +4128,7 @@ fn findTrackableInner(
41284128 const tags = zir.instructions.items(.tag);
41294129 const datas = zir.instructions.items(.data);
41304130
4131 switch (tags[@intFromEnum(inst)]) {
4131 switch (tags[@backingInt(inst)]) {
41324132 .declaration => unreachable,
41334133
41344134 // Boring instruction tags first. These have no body and are not declarations or type declarations.
......@@ -4369,7 +4369,7 @@ fn findTrackableInner(
43694369 => return contents.other.append(gpa, inst),
43704370
43714371 .extended => {
4372 const extended = datas[@intFromEnum(inst)].extended;
4372 const extended = datas[@backingInt(inst)].extended;
43734373 switch (extended.opcode) {
43744374 .value_placeholder => unreachable,
43754375
......@@ -4460,7 +4460,7 @@ fn findTrackableInner(
44604460 .func,
44614461 .func_inferred,
44624462 => {
4463 const inst_data = datas[@intFromEnum(inst)].pl_node;
4463 const inst_data = datas[@backingInt(inst)].pl_node;
44644464 const extra = zir.extraData(Inst.Func, inst_data.payload_index);
44654465
44664466 if (extra.data.body_len == 0) {
......@@ -4486,7 +4486,7 @@ fn findTrackableInner(
44864486 return zir.findTrackableBody(gpa, contents, defers, body);
44874487 },
44884488 .func_fancy => {
4489 const inst_data = datas[@intFromEnum(inst)].pl_node;
4489 const inst_data = datas[@backingInt(inst)].pl_node;
44904490 const extra = zir.extraData(Inst.FuncFancy, inst_data.payload_index);
44914491
44924492 if (extra.data.body_len == 0) {
......@@ -4534,19 +4534,19 @@ fn findTrackableInner(
45344534 .typeof_builtin,
45354535 .loop,
45364536 => {
4537 const inst_data = datas[@intFromEnum(inst)].pl_node;
4537 const inst_data = datas[@backingInt(inst)].pl_node;
45384538 const extra = zir.extraData(Inst.Block, inst_data.payload_index);
45394539 const body = zir.bodySlice(extra.end, extra.data.body_len);
45404540 return zir.findTrackableBody(gpa, contents, defers, body);
45414541 },
45424542 .block_comptime => {
4543 const inst_data = datas[@intFromEnum(inst)].pl_node;
4543 const inst_data = datas[@backingInt(inst)].pl_node;
45444544 const extra = zir.extraData(Inst.BlockComptime, inst_data.payload_index);
45454545 const body = zir.bodySlice(extra.end, extra.data.body_len);
45464546 return zir.findTrackableBody(gpa, contents, defers, body);
45474547 },
45484548 .condbr, .condbr_inline => {
4549 const inst_data = datas[@intFromEnum(inst)].pl_node;
4549 const inst_data = datas[@backingInt(inst)].pl_node;
45504550 const extra = zir.extraData(Inst.CondBr, inst_data.payload_index);
45514551 const then_body = zir.bodySlice(extra.end, extra.data.then_body_len);
45524552 const else_body = zir.bodySlice(extra.end + then_body.len, extra.data.else_body_len);
......@@ -4554,7 +4554,7 @@ fn findTrackableInner(
45544554 try zir.findTrackableBody(gpa, contents, defers, else_body);
45554555 },
45564556 .@"try", .try_ptr => {
4557 const inst_data = datas[@intFromEnum(inst)].pl_node;
4557 const inst_data = datas[@backingInt(inst)].pl_node;
45584558 const extra = zir.extraData(Inst.Try, inst_data.payload_index);
45594559 const body = zir.bodySlice(extra.end, extra.data.body_len);
45604560 try zir.findTrackableBody(gpa, contents, defers, body);
......@@ -4602,14 +4602,14 @@ fn findTrackableInner(
46024602 .suspend_block => @panic("TODO iterate suspend block"),
46034603
46044604 .param, .param_comptime => {
4605 const inst_data = datas[@intFromEnum(inst)].pl_tok;
4605 const inst_data = datas[@backingInt(inst)].pl_tok;
46064606 const extra = zir.extraData(Inst.Param, inst_data.payload_index);
46074607 const body = zir.bodySlice(extra.end, extra.data.type.body_len);
46084608 try zir.findTrackableBody(gpa, contents, defers, body);
46094609 },
46104610
46114611 inline .call, .field_call => |tag| {
4612 const inst_data = datas[@intFromEnum(inst)].pl_node;
4612 const inst_data = datas[@backingInt(inst)].pl_node;
46134613 const extra = zir.extraData(switch (tag) {
46144614 .call => Inst.Call,
46154615 .field_call => Inst.FieldCall,
......@@ -4625,7 +4625,7 @@ fn findTrackableInner(
46254625 }
46264626 },
46274627 .@"defer" => {
4628 const inst_data = datas[@intFromEnum(inst)].@"defer";
4628 const inst_data = datas[@backingInt(inst)].@"defer";
46294629 const gop = try defers.getOrPut(gpa, inst_data.index);
46304630 if (!gop.found_existing) {
46314631 const body = zir.bodySlice(inst_data.index, inst_data.len);
......@@ -4661,9 +4661,9 @@ pub const FnInfo = struct {
46614661pub fn getParamBody(zir: Zir, fn_inst: Inst.Index) []const Zir.Inst.Index {
46624662 const tags = zir.instructions.items(.tag);
46634663 const datas = zir.instructions.items(.data);
4664 const inst_data = datas[@intFromEnum(fn_inst)].pl_node;
4664 const inst_data = datas[@backingInt(fn_inst)].pl_node;
46654665
4666 const param_block_index = switch (tags[@intFromEnum(fn_inst)]) {
4666 const param_block_index = switch (tags[@backingInt(fn_inst)]) {
46674667 .func, .func_inferred => blk: {
46684668 const extra = zir.extraData(Inst.Func, inst_data.payload_index);
46694669 break :blk extra.data.param_block;
......@@ -4675,9 +4675,9 @@ pub fn getParamBody(zir: Zir, fn_inst: Inst.Index) []const Zir.Inst.Index {
46754675 else => unreachable,
46764676 };
46774677
4678 switch (tags[@intFromEnum(param_block_index)]) {
4678 switch (tags[@backingInt(param_block_index)]) {
46794679 .block, .block_comptime, .block_inline => {
4680 const param_block = zir.extraData(Inst.Block, datas[@intFromEnum(param_block_index)].pl_node.payload_index);
4680 const param_block = zir.extraData(Inst.Block, datas[@backingInt(param_block_index)].pl_node.payload_index);
46814681 return zir.bodySlice(param_block.end, param_block.data.body_len);
46824682 },
46834683 .declaration => {
......@@ -4688,7 +4688,7 @@ pub fn getParamBody(zir: Zir, fn_inst: Inst.Index) []const Zir.Inst.Index {
46884688}
46894689
46904690pub fn getParamName(zir: Zir, param_inst: Inst.Index) ?NullTerminatedString {
4691 const inst = zir.instructions.get(@intFromEnum(param_inst));
4691 const inst = zir.instructions.get(@backingInt(param_inst));
46924692 return switch (inst.tag) {
46934693 .param, .param_comptime => zir.extraData(Inst.Param, inst.data.pl_tok.payload_index).data.name,
46944694 .param_anytype, .param_anytype_comptime => inst.data.str_tok.start,
......@@ -4706,9 +4706,9 @@ pub fn getFnInfo(zir: Zir, fn_inst: Inst.Index) FnInfo {
47064706 ret_ty_body: []const Inst.Index,
47074707 ret_ty_is_generic: bool,
47084708 ies: bool,
4709 } = switch (tags[@intFromEnum(fn_inst)]) {
4709 } = switch (tags[@backingInt(fn_inst)]) {
47104710 .func, .func_inferred => |tag| blk: {
4711 const inst_data = datas[@intFromEnum(fn_inst)].pl_node;
4711 const inst_data = datas[@backingInt(fn_inst)].pl_node;
47124712 const extra = zir.extraData(Inst.Func, inst_data.payload_index);
47134713
47144714 var extra_index: usize = extra.end;
......@@ -4720,7 +4720,7 @@ pub fn getFnInfo(zir: Zir, fn_inst: Inst.Index) FnInfo {
47204720 ret_ty_ref = .void_type;
47214721 },
47224722 1 => {
4723 ret_ty_ref = @enumFromInt(zir.extra[extra_index]);
4723 ret_ty_ref = @fromBackingInt(@intCast(zir.extra[extra_index]));
47244724 extra_index += 1;
47254725 },
47264726 else => {
......@@ -4742,7 +4742,7 @@ pub fn getFnInfo(zir: Zir, fn_inst: Inst.Index) FnInfo {
47424742 };
47434743 },
47444744 .func_fancy => blk: {
4745 const inst_data = datas[@intFromEnum(fn_inst)].pl_node;
4745 const inst_data = datas[@backingInt(fn_inst)].pl_node;
47464746 const extra = zir.extraData(Inst.FuncFancy, inst_data.payload_index);
47474747
47484748 var extra_index: usize = extra.end;
......@@ -4760,7 +4760,7 @@ pub fn getFnInfo(zir: Zir, fn_inst: Inst.Index) FnInfo {
47604760 ret_ty_body = zir.bodySlice(extra_index, body_len);
47614761 extra_index += ret_ty_body.len;
47624762 } else if (extra.data.bits.has_ret_ty_ref) {
4763 ret_ty_ref = @enumFromInt(zir.extra[extra_index]);
4763 ret_ty_ref = @fromBackingInt(@intCast(zir.extra[extra_index]));
47644764 extra_index += 1;
47654765 } else {
47664766 ret_ty_ref = .void_type;
......@@ -4784,7 +4784,7 @@ pub fn getFnInfo(zir: Zir, fn_inst: Inst.Index) FnInfo {
47844784 const param_body = zir.getParamBody(fn_inst);
47854785 var total_params_len: u32 = 0;
47864786 for (param_body) |inst| {
4787 switch (tags[@intFromEnum(inst)]) {
4787 switch (tags[@backingInt(inst)]) {
47884788 .param, .param_comptime, .param_anytype, .param_anytype_comptime => {
47894789 total_params_len += 1;
47904790 },
......@@ -4804,8 +4804,8 @@ pub fn getFnInfo(zir: Zir, fn_inst: Inst.Index) FnInfo {
48044804}
48054805
48064806pub fn getDeclaration(zir: Zir, inst: Zir.Inst.Index) Inst.Declaration.Unwrapped {
4807 assert(zir.instructions.items(.tag)[@intFromEnum(inst)] == .declaration);
4808 const pl_node = zir.instructions.items(.data)[@intFromEnum(inst)].declaration;
4807 assert(zir.instructions.items(.tag)[@backingInt(inst)] == .declaration);
4808 const pl_node = zir.instructions.items(.data)[@backingInt(inst)].declaration;
48094809 const extra = zir.extraData(Inst.Declaration, pl_node.payload_index);
48104810
48114811 const flags_vals: [2]u32 = .{ extra.data.flags_0, extra.data.flags_1 };
......@@ -4816,13 +4816,13 @@ pub fn getDeclaration(zir: Zir, inst: Zir.Inst.Index) Inst.Declaration.Unwrapped
48164816 const name: NullTerminatedString = if (flags.id.hasName()) name: {
48174817 const name = zir.extra[extra_index];
48184818 extra_index += 1;
4819 break :name @enumFromInt(name);
4819 break :name @fromBackingInt(@intCast(name));
48204820 } else .empty;
48214821
48224822 const lib_name: NullTerminatedString = if (flags.id.hasLibName()) lib_name: {
48234823 const lib_name = zir.extra[extra_index];
48244824 extra_index += 1;
4825 break :lib_name @enumFromInt(lib_name);
4825 break :lib_name @fromBackingInt(@intCast(lib_name));
48264826 } else .empty;
48274827
48284828 const type_body_len: u32 = if (flags.id.hasTypeBody()) len: {
......@@ -4877,9 +4877,9 @@ pub fn getDeclaration(zir: Zir, inst: Zir.Inst.Index) Inst.Declaration.Unwrapped
48774877pub fn getAssociatedSrcHash(zir: Zir, inst: Zir.Inst.Index) ?std.zig.SrcHash {
48784878 const tag = zir.instructions.items(.tag);
48794879 const data = zir.instructions.items(.data);
4880 switch (tag[@intFromEnum(inst)]) {
4880 switch (tag[@backingInt(inst)]) {
48814881 .declaration => {
4882 const declaration = data[@intFromEnum(inst)].declaration;
4882 const declaration = data[@backingInt(inst)].declaration;
48834883 const extra = zir.extraData(Inst.Declaration, declaration.payload_index);
48844884 return @bitCast([4]u32{
48854885 extra.data.src_hash_0,
......@@ -4889,7 +4889,7 @@ pub fn getAssociatedSrcHash(zir: Zir, inst: Zir.Inst.Index) ?std.zig.SrcHash {
48894889 });
48904890 },
48914891 .func, .func_inferred => {
4892 const pl_node = data[@intFromEnum(inst)].pl_node;
4892 const pl_node = data[@backingInt(inst)].pl_node;
48934893 const extra = zir.extraData(Inst.Func, pl_node.payload_index);
48944894 if (extra.data.body_len == 0) {
48954895 // Function type or extern fn - no associated hash
......@@ -4907,7 +4907,7 @@ pub fn getAssociatedSrcHash(zir: Zir, inst: Zir.Inst.Index) ?std.zig.SrcHash {
49074907 });
49084908 },
49094909 .func_fancy => {
4910 const pl_node = data[@intFromEnum(inst)].pl_node;
4910 const pl_node = data[@backingInt(inst)].pl_node;
49114911 const extra = zir.extraData(Inst.FuncFancy, pl_node.payload_index);
49124912 if (extra.data.body_len == 0) {
49134913 // Function type or extern fn - no associated hash
......@@ -4936,7 +4936,7 @@ pub fn getAssociatedSrcHash(zir: Zir, inst: Zir.Inst.Index) ?std.zig.SrcHash {
49364936 .extended => {},
49374937 else => return null,
49384938 }
4939 const extended = data[@intFromEnum(inst)].extended;
4939 const extended = data[@backingInt(inst)].extended;
49404940 switch (extended.opcode) {
49414941 .struct_decl => {
49424942 const extra = zir.extraData(Inst.StructDecl, extended.operand).data;
......@@ -4970,12 +4970,12 @@ pub fn getAssociatedSrcHash(zir: Zir, inst: Zir.Inst.Index) ?std.zig.SrcHash {
49704970}
49714971
49724972pub fn getSwitchBlock(zir: *const Zir, switch_inst: Inst.Index) UnwrappedSwitchBlock {
4973 const has_non_err = switch (zir.instructions.items(.tag)[@intFromEnum(switch_inst)]) {
4973 const has_non_err = switch (zir.instructions.items(.tag)[@backingInt(switch_inst)]) {
49744974 .switch_block, .switch_block_ref => false,
49754975 .switch_block_err_union => true,
49764976 else => unreachable,
49774977 };
4978 const inst_data = zir.instructions.items(.data)[@intFromEnum(switch_inst)].pl_node;
4978 const inst_data = zir.instructions.items(.data)[@backingInt(switch_inst)].pl_node;
49794979 const extra = zir.extraData(Inst.SwitchBlock, inst_data.payload_index);
49804980 const bits = extra.data.bits;
49814981 var extra_index = extra.end;
......@@ -4985,17 +4985,17 @@ pub fn getSwitchBlock(zir: *const Zir, switch_inst: Inst.Index) UnwrappedSwitchB
49854985 break :len multi_cases_len;
49864986 } else 0;
49874987 const payload_capture_placeholder: Inst.OptionalIndex = if (bits.payload_capture_inst_is_placeholder) inst: {
4988 const inst: Inst.Index = @enumFromInt(zir.extra[extra_index]);
4988 const inst: Inst.Index = @fromBackingInt(@intCast(zir.extra[extra_index]));
49894989 extra_index += 1;
49904990 break :inst inst.toOptional();
49914991 } else .none;
49924992 const tag_capture_placeholder: Inst.OptionalIndex = if (bits.tag_capture_inst_is_placeholder) inst: {
4993 const inst: Inst.Index = @enumFromInt(zir.extra[extra_index]);
4993 const inst: Inst.Index = @fromBackingInt(@intCast(zir.extra[extra_index]));
49944994 extra_index += 1;
49954995 break :inst inst.toOptional();
49964996 } else .none;
49974997 const catch_or_if_src_node_offset: Ast.Node.OptionalOffset = if (has_non_err) node_offset: {
4998 const node_offset: Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(zir.extra[extra_index])));
4998 const node_offset: Ast.Node.Offset = @fromBackingInt(@intCast(@as(i32, @bitCast(zir.extra[extra_index]))));
49994999 extra_index += 1;
50005000 break :node_offset node_offset.toOptional();
50015001 } else .none;
......@@ -5212,7 +5212,7 @@ pub const inst_tracking_version = 0;
52125212/// thus may be given an `InternPool.TrackedInst`.
52135213pub fn assertTrackable(zir: Zir, inst_idx: Zir.Inst.Index) void {
52145214 comptime assert(Zir.inst_tracking_version == 0);
5215 const inst = zir.instructions.get(@intFromEnum(inst_idx));
5215 const inst = zir.instructions.get(@backingInt(inst_idx));
52165216 switch (inst.tag) {
52175217 .struct_init,
52185218 .struct_init_ref,
......@@ -5246,7 +5246,7 @@ pub fn assertTrackable(zir: Zir, inst_idx: Zir.Inst.Index) void {
52465246}
52475247
52485248pub fn typeDecls(zir: Zir, type_decl: Inst.Index) []const Zir.Inst.Index {
5249 const inst = zir.instructions.get(@intFromEnum(type_decl));
5249 const inst = zir.instructions.get(@backingInt(type_decl));
52505250 assert(inst.tag == .extended);
52515251 return switch (inst.data.extended.opcode) {
52525252 .struct_decl => zir.getStructDecl(type_decl).decls,
......@@ -5258,7 +5258,7 @@ pub fn typeDecls(zir: Zir, type_decl: Inst.Index) []const Zir.Inst.Index {
52585258}
52595259
52605260pub fn getStructDecl(zir: *const Zir, struct_decl: Inst.Index) UnwrappedStructDecl {
5261 const inst_data = zir.instructions.get(@intFromEnum(struct_decl));
5261 const inst_data = zir.instructions.get(@backingInt(struct_decl));
52625262 assert(inst_data.tag == .extended);
52635263 assert(inst_data.data.extended.opcode == .struct_decl);
52645264 const small: Inst.StructDecl.Small = @bitCast(inst_data.data.extended.small);
......@@ -5409,7 +5409,7 @@ pub const UnwrappedStructDecl = struct {
54095409};
54105410
54115411pub fn getUnionDecl(zir: *const Zir, union_decl: Inst.Index) UnwrappedUnionDecl {
5412 const inst_data = zir.instructions.get(@intFromEnum(union_decl));
5412 const inst_data = zir.instructions.get(@backingInt(union_decl));
54135413 assert(inst_data.tag == .extended);
54145414 assert(inst_data.data.extended.opcode == .union_decl);
54155415 const small: Inst.UnionDecl.Small = @bitCast(inst_data.data.extended.small);
......@@ -5543,7 +5543,7 @@ pub const UnwrappedUnionDecl = struct {
55435543};
55445544
55455545pub fn getEnumDecl(zir: *const Zir, enum_decl: Inst.Index) UnwrappedEnumDecl {
5546 const inst_data = zir.instructions.get(@intFromEnum(enum_decl));
5546 const inst_data = zir.instructions.get(@backingInt(enum_decl));
55475547 assert(inst_data.tag == .extended);
55485548 assert(inst_data.data.extended.opcode == .enum_decl);
55495549 const small: Inst.EnumDecl.Small = @bitCast(inst_data.data.extended.small);
......@@ -5658,7 +5658,7 @@ pub const UnwrappedEnumDecl = struct {
56585658};
56595659
56605660pub fn getOpaqueDecl(zir: *const Zir, opaque_decl: Inst.Index) UnwrappedOpaqueDecl {
5661 const inst_data = zir.instructions.get(@intFromEnum(opaque_decl));
5661 const inst_data = zir.instructions.get(@backingInt(opaque_decl));
56625662 assert(inst_data.tag == .extended);
56635663 assert(inst_data.data.extended.opcode == .opaque_decl);
56645664 const small: Inst.OpaqueDecl.Small = @bitCast(inst_data.data.extended.small);
lib/std/zig/Zoir.zig+9-9
......@@ -106,7 +106,7 @@ pub const Node = union(enum) {
106106 _,
107107
108108 pub fn get(idx: Index, zoir: Zoir) Node {
109 const repr = zoir.nodes.get(@intFromEnum(idx));
109 const repr = zoir.nodes.get(@backingInt(idx));
110110 return switch (repr.tag) {
111111 .true => .true,
112112 .false => .false,
......@@ -129,30 +129,30 @@ pub const Node = union(enum) {
129129 .float_literal_small => .{ .float_literal = @as(f32, @bitCast(repr.data)) },
130130 .float_literal => .{ .float_literal = @bitCast(zoir.extra[repr.data..][0..4].*) },
131131 .char_literal => .{ .char_literal = @intCast(repr.data) },
132 .enum_literal => .{ .enum_literal = @enumFromInt(repr.data) },
132 .enum_literal => .{ .enum_literal = @fromBackingInt(@intCast(repr.data)) },
133133 .string_literal => .{ .string_literal = s: {
134134 const start, const len = zoir.extra[repr.data..][0..2].*;
135135 break :s zoir.string_bytes[start..][0..len];
136136 } },
137 .string_literal_null => .{ .string_literal = NullTerminatedString.get(@enumFromInt(repr.data), zoir) },
137 .string_literal_null => .{ .string_literal = NullTerminatedString.get(@fromBackingInt(@intCast(repr.data)), zoir) },
138138 .empty_literal => .empty_literal,
139139 .array_literal => .{ .array_literal = a: {
140140 const elem_count, const first_elem = zoir.extra[repr.data..][0..2].*;
141 break :a .{ .start = @enumFromInt(first_elem), .len = elem_count };
141 break :a .{ .start = @fromBackingInt(@intCast(first_elem)), .len = elem_count };
142142 } },
143143 .struct_literal => .{ .struct_literal = s: {
144144 const elem_count, const first_elem = zoir.extra[repr.data..][0..2].*;
145145 const field_names = zoir.extra[repr.data + 2 ..][0..elem_count];
146146 break :s .{
147147 .names = @ptrCast(field_names),
148 .vals = .{ .start = @enumFromInt(first_elem), .len = elem_count },
148 .vals = .{ .start = @fromBackingInt(@intCast(first_elem)), .len = elem_count },
149149 };
150150 } },
151151 };
152152 }
153153
154154 pub fn getAstNode(idx: Index, zoir: Zoir) std.zig.Ast.Node.Index {
155 return zoir.nodes.items(.ast_node)[@intFromEnum(idx)];
155 return zoir.nodes.items(.ast_node)[@backingInt(idx)];
156156 }
157157
158158 pub const Range = struct {
......@@ -161,7 +161,7 @@ pub const Node = union(enum) {
161161
162162 pub fn at(r: Range, i: u32) Index {
163163 assert(i < r.len);
164 return @enumFromInt(@intFromEnum(r.start) + i);
164 return @fromBackingInt(@intCast(@backingInt(r.start) + i));
165165 }
166166 };
167167 };
......@@ -228,8 +228,8 @@ pub const Node = union(enum) {
228228pub const NullTerminatedString = enum(u32) {
229229 _,
230230 pub fn get(nts: NullTerminatedString, zoir: Zoir) [:0]const u8 {
231 const idx = std.mem.findScalar(u8, zoir.string_bytes[@intFromEnum(nts)..], 0).?;
232 return zoir.string_bytes[@intFromEnum(nts)..][0..idx :0];
231 const idx = std.mem.findScalar(u8, zoir.string_bytes[@backingInt(nts)..], 0).?;
232 return zoir.string_bytes[@backingInt(nts)..][0..idx :0];
233233 }
234234};
235235
lib/std/zig/ZonGen.zig+17-17
......@@ -327,14 +327,14 @@ fn expr(zg: *ZonGen, node: Ast.Node.Index, dest_node: Zoir.Node.Index) Allocator
327327 };
328328 zg.setNode(dest_node, .{
329329 .tag = .enum_literal,
330 .data = @intFromEnum(str_index),
330 .data = @backingInt(str_index),
331331 .ast_node = node,
332332 });
333333 },
334334 .string_literal, .multiline_string_literal => if (zg.strLitAsString(node)) |result| switch (result) {
335335 .nts => |nts| zg.setNode(dest_node, .{
336336 .tag = .string_literal_null,
337 .data = @intFromEnum(nts),
337 .data = @backingInt(nts),
338338 .ast_node = node,
339339 }),
340340 .slice => |slice| {
......@@ -377,7 +377,7 @@ fn expr(zg: *ZonGen, node: Ast.Node.Index, dest_node: Zoir.Node.Index) Allocator
377377 });
378378
379379 for (full.ast.elements, first_elem..) |elem_node, elem_dest_node| {
380 try zg.expr(elem_node, @enumFromInt(elem_dest_node));
380 try zg.expr(elem_node, @fromBackingInt(@intCast(elem_dest_node)));
381381 }
382382 },
383383
......@@ -429,7 +429,7 @@ fn expr(zg: *ZonGen, node: Ast.Node.Index, dest_node: Zoir.Node.Index) Allocator
429429 for (full.ast.fields, names_start.., first_elem..) |elem_node, extra_name_idx, elem_dest_node| {
430430 const name_token = tree.firstToken(elem_node) - 2;
431431 if (zg.identAsString(name_token)) |name_str| {
432 zg.extra.items[extra_name_idx] = @intFromEnum(name_str);
432 zg.extra.items[extra_name_idx] = @backingInt(name_str);
433433 const gop = try field_names.getOrPut(bfa, name_str);
434434 if (gop.found_existing and !reported_any_duplicate) {
435435 reported_any_duplicate = true;
......@@ -443,7 +443,7 @@ fn expr(zg: *ZonGen, node: Ast.Node.Index, dest_node: Zoir.Node.Index) Allocator
443443 error.BadString => {}, // there's an error, so it's fine to not populate `zg.extra`
444444 error.OutOfMemory => |e| return e,
445445 }
446 try zg.expr(elem_node, @enumFromInt(elem_dest_node));
446 try zg.expr(elem_node, @fromBackingInt(@intCast(elem_dest_node)));
447447 }
448448 },
449449 }
......@@ -590,11 +590,11 @@ fn strLitAsString(zg: *ZonGen, str_node: Ast.Node.Index) error{ OutOfMemory, Bad
590590 );
591591 if (gop.found_existing) {
592592 string_bytes.shrinkRetainingCapacity(str_index);
593 return .{ .nts = @enumFromInt(gop.key_ptr.*) };
593 return .{ .nts = @fromBackingInt(@intCast(gop.key_ptr.*)) };
594594 }
595595 gop.key_ptr.* = str_index;
596596 try string_bytes.append(gpa, 0);
597 return .{ .nts = @enumFromInt(str_index) };
597 return .{ .nts = @fromBackingInt(@intCast(str_index)) };
598598}
599599
600600fn identAsString(zg: *ZonGen, ident_token: Ast.TokenIndex) !Zoir.NullTerminatedString {
......@@ -610,11 +610,11 @@ fn identAsString(zg: *ZonGen, ident_token: Ast.TokenIndex) !Zoir.NullTerminatedS
610610 );
611611 if (gop.found_existing) {
612612 string_bytes.shrinkRetainingCapacity(str_index);
613 return @enumFromInt(gop.key_ptr.*);
613 return @fromBackingInt(@intCast(gop.key_ptr.*));
614614 }
615615 gop.key_ptr.* = str_index;
616616 try string_bytes.append(gpa, 0);
617 return @enumFromInt(str_index);
617 return @fromBackingInt(@intCast(str_index));
618618}
619619
620620fn numberLiteral(zg: *ZonGen, num_node: Ast.Node.Index, src_node: Ast.Node.Index, dest_node: Zoir.Node.Index, sign: enum { negative, positive }) !void {
......@@ -656,7 +656,7 @@ fn numberLiteral(zg: *ZonGen, num_node: Ast.Node.Index, src_node: Ast.Node.Index
656656 };
657657 var big_int: std.math.big.int.Managed = try .init(gpa);
658658 defer big_int.deinit();
659 big_int.setString(@intFromEnum(base), num_without_prefix) catch |err| switch (err) {
659 big_int.setString(@backingInt(base), num_without_prefix) catch |err| switch (err) {
660660 error.InvalidCharacter => unreachable, // caught in `parseNumberLiteral`
661661 error.InvalidBase => unreachable, // we only pass 16, 8, 2, see above
662662 error.OutOfMemory => |e| return e,
......@@ -763,7 +763,7 @@ fn identifier(zg: *ZonGen, node: Ast.Node.Index, dest_node: Zoir.Node.Index) !vo
763763}
764764
765765fn setNode(zg: *ZonGen, dest: Zoir.Node.Index, repr: Zoir.Node.Repr) void {
766 zg.nodes.set(@intFromEnum(dest), repr);
766 zg.nodes.set(@backingInt(dest), repr);
767767}
768768
769769fn lowerStrLitError(
......@@ -812,9 +812,9 @@ fn errNoteNode(zg: *ZonGen, node: Ast.Node.Index, comptime format: []const u8, a
812812 const message_idx: u32 = @intCast(zg.string_bytes.items.len);
813813 try zg.string_bytes.print(zg.gpa, format ++ "\x00", args);
814814 return .{
815 .msg = @enumFromInt(message_idx),
815 .msg = @fromBackingInt(@intCast(message_idx)),
816816 .token = .none,
817 .node_or_offset = @intFromEnum(node),
817 .node_or_offset = @backingInt(node),
818818 };
819819}
820820
......@@ -822,20 +822,20 @@ fn errNoteTok(zg: *ZonGen, tok: Ast.TokenIndex, comptime format: []const u8, arg
822822 const message_idx: u32 = @intCast(zg.string_bytes.items.len);
823823 try zg.string_bytes.print(zg.gpa, format ++ "\x00", args);
824824 return .{
825 .msg = @enumFromInt(message_idx),
825 .msg = @fromBackingInt(@intCast(message_idx)),
826826 .token = .fromToken(tok),
827827 .node_or_offset = 0,
828828 };
829829}
830830
831831fn addErrorNode(zg: *ZonGen, node: Ast.Node.Index, comptime format: []const u8, args: anytype) Allocator.Error!void {
832 return zg.addErrorInner(.none, @intFromEnum(node), format, args, &.{});
832 return zg.addErrorInner(.none, @backingInt(node), format, args, &.{});
833833}
834834fn addErrorTok(zg: *ZonGen, tok: Ast.TokenIndex, comptime format: []const u8, args: anytype) Allocator.Error!void {
835835 return zg.addErrorInner(.fromToken(tok), 0, format, args, &.{});
836836}
837837fn addErrorNodeNotes(zg: *ZonGen, node: Ast.Node.Index, comptime format: []const u8, args: anytype, notes: []const Zoir.CompileError.Note) Allocator.Error!void {
838 return zg.addErrorInner(.none, @intFromEnum(node), format, args, notes);
838 return zg.addErrorInner(.none, @backingInt(node), format, args, notes);
839839}
840840fn addErrorTokNotes(zg: *ZonGen, tok: Ast.TokenIndex, comptime format: []const u8, args: anytype, notes: []const Zoir.CompileError.Note) Allocator.Error!void {
841841 return zg.addErrorInner(.fromToken(tok), 0, format, args, notes);
......@@ -864,7 +864,7 @@ fn addErrorInner(
864864 try zg.string_bytes.print(gpa, format ++ "\x00", args);
865865
866866 try zg.compile_errors.append(gpa, .{
867 .msg = @enumFromInt(message_idx),
867 .msg = @fromBackingInt(@intCast(message_idx)),
868868 .token = token,
869869 .node_or_offset = node_or_offset,
870870 .first_note = first_note,
lib/std/zig/llvm/BitcodeReader.zig+12-12
......@@ -70,23 +70,23 @@ pub const Record = struct {
7070 try operands.append(.{ .literal = record.operands[i + 1] });
7171 i += 2;
7272 },
73 @intFromEnum(Abbrev.Operand.Encoding.fixed) => {
73 @backingInt(Abbrev.Operand.Encoding.fixed) => {
7474 try operands.append(.{ .encoding = .{ .fixed = @intCast(record.operands[i + 1]) } });
7575 i += 2;
7676 },
77 @intFromEnum(Abbrev.Operand.Encoding.vbr) => {
77 @backingInt(Abbrev.Operand.Encoding.vbr) => {
7878 try operands.append(.{ .encoding = .{ .vbr = @intCast(record.operands[i + 1]) } });
7979 i += 2;
8080 },
81 @intFromEnum(Abbrev.Operand.Encoding.array) => {
81 @backingInt(Abbrev.Operand.Encoding.array) => {
8282 try operands.append(.{ .encoding = .{ .array = 6 } });
8383 i += 1;
8484 },
85 @intFromEnum(Abbrev.Operand.Encoding.char6) => {
85 @backingInt(Abbrev.Operand.Encoding.char6) => {
8686 try operands.append(.{ .encoding = .char6 });
8787 i += 1;
8888 },
89 @intFromEnum(Abbrev.Operand.Encoding.blob) => {
89 @backingInt(Abbrev.Operand.Encoding.blob) => {
9090 try operands.append(.{ .encoding = .{ .blob = 6 } });
9191 i += 1;
9292 },
......@@ -225,8 +225,8 @@ fn nextRecord(bc: *BitcodeReader) !?Record {
225225 }),
226226 0 => {
227227 const encoding: Abbrev.Operand.Encoding =
228 @enumFromInt(try bc.readFixed(u3, 3));
229 try operands.append(@intFromEnum(encoding));
228 @fromBackingInt(@intCast(try bc.readFixed(u3, 3)));
229 try operands.append(@backingInt(encoding));
230230 switch (encoding) {
231231 .fixed, .vbr => try operands.append(try bc.readVbr(u7, 5)),
232232 .array, .char6, .blob => {},
......@@ -285,14 +285,14 @@ fn startBlock(bc: *BitcodeReader, block_id: ?u32, new_abbrev_len: u6) !void {
285285 @typeInfo(Abbrev.Builtin).@"enum".field_names.len + abbrevs.len,
286286 );
287287
288 assert(state.abbrevs.abbrevs.items.len == @intFromEnum(Abbrev.Builtin.end_block));
288 assert(state.abbrevs.abbrevs.items.len == @backingInt(Abbrev.Builtin.end_block));
289289 try state.abbrevs.addAbbrevAssumeCapacity(bc.allocator, .{
290290 .operands = &.{
291291 .{ .literal = Abbrev.Builtin.end_block.toRecordId() },
292292 .align_32_bits,
293293 },
294294 });
295 assert(state.abbrevs.abbrevs.items.len == @intFromEnum(Abbrev.Builtin.enter_subblock));
295 assert(state.abbrevs.abbrevs.items.len == @backingInt(Abbrev.Builtin.enter_subblock));
296296 try state.abbrevs.addAbbrevAssumeCapacity(bc.allocator, .{
297297 .operands = &.{
298298 .{ .literal = Abbrev.Builtin.enter_subblock.toRecordId() },
......@@ -302,7 +302,7 @@ fn startBlock(bc: *BitcodeReader, block_id: ?u32, new_abbrev_len: u6) !void {
302302 .block_len,
303303 },
304304 });
305 assert(state.abbrevs.abbrevs.items.len == @intFromEnum(Abbrev.Builtin.define_abbrev));
305 assert(state.abbrevs.abbrevs.items.len == @backingInt(Abbrev.Builtin.define_abbrev));
306306 try state.abbrevs.addAbbrevAssumeCapacity(bc.allocator, .{
307307 .operands = &.{
308308 .{ .literal = Abbrev.Builtin.define_abbrev.toRecordId() },
......@@ -310,7 +310,7 @@ fn startBlock(bc: *BitcodeReader, block_id: ?u32, new_abbrev_len: u6) !void {
310310 .abbrev_op,
311311 },
312312 });
313 assert(state.abbrevs.abbrevs.items.len == @intFromEnum(Abbrev.Builtin.unabbrev_record));
313 assert(state.abbrevs.abbrevs.items.len == @backingInt(Abbrev.Builtin.unabbrev_record));
314314 try state.abbrevs.addAbbrevAssumeCapacity(bc.allocator, .{
315315 .operands = &.{
316316 .{ .encoding = .{ .vbr = 6 } }, // code
......@@ -459,7 +459,7 @@ const Abbrev = struct {
459459
460460 const first_record_id: u32 = std.math.maxInt(u32) - @typeInfo(Builtin).@"enum".field_names.len + 1;
461461 fn toRecordId(builtin: Builtin) u32 {
462 return first_record_id + @intFromEnum(builtin);
462 return first_record_id + @backingInt(builtin);
463463 }
464464 };
465465
lib/std/zig/llvm/Builder.zig+379-379
......@@ -112,7 +112,7 @@ pub const String = enum(u32) {
112112 fn format(data: FormatData, w: *Writer) Writer.Error!void {
113113 assert(data.string != .none);
114114 const string_slice = data.string.slice(data.builder) orelse
115 return w.print("{d}", .{@intFromEnum(data.string)});
115 return w.print("{d}", .{@backingInt(data.string)});
116116 const quote_behavior = data.quote_behavior orelse return w.writeAll(string_slice);
117117 return printEscapedString(string_slice, quote_behavior, w);
118118 }
......@@ -142,12 +142,12 @@ pub const String = enum(u32) {
142142 }
143143
144144 fn fromIndex(index: ?usize) String {
145 return @enumFromInt(@as(u32, @intCast((index orelse return .none) +
146 @intFromEnum(String.empty))));
145 return @fromBackingInt(@intCast(@as(u32, @intCast((index orelse return .none) +
146 @backingInt(String.empty)))));
147147 }
148148
149149 fn toIndex(self: String) ?usize {
150 return std.math.sub(u32, @intFromEnum(self), @intFromEnum(String.empty)) catch null;
150 return std.math.sub(u32, @backingInt(self), @backingInt(String.empty)) catch null;
151151 }
152152
153153 const Adapter = struct {
......@@ -272,19 +272,19 @@ pub const Type = enum(u32) {
272272
273273 pub const Simple = enum(u5) {
274274 const Code = ir.ModuleBlock.TypeBlock.Code;
275 void = @intFromEnum(Code.VOID),
276 half = @intFromEnum(Code.HALF),
277 bfloat = @intFromEnum(Code.BFLOAT),
278 float = @intFromEnum(Code.FLOAT),
279 double = @intFromEnum(Code.DOUBLE),
280 fp128 = @intFromEnum(Code.FP128),
281 x86_fp80 = @intFromEnum(Code.X86_FP80),
282 ppc_fp128 = @intFromEnum(Code.PPC_FP128),
283 x86_amx = @intFromEnum(Code.X86_AMX),
284 x86_mmx = @intFromEnum(Code.X86_MMX),
285 label = @intFromEnum(Code.LABEL),
286 token = @intFromEnum(Code.TOKEN),
287 metadata = @intFromEnum(Code.METADATA),
275 void = @backingInt(Code.VOID),
276 half = @backingInt(Code.HALF),
277 bfloat = @backingInt(Code.BFLOAT),
278 float = @backingInt(Code.FLOAT),
279 double = @backingInt(Code.DOUBLE),
280 fp128 = @backingInt(Code.FP128),
281 x86_fp80 = @backingInt(Code.X86_FP80),
282 ppc_fp128 = @backingInt(Code.PPC_FP128),
283 x86_amx = @backingInt(Code.X86_AMX),
284 x86_mmx = @backingInt(Code.X86_MMX),
285 label = @backingInt(Code.LABEL),
286 token = @backingInt(Code.TOKEN),
287 metadata = @backingInt(Code.METADATA),
288288 };
289289
290290 pub const Function = struct {
......@@ -344,11 +344,11 @@ pub const Type = enum(u32) {
344344 };
345345
346346 pub fn tag(self: Type, builder: *const Builder) Tag {
347 return builder.type_items.items[@intFromEnum(self)].tag;
347 return builder.type_items.items[@backingInt(self)].tag;
348348 }
349349
350350 pub fn unnamedTag(self: Type, builder: *const Builder) Tag {
351 const item = builder.type_items.items[@intFromEnum(self)];
351 const item = builder.type_items.items[@backingInt(self)];
352352 return switch (item.tag) {
353353 .named_structure => builder.typeExtraData(Type.NamedStructure, item.data).body
354354 .unnamedTag(builder),
......@@ -357,7 +357,7 @@ pub const Type = enum(u32) {
357357 }
358358
359359 pub fn scalarTag(self: Type, builder: *const Builder) Tag {
360 const item = builder.type_items.items[@intFromEnum(self)];
360 const item = builder.type_items.items[@backingInt(self)];
361361 return switch (item.tag) {
362362 .vector, .scalable_vector => builder.typeExtraData(Type.Vector, item.data)
363363 .child.tag(builder),
......@@ -396,9 +396,9 @@ pub const Type = enum(u32) {
396396 switch (self) {
397397 .ptr => return .default,
398398 else => {
399 const item = builder.type_items.items[@intFromEnum(self)];
399 const item = builder.type_items.items[@backingInt(self)];
400400 assert(item.tag == .pointer);
401 return @enumFromInt(item.data);
401 return @fromBackingInt(@intCast(item.data));
402402 },
403403 }
404404 }
......@@ -419,7 +419,7 @@ pub const Type = enum(u32) {
419419 }
420420
421421 pub fn functionParameters(self: Type, builder: *const Builder) []const Type {
422 const item = builder.type_items.items[@intFromEnum(self)];
422 const item = builder.type_items.items[@backingInt(self)];
423423 switch (item.tag) {
424424 .function,
425425 .vararg_function,
......@@ -432,7 +432,7 @@ pub const Type = enum(u32) {
432432 }
433433
434434 pub fn functionReturn(self: Type, builder: *const Builder) Type {
435 const item = builder.type_items.items[@intFromEnum(self)];
435 const item = builder.type_items.items[@backingInt(self)];
436436 switch (item.tag) {
437437 .function,
438438 .vararg_function,
......@@ -491,7 +491,7 @@ pub const Type = enum(u32) {
491491 .fp128, .ppc_fp128, .i128 => 128,
492492 .ptr, .@"ptr addrspace(4)" => @panic("TODO: query data layout"),
493493 _ => {
494 const item = builder.type_items.items[@intFromEnum(self)];
494 const item = builder.type_items.items[@backingInt(self)];
495495 return switch (item.tag) {
496496 .simple,
497497 .function,
......@@ -515,7 +515,7 @@ pub const Type = enum(u32) {
515515 }
516516
517517 pub fn childType(self: Type, builder: *const Builder) Type {
518 const item = builder.type_items.items[@intFromEnum(self)];
518 const item = builder.type_items.items[@backingInt(self)];
519519 return switch (item.tag) {
520520 .vector,
521521 .scalable_vector,
......@@ -529,7 +529,7 @@ pub const Type = enum(u32) {
529529
530530 pub fn scalarType(self: Type, builder: *const Builder) Type {
531531 if (self.isFloatingPoint()) return self;
532 const item = builder.type_items.items[@intFromEnum(self)];
532 const item = builder.type_items.items[@backingInt(self)];
533533 return switch (item.tag) {
534534 .integer,
535535 .pointer,
......@@ -548,7 +548,7 @@ pub const Type = enum(u32) {
548548
549549 pub fn changeScalarAssumeCapacity(self: Type, scalar: Type, builder: *Builder) Type {
550550 if (self.isFloatingPoint()) return scalar;
551 const item = builder.type_items.items[@intFromEnum(self)];
551 const item = builder.type_items.items[@backingInt(self)];
552552 return switch (item.tag) {
553553 .integer,
554554 .pointer,
......@@ -569,7 +569,7 @@ pub const Type = enum(u32) {
569569 }
570570
571571 pub fn vectorLen(self: Type, builder: *const Builder) u32 {
572 const item = builder.type_items.items[@intFromEnum(self)];
572 const item = builder.type_items.items[@backingInt(self)];
573573 return switch (item.tag) {
574574 .vector,
575575 .scalable_vector,
......@@ -584,7 +584,7 @@ pub const Type = enum(u32) {
584584 }
585585
586586 pub fn changeLengthAssumeCapacity(self: Type, len: u32, builder: *Builder) Type {
587 const item = builder.type_items.items[@intFromEnum(self)];
587 const item = builder.type_items.items[@backingInt(self)];
588588 return switch (item.tag) {
589589 inline .vector,
590590 .scalable_vector,
......@@ -610,7 +610,7 @@ pub const Type = enum(u32) {
610610 }
611611
612612 pub fn aggregateLen(self: Type, builder: *const Builder) usize {
613 const item = builder.type_items.items[@intFromEnum(self)];
613 const item = builder.type_items.items[@backingInt(self)];
614614 return switch (item.tag) {
615615 .vector,
616616 .scalable_vector,
......@@ -627,7 +627,7 @@ pub const Type = enum(u32) {
627627 }
628628
629629 pub fn structFields(self: Type, builder: *const Builder) []const Type {
630 const item = builder.type_items.items[@intFromEnum(self)];
630 const item = builder.type_items.items[@backingInt(self)];
631631 switch (item.tag) {
632632 .structure,
633633 .packed_structure,
......@@ -643,7 +643,7 @@ pub const Type = enum(u32) {
643643
644644 pub fn childTypeAt(self: Type, indices: []const u32, builder: *const Builder) Type {
645645 if (indices.len == 0) return self;
646 const item = builder.type_items.items[@intFromEnum(self)];
646 const item = builder.type_items.items[@backingInt(self)];
647647 return switch (item.tag) {
648648 .small_array => builder.typeExtraData(Type.Vector, item.data).child
649649 .childTypeAt(indices[1..], builder),
......@@ -685,9 +685,9 @@ pub const Type = enum(u32) {
685685 fn format(data: FormatData, w: *Writer) Writer.Error!void {
686686 assert(data.type != .none);
687687 if (data.mode == .m) {
688 const item = data.builder.type_items.items[@intFromEnum(data.type)];
688 const item = data.builder.type_items.items[@backingInt(data.type)];
689689 switch (item.tag) {
690 .simple => try w.writeAll(switch (@as(Simple, @enumFromInt(item.data))) {
690 .simple => try w.writeAll(switch (@as(Simple, @fromBackingInt(@intCast(item.data)))) {
691691 .void => "isVoid",
692692 .half => "f16",
693693 .bfloat => "bf16",
......@@ -760,7 +760,7 @@ pub const Type = enum(u32) {
760760 return;
761761 }
762762 if (std.enums.tagName(Type, data.type)) |name| return w.writeAll(name);
763 const item = data.builder.type_items.items[@intFromEnum(data.type)];
763 const item = data.builder.type_items.items[@backingInt(data.type)];
764764 switch (item.tag) {
765765 .simple => unreachable,
766766 .function, .vararg_function => |kind| {
......@@ -786,7 +786,7 @@ pub const Type = enum(u32) {
786786 }
787787 },
788788 .integer => try w.print("i{d}", .{item.data}),
789 .pointer => try w.print("ptr{f}", .{@as(AddrSpace, @enumFromInt(item.data)).fmt(" ")}),
789 .pointer => try w.print("ptr{f}", .{@as(AddrSpace, @fromBackingInt(@intCast(item.data))).fmt(" ")}),
790790 .target => {
791791 var extra = data.builder.typeExtraDataTrail(Type.Target, item.data);
792792 const types = extra.trail.next(extra.data.types_len, Type, data.builder);
......@@ -891,7 +891,7 @@ pub const Type = enum(u32) {
891891 => true,
892892 .none => unreachable,
893893 _ => {
894 const item = builder.type_items.items[@intFromEnum(self)];
894 const item = builder.type_items.items[@backingInt(self)];
895895 return switch (item.tag) {
896896 .simple => unreachable,
897897 .function,
......@@ -1045,7 +1045,7 @@ pub const Attribute = union(Kind) {
10451045 const storage = self.toStorage(builder);
10461046 if (storage.kind.toString()) |kind| return .{ .string = .{
10471047 .kind = kind,
1048 .value = @enumFromInt(storage.value),
1048 .value = @fromBackingInt(@intCast(storage.value)),
10491049 } } else return switch (storage.kind) {
10501050 inline .zeroext,
10511051 .signext,
......@@ -1149,7 +1149,7 @@ pub const Attribute = union(Kind) {
11491149 return @unionInit(Attribute, field_name, switch (field_type) {
11501150 void => {},
11511151 u32 => storage.value,
1152 Alignment.Lazy, String, Type, UwTable => @enumFromInt(storage.value),
1152 Alignment.Lazy, String, Type, UwTable => @fromBackingInt(@intCast(storage.value)),
11531153 AllocKind, AllocSize, FpClass, Memory, VScaleRange => @bitCast(storage.value),
11541154 else => @compileError("bad payload type: " ++ field_name ++ ": " ++
11551155 @typeName(field_type)),
......@@ -1338,7 +1338,7 @@ pub const Attribute = union(Kind) {
13381338 }
13391339
13401340 fn toStorage(self: Index, builder: *const Builder) Storage {
1341 return builder.attributes.keys()[@intFromEnum(self)];
1341 return builder.attributes.keys()[@backingInt(self)];
13421342 }
13431343 };
13441344
......@@ -1447,14 +1447,14 @@ pub const Attribute = union(Kind) {
14471447
14481448 pub fn fromString(str: String) Kind {
14491449 assert(!str.isAnon());
1450 const kind: Kind = @enumFromInt(@intFromEnum(str));
1450 const kind: Kind = @fromBackingInt(@intCast(@backingInt(str)));
14511451 assert(kind != .none);
14521452 return kind;
14531453 }
14541454
14551455 fn toString(self: Kind) ?String {
14561456 assert(self != .none);
1457 const str: String = @enumFromInt(@intFromEnum(self));
1457 const str: String = @fromBackingInt(@intCast(@backingInt(self)));
14581458 return if (str.isAnon()) null else str;
14591459 }
14601460 };
......@@ -1581,13 +1581,13 @@ pub const Attribute = union(Kind) {
15811581 inline else => |value, tag| .{ .kind = @as(Kind, self), .value = switch (@TypeOf(value)) {
15821582 void => 0,
15831583 u32 => value,
1584 Alignment.Lazy, String, Type, UwTable => @intFromEnum(value),
1584 Alignment.Lazy, String, Type, UwTable => @backingInt(value),
15851585 AllocKind, AllocSize, FpClass, Memory, VScaleRange => @bitCast(value),
15861586 else => @compileError("bad payload type: " ++ @tagName(tag) ++ @typeName(@TypeOf(value))),
15871587 } },
15881588 .string => |string_attr| .{
15891589 .kind = Kind.fromString(string_attr.kind),
1590 .value = @intFromEnum(string_attr.value),
1590 .value = @backingInt(string_attr.value),
15911591 },
15921592 .none => unreachable,
15931593 };
......@@ -1599,8 +1599,8 @@ pub const Attributes = enum(u32) {
15991599 _,
16001600
16011601 pub fn slice(self: Attributes, builder: *const Builder) []const Attribute.Index {
1602 const start = builder.attributes_indices.items[@intFromEnum(self)];
1603 const end = builder.attributes_indices.items[@intFromEnum(self) + 1];
1602 const start = builder.attributes_indices.items[@backingInt(self)];
1603 const end = builder.attributes_indices.items[@backingInt(self) + 1];
16041604 return @ptrCast(builder.attributes_extra.items[start..end]);
16051605 }
16061606
......@@ -1785,8 +1785,8 @@ pub const FunctionAttributes = enum(u32) {
17851785 }
17861786
17871787 fn slice(self: FunctionAttributes, builder: *const Builder) []const Attributes {
1788 const start = builder.attributes_indices.items[@intFromEnum(self)];
1789 const end = builder.attributes_indices.items[@intFromEnum(self) + 1];
1788 const start = builder.attributes_indices.items[@backingInt(self)];
1789 const end = builder.attributes_indices.items[@backingInt(self) + 1];
17901790 return @ptrCast(builder.attributes_extra.items[start..end]);
17911791 }
17921792};
......@@ -1907,87 +1907,87 @@ pub const AddrSpace = enum(u24) {
19071907
19081908 // See llvm/lib/Target/X86/X86.h
19091909 pub const x86 = struct {
1910 pub const gs: AddrSpace = @enumFromInt(256);
1911 pub const fs: AddrSpace = @enumFromInt(257);
1912 pub const ss: AddrSpace = @enumFromInt(258);
1910 pub const gs: AddrSpace = @fromBackingInt(@intCast(256));
1911 pub const fs: AddrSpace = @fromBackingInt(@intCast(257));
1912 pub const ss: AddrSpace = @fromBackingInt(@intCast(258));
19131913
1914 pub const ptr32_sptr: AddrSpace = @enumFromInt(270);
1915 pub const ptr32_uptr: AddrSpace = @enumFromInt(271);
1916 pub const ptr64: AddrSpace = @enumFromInt(272);
1914 pub const ptr32_sptr: AddrSpace = @fromBackingInt(@intCast(270));
1915 pub const ptr32_uptr: AddrSpace = @fromBackingInt(@intCast(271));
1916 pub const ptr64: AddrSpace = @fromBackingInt(@intCast(272));
19171917 };
19181918 pub const x86_64 = x86;
19191919
19201920 // See llvm/lib/Target/AVR/AVR.h
19211921 pub const avr = struct {
1922 pub const data: AddrSpace = @enumFromInt(0);
1923 pub const program: AddrSpace = @enumFromInt(1);
1924 pub const program1: AddrSpace = @enumFromInt(2);
1925 pub const program2: AddrSpace = @enumFromInt(3);
1926 pub const program3: AddrSpace = @enumFromInt(4);
1927 pub const program4: AddrSpace = @enumFromInt(5);
1928 pub const program5: AddrSpace = @enumFromInt(6);
1922 pub const data: AddrSpace = @fromBackingInt(@intCast(0));
1923 pub const program: AddrSpace = @fromBackingInt(@intCast(1));
1924 pub const program1: AddrSpace = @fromBackingInt(@intCast(2));
1925 pub const program2: AddrSpace = @fromBackingInt(@intCast(3));
1926 pub const program3: AddrSpace = @fromBackingInt(@intCast(4));
1927 pub const program4: AddrSpace = @fromBackingInt(@intCast(5));
1928 pub const program5: AddrSpace = @fromBackingInt(@intCast(6));
19291929 };
19301930
19311931 // See llvm/lib/Target/NVPTX/NVPTX.h
19321932 pub const nvptx = struct {
1933 pub const generic: AddrSpace = @enumFromInt(0);
1934 pub const global: AddrSpace = @enumFromInt(1);
1935 pub const constant: AddrSpace = @enumFromInt(2);
1936 pub const shared: AddrSpace = @enumFromInt(3);
1937 pub const param: AddrSpace = @enumFromInt(4);
1938 pub const local: AddrSpace = @enumFromInt(5);
1933 pub const generic: AddrSpace = @fromBackingInt(@intCast(0));
1934 pub const global: AddrSpace = @fromBackingInt(@intCast(1));
1935 pub const constant: AddrSpace = @fromBackingInt(@intCast(2));
1936 pub const shared: AddrSpace = @fromBackingInt(@intCast(3));
1937 pub const param: AddrSpace = @fromBackingInt(@intCast(4));
1938 pub const local: AddrSpace = @fromBackingInt(@intCast(5));
19391939 };
19401940
19411941 // See llvm/lib/Target/AMDGPU/AMDGPU.h
19421942 pub const amdgpu = struct {
1943 pub const flat: AddrSpace = @enumFromInt(0);
1944 pub const global: AddrSpace = @enumFromInt(1);
1945 pub const region: AddrSpace = @enumFromInt(2);
1946 pub const local: AddrSpace = @enumFromInt(3);
1947 pub const constant: AddrSpace = @enumFromInt(4);
1948 pub const private: AddrSpace = @enumFromInt(5);
1949 pub const constant_32bit: AddrSpace = @enumFromInt(6);
1950 pub const buffer_fat_pointer: AddrSpace = @enumFromInt(7);
1951 pub const buffer_resource: AddrSpace = @enumFromInt(8);
1952 pub const buffer_strided_pointer: AddrSpace = @enumFromInt(9);
1953 pub const param_d: AddrSpace = @enumFromInt(6);
1954 pub const param_i: AddrSpace = @enumFromInt(7);
1955 pub const constant_buffer_0: AddrSpace = @enumFromInt(8);
1956 pub const constant_buffer_1: AddrSpace = @enumFromInt(9);
1957 pub const constant_buffer_2: AddrSpace = @enumFromInt(10);
1958 pub const constant_buffer_3: AddrSpace = @enumFromInt(11);
1959 pub const constant_buffer_4: AddrSpace = @enumFromInt(12);
1960 pub const constant_buffer_5: AddrSpace = @enumFromInt(13);
1961 pub const constant_buffer_6: AddrSpace = @enumFromInt(14);
1962 pub const constant_buffer_7: AddrSpace = @enumFromInt(15);
1963 pub const constant_buffer_8: AddrSpace = @enumFromInt(16);
1964 pub const constant_buffer_9: AddrSpace = @enumFromInt(17);
1965 pub const constant_buffer_10: AddrSpace = @enumFromInt(18);
1966 pub const constant_buffer_11: AddrSpace = @enumFromInt(19);
1967 pub const constant_buffer_12: AddrSpace = @enumFromInt(20);
1968 pub const constant_buffer_13: AddrSpace = @enumFromInt(21);
1969 pub const constant_buffer_14: AddrSpace = @enumFromInt(22);
1970 pub const constant_buffer_15: AddrSpace = @enumFromInt(23);
1971 pub const streamout_register: AddrSpace = @enumFromInt(128);
1943 pub const flat: AddrSpace = @fromBackingInt(@intCast(0));
1944 pub const global: AddrSpace = @fromBackingInt(@intCast(1));
1945 pub const region: AddrSpace = @fromBackingInt(@intCast(2));
1946 pub const local: AddrSpace = @fromBackingInt(@intCast(3));
1947 pub const constant: AddrSpace = @fromBackingInt(@intCast(4));
1948 pub const private: AddrSpace = @fromBackingInt(@intCast(5));
1949 pub const constant_32bit: AddrSpace = @fromBackingInt(@intCast(6));
1950 pub const buffer_fat_pointer: AddrSpace = @fromBackingInt(@intCast(7));
1951 pub const buffer_resource: AddrSpace = @fromBackingInt(@intCast(8));
1952 pub const buffer_strided_pointer: AddrSpace = @fromBackingInt(@intCast(9));
1953 pub const param_d: AddrSpace = @fromBackingInt(@intCast(6));
1954 pub const param_i: AddrSpace = @fromBackingInt(@intCast(7));
1955 pub const constant_buffer_0: AddrSpace = @fromBackingInt(@intCast(8));
1956 pub const constant_buffer_1: AddrSpace = @fromBackingInt(@intCast(9));
1957 pub const constant_buffer_2: AddrSpace = @fromBackingInt(@intCast(10));
1958 pub const constant_buffer_3: AddrSpace = @fromBackingInt(@intCast(11));
1959 pub const constant_buffer_4: AddrSpace = @fromBackingInt(@intCast(12));
1960 pub const constant_buffer_5: AddrSpace = @fromBackingInt(@intCast(13));
1961 pub const constant_buffer_6: AddrSpace = @fromBackingInt(@intCast(14));
1962 pub const constant_buffer_7: AddrSpace = @fromBackingInt(@intCast(15));
1963 pub const constant_buffer_8: AddrSpace = @fromBackingInt(@intCast(16));
1964 pub const constant_buffer_9: AddrSpace = @fromBackingInt(@intCast(17));
1965 pub const constant_buffer_10: AddrSpace = @fromBackingInt(@intCast(18));
1966 pub const constant_buffer_11: AddrSpace = @fromBackingInt(@intCast(19));
1967 pub const constant_buffer_12: AddrSpace = @fromBackingInt(@intCast(20));
1968 pub const constant_buffer_13: AddrSpace = @fromBackingInt(@intCast(21));
1969 pub const constant_buffer_14: AddrSpace = @fromBackingInt(@intCast(22));
1970 pub const constant_buffer_15: AddrSpace = @fromBackingInt(@intCast(23));
1971 pub const streamout_register: AddrSpace = @fromBackingInt(@intCast(128));
19721972 };
19731973
19741974 pub const spirv = struct {
1975 pub const function: AddrSpace = @enumFromInt(0);
1976 pub const cross_workgroup: AddrSpace = @enumFromInt(1);
1977 pub const uniform_constant: AddrSpace = @enumFromInt(2);
1978 pub const workgroup: AddrSpace = @enumFromInt(3);
1979 pub const generic: AddrSpace = @enumFromInt(4);
1980 pub const device_only_intel: AddrSpace = @enumFromInt(5);
1981 pub const host_only_intel: AddrSpace = @enumFromInt(6);
1982 pub const input: AddrSpace = @enumFromInt(7);
1975 pub const function: AddrSpace = @fromBackingInt(@intCast(0));
1976 pub const cross_workgroup: AddrSpace = @fromBackingInt(@intCast(1));
1977 pub const uniform_constant: AddrSpace = @fromBackingInt(@intCast(2));
1978 pub const workgroup: AddrSpace = @fromBackingInt(@intCast(3));
1979 pub const generic: AddrSpace = @fromBackingInt(@intCast(4));
1980 pub const device_only_intel: AddrSpace = @fromBackingInt(@intCast(5));
1981 pub const host_only_intel: AddrSpace = @fromBackingInt(@intCast(6));
1982 pub const input: AddrSpace = @fromBackingInt(@intCast(7));
19831983 };
19841984
19851985 // See llvm/include/llvm/CodeGen/WasmAddressSpaces.h
19861986 pub const wasm = struct {
1987 pub const default: AddrSpace = @enumFromInt(0);
1988 pub const variable: AddrSpace = @enumFromInt(1);
1989 pub const externref: AddrSpace = @enumFromInt(10);
1990 pub const funcref: AddrSpace = @enumFromInt(20);
1987 pub const default: AddrSpace = @fromBackingInt(@intCast(0));
1988 pub const variable: AddrSpace = @fromBackingInt(@intCast(1));
1989 pub const externref: AddrSpace = @fromBackingInt(@intCast(10));
1990 pub const funcref: AddrSpace = @fromBackingInt(@intCast(20));
19911991 };
19921992
19931993 pub fn format(addr_space: AddrSpace, w: *Writer) Writer.Error!void {
......@@ -2030,20 +2030,20 @@ pub const Alignment = enum(u6) {
20302030 _,
20312031
20322032 pub fn wrap(a: Alignment) Lazy {
2033 return @enumFromInt(@intFromEnum(a));
2033 return @fromBackingInt(@intCast(@backingInt(a)));
20342034 }
20352035 pub fn resolve(l: Lazy, b: *const Builder) Alignment {
2036 return switch (@intFromEnum(l)) {
2037 0...maxInt(u6) => |raw| @enumFromInt(raw),
2036 return switch (@backingInt(l)) {
2037 0...maxInt(u6) => |raw| @fromBackingInt(@intCast(raw)),
20382038 else => |offset_index| b.alignment_forward_references.items[offset_index - maxInt(u6)],
20392039 };
20402040 }
20412041
20422042 fn fromFwdRefIndex(index: usize) Lazy {
2043 return @enumFromInt(index + maxInt(u6));
2043 return @fromBackingInt(@intCast(index + maxInt(u6)));
20442044 }
20452045 fn toFwdRefIndex(l: Lazy) usize {
2046 return @intFromEnum(l) - maxInt(u6);
2046 return @backingInt(l) - maxInt(u6);
20472047 }
20482048 };
20492049
......@@ -2051,13 +2051,13 @@ pub const Alignment = enum(u6) {
20512051 if (bytes == 0) return .default;
20522052 assert(std.math.isPowerOfTwo(bytes));
20532053 assert(bytes <= 1 << 32);
2054 return @enumFromInt(@ctz(bytes));
2054 return @fromBackingInt(@intCast(@ctz(bytes)));
20552055 }
20562056
20572057 pub fn toByteUnits(self: Alignment) ?u64 {
20582058 return switch (self) {
20592059 .default => null,
2060 else => @as(u64, 1) << @intFromEnum(self),
2060 else => @as(u64, 1) << @backingInt(self),
20612061 };
20622062 }
20632063
......@@ -2065,13 +2065,13 @@ pub const Alignment = enum(u6) {
20652065 pub fn max(a: Alignment, b: Alignment) Alignment {
20662066 assert(a != .default);
20672067 assert(b != .default);
2068 return @enumFromInt(@max(@intFromEnum(a), @intFromEnum(b)));
2068 return @fromBackingInt(@intCast(@max(@backingInt(a), @backingInt(b))));
20692069 }
20702070
20712071 pub fn toLlvm(self: Alignment) u6 {
20722072 return switch (self) {
20732073 .default => 0,
2074 else => @intFromEnum(self) + 1,
2074 else => @backingInt(self) + 1,
20752075 };
20762076 }
20772077
......@@ -2214,7 +2214,7 @@ pub const CallConv = enum(u10) {
22142214 .m68k_rtdcc,
22152215 .riscv_vectorcallcc,
22162216 => try w.print(" {s}", .{@tagName(self)}),
2217 _ => try w.print(" cc{d}", .{@intFromEnum(self)}),
2217 _ => try w.print(" cc{d}", .{@backingInt(self)}),
22182218 }
22192219 }
22202220};
......@@ -2244,7 +2244,7 @@ pub const StrtabString = enum(u32) {
22442244 fn format(data: FormatData, w: *Writer) Writer.Error!void {
22452245 assert(data.string != .none);
22462246 const string_slice = data.string.slice(data.builder) orelse
2247 return w.print("{d}", .{@intFromEnum(data.string)});
2247 return w.print("{d}", .{@backingInt(data.string)});
22482248 const quote_behavior = data.quote_behavior orelse return w.writeAll(string_slice);
22492249 return printEscapedString(string_slice, quote_behavior, w);
22502250 }
......@@ -2261,12 +2261,12 @@ pub const StrtabString = enum(u32) {
22612261 }
22622262
22632263 fn fromIndex(index: ?usize) StrtabString {
2264 return @enumFromInt(@as(u32, @intCast((index orelse return .none) +
2265 @intFromEnum(StrtabString.empty))));
2264 return @fromBackingInt(@intCast(@as(u32, @intCast((index orelse return .none) +
2265 @backingInt(StrtabString.empty)))));
22662266 }
22672267
22682268 fn toIndex(self: StrtabString) ?usize {
2269 return std.math.sub(u32, @intFromEnum(self), @intFromEnum(StrtabString.empty)) catch null;
2269 return std.math.sub(u32, @backingInt(self), @backingInt(StrtabString.empty)) catch null;
22702270 }
22712271
22722272 const Adapter = struct {
......@@ -2354,7 +2354,7 @@ pub const Global = struct {
23542354 pub fn unwrap(orig_index: Index, builder: *const Builder) Index {
23552355 var cur = orig_index;
23562356 while (true) {
2357 switch (builder.globals.values()[@intFromEnum(cur)].kind) {
2357 switch (builder.globals.values()[@backingInt(cur)].kind) {
23582358 .replaced => |replacement| cur = replacement,
23592359 else => return cur,
23602360 }
......@@ -2366,15 +2366,15 @@ pub const Global = struct {
23662366 }
23672367
23682368 pub fn ptr(self: Index, builder: *Builder) *Global {
2369 return &builder.globals.values()[@intFromEnum(self.unwrap(builder))];
2369 return &builder.globals.values()[@backingInt(self.unwrap(builder))];
23702370 }
23712371
23722372 pub fn ptrConst(self: Index, builder: *const Builder) *const Global {
2373 return &builder.globals.values()[@intFromEnum(self.unwrap(builder))];
2373 return &builder.globals.values()[@backingInt(self.unwrap(builder))];
23742374 }
23752375
23762376 pub fn name(self: Index, builder: *const Builder) StrtabString {
2377 return builder.globals.keys()[@intFromEnum(self.unwrap(builder))];
2377 return builder.globals.keys()[@backingInt(self.unwrap(builder))];
23782378 }
23792379
23802380 pub fn strtab(self: Index, builder: *const Builder) struct {
......@@ -2398,7 +2398,7 @@ pub const Global = struct {
23982398 }
23992399
24002400 pub fn toConst(global: Index) Constant {
2401 return @enumFromInt(@intFromEnum(Constant.first_global) + @intFromEnum(global));
2401 return @fromBackingInt(@intCast(@backingInt(Constant.first_global) + @backingInt(global)));
24022402 }
24032403
24042404 pub fn toValue(global: Index) Value {
......@@ -2468,7 +2468,7 @@ pub const Global = struct {
24682468 pub fn toNewFunction(global: Index, builder: *Builder) Allocator.Error!Function.Index {
24692469 try builder.functions.ensureUnusedCapacity(builder.gpa, 1);
24702470 errdefer comptime unreachable;
2471 const function: Function.Index = @enumFromInt(builder.functions.items.len);
2471 const function: Function.Index = @fromBackingInt(@intCast(builder.functions.items.len));
24722472 builder.functions.appendAssumeCapacity(.{
24732473 .global = global,
24742474 .strip = undefined,
......@@ -2482,7 +2482,7 @@ pub const Global = struct {
24822482 pub fn toNewVariable(global: Index, builder: *Builder) Allocator.Error!Variable.Index {
24832483 try builder.variables.ensureUnusedCapacity(builder.gpa, 1);
24842484 errdefer comptime unreachable;
2485 const variable: Variable.Index = @enumFromInt(builder.variables.items.len);
2485 const variable: Variable.Index = @fromBackingInt(@intCast(builder.variables.items.len));
24862486 builder.variables.appendAssumeCapacity(.{ .global = global });
24872487 global.ptr(builder).kind = .{ .variable = variable };
24882488 return variable;
......@@ -2493,7 +2493,7 @@ pub const Global = struct {
24932493 pub fn toNewAlias(global: Index, builder: *Builder) Allocator.Error!Alias.Index {
24942494 try builder.aliases.ensureUnusedCapacity(builder.gpa, 1);
24952495 errdefer comptime unreachable;
2496 const alias: Alias.Index = @enumFromInt(builder.aliases.items.len);
2496 const alias: Alias.Index = @fromBackingInt(@intCast(builder.aliases.items.len));
24972497 builder.aliass.appendAssumeCapacity(.{ .global = global, .aliasee = .none });
24982498 global.ptr(builder).kind = .{ .alias = alias };
24992499 return alias;
......@@ -2522,11 +2522,11 @@ pub const Global = struct {
25222522 fn renameAssumeCapacity(self: Index, new_name: StrtabString, builder: *Builder) void {
25232523 const old_name = self.name(builder);
25242524 if (new_name == old_name) return;
2525 const index = @intFromEnum(self.unwrap(builder));
2525 const index = @backingInt(self.unwrap(builder));
25262526 _ = builder.addGlobalAssumeCapacity(new_name, builder.globals.values()[index]);
25272527 builder.globals.swapRemoveAt(index);
25282528 if (!old_name.isAnon()) return;
2529 builder.next_unnamed_global = @enumFromInt(@intFromEnum(builder.next_unnamed_global) - 1);
2529 builder.next_unnamed_global = @fromBackingInt(@intCast(@backingInt(builder.next_unnamed_global) - 1));
25302530 if (builder.next_unnamed_global == old_name) return;
25312531 builder.getGlobal(builder.next_unnamed_global).?.renameAssumeCapacity(old_name, builder);
25322532 }
......@@ -2539,7 +2539,7 @@ pub const Global = struct {
25392539
25402540 fn replaceAssumeCapacity(self: Index, other: Index, builder: *Builder) void {
25412541 if (self.eql(other, builder)) return;
2542 builder.next_replaced_global = @enumFromInt(@intFromEnum(builder.next_replaced_global) - 1);
2542 builder.next_replaced_global = @fromBackingInt(@intCast(@backingInt(builder.next_replaced_global) - 1));
25432543 self.renameAssumeCapacity(builder.next_replaced_global, builder);
25442544 self.ptr(builder).kind = .{ .replaced = other.unwrap(builder) };
25452545 }
......@@ -2556,11 +2556,11 @@ pub const Alias = struct {
25562556 _,
25572557
25582558 pub fn ptr(self: Index, builder: *Builder) *Alias {
2559 return &builder.aliases.items[@intFromEnum(self)];
2559 return &builder.aliases.items[@backingInt(self)];
25602560 }
25612561
25622562 pub fn ptrConst(self: Index, builder: *const Builder) *const Alias {
2563 return &builder.aliases.items[@intFromEnum(self)];
2563 return &builder.aliases.items[@backingInt(self)];
25642564 }
25652565
25662566 pub fn name(self: Index, builder: *const Builder) StrtabString {
......@@ -2608,11 +2608,11 @@ pub const Variable = struct {
26082608 _,
26092609
26102610 pub fn ptr(self: Index, builder: *Builder) *Variable {
2611 return &builder.variables.items[@intFromEnum(self)];
2611 return &builder.variables.items[@backingInt(self)];
26122612 }
26132613
26142614 pub fn ptrConst(self: Index, builder: *const Builder) *const Variable {
2615 return &builder.variables.items[@intFromEnum(self)];
2615 return &builder.variables.items[@backingInt(self)];
26162616 }
26172617
26182618 pub fn name(self: Index, builder: *const Builder) StrtabString {
......@@ -4119,11 +4119,11 @@ pub const Function = struct {
41194119 _,
41204120
41214121 pub fn ptr(self: Index, builder: *Builder) *Function {
4122 return &builder.functions.items[@intFromEnum(self)];
4122 return &builder.functions.items[@backingInt(self)];
41234123 }
41244124
41254125 pub fn ptrConst(self: Index, builder: *const Builder) *const Function {
4126 return &builder.functions.items[@intFromEnum(self)];
4126 return &builder.functions.items[@backingInt(self)];
41274127 }
41284128
41294129 pub fn name(self: Index, builder: *const Builder) StrtabString {
......@@ -4479,19 +4479,19 @@ pub const Function = struct {
44794479 _,
44804480
44814481 pub fn name(self: Instruction.Index, function: *const Function) String {
4482 return function.names[@intFromEnum(self)];
4482 return function.names[@backingInt(self)];
44834483 }
44844484
44854485 pub fn valueIndex(self: Instruction.Index, function: *const Function) u32 {
4486 return function.value_indices[@intFromEnum(self)];
4486 return function.value_indices[@backingInt(self)];
44874487 }
44884488
44894489 pub fn toValue(self: Instruction.Index) Value {
4490 return @enumFromInt(@intFromEnum(self));
4490 return @fromBackingInt(@intCast(@backingInt(self)));
44914491 }
44924492
44934493 pub fn isTerminatorWip(self: Instruction.Index, wip: *const WipFunction) bool {
4494 return switch (wip.instructions.items(.tag)[@intFromEnum(self)]) {
4494 return switch (wip.instructions.items(.tag)[@backingInt(self)]) {
44954495 .br,
44964496 .br_cond,
44974497 .indirectbr,
......@@ -4505,7 +4505,7 @@ pub const Function = struct {
45054505 }
45064506
45074507 pub fn hasResultWip(self: Instruction.Index, wip: *const WipFunction) bool {
4508 return switch (wip.instructions.items(.tag)[@intFromEnum(self)]) {
4508 return switch (wip.instructions.items(.tag)[@backingInt(self)]) {
45094509 .br,
45104510 .br_cond,
45114511 .fence,
......@@ -4532,7 +4532,7 @@ pub const Function = struct {
45324532 }
45334533
45344534 pub fn typeOfWip(self: Instruction.Index, wip: *const WipFunction) Type {
4535 const instruction = wip.instructions.get(@intFromEnum(self));
4535 const instruction = wip.instructions.get(@backingInt(self));
45364536 return switch (instruction.tag) {
45374537 .add,
45384538 .@"add nsw",
......@@ -4679,7 +4679,7 @@ pub const Function = struct {
46794679 .changeScalarAssumeCapacity(.i1, wip.builder),
46804680 .fneg,
46814681 .@"fneg fast",
4682 => @as(Value, @enumFromInt(instruction.data)).typeOfWip(wip),
4682 => @as(Value, @fromBackingInt(@intCast(instruction.data))).typeOfWip(wip),
46834683 .getelementptr,
46844684 .@"getelementptr inbounds",
46854685 => {
......@@ -4721,7 +4721,7 @@ pub const Function = struct {
47214721 builder: *Builder,
47224722 ) Type {
47234723 const function = function_index.ptrConst(builder);
4724 const instruction = function.instructions.get(@intFromEnum(self));
4724 const instruction = function.instructions.get(@backingInt(self));
47254725 return switch (instruction.tag) {
47264726 .add,
47274727 .@"add nsw",
......@@ -4871,7 +4871,7 @@ pub const Function = struct {
48714871 .changeScalarAssumeCapacity(.i1, builder),
48724872 .fneg,
48734873 .@"fneg fast",
4874 => @as(Value, @enumFromInt(instruction.data)).typeOf(function_index, builder),
4874 => @as(Value, @fromBackingInt(@intCast(instruction.data))).typeOf(function_index, builder),
48754875 .getelementptr,
48764876 .@"getelementptr inbounds",
48774877 => {
......@@ -4963,11 +4963,11 @@ pub const Function = struct {
49634963
49644964 pub fn fromMetadata(metadata: Metadata) Weights {
49654965 assert(metadata.kind == .node);
4966 return @enumFromInt(metadata.index);
4966 return @fromBackingInt(@intCast(metadata.index));
49674967 }
49684968
49694969 pub fn toMetadata(weights: Weights) Metadata {
4970 return .{ .index = @intCast(@intFromEnum(weights)), .kind = .node };
4970 return .{ .index = @intCast(@backingInt(weights)), .kind = .node };
49714971 }
49724972 };
49734973 };
......@@ -5156,7 +5156,7 @@ pub const Function = struct {
51565156 assert(argument.tag == .arg);
51575157 assert(argument.data == index);
51585158
5159 const argument_index: Instruction.Index = @enumFromInt(index);
5159 const argument_index: Instruction.Index = @fromBackingInt(@intCast(index));
51605160 return argument_index.toValue();
51615161 }
51625162
......@@ -5202,7 +5202,7 @@ pub const Function = struct {
52025202 Type,
52035203 Value,
52045204 Instruction.BrCond.Weights,
5205 => @enumFromInt(value),
5205 => @fromBackingInt(@intCast(value)),
52065206 MemoryAccessInfo,
52075207 Instruction.Alloca.Info,
52085208 Instruction.Call.Info,
......@@ -5271,15 +5271,15 @@ pub const WipFunction = struct {
52715271 _,
52725272
52735273 pub fn ptr(self: Index, wip: *WipFunction) *Block {
5274 return &wip.blocks.items[@intFromEnum(self)];
5274 return &wip.blocks.items[@backingInt(self)];
52755275 }
52765276
52775277 pub fn ptrConst(self: Index, wip: *const WipFunction) *const Block {
5278 return &wip.blocks.items[@intFromEnum(self)];
5278 return &wip.blocks.items[@backingInt(self)];
52795279 }
52805280
52815281 pub fn toInst(self: Index, function: *const Function) Instruction.Index {
5282 return function.blocks[@intFromEnum(self)].instruction;
5282 return function.blocks[@backingInt(self)].instruction;
52835283 }
52845284 };
52855285 };
......@@ -5327,14 +5327,14 @@ pub const WipFunction = struct {
53275327 assert(argument.tag == .arg);
53285328 assert(argument.data == index);
53295329
5330 const argument_index: Instruction.Index = @enumFromInt(index);
5330 const argument_index: Instruction.Index = @fromBackingInt(@intCast(index));
53315331 return argument_index.toValue();
53325332 }
53335333
53345334 pub fn block(self: *WipFunction, incoming: u32, name: []const u8) Allocator.Error!Block.Index {
53355335 try self.blocks.ensureUnusedCapacity(self.builder.gpa, 1);
53365336
5337 const index: Block.Index = @enumFromInt(self.blocks.items.len);
5337 const index: Block.Index = @fromBackingInt(@intCast(self.blocks.items.len));
53385338 const final_name = if (self.strip) .empty else try self.builder.string(name);
53395339 self.blocks.appendAssumeCapacity(.{
53405340 .name = final_name,
......@@ -5347,7 +5347,7 @@ pub const WipFunction = struct {
53475347 pub fn ret(self: *WipFunction, val: Value) Allocator.Error!Instruction.Index {
53485348 assert(val.typeOfWip(self) == self.function.typeOf(self.builder).functionReturn(self.builder));
53495349 try self.ensureUnusedExtraCapacity(1, NoExtra, 0);
5350 return try self.addInst(null, .{ .tag = .ret, .data = @intFromEnum(val) });
5350 return try self.addInst(null, .{ .tag = .ret, .data = @backingInt(val) });
53515351 }
53525352
53535353 pub fn retVoid(self: *WipFunction) Allocator.Error!Instruction.Index {
......@@ -5357,7 +5357,7 @@ pub const WipFunction = struct {
53575357
53585358 pub fn br(self: *WipFunction, dest: Block.Index) Allocator.Error!Instruction.Index {
53595359 try self.ensureUnusedExtraCapacity(1, NoExtra, 0);
5360 const instruction = try self.addInst(null, .{ .tag = .br, .data = @intFromEnum(dest) });
5360 const instruction = try self.addInst(null, .{ .tag = .br, .data = @backingInt(dest) });
53615361 dest.ptr(self).branches += 1;
53625362 return instruction;
53635363 }
......@@ -5409,7 +5409,7 @@ pub const WipFunction = struct {
54095409 dest: Block.Index,
54105410 wip: *WipFunction,
54115411 ) Allocator.Error!void {
5412 const instruction = wip.instructions.get(@intFromEnum(self.instruction));
5412 const instruction = wip.instructions.get(@backingInt(self.instruction));
54135413 var extra = wip.extraDataTrail(Instruction.Switch, instruction.data);
54145414 assert(val.typeOf(wip.builder) == extra.data.val.typeOfWip(wip));
54155415 extra.trail.nextMut(extra.data.cases_len, Constant, wip)[self.index] = val;
......@@ -5419,7 +5419,7 @@ pub const WipFunction = struct {
54195419 }
54205420
54215421 pub fn finish(self: WipSwitch, wip: *WipFunction) void {
5422 const instruction = wip.instructions.get(@intFromEnum(self.instruction));
5422 const instruction = wip.instructions.get(@backingInt(self.instruction));
54235423 const extra = wip.extraData(Instruction.Switch, instruction.data);
54245424 assert(self.index == extra.cases_len);
54255425 }
......@@ -5483,7 +5483,7 @@ pub const WipFunction = struct {
54835483 else => unreachable,
54845484 }
54855485 try self.ensureUnusedExtraCapacity(1, NoExtra, 0);
5486 const instruction = try self.addInst(name, .{ .tag = tag, .data = @intFromEnum(val) });
5486 const instruction = try self.addInst(name, .{ .tag = tag, .data = @backingInt(val) });
54875487 return instruction.toValue();
54885488 }
54895489
......@@ -6060,7 +6060,7 @@ pub const WipFunction = struct {
60606060 ) void {
60616061 const incoming_len = self.block.ptrConst(wip).incoming;
60626062 assert(vals.len == incoming_len and blocks.len == incoming_len);
6063 const instruction = wip.instructions.get(@intFromEnum(self.instruction));
6063 const instruction = wip.instructions.get(@backingInt(self.instruction));
60646064 var extra = wip.extraDataTrail(Instruction.Phi, instruction.data);
60656065 for (vals) |val| assert(val.typeOfWip(wip) == extra.data.type);
60666066 @memcpy(extra.trail.nextMut(incoming_len, Value, wip), vals);
......@@ -6326,7 +6326,7 @@ pub const WipFunction = struct {
63266326 if (val == .none) return .none;
63276327 return switch (val.unwrap()) {
63286328 .instruction => |instruction| instructions.items[
6329 @intFromEnum(instruction)
6329 @backingInt(instruction)
63306330 ].toValue(),
63316331 .constant => |constant| constant.toValue(),
63326332 .metadata => |metadata| metadata.toValue(),
......@@ -6366,7 +6366,7 @@ pub const WipFunction = struct {
63666366 Type,
63676367 Value,
63686368 Instruction.BrCond.Weights,
6369 => @intFromEnum(value),
6369 => @backingInt(value),
63706370 MemoryAccessInfo,
63716371 Instruction.Alloca.Info,
63726372 Instruction.Call.Info,
......@@ -6388,7 +6388,7 @@ pub const WipFunction = struct {
63886388
63896389 fn appendMappedValues(wip_extra: *@This(), vals: []const Value, ctx: anytype) void {
63906390 for (wip_extra.items[wip_extra.index..][0..vals.len], vals) |*extra, val|
6391 extra.* = @intFromEnum(ctx.map(val));
6391 extra.* = @backingInt(ctx.map(val));
63926392 wip_extra.index += @intCast(vals.len);
63936393 }
63946394
......@@ -6414,24 +6414,24 @@ pub const WipFunction = struct {
64146414 errdefer function.instructions.shrinkRetainingCapacity(0);
64156415
64166416 {
6417 var final_instruction_index: Instruction.Index = @enumFromInt(0);
6417 var final_instruction_index: Instruction.Index = @fromBackingInt(@intCast(0));
64186418 for (0..params_len) |param_index| {
64196419 instructions.items[param_index] = final_instruction_index;
6420 final_instruction_index = @enumFromInt(@intFromEnum(final_instruction_index) + 1);
6420 final_instruction_index = @fromBackingInt(@intCast(@backingInt(final_instruction_index) + 1));
64216421 }
64226422 for (blocks, self.blocks.items) |*final_block, current_block| {
64236423 assert(current_block.incoming == current_block.branches);
64246424 final_block.instruction = final_instruction_index;
6425 final_instruction_index = @enumFromInt(@intFromEnum(final_instruction_index) + 1);
6425 final_instruction_index = @fromBackingInt(@intCast(@backingInt(final_instruction_index) + 1));
64266426 for (current_block.instructions.items) |instruction| {
6427 instructions.items[@intFromEnum(instruction)] = final_instruction_index;
6428 final_instruction_index = @enumFromInt(@intFromEnum(final_instruction_index) + 1);
6427 instructions.items[@backingInt(instruction)] = final_instruction_index;
6428 final_instruction_index = @fromBackingInt(@intCast(@backingInt(final_instruction_index) + 1));
64296429 }
64306430 }
64316431 }
64326432
64336433 var wip_name: struct {
6434 next_name: String = @enumFromInt(0),
6434 next_name: String = @fromBackingInt(@intCast(0)),
64356435 next_unique_name: std.AutoHashMap(String, String),
64366436 builder: *Builder,
64376437
......@@ -6440,19 +6440,19 @@ pub const WipFunction = struct {
64406440 .none => return .none,
64416441 .empty => {
64426442 assert(wip_name.next_name != .none);
6443 defer wip_name.next_name = @enumFromInt(@intFromEnum(wip_name.next_name) + 1);
6443 defer wip_name.next_name = @fromBackingInt(@intCast(@backingInt(wip_name.next_name) + 1));
64446444 return wip_name.next_name;
64456445 },
64466446 _ => {
64476447 assert(!name.isAnon());
64486448 const gop = try wip_name.next_unique_name.getOrPut(name);
64496449 if (!gop.found_existing) {
6450 gop.value_ptr.* = @enumFromInt(0);
6450 gop.value_ptr.* = @fromBackingInt(@intCast(0));
64516451 return name;
64526452 }
64536453
64546454 while (true) {
6455 gop.value_ptr.* = @enumFromInt(@intFromEnum(gop.value_ptr.*) + 1);
6455 gop.value_ptr.* = @fromBackingInt(@intCast(@backingInt(gop.value_ptr.*) + 1));
64566456 const unique_name = try wip_name.builder.fmt("{f}{s}{f}", .{
64576457 name.fmtRaw(wip_name.builder),
64586458 sep,
......@@ -6460,7 +6460,7 @@ pub const WipFunction = struct {
64606460 });
64616461 const unique_gop = try wip_name.next_unique_name.getOrPut(unique_name);
64626462 if (!unique_gop.found_existing) {
6463 unique_gop.value_ptr.* = @enumFromInt(0);
6463 unique_gop.value_ptr.* = @fromBackingInt(@intCast(0));
64646464 return unique_name;
64656465 }
64666466 }
......@@ -6475,16 +6475,16 @@ pub const WipFunction = struct {
64756475
64766476 var value_index: u32 = 0;
64776477 for (0..params_len) |param_index| {
6478 const old_argument_index: Instruction.Index = @enumFromInt(param_index);
6479 const new_argument_index: Instruction.Index = @enumFromInt(function.instructions.len);
6480 const argument = self.instructions.get(@intFromEnum(old_argument_index));
6478 const old_argument_index: Instruction.Index = @fromBackingInt(@intCast(param_index));
6479 const new_argument_index: Instruction.Index = @fromBackingInt(@intCast(function.instructions.len));
6480 const argument = self.instructions.get(@backingInt(old_argument_index));
64816481 assert(argument.tag == .arg);
64826482 assert(argument.data == param_index);
64836483 value_indices[function.instructions.len] = value_index;
64846484 value_index += 1;
64856485 function.instructions.appendAssumeCapacity(argument);
6486 names[@intFromEnum(new_argument_index)] = try wip_name.map(
6487 if (self.strip) .empty else self.names.items[@intFromEnum(old_argument_index)],
6486 names[@backingInt(new_argument_index)] = try wip_name.map(
6487 if (self.strip) .empty else self.names.items[@backingInt(old_argument_index)],
64886488 ".",
64896489 );
64906490 if (self.debug_locations.get(old_argument_index)) |location| {
......@@ -6495,16 +6495,16 @@ pub const WipFunction = struct {
64956495 }
64966496 }
64976497 for (self.blocks.items) |current_block| {
6498 const new_block_index: Instruction.Index = @enumFromInt(function.instructions.len);
6498 const new_block_index: Instruction.Index = @fromBackingInt(@intCast(function.instructions.len));
64996499 value_indices[function.instructions.len] = value_index;
65006500 function.instructions.appendAssumeCapacity(.{
65016501 .tag = .block,
65026502 .data = current_block.incoming,
65036503 });
6504 names[@intFromEnum(new_block_index)] = try wip_name.map(current_block.name, "");
6504 names[@backingInt(new_block_index)] = try wip_name.map(current_block.name, "");
65056505 for (current_block.instructions.items) |old_instruction_index| {
6506 const new_instruction_index: Instruction.Index = @enumFromInt(function.instructions.len);
6507 var instruction = self.instructions.get(@intFromEnum(old_instruction_index));
6506 const new_instruction_index: Instruction.Index = @fromBackingInt(@intCast(function.instructions.len));
6507 var instruction = self.instructions.get(@backingInt(old_instruction_index));
65086508 switch (instruction.tag) {
65096509 .add,
65106510 .@"add nsw",
......@@ -6702,7 +6702,7 @@ pub const WipFunction = struct {
67026702 .fneg,
67036703 .@"fneg fast",
67046704 .ret,
6705 => instruction.data = @intFromEnum(instructions.map(@enumFromInt(instruction.data))),
6705 => instruction.data = @backingInt(instructions.map(@fromBackingInt(@intCast(instruction.data)))),
67066706 .getelementptr,
67076707 .@"getelementptr inbounds",
67086708 => {
......@@ -6815,10 +6815,10 @@ pub const WipFunction = struct {
68156815 },
68166816 }
68176817 function.instructions.appendAssumeCapacity(instruction);
6818 names[@intFromEnum(new_instruction_index)] = try wip_name.map(if (self.strip)
6818 names[@backingInt(new_instruction_index)] = try wip_name.map(if (self.strip)
68196819 if (old_instruction_index.hasResultWip(self)) .empty else .none
68206820 else
6821 self.names.items[@intFromEnum(old_instruction_index)], ".");
6821 self.names.items[@backingInt(old_instruction_index)], ".");
68226822
68236823 if (self.debug_locations.get(old_instruction_index)) |location| {
68246824 debug_locations.putAssumeCapacity(new_instruction_index, location);
......@@ -6828,7 +6828,7 @@ pub const WipFunction = struct {
68286828 debug_values[index] = new_instruction_index;
68296829 }
68306830
6831 value_indices[@intFromEnum(new_instruction_index)] = value_index;
6831 value_indices[@backingInt(new_instruction_index)] = value_index;
68326832 if (old_instruction_index.hasResultWip(self)) value_index += 1;
68336833 }
68346834 }
......@@ -6996,7 +6996,7 @@ pub const WipFunction = struct {
69966996 else
69976997 .none;
69986998
6999 const index: Instruction.Index = @enumFromInt(self.instructions.len);
6999 const index: Instruction.Index = @fromBackingInt(@intCast(self.instructions.len));
70007000 self.instructions.appendAssumeCapacity(instruction);
70017001 if (!self.strip) {
70027002 self.names.appendAssumeCapacity(final_name);
......@@ -7026,7 +7026,7 @@ pub const WipFunction = struct {
70267026 Type,
70277027 Value,
70287028 Instruction.BrCond.Weights,
7029 => @intFromEnum(value),
7029 => @backingInt(value),
70307030 MemoryAccessInfo,
70317031 Instruction.Alloca.Info,
70327032 Instruction.Call.Info,
......@@ -7079,7 +7079,7 @@ pub const WipFunction = struct {
70797079 Type,
70807080 Value,
70817081 Instruction.BrCond.Weights,
7082 => @enumFromInt(value),
7082 => @fromBackingInt(@intCast(value)),
70837083 MemoryAccessInfo,
70847084 Instruction.Alloca.Info,
70857085 Instruction.Call.Info,
......@@ -7268,7 +7268,7 @@ pub const Constant = enum(u32) {
72687268 no_init = (1 << 30) - 1,
72697269 _,
72707270
7271 const first_global: Constant = @enumFromInt(1 << 29);
7271 const first_global: Constant = @fromBackingInt(@intCast(1 << 29));
72727272
72737273 pub const Tag = enum(u7) {
72747274 positive_integer,
......@@ -7441,14 +7441,14 @@ pub const Constant = enum(u32) {
74417441 constant: u30,
74427442 global: Global.Index,
74437443 } {
7444 return if (@intFromEnum(self) < @intFromEnum(first_global))
7445 .{ .constant = @intCast(@intFromEnum(self)) }
7444 return if (@backingInt(self) < @backingInt(first_global))
7445 .{ .constant = @intCast(@backingInt(self)) }
74467446 else
7447 .{ .global = @enumFromInt(@intFromEnum(self) - @intFromEnum(first_global)) };
7447 .{ .global = @fromBackingInt(@intCast(@backingInt(self) - @backingInt(first_global))) };
74487448 }
74497449
74507450 pub fn toValue(self: Constant) Value {
7451 return @enumFromInt(Value.first_constant + @intFromEnum(self));
7451 return @fromBackingInt(@intCast(Value.first_constant + @backingInt(self)));
74527452 }
74537453
74547454 pub fn typeOf(self: Constant, builder: *Builder) Type {
......@@ -7474,7 +7474,7 @@ pub const Constant = enum(u32) {
74747474 .zeroinitializer,
74757475 .undef,
74767476 .poison,
7477 => @enumFromInt(item.data),
7477 => @fromBackingInt(@intCast(item.data)),
74787478 .structure,
74797479 .packed_structure,
74807480 .array,
......@@ -7482,7 +7482,7 @@ pub const Constant = enum(u32) {
74827482 => builder.constantExtraData(Aggregate, item.data).type,
74837483 .splat => builder.constantExtraData(Splat, item.data).type,
74847484 .string => builder.arrayTypeAssumeCapacity(
7485 @as(String, @enumFromInt(item.data)).slice(builder).?.len,
7485 @as(String, @fromBackingInt(@intCast(item.data))).slice(builder).?.len,
74867486 .i8,
74877487 ),
74887488 .blockaddress => builder.ptrTypeAssumeCapacity(
......@@ -7491,7 +7491,7 @@ pub const Constant = enum(u32) {
74917491 ),
74927492 .dso_local_equivalent,
74937493 .no_cfi,
7494 => builder.ptrTypeAssumeCapacity(@as(Function.Index, @enumFromInt(item.data))
7494 => builder.ptrTypeAssumeCapacity(@as(Function.Index, @fromBackingInt(@intCast(item.data)))
74957495 .ptrConst(builder).global.ptrConst(builder).addr_space),
74967496 .trunc,
74977497 .ptrtoint,
......@@ -7802,7 +7802,7 @@ pub const Constant = enum(u32) {
78027802 try w.writeByte('>');
78037803 },
78047804 .string => try w.print("c{f}", .{
7805 @as(String, @enumFromInt(item.data)).fmtQ(data.builder),
7805 @as(String, @fromBackingInt(@intCast(item.data))).fmtQ(data.builder),
78067806 }),
78077807 .blockaddress => |tag| {
78087808 const extra = data.builder.constantExtraData(BlockAddress, item.data);
......@@ -7816,7 +7816,7 @@ pub const Constant = enum(u32) {
78167816 .dso_local_equivalent,
78177817 .no_cfi,
78187818 => |tag| {
7819 const function: Function.Index = @enumFromInt(item.data);
7819 const function: Function.Index = @fromBackingInt(@intCast(item.data));
78207820 try w.print("{s} {f}", .{
78217821 @tagName(tag),
78227822 function.ptrConst(data.builder).global.fmt(data.builder),
......@@ -7905,10 +7905,10 @@ pub const Constant = enum(u32) {
79057905
79067906pub const Value = enum(u32) {
79077907 none = maxInt(u31),
7908 false = first_constant + @intFromEnum(Constant.false),
7909 true = first_constant + @intFromEnum(Constant.true),
7910 @"0" = first_constant + @intFromEnum(Constant.@"0"),
7911 @"1" = first_constant + @intFromEnum(Constant.@"1"),
7908 false = first_constant + @backingInt(Constant.false),
7909 true = first_constant + @backingInt(Constant.true),
7910 @"0" = first_constant + @backingInt(Constant.@"0"),
7911 @"1" = first_constant + @backingInt(Constant.@"1"),
79127912 _,
79137913
79147914 const first_constant = 1 << 30;
......@@ -7919,12 +7919,12 @@ pub const Value = enum(u32) {
79197919 constant: Constant,
79207920 metadata: Metadata,
79217921 } {
7922 return if (@intFromEnum(self) < first_constant)
7923 .{ .instruction = @enumFromInt(@intFromEnum(self)) }
7924 else if (@intFromEnum(self) < first_metadata)
7925 .{ .constant = @enumFromInt(@intFromEnum(self) - first_constant) }
7922 return if (@backingInt(self) < first_constant)
7923 .{ .instruction = @fromBackingInt(@intCast(@backingInt(self))) }
7924 else if (@backingInt(self) < first_metadata)
7925 .{ .constant = @fromBackingInt(@intCast(@backingInt(self) - first_constant)) }
79267926 else
7927 .{ .metadata = @bitCast(@intFromEnum(self) - first_metadata) };
7927 .{ .metadata = @bitCast(@backingInt(self) - first_metadata) };
79287928 }
79297929
79307930 pub fn typeOfWip(self: Value, wip: *const WipFunction) Type {
......@@ -8016,7 +8016,7 @@ pub const Metadata = packed struct(u32) {
80168016 return .{ .index = metadata.index, .kind = metadata.kind, .is_none = false };
80178017 }
80188018 pub fn toValue(metadata: Metadata) Value {
8019 return @enumFromInt(Value.first_metadata + @as(u32, @bitCast(metadata)));
8019 return @fromBackingInt(@intCast(Value.first_metadata + @as(u32, @bitCast(metadata))));
80208020 }
80218021
80228022 pub const String = enum(u32) {
......@@ -8032,7 +8032,7 @@ pub const Metadata = packed struct(u32) {
80328032 pub fn unwrap(metadata: Metadata.String.Optional) ?Metadata.String {
80338033 return switch (metadata) {
80348034 .none => null,
8035 else => @enumFromInt(@intFromEnum(metadata)),
8035 else => @fromBackingInt(@intCast(@backingInt(metadata))),
80368036 };
80378037 }
80388038 pub fn toMetadata(metadata: Metadata.String.Optional) Metadata.Optional {
......@@ -8040,14 +8040,14 @@ pub const Metadata = packed struct(u32) {
80408040 }
80418041 };
80428042 pub fn toOptional(metadata: Metadata.String) Metadata.String.Optional {
8043 return @enumFromInt(@intFromEnum(metadata));
8043 return @fromBackingInt(@intCast(@backingInt(metadata)));
80448044 }
80458045 pub fn toMetadata(metadata: Metadata.String) Metadata {
8046 return .{ .index = @intCast(@intFromEnum(metadata)), .kind = .string };
8046 return .{ .index = @intCast(@backingInt(metadata)), .kind = .string };
80478047 }
80488048
80498049 pub fn slice(metadata: Metadata.String, builder: *const Builder) []const u8 {
8050 const index = @intFromEnum(metadata);
8050 const index = @backingInt(metadata);
80518051 const start = builder.metadata_string_indices.items[index];
80528052 const end = builder.metadata_string_indices.items[index + 1];
80538053 return builder.metadata_string_bytes.items[start..end];
......@@ -8059,7 +8059,7 @@ pub const Metadata = packed struct(u32) {
80598059 return @truncate(std.hash.Wyhash.hash(0, key));
80608060 }
80618061 pub fn eql(ctx: Adapter, lhs_key: []const u8, _: void, rhs_index: usize) bool {
8062 const rhs_metadata: Metadata.String = @enumFromInt(rhs_index);
8062 const rhs_metadata: Metadata.String = @fromBackingInt(@intCast(rhs_index));
80638063 return std.mem.eql(u8, lhs_key, rhs_metadata.slice(ctx.builder));
80648064 }
80658065 };
......@@ -8077,7 +8077,7 @@ pub const Metadata = packed struct(u32) {
80778077 };
80788078 pub fn toString(metadata: Metadata) Metadata.String {
80798079 assert(metadata.kind == .string);
8080 return @enumFromInt(metadata.index);
8080 return @fromBackingInt(@intCast(metadata.index));
80818081 }
80828082
80838083 pub const Tag = enum(u6) {
......@@ -8542,7 +8542,7 @@ pub const Metadata = packed struct(u32) {
85428542 try w.writeByte(')');
85438543 },
85448544 .constant => try Constant.format(.{
8545 .constant = @enumFromInt(node_item.data),
8545 .constant = @fromBackingInt(@intCast(node_item.data)),
85468546 .builder = builder,
85478547 .flags = data.specialized orelse .{},
85488548 }, w),
......@@ -8744,7 +8744,7 @@ pub fn init(options: Options) Allocator.Error!Builder {
87448744 .string_bytes = .empty,
87458745
87468746 .types = .empty,
8747 .next_unnamed_type = @enumFromInt(0),
8747 .next_unnamed_type = @fromBackingInt(@intCast(0)),
87488748 .next_unique_type_id = .empty,
87498749 .type_map = .empty,
87508750 .type_items = .empty,
......@@ -8758,7 +8758,7 @@ pub fn init(options: Options) Allocator.Error!Builder {
87588758 .function_attributes_set = .empty,
87598759
87608760 .globals = .empty,
8761 .next_unnamed_global = @enumFromInt(0),
8761 .next_unnamed_global = @fromBackingInt(@intCast(0)),
87628762 .next_replaced_global = .none,
87638763 .next_unique_global_id = .empty,
87648764 .aliases = .empty,
......@@ -8815,7 +8815,7 @@ pub fn init(options: Options) Allocator.Error!Builder {
88158815 assert(self.intTypeAssumeCapacity(bits) ==
88168816 @field(Type, std.fmt.comptimePrint("i{d}", .{bits})));
88178817 inline for (.{ 0, 4 }) |addr_space_index| {
8818 const addr_space: AddrSpace = @enumFromInt(addr_space_index);
8818 const addr_space: AddrSpace = @fromBackingInt(@intCast(addr_space_index));
88198819 assert(self.ptrTypeAssumeCapacity(addr_space) ==
88208820 @field(Type, std.fmt.comptimePrint("ptr{f}", .{addr_space.fmt(" ")})));
88218821 }
......@@ -9070,9 +9070,9 @@ pub fn namedTypeSetBody(
90709070 named_type: Type,
90719071 body_type: Type,
90729072) void {
9073 const named_item = self.type_items.items[@intFromEnum(named_type)];
9073 const named_item = self.type_items.items[@backingInt(named_type)];
90749074 self.type_extra.items[named_item.data + std.meta.fieldIndex(Type.NamedStructure, "body").?] =
9075 @intFromEnum(body_type);
9075 @backingInt(body_type);
90769076}
90779077
90789078pub fn attr(self: *Builder, attribute: Attribute) Allocator.Error!Attribute.Index {
......@@ -9080,7 +9080,7 @@ pub fn attr(self: *Builder, attribute: Attribute) Allocator.Error!Attribute.Inde
90809080
90819081 const gop = self.attributes.getOrPutAssumeCapacity(attribute.toStorage());
90829082 if (!gop.found_existing) gop.value_ptr.* = {};
9083 return @enumFromInt(gop.index);
9083 return @fromBackingInt(@intCast(gop.index));
90849084}
90859085
90869086pub fn attrs(self: *Builder, attributes: []Attribute.Index) Allocator.Error!Attributes {
......@@ -9089,20 +9089,20 @@ pub fn attrs(self: *Builder, attributes: []Attribute.Index) Allocator.Error!Attr
90899089 const lhs_kind = lhs.getKind(builder);
90909090 const rhs_kind = rhs.getKind(builder);
90919091 assert(lhs_kind != rhs_kind);
9092 return @intFromEnum(lhs_kind) < @intFromEnum(rhs_kind);
9092 return @backingInt(lhs_kind) < @backingInt(rhs_kind);
90939093 }
90949094 }.lessThan);
9095 return @enumFromInt(try self.attrGeneric(@ptrCast(attributes)));
9095 return @fromBackingInt(@intCast(try self.attrGeneric(@ptrCast(attributes))));
90969096}
90979097
90989098pub fn fnAttrs(self: *Builder, fn_attributes: []const Attributes) Allocator.Error!FunctionAttributes {
90999099 try self.function_attributes_set.ensureUnusedCapacity(self.gpa, 1);
9100 const function_attributes: FunctionAttributes = @enumFromInt(try self.attrGeneric(@ptrCast(
9100 const function_attributes: FunctionAttributes = @fromBackingInt(@intCast(try self.attrGeneric(@ptrCast(
91019101 fn_attributes[0..if (std.mem.lastIndexOfNone(Attributes, fn_attributes, &.{.none})) |last|
91029102 last + 1
91039103 else
91049104 0],
9105 )));
9105 ))));
91069106
91079107 _ = self.function_attributes_set.getOrPutAssumeCapacity(function_attributes);
91089108 return function_attributes;
......@@ -9121,13 +9121,13 @@ pub fn addGlobalAssumeCapacity(self: *Builder, name: StrtabString, global: Globa
91219121 if (name == .empty) {
91229122 id = self.next_unnamed_global;
91239123 assert(id != self.next_replaced_global);
9124 self.next_unnamed_global = @enumFromInt(@intFromEnum(id) + 1);
9124 self.next_unnamed_global = @fromBackingInt(@intCast(@backingInt(id) + 1));
91259125 }
91269126 while (true) {
91279127 const global_gop = self.globals.getOrPutAssumeCapacity(id);
91289128 if (!global_gop.found_existing) {
91299129 global_gop.value_ptr.* = global;
9130 const global_index: Global.Index = @enumFromInt(global_gop.index);
9130 const global_index: Global.Index = @fromBackingInt(@intCast(global_gop.index));
91319131 global_index.updateDsoLocal(self);
91329132 return global_index;
91339133 }
......@@ -9140,7 +9140,7 @@ pub fn addGlobalAssumeCapacity(self: *Builder, name: StrtabString, global: Globa
91409140}
91419141
91429142pub fn getGlobal(self: *const Builder, name: StrtabString) ?Global.Index {
9143 return @enumFromInt(self.globals.getIndex(name) orelse return null);
9143 return @fromBackingInt(@intCast(self.globals.getIndex(name) orelse return null));
91449144}
91459145
91469146pub fn addAlias(
......@@ -9164,7 +9164,7 @@ pub fn addAliasAssumeCapacity(
91649164 addr_space: AddrSpace,
91659165 aliasee: Constant,
91669166) Alias.Index {
9167 const alias_index: Alias.Index = @enumFromInt(self.aliases.items.len);
9167 const alias_index: Alias.Index = @fromBackingInt(@intCast(self.aliases.items.len));
91689168 self.aliases.appendAssumeCapacity(.{ .global = self.addGlobalAssumeCapacity(name, .{
91699169 .addr_space = addr_space,
91709170 .type = ty,
......@@ -9192,7 +9192,7 @@ pub fn addVariableAssumeCapacity(
91929192 name: StrtabString,
91939193 addr_space: AddrSpace,
91949194) Variable.Index {
9195 const variable_index: Variable.Index = @enumFromInt(self.variables.items.len);
9195 const variable_index: Variable.Index = @fromBackingInt(@intCast(self.variables.items.len));
91969196 self.variables.appendAssumeCapacity(.{ .global = self.addGlobalAssumeCapacity(name, .{
91979197 .addr_space = addr_space,
91989198 .type = ty,
......@@ -9221,7 +9221,7 @@ pub fn addFunctionAssumeCapacity(
92219221 addr_space: AddrSpace,
92229222) Function.Index {
92239223 assert(ty.isFunction(self));
9224 const function_index: Function.Index = @enumFromInt(self.functions.items.len);
9224 const function_index: Function.Index = @fromBackingInt(@intCast(self.functions.items.len));
92259225 self.functions.appendAssumeCapacity(.{
92269226 .global = self.addGlobalAssumeCapacity(name, .{
92279227 .addr_space = addr_space,
......@@ -9331,7 +9331,7 @@ pub fn getIntrinsic(
93319331pub fn intConst(self: *Builder, ty: Type, value: anytype) Allocator.Error!Constant {
93329332 const int_value = switch (@typeInfo(@TypeOf(value))) {
93339333 .int, .comptime_int => value,
9334 .@"enum" => @intFromEnum(value),
9334 .@"enum" => @backingInt(value),
93359335 else => @compileError("intConst expected an integral value, got " ++ @typeName(@TypeOf(value))),
93369336 };
93379337 var limbs: [
......@@ -9750,7 +9750,7 @@ pub fn print(self: *Builder, w: *Writer) (Writer.Error || Allocator.Error)!void
97509750 for (self.variables.items, 0..) |variable, variable_i| {
97519751 // Skip the variable if its global has been repurposed for something else.
97529752 switch (variable.global.ptrConst(self).kind) {
9753 .variable => |v| if (@intFromEnum(v) != variable_i) continue,
9753 .variable => |v| if (@backingInt(v) != variable_i) continue,
97549754 else => continue,
97559755 }
97569756 const global = variable.global.ptrConst(self);
......@@ -9792,7 +9792,7 @@ pub fn print(self: *Builder, w: *Writer) (Writer.Error || Allocator.Error)!void
97929792 for (self.aliases.items, 0..) |alias, alias_i| {
97939793 // Skip the alias if its global has been repurposed for something else.
97949794 switch (alias.global.ptrConst(self).kind) {
9795 .alias => |a| if (@intFromEnum(a) != alias_i) continue,
9795 .alias => |a| if (@backingInt(a) != alias_i) continue,
97969796 else => continue,
97979797 }
97989798 const global = alias.global.ptrConst(self);
......@@ -9822,11 +9822,11 @@ pub fn print(self: *Builder, w: *Writer) (Writer.Error || Allocator.Error)!void
98229822 for (0.., self.functions.items) |function_i, function| {
98239823 // Skip the function if its global has been repurposed for something else.
98249824 switch (function.global.ptrConst(self).kind) {
9825 .function => |f| if (@intFromEnum(f) != function_i) continue,
9825 .function => |f| if (@backingInt(f) != function_i) continue,
98269826 else => continue,
98279827 }
98289828 if (need_newline) try w.writeByte('\n') else need_newline = true;
9829 const function_index: Function.Index = @enumFromInt(function_i);
9829 const function_index: Function.Index = @fromBackingInt(@intCast(function_i));
98309830 const global = function.global.ptrConst(self);
98319831 const params_len = global.type.functionParameters(self).len;
98329832 const function_attributes = function.attributes.func(self);
......@@ -9887,8 +9887,8 @@ pub fn print(self: *Builder, w: *Writer) (Writer.Error || Allocator.Error)!void
98879887 try w.writeAll(" {\n");
98889888 var maybe_dbg_index: ?u32 = null;
98899889 for (params_len..function.instructions.len) |instruction_i| {
9890 const instruction_index: Function.Instruction.Index = @enumFromInt(instruction_i);
9891 const instruction = function.instructions.get(@intFromEnum(instruction_index));
9890 const instruction_index: Function.Instruction.Index = @fromBackingInt(@intCast(instruction_i));
9891 const instruction = function.instructions.get(@backingInt(instruction_index));
98929892 if (function.debug_locations.get(instruction_index)) |debug_location| switch (debug_location) {
98939893 .no_location => maybe_dbg_index = null,
98949894 .location => |location| {
......@@ -10052,13 +10052,13 @@ pub fn print(self: *Builder, w: *Writer) (Writer.Error || Allocator.Error)!void
1005210052 .block => {
1005310053 block_incoming_len = instruction.data;
1005410054 const name = instruction_index.name(&function);
10055 if (@intFromEnum(instruction_index) > params_len)
10055 if (@backingInt(instruction_index) > params_len)
1005610056 try w.writeByte('\n');
1005710057 try w.print("{f}:\n", .{name.fmt(self)});
1005810058 continue;
1005910059 },
1006010060 .br => |tag| {
10061 const target: Function.Block.Index = @enumFromInt(instruction.data);
10061 const target: Function.Block.Index = @fromBackingInt(@intCast(instruction.data));
1006210062 try w.print(" {s} {f}", .{
1006310063 @tagName(tag), target.toInst(&function).fmt(function_index, self, .{ .percent = true }),
1006410064 });
......@@ -10187,7 +10187,7 @@ pub fn print(self: *Builder, w: *Writer) (Writer.Error || Allocator.Error)!void
1018710187 .fneg,
1018810188 .@"fneg fast",
1018910189 => |tag| {
10190 const val: Value = @enumFromInt(instruction.data);
10190 const val: Value = @fromBackingInt(@intCast(instruction.data));
1019110191 try w.print(" %{f} = {s} {f}", .{
1019210192 instruction_index.name(&function).fmt(self),
1019310193 @tagName(tag),
......@@ -10288,7 +10288,7 @@ pub fn print(self: *Builder, w: *Writer) (Writer.Error || Allocator.Error)!void
1028810288 }
1028910289 },
1029010290 .ret => |tag| {
10291 const val: Value = @enumFromInt(instruction.data);
10291 const val: Value = @fromBackingInt(@intCast(instruction.data));
1029210292 try w.print(" {s} {f}", .{
1029310293 @tagName(tag),
1029410294 val.fmt(function_index, self, .{ .percent = true }),
......@@ -10498,7 +10498,7 @@ pub fn print(self: *Builder, w: *Writer) (Writer.Error || Allocator.Error)!void
1049810498 .thisAdjustment = null,
1049910499 .flags = extra.di_flags,
1050010500 .spFlags = @as(Metadata.Subprogram.DISPFlags, @bitCast(@as(u32, @as(u3, @intCast(
10501 @intFromEnum(kind) - @intFromEnum(Metadata.Tag.subprogram),
10501 @backingInt(kind) - @backingInt(Metadata.Tag.subprogram),
1050210502 ))) << 2)),
1050310503 .unit = extra.compile_unit,
1050410504 .templateParams = null,
......@@ -10818,7 +10818,7 @@ fn fnTypeAssumeCapacity(
1081810818 const Adapter = struct {
1081910819 builder: *const Builder,
1082010820 pub fn hash(_: @This(), key: Key) u32 {
10821 var hasher = std.hash.Wyhash.init(comptime std.hash.int(@intFromEnum(tag)));
10821 var hasher = std.hash.Wyhash.init(comptime std.hash.int(@backingInt(tag)));
1082210822 hasher.update(std.mem.asBytes(&key.ret));
1082310823 hasher.update(std.mem.sliceAsBytes(key.params));
1082410824 return @truncate(hasher.final());
......@@ -10847,7 +10847,7 @@ fn fnTypeAssumeCapacity(
1084710847 });
1084810848 self.type_extra.appendSliceAssumeCapacity(@ptrCast(params));
1084910849 }
10850 return @enumFromInt(gop.index);
10850 return @fromBackingInt(@intCast(gop.index));
1085110851}
1085210852
1085310853fn intTypeAssumeCapacity(self: *Builder, bits: u24) Type {
......@@ -10858,7 +10858,7 @@ fn intTypeAssumeCapacity(self: *Builder, bits: u24) Type {
1085810858
1085910859fn ptrTypeAssumeCapacity(self: *Builder, addr_space: AddrSpace) Type {
1086010860 const result = self.getOrPutTypeNoExtraAssumeCapacity(
10861 .{ .tag = .pointer, .data = @intFromEnum(addr_space) },
10861 .{ .tag = .pointer, .data = @backingInt(addr_space) },
1086210862 );
1086310863 return result.type;
1086410864}
......@@ -10878,7 +10878,7 @@ fn vectorTypeAssumeCapacity(
1087810878 builder: *const Builder,
1087910879 pub fn hash(_: @This(), key: Type.Vector) u32 {
1088010880 return @truncate(std.hash.Wyhash.hash(
10881 comptime std.hash.int(@intFromEnum(tag)),
10881 comptime std.hash.int(@backingInt(tag)),
1088210882 std.mem.asBytes(&key),
1088310883 ));
1088410884 }
......@@ -10898,7 +10898,7 @@ fn vectorTypeAssumeCapacity(
1089810898 .data = self.addTypeExtraAssumeCapacity(data),
1089910899 });
1090010900 }
10901 return @enumFromInt(gop.index);
10901 return @fromBackingInt(@intCast(gop.index));
1090210902}
1090310903
1090410904fn arrayTypeAssumeCapacity(self: *Builder, len: u64, child: Type) Type {
......@@ -10907,7 +10907,7 @@ fn arrayTypeAssumeCapacity(self: *Builder, len: u64, child: Type) Type {
1090710907 builder: *const Builder,
1090810908 pub fn hash(_: @This(), key: Type.Vector) u32 {
1090910909 return @truncate(std.hash.Wyhash.hash(
10910 comptime std.hash.int(@intFromEnum(Type.Tag.small_array)),
10910 comptime std.hash.int(@backingInt(Type.Tag.small_array)),
1091110911 std.mem.asBytes(&key),
1091210912 ));
1091310913 }
......@@ -10927,13 +10927,13 @@ fn arrayTypeAssumeCapacity(self: *Builder, len: u64, child: Type) Type {
1092710927 .data = self.addTypeExtraAssumeCapacity(data),
1092810928 });
1092910929 }
10930 return @enumFromInt(gop.index);
10930 return @fromBackingInt(@intCast(gop.index));
1093110931 } else {
1093210932 const Adapter = struct {
1093310933 builder: *const Builder,
1093410934 pub fn hash(_: @This(), key: Type.Array) u32 {
1093510935 return @truncate(std.hash.Wyhash.hash(
10936 comptime std.hash.int(@intFromEnum(Type.Tag.array)),
10936 comptime std.hash.int(@backingInt(Type.Tag.array)),
1093710937 std.mem.asBytes(&key),
1093810938 ));
1093910939 }
......@@ -10957,7 +10957,7 @@ fn arrayTypeAssumeCapacity(self: *Builder, len: u64, child: Type) Type {
1095710957 .data = self.addTypeExtraAssumeCapacity(data),
1095810958 });
1095910959 }
10960 return @enumFromInt(gop.index);
10960 return @fromBackingInt(@intCast(gop.index));
1096110961 }
1096210962}
1096310963
......@@ -10974,7 +10974,7 @@ fn structTypeAssumeCapacity(
1097410974 builder: *const Builder,
1097510975 pub fn hash(_: @This(), key: []const Type) u32 {
1097610976 return @truncate(std.hash.Wyhash.hash(
10977 comptime std.hash.int(@intFromEnum(tag)),
10977 comptime std.hash.int(@backingInt(tag)),
1097810978 std.mem.sliceAsBytes(key),
1097910979 ));
1098010980 }
......@@ -10998,7 +10998,7 @@ fn structTypeAssumeCapacity(
1099810998 });
1099910999 self.type_extra.appendSliceAssumeCapacity(@ptrCast(fields));
1100011000 }
11001 return @enumFromInt(gop.index);
11001 return @fromBackingInt(@intCast(gop.index));
1100211002}
1100311003
1100411004fn opaqueTypeAssumeCapacity(self: *Builder, name: String) Type {
......@@ -11006,7 +11006,7 @@ fn opaqueTypeAssumeCapacity(self: *Builder, name: String) Type {
1100611006 builder: *const Builder,
1100711007 pub fn hash(_: @This(), key: String) u32 {
1100811008 return @truncate(std.hash.Wyhash.hash(
11009 comptime std.hash.int(@intFromEnum(Type.Tag.named_structure)),
11009 comptime std.hash.int(@backingInt(Type.Tag.named_structure)),
1101011010 std.mem.asBytes(&key),
1101111011 ));
1101211012 }
......@@ -11020,7 +11020,7 @@ fn opaqueTypeAssumeCapacity(self: *Builder, name: String) Type {
1102011020 if (name == .empty) {
1102111021 id = self.next_unnamed_type;
1102211022 assert(id != .none);
11023 self.next_unnamed_type = @enumFromInt(@intFromEnum(id) + 1);
11023 self.next_unnamed_type = @fromBackingInt(@intCast(@backingInt(id) + 1));
1102411024 } else assert(!name.isAnon());
1102511025 while (true) {
1102611026 const type_gop = self.types.getOrPutAssumeCapacity(id);
......@@ -11036,7 +11036,7 @@ fn opaqueTypeAssumeCapacity(self: *Builder, name: String) Type {
1103611036 .body = .none,
1103711037 }),
1103811038 });
11039 const result: Type = @enumFromInt(gop.index);
11039 const result: Type = @fromBackingInt(@intCast(gop.index));
1104011040 type_gop.value_ptr.* = result;
1104111041 return result;
1104211042 }
......@@ -11067,7 +11067,7 @@ fn getOrPutTypeNoExtraAssumeCapacity(self: *Builder, item: Type.Item) struct { n
1106711067 builder: *const Builder,
1106811068 pub fn hash(_: @This(), key: Type.Item) u32 {
1106911069 return @truncate(std.hash.Wyhash.hash(
11070 comptime std.hash.int(@intFromEnum(Type.Tag.simple)),
11070 comptime std.hash.int(@backingInt(Type.Tag.simple)),
1107111071 std.mem.asBytes(&key),
1107211072 ));
1107311073 }
......@@ -11083,7 +11083,7 @@ fn getOrPutTypeNoExtraAssumeCapacity(self: *Builder, item: Type.Item) struct { n
1108311083 gop.value_ptr.* = {};
1108411084 self.type_items.appendAssumeCapacity(item);
1108511085 }
11086 return .{ .new = !gop.found_existing, .type = @enumFromInt(gop.index) };
11086 return .{ .new = !gop.found_existing, .type = @fromBackingInt(@intCast(gop.index)) };
1108711087}
1108811088
1108911089fn addTypeExtraAssumeCapacity(self: *Builder, extra: anytype) Type.Item.ExtraIndex {
......@@ -11093,7 +11093,7 @@ fn addTypeExtraAssumeCapacity(self: *Builder, extra: anytype) Type.Item.ExtraInd
1109311093 const value = @field(extra, field_name);
1109411094 self.type_extra.appendAssumeCapacity(switch (field_type) {
1109511095 u32 => value,
11096 String, Type => @intFromEnum(value),
11096 String, Type => @backingInt(value),
1109711097 else => @compileError("bad field type: " ++ field_name ++ ": " ++ @typeName(field_type)),
1109811098 });
1109911099 }
......@@ -11135,7 +11135,7 @@ fn typeExtraDataTrail(
1113511135 ) |field_name, field_type, value|
1113611136 @field(result, field_name) = switch (field_type) {
1113711137 u32 => value,
11138 String, Type => @enumFromInt(value),
11138 String, Type => @fromBackingInt(@intCast(value)),
1113911139 else => @compileError("bad field type: " ++ @typeName(field_type)),
1114011140 };
1114111141 return .{
......@@ -11177,7 +11177,7 @@ fn bigIntConstAssumeCapacity(
1117711177 ty: Type,
1117811178 value: std.math.big.int.Const,
1117911179) Allocator.Error!Constant {
11180 const type_item = self.type_items.items[@intFromEnum(ty)];
11180 const type_item = self.type_items.items[@backingInt(ty)];
1118111181 assert(type_item.tag == .integer);
1118211182 const bits = type_item.data;
1118311183
......@@ -11206,7 +11206,7 @@ fn bigIntConstAssumeCapacity(
1120611206 const Adapter = struct {
1120711207 builder: *const Builder,
1120811208 pub fn hash(_: @This(), key: Key) u32 {
11209 var hasher = std.hash.Wyhash.init(std.hash.int(@intFromEnum(key.tag)));
11209 var hasher = std.hash.Wyhash.init(std.hash.int(@backingInt(key.tag)));
1121011210 hasher.update(std.mem.asBytes(&key.type));
1121111211 hasher.update(std.mem.sliceAsBytes(key.limbs));
1121211212 return @truncate(hasher.final());
......@@ -11239,7 +11239,7 @@ fn bigIntConstAssumeCapacity(
1123911239 extra.* = .{ .type = ty, .limbs_len = @intCast(canonical_value.limbs.len) };
1124011240 self.constant_limbs.appendSliceAssumeCapacity(canonical_value.limbs);
1124111241 }
11242 return @enumFromInt(gop.index);
11242 return @fromBackingInt(@intCast(gop.index));
1124311243}
1124411244
1124511245fn halfConstAssumeCapacity(self: *Builder, val: f16) Constant {
......@@ -11269,7 +11269,7 @@ fn doubleConstAssumeCapacity(self: *Builder, val: f64) Constant {
1126911269 builder: *const Builder,
1127011270 pub fn hash(_: @This(), key: f64) u32 {
1127111271 return @truncate(std.hash.Wyhash.hash(
11272 comptime std.hash.int(@intFromEnum(Constant.Tag.double)),
11272 comptime std.hash.int(@backingInt(Constant.Tag.double)),
1127311273 std.mem.asBytes(&key),
1127411274 ));
1127511275 }
......@@ -11292,7 +11292,7 @@ fn doubleConstAssumeCapacity(self: *Builder, val: f64) Constant {
1129211292 }),
1129311293 });
1129411294 }
11295 return @enumFromInt(gop.index);
11295 return @fromBackingInt(@intCast(gop.index));
1129611296}
1129711297
1129811298fn fp128ConstAssumeCapacity(self: *Builder, val: f128) Constant {
......@@ -11300,7 +11300,7 @@ fn fp128ConstAssumeCapacity(self: *Builder, val: f128) Constant {
1130011300 builder: *const Builder,
1130111301 pub fn hash(_: @This(), key: f128) u32 {
1130211302 return @truncate(std.hash.Wyhash.hash(
11303 comptime std.hash.int(@intFromEnum(Constant.Tag.fp128)),
11303 comptime std.hash.int(@backingInt(Constant.Tag.fp128)),
1130411304 std.mem.asBytes(&key),
1130511305 ));
1130611306 }
......@@ -11326,7 +11326,7 @@ fn fp128ConstAssumeCapacity(self: *Builder, val: f128) Constant {
1132611326 }),
1132711327 });
1132811328 }
11329 return @enumFromInt(gop.index);
11329 return @fromBackingInt(@intCast(gop.index));
1133011330}
1133111331
1133211332fn x86_fp80ConstAssumeCapacity(self: *Builder, val: f80) Constant {
......@@ -11334,7 +11334,7 @@ fn x86_fp80ConstAssumeCapacity(self: *Builder, val: f80) Constant {
1133411334 builder: *const Builder,
1133511335 pub fn hash(_: @This(), key: f80) u32 {
1133611336 return @truncate(std.hash.Wyhash.hash(
11337 comptime std.hash.int(@intFromEnum(Constant.Tag.x86_fp80)),
11337 comptime std.hash.int(@backingInt(Constant.Tag.x86_fp80)),
1133811338 std.mem.asBytes(&key)[0..10],
1133911339 ));
1134011340 }
......@@ -11359,7 +11359,7 @@ fn x86_fp80ConstAssumeCapacity(self: *Builder, val: f80) Constant {
1135911359 }),
1136011360 });
1136111361 }
11362 return @enumFromInt(gop.index);
11362 return @fromBackingInt(@intCast(gop.index));
1136311363}
1136411364
1136511365fn ppc_fp128ConstAssumeCapacity(self: *Builder, val: [2]f64) Constant {
......@@ -11367,7 +11367,7 @@ fn ppc_fp128ConstAssumeCapacity(self: *Builder, val: [2]f64) Constant {
1136711367 builder: *const Builder,
1136811368 pub fn hash(_: @This(), key: [2]f64) u32 {
1136911369 return @truncate(std.hash.Wyhash.hash(
11370 comptime std.hash.int(@intFromEnum(Constant.Tag.ppc_fp128)),
11370 comptime std.hash.int(@backingInt(Constant.Tag.ppc_fp128)),
1137111371 std.mem.asBytes(&key),
1137211372 ));
1137311373 }
......@@ -11393,13 +11393,13 @@ fn ppc_fp128ConstAssumeCapacity(self: *Builder, val: [2]f64) Constant {
1139311393 }),
1139411394 });
1139511395 }
11396 return @enumFromInt(gop.index);
11396 return @fromBackingInt(@intCast(gop.index));
1139711397}
1139811398
1139911399fn nullConstAssumeCapacity(self: *Builder, ty: Type) Constant {
11400 assert(self.type_items.items[@intFromEnum(ty)].tag == .pointer);
11400 assert(self.type_items.items[@backingInt(ty)].tag == .pointer);
1140111401 const result = self.getOrPutConstantNoExtraAssumeCapacity(
11402 .{ .tag = .null, .data = @intFromEnum(ty) },
11402 .{ .tag = .null, .data = @backingInt(ty) },
1140311403 );
1140411404 return result.constant;
1140511405}
......@@ -11407,18 +11407,18 @@ fn nullConstAssumeCapacity(self: *Builder, ty: Type) Constant {
1140711407fn noneConstAssumeCapacity(self: *Builder, ty: Type) Constant {
1140811408 assert(ty == .token);
1140911409 const result = self.getOrPutConstantNoExtraAssumeCapacity(
11410 .{ .tag = .none, .data = @intFromEnum(ty) },
11410 .{ .tag = .none, .data = @backingInt(ty) },
1141111411 );
1141211412 return result.constant;
1141311413}
1141411414
1141511415fn structConstAssumeCapacity(self: *Builder, ty: Type, vals: []const Constant) Constant {
11416 const type_item = self.type_items.items[@intFromEnum(ty)];
11416 const type_item = self.type_items.items[@backingInt(ty)];
1141711417 var extra = self.typeExtraDataTrail(Type.Structure, switch (type_item.tag) {
1141811418 .structure, .packed_structure => type_item.data,
1141911419 .named_structure => data: {
1142011420 const body_ty = self.typeExtraData(Type.NamedStructure, type_item.data).body;
11421 const body_item = self.type_items.items[@intFromEnum(body_ty)];
11421 const body_item = self.type_items.items[@backingInt(body_ty)];
1142211422 switch (body_item.tag) {
1142311423 .structure, .packed_structure => break :data body_item.data,
1142411424 else => unreachable,
......@@ -11443,7 +11443,7 @@ fn structConstAssumeCapacity(self: *Builder, ty: Type, vals: []const Constant) C
1144311443}
1144411444
1144511445fn arrayConstAssumeCapacity(self: *Builder, ty: Type, vals: []const Constant) Constant {
11446 const type_item = self.type_items.items[@intFromEnum(ty)];
11446 const type_item = self.type_items.items[@backingInt(ty)];
1144711447 const type_extra: struct { len: u64, child: Type } = switch (type_item.tag) {
1144811448 inline .small_array, .array => |kind| extra: {
1144911449 const extra = self.typeExtraData(switch (kind) {
......@@ -11471,7 +11471,7 @@ fn stringConstAssumeCapacity(self: *Builder, val: String) Constant {
1147111471 const ty = self.arrayTypeAssumeCapacity(slice.len, .i8);
1147211472 if (std.mem.allEqual(u8, slice, 0)) return self.zeroInitConstAssumeCapacity(ty);
1147311473 const result = self.getOrPutConstantNoExtraAssumeCapacity(
11474 .{ .tag = .string, .data = @intFromEnum(val) },
11474 .{ .tag = .string, .data = @backingInt(val) },
1147511475 );
1147611476 return result.constant;
1147711477}
......@@ -11502,7 +11502,7 @@ fn splatConstAssumeCapacity(self: *Builder, ty: Type, val: Constant) Constant {
1150211502 builder: *const Builder,
1150311503 pub fn hash(_: @This(), key: Constant.Splat) u32 {
1150411504 return @truncate(std.hash.Wyhash.hash(
11505 comptime std.hash.int(@intFromEnum(Constant.Tag.splat)),
11505 comptime std.hash.int(@backingInt(Constant.Tag.splat)),
1150611506 std.mem.asBytes(&key),
1150711507 ));
1150811508 }
......@@ -11523,7 +11523,7 @@ fn splatConstAssumeCapacity(self: *Builder, ty: Type, val: Constant) Constant {
1152311523 .data = self.addConstantExtraAssumeCapacity(data),
1152411524 });
1152511525 }
11526 return @enumFromInt(gop.index);
11526 return @fromBackingInt(@intCast(gop.index));
1152711527}
1152811528
1152911529fn zeroInitConstAssumeCapacity(self: *Builder, ty: Type) Constant {
......@@ -11538,7 +11538,7 @@ fn zeroInitConstAssumeCapacity(self: *Builder, ty: Type) Constant {
1153811538 .ppc_fp128 => return self.ppc_fp128ConstAssumeCapacity(.{ 0.0, 0.0 }),
1153911539 .token => return .none,
1154011540 .i1 => return .false,
11541 else => switch (self.type_items.items[@intFromEnum(ty)].tag) {
11541 else => switch (self.type_items.items[@backingInt(ty)].tag) {
1154211542 .simple,
1154311543 .function,
1154411544 .vararg_function,
......@@ -11561,13 +11561,13 @@ fn zeroInitConstAssumeCapacity(self: *Builder, ty: Type) Constant {
1156111561 },
1156211562 }
1156311563 const result = self.getOrPutConstantNoExtraAssumeCapacity(
11564 .{ .tag = .zeroinitializer, .data = @intFromEnum(ty) },
11564 .{ .tag = .zeroinitializer, .data = @backingInt(ty) },
1156511565 );
1156611566 return result.constant;
1156711567}
1156811568
1156911569fn undefConstAssumeCapacity(self: *Builder, ty: Type) Constant {
11570 switch (self.type_items.items[@intFromEnum(ty)].tag) {
11570 switch (self.type_items.items[@backingInt(ty)].tag) {
1157111571 .simple => switch (ty) {
1157211572 .void, .label => unreachable,
1157311573 else => {},
......@@ -11576,13 +11576,13 @@ fn undefConstAssumeCapacity(self: *Builder, ty: Type) Constant {
1157611576 else => {},
1157711577 }
1157811578 const result = self.getOrPutConstantNoExtraAssumeCapacity(
11579 .{ .tag = .undef, .data = @intFromEnum(ty) },
11579 .{ .tag = .undef, .data = @backingInt(ty) },
1158011580 );
1158111581 return result.constant;
1158211582}
1158311583
1158411584fn poisonConstAssumeCapacity(self: *Builder, ty: Type) Constant {
11585 switch (self.type_items.items[@intFromEnum(ty)].tag) {
11585 switch (self.type_items.items[@backingInt(ty)].tag) {
1158611586 .simple => switch (ty) {
1158711587 .void, .label => unreachable,
1158811588 else => {},
......@@ -11591,7 +11591,7 @@ fn poisonConstAssumeCapacity(self: *Builder, ty: Type) Constant {
1159111591 else => {},
1159211592 }
1159311593 const result = self.getOrPutConstantNoExtraAssumeCapacity(
11594 .{ .tag = .poison, .data = @intFromEnum(ty) },
11594 .{ .tag = .poison, .data = @backingInt(ty) },
1159511595 );
1159611596 return result.constant;
1159711597}
......@@ -11605,7 +11605,7 @@ fn blockAddrConstAssumeCapacity(
1160511605 builder: *const Builder,
1160611606 pub fn hash(_: @This(), key: Constant.BlockAddress) u32 {
1160711607 return @truncate(std.hash.Wyhash.hash(
11608 comptime std.hash.int(@intFromEnum(Constant.Tag.blockaddress)),
11608 comptime std.hash.int(@backingInt(Constant.Tag.blockaddress)),
1160911609 std.mem.asBytes(&key),
1161011610 ));
1161111611 }
......@@ -11626,19 +11626,19 @@ fn blockAddrConstAssumeCapacity(
1162611626 .data = self.addConstantExtraAssumeCapacity(data),
1162711627 });
1162811628 }
11629 return @enumFromInt(gop.index);
11629 return @fromBackingInt(@intCast(gop.index));
1163011630}
1163111631
1163211632fn dsoLocalEquivalentConstAssumeCapacity(self: *Builder, function: Function.Index) Constant {
1163311633 const result = self.getOrPutConstantNoExtraAssumeCapacity(
11634 .{ .tag = .dso_local_equivalent, .data = @intFromEnum(function) },
11634 .{ .tag = .dso_local_equivalent, .data = @backingInt(function) },
1163511635 );
1163611636 return result.constant;
1163711637}
1163811638
1163911639fn noCfiConstAssumeCapacity(self: *Builder, function: Function.Index) Constant {
1164011640 const result = self.getOrPutConstantNoExtraAssumeCapacity(
11641 .{ .tag = .no_cfi, .data = @intFromEnum(function) },
11641 .{ .tag = .no_cfi, .data = @backingInt(function) },
1164211642 );
1164311643 return result.constant;
1164411644}
......@@ -11735,7 +11735,7 @@ fn castConstAssumeCapacity(self: *Builder, tag: Constant.Tag, val: Constant, ty:
1173511735 builder: *const Builder,
1173611736 pub fn hash(_: @This(), key: Key) u32 {
1173711737 return @truncate(std.hash.Wyhash.hash(
11738 std.hash.int(@intFromEnum(key.tag)),
11738 std.hash.int(@backingInt(key.tag)),
1173911739 std.mem.asBytes(&key.cast),
1174011740 ));
1174111741 }
......@@ -11756,7 +11756,7 @@ fn castConstAssumeCapacity(self: *Builder, tag: Constant.Tag, val: Constant, ty:
1175611756 .data = self.addConstantExtraAssumeCapacity(data.cast),
1175711757 });
1175811758 }
11759 return @enumFromInt(gop.index);
11759 return @fromBackingInt(@intCast(gop.index));
1176011760}
1176111761
1176211762fn gepConstAssumeCapacity(
......@@ -11810,7 +11810,7 @@ fn gepConstAssumeCapacity(
1181011810 const Adapter = struct {
1181111811 builder: *const Builder,
1181211812 pub fn hash(_: @This(), key: Key) u32 {
11813 var hasher = std.hash.Wyhash.init(comptime std.hash.int(@intFromEnum(tag)));
11813 var hasher = std.hash.Wyhash.init(comptime std.hash.int(@backingInt(tag)));
1181411814 hasher.update(std.mem.asBytes(&key.type));
1181511815 hasher.update(std.mem.asBytes(&key.base));
1181611816 hasher.update(std.mem.asBytes(&key.inrange));
......@@ -11831,7 +11831,7 @@ fn gepConstAssumeCapacity(
1183111831 const data = Key{
1183211832 .type = ty,
1183311833 .base = base,
11834 .inrange = if (inrange) |index| @enumFromInt(index) else .none,
11834 .inrange = if (inrange) |index| @fromBackingInt(@intCast(index)) else .none,
1183511835 .indices = indices,
1183611836 };
1183711837 const gop = self.constant_map.getOrPutAssumeCapacityAdapted(data, Adapter{ .builder = self });
......@@ -11848,7 +11848,7 @@ fn gepConstAssumeCapacity(
1184811848 });
1184911849 self.constant_extra.appendSliceAssumeCapacity(@ptrCast(indices));
1185011850 }
11851 return @enumFromInt(gop.index);
11851 return @fromBackingInt(@intCast(gop.index));
1185211852}
1185311853
1185411854fn binConstAssumeCapacity(
......@@ -11874,7 +11874,7 @@ fn binConstAssumeCapacity(
1187411874 builder: *const Builder,
1187511875 pub fn hash(_: @This(), key: Key) u32 {
1187611876 return @truncate(std.hash.Wyhash.hash(
11877 std.hash.int(@intFromEnum(key.tag)),
11877 std.hash.int(@backingInt(key.tag)),
1187811878 std.mem.asBytes(&key.extra),
1187911879 ));
1188011880 }
......@@ -11895,7 +11895,7 @@ fn binConstAssumeCapacity(
1189511895 .data = self.addConstantExtraAssumeCapacity(data.extra),
1189611896 });
1189711897 }
11898 return @enumFromInt(gop.index);
11898 return @fromBackingInt(@intCast(gop.index));
1189911899}
1190011900
1190111901fn asmConstAssumeCapacity(
......@@ -11912,7 +11912,7 @@ fn asmConstAssumeCapacity(
1191211912 builder: *const Builder,
1191311913 pub fn hash(_: @This(), key: Key) u32 {
1191411914 return @truncate(std.hash.Wyhash.hash(
11915 std.hash.int(@intFromEnum(key.tag)),
11915 std.hash.int(@backingInt(key.tag)),
1191611916 std.mem.asBytes(&key.extra),
1191711917 ));
1191811918 }
......@@ -11925,7 +11925,7 @@ fn asmConstAssumeCapacity(
1192511925 };
1192611926
1192711927 const data = Key{
11928 .tag = @enumFromInt(@intFromEnum(Constant.Tag.@"asm") + @as(u4, @bitCast(info))),
11928 .tag = @fromBackingInt(@intCast(@backingInt(Constant.Tag.@"asm") + @as(u4, @bitCast(info)))),
1192911929 .extra = .{ .type = ty, .assembly = assembly, .constraints = constraints },
1193011930 };
1193111931 const gop = self.constant_map.getOrPutAssumeCapacityAdapted(data, Adapter{ .builder = self });
......@@ -11937,7 +11937,7 @@ fn asmConstAssumeCapacity(
1193711937 .data = self.addConstantExtraAssumeCapacity(data.extra),
1193811938 });
1193911939 }
11940 return @enumFromInt(gop.index);
11940 return @fromBackingInt(@intCast(gop.index));
1194111941}
1194211942
1194311943fn ensureUnusedConstantCapacity(
......@@ -11962,7 +11962,7 @@ fn getOrPutConstantNoExtraAssumeCapacity(
1196211962 builder: *const Builder,
1196311963 pub fn hash(_: @This(), key: Constant.Item) u32 {
1196411964 return @truncate(std.hash.Wyhash.hash(
11965 std.hash.int(@intFromEnum(key.tag)),
11965 std.hash.int(@backingInt(key.tag)),
1196611966 std.mem.asBytes(&key.data),
1196711967 ));
1196811968 }
......@@ -11976,7 +11976,7 @@ fn getOrPutConstantNoExtraAssumeCapacity(
1197611976 gop.value_ptr.* = {};
1197711977 self.constant_items.appendAssumeCapacity(item);
1197811978 }
11979 return .{ .new = !gop.found_existing, .constant = @enumFromInt(gop.index) };
11979 return .{ .new = !gop.found_existing, .constant = @fromBackingInt(@intCast(gop.index)) };
1198011980}
1198111981
1198211982fn getOrPutConstantAggregateAssumeCapacity(
......@@ -11993,7 +11993,7 @@ fn getOrPutConstantAggregateAssumeCapacity(
1199311993 const Adapter = struct {
1199411994 builder: *const Builder,
1199511995 pub fn hash(_: @This(), key: Key) u32 {
11996 var hasher = std.hash.Wyhash.init(std.hash.int(@intFromEnum(key.tag)));
11996 var hasher = std.hash.Wyhash.init(std.hash.int(@backingInt(key.tag)));
1199711997 hasher.update(std.mem.asBytes(&key.type));
1199811998 hasher.update(std.mem.sliceAsBytes(key.vals));
1199911999 return @truncate(hasher.final());
......@@ -12020,7 +12020,7 @@ fn getOrPutConstantAggregateAssumeCapacity(
1202012020 });
1202112021 self.constant_extra.appendSliceAssumeCapacity(@ptrCast(vals));
1202212022 }
12023 return .{ .new = !gop.found_existing, .constant = @enumFromInt(gop.index) };
12023 return .{ .new = !gop.found_existing, .constant = @fromBackingInt(@intCast(gop.index)) };
1202412024}
1202512025
1202612026fn addConstantExtraAssumeCapacity(self: *Builder, extra: anytype) Constant.Item.ExtraIndex {
......@@ -12030,7 +12030,7 @@ fn addConstantExtraAssumeCapacity(self: *Builder, extra: anytype) Constant.Item.
1203012030 const value = @field(extra, field_name);
1203112031 self.constant_extra.appendAssumeCapacity(switch (field_type) {
1203212032 u32 => value,
12033 String, Type, Constant, Function.Index, Function.Block.Index => @intFromEnum(value),
12033 String, Type, Constant, Function.Index, Function.Block.Index => @backingInt(value),
1203412034 Constant.GetElementPtr.Info => @bitCast(value),
1203512035 else => @compileError("bad field type: " ++ @typeName(field_type)),
1203612036 });
......@@ -12073,7 +12073,7 @@ fn constantExtraDataTrail(
1207312073 ) |field_name, field_type, value|
1207412074 @field(result, field_name) = switch (field_type) {
1207512075 u32 => value,
12076 String, Type, Constant, Function.Index, Function.Block.Index => @enumFromInt(value),
12076 String, Type, Constant, Function.Index, Function.Block.Index => @fromBackingInt(@intCast(value)),
1207712077 Constant.GetElementPtr.Info => @bitCast(value),
1207812078 else => @compileError("bad field type: " ++ @typeName(field_type)),
1207912079 };
......@@ -12108,7 +12108,7 @@ fn addMetadataExtraAssumeCapacity(self: *Builder, extra: anytype) Metadata.Item.
1210812108 const value = @field(extra, field_name);
1210912109 self.metadata_extra.appendAssumeCapacity(switch (field_type) {
1211012110 u32 => value,
12111 Metadata.String, Metadata.String.Optional, Variable.Index, Value => @intFromEnum(value),
12111 Metadata.String, Metadata.String.Optional, Variable.Index, Value => @backingInt(value),
1211212112 Metadata, Metadata.Optional, Metadata.DIFlags => @bitCast(value),
1211312113 else => @compileError("bad field type: " ++ @typeName(field_type)),
1211412114 });
......@@ -12151,7 +12151,7 @@ fn metadataExtraDataTrail(
1215112151 ) |field_name, field_type, value|
1215212152 @field(result, field_name) = switch (field_type) {
1215312153 u32 => value,
12154 Metadata.String, Metadata.String.Optional, Variable.Index, Value => @enumFromInt(value),
12154 Metadata.String, Metadata.String.Optional, Variable.Index, Value => @fromBackingInt(@intCast(value)),
1215512155 Metadata, Metadata.Optional, Metadata.DIFlags => @bitCast(value),
1215612156 else => @compileError("bad field type: " ++ @typeName(field_type)),
1215712157 };
......@@ -12181,7 +12181,7 @@ pub fn metadataString(self: *Builder, bytes: []const u8) Allocator.Error!Metadat
1218112181 @intCast(self.metadata_string_bytes.items.len),
1218212182 );
1218312183 }
12184 return @enumFromInt(gop.index);
12184 return @fromBackingInt(@intCast(gop.index));
1218512185}
1218612186
1218712187pub fn metadataStringFromStrtabString(
......@@ -12230,7 +12230,7 @@ pub fn trailingMetadataStringAssumeCapacity(self: *Builder) Metadata.String {
1223012230 } else {
1223112231 self.metadata_string_indices.appendAssumeCapacity(@intCast(self.metadata_string_bytes.items.len));
1223212232 }
12233 return @enumFromInt(gop.index);
12233 return @fromBackingInt(@intCast(gop.index));
1223412234}
1223512235
1223612236pub fn addNamedMetadata(self: *Builder, name: String, operands: []const Metadata) Allocator.Error!void {
......@@ -12662,7 +12662,7 @@ fn metadataSimpleAssumeCapacity(self: *Builder, tag: Metadata.Tag, value: anytyp
1266212662 const Adapter = struct {
1266312663 builder: *const Builder,
1266412664 pub fn hash(_: @This(), key: Key) u32 {
12665 var hasher = std.hash.Wyhash.init(std.hash.int(@intFromEnum(key.tag)));
12665 var hasher = std.hash.Wyhash.init(std.hash.int(@backingInt(key.tag)));
1266612666 inline for (comptime std.meta.fieldNames(@TypeOf(value))) |field_name| {
1266712667 hasher.update(std.mem.asBytes(&@field(key.value, field_name)));
1266812668 }
......@@ -12759,8 +12759,8 @@ fn debugSubprogramAssumeCapacity(
1275912759 compile_unit: ?Metadata,
1276012760) Metadata {
1276112761 assert(!self.strip);
12762 const tag: Metadata.Tag = @enumFromInt(@intFromEnum(Metadata.Tag.subprogram) +
12763 @as(u3, @truncate(@as(u32, @bitCast(options.sp_flags)) >> 2)));
12762 const tag: Metadata.Tag = @fromBackingInt(@intCast(@backingInt(Metadata.Tag.subprogram) +
12763 @as(u3, @truncate(@as(u32, @bitCast(options.sp_flags)) >> 2))));
1276412764 return self.metadataDistinctAssumeCapacity(tag, Metadata.Subprogram{
1276512765 .file = .wrap(file),
1276612766 .name = .wrap(name),
......@@ -13105,7 +13105,7 @@ fn debugEnumeratorAssumeCapacity(
1310513105 const Adapter = struct {
1310613106 builder: *const Builder,
1310713107 pub fn hash(_: @This(), key: Key) u32 {
13108 var hasher = std.hash.Wyhash.init(std.hash.int(@intFromEnum(key.tag)));
13108 var hasher = std.hash.Wyhash.init(std.hash.int(@backingInt(key.tag)));
1310913109 hasher.update(std.mem.asBytes(&key.name));
1311013110 hasher.update(std.mem.asBytes(&key.bit_width));
1311113111 hasher.update(std.mem.sliceAsBytes(key.value.limbs));
......@@ -13178,7 +13178,7 @@ fn debugExpressionAssumeCapacity(self: *Builder, elements: []const u32) Metadata
1317813178 builder: *const Builder,
1317913179 pub fn hash(_: @This(), key: Key) u32 {
1318013180 var hasher =
13181 comptime std.hash.Wyhash.init(std.hash.int(@intFromEnum(Metadata.Tag.expression)));
13181 comptime std.hash.Wyhash.init(std.hash.int(@backingInt(Metadata.Tag.expression)));
1318213182 hasher.update(std.mem.sliceAsBytes(key.elements));
1318313183 return @truncate(hasher.final());
1318413184 }
......@@ -13222,7 +13222,7 @@ fn metadataTupleOptionalsAssumeCapacity(self: *Builder, elements: []const Metada
1322213222 const Adapter = struct {
1322313223 builder: *const Builder,
1322413224 pub fn hash(_: @This(), key: Key) u32 {
13225 var hasher = comptime std.hash.Wyhash.init(std.hash.int(@intFromEnum(Metadata.Tag.tuple)));
13225 var hasher = comptime std.hash.Wyhash.init(std.hash.int(@backingInt(Metadata.Tag.tuple)));
1322613226 hasher.update(std.mem.sliceAsBytes(key.elements));
1322713227 return @truncate(hasher.final());
1322813228 }
......@@ -13338,14 +13338,14 @@ fn metadataConstantAssumeCapacity(self: *Builder, constant: Constant) Metadata {
1333813338 const Adapter = struct {
1333913339 builder: *const Builder,
1334013340 pub fn hash(_: @This(), key: Constant) u32 {
13341 var hasher = comptime std.hash.Wyhash.init(std.hash.int(@intFromEnum(Metadata.Tag.constant)));
13341 var hasher = comptime std.hash.Wyhash.init(std.hash.int(@backingInt(Metadata.Tag.constant)));
1334213342 hasher.update(std.mem.asBytes(&key));
1334313343 return @truncate(hasher.final());
1334413344 }
1334513345
1334613346 pub fn eql(ctx: @This(), lhs_key: Constant, _: void, rhs_index: usize) bool {
1334713347 if (Metadata.Tag.constant != ctx.builder.metadata_items.items(.tag)[rhs_index]) return false;
13348 const rhs_data: Constant = @enumFromInt(ctx.builder.metadata_items.items(.data)[rhs_index]);
13348 const rhs_data: Constant = @fromBackingInt(@intCast(ctx.builder.metadata_items.items(.data)[rhs_index]));
1334913349 return rhs_data == lhs_key;
1335013350 }
1335113351 };
......@@ -13360,7 +13360,7 @@ fn metadataConstantAssumeCapacity(self: *Builder, constant: Constant) Metadata {
1336013360 gop.value_ptr.* = {};
1336113361 self.metadata_items.appendAssumeCapacity(.{
1336213362 .tag = .constant,
13363 .data = @intFromEnum(constant),
13363 .data = @backingInt(constant),
1336413364 });
1336513365 }
1336613366 return .{ .index = @intCast(gop.index), .kind = .node };
......@@ -13447,10 +13447,10 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1344713447 try type_block.writeAbbrev(TypeBlock.NumEntry{ .num = @intCast(self.type_items.items.len) });
1344813448
1344913449 for (self.type_items.items, 0..) |item, i| {
13450 const ty: Type = @enumFromInt(i);
13450 const ty: Type = @fromBackingInt(@intCast(i));
1345113451
1345213452 switch (item.tag) {
13453 .simple => try type_block.writeAbbrev(TypeBlock.Simple{ .code = @enumFromInt(item.data) }),
13453 .simple => try type_block.writeAbbrev(TypeBlock.Simple{ .code = @fromBackingInt(@intCast(item.data)) }),
1345413454 .integer => try type_block.writeAbbrev(TypeBlock.Integer{ .width = item.data }),
1345513455 .structure,
1345613456 .packed_structure,
......@@ -13475,7 +13475,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1347513475 switch (extra.body) {
1347613476 .none => try type_block.writeAbbrev(TypeBlock.Opaque{}),
1347713477 else => {
13478 const real_struct = self.type_items.items[@intFromEnum(extra.body)];
13478 const real_struct = self.type_items.items[@backingInt(extra.body)];
1347913479 const is_packed: bool = switch (real_struct.tag) {
1348013480 .structure => false,
1348113481 .packed_structure => true,
......@@ -13648,7 +13648,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1364813648 => {
1364913649 try record.ensureUnusedCapacity(self.gpa, 2);
1365013650 record.appendAssumeCapacity(0);
13651 record.appendAssumeCapacity(@intFromEnum(kind));
13651 record.appendAssumeCapacity(@backingInt(kind));
1365213652 },
1365313653 .byval,
1365413654 .byref,
......@@ -13659,15 +13659,15 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1365913659 => |ty| {
1366013660 try record.ensureUnusedCapacity(self.gpa, 3);
1366113661 record.appendAssumeCapacity(6);
13662 record.appendAssumeCapacity(@intFromEnum(kind));
13663 record.appendAssumeCapacity(@intFromEnum(ty));
13662 record.appendAssumeCapacity(@backingInt(kind));
13663 record.appendAssumeCapacity(@backingInt(ty));
1366413664 },
1366513665 .@"align",
1366613666 .alignstack,
1366713667 => |alignment| {
1366813668 try record.ensureUnusedCapacity(self.gpa, 3);
1366913669 record.appendAssumeCapacity(1);
13670 record.appendAssumeCapacity(@intFromEnum(kind));
13670 record.appendAssumeCapacity(@backingInt(kind));
1367113671 record.appendAssumeCapacity(alignment.resolve(self).toByteUnits() orelse 0);
1367213672 },
1367313673 .dereferenceable,
......@@ -13675,44 +13675,44 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1367513675 => |size| {
1367613676 try record.ensureUnusedCapacity(self.gpa, 3);
1367713677 record.appendAssumeCapacity(1);
13678 record.appendAssumeCapacity(@intFromEnum(kind));
13678 record.appendAssumeCapacity(@backingInt(kind));
1367913679 record.appendAssumeCapacity(size);
1368013680 },
1368113681 .nofpclass => |fpclass| {
1368213682 try record.ensureUnusedCapacity(self.gpa, 3);
1368313683 record.appendAssumeCapacity(1);
13684 record.appendAssumeCapacity(@intFromEnum(kind));
13684 record.appendAssumeCapacity(@backingInt(kind));
1368513685 record.appendAssumeCapacity(@as(u32, @bitCast(fpclass)));
1368613686 },
1368713687 .allockind => |allockind| {
1368813688 try record.ensureUnusedCapacity(self.gpa, 3);
1368913689 record.appendAssumeCapacity(1);
13690 record.appendAssumeCapacity(@intFromEnum(kind));
13690 record.appendAssumeCapacity(@backingInt(kind));
1369113691 record.appendAssumeCapacity(@as(u32, @bitCast(allockind)));
1369213692 },
1369313693
1369413694 .allocsize => |allocsize| {
1369513695 try record.ensureUnusedCapacity(self.gpa, 3);
1369613696 record.appendAssumeCapacity(1);
13697 record.appendAssumeCapacity(@intFromEnum(kind));
13697 record.appendAssumeCapacity(@backingInt(kind));
1369813698 record.appendAssumeCapacity(@bitCast(allocsize.toLlvm()));
1369913699 },
1370013700 .memory => |memory| {
1370113701 try record.ensureUnusedCapacity(self.gpa, 3);
1370213702 record.appendAssumeCapacity(1);
13703 record.appendAssumeCapacity(@intFromEnum(kind));
13703 record.appendAssumeCapacity(@backingInt(kind));
1370413704 record.appendAssumeCapacity(@as(u32, @bitCast(memory)));
1370513705 },
1370613706 .uwtable => |uwtable| if (uwtable != .none) {
1370713707 try record.ensureUnusedCapacity(self.gpa, 3);
1370813708 record.appendAssumeCapacity(1);
13709 record.appendAssumeCapacity(@intFromEnum(kind));
13710 record.appendAssumeCapacity(@intFromEnum(uwtable));
13709 record.appendAssumeCapacity(@backingInt(kind));
13710 record.appendAssumeCapacity(@backingInt(uwtable));
1371113711 },
1371213712 .vscale_range => |vscale_range| {
1371313713 try record.ensureUnusedCapacity(self.gpa, 3);
1371413714 record.appendAssumeCapacity(1);
13715 record.appendAssumeCapacity(@intFromEnum(kind));
13715 record.appendAssumeCapacity(@backingInt(kind));
1371613716 record.appendAssumeCapacity(@bitCast(vscale_range.toLlvm()));
1371713717 },
1371813718 .string => |string_attr| {
......@@ -13787,7 +13787,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1378713787 for (self.variables.items, 0..) |variable, variable_i| {
1378813788 // Skip the variable if its global has been repurposed for something else.
1378913789 switch (variable.global.ptrConst(self).kind) {
13790 .variable => |v| if (@intFromEnum(v) != variable_i) continue,
13790 .variable => |v| if (@backingInt(v) != variable_i) continue,
1379113791 else => continue,
1379213792 }
1379313793
......@@ -13797,7 +13797,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1379713797 for (self.functions.items, 0..) |function, function_i| {
1379813798 // Skip the function if its global has been repurposed for something else.
1379913799 switch (function.global.ptrConst(self).kind) {
13800 .function => |f| if (@intFromEnum(f) != function_i) continue,
13800 .function => |f| if (@backingInt(f) != function_i) continue,
1380113801 else => continue,
1380213802 }
1380313803
......@@ -13807,7 +13807,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1380713807 for (self.aliases.items, 0..) |alias, alias_i| {
1380813808 // Skip the alias if its global has been repurposed for something else.
1380913809 switch (alias.global.ptrConst(self).kind) {
13810 .alias => |a| if (@intFromEnum(a) != alias_i) continue,
13810 .alias => |a| if (@backingInt(a) != alias_i) continue,
1381113811 else => continue,
1381213812 }
1381313813
......@@ -13854,7 +13854,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1385413854 for (self.variables.items, 0..) |variable, variable_i| {
1385513855 // Skip the variable if its global has been repurposed for something else.
1385613856 switch (variable.global.ptrConst(self).kind) {
13857 .variable => |v| if (@intFromEnum(v) != variable_i) continue,
13857 .variable => |v| if (@backingInt(v) != variable_i) continue,
1385813858 else => continue,
1385913859 }
1386013860
......@@ -13905,7 +13905,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1390513905 for (self.functions.items, 0..) |func, func_i| {
1390613906 // Skip the function if its global has been repurposed for something else.
1390713907 switch (func.global.ptrConst(self).kind) {
13908 .function => |f| if (@intFromEnum(f) != func_i) continue,
13908 .function => |f| if (@backingInt(f) != func_i) continue,
1390913909 else => continue,
1391013910 }
1391113911
......@@ -13950,7 +13950,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1395013950 for (self.aliases.items, 0..) |alias, alias_i| {
1395113951 // Skip the alias if its global has been repurposed for something else.
1395213952 switch (alias.global.ptrConst(self).kind) {
13953 .alias => |a| if (@intFromEnum(a) != alias_i) continue,
13953 .alias => |a| if (@backingInt(a) != alias_i) continue,
1395413954 else => continue,
1395513955 }
1395613956
......@@ -13983,7 +13983,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1398313983 const datas = self.constant_items.items(.data);
1398413984 for (0..self.constant_items.len) |index| {
1398513985 record.clearRetainingCapacity();
13986 const constant: Constant = @enumFromInt(index);
13986 const constant: Constant = @fromBackingInt(@intCast(index));
1398713987 const constant_type = constant.typeOf(self);
1398813988 if (constant_type != current_type) {
1398913989 try constants_block.writeAbbrev(ConstantsBlock.SetType{ .type_id = constant_type });
......@@ -14096,7 +14096,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1409614096 }
1409714097 },
1409814098 .string => {
14099 const str: String = @enumFromInt(data);
14099 const str: String = @fromBackingInt(@intCast(data));
1410014100 if (str == .none) {
1410114101 try constants_block.writeAbbrev(ConstantsBlock.Null{});
1410214102 } else {
......@@ -14143,13 +14143,13 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1414314143 const indices = extra.trail.next(extra.data.info.indices_len, Constant, self);
1414414144 try record.ensureUnusedCapacity(self.gpa, 1 + 2 + 2 * indices.len);
1414514145
14146 record.appendAssumeCapacity(@intFromEnum(extra.data.type));
14146 record.appendAssumeCapacity(@backingInt(extra.data.type));
1414714147
14148 record.appendAssumeCapacity(@intFromEnum(extra.data.base.typeOf(self)));
14148 record.appendAssumeCapacity(@backingInt(extra.data.base.typeOf(self)));
1414914149 record.appendAssumeCapacity(constant_adapter.getConstantIndex(extra.data.base));
1415014150
1415114151 for (indices) |i| {
14152 record.appendAssumeCapacity(@intFromEnum(i.typeOf(self)));
14152 record.appendAssumeCapacity(@backingInt(i.typeOf(self)));
1415314153 record.appendAssumeCapacity(constant_adapter.getConstantIndex(i));
1415414154 }
1415514155
......@@ -14183,7 +14183,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1418314183
1418414184 try record.ensureUnusedCapacity(self.gpa, 4 + assembly_slice.len + constraints_slice.len);
1418514185
14186 record.appendAssumeCapacity(@intFromEnum(extra.type));
14186 record.appendAssumeCapacity(@backingInt(extra.type));
1418714187 record.appendAssumeCapacity(switch (tag) {
1418814188 .@"asm" => 0,
1418914189 .@"asm sideeffect" => 0b0001,
......@@ -14217,13 +14217,13 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1421714217 try constants_block.writeAbbrev(ConstantsBlock.BlockAddress{
1421814218 .type_id = extra.function.typeOf(self),
1421914219 .function = constant_adapter.getConstantIndex(extra.function.toConst(self)),
14220 .block = @intFromEnum(extra.block),
14220 .block = @backingInt(extra.block),
1422114221 });
1422214222 },
1422314223 .dso_local_equivalent,
1422414224 .no_cfi,
1422514225 => |tag| {
14226 const function: Function.Index = @enumFromInt(data);
14226 const function: Function.Index = @fromBackingInt(@intCast(data));
1422714227 try constants_block.writeAbbrev(ConstantsBlock.DsoLocalEquivalentOrNoCfi{
1422814228 .code = switch (tag) {
1422914229 .dso_local_equivalent => .DSO_LOCAL_EQUIVALENT,
......@@ -14384,7 +14384,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1438414384 .ty = extra.ty,
1438514385 .scope_line = extra.scope_line,
1438614386 .sp_flags = @bitCast(@as(u32, @as(u3, @intCast(
14387 @intFromEnum(kind) - @intFromEnum(Metadata.Tag.subprogram),
14387 @backingInt(kind) - @backingInt(Metadata.Tag.subprogram),
1438814388 ))) << 2),
1438914389 .flags = extra.di_flags,
1439014390 .compile_unit = extra.compile_unit,
......@@ -14528,7 +14528,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1452814528 else
1452914529 -%val << 1 | 1);
1453014530 }
14531 try metadata_block.writeUnabbrev(@intFromEnum(MetadataBlock.Code.ENUMERATOR), record.items);
14531 try metadata_block.writeUnabbrev(@backingInt(MetadataBlock.Code.ENUMERATOR), record.items);
1453214532 continue;
1453314533 };
1453414534 try metadata_block.writeAbbrevAdapted(MetadataBlock.Enumerator{
......@@ -14606,7 +14606,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1460614606 }, metadata_adapter);
1460714607 },
1460814608 .constant => {
14609 const constant: Constant = @enumFromInt(data);
14609 const constant: Constant = @fromBackingInt(@intCast(data));
1461014610 try metadata_block.writeAbbrevAdapted(MetadataBlock.Constant{
1461114611 .ty = constant.typeOf(self),
1461214612 .constant = constant,
......@@ -14663,28 +14663,28 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1466314663 var block_info_block = try module_block.enterSubBlock(BlockInfoBlock, true);
1466414664
1466514665 try block_info_block.writeUnabbrev(BlockInfoBlock.set_block_id, &.{
14666 @intFromEnum(ir.ModuleBlock.FunctionBlock.id),
14666 @backingInt(ir.ModuleBlock.FunctionBlock.id),
1466714667 });
1466814668 inline for (ir.ModuleBlock.FunctionBlock.abbrevs) |abbrev| {
1466914669 try block_info_block.defineAbbrev(&abbrev.ops);
1467014670 }
1467114671
1467214672 try block_info_block.writeUnabbrev(BlockInfoBlock.set_block_id, &.{
14673 @intFromEnum(ir.ModuleBlock.FunctionBlock.ValueSymtabBlock.id),
14673 @backingInt(ir.ModuleBlock.FunctionBlock.ValueSymtabBlock.id),
1467414674 });
1467514675 inline for (ir.ModuleBlock.FunctionBlock.ValueSymtabBlock.abbrevs) |abbrev| {
1467614676 try block_info_block.defineAbbrev(&abbrev.ops);
1467714677 }
1467814678
1467914679 try block_info_block.writeUnabbrev(BlockInfoBlock.set_block_id, &.{
14680 @intFromEnum(ir.ModuleBlock.FunctionBlock.MetadataBlock.id),
14680 @backingInt(ir.ModuleBlock.FunctionBlock.MetadataBlock.id),
1468114681 });
1468214682 inline for (ir.ModuleBlock.FunctionBlock.MetadataBlock.abbrevs) |abbrev| {
1468314683 try block_info_block.defineAbbrev(&abbrev.ops);
1468414684 }
1468514685
1468614686 try block_info_block.writeUnabbrev(BlockInfoBlock.set_block_id, &.{
14687 @intFromEnum(ir.ModuleBlock.FunctionBlock.MetadataAttachmentBlock.id),
14687 @backingInt(ir.ModuleBlock.FunctionBlock.MetadataAttachmentBlock.id),
1468814688 });
1468914689 inline for (ir.ModuleBlock.FunctionBlock.MetadataAttachmentBlock.abbrevs) |abbrev| {
1469014690 try block_info_block.defineAbbrev(&abbrev.ops);
......@@ -14760,7 +14760,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1476014760 for (self.functions.items, 0..) |func, func_index| {
1476114761 // Skip the function if its global has been repurposed for something else.
1476214762 switch (func.global.ptrConst(self).kind) {
14763 .function => |f| if (@intFromEnum(f) != func_index) continue,
14763 .function => |f| if (@backingInt(f) != func_index) continue,
1476414764 else => continue,
1476514765 }
1476614766
......@@ -14775,7 +14775,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1477514775 var adapter: FunctionAdapter = .{
1477614776 .metadata_adapter = metadata_adapter,
1477714777 .func = &func,
14778 .instruction_index = @enumFromInt(0),
14778 .instruction_index = @fromBackingInt(@intCast(0)),
1477914779 };
1478014780
1478114781 // Emit function level metadata block
......@@ -14785,8 +14785,8 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1478514785
1478614786 for (func.debug_values) |value| {
1478714787 try metadata_block.writeAbbrev(MetadataBlock.Value{
14788 .ty = value.typeOf(@enumFromInt(func_index), self),
14789 .value = @enumFromInt(adapter.getValueIndex(value.toValue())),
14788 .ty = value.typeOf(@fromBackingInt(@intCast(func_index)), self),
14789 .value = @fromBackingInt(@intCast(adapter.getValueIndex(value.toValue()))),
1479014790 });
1479114791 }
1479214792
......@@ -14800,7 +14800,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1480014800
1480114801 var block_incoming_len: u32 = undefined;
1480214802 for (tags, datas, 0..) |tag, data, instr_index| {
14803 adapter.instruction_index = @enumFromInt(instr_index);
14803 adapter.instruction_index = @fromBackingInt(@intCast(instr_index));
1480414804 record.clearRetainingCapacity();
1480514805
1480614806 switch (tag) {
......@@ -14962,7 +14962,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1496214962 const alignment = extra.info.alignment.toLlvm();
1496314963 try function_block.writeAbbrev(FunctionBlock.Alloca{
1496414964 .inst_type = extra.type,
14965 .len_type = extra.len.typeOf(@enumFromInt(func_index), self),
14965 .len_type = extra.len.typeOf(@fromBackingInt(@intCast(func_index)), self),
1496614966 .len_value = adapter.getValueIndex(extra.len),
1496714967 .flags = .{
1496814968 .align_lower = @truncate(alignment),
......@@ -15068,10 +15068,10 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1506815068 });
1506915069 },
1507015070 .fneg => try function_block.writeAbbrev(FunctionBlock.FNeg{
15071 .val = adapter.getOffsetValueIndex(@enumFromInt(data)),
15071 .val = adapter.getOffsetValueIndex(@fromBackingInt(@intCast(data))),
1507215072 }),
1507315073 .@"fneg fast" => try function_block.writeAbbrev(FunctionBlock.FNegFast{
15074 .val = adapter.getOffsetValueIndex(@enumFromInt(data)),
15074 .val = adapter.getOffsetValueIndex(@fromBackingInt(@intCast(data))),
1507515075 .fast_math = FastMath.fast,
1507615076 }),
1507715077 .extractvalue => {
......@@ -15096,7 +15096,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1509615096 extra.trail.next(extra.data.targets_len, Function.Block.Index, &func);
1509715097 try function_block.writeAbbrevAdapted(
1509815098 FunctionBlock.IndirectBr{
15099 .ty = extra.data.addr.typeOf(@enumFromInt(func_index), self),
15099 .ty = extra.data.addr.typeOf(@fromBackingInt(@intCast(func_index)), self),
1510015100 .addr = extra.data.addr,
1510115101 .targets = targets,
1510215102 },
......@@ -15208,8 +15208,8 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1520815208 .br_cond => {
1520915209 const extra = func.extraData(Function.Instruction.BrCond, data);
1521015210 try function_block.writeAbbrev(FunctionBlock.BrConditional{
15211 .then_block = @intFromEnum(extra.then),
15212 .else_block = @intFromEnum(extra.@"else"),
15211 .then_block = @backingInt(extra.then),
15212 .else_block = @backingInt(extra.@"else"),
1521315213 .condition = adapter.getOffsetValueIndex(extra.cond),
1521415214 });
1521515215 },
......@@ -15219,19 +15219,19 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1521915219 try record.ensureUnusedCapacity(self.gpa, 3 + extra.data.cases_len * 2);
1522015220
1522115221 // Conditional type
15222 record.appendAssumeCapacity(@intFromEnum(extra.data.val.typeOf(@enumFromInt(func_index), self)));
15222 record.appendAssumeCapacity(@backingInt(extra.data.val.typeOf(@fromBackingInt(@intCast(func_index)), self)));
1522315223
1522415224 // Conditional
1522515225 record.appendAssumeCapacity(adapter.getOffsetValueIndex(extra.data.val));
1522615226
1522715227 // Default block
15228 record.appendAssumeCapacity(@intFromEnum(extra.data.default));
15228 record.appendAssumeCapacity(@backingInt(extra.data.default));
1522915229
1523015230 const vals = extra.trail.next(extra.data.cases_len, Constant, &func);
1523115231 const blocks = extra.trail.next(extra.data.cases_len, Function.Block.Index, &func);
1523215232 for (vals, blocks) |val, block| {
1523315233 record.appendAssumeCapacity(adapter.metadata_adapter.constant_adapter.getConstantIndex(val));
15234 record.appendAssumeCapacity(@intFromEnum(block));
15234 record.appendAssumeCapacity(@backingInt(block));
1523515235 }
1523615236
1523715237 try function_block.writeUnabbrev(12, record.items);
......@@ -15239,7 +15239,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1523915239 .va_arg => {
1524015240 const extra = func.extraData(Function.Instruction.VaArg, data);
1524115241 try function_block.writeAbbrev(FunctionBlock.VaArg{
15242 .list_type = extra.list.typeOf(@enumFromInt(func_index), self),
15242 .list_type = extra.list.typeOf(@fromBackingInt(@intCast(func_index)), self),
1524315243 .list = adapter.getOffsetValueIndex(extra.list),
1524415244 .type = extra.type,
1524515245 });
......@@ -15256,14 +15256,14 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1525615256 1 + block_incoming_len * 2 + @intFromBool(kind == .@"phi fast"),
1525715257 );
1525815258
15259 record.appendAssumeCapacity(@intFromEnum(extra.data.type));
15259 record.appendAssumeCapacity(@backingInt(extra.data.type));
1526015260
1526115261 for (vals, blocks) |val, block| {
1526215262 const offset_value = adapter.getOffsetValueSignedIndex(val);
1526315263 const abs_value: u32 = @intCast(@abs(offset_value));
1526415264 const signed_vbr = if (offset_value > 0) abs_value << 1 else ((abs_value << 1) | 1);
1526515265 record.appendAssumeCapacity(signed_vbr);
15266 record.appendAssumeCapacity(@intFromEnum(block));
15266 record.appendAssumeCapacity(@backingInt(block));
1526715267 }
1526815268
1526915269 if (kind == .@"phi fast") record.appendAssumeCapacity(@as(u8, @bitCast(FastMath{})));
......@@ -15271,7 +15271,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitco
1527115271 try function_block.writeUnabbrev(16, record.items);
1527215272 },
1527315273 .ret => try function_block.writeAbbrev(FunctionBlock.Ret{
15274 .val = adapter.getOffsetValueIndex(@enumFromInt(data)),
15274 .val = adapter.getOffsetValueIndex(@fromBackingInt(@intCast(data))),
1527515275 }),
1527615276 .@"ret void" => try function_block.writeAbbrev(FunctionBlock.RetVoid{}),
1527715277 .atomicrmw => {
lib/std/zig/llvm/bitcode_writer.zig+1-1
......@@ -423,7 +423,7 @@ fn BufType(comptime T: type, comptime min_len: usize) type {
423423fn bufValue(value: anytype, comptime min_len: usize) BufType(@TypeOf(value), min_len) {
424424 return switch (@typeInfo(@TypeOf(value))) {
425425 .comptime_int, .int => @intCast(value),
426 .@"enum" => @intFromEnum(value),
426 .@"enum" => @backingInt(value),
427427 .bool => @intFromBool(value),
428428 .@"struct" => @intCast(@as(@Int(.unsigned, @bitSizeOf(@TypeOf(value))), @bitCast(value))),
429429 else => unreachable,
lib/std/zig/llvm/ir.zig+108-108
......@@ -189,7 +189,7 @@ pub const ModuleBlock = struct {
189189
190190 pub const Version = struct {
191191 pub const ops = [_]AbbrevOp{
192 .{ .literal = @intFromEnum(ModuleBlock.Code.VERSION) },
192 .{ .literal = @backingInt(ModuleBlock.Code.VERSION) },
193193 .{ .literal = 2 },
194194 };
195195 };
......@@ -211,7 +211,7 @@ pub const ModuleBlock = struct {
211211 };
212212
213213 pub const ops = [_]AbbrevOp{
214 .{ .literal = @intFromEnum(ModuleBlock.Code.GLOBALVAR) }, // Code
214 .{ .literal = @backingInt(ModuleBlock.Code.GLOBALVAR) }, // Code
215215 .{ .vbr = 16 }, // strtab_offset
216216 .{ .vbr = 16 }, // strtab_size
217217 .{ .fixed_runtime = Builder.Type },
......@@ -247,7 +247,7 @@ pub const ModuleBlock = struct {
247247
248248 pub const Function = struct {
249249 pub const ops = [_]AbbrevOp{
250 .{ .literal = @intFromEnum(ModuleBlock.Code.FUNCTION) }, // Code
250 .{ .literal = @backingInt(ModuleBlock.Code.FUNCTION) }, // Code
251251 .{ .vbr = 16 }, // strtab_offset
252252 .{ .vbr = 16 }, // strtab_size
253253 .{ .fixed_runtime = Builder.Type },
......@@ -286,7 +286,7 @@ pub const ModuleBlock = struct {
286286
287287 pub const Alias = struct {
288288 pub const ops = [_]AbbrevOp{
289 .{ .literal = @intFromEnum(ModuleBlock.Code.ALIAS) }, // Code
289 .{ .literal = @backingInt(ModuleBlock.Code.ALIAS) }, // Code
290290 .{ .vbr = 16 }, // strtab_offset
291291 .{ .vbr = 16 }, // strtab_size
292292 .{ .fixed_runtime = Builder.Type },
......@@ -330,7 +330,7 @@ pub const ModuleBlock = struct {
330330
331331 pub const Entry = struct {
332332 pub const ops = [_]AbbrevOp{
333 .{ .literal = @intFromEnum(ModuleBlock.ParamattrBlock.Code.ENTRY) },
333 .{ .literal = @backingInt(ModuleBlock.ParamattrBlock.Code.ENTRY) },
334334 .{ .array_vbr = 8 },
335335 };
336336 group_indices: []const u64,
......@@ -451,7 +451,7 @@ pub const ModuleBlock = struct {
451451
452452 pub const SetType = struct {
453453 pub const ops = [_]AbbrevOp{
454 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.SETTYPE) },
454 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.SETTYPE) },
455455 .{ .fixed_runtime = Builder.Type },
456456 };
457457 type_id: Builder.Type,
......@@ -459,25 +459,25 @@ pub const ModuleBlock = struct {
459459
460460 pub const Null = struct {
461461 pub const ops = [_]AbbrevOp{
462 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.NULL) },
462 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.NULL) },
463463 };
464464 };
465465
466466 pub const Undef = struct {
467467 pub const ops = [_]AbbrevOp{
468 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.UNDEF) },
468 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.UNDEF) },
469469 };
470470 };
471471
472472 pub const Poison = struct {
473473 pub const ops = [_]AbbrevOp{
474 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.POISON) },
474 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.POISON) },
475475 };
476476 };
477477
478478 pub const Integer = struct {
479479 pub const ops = [_]AbbrevOp{
480 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.INTEGER) },
480 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.INTEGER) },
481481 .{ .vbr = 16 },
482482 };
483483 value: u64,
......@@ -485,7 +485,7 @@ pub const ModuleBlock = struct {
485485
486486 pub const Half = struct {
487487 pub const ops = [_]AbbrevOp{
488 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.FLOAT) },
488 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.FLOAT) },
489489 .{ .fixed = 16 },
490490 };
491491 value: u16,
......@@ -493,7 +493,7 @@ pub const ModuleBlock = struct {
493493
494494 pub const Float = struct {
495495 pub const ops = [_]AbbrevOp{
496 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.FLOAT) },
496 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.FLOAT) },
497497 .{ .fixed = 32 },
498498 };
499499 value: u32,
......@@ -501,7 +501,7 @@ pub const ModuleBlock = struct {
501501
502502 pub const Double = struct {
503503 pub const ops = [_]AbbrevOp{
504 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.FLOAT) },
504 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.FLOAT) },
505505 .{ .vbr = 6 },
506506 };
507507 value: u64,
......@@ -509,7 +509,7 @@ pub const ModuleBlock = struct {
509509
510510 pub const Fp80 = struct {
511511 pub const ops = [_]AbbrevOp{
512 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.FLOAT) },
512 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.FLOAT) },
513513 .{ .vbr = 6 },
514514 .{ .vbr = 6 },
515515 };
......@@ -519,7 +519,7 @@ pub const ModuleBlock = struct {
519519
520520 pub const Fp128 = struct {
521521 pub const ops = [_]AbbrevOp{
522 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.FLOAT) },
522 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.FLOAT) },
523523 .{ .vbr = 6 },
524524 .{ .vbr = 6 },
525525 };
......@@ -529,7 +529,7 @@ pub const ModuleBlock = struct {
529529
530530 pub const Aggregate = struct {
531531 pub const ops = [_]AbbrevOp{
532 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.AGGREGATE) },
532 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.AGGREGATE) },
533533 .{ .array_fixed = 32 },
534534 };
535535 values: []const Builder.Constant,
......@@ -537,7 +537,7 @@ pub const ModuleBlock = struct {
537537
538538 pub const String = struct {
539539 pub const ops = [_]AbbrevOp{
540 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.STRING) },
540 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.STRING) },
541541 .{ .array_fixed = 8 },
542542 };
543543 string: []const u8,
......@@ -545,7 +545,7 @@ pub const ModuleBlock = struct {
545545
546546 pub const CString = struct {
547547 pub const ops = [_]AbbrevOp{
548 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.CSTRING) },
548 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.CSTRING) },
549549 .{ .array_fixed = 8 },
550550 };
551551 string: []const u8,
......@@ -554,7 +554,7 @@ pub const ModuleBlock = struct {
554554 pub const Cast = struct {
555555 const CastOpcode = Builder.CastOpcode;
556556 pub const ops = [_]AbbrevOp{
557 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.CE_CAST) },
557 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.CE_CAST) },
558558 .{ .fixed = @bitSizeOf(CastOpcode) },
559559 .{ .fixed_runtime = Builder.Type },
560560 ConstantAbbrev,
......@@ -568,7 +568,7 @@ pub const ModuleBlock = struct {
568568 pub const Binary = struct {
569569 const BinaryOpcode = Builder.BinaryOpcode;
570570 pub const ops = [_]AbbrevOp{
571 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.CE_BINOP) },
571 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.CE_BINOP) },
572572 .{ .fixed = @bitSizeOf(BinaryOpcode) },
573573 ConstantAbbrev,
574574 ConstantAbbrev,
......@@ -581,7 +581,7 @@ pub const ModuleBlock = struct {
581581
582582 pub const Cmp = struct {
583583 pub const ops = [_]AbbrevOp{
584 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.CE_CMP) },
584 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.CE_CMP) },
585585 .{ .fixed_runtime = Builder.Type },
586586 ConstantAbbrev,
587587 ConstantAbbrev,
......@@ -596,7 +596,7 @@ pub const ModuleBlock = struct {
596596
597597 pub const ExtractElement = struct {
598598 pub const ops = [_]AbbrevOp{
599 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.CE_EXTRACTELT) },
599 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.CE_EXTRACTELT) },
600600 .{ .fixed_runtime = Builder.Type },
601601 ConstantAbbrev,
602602 .{ .fixed_runtime = Builder.Type },
......@@ -611,7 +611,7 @@ pub const ModuleBlock = struct {
611611
612612 pub const InsertElement = struct {
613613 pub const ops = [_]AbbrevOp{
614 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.CE_INSERTELT) },
614 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.CE_INSERTELT) },
615615 ConstantAbbrev,
616616 ConstantAbbrev,
617617 .{ .fixed_runtime = Builder.Type },
......@@ -626,7 +626,7 @@ pub const ModuleBlock = struct {
626626
627627 pub const ShuffleVector = struct {
628628 pub const ops = [_]AbbrevOp{
629 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.CE_SHUFFLEVEC) },
629 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.CE_SHUFFLEVEC) },
630630 ValueAbbrev,
631631 ValueAbbrev,
632632 ValueAbbrev,
......@@ -639,7 +639,7 @@ pub const ModuleBlock = struct {
639639
640640 pub const ShuffleVectorEx = struct {
641641 pub const ops = [_]AbbrevOp{
642 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.CE_SHUFVEC_EX) },
642 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.CE_SHUFVEC_EX) },
643643 .{ .fixed_runtime = Builder.Type },
644644 ValueAbbrev,
645645 ValueAbbrev,
......@@ -654,7 +654,7 @@ pub const ModuleBlock = struct {
654654
655655 pub const BlockAddress = struct {
656656 pub const ops = [_]AbbrevOp{
657 .{ .literal = @intFromEnum(ModuleBlock.ConstantsBlock.Code.BLOCKADDRESS) },
657 .{ .literal = @backingInt(ModuleBlock.ConstantsBlock.Code.BLOCKADDRESS) },
658658 .{ .fixed_runtime = Builder.Type },
659659 ConstantAbbrev,
660660 BlockAbbrev,
......@@ -867,7 +867,7 @@ pub const ModuleBlock = struct {
867867
868868 pub const DeclareBlocks = struct {
869869 pub const ops = [_]AbbrevOp{
870 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.DECLAREBLOCKS) },
870 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.DECLAREBLOCKS) },
871871 .{ .vbr = 8 },
872872 };
873873 num_blocks: usize,
......@@ -884,7 +884,7 @@ pub const ModuleBlock = struct {
884884 no_tail: bool = false,
885885 };
886886 pub const ops = [_]AbbrevOp{
887 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_CALL) },
887 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_CALL) },
888888 .{ .fixed_runtime = Builder.FunctionAttributes },
889889 .{ .fixed = @bitSizeOf(CallType) },
890890 .{ .fixed_runtime = Builder.Type },
......@@ -912,7 +912,7 @@ pub const ModuleBlock = struct {
912912 };
913913
914914 pub const ops = [_]AbbrevOp{
915 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_CALL) },
915 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_CALL) },
916916 .{ .fixed_runtime = Builder.FunctionAttributes },
917917 .{ .fixed = @bitSizeOf(CallType) },
918918 .{ .fixed = @bitSizeOf(Builder.FastMath) },
......@@ -931,7 +931,7 @@ pub const ModuleBlock = struct {
931931
932932 pub const FNeg = struct {
933933 pub const ops = [_]AbbrevOp{
934 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_UNOP) },
934 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_UNOP) },
935935 ValueAbbrev,
936936 .{ .literal = 0 },
937937 };
......@@ -941,7 +941,7 @@ pub const ModuleBlock = struct {
941941
942942 pub const FNegFast = struct {
943943 pub const ops = [_]AbbrevOp{
944 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_UNOP) },
944 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_UNOP) },
945945 ValueAbbrev,
946946 .{ .literal = 0 },
947947 .{ .fixed = @bitSizeOf(Builder.FastMath) },
......@@ -954,7 +954,7 @@ pub const ModuleBlock = struct {
954954 pub const Binary = struct {
955955 const BinaryOpcode = Builder.BinaryOpcode;
956956 pub const ops = [_]AbbrevOp{
957 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_BINOP) },
957 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_BINOP) },
958958 ValueAbbrev,
959959 ValueAbbrev,
960960 .{ .fixed = @bitSizeOf(BinaryOpcode) },
......@@ -968,7 +968,7 @@ pub const ModuleBlock = struct {
968968 pub const BinaryNoWrap = struct {
969969 const BinaryOpcode = Builder.BinaryOpcode;
970970 pub const ops = [_]AbbrevOp{
971 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_BINOP) },
971 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_BINOP) },
972972 ValueAbbrev,
973973 ValueAbbrev,
974974 .{ .fixed = @bitSizeOf(BinaryOpcode) },
......@@ -987,7 +987,7 @@ pub const ModuleBlock = struct {
987987 pub const BinaryExact = struct {
988988 const BinaryOpcode = Builder.BinaryOpcode;
989989 pub const ops = [_]AbbrevOp{
990 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_BINOP) },
990 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_BINOP) },
991991 ValueAbbrev,
992992 ValueAbbrev,
993993 .{ .fixed = @bitSizeOf(BinaryOpcode) },
......@@ -1002,7 +1002,7 @@ pub const ModuleBlock = struct {
10021002 pub const BinaryFast = struct {
10031003 const BinaryOpcode = Builder.BinaryOpcode;
10041004 pub const ops = [_]AbbrevOp{
1005 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_BINOP) },
1005 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_BINOP) },
10061006 ValueAbbrev,
10071007 ValueAbbrev,
10081008 .{ .fixed = @bitSizeOf(BinaryOpcode) },
......@@ -1018,7 +1018,7 @@ pub const ModuleBlock = struct {
10181018 pub const Cmp = struct {
10191019 const CmpPredicate = Builder.CmpPredicate;
10201020 pub const ops = [_]AbbrevOp{
1021 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_CMP2) },
1021 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_CMP2) },
10221022 ValueAbbrev,
10231023 ValueAbbrev,
10241024 .{ .fixed = @bitSizeOf(CmpPredicate) },
......@@ -1032,7 +1032,7 @@ pub const ModuleBlock = struct {
10321032 pub const CmpFast = struct {
10331033 const CmpPredicate = Builder.CmpPredicate;
10341034 pub const ops = [_]AbbrevOp{
1035 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_CMP2) },
1035 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_CMP2) },
10361036 ValueAbbrev,
10371037 ValueAbbrev,
10381038 .{ .fixed = @bitSizeOf(CmpPredicate) },
......@@ -1047,7 +1047,7 @@ pub const ModuleBlock = struct {
10471047
10481048 pub const Select = struct {
10491049 pub const ops = [_]AbbrevOp{
1050 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_VSELECT) },
1050 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_VSELECT) },
10511051 ValueAbbrev,
10521052 ValueAbbrev,
10531053 ValueAbbrev,
......@@ -1060,7 +1060,7 @@ pub const ModuleBlock = struct {
10601060
10611061 pub const SelectFast = struct {
10621062 pub const ops = [_]AbbrevOp{
1063 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_VSELECT) },
1063 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_VSELECT) },
10641064 ValueAbbrev,
10651065 ValueAbbrev,
10661066 ValueAbbrev,
......@@ -1076,7 +1076,7 @@ pub const ModuleBlock = struct {
10761076 pub const Cast = struct {
10771077 const CastOpcode = Builder.CastOpcode;
10781078 pub const ops = [_]AbbrevOp{
1079 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_CAST) },
1079 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_CAST) },
10801080 ValueAbbrev,
10811081 .{ .fixed_runtime = Builder.Type },
10821082 .{ .fixed = @bitSizeOf(CastOpcode) },
......@@ -1093,10 +1093,10 @@ pub const ModuleBlock = struct {
10931093 no_signed_wrap: bool,
10941094 };
10951095 pub const ops = [_]AbbrevOp{
1096 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_CAST) },
1096 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_CAST) },
10971097 ValueAbbrev,
10981098 .{ .fixed_runtime = Builder.Type },
1099 .{ .literal = @intFromEnum(Builder.CastOpcode.trunc) },
1099 .{ .literal = @backingInt(Builder.CastOpcode.trunc) },
11001100 .{ .fixed = @bitSizeOf(Flags) },
11011101 };
11021102
......@@ -1114,7 +1114,7 @@ pub const ModuleBlock = struct {
11141114 align_upper: u3,
11151115 };
11161116 pub const ops = [_]AbbrevOp{
1117 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_ALLOCA) },
1117 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_ALLOCA) },
11181118 .{ .fixed_runtime = Builder.Type },
11191119 .{ .fixed_runtime = Builder.Type },
11201120 ValueAbbrev,
......@@ -1129,13 +1129,13 @@ pub const ModuleBlock = struct {
11291129
11301130 pub const RetVoid = struct {
11311131 pub const ops = [_]AbbrevOp{
1132 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_RET) },
1132 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_RET) },
11331133 };
11341134 };
11351135
11361136 pub const Ret = struct {
11371137 pub const ops = [_]AbbrevOp{
1138 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_RET) },
1138 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_RET) },
11391139 ValueAbbrev,
11401140 };
11411141 val: u32,
......@@ -1143,7 +1143,7 @@ pub const ModuleBlock = struct {
11431143
11441144 pub const GetElementPtr = struct {
11451145 pub const ops = [_]AbbrevOp{
1146 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_GEP) },
1146 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_GEP) },
11471147 .{ .fixed = 1 },
11481148 .{ .fixed_runtime = Builder.Type },
11491149 ValueAbbrev,
......@@ -1158,7 +1158,7 @@ pub const ModuleBlock = struct {
11581158
11591159 pub const ExtractValue = struct {
11601160 pub const ops = [_]AbbrevOp{
1161 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_EXTRACTVAL) },
1161 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_EXTRACTVAL) },
11621162 ValueAbbrev,
11631163 ValueArrayAbbrev,
11641164 };
......@@ -1169,7 +1169,7 @@ pub const ModuleBlock = struct {
11691169
11701170 pub const InsertValue = struct {
11711171 pub const ops = [_]AbbrevOp{
1172 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_INSERTVAL) },
1172 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_INSERTVAL) },
11731173 ValueAbbrev,
11741174 ValueAbbrev,
11751175 ValueArrayAbbrev,
......@@ -1182,7 +1182,7 @@ pub const ModuleBlock = struct {
11821182
11831183 pub const ExtractElement = struct {
11841184 pub const ops = [_]AbbrevOp{
1185 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_EXTRACTELT) },
1185 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_EXTRACTELT) },
11861186 ValueAbbrev,
11871187 ValueAbbrev,
11881188 };
......@@ -1193,7 +1193,7 @@ pub const ModuleBlock = struct {
11931193
11941194 pub const InsertElement = struct {
11951195 pub const ops = [_]AbbrevOp{
1196 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_INSERTELT) },
1196 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_INSERTELT) },
11971197 ValueAbbrev,
11981198 ValueAbbrev,
11991199 ValueAbbrev,
......@@ -1206,7 +1206,7 @@ pub const ModuleBlock = struct {
12061206
12071207 pub const ShuffleVector = struct {
12081208 pub const ops = [_]AbbrevOp{
1209 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_SHUFFLEVEC) },
1209 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_SHUFFLEVEC) },
12101210 ValueAbbrev,
12111211 ValueAbbrev,
12121212 ValueAbbrev,
......@@ -1219,13 +1219,13 @@ pub const ModuleBlock = struct {
12191219
12201220 pub const Unreachable = struct {
12211221 pub const ops = [_]AbbrevOp{
1222 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_UNREACHABLE) },
1222 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_UNREACHABLE) },
12231223 };
12241224 };
12251225
12261226 pub const Load = struct {
12271227 pub const ops = [_]AbbrevOp{
1228 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_LOAD) },
1228 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_LOAD) },
12291229 ValueAbbrev,
12301230 .{ .fixed_runtime = Builder.Type },
12311231 .{ .fixed = @bitSizeOf(Builder.Alignment) },
......@@ -1239,7 +1239,7 @@ pub const ModuleBlock = struct {
12391239
12401240 pub const LoadAtomic = struct {
12411241 pub const ops = [_]AbbrevOp{
1242 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_LOADATOMIC) },
1242 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_LOADATOMIC) },
12431243 ValueAbbrev,
12441244 .{ .fixed_runtime = Builder.Type },
12451245 .{ .fixed = @bitSizeOf(Builder.Alignment) },
......@@ -1257,7 +1257,7 @@ pub const ModuleBlock = struct {
12571257
12581258 pub const Store = struct {
12591259 pub const ops = [_]AbbrevOp{
1260 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_STORE) },
1260 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_STORE) },
12611261 ValueAbbrev,
12621262 ValueAbbrev,
12631263 .{ .fixed = @bitSizeOf(Builder.Alignment) },
......@@ -1271,7 +1271,7 @@ pub const ModuleBlock = struct {
12711271
12721272 pub const StoreAtomic = struct {
12731273 pub const ops = [_]AbbrevOp{
1274 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_STOREATOMIC) },
1274 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_STOREATOMIC) },
12751275 ValueAbbrev,
12761276 ValueAbbrev,
12771277 .{ .fixed = @bitSizeOf(Builder.Alignment) },
......@@ -1289,7 +1289,7 @@ pub const ModuleBlock = struct {
12891289
12901290 pub const BrUnconditional = struct {
12911291 pub const ops = [_]AbbrevOp{
1292 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_BR) },
1292 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_BR) },
12931293 BlockAbbrev,
12941294 };
12951295 block: u32,
......@@ -1297,7 +1297,7 @@ pub const ModuleBlock = struct {
12971297
12981298 pub const BrConditional = struct {
12991299 pub const ops = [_]AbbrevOp{
1300 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_BR) },
1300 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_BR) },
13011301 BlockAbbrev,
13021302 BlockAbbrev,
13031303 BlockAbbrev,
......@@ -1309,7 +1309,7 @@ pub const ModuleBlock = struct {
13091309
13101310 pub const VaArg = struct {
13111311 pub const ops = [_]AbbrevOp{
1312 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_VAARG) },
1312 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_VAARG) },
13131313 .{ .fixed_runtime = Builder.Type },
13141314 ValueAbbrev,
13151315 .{ .fixed_runtime = Builder.Type },
......@@ -1321,7 +1321,7 @@ pub const ModuleBlock = struct {
13211321
13221322 pub const AtomicRmw = struct {
13231323 pub const ops = [_]AbbrevOp{
1324 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_ATOMICRMW) },
1324 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_ATOMICRMW) },
13251325 ValueAbbrev,
13261326 ValueAbbrev,
13271327 .{ .fixed = @bitSizeOf(Builder.Function.Instruction.AtomicRmw.Operation) },
......@@ -1341,7 +1341,7 @@ pub const ModuleBlock = struct {
13411341
13421342 pub const CmpXchg = struct {
13431343 pub const ops = [_]AbbrevOp{
1344 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_CMPXCHG) },
1344 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_CMPXCHG) },
13451345 ValueAbbrev,
13461346 ValueAbbrev,
13471347 ValueAbbrev,
......@@ -1365,7 +1365,7 @@ pub const ModuleBlock = struct {
13651365
13661366 pub const Fence = struct {
13671367 pub const ops = [_]AbbrevOp{
1368 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_FENCE) },
1368 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_FENCE) },
13691369 .{ .fixed = @bitSizeOf(Builder.AtomicOrdering) },
13701370 .{ .fixed = @bitSizeOf(Builder.SyncScope) },
13711371 };
......@@ -1375,7 +1375,7 @@ pub const ModuleBlock = struct {
13751375
13761376 pub const DebugLoc = struct {
13771377 pub const ops = [_]AbbrevOp{
1378 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.DEBUG_LOC) },
1378 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.DEBUG_LOC) },
13791379 LineAbbrev,
13801380 ColumnAbbrev,
13811381 MetadataAbbrev,
......@@ -1390,20 +1390,20 @@ pub const ModuleBlock = struct {
13901390
13911391 pub const DebugLocAgain = struct {
13921392 pub const ops = [_]AbbrevOp{
1393 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.DEBUG_LOC_AGAIN) },
1393 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.DEBUG_LOC_AGAIN) },
13941394 };
13951395 };
13961396
13971397 pub const ColdOperandBundle = struct {
13981398 pub const ops = [_]AbbrevOp{
1399 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.OPERAND_BUNDLE) },
1399 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.OPERAND_BUNDLE) },
14001400 .{ .literal = 0 },
14011401 };
14021402 };
14031403
14041404 pub const IndirectBr = struct {
14051405 pub const ops = [_]AbbrevOp{
1406 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.Code.INST_INDIRECTBR) },
1406 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.Code.INST_INDIRECTBR) },
14071407 .{ .fixed_runtime = Builder.Type },
14081408 ValueAbbrev,
14091409 BlockArrayAbbrev,
......@@ -1434,7 +1434,7 @@ pub const ModuleBlock = struct {
14341434
14351435 pub const BlockEntry = struct {
14361436 pub const ops = [_]AbbrevOp{
1437 .{ .literal = @intFromEnum(ModuleBlock.FunctionBlock.ValueSymtabBlock.Code.BBENTRY) },
1437 .{ .literal = @backingInt(ModuleBlock.FunctionBlock.ValueSymtabBlock.Code.BBENTRY) },
14381438 ValueAbbrev,
14391439 .{ .array_fixed = 8 },
14401440 };
......@@ -1452,7 +1452,7 @@ pub const ModuleBlock = struct {
14521452
14531453 pub const Value = struct {
14541454 pub const ops = [_]AbbrevOp{
1455 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.VALUE) },
1455 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.VALUE) },
14561456 .{ .fixed = 32 }, // variable
14571457 .{ .fixed = 32 }, // expression
14581458 };
......@@ -1472,7 +1472,7 @@ pub const ModuleBlock = struct {
14721472
14731473 pub const AttachmentGlobalSingle = struct {
14741474 pub const ops = [_]AbbrevOp{
1475 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.ATTACHMENT) },
1475 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.ATTACHMENT) },
14761476 .{ .fixed = 1 },
14771477 MetadataAbbrev,
14781478 };
......@@ -1482,7 +1482,7 @@ pub const ModuleBlock = struct {
14821482
14831483 pub const AttachmentInstructionSingle = struct {
14841484 pub const ops = [_]AbbrevOp{
1485 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.ATTACHMENT) },
1485 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.ATTACHMENT) },
14861486 ValueAbbrev,
14871487 .{ .fixed = 5 },
14881488 MetadataAbbrev,
......@@ -1617,7 +1617,7 @@ pub const ModuleBlock = struct {
16171617
16181618 pub const Strings = struct {
16191619 pub const ops = [_]AbbrevOp{
1620 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.STRINGS) },
1620 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.STRINGS) },
16211621 .{ .vbr = 6 },
16221622 .{ .vbr = 6 },
16231623 .blob,
......@@ -1629,7 +1629,7 @@ pub const ModuleBlock = struct {
16291629
16301630 pub const File = struct {
16311631 pub const ops = [_]AbbrevOp{
1632 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.FILE) },
1632 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.FILE) },
16331633 .{ .literal = 0 }, // is distinct
16341634 MetadataAbbrev, // filename
16351635 MetadataAbbrev, // directory
......@@ -1643,7 +1643,7 @@ pub const ModuleBlock = struct {
16431643
16441644 pub const CompileUnit = struct {
16451645 pub const ops = [_]AbbrevOp{
1646 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.COMPILE_UNIT) },
1646 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.COMPILE_UNIT) },
16471647 .{ .literal = 1 }, // is distinct
16481648 .{ .literal = std.dwarf.LANG.C99 }, // source language
16491649 MetadataAbbrev, // file
......@@ -1677,7 +1677,7 @@ pub const ModuleBlock = struct {
16771677
16781678 pub const Subprogram = struct {
16791679 pub const ops = [_]AbbrevOp{
1680 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.SUBPROGRAM) },
1680 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.SUBPROGRAM) },
16811681 .{ .literal = 0b111 }, // is distinct | has sp flags | has flags
16821682 MetadataAbbrev, // scope
16831683 MetadataAbbrev, // name
......@@ -1714,7 +1714,7 @@ pub const ModuleBlock = struct {
17141714
17151715 pub const LexicalBlock = struct {
17161716 pub const ops = [_]AbbrevOp{
1717 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.LEXICAL_BLOCK) },
1717 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.LEXICAL_BLOCK) },
17181718 .{ .literal = 0 }, // is distinct
17191719 MetadataAbbrev, // scope
17201720 MetadataAbbrev, // file
......@@ -1730,7 +1730,7 @@ pub const ModuleBlock = struct {
17301730
17311731 pub const Location = struct {
17321732 pub const ops = [_]AbbrevOp{
1733 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.LOCATION) },
1733 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.LOCATION) },
17341734 .{ .literal = 0 }, // is distinct
17351735 LineAbbrev, // line
17361736 ColumnAbbrev, // column
......@@ -1747,7 +1747,7 @@ pub const ModuleBlock = struct {
17471747
17481748 pub const BasicType = struct {
17491749 pub const ops = [_]AbbrevOp{
1750 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.BASIC_TYPE) },
1750 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.BASIC_TYPE) },
17511751 .{ .literal = 0 }, // is distinct
17521752 .{ .literal = std.dwarf.TAG.base_type }, // tag
17531753 MetadataAbbrev, // name
......@@ -1764,7 +1764,7 @@ pub const ModuleBlock = struct {
17641764
17651765 pub const CompositeType = struct {
17661766 pub const ops = [_]AbbrevOp{
1767 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.COMPOSITE_TYPE) },
1767 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.COMPOSITE_TYPE) },
17681768 .{ .literal = 0 | 0x2 }, // is distinct | is not used in old type ref
17691769 .{ .fixed = 32 }, // tag
17701770 MetadataAbbrev, // name
......@@ -1803,7 +1803,7 @@ pub const ModuleBlock = struct {
18031803
18041804 pub const DerivedType = struct {
18051805 pub const ops = [_]AbbrevOp{
1806 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.DERIVED_TYPE) },
1806 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.DERIVED_TYPE) },
18071807 .{ .literal = 0 }, // is distinct
18081808 .{ .fixed = 32 }, // tag
18091809 MetadataAbbrev, // name
......@@ -1831,7 +1831,7 @@ pub const ModuleBlock = struct {
18311831
18321832 pub const SubroutineType = struct {
18331833 pub const ops = [_]AbbrevOp{
1834 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.SUBROUTINE_TYPE) },
1834 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.SUBROUTINE_TYPE) },
18351835 .{ .literal = 0 | 0x2 }, // is distinct | has no old type refs
18361836 .{ .literal = 0 }, // flags
18371837 MetadataAbbrev, // types
......@@ -1849,7 +1849,7 @@ pub const ModuleBlock = struct {
18491849 };
18501850
18511851 pub const ops = [_]AbbrevOp{
1852 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.ENUMERATOR) },
1852 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.ENUMERATOR) },
18531853 .{ .fixed = @bitSizeOf(Flags) }, // flags
18541854 .{ .vbr = 6 }, // bit width
18551855 MetadataAbbrev, // name
......@@ -1864,7 +1864,7 @@ pub const ModuleBlock = struct {
18641864
18651865 pub const Subrange = struct {
18661866 pub const ops = [_]AbbrevOp{
1867 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.SUBRANGE) },
1867 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.SUBRANGE) },
18681868 .{ .literal = 0 | (2 << 1) }, // is distinct | version
18691869 MetadataAbbrev, // count
18701870 MetadataAbbrev, // lower bound
......@@ -1878,7 +1878,7 @@ pub const ModuleBlock = struct {
18781878
18791879 pub const Expression = struct {
18801880 pub const ops = [_]AbbrevOp{
1881 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.EXPRESSION) },
1881 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.EXPRESSION) },
18821882 .{ .literal = 0 | (3 << 1) }, // is distinct | version
18831883 MetadataArrayAbbrev, // elements
18841884 };
......@@ -1888,7 +1888,7 @@ pub const ModuleBlock = struct {
18881888
18891889 pub const Node = struct {
18901890 pub const ops = [_]AbbrevOp{
1891 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.NODE) },
1891 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.NODE) },
18921892 MetadataArrayAbbrev, // elements
18931893 };
18941894
......@@ -1897,7 +1897,7 @@ pub const ModuleBlock = struct {
18971897
18981898 pub const LocalVar = struct {
18991899 pub const ops = [_]AbbrevOp{
1900 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.LOCAL_VAR) },
1900 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.LOCAL_VAR) },
19011901 .{ .literal = 0b10 }, // is distinct | has alignment
19021902 MetadataAbbrev, // scope
19031903 MetadataAbbrev, // name
......@@ -1919,7 +1919,7 @@ pub const ModuleBlock = struct {
19191919
19201920 pub const Parameter = struct {
19211921 pub const ops = [_]AbbrevOp{
1922 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.LOCAL_VAR) },
1922 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.LOCAL_VAR) },
19231923 .{ .literal = 0b10 }, // is distinct | has alignment
19241924 MetadataAbbrev, // scope
19251925 MetadataAbbrev, // name
......@@ -1942,7 +1942,7 @@ pub const ModuleBlock = struct {
19421942
19431943 pub const GlobalVar = struct {
19441944 pub const ops = [_]AbbrevOp{
1945 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.GLOBAL_VAR) },
1945 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.GLOBAL_VAR) },
19461946 .{ .literal = 0b101 }, // is distinct | version
19471947 MetadataAbbrev, // scope
19481948 MetadataAbbrev, // name
......@@ -1969,7 +1969,7 @@ pub const ModuleBlock = struct {
19691969
19701970 pub const GlobalVarExpression = struct {
19711971 pub const ops = [_]AbbrevOp{
1972 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.GLOBAL_VAR_EXPR) },
1972 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.GLOBAL_VAR_EXPR) },
19731973 .{ .literal = 0 }, // is distinct
19741974 MetadataAbbrev, // variable
19751975 MetadataAbbrev, // expression
......@@ -1981,7 +1981,7 @@ pub const ModuleBlock = struct {
19811981
19821982 pub const Constant = struct {
19831983 pub const ops = [_]AbbrevOp{
1984 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.VALUE) },
1984 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.VALUE) },
19851985 MetadataAbbrev, // type
19861986 MetadataAbbrev, // value
19871987 };
......@@ -1992,7 +1992,7 @@ pub const ModuleBlock = struct {
19921992
19931993 pub const Name = struct {
19941994 pub const ops = [_]AbbrevOp{
1995 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.NAME) },
1995 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.NAME) },
19961996 .{ .array_fixed = 8 }, // name
19971997 };
19981998
......@@ -2001,7 +2001,7 @@ pub const ModuleBlock = struct {
20012001
20022002 pub const NamedNode = struct {
20032003 pub const ops = [_]AbbrevOp{
2004 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.NAMED_NODE) },
2004 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.NAMED_NODE) },
20052005 MetadataArrayAbbrev, // elements
20062006 };
20072007
......@@ -2010,7 +2010,7 @@ pub const ModuleBlock = struct {
20102010
20112011 pub const GlobalDeclAttachment = struct {
20122012 pub const ops = [_]AbbrevOp{
2013 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.GLOBAL_DECL_ATTACHMENT) },
2013 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.GLOBAL_DECL_ATTACHMENT) },
20142014 ValueAbbrev, // value id
20152015 .{ .fixed = 1 }, // kind
20162016 MetadataAbbrev, // elements
......@@ -2115,7 +2115,7 @@ pub const ModuleBlock = struct {
21152115
21162116 pub const NumEntry = struct {
21172117 pub const ops = [_]AbbrevOp{
2118 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.NUMENTRY) },
2118 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.NUMENTRY) },
21192119 .{ .fixed = 32 },
21202120 };
21212121 num: u32,
......@@ -2130,14 +2130,14 @@ pub const ModuleBlock = struct {
21302130
21312131 pub const Opaque = struct {
21322132 pub const ops = [_]AbbrevOp{
2133 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.OPAQUE) },
2133 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.OPAQUE) },
21342134 .{ .literal = 0 },
21352135 };
21362136 };
21372137
21382138 pub const Integer = struct {
21392139 pub const ops = [_]AbbrevOp{
2140 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.INTEGER) },
2140 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.INTEGER) },
21412141 .{ .fixed = 28 },
21422142 };
21432143 width: u28,
......@@ -2145,7 +2145,7 @@ pub const ModuleBlock = struct {
21452145
21462146 pub const StructAnon = struct {
21472147 pub const ops = [_]AbbrevOp{
2148 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.STRUCT_ANON) },
2148 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.STRUCT_ANON) },
21492149 .{ .fixed = 1 },
21502150 .{ .array_fixed_runtime = Builder.Type },
21512151 };
......@@ -2155,7 +2155,7 @@ pub const ModuleBlock = struct {
21552155
21562156 pub const StructNamed = struct {
21572157 pub const ops = [_]AbbrevOp{
2158 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.STRUCT_NAMED) },
2158 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.STRUCT_NAMED) },
21592159 .{ .fixed = 1 },
21602160 .{ .array_fixed_runtime = Builder.Type },
21612161 };
......@@ -2165,7 +2165,7 @@ pub const ModuleBlock = struct {
21652165
21662166 pub const StructName = struct {
21672167 pub const ops = [_]AbbrevOp{
2168 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.STRUCT_NAME) },
2168 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.STRUCT_NAME) },
21692169 .{ .array_fixed = 8 },
21702170 };
21712171 string: []const u8,
......@@ -2173,7 +2173,7 @@ pub const ModuleBlock = struct {
21732173
21742174 pub const Array = struct {
21752175 pub const ops = [_]AbbrevOp{
2176 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.ARRAY) },
2176 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.ARRAY) },
21772177 .{ .vbr = 16 },
21782178 .{ .fixed_runtime = Builder.Type },
21792179 };
......@@ -2183,7 +2183,7 @@ pub const ModuleBlock = struct {
21832183
21842184 pub const Vector = struct {
21852185 pub const ops = [_]AbbrevOp{
2186 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.VECTOR) },
2186 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.VECTOR) },
21872187 .{ .vbr = 16 },
21882188 .{ .fixed_runtime = Builder.Type },
21892189 };
......@@ -2193,7 +2193,7 @@ pub const ModuleBlock = struct {
21932193
21942194 pub const Pointer = struct {
21952195 pub const ops = [_]AbbrevOp{
2196 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.OPAQUE_POINTER) },
2196 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.OPAQUE_POINTER) },
21972197 .{ .vbr = 4 },
21982198 };
21992199 addr_space: Builder.AddrSpace,
......@@ -2201,7 +2201,7 @@ pub const ModuleBlock = struct {
22012201
22022202 pub const Target = struct {
22032203 pub const ops = [_]AbbrevOp{
2204 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.TARGET_TYPE) },
2204 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.TARGET_TYPE) },
22052205 .{ .vbr = 4 },
22062206 .{ .array_fixed_runtime = Builder.Type },
22072207 .{ .array_fixed = 32 },
......@@ -2213,7 +2213,7 @@ pub const ModuleBlock = struct {
22132213
22142214 pub const Function = struct {
22152215 pub const ops = [_]AbbrevOp{
2216 .{ .literal = @intFromEnum(ModuleBlock.TypeBlock.Code.FUNCTION) },
2216 .{ .literal = @backingInt(ModuleBlock.TypeBlock.Code.FUNCTION) },
22172217 .{ .fixed = 1 },
22182218 .{ .fixed_runtime = Builder.Type },
22192219 .{ .array_fixed_runtime = Builder.Type },
......@@ -2238,7 +2238,7 @@ pub const ModuleBlock = struct {
22382238
22392239 pub const OperandBundleTag = struct {
22402240 pub const ops = [_]AbbrevOp{
2241 .{ .literal = @intFromEnum(ModuleBlock.OperandBundleTagsBlock.Code.OPERAND_BUNDLE_TAG) },
2241 .{ .literal = @backingInt(ModuleBlock.OperandBundleTagsBlock.Code.OPERAND_BUNDLE_TAG) },
22422242 .array_char6,
22432243 };
22442244 tag: []const u8,
......@@ -2254,7 +2254,7 @@ pub const ModuleBlock = struct {
22542254
22552255 pub const Kind = struct {
22562256 pub const ops = [_]AbbrevOp{
2257 .{ .literal = @intFromEnum(ModuleBlock.MetadataBlock.Code.KIND) },
2257 .{ .literal = @backingInt(ModuleBlock.MetadataBlock.Code.KIND) },
22582258 .{ .vbr = 4 },
22592259 .{ .array_fixed = 8 },
22602260 };
......@@ -2283,7 +2283,7 @@ pub const IdentificationBlock = struct {
22832283
22842284 pub const Version = struct {
22852285 pub const ops = [_]AbbrevOp{
2286 .{ .literal = @intFromEnum(IdentificationBlock.Code.STRING) },
2286 .{ .literal = @backingInt(IdentificationBlock.Code.STRING) },
22872287 .{ .array_fixed = 8 },
22882288 };
22892289 string: []const u8,
......@@ -2291,7 +2291,7 @@ pub const IdentificationBlock = struct {
22912291
22922292 pub const Epoch = struct {
22932293 pub const ops = [_]AbbrevOp{
2294 .{ .literal = @intFromEnum(IdentificationBlock.Code.EPOCH) },
2294 .{ .literal = @backingInt(IdentificationBlock.Code.EPOCH) },
22952295 .{ .vbr = 6 },
22962296 };
22972297 epoch: u32,
......@@ -2309,7 +2309,7 @@ pub const StrtabBlock = struct {
23092309
23102310 pub const Blob = struct {
23112311 pub const ops = [_]AbbrevOp{
2312 .{ .literal = @intFromEnum(StrtabBlock.Code.BLOB) },
2312 .{ .literal = @backingInt(StrtabBlock.Code.BLOB) },
23132313 .blob,
23142314 };
23152315 blob: []const u8,
lib/std/zig/number_literal.zig+3-3
......@@ -147,7 +147,7 @@ pub fn parseNumberLiteral(bytes: []const u8) Result {
147147 'a'...'z' => c - 'a' + 10,
148148 else => return .{ .failure = .{ .invalid_character = i } },
149149 };
150 if (digit >= base) return .{ .failure = .{ .invalid_digit = .{ .i = i, .base = @as(Base, @enumFromInt(base)) } } };
150 if (digit >= base) return .{ .failure = .{ .invalid_digit = .{ .i = i, .base = @as(Base, @fromBackingInt(@intCast(base))) } } };
151151 if (exponent and digit >= 10) return .{ .failure = .{ .invalid_digit_exponent = i } };
152152 underscore = false;
153153 special = 0;
......@@ -165,8 +165,8 @@ pub fn parseNumberLiteral(bytes: []const u8) Result {
165165 if (underscore) return .{ .failure = .{ .trailing_underscore = bytes.len - 1 } };
166166 if (special != 0) return .{ .failure = .{ .trailing_special = bytes.len - 1 } };
167167
168 if (float) return .{ .float = @as(FloatBase, @enumFromInt(base)) };
169 if (overflow) return .{ .big_int = @as(Base, @enumFromInt(base)) };
168 if (float) return .{ .float = @as(FloatBase, @fromBackingInt(@intCast(base))) };
169 if (overflow) return .{ .big_int = @as(Base, @fromBackingInt(@intCast(base))) };
170170 return .{ .int = x };
171171}
172172
lib/std/zig/parser_generated_oracle.zig+272-272
......@@ -292,7 +292,7 @@ const Parser = struct {
292292 i: usize,
293293 depths: [272]u8,
294294 pub fn parseRoot(p: *Parser) Error!bool {
295 const def_index = @intFromEnum(Def.defRoot);
295 const def_index = @backingInt(Def.defRoot);
296296 if (p.depths[def_index] > max_depth) return error.MaxDepth;
297297 p.depths[def_index] += 1;
298298 defer p.depths[def_index] -= 1;
......@@ -304,7 +304,7 @@ const Parser = struct {
304304 };
305305 }
306306 pub fn parseContainerMembers(p: *Parser) Error!bool {
307 const def_index = @intFromEnum(Def.defContainerMembers);
307 const def_index = @backingInt(Def.defContainerMembers);
308308 if (p.depths[def_index] > max_depth) return error.MaxDepth;
309309 p.depths[def_index] += 1;
310310 defer p.depths[def_index] -= 1;
......@@ -323,7 +323,7 @@ const Parser = struct {
323323 };
324324 }
325325 pub fn parseContainerMembersRest(p: *Parser) Error!bool {
326 const def_index = @intFromEnum(Def.defContainerMembersRest);
326 const def_index = @backingInt(Def.defContainerMembersRest);
327327 if (p.depths[def_index] > max_depth) return error.MaxDepth;
328328 p.depths[def_index] += 1;
329329 defer p.depths[def_index] -= 1;
......@@ -354,7 +354,7 @@ const Parser = struct {
354354 };
355355 }
356356 pub fn parseContainerDecl(p: *Parser) Error!bool {
357 const def_index = @intFromEnum(Def.defContainerDecl);
357 const def_index = @backingInt(Def.defContainerDecl);
358358 if (p.depths[def_index] > max_depth) return error.MaxDepth;
359359 p.depths[def_index] += 1;
360360 defer p.depths[def_index] -= 1;
......@@ -370,7 +370,7 @@ const Parser = struct {
370370 };
371371 }
372372 pub fn parseContainerDeclPrefix(p: *Parser) Error!bool {
373 const def_index = @intFromEnum(Def.defContainerDeclPrefix);
373 const def_index = @backingInt(Def.defContainerDeclPrefix);
374374 if (p.depths[def_index] > max_depth) return error.MaxDepth;
375375 p.depths[def_index] += 1;
376376 defer p.depths[def_index] -= 1;
......@@ -386,7 +386,7 @@ const Parser = struct {
386386 };
387387 }
388388 pub fn parseTestDecl(p: *Parser) Error!bool {
389 const def_index = @intFromEnum(Def.defTestDecl);
389 const def_index = @backingInt(Def.defTestDecl);
390390 if (p.depths[def_index] > max_depth) return error.MaxDepth;
391391 p.depths[def_index] += 1;
392392 defer p.depths[def_index] -= 1;
......@@ -405,7 +405,7 @@ const Parser = struct {
405405 };
406406 }
407407 pub fn parseComptimeDecl(p: *Parser) Error!bool {
408 const def_index = @intFromEnum(Def.defComptimeDecl);
408 const def_index = @backingInt(Def.defComptimeDecl);
409409 if (p.depths[def_index] > max_depth) return error.MaxDepth;
410410 p.depths[def_index] += 1;
411411 defer p.depths[def_index] -= 1;
......@@ -417,7 +417,7 @@ const Parser = struct {
417417 };
418418 }
419419 pub fn parseDecl(p: *Parser) Error!bool {
420 const def_index = @intFromEnum(Def.defDecl);
420 const def_index = @backingInt(Def.defDecl);
421421 if (p.depths[def_index] > max_depth) return error.MaxDepth;
422422 p.depths[def_index] += 1;
423423 defer p.depths[def_index] -= 1;
......@@ -456,7 +456,7 @@ const Parser = struct {
456456 };
457457 }
458458 pub fn parseDeclPrefix(p: *Parser) Error!bool {
459 const def_index = @intFromEnum(Def.defDeclPrefix);
459 const def_index = @backingInt(Def.defDeclPrefix);
460460 if (p.depths[def_index] > max_depth) return error.MaxDepth;
461461 p.depths[def_index] += 1;
462462 defer p.depths[def_index] -= 1;
......@@ -495,7 +495,7 @@ const Parser = struct {
495495 };
496496 }
497497 pub fn parseFnProto(p: *Parser) Error!bool {
498 const def_index = @intFromEnum(Def.defFnProto);
498 const def_index = @backingInt(Def.defFnProto);
499499 if (p.depths[def_index] > max_depth) return error.MaxDepth;
500500 p.depths[def_index] += 1;
501501 defer p.depths[def_index] -= 1;
......@@ -507,7 +507,7 @@ const Parser = struct {
507507 };
508508 }
509509 pub fn parseVarDeclProto(p: *Parser) Error!bool {
510 const def_index = @intFromEnum(Def.defVarDeclProto);
510 const def_index = @backingInt(Def.defVarDeclProto);
511511 if (p.depths[def_index] > max_depth) return error.MaxDepth;
512512 p.depths[def_index] += 1;
513513 defer p.depths[def_index] -= 1;
......@@ -531,7 +531,7 @@ const Parser = struct {
531531 };
532532 }
533533 pub fn parseGlobalVarDecl(p: *Parser) Error!bool {
534 const def_index = @intFromEnum(Def.defGlobalVarDecl);
534 const def_index = @backingInt(Def.defGlobalVarDecl);
535535 if (p.depths[def_index] > max_depth) return error.MaxDepth;
536536 p.depths[def_index] += 1;
537537 defer p.depths[def_index] -= 1;
......@@ -548,7 +548,7 @@ const Parser = struct {
548548 };
549549 }
550550 pub fn parseContainerField(p: *Parser) Error!bool {
551 const def_index = @intFromEnum(Def.defContainerField);
551 const def_index = @backingInt(Def.defContainerField);
552552 if (p.depths[def_index] > max_depth) return error.MaxDepth;
553553 p.depths[def_index] += 1;
554554 defer p.depths[def_index] -= 1;
......@@ -570,7 +570,7 @@ const Parser = struct {
570570 };
571571 }
572572 pub fn parseBlockStatement(p: *Parser) Error!bool {
573 const def_index = @intFromEnum(Def.defBlockStatement);
573 const def_index = @backingInt(Def.defBlockStatement);
574574 if (p.depths[def_index] > max_depth) return error.MaxDepth;
575575 p.depths[def_index] += 1;
576576 defer p.depths[def_index] -= 1;
......@@ -593,7 +593,7 @@ const Parser = struct {
593593 };
594594 }
595595 pub fn parseStatement(p: *Parser) Error!bool {
596 const def_index = @intFromEnum(Def.defStatement);
596 const def_index = @backingInt(Def.defStatement);
597597 if (p.depths[def_index] > max_depth) return error.MaxDepth;
598598 p.depths[def_index] += 1;
599599 defer p.depths[def_index] -= 1;
......@@ -620,7 +620,7 @@ const Parser = struct {
620620 };
621621 }
622622 pub fn parseStatementPrefix(p: *Parser) Error!bool {
623 const def_index = @intFromEnum(Def.defStatementPrefix);
623 const def_index = @backingInt(Def.defStatementPrefix);
624624 if (p.depths[def_index] > max_depth) return error.MaxDepth;
625625 p.depths[def_index] += 1;
626626 defer p.depths[def_index] -= 1;
......@@ -654,7 +654,7 @@ const Parser = struct {
654654 };
655655 }
656656 pub fn parseIfStatement(p: *Parser) Error!bool {
657 const def_index = @intFromEnum(Def.defIfStatement);
657 const def_index = @backingInt(Def.defIfStatement);
658658 if (p.depths[def_index] > max_depth) return error.MaxDepth;
659659 p.depths[def_index] += 1;
660660 defer p.depths[def_index] -= 1;
......@@ -692,7 +692,7 @@ const Parser = struct {
692692 };
693693 }
694694 pub fn parseLabeledStatement(p: *Parser) Error!bool {
695 const def_index = @intFromEnum(Def.defLabeledStatement);
695 const def_index = @backingInt(Def.defLabeledStatement);
696696 if (p.depths[def_index] > max_depth) return error.MaxDepth;
697697 p.depths[def_index] += 1;
698698 defer p.depths[def_index] -= 1;
......@@ -713,7 +713,7 @@ const Parser = struct {
713713 };
714714 }
715715 pub fn parseLoopStatement(p: *Parser) Error!bool {
716 const def_index = @intFromEnum(Def.defLoopStatement);
716 const def_index = @backingInt(Def.defLoopStatement);
717717 if (p.depths[def_index] > max_depth) return error.MaxDepth;
718718 p.depths[def_index] += 1;
719719 defer p.depths[def_index] -= 1;
......@@ -732,7 +732,7 @@ const Parser = struct {
732732 };
733733 }
734734 pub fn parseForStatement(p: *Parser) Error!bool {
735 const def_index = @intFromEnum(Def.defForStatement);
735 const def_index = @backingInt(Def.defForStatement);
736736 if (p.depths[def_index] > max_depth) return error.MaxDepth;
737737 p.depths[def_index] += 1;
738738 defer p.depths[def_index] -= 1;
......@@ -770,7 +770,7 @@ const Parser = struct {
770770 };
771771 }
772772 pub fn parseWhileStatement(p: *Parser) Error!bool {
773 const def_index = @intFromEnum(Def.defWhileStatement);
773 const def_index = @backingInt(Def.defWhileStatement);
774774 if (p.depths[def_index] > max_depth) return error.MaxDepth;
775775 p.depths[def_index] += 1;
776776 defer p.depths[def_index] -= 1;
......@@ -808,7 +808,7 @@ const Parser = struct {
808808 };
809809 }
810810 pub fn parseBlockExprStatement(p: *Parser) Error!bool {
811 const def_index = @intFromEnum(Def.defBlockExprStatement);
811 const def_index = @backingInt(Def.defBlockExprStatement);
812812 if (p.depths[def_index] > max_depth) return error.MaxDepth;
813813 p.depths[def_index] += 1;
814814 defer p.depths[def_index] -= 1;
......@@ -827,7 +827,7 @@ const Parser = struct {
827827 };
828828 }
829829 pub fn parseBlockExprPrefix(p: *Parser) Error!bool {
830 const def_index = @intFromEnum(Def.defBlockExprPrefix);
830 const def_index = @backingInt(Def.defBlockExprPrefix);
831831 if (p.depths[def_index] > max_depth) return error.MaxDepth;
832832 p.depths[def_index] += 1;
833833 defer p.depths[def_index] -= 1;
......@@ -839,7 +839,7 @@ const Parser = struct {
839839 };
840840 }
841841 pub fn parseBlockExpr(p: *Parser) Error!bool {
842 const def_index = @intFromEnum(Def.defBlockExpr);
842 const def_index = @backingInt(Def.defBlockExpr);
843843 if (p.depths[def_index] > max_depth) return error.MaxDepth;
844844 p.depths[def_index] += 1;
845845 defer p.depths[def_index] -= 1;
......@@ -851,7 +851,7 @@ const Parser = struct {
851851 };
852852 }
853853 pub fn parseVarAssignStatement(p: *Parser) Error!bool {
854 const def_index = @intFromEnum(Def.defVarAssignStatement);
854 const def_index = @backingInt(Def.defVarAssignStatement);
855855 if (p.depths[def_index] > max_depth) return error.MaxDepth;
856856 p.depths[def_index] += 1;
857857 defer p.depths[def_index] -= 1;
......@@ -889,7 +889,7 @@ const Parser = struct {
889889 };
890890 }
891891 pub fn parseAssignExpr(p: *Parser) Error!bool {
892 const def_index = @intFromEnum(Def.defAssignExpr);
892 const def_index = @backingInt(Def.defAssignExpr);
893893 if (p.depths[def_index] > max_depth) return error.MaxDepth;
894894 p.depths[def_index] += 1;
895895 defer p.depths[def_index] -= 1;
......@@ -934,7 +934,7 @@ const Parser = struct {
934934 };
935935 }
936936 pub fn parseSingleAssignExpr(p: *Parser) Error!bool {
937 const def_index = @intFromEnum(Def.defSingleAssignExpr);
937 const def_index = @backingInt(Def.defSingleAssignExpr);
938938 if (p.depths[def_index] > max_depth) return error.MaxDepth;
939939 p.depths[def_index] += 1;
940940 defer p.depths[def_index] -= 1;
......@@ -958,7 +958,7 @@ const Parser = struct {
958958 };
959959 }
960960 pub fn parseExpr(p: *Parser) Error!bool {
961 const def_index = @intFromEnum(Def.defExpr);
961 const def_index = @backingInt(Def.defExpr);
962962 if (p.depths[def_index] > max_depth) return error.MaxDepth;
963963 p.depths[def_index] += 1;
964964 defer p.depths[def_index] -= 1;
......@@ -970,7 +970,7 @@ const Parser = struct {
970970 };
971971 }
972972 pub fn parseBoolOrExpr(p: *Parser) Error!bool {
973 const def_index = @intFromEnum(Def.defBoolOrExpr);
973 const def_index = @backingInt(Def.defBoolOrExpr);
974974 if (p.depths[def_index] > max_depth) return error.MaxDepth;
975975 p.depths[def_index] += 1;
976976 defer p.depths[def_index] -= 1;
......@@ -999,7 +999,7 @@ const Parser = struct {
999999 };
10001000 }
10011001 pub fn parseBoolAndExpr(p: *Parser) Error!bool {
1002 const def_index = @intFromEnum(Def.defBoolAndExpr);
1002 const def_index = @backingInt(Def.defBoolAndExpr);
10031003 if (p.depths[def_index] > max_depth) return error.MaxDepth;
10041004 p.depths[def_index] += 1;
10051005 defer p.depths[def_index] -= 1;
......@@ -1028,7 +1028,7 @@ const Parser = struct {
10281028 };
10291029 }
10301030 pub fn parseCompareExpr(p: *Parser) Error!bool {
1031 const def_index = @intFromEnum(Def.defCompareExpr);
1031 const def_index = @backingInt(Def.defCompareExpr);
10321032 if (p.depths[def_index] > max_depth) return error.MaxDepth;
10331033 p.depths[def_index] += 1;
10341034 defer p.depths[def_index] -= 1;
......@@ -1050,7 +1050,7 @@ const Parser = struct {
10501050 };
10511051 }
10521052 pub fn parseBitwiseExpr(p: *Parser) Error!bool {
1053 const def_index = @intFromEnum(Def.defBitwiseExpr);
1053 const def_index = @backingInt(Def.defBitwiseExpr);
10541054 if (p.depths[def_index] > max_depth) return error.MaxDepth;
10551055 p.depths[def_index] += 1;
10561056 defer p.depths[def_index] -= 1;
......@@ -1079,7 +1079,7 @@ const Parser = struct {
10791079 };
10801080 }
10811081 pub fn parseBitShiftExpr(p: *Parser) Error!bool {
1082 const def_index = @intFromEnum(Def.defBitShiftExpr);
1082 const def_index = @backingInt(Def.defBitShiftExpr);
10831083 if (p.depths[def_index] > max_depth) return error.MaxDepth;
10841084 p.depths[def_index] += 1;
10851085 defer p.depths[def_index] -= 1;
......@@ -1108,7 +1108,7 @@ const Parser = struct {
11081108 };
11091109 }
11101110 pub fn parseAdditionExpr(p: *Parser) Error!bool {
1111 const def_index = @intFromEnum(Def.defAdditionExpr);
1111 const def_index = @backingInt(Def.defAdditionExpr);
11121112 if (p.depths[def_index] > max_depth) return error.MaxDepth;
11131113 p.depths[def_index] += 1;
11141114 defer p.depths[def_index] -= 1;
......@@ -1137,7 +1137,7 @@ const Parser = struct {
11371137 };
11381138 }
11391139 pub fn parseMultiplyExpr(p: *Parser) Error!bool {
1140 const def_index = @intFromEnum(Def.defMultiplyExpr);
1140 const def_index = @backingInt(Def.defMultiplyExpr);
11411141 if (p.depths[def_index] > max_depth) return error.MaxDepth;
11421142 p.depths[def_index] += 1;
11431143 defer p.depths[def_index] -= 1;
......@@ -1166,7 +1166,7 @@ const Parser = struct {
11661166 };
11671167 }
11681168 pub fn parsePrefixExpr(p: *Parser) Error!bool {
1169 const def_index = @intFromEnum(Def.defPrefixExpr);
1169 const def_index = @backingInt(Def.defPrefixExpr);
11701170 if (p.depths[def_index] > max_depth) return error.MaxDepth;
11711171 p.depths[def_index] += 1;
11721172 defer p.depths[def_index] -= 1;
......@@ -1190,7 +1190,7 @@ const Parser = struct {
11901190 };
11911191 }
11921192 pub fn parsePrimaryExpr(p: *Parser) Error!bool {
1193 const def_index = @intFromEnum(Def.defPrimaryExpr);
1193 const def_index = @backingInt(Def.defPrimaryExpr);
11941194 if (p.depths[def_index] > max_depth) return error.MaxDepth;
11951195 p.depths[def_index] += 1;
11961196 defer p.depths[def_index] -= 1;
......@@ -1258,7 +1258,7 @@ const Parser = struct {
12581258 };
12591259 }
12601260 pub fn parseIfExpr(p: *Parser) Error!bool {
1261 const def_index = @intFromEnum(Def.defIfExpr);
1261 const def_index = @backingInt(Def.defIfExpr);
12621262 if (p.depths[def_index] > max_depth) return error.MaxDepth;
12631263 p.depths[def_index] += 1;
12641264 defer p.depths[def_index] -= 1;
......@@ -1282,7 +1282,7 @@ const Parser = struct {
12821282 };
12831283 }
12841284 pub fn parseBlock(p: *Parser) Error!bool {
1285 const def_index = @intFromEnum(Def.defBlock);
1285 const def_index = @backingInt(Def.defBlock);
12861286 if (p.depths[def_index] > max_depth) return error.MaxDepth;
12871287 p.depths[def_index] += 1;
12881288 defer p.depths[def_index] -= 1;
......@@ -1301,7 +1301,7 @@ const Parser = struct {
13011301 };
13021302 }
13031303 pub fn parseLoopExpr(p: *Parser) Error!bool {
1304 const def_index = @intFromEnum(Def.defLoopExpr);
1304 const def_index = @backingInt(Def.defLoopExpr);
13051305 if (p.depths[def_index] > max_depth) return error.MaxDepth;
13061306 p.depths[def_index] += 1;
13071307 defer p.depths[def_index] -= 1;
......@@ -1320,7 +1320,7 @@ const Parser = struct {
13201320 };
13211321 }
13221322 pub fn parseForExpr(p: *Parser) Error!bool {
1323 const def_index = @intFromEnum(Def.defForExpr);
1323 const def_index = @backingInt(Def.defForExpr);
13241324 if (p.depths[def_index] > max_depth) return error.MaxDepth;
13251325 p.depths[def_index] += 1;
13261326 defer p.depths[def_index] -= 1;
......@@ -1344,7 +1344,7 @@ const Parser = struct {
13441344 };
13451345 }
13461346 pub fn parseWhileExpr(p: *Parser) Error!bool {
1347 const def_index = @intFromEnum(Def.defWhileExpr);
1347 const def_index = @backingInt(Def.defWhileExpr);
13481348 if (p.depths[def_index] > max_depth) return error.MaxDepth;
13491349 p.depths[def_index] += 1;
13501350 defer p.depths[def_index] -= 1;
......@@ -1361,7 +1361,7 @@ const Parser = struct {
13611361 };
13621362 }
13631363 pub fn parseCurlySuffixExpr(p: *Parser) Error!bool {
1364 const def_index = @intFromEnum(Def.defCurlySuffixExpr);
1364 const def_index = @backingInt(Def.defCurlySuffixExpr);
13651365 if (p.depths[def_index] > max_depth) return error.MaxDepth;
13661366 p.depths[def_index] += 1;
13671367 defer p.depths[def_index] -= 1;
......@@ -1385,7 +1385,7 @@ const Parser = struct {
13851385 };
13861386 }
13871387 pub fn parseInitList(p: *Parser) Error!bool {
1388 const def_index = @intFromEnum(Def.defInitList);
1388 const def_index = @backingInt(Def.defInitList);
13891389 if (p.depths[def_index] > max_depth) return error.MaxDepth;
13901390 p.depths[def_index] += 1;
13911391 defer p.depths[def_index] -= 1;
......@@ -1425,7 +1425,7 @@ const Parser = struct {
14251425 };
14261426 }
14271427 pub fn parseTypeExpr(p: *Parser) Error!bool {
1428 const def_index = @intFromEnum(Def.defTypeExpr);
1428 const def_index = @backingInt(Def.defTypeExpr);
14291429 if (p.depths[def_index] > max_depth) return error.MaxDepth;
14301430 p.depths[def_index] += 1;
14311431 defer p.depths[def_index] -= 1;
......@@ -1449,7 +1449,7 @@ const Parser = struct {
14491449 };
14501450 }
14511451 pub fn parseErrorUnionExpr(p: *Parser) Error!bool {
1452 const def_index = @intFromEnum(Def.defErrorUnionExpr);
1452 const def_index = @backingInt(Def.defErrorUnionExpr);
14531453 if (p.depths[def_index] > max_depth) return error.MaxDepth;
14541454 p.depths[def_index] += 1;
14551455 defer p.depths[def_index] -= 1;
......@@ -1473,7 +1473,7 @@ const Parser = struct {
14731473 };
14741474 }
14751475 pub fn parseSuffixExpr(p: *Parser) Error!bool {
1476 const def_index = @intFromEnum(Def.defSuffixExpr);
1476 const def_index = @backingInt(Def.defSuffixExpr);
14771477 if (p.depths[def_index] > max_depth) return error.MaxDepth;
14781478 p.depths[def_index] += 1;
14791479 defer p.depths[def_index] -= 1;
......@@ -1497,7 +1497,7 @@ const Parser = struct {
14971497 };
14981498 }
14991499 pub fn parsePrimaryTypeExpr(p: *Parser) Error!bool {
1500 const def_index = @intFromEnum(Def.defPrimaryTypeExpr);
1500 const def_index = @backingInt(Def.defPrimaryTypeExpr);
15011501 if (p.depths[def_index] > max_depth) return error.MaxDepth;
15021502 p.depths[def_index] += 1;
15031503 defer p.depths[def_index] -= 1;
......@@ -1541,7 +1541,7 @@ const Parser = struct {
15411541 };
15421542 }
15431543 pub fn parseContainerType(p: *Parser) Error!bool {
1544 const def_index = @intFromEnum(Def.defContainerType);
1544 const def_index = @backingInt(Def.defContainerType);
15451545 if (p.depths[def_index] > max_depth) return error.MaxDepth;
15461546 p.depths[def_index] += 1;
15471547 defer p.depths[def_index] -= 1;
......@@ -1560,7 +1560,7 @@ const Parser = struct {
15601560 };
15611561 }
15621562 pub fn parseErrorSetDecl(p: *Parser) Error!bool {
1563 const def_index = @intFromEnum(Def.defErrorSetDecl);
1563 const def_index = @backingInt(Def.defErrorSetDecl);
15641564 if (p.depths[def_index] > max_depth) return error.MaxDepth;
15651565 p.depths[def_index] += 1;
15661566 defer p.depths[def_index] -= 1;
......@@ -1572,7 +1572,7 @@ const Parser = struct {
15721572 };
15731573 }
15741574 pub fn parseGroupedExpr(p: *Parser) Error!bool {
1575 const def_index = @intFromEnum(Def.defGroupedExpr);
1575 const def_index = @backingInt(Def.defGroupedExpr);
15761576 if (p.depths[def_index] > max_depth) return error.MaxDepth;
15771577 p.depths[def_index] += 1;
15781578 defer p.depths[def_index] -= 1;
......@@ -1584,7 +1584,7 @@ const Parser = struct {
15841584 };
15851585 }
15861586 pub fn parseIfTypeExpr(p: *Parser) Error!bool {
1587 const def_index = @intFromEnum(Def.defIfTypeExpr);
1587 const def_index = @backingInt(Def.defIfTypeExpr);
15881588 if (p.depths[def_index] > max_depth) return error.MaxDepth;
15891589 p.depths[def_index] += 1;
15901590 defer p.depths[def_index] -= 1;
......@@ -1608,7 +1608,7 @@ const Parser = struct {
16081608 };
16091609 }
16101610 pub fn parseLabeledTypeExpr(p: *Parser) Error!bool {
1611 const def_index = @intFromEnum(Def.defLabeledTypeExpr);
1611 const def_index = @backingInt(Def.defLabeledTypeExpr);
16121612 if (p.depths[def_index] > max_depth) return error.MaxDepth;
16131613 p.depths[def_index] += 1;
16141614 defer p.depths[def_index] -= 1;
......@@ -1624,7 +1624,7 @@ const Parser = struct {
16241624 };
16251625 }
16261626 pub fn parseLoopTypeExpr(p: *Parser) Error!bool {
1627 const def_index = @intFromEnum(Def.defLoopTypeExpr);
1627 const def_index = @backingInt(Def.defLoopTypeExpr);
16281628 if (p.depths[def_index] > max_depth) return error.MaxDepth;
16291629 p.depths[def_index] += 1;
16301630 defer p.depths[def_index] -= 1;
......@@ -1643,7 +1643,7 @@ const Parser = struct {
16431643 };
16441644 }
16451645 pub fn parseForTypeExpr(p: *Parser) Error!bool {
1646 const def_index = @intFromEnum(Def.defForTypeExpr);
1646 const def_index = @backingInt(Def.defForTypeExpr);
16471647 if (p.depths[def_index] > max_depth) return error.MaxDepth;
16481648 p.depths[def_index] += 1;
16491649 defer p.depths[def_index] -= 1;
......@@ -1667,7 +1667,7 @@ const Parser = struct {
16671667 };
16681668 }
16691669 pub fn parseWhileTypeExpr(p: *Parser) Error!bool {
1670 const def_index = @intFromEnum(Def.defWhileTypeExpr);
1670 const def_index = @backingInt(Def.defWhileTypeExpr);
16711671 if (p.depths[def_index] > max_depth) return error.MaxDepth;
16721672 p.depths[def_index] += 1;
16731673 defer p.depths[def_index] -= 1;
......@@ -1691,7 +1691,7 @@ const Parser = struct {
16911691 };
16921692 }
16931693 pub fn parseSwitchExpr(p: *Parser) Error!bool {
1694 const def_index = @intFromEnum(Def.defSwitchExpr);
1694 const def_index = @backingInt(Def.defSwitchExpr);
16951695 if (p.depths[def_index] > max_depth) return error.MaxDepth;
16961696 p.depths[def_index] += 1;
16971697 defer p.depths[def_index] -= 1;
......@@ -1703,7 +1703,7 @@ const Parser = struct {
17031703 };
17041704 }
17051705 pub fn parseAsmExpr(p: *Parser) Error!bool {
1706 const def_index = @intFromEnum(Def.defAsmExpr);
1706 const def_index = @backingInt(Def.defAsmExpr);
17071707 if (p.depths[def_index] > max_depth) return error.MaxDepth;
17081708 p.depths[def_index] += 1;
17091709 defer p.depths[def_index] -= 1;
......@@ -1715,7 +1715,7 @@ const Parser = struct {
17151715 };
17161716 }
17171717 pub fn parseAsmOutput(p: *Parser) Error!bool {
1718 const def_index = @intFromEnum(Def.defAsmOutput);
1718 const def_index = @backingInt(Def.defAsmOutput);
17191719 if (p.depths[def_index] > max_depth) return error.MaxDepth;
17201720 p.depths[def_index] += 1;
17211721 defer p.depths[def_index] -= 1;
......@@ -1727,7 +1727,7 @@ const Parser = struct {
17271727 };
17281728 }
17291729 pub fn parseAsmOutputItem(p: *Parser) Error!bool {
1730 const def_index = @intFromEnum(Def.defAsmOutputItem);
1730 const def_index = @backingInt(Def.defAsmOutputItem);
17311731 if (p.depths[def_index] > max_depth) return error.MaxDepth;
17321732 p.depths[def_index] += 1;
17331733 defer p.depths[def_index] -= 1;
......@@ -1746,7 +1746,7 @@ const Parser = struct {
17461746 };
17471747 }
17481748 pub fn parseAsmInput(p: *Parser) Error!bool {
1749 const def_index = @intFromEnum(Def.defAsmInput);
1749 const def_index = @backingInt(Def.defAsmInput);
17501750 if (p.depths[def_index] > max_depth) return error.MaxDepth;
17511751 p.depths[def_index] += 1;
17521752 defer p.depths[def_index] -= 1;
......@@ -1758,7 +1758,7 @@ const Parser = struct {
17581758 };
17591759 }
17601760 pub fn parseAsmInputItem(p: *Parser) Error!bool {
1761 const def_index = @intFromEnum(Def.defAsmInputItem);
1761 const def_index = @backingInt(Def.defAsmInputItem);
17621762 if (p.depths[def_index] > max_depth) return error.MaxDepth;
17631763 p.depths[def_index] += 1;
17641764 defer p.depths[def_index] -= 1;
......@@ -1770,7 +1770,7 @@ const Parser = struct {
17701770 };
17711771 }
17721772 pub fn parseAsmClobbers(p: *Parser) Error!bool {
1773 const def_index = @intFromEnum(Def.defAsmClobbers);
1773 const def_index = @backingInt(Def.defAsmClobbers);
17741774 if (p.depths[def_index] > max_depth) return error.MaxDepth;
17751775 p.depths[def_index] += 1;
17761776 defer p.depths[def_index] -= 1;
......@@ -1782,7 +1782,7 @@ const Parser = struct {
17821782 };
17831783 }
17841784 pub fn parseBreakLabel(p: *Parser) Error!bool {
1785 const def_index = @intFromEnum(Def.defBreakLabel);
1785 const def_index = @backingInt(Def.defBreakLabel);
17861786 if (p.depths[def_index] > max_depth) return error.MaxDepth;
17871787 p.depths[def_index] += 1;
17881788 defer p.depths[def_index] -= 1;
......@@ -1794,7 +1794,7 @@ const Parser = struct {
17941794 };
17951795 }
17961796 pub fn parseBlockLabel(p: *Parser) Error!bool {
1797 const def_index = @intFromEnum(Def.defBlockLabel);
1797 const def_index = @backingInt(Def.defBlockLabel);
17981798 if (p.depths[def_index] > max_depth) return error.MaxDepth;
17991799 p.depths[def_index] += 1;
18001800 defer p.depths[def_index] -= 1;
......@@ -1806,7 +1806,7 @@ const Parser = struct {
18061806 };
18071807 }
18081808 pub fn parseFieldInit(p: *Parser) Error!bool {
1809 const def_index = @intFromEnum(Def.defFieldInit);
1809 const def_index = @backingInt(Def.defFieldInit);
18101810 if (p.depths[def_index] > max_depth) return error.MaxDepth;
18111811 p.depths[def_index] += 1;
18121812 defer p.depths[def_index] -= 1;
......@@ -1818,7 +1818,7 @@ const Parser = struct {
18181818 };
18191819 }
18201820 pub fn parseWhileContinueExpr(p: *Parser) Error!bool {
1821 const def_index = @intFromEnum(Def.defWhileContinueExpr);
1821 const def_index = @backingInt(Def.defWhileContinueExpr);
18221822 if (p.depths[def_index] > max_depth) return error.MaxDepth;
18231823 p.depths[def_index] += 1;
18241824 defer p.depths[def_index] -= 1;
......@@ -1830,7 +1830,7 @@ const Parser = struct {
18301830 };
18311831 }
18321832 pub fn parseLinkSection(p: *Parser) Error!bool {
1833 const def_index = @intFromEnum(Def.defLinkSection);
1833 const def_index = @backingInt(Def.defLinkSection);
18341834 if (p.depths[def_index] > max_depth) return error.MaxDepth;
18351835 p.depths[def_index] += 1;
18361836 defer p.depths[def_index] -= 1;
......@@ -1842,7 +1842,7 @@ const Parser = struct {
18421842 };
18431843 }
18441844 pub fn parseAddrSpace(p: *Parser) Error!bool {
1845 const def_index = @intFromEnum(Def.defAddrSpace);
1845 const def_index = @backingInt(Def.defAddrSpace);
18461846 if (p.depths[def_index] > max_depth) return error.MaxDepth;
18471847 p.depths[def_index] += 1;
18481848 defer p.depths[def_index] -= 1;
......@@ -1854,7 +1854,7 @@ const Parser = struct {
18541854 };
18551855 }
18561856 pub fn parseCallConv(p: *Parser) Error!bool {
1857 const def_index = @intFromEnum(Def.defCallConv);
1857 const def_index = @backingInt(Def.defCallConv);
18581858 if (p.depths[def_index] > max_depth) return error.MaxDepth;
18591859 p.depths[def_index] += 1;
18601860 defer p.depths[def_index] -= 1;
......@@ -1866,7 +1866,7 @@ const Parser = struct {
18661866 };
18671867 }
18681868 pub fn parseParamDecl(p: *Parser) Error!bool {
1869 const def_index = @intFromEnum(Def.defParamDecl);
1869 const def_index = @backingInt(Def.defParamDecl);
18701870 if (p.depths[def_index] > max_depth) return error.MaxDepth;
18711871 p.depths[def_index] += 1;
18721872 defer p.depths[def_index] -= 1;
......@@ -1890,7 +1890,7 @@ const Parser = struct {
18901890 };
18911891 }
18921892 pub fn parseParamType(p: *Parser) Error!bool {
1893 const def_index = @intFromEnum(Def.defParamType);
1893 const def_index = @backingInt(Def.defParamType);
18941894 if (p.depths[def_index] > max_depth) return error.MaxDepth;
18951895 p.depths[def_index] += 1;
18961896 defer p.depths[def_index] -= 1;
......@@ -1904,7 +1904,7 @@ const Parser = struct {
19041904 };
19051905 }
19061906 pub fn parseIfPrefix(p: *Parser) Error!bool {
1907 const def_index = @intFromEnum(Def.defIfPrefix);
1907 const def_index = @backingInt(Def.defIfPrefix);
19081908 if (p.depths[def_index] > max_depth) return error.MaxDepth;
19091909 p.depths[def_index] += 1;
19101910 defer p.depths[def_index] -= 1;
......@@ -1916,7 +1916,7 @@ const Parser = struct {
19161916 };
19171917 }
19181918 pub fn parseWhilePrefix(p: *Parser) Error!bool {
1919 const def_index = @intFromEnum(Def.defWhilePrefix);
1919 const def_index = @backingInt(Def.defWhilePrefix);
19201920 if (p.depths[def_index] > max_depth) return error.MaxDepth;
19211921 p.depths[def_index] += 1;
19221922 defer p.depths[def_index] -= 1;
......@@ -1928,7 +1928,7 @@ const Parser = struct {
19281928 };
19291929 }
19301930 pub fn parseForPrefix(p: *Parser) Error!bool {
1931 const def_index = @intFromEnum(Def.defForPrefix);
1931 const def_index = @backingInt(Def.defForPrefix);
19321932 if (p.depths[def_index] > max_depth) return error.MaxDepth;
19331933 p.depths[def_index] += 1;
19341934 defer p.depths[def_index] -= 1;
......@@ -1940,7 +1940,7 @@ const Parser = struct {
19401940 };
19411941 }
19421942 pub fn parsePayload(p: *Parser) Error!bool {
1943 const def_index = @intFromEnum(Def.defPayload);
1943 const def_index = @backingInt(Def.defPayload);
19441944 if (p.depths[def_index] > max_depth) return error.MaxDepth;
19451945 p.depths[def_index] += 1;
19461946 defer p.depths[def_index] -= 1;
......@@ -1952,7 +1952,7 @@ const Parser = struct {
19521952 };
19531953 }
19541954 pub fn parsePtrPayload(p: *Parser) Error!bool {
1955 const def_index = @intFromEnum(Def.defPtrPayload);
1955 const def_index = @backingInt(Def.defPtrPayload);
19561956 if (p.depths[def_index] > max_depth) return error.MaxDepth;
19571957 p.depths[def_index] += 1;
19581958 defer p.depths[def_index] -= 1;
......@@ -1964,7 +1964,7 @@ const Parser = struct {
19641964 };
19651965 }
19661966 pub fn parsePtrIndexPayload(p: *Parser) Error!bool {
1967 const def_index = @intFromEnum(Def.defPtrIndexPayload);
1967 const def_index = @backingInt(Def.defPtrIndexPayload);
19681968 if (p.depths[def_index] > max_depth) return error.MaxDepth;
19691969 p.depths[def_index] += 1;
19701970 defer p.depths[def_index] -= 1;
......@@ -1981,7 +1981,7 @@ const Parser = struct {
19811981 };
19821982 }
19831983 pub fn parsePtrListPayload(p: *Parser) Error!bool {
1984 const def_index = @intFromEnum(Def.defPtrListPayload);
1984 const def_index = @backingInt(Def.defPtrListPayload);
19851985 if (p.depths[def_index] > max_depth) return error.MaxDepth;
19861986 p.depths[def_index] += 1;
19871987 defer p.depths[def_index] -= 1;
......@@ -2005,7 +2005,7 @@ const Parser = struct {
20052005 };
20062006 }
20072007 pub fn parseSwitchProng(p: *Parser) Error!bool {
2008 const def_index = @intFromEnum(Def.defSwitchProng);
2008 const def_index = @backingInt(Def.defSwitchProng);
20092009 if (p.depths[def_index] > max_depth) return error.MaxDepth;
20102010 p.depths[def_index] += 1;
20112011 defer p.depths[def_index] -= 1;
......@@ -2017,7 +2017,7 @@ const Parser = struct {
20172017 };
20182018 }
20192019 pub fn parseSwitchCase(p: *Parser) Error!bool {
2020 const def_index = @intFromEnum(Def.defSwitchCase);
2020 const def_index = @backingInt(Def.defSwitchCase);
20212021 if (p.depths[def_index] > max_depth) return error.MaxDepth;
20222022 p.depths[def_index] += 1;
20232023 defer p.depths[def_index] -= 1;
......@@ -2043,7 +2043,7 @@ const Parser = struct {
20432043 };
20442044 }
20452045 pub fn parseSwitchItem(p: *Parser) Error!bool {
2046 const def_index = @intFromEnum(Def.defSwitchItem);
2046 const def_index = @backingInt(Def.defSwitchItem);
20472047 if (p.depths[def_index] > max_depth) return error.MaxDepth;
20482048 p.depths[def_index] += 1;
20492049 defer p.depths[def_index] -= 1;
......@@ -2060,7 +2060,7 @@ const Parser = struct {
20602060 };
20612061 }
20622062 pub fn parseForArgumentsList(p: *Parser) Error!bool {
2063 const def_index = @intFromEnum(Def.defForArgumentsList);
2063 const def_index = @backingInt(Def.defForArgumentsList);
20642064 if (p.depths[def_index] > max_depth) return error.MaxDepth;
20652065 p.depths[def_index] += 1;
20662066 defer p.depths[def_index] -= 1;
......@@ -2084,7 +2084,7 @@ const Parser = struct {
20842084 };
20852085 }
20862086 pub fn parseForItem(p: *Parser) Error!bool {
2087 const def_index = @intFromEnum(Def.defForItem);
2087 const def_index = @backingInt(Def.defForItem);
20882088 if (p.depths[def_index] > max_depth) return error.MaxDepth;
20892089 p.depths[def_index] += 1;
20902090 defer p.depths[def_index] -= 1;
......@@ -2120,7 +2120,7 @@ const Parser = struct {
21202120 };
21212121 }
21222122 pub fn parseAssignOp(p: *Parser) Error!bool {
2123 const def_index = @intFromEnum(Def.defAssignOp);
2123 const def_index = @backingInt(Def.defAssignOp);
21242124 if (p.depths[def_index] > max_depth) return error.MaxDepth;
21252125 p.depths[def_index] += 1;
21262126 defer p.depths[def_index] -= 1;
......@@ -2166,7 +2166,7 @@ const Parser = struct {
21662166 };
21672167 }
21682168 pub fn parseOrOp(p: *Parser) Error!bool {
2169 const def_index = @intFromEnum(Def.defOrOp);
2169 const def_index = @backingInt(Def.defOrOp);
21702170 if (p.depths[def_index] > max_depth) return error.MaxDepth;
21712171 p.depths[def_index] += 1;
21722172 defer p.depths[def_index] -= 1;
......@@ -2190,7 +2190,7 @@ const Parser = struct {
21902190 };
21912191 }
21922192 pub fn parseAndOp(p: *Parser) Error!bool {
2193 const def_index = @intFromEnum(Def.defAndOp);
2193 const def_index = @backingInt(Def.defAndOp);
21942194 if (p.depths[def_index] > max_depth) return error.MaxDepth;
21952195 p.depths[def_index] += 1;
21962196 defer p.depths[def_index] -= 1;
......@@ -2214,7 +2214,7 @@ const Parser = struct {
22142214 };
22152215 }
22162216 pub fn parseCompareOp(p: *Parser) Error!bool {
2217 const def_index = @intFromEnum(Def.defCompareOp);
2217 const def_index = @backingInt(Def.defCompareOp);
22182218 if (p.depths[def_index] > max_depth) return error.MaxDepth;
22192219 p.depths[def_index] += 1;
22202220 defer p.depths[def_index] -= 1;
......@@ -2238,7 +2238,7 @@ const Parser = struct {
22382238 };
22392239 }
22402240 pub fn parseCompareOpTok(p: *Parser) Error!bool {
2241 const def_index = @intFromEnum(Def.defCompareOpTok);
2241 const def_index = @backingInt(Def.defCompareOpTok);
22422242 if (p.depths[def_index] > max_depth) return error.MaxDepth;
22432243 p.depths[def_index] += 1;
22442244 defer p.depths[def_index] -= 1;
......@@ -2260,7 +2260,7 @@ const Parser = struct {
22602260 };
22612261 }
22622262 pub fn parseBitwiseOp(p: *Parser) Error!bool {
2263 const def_index = @intFromEnum(Def.defBitwiseOp);
2263 const def_index = @backingInt(Def.defBitwiseOp);
22642264 if (p.depths[def_index] > max_depth) return error.MaxDepth;
22652265 p.depths[def_index] += 1;
22662266 defer p.depths[def_index] -= 1;
......@@ -2298,7 +2298,7 @@ const Parser = struct {
22982298 };
22992299 }
23002300 pub fn parseBitwiseOpTok(p: *Parser) Error!bool {
2301 const def_index = @intFromEnum(Def.defBitwiseOpTok);
2301 const def_index = @backingInt(Def.defBitwiseOpTok);
23022302 if (p.depths[def_index] > max_depth) return error.MaxDepth;
23032303 p.depths[def_index] += 1;
23042304 defer p.depths[def_index] -= 1;
......@@ -2328,7 +2328,7 @@ const Parser = struct {
23282328 };
23292329 }
23302330 pub fn parseBitShiftOp(p: *Parser) Error!bool {
2331 const def_index = @intFromEnum(Def.defBitShiftOp);
2331 const def_index = @backingInt(Def.defBitShiftOp);
23322332 if (p.depths[def_index] > max_depth) return error.MaxDepth;
23332333 p.depths[def_index] += 1;
23342334 defer p.depths[def_index] -= 1;
......@@ -2352,7 +2352,7 @@ const Parser = struct {
23522352 };
23532353 }
23542354 pub fn parseBitShiftOpTok(p: *Parser) Error!bool {
2355 const def_index = @intFromEnum(Def.defBitShiftOpTok);
2355 const def_index = @backingInt(Def.defBitShiftOpTok);
23562356 if (p.depths[def_index] > max_depth) return error.MaxDepth;
23572357 p.depths[def_index] += 1;
23582358 defer p.depths[def_index] -= 1;
......@@ -2368,7 +2368,7 @@ const Parser = struct {
23682368 };
23692369 }
23702370 pub fn parseAdditionOp(p: *Parser) Error!bool {
2371 const def_index = @intFromEnum(Def.defAdditionOp);
2371 const def_index = @backingInt(Def.defAdditionOp);
23722372 if (p.depths[def_index] > max_depth) return error.MaxDepth;
23732373 p.depths[def_index] += 1;
23742374 defer p.depths[def_index] -= 1;
......@@ -2392,7 +2392,7 @@ const Parser = struct {
23922392 };
23932393 }
23942394 pub fn parseAdditionOpTok(p: *Parser) Error!bool {
2395 const def_index = @intFromEnum(Def.defAdditionOpTok);
2395 const def_index = @backingInt(Def.defAdditionOpTok);
23962396 if (p.depths[def_index] > max_depth) return error.MaxDepth;
23972397 p.depths[def_index] += 1;
23982398 defer p.depths[def_index] -= 1;
......@@ -2416,7 +2416,7 @@ const Parser = struct {
24162416 };
24172417 }
24182418 pub fn parseMultiplyOp(p: *Parser) Error!bool {
2419 const def_index = @intFromEnum(Def.defMultiplyOp);
2419 const def_index = @backingInt(Def.defMultiplyOp);
24202420 if (p.depths[def_index] > max_depth) return error.MaxDepth;
24212421 p.depths[def_index] += 1;
24222422 defer p.depths[def_index] -= 1;
......@@ -2440,7 +2440,7 @@ const Parser = struct {
24402440 };
24412441 }
24422442 pub fn parseMultiplyOpTok(p: *Parser) Error!bool {
2443 const def_index = @intFromEnum(Def.defMultiplyOpTok);
2443 const def_index = @backingInt(Def.defMultiplyOpTok);
24442444 if (p.depths[def_index] > max_depth) return error.MaxDepth;
24452445 p.depths[def_index] += 1;
24462446 defer p.depths[def_index] -= 1;
......@@ -2462,7 +2462,7 @@ const Parser = struct {
24622462 };
24632463 }
24642464 pub fn parsePrefixOp(p: *Parser) Error!bool {
2465 const def_index = @intFromEnum(Def.defPrefixOp);
2465 const def_index = @backingInt(Def.defPrefixOp);
24662466 if (p.depths[def_index] > max_depth) return error.MaxDepth;
24672467 p.depths[def_index] += 1;
24682468 defer p.depths[def_index] -= 1;
......@@ -2484,7 +2484,7 @@ const Parser = struct {
24842484 };
24852485 }
24862486 pub fn parsePrefixTypeOp(p: *Parser) Error!bool {
2487 const def_index = @intFromEnum(Def.defPrefixTypeOp);
2487 const def_index = @backingInt(Def.defPrefixTypeOp);
24882488 if (p.depths[def_index] > max_depth) return error.MaxDepth;
24892489 p.depths[def_index] += 1;
24902490 defer p.depths[def_index] -= 1;
......@@ -2511,7 +2511,7 @@ const Parser = struct {
25112511 };
25122512 }
25132513 pub fn parsePtrMods(p: *Parser) Error!bool {
2514 const def_index = @intFromEnum(Def.defPtrMods);
2514 const def_index = @backingInt(Def.defPtrMods);
25152515 if (p.depths[def_index] > max_depth) return error.MaxDepth;
25162516 p.depths[def_index] += 1;
25172517 defer p.depths[def_index] -= 1;
......@@ -2577,7 +2577,7 @@ const Parser = struct {
25772577 };
25782578 }
25792579 pub fn parseSinglePtrMods(p: *Parser) Error!bool {
2580 const def_index = @intFromEnum(Def.defSinglePtrMods);
2580 const def_index = @backingInt(Def.defSinglePtrMods);
25812581 if (p.depths[def_index] > max_depth) return error.MaxDepth;
25822582 p.depths[def_index] += 1;
25832583 defer p.depths[def_index] -= 1;
......@@ -2643,7 +2643,7 @@ const Parser = struct {
26432643 };
26442644 }
26452645 pub fn parsePtrMod(p: *Parser) Error!bool {
2646 const def_index = @intFromEnum(Def.defPtrMod);
2646 const def_index = @backingInt(Def.defPtrMod);
26472647 if (p.depths[def_index] > max_depth) return error.MaxDepth;
26482648 p.depths[def_index] += 1;
26492649 defer p.depths[def_index] -= 1;
......@@ -2659,7 +2659,7 @@ const Parser = struct {
26592659 };
26602660 }
26612661 pub fn parsePrefixTypeOpPrefix(p: *Parser) Error!bool {
2662 const def_index = @intFromEnum(Def.defPrefixTypeOpPrefix);
2662 const def_index = @backingInt(Def.defPrefixTypeOpPrefix);
26632663 if (p.depths[def_index] > max_depth) return error.MaxDepth;
26642664 p.depths[def_index] += 1;
26652665 defer p.depths[def_index] -= 1;
......@@ -2677,7 +2677,7 @@ const Parser = struct {
26772677 };
26782678 }
26792679 pub fn parseSuffixOp(p: *Parser) Error!bool {
2680 const def_index = @intFromEnum(Def.defSuffixOp);
2680 const def_index = @backingInt(Def.defSuffixOp);
26812681 if (p.depths[def_index] > max_depth) return error.MaxDepth;
26822682 p.depths[def_index] += 1;
26832683 defer p.depths[def_index] -= 1;
......@@ -2719,7 +2719,7 @@ const Parser = struct {
27192719 };
27202720 }
27212721 pub fn parseSuffixOpPrefix(p: *Parser) Error!bool {
2722 const def_index = @intFromEnum(Def.defSuffixOpPrefix);
2722 const def_index = @backingInt(Def.defSuffixOpPrefix);
27232723 if (p.depths[def_index] > max_depth) return error.MaxDepth;
27242724 p.depths[def_index] += 1;
27252725 defer p.depths[def_index] -= 1;
......@@ -2739,7 +2739,7 @@ const Parser = struct {
27392739 };
27402740 }
27412741 pub fn parseFnCallArguments(p: *Parser) Error!bool {
2742 const def_index = @intFromEnum(Def.defFnCallArguments);
2742 const def_index = @backingInt(Def.defFnCallArguments);
27432743 if (p.depths[def_index] > max_depth) return error.MaxDepth;
27442744 p.depths[def_index] += 1;
27452745 defer p.depths[def_index] -= 1;
......@@ -2751,7 +2751,7 @@ const Parser = struct {
27512751 };
27522752 }
27532753 pub fn parseSliceTypeStart(p: *Parser) Error!bool {
2754 const def_index = @intFromEnum(Def.defSliceTypeStart);
2754 const def_index = @backingInt(Def.defSliceTypeStart);
27552755 if (p.depths[def_index] > max_depth) return error.MaxDepth;
27562756 p.depths[def_index] += 1;
27572757 defer p.depths[def_index] -= 1;
......@@ -2768,7 +2768,7 @@ const Parser = struct {
27682768 };
27692769 }
27702770 pub fn parseSinglePtrTypeStart(p: *Parser) Error!bool {
2771 const def_index = @intFromEnum(Def.defSinglePtrTypeStart);
2771 const def_index = @backingInt(Def.defSinglePtrTypeStart);
27722772 if (p.depths[def_index] > max_depth) return error.MaxDepth;
27732773 p.depths[def_index] += 1;
27742774 defer p.depths[def_index] -= 1;
......@@ -2780,7 +2780,7 @@ const Parser = struct {
27802780 };
27812781 }
27822782 pub fn parseManyPtrTypeStart(p: *Parser) Error!bool {
2783 const def_index = @intFromEnum(Def.defManyPtrTypeStart);
2783 const def_index = @backingInt(Def.defManyPtrTypeStart);
27842784 if (p.depths[def_index] > max_depth) return error.MaxDepth;
27852785 p.depths[def_index] += 1;
27862786 defer p.depths[def_index] -= 1;
......@@ -2799,7 +2799,7 @@ const Parser = struct {
27992799 };
28002800 }
28012801 pub fn parseArrayTypeStart(p: *Parser) Error!bool {
2802 const def_index = @intFromEnum(Def.defArrayTypeStart);
2802 const def_index = @backingInt(Def.defArrayTypeStart);
28032803 if (p.depths[def_index] > max_depth) return error.MaxDepth;
28042804 p.depths[def_index] += 1;
28052805 defer p.depths[def_index] -= 1;
......@@ -2821,7 +2821,7 @@ const Parser = struct {
28212821 };
28222822 }
28232823 pub fn parseContainerTypeAuto(p: *Parser) Error!bool {
2824 const def_index = @intFromEnum(Def.defContainerTypeAuto);
2824 const def_index = @backingInt(Def.defContainerTypeAuto);
28252825 if (p.depths[def_index] > max_depth) return error.MaxDepth;
28262826 p.depths[def_index] += 1;
28272827 defer p.depths[def_index] -= 1;
......@@ -2833,7 +2833,7 @@ const Parser = struct {
28332833 };
28342834 }
28352835 pub fn parseContainerTypeKind(p: *Parser) Error!bool {
2836 const def_index = @intFromEnum(Def.defContainerTypeKind);
2836 const def_index = @backingInt(Def.defContainerTypeKind);
28372837 if (p.depths[def_index] > max_depth) return error.MaxDepth;
28382838 p.depths[def_index] += 1;
28392839 defer p.depths[def_index] -= 1;
......@@ -2878,7 +2878,7 @@ const Parser = struct {
28782878 };
28792879 }
28802880 pub fn parseByteAlign(p: *Parser) Error!bool {
2881 const def_index = @intFromEnum(Def.defByteAlign);
2881 const def_index = @backingInt(Def.defByteAlign);
28822882 if (p.depths[def_index] > max_depth) return error.MaxDepth;
28832883 p.depths[def_index] += 1;
28842884 defer p.depths[def_index] -= 1;
......@@ -2890,7 +2890,7 @@ const Parser = struct {
28902890 };
28912891 }
28922892 pub fn parseBitAlign(p: *Parser) Error!bool {
2893 const def_index = @intFromEnum(Def.defBitAlign);
2893 const def_index = @backingInt(Def.defBitAlign);
28942894 if (p.depths[def_index] > max_depth) return error.MaxDepth;
28952895 p.depths[def_index] += 1;
28962896 defer p.depths[def_index] -= 1;
......@@ -2907,7 +2907,7 @@ const Parser = struct {
29072907 };
29082908 }
29092909 pub fn parseIdentifierList(p: *Parser) Error!bool {
2910 const def_index = @intFromEnum(Def.defIdentifierList);
2910 const def_index = @backingInt(Def.defIdentifierList);
29112911 if (p.depths[def_index] > max_depth) return error.MaxDepth;
29122912 p.depths[def_index] += 1;
29132913 defer p.depths[def_index] -= 1;
......@@ -2929,7 +2929,7 @@ const Parser = struct {
29292929 };
29302930 }
29312931 pub fn parseSwitchProngList(p: *Parser) Error!bool {
2932 const def_index = @intFromEnum(Def.defSwitchProngList);
2932 const def_index = @backingInt(Def.defSwitchProngList);
29332933 if (p.depths[def_index] > max_depth) return error.MaxDepth;
29342934 p.depths[def_index] += 1;
29352935 defer p.depths[def_index] -= 1;
......@@ -2951,7 +2951,7 @@ const Parser = struct {
29512951 };
29522952 }
29532953 pub fn parseAsmOutputList(p: *Parser) Error!bool {
2954 const def_index = @intFromEnum(Def.defAsmOutputList);
2954 const def_index = @backingInt(Def.defAsmOutputList);
29552955 if (p.depths[def_index] > max_depth) return error.MaxDepth;
29562956 p.depths[def_index] += 1;
29572957 defer p.depths[def_index] -= 1;
......@@ -2973,7 +2973,7 @@ const Parser = struct {
29732973 };
29742974 }
29752975 pub fn parseAsmInputList(p: *Parser) Error!bool {
2976 const def_index = @intFromEnum(Def.defAsmInputList);
2976 const def_index = @backingInt(Def.defAsmInputList);
29772977 if (p.depths[def_index] > max_depth) return error.MaxDepth;
29782978 p.depths[def_index] += 1;
29792979 defer p.depths[def_index] -= 1;
......@@ -2995,7 +2995,7 @@ const Parser = struct {
29952995 };
29962996 }
29972997 pub fn parseParamDeclList(p: *Parser) Error!bool {
2998 const def_index = @intFromEnum(Def.defParamDeclList);
2998 const def_index = @backingInt(Def.defParamDeclList);
29992999 if (p.depths[def_index] > max_depth) return error.MaxDepth;
30003000 p.depths[def_index] += 1;
30013001 defer p.depths[def_index] -= 1;
......@@ -3007,7 +3007,7 @@ const Parser = struct {
30073007 };
30083008 }
30093009 pub fn parseParamDeclListRest(p: *Parser) Error!bool {
3010 const def_index = @intFromEnum(Def.defParamDeclListRest);
3010 const def_index = @backingInt(Def.defParamDeclListRest);
30113011 if (p.depths[def_index] > max_depth) return error.MaxDepth;
30123012 p.depths[def_index] += 1;
30133013 defer p.depths[def_index] -= 1;
......@@ -3030,7 +3030,7 @@ const Parser = struct {
30303030 };
30313031 }
30323032 pub fn parseExprList(p: *Parser) Error!bool {
3033 const def_index = @intFromEnum(Def.defExprList);
3033 const def_index = @backingInt(Def.defExprList);
30343034 if (p.depths[def_index] > max_depth) return error.MaxDepth;
30353035 p.depths[def_index] += 1;
30363036 defer p.depths[def_index] -= 1;
......@@ -3054,7 +3054,7 @@ const Parser = struct {
30543054 };
30553055 }
30563056 pub fn parseExprPrefix(p: *Parser) Error!bool {
3057 const def_index = @intFromEnum(Def.defExprPrefix);
3057 const def_index = @backingInt(Def.defExprPrefix);
30583058 if (p.depths[def_index] > max_depth) return error.MaxDepth;
30593059 p.depths[def_index] += 1;
30603060 defer p.depths[def_index] -= 1;
......@@ -3066,7 +3066,7 @@ const Parser = struct {
30663066 };
30673067 }
30683068 pub fn parsebyte_order_mark(p: *Parser) Error!bool {
3069 const def_index = @intFromEnum(Def.defbyte_order_mark);
3069 const def_index = @backingInt(Def.defbyte_order_mark);
30703070 if (p.depths[def_index] > max_depth) return error.MaxDepth;
30713071 p.depths[def_index] += 1;
30723072 defer p.depths[def_index] -= 1;
......@@ -3084,7 +3084,7 @@ const Parser = struct {
30843084 };
30853085 }
30863086 pub fn parsesof(p: *Parser) Error!bool {
3087 const def_index = @intFromEnum(Def.defsof);
3087 const def_index = @backingInt(Def.defsof);
30883088 if (p.depths[def_index] > max_depth) return error.MaxDepth;
30893089 p.depths[def_index] += 1;
30903090 defer p.depths[def_index] -= 1;
......@@ -3096,7 +3096,7 @@ const Parser = struct {
30963096 };
30973097 }
30983098 pub fn parseeof(p: *Parser) Error!bool {
3099 const def_index = @intFromEnum(Def.defeof);
3099 const def_index = @backingInt(Def.defeof);
31003100 if (p.depths[def_index] > max_depth) return error.MaxDepth;
31013101 p.depths[def_index] += 1;
31023102 defer p.depths[def_index] -= 1;
......@@ -3119,7 +3119,7 @@ const Parser = struct {
31193119 };
31203120 }
31213121 pub fn parseox80_oxBF(p: *Parser) Error!bool {
3122 const def_index = @intFromEnum(Def.defox80_oxBF);
3122 const def_index = @backingInt(Def.defox80_oxBF);
31233123 if (p.depths[def_index] > max_depth) return error.MaxDepth;
31243124 p.depths[def_index] += 1;
31253125 defer p.depths[def_index] -= 1;
......@@ -3138,7 +3138,7 @@ const Parser = struct {
31383138 };
31393139 }
31403140 pub fn parseoxF4(p: *Parser) Error!bool {
3141 const def_index = @intFromEnum(Def.defoxF4);
3141 const def_index = @backingInt(Def.defoxF4);
31423142 if (p.depths[def_index] > max_depth) return error.MaxDepth;
31433143 p.depths[def_index] += 1;
31443144 defer p.depths[def_index] -= 1;
......@@ -3156,7 +3156,7 @@ const Parser = struct {
31563156 };
31573157 }
31583158 pub fn parseox80_ox8F(p: *Parser) Error!bool {
3159 const def_index = @intFromEnum(Def.defox80_ox8F);
3159 const def_index = @backingInt(Def.defox80_ox8F);
31603160 if (p.depths[def_index] > max_depth) return error.MaxDepth;
31613161 p.depths[def_index] += 1;
31623162 defer p.depths[def_index] -= 1;
......@@ -3175,7 +3175,7 @@ const Parser = struct {
31753175 };
31763176 }
31773177 pub fn parseoxF1_oxF3(p: *Parser) Error!bool {
3178 const def_index = @intFromEnum(Def.defoxF1_oxF3);
3178 const def_index = @backingInt(Def.defoxF1_oxF3);
31793179 if (p.depths[def_index] > max_depth) return error.MaxDepth;
31803180 p.depths[def_index] += 1;
31813181 defer p.depths[def_index] -= 1;
......@@ -3194,7 +3194,7 @@ const Parser = struct {
31943194 };
31953195 }
31963196 pub fn parseoxF0(p: *Parser) Error!bool {
3197 const def_index = @intFromEnum(Def.defoxF0);
3197 const def_index = @backingInt(Def.defoxF0);
31983198 if (p.depths[def_index] > max_depth) return error.MaxDepth;
31993199 p.depths[def_index] += 1;
32003200 defer p.depths[def_index] -= 1;
......@@ -3212,7 +3212,7 @@ const Parser = struct {
32123212 };
32133213 }
32143214 pub fn parseox90_0xBF(p: *Parser) Error!bool {
3215 const def_index = @intFromEnum(Def.defox90_0xBF);
3215 const def_index = @backingInt(Def.defox90_0xBF);
32163216 if (p.depths[def_index] > max_depth) return error.MaxDepth;
32173217 p.depths[def_index] += 1;
32183218 defer p.depths[def_index] -= 1;
......@@ -3231,7 +3231,7 @@ const Parser = struct {
32313231 };
32323232 }
32333233 pub fn parseoxEE_oxEF(p: *Parser) Error!bool {
3234 const def_index = @intFromEnum(Def.defoxEE_oxEF);
3234 const def_index = @backingInt(Def.defoxEE_oxEF);
32353235 if (p.depths[def_index] > max_depth) return error.MaxDepth;
32363236 p.depths[def_index] += 1;
32373237 defer p.depths[def_index] -= 1;
......@@ -3250,7 +3250,7 @@ const Parser = struct {
32503250 };
32513251 }
32523252 pub fn parseoxED(p: *Parser) Error!bool {
3253 const def_index = @intFromEnum(Def.defoxED);
3253 const def_index = @backingInt(Def.defoxED);
32543254 if (p.depths[def_index] > max_depth) return error.MaxDepth;
32553255 p.depths[def_index] += 1;
32563256 defer p.depths[def_index] -= 1;
......@@ -3268,7 +3268,7 @@ const Parser = struct {
32683268 };
32693269 }
32703270 pub fn parseox80_ox9F(p: *Parser) Error!bool {
3271 const def_index = @intFromEnum(Def.defox80_ox9F);
3271 const def_index = @backingInt(Def.defox80_ox9F);
32723272 if (p.depths[def_index] > max_depth) return error.MaxDepth;
32733273 p.depths[def_index] += 1;
32743274 defer p.depths[def_index] -= 1;
......@@ -3287,7 +3287,7 @@ const Parser = struct {
32873287 };
32883288 }
32893289 pub fn parseoxE1_oxEC(p: *Parser) Error!bool {
3290 const def_index = @intFromEnum(Def.defoxE1_oxEC);
3290 const def_index = @backingInt(Def.defoxE1_oxEC);
32913291 if (p.depths[def_index] > max_depth) return error.MaxDepth;
32923292 p.depths[def_index] += 1;
32933293 defer p.depths[def_index] -= 1;
......@@ -3306,7 +3306,7 @@ const Parser = struct {
33063306 };
33073307 }
33083308 pub fn parseoxE0(p: *Parser) Error!bool {
3309 const def_index = @intFromEnum(Def.defoxE0);
3309 const def_index = @backingInt(Def.defoxE0);
33103310 if (p.depths[def_index] > max_depth) return error.MaxDepth;
33113311 p.depths[def_index] += 1;
33123312 defer p.depths[def_index] -= 1;
......@@ -3324,7 +3324,7 @@ const Parser = struct {
33243324 };
33253325 }
33263326 pub fn parseoxA0_oxBF(p: *Parser) Error!bool {
3327 const def_index = @intFromEnum(Def.defoxA0_oxBF);
3327 const def_index = @backingInt(Def.defoxA0_oxBF);
33283328 if (p.depths[def_index] > max_depth) return error.MaxDepth;
33293329 p.depths[def_index] += 1;
33303330 defer p.depths[def_index] -= 1;
......@@ -3343,7 +3343,7 @@ const Parser = struct {
33433343 };
33443344 }
33453345 pub fn parseoxC2_oxDF(p: *Parser) Error!bool {
3346 const def_index = @intFromEnum(Def.defoxC2_oxDF);
3346 const def_index = @backingInt(Def.defoxC2_oxDF);
33473347 if (p.depths[def_index] > max_depth) return error.MaxDepth;
33483348 p.depths[def_index] += 1;
33493349 defer p.depths[def_index] -= 1;
......@@ -3362,7 +3362,7 @@ const Parser = struct {
33623362 };
33633363 }
33643364 pub fn parsemultibyte_utf8(p: *Parser) Error!bool {
3365 const def_index = @intFromEnum(Def.defmultibyte_utf8);
3365 const def_index = @backingInt(Def.defmultibyte_utf8);
33663366 if (p.depths[def_index] > max_depth) return error.MaxDepth;
33673367 p.depths[def_index] += 1;
33683368 defer p.depths[def_index] -= 1;
......@@ -3388,7 +3388,7 @@ const Parser = struct {
33883388 };
33893389 }
33903390 pub fn parsenon_control_ascii(p: *Parser) Error!bool {
3391 const def_index = @intFromEnum(Def.defnon_control_ascii);
3391 const def_index = @backingInt(Def.defnon_control_ascii);
33923392 if (p.depths[def_index] > max_depth) return error.MaxDepth;
33933393 p.depths[def_index] += 1;
33943394 defer p.depths[def_index] -= 1;
......@@ -3407,7 +3407,7 @@ const Parser = struct {
34073407 };
34083408 }
34093409 pub fn parsenon_control_utf8(p: *Parser) Error!bool {
3410 const def_index = @intFromEnum(Def.defnon_control_utf8);
3410 const def_index = @backingInt(Def.defnon_control_utf8);
34113411 if (p.depths[def_index] > max_depth) return error.MaxDepth;
34123412 p.depths[def_index] += 1;
34133413 defer p.depths[def_index] -= 1;
......@@ -3427,7 +3427,7 @@ const Parser = struct {
34273427 };
34283428 }
34293429 pub fn parsechar_char(p: *Parser) Error!bool {
3430 const def_index = @intFromEnum(Def.defchar_char);
3430 const def_index = @backingInt(Def.defchar_char);
34313431 if (p.depths[def_index] > max_depth) return error.MaxDepth;
34323432 p.depths[def_index] += 1;
34333433 defer p.depths[def_index] -= 1;
......@@ -3467,7 +3467,7 @@ const Parser = struct {
34673467 };
34683468 }
34693469 pub fn parsestring_char(p: *Parser) Error!bool {
3470 const def_index = @intFromEnum(Def.defstring_char);
3470 const def_index = @backingInt(Def.defstring_char);
34713471 if (p.depths[def_index] > max_depth) return error.MaxDepth;
34723472 p.depths[def_index] += 1;
34733473 defer p.depths[def_index] -= 1;
......@@ -3507,7 +3507,7 @@ const Parser = struct {
35073507 };
35083508 }
35093509 pub fn parsecontainer_doc_comment(p: *Parser) Error!bool {
3510 const def_index = @intFromEnum(Def.defcontainer_doc_comment);
3510 const def_index = @backingInt(Def.defcontainer_doc_comment);
35113511 if (p.depths[def_index] > max_depth) return error.MaxDepth;
35123512 p.depths[def_index] += 1;
35133513 defer p.depths[def_index] -= 1;
......@@ -3546,7 +3546,7 @@ const Parser = struct {
35463546 };
35473547 }
35483548 pub fn parsedoc_comment(p: *Parser) Error!bool {
3549 const def_index = @intFromEnum(Def.defdoc_comment);
3549 const def_index = @backingInt(Def.defdoc_comment);
35503550 if (p.depths[def_index] > max_depth) return error.MaxDepth;
35513551 p.depths[def_index] += 1;
35523552 defer p.depths[def_index] -= 1;
......@@ -3592,7 +3592,7 @@ const Parser = struct {
35923592 };
35933593 }
35943594 pub fn parseline_comment(p: *Parser) Error!bool {
3595 const def_index = @intFromEnum(Def.defline_comment);
3595 const def_index = @backingInt(Def.defline_comment);
35963596 if (p.depths[def_index] > max_depth) return error.MaxDepth;
35973597 p.depths[def_index] += 1;
35983598 defer p.depths[def_index] -= 1;
......@@ -3645,7 +3645,7 @@ const Parser = struct {
36453645 };
36463646 }
36473647 pub fn parseline_string(p: *Parser) Error!bool {
3648 const def_index = @intFromEnum(Def.defline_string);
3648 const def_index = @backingInt(Def.defline_string);
36493649 if (p.depths[def_index] > max_depth) return error.MaxDepth;
36503650 p.depths[def_index] += 1;
36513651 defer p.depths[def_index] -= 1;
......@@ -3670,7 +3670,7 @@ const Parser = struct {
36703670 };
36713671 }
36723672 pub fn parsenewline(p: *Parser) Error!bool {
3673 const def_index = @intFromEnum(Def.defnewline);
3673 const def_index = @backingInt(Def.defnewline);
36743674 if (p.depths[def_index] > max_depth) return error.MaxDepth;
36753675 p.depths[def_index] += 1;
36763676 defer p.depths[def_index] -= 1;
......@@ -3708,7 +3708,7 @@ const Parser = struct {
37083708 };
37093709 }
37103710 pub fn parseskip(p: *Parser) Error!bool {
3711 const def_index = @intFromEnum(Def.defskip);
3711 const def_index = @backingInt(Def.defskip);
37123712 if (p.depths[def_index] > max_depth) return error.MaxDepth;
37133713 p.depths[def_index] += 1;
37143714 defer p.depths[def_index] -= 1;
......@@ -3744,7 +3744,7 @@ const Parser = struct {
37443744 };
37453745 }
37463746 pub fn parseskip_require_newline(p: *Parser) Error!bool {
3747 const def_index = @intFromEnum(Def.defskip_require_newline);
3747 const def_index = @backingInt(Def.defskip_require_newline);
37483748 if (p.depths[def_index] > max_depth) return error.MaxDepth;
37493749 p.depths[def_index] += 1;
37503750 defer p.depths[def_index] -= 1;
......@@ -3786,7 +3786,7 @@ const Parser = struct {
37863786 };
37873787 }
37883788 pub fn parsepre_op_white(p: *Parser) Error!bool {
3789 const def_index = @intFromEnum(Def.defpre_op_white);
3789 const def_index = @backingInt(Def.defpre_op_white);
37903790 if (p.depths[def_index] > max_depth) return error.MaxDepth;
37913791 p.depths[def_index] += 1;
37923792 defer p.depths[def_index] -= 1;
......@@ -3824,7 +3824,7 @@ const Parser = struct {
38243824 };
38253825 }
38263826 pub fn parsepost_op_white(p: *Parser) Error!bool {
3827 const def_index = @intFromEnum(Def.defpost_op_white);
3827 const def_index = @backingInt(Def.defpost_op_white);
38283828 if (p.depths[def_index] > max_depth) return error.MaxDepth;
38293829 p.depths[def_index] += 1;
38303830 defer p.depths[def_index] -= 1;
......@@ -3846,7 +3846,7 @@ const Parser = struct {
38463846 };
38473847 }
38483848 pub fn parseCHAR_LITERAL(p: *Parser) Error!bool {
3849 const def_index = @intFromEnum(Def.defCHAR_LITERAL);
3849 const def_index = @backingInt(Def.defCHAR_LITERAL);
38503850 if (p.depths[def_index] > max_depth) return error.MaxDepth;
38513851 p.depths[def_index] += 1;
38523852 defer p.depths[def_index] -= 1;
......@@ -3879,7 +3879,7 @@ const Parser = struct {
38793879 };
38803880 }
38813881 pub fn parsedigit(p: *Parser) Error!bool {
3882 const def_index = @intFromEnum(Def.defdigit);
3882 const def_index = @backingInt(Def.defdigit);
38833883 if (p.depths[def_index] > max_depth) return error.MaxDepth;
38843884 p.depths[def_index] += 1;
38853885 defer p.depths[def_index] -= 1;
......@@ -3905,7 +3905,7 @@ const Parser = struct {
39053905 };
39063906 }
39073907 pub fn parsedigit_int(p: *Parser) Error!bool {
3908 const def_index = @intFromEnum(Def.defdigit_int);
3908 const def_index = @backingInt(Def.defdigit_int);
39093909 if (p.depths[def_index] > max_depth) return error.MaxDepth;
39103910 p.depths[def_index] += 1;
39113911 defer p.depths[def_index] -= 1;
......@@ -3929,7 +3929,7 @@ const Parser = struct {
39293929 };
39303930 }
39313931 pub fn parsedigit_float(p: *Parser) Error!bool {
3932 const def_index = @intFromEnum(Def.defdigit_float);
3932 const def_index = @backingInt(Def.defdigit_float);
39333933 if (p.depths[def_index] > max_depth) return error.MaxDepth;
39343934 p.depths[def_index] += 1;
39353935 defer p.depths[def_index] -= 1;
......@@ -3961,7 +3961,7 @@ const Parser = struct {
39613961 };
39623962 }
39633963 pub fn parseNUMBERLITERAL(p: *Parser) Error!bool {
3964 const def_index = @intFromEnum(Def.defNUMBERLITERAL);
3964 const def_index = @backingInt(Def.defNUMBERLITERAL);
39653965 if (p.depths[def_index] > max_depth) return error.MaxDepth;
39663966 p.depths[def_index] += 1;
39673967 defer p.depths[def_index] -= 1;
......@@ -4018,7 +4018,7 @@ const Parser = struct {
40184018 };
40194019 }
40204020 pub fn parsestring(p: *Parser) Error!bool {
4021 const def_index = @intFromEnum(Def.defstring);
4021 const def_index = @backingInt(Def.defstring);
40224022 if (p.depths[def_index] > max_depth) return error.MaxDepth;
40234023 p.depths[def_index] += 1;
40244024 defer p.depths[def_index] -= 1;
......@@ -4051,7 +4051,7 @@ const Parser = struct {
40514051 };
40524052 }
40534053 pub fn parseSTRINGLITERALSINGLE(p: *Parser) Error!bool {
4054 const def_index = @intFromEnum(Def.defSTRINGLITERALSINGLE);
4054 const def_index = @backingInt(Def.defSTRINGLITERALSINGLE);
40554055 if (p.depths[def_index] > max_depth) return error.MaxDepth;
40564056 p.depths[def_index] += 1;
40574057 defer p.depths[def_index] -= 1;
......@@ -4063,7 +4063,7 @@ const Parser = struct {
40634063 };
40644064 }
40654065 pub fn parseSTRINGLITERAL(p: *Parser) Error!bool {
4066 const def_index = @intFromEnum(Def.defSTRINGLITERAL);
4066 const def_index = @backingInt(Def.defSTRINGLITERAL);
40674067 if (p.depths[def_index] > max_depth) return error.MaxDepth;
40684068 p.depths[def_index] += 1;
40694069 defer p.depths[def_index] -= 1;
......@@ -4091,7 +4091,7 @@ const Parser = struct {
40914091 };
40924092 }
40934093 pub fn parseIDENTIFIER(p: *Parser) Error!bool {
4094 const def_index = @intFromEnum(Def.defIDENTIFIER);
4094 const def_index = @backingInt(Def.defIDENTIFIER);
40954095 if (p.depths[def_index] > max_depth) return error.MaxDepth;
40964096 p.depths[def_index] += 1;
40974097 defer p.depths[def_index] -= 1;
......@@ -4142,7 +4142,7 @@ const Parser = struct {
41424142 };
41434143 }
41444144 pub fn parseBUILTINIDENTIFIER(p: *Parser) Error!bool {
4145 const def_index = @intFromEnum(Def.defBUILTINIDENTIFIER);
4145 const def_index = @backingInt(Def.defBUILTINIDENTIFIER);
41464146 if (p.depths[def_index] > max_depth) return error.MaxDepth;
41474147 p.depths[def_index] += 1;
41484148 defer p.depths[def_index] -= 1;
......@@ -4186,7 +4186,7 @@ const Parser = struct {
41864186 };
41874187 }
41884188 pub fn parseAMPERSAND(p: *Parser) Error!bool {
4189 const def_index = @intFromEnum(Def.defAMPERSAND);
4189 const def_index = @backingInt(Def.defAMPERSAND);
41904190 if (p.depths[def_index] > max_depth) return error.MaxDepth;
41914191 p.depths[def_index] += 1;
41924192 defer p.depths[def_index] -= 1;
......@@ -4216,7 +4216,7 @@ const Parser = struct {
42164216 };
42174217 }
42184218 pub fn parseAMPERSANDEQUAL(p: *Parser) Error!bool {
4219 const def_index = @intFromEnum(Def.defAMPERSANDEQUAL);
4219 const def_index = @backingInt(Def.defAMPERSANDEQUAL);
42204220 if (p.depths[def_index] > max_depth) return error.MaxDepth;
42214221 p.depths[def_index] += 1;
42224222 defer p.depths[def_index] -= 1;
......@@ -4234,7 +4234,7 @@ const Parser = struct {
42344234 };
42354235 }
42364236 pub fn parseASTERISK(p: *Parser) Error!bool {
4237 const def_index = @intFromEnum(Def.defASTERISK);
4237 const def_index = @backingInt(Def.defASTERISK);
42384238 if (p.depths[def_index] > max_depth) return error.MaxDepth;
42394239 p.depths[def_index] += 1;
42404240 defer p.depths[def_index] -= 1;
......@@ -4266,7 +4266,7 @@ const Parser = struct {
42664266 };
42674267 }
42684268 pub fn parseASTERISKEQUAL(p: *Parser) Error!bool {
4269 const def_index = @intFromEnum(Def.defASTERISKEQUAL);
4269 const def_index = @backingInt(Def.defASTERISKEQUAL);
42704270 if (p.depths[def_index] > max_depth) return error.MaxDepth;
42714271 p.depths[def_index] += 1;
42724272 defer p.depths[def_index] -= 1;
......@@ -4284,7 +4284,7 @@ const Parser = struct {
42844284 };
42854285 }
42864286 pub fn parseASTERISKPERCENT(p: *Parser) Error!bool {
4287 const def_index = @intFromEnum(Def.defASTERISKPERCENT);
4287 const def_index = @backingInt(Def.defASTERISKPERCENT);
42884288 if (p.depths[def_index] > max_depth) return error.MaxDepth;
42894289 p.depths[def_index] += 1;
42904290 defer p.depths[def_index] -= 1;
......@@ -4314,7 +4314,7 @@ const Parser = struct {
43144314 };
43154315 }
43164316 pub fn parseASTERISKPERCENTEQUAL(p: *Parser) Error!bool {
4317 const def_index = @intFromEnum(Def.defASTERISKPERCENTEQUAL);
4317 const def_index = @backingInt(Def.defASTERISKPERCENTEQUAL);
43184318 if (p.depths[def_index] > max_depth) return error.MaxDepth;
43194319 p.depths[def_index] += 1;
43204320 defer p.depths[def_index] -= 1;
......@@ -4332,7 +4332,7 @@ const Parser = struct {
43324332 };
43334333 }
43344334 pub fn parseASTERISKPIPE(p: *Parser) Error!bool {
4335 const def_index = @intFromEnum(Def.defASTERISKPIPE);
4335 const def_index = @backingInt(Def.defASTERISKPIPE);
43364336 if (p.depths[def_index] > max_depth) return error.MaxDepth;
43374337 p.depths[def_index] += 1;
43384338 defer p.depths[def_index] -= 1;
......@@ -4362,7 +4362,7 @@ const Parser = struct {
43624362 };
43634363 }
43644364 pub fn parseASTERISKPIPEEQUAL(p: *Parser) Error!bool {
4365 const def_index = @intFromEnum(Def.defASTERISKPIPEEQUAL);
4365 const def_index = @backingInt(Def.defASTERISKPIPEEQUAL);
43664366 if (p.depths[def_index] > max_depth) return error.MaxDepth;
43674367 p.depths[def_index] += 1;
43684368 defer p.depths[def_index] -= 1;
......@@ -4380,7 +4380,7 @@ const Parser = struct {
43804380 };
43814381 }
43824382 pub fn parseCARET(p: *Parser) Error!bool {
4383 const def_index = @intFromEnum(Def.defCARET);
4383 const def_index = @backingInt(Def.defCARET);
43844384 if (p.depths[def_index] > max_depth) return error.MaxDepth;
43854385 p.depths[def_index] += 1;
43864386 defer p.depths[def_index] -= 1;
......@@ -4410,7 +4410,7 @@ const Parser = struct {
44104410 };
44114411 }
44124412 pub fn parseCARETEQUAL(p: *Parser) Error!bool {
4413 const def_index = @intFromEnum(Def.defCARETEQUAL);
4413 const def_index = @backingInt(Def.defCARETEQUAL);
44144414 if (p.depths[def_index] > max_depth) return error.MaxDepth;
44154415 p.depths[def_index] += 1;
44164416 defer p.depths[def_index] -= 1;
......@@ -4428,7 +4428,7 @@ const Parser = struct {
44284428 };
44294429 }
44304430 pub fn parseCOLON(p: *Parser) Error!bool {
4431 const def_index = @intFromEnum(Def.defCOLON);
4431 const def_index = @backingInt(Def.defCOLON);
44324432 if (p.depths[def_index] > max_depth) return error.MaxDepth;
44334433 p.depths[def_index] += 1;
44344434 defer p.depths[def_index] -= 1;
......@@ -4446,7 +4446,7 @@ const Parser = struct {
44464446 };
44474447 }
44484448 pub fn parseCOMMA(p: *Parser) Error!bool {
4449 const def_index = @intFromEnum(Def.defCOMMA);
4449 const def_index = @backingInt(Def.defCOMMA);
44504450 if (p.depths[def_index] > max_depth) return error.MaxDepth;
44514451 p.depths[def_index] += 1;
44524452 defer p.depths[def_index] -= 1;
......@@ -4464,7 +4464,7 @@ const Parser = struct {
44644464 };
44654465 }
44664466 pub fn parseDOT(p: *Parser) Error!bool {
4467 const def_index = @intFromEnum(Def.defDOT);
4467 const def_index = @backingInt(Def.defDOT);
44684468 if (p.depths[def_index] > max_depth) return error.MaxDepth;
44694469 p.depths[def_index] += 1;
44704470 defer p.depths[def_index] -= 1;
......@@ -4495,7 +4495,7 @@ const Parser = struct {
44954495 };
44964496 }
44974497 pub fn parseDOT2(p: *Parser) Error!bool {
4498 const def_index = @intFromEnum(Def.defDOT2);
4498 const def_index = @backingInt(Def.defDOT2);
44994499 if (p.depths[def_index] > max_depth) return error.MaxDepth;
45004500 p.depths[def_index] += 1;
45014501 defer p.depths[def_index] -= 1;
......@@ -4525,7 +4525,7 @@ const Parser = struct {
45254525 };
45264526 }
45274527 pub fn parseDOT3(p: *Parser) Error!bool {
4528 const def_index = @intFromEnum(Def.defDOT3);
4528 const def_index = @backingInt(Def.defDOT3);
45294529 if (p.depths[def_index] > max_depth) return error.MaxDepth;
45304530 p.depths[def_index] += 1;
45314531 defer p.depths[def_index] -= 1;
......@@ -4543,7 +4543,7 @@ const Parser = struct {
45434543 };
45444544 }
45454545 pub fn parseDOTASTERISK(p: *Parser) Error!bool {
4546 const def_index = @intFromEnum(Def.defDOTASTERISK);
4546 const def_index = @backingInt(Def.defDOTASTERISK);
45474547 if (p.depths[def_index] > max_depth) return error.MaxDepth;
45484548 p.depths[def_index] += 1;
45494549 defer p.depths[def_index] -= 1;
......@@ -4561,7 +4561,7 @@ const Parser = struct {
45614561 };
45624562 }
45634563 pub fn parseEQUAL(p: *Parser) Error!bool {
4564 const def_index = @intFromEnum(Def.defEQUAL);
4564 const def_index = @backingInt(Def.defEQUAL);
45654565 if (p.depths[def_index] > max_depth) return error.MaxDepth;
45664566 p.depths[def_index] += 1;
45674567 defer p.depths[def_index] -= 1;
......@@ -4592,7 +4592,7 @@ const Parser = struct {
45924592 };
45934593 }
45944594 pub fn parseEQUALEQUAL(p: *Parser) Error!bool {
4595 const def_index = @intFromEnum(Def.defEQUALEQUAL);
4595 const def_index = @backingInt(Def.defEQUALEQUAL);
45964596 if (p.depths[def_index] > max_depth) return error.MaxDepth;
45974597 p.depths[def_index] += 1;
45984598 defer p.depths[def_index] -= 1;
......@@ -4610,7 +4610,7 @@ const Parser = struct {
46104610 };
46114611 }
46124612 pub fn parseEQUALRARROW(p: *Parser) Error!bool {
4613 const def_index = @intFromEnum(Def.defEQUALRARROW);
4613 const def_index = @backingInt(Def.defEQUALRARROW);
46144614 if (p.depths[def_index] > max_depth) return error.MaxDepth;
46154615 p.depths[def_index] += 1;
46164616 defer p.depths[def_index] -= 1;
......@@ -4628,7 +4628,7 @@ const Parser = struct {
46284628 };
46294629 }
46304630 pub fn parseEXCLAMATIONMARK(p: *Parser) Error!bool {
4631 const def_index = @intFromEnum(Def.defEXCLAMATIONMARK);
4631 const def_index = @backingInt(Def.defEXCLAMATIONMARK);
46324632 if (p.depths[def_index] > max_depth) return error.MaxDepth;
46334633 p.depths[def_index] += 1;
46344634 defer p.depths[def_index] -= 1;
......@@ -4658,7 +4658,7 @@ const Parser = struct {
46584658 };
46594659 }
46604660 pub fn parseEXCLAMATIONMARKEQUAL(p: *Parser) Error!bool {
4661 const def_index = @intFromEnum(Def.defEXCLAMATIONMARKEQUAL);
4661 const def_index = @backingInt(Def.defEXCLAMATIONMARKEQUAL);
46624662 if (p.depths[def_index] > max_depth) return error.MaxDepth;
46634663 p.depths[def_index] += 1;
46644664 defer p.depths[def_index] -= 1;
......@@ -4676,7 +4676,7 @@ const Parser = struct {
46764676 };
46774677 }
46784678 pub fn parseLARROW(p: *Parser) Error!bool {
4679 const def_index = @intFromEnum(Def.defLARROW);
4679 const def_index = @backingInt(Def.defLARROW);
46804680 if (p.depths[def_index] > max_depth) return error.MaxDepth;
46814681 p.depths[def_index] += 1;
46824682 defer p.depths[def_index] -= 1;
......@@ -4707,7 +4707,7 @@ const Parser = struct {
47074707 };
47084708 }
47094709 pub fn parseLARROW2(p: *Parser) Error!bool {
4710 const def_index = @intFromEnum(Def.defLARROW2);
4710 const def_index = @backingInt(Def.defLARROW2);
47114711 if (p.depths[def_index] > max_depth) return error.MaxDepth;
47124712 p.depths[def_index] += 1;
47134713 defer p.depths[def_index] -= 1;
......@@ -4738,7 +4738,7 @@ const Parser = struct {
47384738 };
47394739 }
47404740 pub fn parseLARROW2EQUAL(p: *Parser) Error!bool {
4741 const def_index = @intFromEnum(Def.defLARROW2EQUAL);
4741 const def_index = @backingInt(Def.defLARROW2EQUAL);
47424742 if (p.depths[def_index] > max_depth) return error.MaxDepth;
47434743 p.depths[def_index] += 1;
47444744 defer p.depths[def_index] -= 1;
......@@ -4756,7 +4756,7 @@ const Parser = struct {
47564756 };
47574757 }
47584758 pub fn parseLARROW2PIPE(p: *Parser) Error!bool {
4759 const def_index = @intFromEnum(Def.defLARROW2PIPE);
4759 const def_index = @backingInt(Def.defLARROW2PIPE);
47604760 if (p.depths[def_index] > max_depth) return error.MaxDepth;
47614761 p.depths[def_index] += 1;
47624762 defer p.depths[def_index] -= 1;
......@@ -4786,7 +4786,7 @@ const Parser = struct {
47864786 };
47874787 }
47884788 pub fn parseLARROW2PIPEEQUAL(p: *Parser) Error!bool {
4789 const def_index = @intFromEnum(Def.defLARROW2PIPEEQUAL);
4789 const def_index = @backingInt(Def.defLARROW2PIPEEQUAL);
47904790 if (p.depths[def_index] > max_depth) return error.MaxDepth;
47914791 p.depths[def_index] += 1;
47924792 defer p.depths[def_index] -= 1;
......@@ -4804,7 +4804,7 @@ const Parser = struct {
48044804 };
48054805 }
48064806 pub fn parseLARROWEQUAL(p: *Parser) Error!bool {
4807 const def_index = @intFromEnum(Def.defLARROWEQUAL);
4807 const def_index = @backingInt(Def.defLARROWEQUAL);
48084808 if (p.depths[def_index] > max_depth) return error.MaxDepth;
48094809 p.depths[def_index] += 1;
48104810 defer p.depths[def_index] -= 1;
......@@ -4822,7 +4822,7 @@ const Parser = struct {
48224822 };
48234823 }
48244824 pub fn parseLBRACE(p: *Parser) Error!bool {
4825 const def_index = @intFromEnum(Def.defLBRACE);
4825 const def_index = @backingInt(Def.defLBRACE);
48264826 if (p.depths[def_index] > max_depth) return error.MaxDepth;
48274827 p.depths[def_index] += 1;
48284828 defer p.depths[def_index] -= 1;
......@@ -4840,7 +4840,7 @@ const Parser = struct {
48404840 };
48414841 }
48424842 pub fn parseLBRACKET(p: *Parser) Error!bool {
4843 const def_index = @intFromEnum(Def.defLBRACKET);
4843 const def_index = @backingInt(Def.defLBRACKET);
48444844 if (p.depths[def_index] > max_depth) return error.MaxDepth;
48454845 p.depths[def_index] += 1;
48464846 defer p.depths[def_index] -= 1;
......@@ -4858,7 +4858,7 @@ const Parser = struct {
48584858 };
48594859 }
48604860 pub fn parseLPAREN(p: *Parser) Error!bool {
4861 const def_index = @intFromEnum(Def.defLPAREN);
4861 const def_index = @backingInt(Def.defLPAREN);
48624862 if (p.depths[def_index] > max_depth) return error.MaxDepth;
48634863 p.depths[def_index] += 1;
48644864 defer p.depths[def_index] -= 1;
......@@ -4876,7 +4876,7 @@ const Parser = struct {
48764876 };
48774877 }
48784878 pub fn parseMINUS(p: *Parser) Error!bool {
4879 const def_index = @intFromEnum(Def.defMINUS);
4879 const def_index = @backingInt(Def.defMINUS);
48804880 if (p.depths[def_index] > max_depth) return error.MaxDepth;
48814881 p.depths[def_index] += 1;
48824882 defer p.depths[def_index] -= 1;
......@@ -4909,7 +4909,7 @@ const Parser = struct {
49094909 };
49104910 }
49114911 pub fn parseMINUSEQUAL(p: *Parser) Error!bool {
4912 const def_index = @intFromEnum(Def.defMINUSEQUAL);
4912 const def_index = @backingInt(Def.defMINUSEQUAL);
49134913 if (p.depths[def_index] > max_depth) return error.MaxDepth;
49144914 p.depths[def_index] += 1;
49154915 defer p.depths[def_index] -= 1;
......@@ -4927,7 +4927,7 @@ const Parser = struct {
49274927 };
49284928 }
49294929 pub fn parseMINUSPERCENT(p: *Parser) Error!bool {
4930 const def_index = @intFromEnum(Def.defMINUSPERCENT);
4930 const def_index = @backingInt(Def.defMINUSPERCENT);
49314931 if (p.depths[def_index] > max_depth) return error.MaxDepth;
49324932 p.depths[def_index] += 1;
49334933 defer p.depths[def_index] -= 1;
......@@ -4957,7 +4957,7 @@ const Parser = struct {
49574957 };
49584958 }
49594959 pub fn parseMINUSPERCENTEQUAL(p: *Parser) Error!bool {
4960 const def_index = @intFromEnum(Def.defMINUSPERCENTEQUAL);
4960 const def_index = @backingInt(Def.defMINUSPERCENTEQUAL);
49614961 if (p.depths[def_index] > max_depth) return error.MaxDepth;
49624962 p.depths[def_index] += 1;
49634963 defer p.depths[def_index] -= 1;
......@@ -4975,7 +4975,7 @@ const Parser = struct {
49754975 };
49764976 }
49774977 pub fn parseMINUSPIPE(p: *Parser) Error!bool {
4978 const def_index = @intFromEnum(Def.defMINUSPIPE);
4978 const def_index = @backingInt(Def.defMINUSPIPE);
49794979 if (p.depths[def_index] > max_depth) return error.MaxDepth;
49804980 p.depths[def_index] += 1;
49814981 defer p.depths[def_index] -= 1;
......@@ -5005,7 +5005,7 @@ const Parser = struct {
50055005 };
50065006 }
50075007 pub fn parseMINUSPIPEEQUAL(p: *Parser) Error!bool {
5008 const def_index = @intFromEnum(Def.defMINUSPIPEEQUAL);
5008 const def_index = @backingInt(Def.defMINUSPIPEEQUAL);
50095009 if (p.depths[def_index] > max_depth) return error.MaxDepth;
50105010 p.depths[def_index] += 1;
50115011 defer p.depths[def_index] -= 1;
......@@ -5023,7 +5023,7 @@ const Parser = struct {
50235023 };
50245024 }
50255025 pub fn parseMINUSRARROW(p: *Parser) Error!bool {
5026 const def_index = @intFromEnum(Def.defMINUSRARROW);
5026 const def_index = @backingInt(Def.defMINUSRARROW);
50275027 if (p.depths[def_index] > max_depth) return error.MaxDepth;
50285028 p.depths[def_index] += 1;
50295029 defer p.depths[def_index] -= 1;
......@@ -5041,7 +5041,7 @@ const Parser = struct {
50415041 };
50425042 }
50435043 pub fn parsePERCENT(p: *Parser) Error!bool {
5044 const def_index = @intFromEnum(Def.defPERCENT);
5044 const def_index = @backingInt(Def.defPERCENT);
50455045 if (p.depths[def_index] > max_depth) return error.MaxDepth;
50465046 p.depths[def_index] += 1;
50475047 defer p.depths[def_index] -= 1;
......@@ -5071,7 +5071,7 @@ const Parser = struct {
50715071 };
50725072 }
50735073 pub fn parsePERCENTEQUAL(p: *Parser) Error!bool {
5074 const def_index = @intFromEnum(Def.defPERCENTEQUAL);
5074 const def_index = @backingInt(Def.defPERCENTEQUAL);
50755075 if (p.depths[def_index] > max_depth) return error.MaxDepth;
50765076 p.depths[def_index] += 1;
50775077 defer p.depths[def_index] -= 1;
......@@ -5089,7 +5089,7 @@ const Parser = struct {
50895089 };
50905090 }
50915091 pub fn parsePIPE(p: *Parser) Error!bool {
5092 const def_index = @intFromEnum(Def.defPIPE);
5092 const def_index = @backingInt(Def.defPIPE);
50935093 if (p.depths[def_index] > max_depth) return error.MaxDepth;
50945094 p.depths[def_index] += 1;
50955095 defer p.depths[def_index] -= 1;
......@@ -5120,7 +5120,7 @@ const Parser = struct {
51205120 };
51215121 }
51225122 pub fn parsePIPE2(p: *Parser) Error!bool {
5123 const def_index = @intFromEnum(Def.defPIPE2);
5123 const def_index = @backingInt(Def.defPIPE2);
51245124 if (p.depths[def_index] > max_depth) return error.MaxDepth;
51255125 p.depths[def_index] += 1;
51265126 defer p.depths[def_index] -= 1;
......@@ -5138,7 +5138,7 @@ const Parser = struct {
51385138 };
51395139 }
51405140 pub fn parsePIPEEQUAL(p: *Parser) Error!bool {
5141 const def_index = @intFromEnum(Def.defPIPEEQUAL);
5141 const def_index = @backingInt(Def.defPIPEEQUAL);
51425142 if (p.depths[def_index] > max_depth) return error.MaxDepth;
51435143 p.depths[def_index] += 1;
51445144 defer p.depths[def_index] -= 1;
......@@ -5156,7 +5156,7 @@ const Parser = struct {
51565156 };
51575157 }
51585158 pub fn parsePLUS(p: *Parser) Error!bool {
5159 const def_index = @intFromEnum(Def.defPLUS);
5159 const def_index = @backingInt(Def.defPLUS);
51605160 if (p.depths[def_index] > max_depth) return error.MaxDepth;
51615161 p.depths[def_index] += 1;
51625162 defer p.depths[def_index] -= 1;
......@@ -5189,7 +5189,7 @@ const Parser = struct {
51895189 };
51905190 }
51915191 pub fn parsePLUS2(p: *Parser) Error!bool {
5192 const def_index = @intFromEnum(Def.defPLUS2);
5192 const def_index = @backingInt(Def.defPLUS2);
51935193 if (p.depths[def_index] > max_depth) return error.MaxDepth;
51945194 p.depths[def_index] += 1;
51955195 defer p.depths[def_index] -= 1;
......@@ -5207,7 +5207,7 @@ const Parser = struct {
52075207 };
52085208 }
52095209 pub fn parsePLUSEQUAL(p: *Parser) Error!bool {
5210 const def_index = @intFromEnum(Def.defPLUSEQUAL);
5210 const def_index = @backingInt(Def.defPLUSEQUAL);
52115211 if (p.depths[def_index] > max_depth) return error.MaxDepth;
52125212 p.depths[def_index] += 1;
52135213 defer p.depths[def_index] -= 1;
......@@ -5225,7 +5225,7 @@ const Parser = struct {
52255225 };
52265226 }
52275227 pub fn parsePLUSPERCENT(p: *Parser) Error!bool {
5228 const def_index = @intFromEnum(Def.defPLUSPERCENT);
5228 const def_index = @backingInt(Def.defPLUSPERCENT);
52295229 if (p.depths[def_index] > max_depth) return error.MaxDepth;
52305230 p.depths[def_index] += 1;
52315231 defer p.depths[def_index] -= 1;
......@@ -5255,7 +5255,7 @@ const Parser = struct {
52555255 };
52565256 }
52575257 pub fn parsePLUSPERCENTEQUAL(p: *Parser) Error!bool {
5258 const def_index = @intFromEnum(Def.defPLUSPERCENTEQUAL);
5258 const def_index = @backingInt(Def.defPLUSPERCENTEQUAL);
52595259 if (p.depths[def_index] > max_depth) return error.MaxDepth;
52605260 p.depths[def_index] += 1;
52615261 defer p.depths[def_index] -= 1;
......@@ -5273,7 +5273,7 @@ const Parser = struct {
52735273 };
52745274 }
52755275 pub fn parsePLUSPIPE(p: *Parser) Error!bool {
5276 const def_index = @intFromEnum(Def.defPLUSPIPE);
5276 const def_index = @backingInt(Def.defPLUSPIPE);
52775277 if (p.depths[def_index] > max_depth) return error.MaxDepth;
52785278 p.depths[def_index] += 1;
52795279 defer p.depths[def_index] -= 1;
......@@ -5303,7 +5303,7 @@ const Parser = struct {
53035303 };
53045304 }
53055305 pub fn parsePLUSPIPEEQUAL(p: *Parser) Error!bool {
5306 const def_index = @intFromEnum(Def.defPLUSPIPEEQUAL);
5306 const def_index = @backingInt(Def.defPLUSPIPEEQUAL);
53075307 if (p.depths[def_index] > max_depth) return error.MaxDepth;
53085308 p.depths[def_index] += 1;
53095309 defer p.depths[def_index] -= 1;
......@@ -5321,7 +5321,7 @@ const Parser = struct {
53215321 };
53225322 }
53235323 pub fn parseLETTERC(p: *Parser) Error!bool {
5324 const def_index = @intFromEnum(Def.defLETTERC);
5324 const def_index = @backingInt(Def.defLETTERC);
53255325 if (p.depths[def_index] > max_depth) return error.MaxDepth;
53265326 p.depths[def_index] += 1;
53275327 defer p.depths[def_index] -= 1;
......@@ -5339,7 +5339,7 @@ const Parser = struct {
53395339 };
53405340 }
53415341 pub fn parseQUESTIONMARK(p: *Parser) Error!bool {
5342 const def_index = @intFromEnum(Def.defQUESTIONMARK);
5342 const def_index = @backingInt(Def.defQUESTIONMARK);
53435343 if (p.depths[def_index] > max_depth) return error.MaxDepth;
53445344 p.depths[def_index] += 1;
53455345 defer p.depths[def_index] -= 1;
......@@ -5357,7 +5357,7 @@ const Parser = struct {
53575357 };
53585358 }
53595359 pub fn parseRARROW(p: *Parser) Error!bool {
5360 const def_index = @intFromEnum(Def.defRARROW);
5360 const def_index = @backingInt(Def.defRARROW);
53615361 if (p.depths[def_index] > max_depth) return error.MaxDepth;
53625362 p.depths[def_index] += 1;
53635363 defer p.depths[def_index] -= 1;
......@@ -5388,7 +5388,7 @@ const Parser = struct {
53885388 };
53895389 }
53905390 pub fn parseRARROW2(p: *Parser) Error!bool {
5391 const def_index = @intFromEnum(Def.defRARROW2);
5391 const def_index = @backingInt(Def.defRARROW2);
53925392 if (p.depths[def_index] > max_depth) return error.MaxDepth;
53935393 p.depths[def_index] += 1;
53945394 defer p.depths[def_index] -= 1;
......@@ -5418,7 +5418,7 @@ const Parser = struct {
54185418 };
54195419 }
54205420 pub fn parseRARROW2EQUAL(p: *Parser) Error!bool {
5421 const def_index = @intFromEnum(Def.defRARROW2EQUAL);
5421 const def_index = @backingInt(Def.defRARROW2EQUAL);
54225422 if (p.depths[def_index] > max_depth) return error.MaxDepth;
54235423 p.depths[def_index] += 1;
54245424 defer p.depths[def_index] -= 1;
......@@ -5436,7 +5436,7 @@ const Parser = struct {
54365436 };
54375437 }
54385438 pub fn parseRARROWEQUAL(p: *Parser) Error!bool {
5439 const def_index = @intFromEnum(Def.defRARROWEQUAL);
5439 const def_index = @backingInt(Def.defRARROWEQUAL);
54405440 if (p.depths[def_index] > max_depth) return error.MaxDepth;
54415441 p.depths[def_index] += 1;
54425442 defer p.depths[def_index] -= 1;
......@@ -5454,7 +5454,7 @@ const Parser = struct {
54545454 };
54555455 }
54565456 pub fn parseRBRACE(p: *Parser) Error!bool {
5457 const def_index = @intFromEnum(Def.defRBRACE);
5457 const def_index = @backingInt(Def.defRBRACE);
54585458 if (p.depths[def_index] > max_depth) return error.MaxDepth;
54595459 p.depths[def_index] += 1;
54605460 defer p.depths[def_index] -= 1;
......@@ -5472,7 +5472,7 @@ const Parser = struct {
54725472 };
54735473 }
54745474 pub fn parseRBRACKET(p: *Parser) Error!bool {
5475 const def_index = @intFromEnum(Def.defRBRACKET);
5475 const def_index = @backingInt(Def.defRBRACKET);
54765476 if (p.depths[def_index] > max_depth) return error.MaxDepth;
54775477 p.depths[def_index] += 1;
54785478 defer p.depths[def_index] -= 1;
......@@ -5490,7 +5490,7 @@ const Parser = struct {
54905490 };
54915491 }
54925492 pub fn parseRPAREN(p: *Parser) Error!bool {
5493 const def_index = @intFromEnum(Def.defRPAREN);
5493 const def_index = @backingInt(Def.defRPAREN);
54945494 if (p.depths[def_index] > max_depth) return error.MaxDepth;
54955495 p.depths[def_index] += 1;
54965496 defer p.depths[def_index] -= 1;
......@@ -5508,7 +5508,7 @@ const Parser = struct {
55085508 };
55095509 }
55105510 pub fn parseSEMICOLON(p: *Parser) Error!bool {
5511 const def_index = @intFromEnum(Def.defSEMICOLON);
5511 const def_index = @backingInt(Def.defSEMICOLON);
55125512 if (p.depths[def_index] > max_depth) return error.MaxDepth;
55135513 p.depths[def_index] += 1;
55145514 defer p.depths[def_index] -= 1;
......@@ -5526,7 +5526,7 @@ const Parser = struct {
55265526 };
55275527 }
55285528 pub fn parseSLASH(p: *Parser) Error!bool {
5529 const def_index = @intFromEnum(Def.defSLASH);
5529 const def_index = @backingInt(Def.defSLASH);
55305530 if (p.depths[def_index] > max_depth) return error.MaxDepth;
55315531 p.depths[def_index] += 1;
55325532 defer p.depths[def_index] -= 1;
......@@ -5557,7 +5557,7 @@ const Parser = struct {
55575557 };
55585558 }
55595559 pub fn parseSLASHEQUAL(p: *Parser) Error!bool {
5560 const def_index = @intFromEnum(Def.defSLASHEQUAL);
5560 const def_index = @backingInt(Def.defSLASHEQUAL);
55615561 if (p.depths[def_index] > max_depth) return error.MaxDepth;
55625562 p.depths[def_index] += 1;
55635563 defer p.depths[def_index] -= 1;
......@@ -5575,7 +5575,7 @@ const Parser = struct {
55755575 };
55765576 }
55775577 pub fn parseTILDE(p: *Parser) Error!bool {
5578 const def_index = @intFromEnum(Def.defTILDE);
5578 const def_index = @backingInt(Def.defTILDE);
55795579 if (p.depths[def_index] > max_depth) return error.MaxDepth;
55805580 p.depths[def_index] += 1;
55815581 defer p.depths[def_index] -= 1;
......@@ -5593,7 +5593,7 @@ const Parser = struct {
55935593 };
55945594 }
55955595 pub fn parseend_of_word(p: *Parser) Error!bool {
5596 const def_index = @intFromEnum(Def.defend_of_word);
5596 const def_index = @backingInt(Def.defend_of_word);
55975597 if (p.depths[def_index] > max_depth) return error.MaxDepth;
55985598 p.depths[def_index] += 1;
55995599 defer p.depths[def_index] -= 1;
......@@ -5620,7 +5620,7 @@ const Parser = struct {
56205620 };
56215621 }
56225622 pub fn parseKEYWORD_addrspace(p: *Parser) Error!bool {
5623 const def_index = @intFromEnum(Def.defKEYWORD_addrspace);
5623 const def_index = @backingInt(Def.defKEYWORD_addrspace);
56245624 if (p.depths[def_index] > max_depth) return error.MaxDepth;
56255625 p.depths[def_index] += 1;
56265626 defer p.depths[def_index] -= 1;
......@@ -5638,7 +5638,7 @@ const Parser = struct {
56385638 };
56395639 }
56405640 pub fn parseKEYWORD_align(p: *Parser) Error!bool {
5641 const def_index = @intFromEnum(Def.defKEYWORD_align);
5641 const def_index = @backingInt(Def.defKEYWORD_align);
56425642 if (p.depths[def_index] > max_depth) return error.MaxDepth;
56435643 p.depths[def_index] += 1;
56445644 defer p.depths[def_index] -= 1;
......@@ -5656,7 +5656,7 @@ const Parser = struct {
56565656 };
56575657 }
56585658 pub fn parseKEYWORD_allowzero(p: *Parser) Error!bool {
5659 const def_index = @intFromEnum(Def.defKEYWORD_allowzero);
5659 const def_index = @backingInt(Def.defKEYWORD_allowzero);
56605660 if (p.depths[def_index] > max_depth) return error.MaxDepth;
56615661 p.depths[def_index] += 1;
56625662 defer p.depths[def_index] -= 1;
......@@ -5674,7 +5674,7 @@ const Parser = struct {
56745674 };
56755675 }
56765676 pub fn parseKEYWORD_and(p: *Parser) Error!bool {
5677 const def_index = @intFromEnum(Def.defKEYWORD_and);
5677 const def_index = @backingInt(Def.defKEYWORD_and);
56785678 if (p.depths[def_index] > max_depth) return error.MaxDepth;
56795679 p.depths[def_index] += 1;
56805680 defer p.depths[def_index] -= 1;
......@@ -5692,7 +5692,7 @@ const Parser = struct {
56925692 };
56935693 }
56945694 pub fn parseKEYWORD_anyframe(p: *Parser) Error!bool {
5695 const def_index = @intFromEnum(Def.defKEYWORD_anyframe);
5695 const def_index = @backingInt(Def.defKEYWORD_anyframe);
56965696 if (p.depths[def_index] > max_depth) return error.MaxDepth;
56975697 p.depths[def_index] += 1;
56985698 defer p.depths[def_index] -= 1;
......@@ -5710,7 +5710,7 @@ const Parser = struct {
57105710 };
57115711 }
57125712 pub fn parseKEYWORD_anytype(p: *Parser) Error!bool {
5713 const def_index = @intFromEnum(Def.defKEYWORD_anytype);
5713 const def_index = @backingInt(Def.defKEYWORD_anytype);
57145714 if (p.depths[def_index] > max_depth) return error.MaxDepth;
57155715 p.depths[def_index] += 1;
57165716 defer p.depths[def_index] -= 1;
......@@ -5728,7 +5728,7 @@ const Parser = struct {
57285728 };
57295729 }
57305730 pub fn parseKEYWORD_asm(p: *Parser) Error!bool {
5731 const def_index = @intFromEnum(Def.defKEYWORD_asm);
5731 const def_index = @backingInt(Def.defKEYWORD_asm);
57325732 if (p.depths[def_index] > max_depth) return error.MaxDepth;
57335733 p.depths[def_index] += 1;
57345734 defer p.depths[def_index] -= 1;
......@@ -5746,7 +5746,7 @@ const Parser = struct {
57465746 };
57475747 }
57485748 pub fn parseKEYWORD_break(p: *Parser) Error!bool {
5749 const def_index = @intFromEnum(Def.defKEYWORD_break);
5749 const def_index = @backingInt(Def.defKEYWORD_break);
57505750 if (p.depths[def_index] > max_depth) return error.MaxDepth;
57515751 p.depths[def_index] += 1;
57525752 defer p.depths[def_index] -= 1;
......@@ -5764,7 +5764,7 @@ const Parser = struct {
57645764 };
57655765 }
57665766 pub fn parseKEYWORD_callconv(p: *Parser) Error!bool {
5767 const def_index = @intFromEnum(Def.defKEYWORD_callconv);
5767 const def_index = @backingInt(Def.defKEYWORD_callconv);
57685768 if (p.depths[def_index] > max_depth) return error.MaxDepth;
57695769 p.depths[def_index] += 1;
57705770 defer p.depths[def_index] -= 1;
......@@ -5782,7 +5782,7 @@ const Parser = struct {
57825782 };
57835783 }
57845784 pub fn parseKEYWORD_catch(p: *Parser) Error!bool {
5785 const def_index = @intFromEnum(Def.defKEYWORD_catch);
5785 const def_index = @backingInt(Def.defKEYWORD_catch);
57865786 if (p.depths[def_index] > max_depth) return error.MaxDepth;
57875787 p.depths[def_index] += 1;
57885788 defer p.depths[def_index] -= 1;
......@@ -5800,7 +5800,7 @@ const Parser = struct {
58005800 };
58015801 }
58025802 pub fn parseKEYWORD_comptime(p: *Parser) Error!bool {
5803 const def_index = @intFromEnum(Def.defKEYWORD_comptime);
5803 const def_index = @backingInt(Def.defKEYWORD_comptime);
58045804 if (p.depths[def_index] > max_depth) return error.MaxDepth;
58055805 p.depths[def_index] += 1;
58065806 defer p.depths[def_index] -= 1;
......@@ -5818,7 +5818,7 @@ const Parser = struct {
58185818 };
58195819 }
58205820 pub fn parseKEYWORD_const(p: *Parser) Error!bool {
5821 const def_index = @intFromEnum(Def.defKEYWORD_const);
5821 const def_index = @backingInt(Def.defKEYWORD_const);
58225822 if (p.depths[def_index] > max_depth) return error.MaxDepth;
58235823 p.depths[def_index] += 1;
58245824 defer p.depths[def_index] -= 1;
......@@ -5836,7 +5836,7 @@ const Parser = struct {
58365836 };
58375837 }
58385838 pub fn parseKEYWORD_continue(p: *Parser) Error!bool {
5839 const def_index = @intFromEnum(Def.defKEYWORD_continue);
5839 const def_index = @backingInt(Def.defKEYWORD_continue);
58405840 if (p.depths[def_index] > max_depth) return error.MaxDepth;
58415841 p.depths[def_index] += 1;
58425842 defer p.depths[def_index] -= 1;
......@@ -5854,7 +5854,7 @@ const Parser = struct {
58545854 };
58555855 }
58565856 pub fn parseKEYWORD_defer(p: *Parser) Error!bool {
5857 const def_index = @intFromEnum(Def.defKEYWORD_defer);
5857 const def_index = @backingInt(Def.defKEYWORD_defer);
58585858 if (p.depths[def_index] > max_depth) return error.MaxDepth;
58595859 p.depths[def_index] += 1;
58605860 defer p.depths[def_index] -= 1;
......@@ -5872,7 +5872,7 @@ const Parser = struct {
58725872 };
58735873 }
58745874 pub fn parseKEYWORD_else(p: *Parser) Error!bool {
5875 const def_index = @intFromEnum(Def.defKEYWORD_else);
5875 const def_index = @backingInt(Def.defKEYWORD_else);
58765876 if (p.depths[def_index] > max_depth) return error.MaxDepth;
58775877 p.depths[def_index] += 1;
58785878 defer p.depths[def_index] -= 1;
......@@ -5890,7 +5890,7 @@ const Parser = struct {
58905890 };
58915891 }
58925892 pub fn parseKEYWORD_enum(p: *Parser) Error!bool {
5893 const def_index = @intFromEnum(Def.defKEYWORD_enum);
5893 const def_index = @backingInt(Def.defKEYWORD_enum);
58945894 if (p.depths[def_index] > max_depth) return error.MaxDepth;
58955895 p.depths[def_index] += 1;
58965896 defer p.depths[def_index] -= 1;
......@@ -5908,7 +5908,7 @@ const Parser = struct {
59085908 };
59095909 }
59105910 pub fn parseKEYWORD_errdefer(p: *Parser) Error!bool {
5911 const def_index = @intFromEnum(Def.defKEYWORD_errdefer);
5911 const def_index = @backingInt(Def.defKEYWORD_errdefer);
59125912 if (p.depths[def_index] > max_depth) return error.MaxDepth;
59135913 p.depths[def_index] += 1;
59145914 defer p.depths[def_index] -= 1;
......@@ -5926,7 +5926,7 @@ const Parser = struct {
59265926 };
59275927 }
59285928 pub fn parseKEYWORD_error(p: *Parser) Error!bool {
5929 const def_index = @intFromEnum(Def.defKEYWORD_error);
5929 const def_index = @backingInt(Def.defKEYWORD_error);
59305930 if (p.depths[def_index] > max_depth) return error.MaxDepth;
59315931 p.depths[def_index] += 1;
59325932 defer p.depths[def_index] -= 1;
......@@ -5944,7 +5944,7 @@ const Parser = struct {
59445944 };
59455945 }
59465946 pub fn parseKEYWORD_export(p: *Parser) Error!bool {
5947 const def_index = @intFromEnum(Def.defKEYWORD_export);
5947 const def_index = @backingInt(Def.defKEYWORD_export);
59485948 if (p.depths[def_index] > max_depth) return error.MaxDepth;
59495949 p.depths[def_index] += 1;
59505950 defer p.depths[def_index] -= 1;
......@@ -5962,7 +5962,7 @@ const Parser = struct {
59625962 };
59635963 }
59645964 pub fn parseKEYWORD_extern(p: *Parser) Error!bool {
5965 const def_index = @intFromEnum(Def.defKEYWORD_extern);
5965 const def_index = @backingInt(Def.defKEYWORD_extern);
59665966 if (p.depths[def_index] > max_depth) return error.MaxDepth;
59675967 p.depths[def_index] += 1;
59685968 defer p.depths[def_index] -= 1;
......@@ -5980,7 +5980,7 @@ const Parser = struct {
59805980 };
59815981 }
59825982 pub fn parseKEYWORD_fn(p: *Parser) Error!bool {
5983 const def_index = @intFromEnum(Def.defKEYWORD_fn);
5983 const def_index = @backingInt(Def.defKEYWORD_fn);
59845984 if (p.depths[def_index] > max_depth) return error.MaxDepth;
59855985 p.depths[def_index] += 1;
59865986 defer p.depths[def_index] -= 1;
......@@ -5998,7 +5998,7 @@ const Parser = struct {
59985998 };
59995999 }
60006000 pub fn parseKEYWORD_for(p: *Parser) Error!bool {
6001 const def_index = @intFromEnum(Def.defKEYWORD_for);
6001 const def_index = @backingInt(Def.defKEYWORD_for);
60026002 if (p.depths[def_index] > max_depth) return error.MaxDepth;
60036003 p.depths[def_index] += 1;
60046004 defer p.depths[def_index] -= 1;
......@@ -6016,7 +6016,7 @@ const Parser = struct {
60166016 };
60176017 }
60186018 pub fn parseKEYWORD_if(p: *Parser) Error!bool {
6019 const def_index = @intFromEnum(Def.defKEYWORD_if);
6019 const def_index = @backingInt(Def.defKEYWORD_if);
60206020 if (p.depths[def_index] > max_depth) return error.MaxDepth;
60216021 p.depths[def_index] += 1;
60226022 defer p.depths[def_index] -= 1;
......@@ -6034,7 +6034,7 @@ const Parser = struct {
60346034 };
60356035 }
60366036 pub fn parseKEYWORD_inline(p: *Parser) Error!bool {
6037 const def_index = @intFromEnum(Def.defKEYWORD_inline);
6037 const def_index = @backingInt(Def.defKEYWORD_inline);
60386038 if (p.depths[def_index] > max_depth) return error.MaxDepth;
60396039 p.depths[def_index] += 1;
60406040 defer p.depths[def_index] -= 1;
......@@ -6052,7 +6052,7 @@ const Parser = struct {
60526052 };
60536053 }
60546054 pub fn parseKEYWORD_noalias(p: *Parser) Error!bool {
6055 const def_index = @intFromEnum(Def.defKEYWORD_noalias);
6055 const def_index = @backingInt(Def.defKEYWORD_noalias);
60566056 if (p.depths[def_index] > max_depth) return error.MaxDepth;
60576057 p.depths[def_index] += 1;
60586058 defer p.depths[def_index] -= 1;
......@@ -6070,7 +6070,7 @@ const Parser = struct {
60706070 };
60716071 }
60726072 pub fn parseKEYWORD_nosuspend(p: *Parser) Error!bool {
6073 const def_index = @intFromEnum(Def.defKEYWORD_nosuspend);
6073 const def_index = @backingInt(Def.defKEYWORD_nosuspend);
60746074 if (p.depths[def_index] > max_depth) return error.MaxDepth;
60756075 p.depths[def_index] += 1;
60766076 defer p.depths[def_index] -= 1;
......@@ -6088,7 +6088,7 @@ const Parser = struct {
60886088 };
60896089 }
60906090 pub fn parseKEYWORD_noinline(p: *Parser) Error!bool {
6091 const def_index = @intFromEnum(Def.defKEYWORD_noinline);
6091 const def_index = @backingInt(Def.defKEYWORD_noinline);
60926092 if (p.depths[def_index] > max_depth) return error.MaxDepth;
60936093 p.depths[def_index] += 1;
60946094 defer p.depths[def_index] -= 1;
......@@ -6106,7 +6106,7 @@ const Parser = struct {
61066106 };
61076107 }
61086108 pub fn parseKEYWORD_opaque(p: *Parser) Error!bool {
6109 const def_index = @intFromEnum(Def.defKEYWORD_opaque);
6109 const def_index = @backingInt(Def.defKEYWORD_opaque);
61106110 if (p.depths[def_index] > max_depth) return error.MaxDepth;
61116111 p.depths[def_index] += 1;
61126112 defer p.depths[def_index] -= 1;
......@@ -6124,7 +6124,7 @@ const Parser = struct {
61246124 };
61256125 }
61266126 pub fn parseKEYWORD_or(p: *Parser) Error!bool {
6127 const def_index = @intFromEnum(Def.defKEYWORD_or);
6127 const def_index = @backingInt(Def.defKEYWORD_or);
61286128 if (p.depths[def_index] > max_depth) return error.MaxDepth;
61296129 p.depths[def_index] += 1;
61306130 defer p.depths[def_index] -= 1;
......@@ -6142,7 +6142,7 @@ const Parser = struct {
61426142 };
61436143 }
61446144 pub fn parseKEYWORD_orelse(p: *Parser) Error!bool {
6145 const def_index = @intFromEnum(Def.defKEYWORD_orelse);
6145 const def_index = @backingInt(Def.defKEYWORD_orelse);
61466146 if (p.depths[def_index] > max_depth) return error.MaxDepth;
61476147 p.depths[def_index] += 1;
61486148 defer p.depths[def_index] -= 1;
......@@ -6160,7 +6160,7 @@ const Parser = struct {
61606160 };
61616161 }
61626162 pub fn parseKEYWORD_packed(p: *Parser) Error!bool {
6163 const def_index = @intFromEnum(Def.defKEYWORD_packed);
6163 const def_index = @backingInt(Def.defKEYWORD_packed);
61646164 if (p.depths[def_index] > max_depth) return error.MaxDepth;
61656165 p.depths[def_index] += 1;
61666166 defer p.depths[def_index] -= 1;
......@@ -6178,7 +6178,7 @@ const Parser = struct {
61786178 };
61796179 }
61806180 pub fn parseKEYWORD_pub(p: *Parser) Error!bool {
6181 const def_index = @intFromEnum(Def.defKEYWORD_pub);
6181 const def_index = @backingInt(Def.defKEYWORD_pub);
61826182 if (p.depths[def_index] > max_depth) return error.MaxDepth;
61836183 p.depths[def_index] += 1;
61846184 defer p.depths[def_index] -= 1;
......@@ -6196,7 +6196,7 @@ const Parser = struct {
61966196 };
61976197 }
61986198 pub fn parseKEYWORD_resume(p: *Parser) Error!bool {
6199 const def_index = @intFromEnum(Def.defKEYWORD_resume);
6199 const def_index = @backingInt(Def.defKEYWORD_resume);
62006200 if (p.depths[def_index] > max_depth) return error.MaxDepth;
62016201 p.depths[def_index] += 1;
62026202 defer p.depths[def_index] -= 1;
......@@ -6214,7 +6214,7 @@ const Parser = struct {
62146214 };
62156215 }
62166216 pub fn parseKEYWORD_return(p: *Parser) Error!bool {
6217 const def_index = @intFromEnum(Def.defKEYWORD_return);
6217 const def_index = @backingInt(Def.defKEYWORD_return);
62186218 if (p.depths[def_index] > max_depth) return error.MaxDepth;
62196219 p.depths[def_index] += 1;
62206220 defer p.depths[def_index] -= 1;
......@@ -6232,7 +6232,7 @@ const Parser = struct {
62326232 };
62336233 }
62346234 pub fn parseKEYWORD_linksection(p: *Parser) Error!bool {
6235 const def_index = @intFromEnum(Def.defKEYWORD_linksection);
6235 const def_index = @backingInt(Def.defKEYWORD_linksection);
62366236 if (p.depths[def_index] > max_depth) return error.MaxDepth;
62376237 p.depths[def_index] += 1;
62386238 defer p.depths[def_index] -= 1;
......@@ -6250,7 +6250,7 @@ const Parser = struct {
62506250 };
62516251 }
62526252 pub fn parseKEYWORD_struct(p: *Parser) Error!bool {
6253 const def_index = @intFromEnum(Def.defKEYWORD_struct);
6253 const def_index = @backingInt(Def.defKEYWORD_struct);
62546254 if (p.depths[def_index] > max_depth) return error.MaxDepth;
62556255 p.depths[def_index] += 1;
62566256 defer p.depths[def_index] -= 1;
......@@ -6268,7 +6268,7 @@ const Parser = struct {
62686268 };
62696269 }
62706270 pub fn parseKEYWORD_suspend(p: *Parser) Error!bool {
6271 const def_index = @intFromEnum(Def.defKEYWORD_suspend);
6271 const def_index = @backingInt(Def.defKEYWORD_suspend);
62726272 if (p.depths[def_index] > max_depth) return error.MaxDepth;
62736273 p.depths[def_index] += 1;
62746274 defer p.depths[def_index] -= 1;
......@@ -6286,7 +6286,7 @@ const Parser = struct {
62866286 };
62876287 }
62886288 pub fn parseKEYWORD_switch(p: *Parser) Error!bool {
6289 const def_index = @intFromEnum(Def.defKEYWORD_switch);
6289 const def_index = @backingInt(Def.defKEYWORD_switch);
62906290 if (p.depths[def_index] > max_depth) return error.MaxDepth;
62916291 p.depths[def_index] += 1;
62926292 defer p.depths[def_index] -= 1;
......@@ -6304,7 +6304,7 @@ const Parser = struct {
63046304 };
63056305 }
63066306 pub fn parseKEYWORD_test(p: *Parser) Error!bool {
6307 const def_index = @intFromEnum(Def.defKEYWORD_test);
6307 const def_index = @backingInt(Def.defKEYWORD_test);
63086308 if (p.depths[def_index] > max_depth) return error.MaxDepth;
63096309 p.depths[def_index] += 1;
63106310 defer p.depths[def_index] -= 1;
......@@ -6322,7 +6322,7 @@ const Parser = struct {
63226322 };
63236323 }
63246324 pub fn parseKEYWORD_threadlocal(p: *Parser) Error!bool {
6325 const def_index = @intFromEnum(Def.defKEYWORD_threadlocal);
6325 const def_index = @backingInt(Def.defKEYWORD_threadlocal);
63266326 if (p.depths[def_index] > max_depth) return error.MaxDepth;
63276327 p.depths[def_index] += 1;
63286328 defer p.depths[def_index] -= 1;
......@@ -6340,7 +6340,7 @@ const Parser = struct {
63406340 };
63416341 }
63426342 pub fn parseKEYWORD_try(p: *Parser) Error!bool {
6343 const def_index = @intFromEnum(Def.defKEYWORD_try);
6343 const def_index = @backingInt(Def.defKEYWORD_try);
63446344 if (p.depths[def_index] > max_depth) return error.MaxDepth;
63456345 p.depths[def_index] += 1;
63466346 defer p.depths[def_index] -= 1;
......@@ -6358,7 +6358,7 @@ const Parser = struct {
63586358 };
63596359 }
63606360 pub fn parseKEYWORD_union(p: *Parser) Error!bool {
6361 const def_index = @intFromEnum(Def.defKEYWORD_union);
6361 const def_index = @backingInt(Def.defKEYWORD_union);
63626362 if (p.depths[def_index] > max_depth) return error.MaxDepth;
63636363 p.depths[def_index] += 1;
63646364 defer p.depths[def_index] -= 1;
......@@ -6376,7 +6376,7 @@ const Parser = struct {
63766376 };
63776377 }
63786378 pub fn parseKEYWORD_unreachable(p: *Parser) Error!bool {
6379 const def_index = @intFromEnum(Def.defKEYWORD_unreachable);
6379 const def_index = @backingInt(Def.defKEYWORD_unreachable);
63806380 if (p.depths[def_index] > max_depth) return error.MaxDepth;
63816381 p.depths[def_index] += 1;
63826382 defer p.depths[def_index] -= 1;
......@@ -6394,7 +6394,7 @@ const Parser = struct {
63946394 };
63956395 }
63966396 pub fn parseKEYWORD_var(p: *Parser) Error!bool {
6397 const def_index = @intFromEnum(Def.defKEYWORD_var);
6397 const def_index = @backingInt(Def.defKEYWORD_var);
63986398 if (p.depths[def_index] > max_depth) return error.MaxDepth;
63996399 p.depths[def_index] += 1;
64006400 defer p.depths[def_index] -= 1;
......@@ -6412,7 +6412,7 @@ const Parser = struct {
64126412 };
64136413 }
64146414 pub fn parseKEYWORD_volatile(p: *Parser) Error!bool {
6415 const def_index = @intFromEnum(Def.defKEYWORD_volatile);
6415 const def_index = @backingInt(Def.defKEYWORD_volatile);
64166416 if (p.depths[def_index] > max_depth) return error.MaxDepth;
64176417 p.depths[def_index] += 1;
64186418 defer p.depths[def_index] -= 1;
......@@ -6430,7 +6430,7 @@ const Parser = struct {
64306430 };
64316431 }
64326432 pub fn parseKEYWORD_while(p: *Parser) Error!bool {
6433 const def_index = @intFromEnum(Def.defKEYWORD_while);
6433 const def_index = @backingInt(Def.defKEYWORD_while);
64346434 if (p.depths[def_index] > max_depth) return error.MaxDepth;
64356435 p.depths[def_index] += 1;
64366436 defer p.depths[def_index] -= 1;
......@@ -6448,7 +6448,7 @@ const Parser = struct {
64486448 };
64496449 }
64506450 pub fn parsekeyword(p: *Parser) Error!bool {
6451 const def_index = @intFromEnum(Def.defkeyword);
6451 const def_index = @backingInt(Def.defkeyword);
64526452 if (p.depths[def_index] > max_depth) return error.MaxDepth;
64536453 p.depths[def_index] += 1;
64546454 defer p.depths[def_index] -= 1;
lib/std/zig/system.zig+7-7
......@@ -390,13 +390,13 @@ pub fn resolveTargetQuery(io: Io, query: Target.Query) DetectError!Target {
390390 // sets one of them, that takes precedence.
391391 switch (query_cpu_arch) {
392392 .x86_16 => {
393 cpu.features.addFeature(@intFromEnum(Target.x86.Feature.@"16bit_mode"));
393 cpu.features.addFeature(@backingInt(Target.x86.Feature.@"16bit_mode"));
394394 },
395395 .x86 => {
396396 if (!Target.x86.featureSetHasAny(query.cpu_features_add, .{
397397 .@"16bit_mode", .@"32bit_mode",
398398 })) {
399 cpu.features.addFeature(@intFromEnum(Target.x86.Feature.@"32bit_mode"));
399 cpu.features.addFeature(@backingInt(Target.x86.Feature.@"32bit_mode"));
400400 }
401401 },
402402 .arm, .armeb => {
......@@ -404,7 +404,7 @@ pub fn resolveTargetQuery(io: Io, query: Target.Query) DetectError!Target {
404404 // What do we do if the user specifies +thumb_mode?
405405 },
406406 .thumb, .thumbeb => {
407 cpu.features.addFeature(@intFromEnum(Target.arm.Feature.thumb_mode));
407 cpu.features.addFeature(@backingInt(Target.arm.Feature.thumb_mode));
408408 },
409409 else => {},
410410 }
......@@ -452,16 +452,16 @@ pub fn resolveTargetQuery(io: Io, query: Target.Query) DetectError!Target {
452452 // `-G <n>` to Clang...) We can't do the `-gpsize` hack because we can have multiple
453453 // concurrent LLVM emit jobs, and command line options in LLVM are shared globally. So
454454 // just force this feature off. Lovely stuff.
455 result.cpu.features.removeFeature(@intFromEnum(Target.hexagon.Feature.small_data));
455 result.cpu.features.removeFeature(@backingInt(Target.hexagon.Feature.small_data));
456456 }
457457
458458 // https://github.com/llvm/llvm-project/issues/105978
459459 if (result.cpu.arch.isArm() and result.abi.float() == .soft) {
460 result.cpu.features.removeFeature(@intFromEnum(Target.arm.Feature.vfp2));
460 result.cpu.features.removeFeature(@backingInt(Target.arm.Feature.vfp2));
461461 }
462462
463463 if (result.cpu.arch.isXtensa() and result.abi == .call0) {
464 result.cpu.features.removeFeature(@intFromEnum(Target.xtensa.Feature.windowed));
464 result.cpu.features.removeFeature(@backingInt(Target.xtensa.Feature.windowed));
465465 }
466466 }
467467
......@@ -972,7 +972,7 @@ fn detectAbiAndDynamicLinker(io: Io, cpu: Target.Cpu, os: Target.Os, query: Targ
972972 // and supported by Zig. But that means that we must detect the system ABI here rather than
973973 // relying on `builtin.target`.
974974 const all_abis = comptime blk: {
975 assert(@intFromEnum(Target.Abi.none) == 0);
975 assert(@backingInt(Target.Abi.none) == 0);
976976 const field_names = std.meta.fieldNames(Target.Abi)[1..];
977977 var array: [field_names.len]Target.Abi = undefined;
978978 for (field_names, 0..) |field_name, i| {
lib/std/zig/system/arm.zig+1-1
......@@ -233,7 +233,7 @@ pub const cpu_models = struct {
233233
234234pub const aarch64 = struct {
235235 fn setFeature(cpu: *Target.Cpu, feature: Target.aarch64.Feature, enabled: bool) void {
236 const idx = @as(Target.Cpu.Feature.Set.Index, @intFromEnum(feature));
236 const idx = @as(Target.Cpu.Feature.Set.Index, @backingInt(feature));
237237
238238 if (enabled) cpu.features.addFeature(idx) else cpu.features.removeFeature(idx);
239239 }
lib/std/zig/system/loongarch.zig+2-2
......@@ -13,7 +13,7 @@ inline fn bit(input: u32, offset: u5) bool {
1313}
1414
1515fn setFeature(cpu: *std.Target.Cpu, feature: std.Target.loongarch.Feature, enabled: bool) void {
16 const idx = @as(std.Target.Cpu.Feature.Set.Index, @intFromEnum(feature));
16 const idx = @as(std.Target.Cpu.Feature.Set.Index, @backingInt(feature));
1717
1818 if (enabled) cpu.features.addFeature(idx) else cpu.features.removeFeature(idx);
1919}
......@@ -26,7 +26,7 @@ pub fn detectNativeCpuAndFeatures(
2626 _ = os;
2727 _ = query;
2828
29 const variant: Variant = @enumFromInt(cpucfg(1) & 0b11);
29 const variant: Variant = @fromBackingInt(@intCast(cpucfg(1) & 0b11));
3030
3131 var cpu: std.Target.Cpu = .{
3232 .arch = arch,
lib/std/zig/system/windows.zig+2-2
......@@ -43,7 +43,7 @@ pub fn detectRuntimeVersion() WindowsVersion {
4343
4444 const version: u32 = @as(u32, os_ver) << 16 | @as(u16, sp_ver) << 8 | sub_ver;
4545
46 return @as(WindowsVersion, @enumFromInt(version));
46 return @as(WindowsVersion, @fromBackingInt(@intCast(version)));
4747}
4848
4949// Technically, a registry value can be as long as 1MB. However, MS recommends storing
......@@ -188,7 +188,7 @@ fn getCpuInfoFromRegistry(core: usize, args: anytype) !void {
188188}
189189
190190fn setFeature(comptime Feature: type, cpu: *Target.Cpu, feature: Feature, enabled: bool) void {
191 const idx = @as(Target.Cpu.Feature.Set.Index, @intFromEnum(feature));
191 const idx = @as(Target.Cpu.Feature.Set.Index, @backingInt(feature));
192192
193193 if (enabled) cpu.features.addFeature(idx) else cpu.features.removeFeature(idx);
194194}
lib/std/zig/system/x86.zig+1-1
......@@ -28,7 +28,7 @@ const Xcr0 = packed struct(u32) {
2828};
2929
3030fn setFeature(cpu: *Target.Cpu, feature: Target.x86.Feature, enabled: bool) void {
31 const idx = @as(Target.Cpu.Feature.Set.Index, @intFromEnum(feature));
31 const idx = @as(Target.Cpu.Feature.Set.Index, @backingInt(feature));
3232
3333 if (enabled) cpu.features.addFeature(idx) else cpu.features.removeFeature(idx);
3434}
lib/std/zip.zig+2-2
......@@ -377,7 +377,7 @@ pub const Iterator = struct {
377377 if (end > extra.len)
378378 return error.ZipBadExtraFieldSize;
379379 const data = extra[extra_offset + 4 .. end];
380 switch (@as(ExtraHeader, @enumFromInt(header_id))) {
380 switch (@as(ExtraHeader, @fromBackingInt(@intCast(header_id)))) {
381381 .zip64_info => try readZip64FileExtents(CentralDirectoryFileHeader, header, &extents, data),
382382 else => {}, // ignore
383383 }
......@@ -485,7 +485,7 @@ pub const Iterator = struct {
485485 if (end > local_header.extra_len)
486486 return error.ZipBadExtraFieldSize;
487487 const data = extra[extra_offset + 4 .. end];
488 switch (@as(ExtraHeader, @enumFromInt(header_id))) {
488 switch (@as(ExtraHeader, @fromBackingInt(@intCast(header_id)))) {
489489 .zip64_info => try readZip64FileExtents(LocalFileHeader, local_header, &extents, data),
490490 else => {}, // ignore
491491 }
lib/std/zon/parse.zig+2-2
......@@ -183,7 +183,7 @@ pub const Error = union(enum) {
183183 location.column += node_or_offset;
184184 return location;
185185 } else {
186 const ast_node: Ast.Node.Index = @enumFromInt(node_or_offset);
186 const ast_node: Ast.Node.Index = @fromBackingInt(@intCast(node_or_offset));
187187 const token = ast.nodeMainToken(ast_node);
188188 return ast.tokenLocation(0, token);
189189 }
......@@ -672,7 +672,7 @@ const Parser = struct {
672672 const enum_info = @typeInfo(T).@"enum";
673673 comptime var kvs_list: [enum_info.field_names.len]struct { []const u8, T } = undefined;
674674 inline for (enum_info.field_names, enum_info.field_values, 0..) |enum_field_name, enum_field_value, i| {
675 kvs_list[i] = .{ enum_field_name, @enumFromInt(enum_field_value) };
675 kvs_list[i] = .{ enum_field_name, @fromBackingInt(@intCast(enum_field_value)) };
676676 }
677677 const enum_tags = std.StaticStringMap(T).initComptime(kvs_list);
678678
src/Air.zig+196-196
......@@ -1052,9 +1052,9 @@ pub const Inst = struct {
10521052 _,
10531053
10541054 pub fn unwrap(index: Index) union(enum) { ref: Inst.Ref, target: u31 } {
1055 const low_index: u31 = @truncate(@intFromEnum(index));
1056 return switch (@as(u1, @intCast(@intFromEnum(index) >> 31))) {
1057 0 => .{ .ref = @enumFromInt(@as(u32, 1 << 31) | low_index) },
1055 const low_index: u31 = @truncate(@backingInt(index));
1056 return switch (@as(u1, @intCast(@backingInt(index) >> 31))) {
1057 0 => .{ .ref = @fromBackingInt(@intCast(@as(u32, 1 << 31) | low_index)) },
10581058 1 => .{ .target = low_index },
10591059 };
10601060 }
......@@ -1064,7 +1064,7 @@ pub const Inst = struct {
10641064 }
10651065
10661066 pub fn fromTargetIndex(index: u31) Index {
1067 return @enumFromInt((1 << 31) | @as(u32, index));
1067 return @fromBackingInt(@intCast((1 << 31) | @as(u32, index)));
10681068 }
10691069
10701070 pub fn toTargetIndex(index: Index) u31 {
......@@ -1077,7 +1077,7 @@ pub const Inst = struct {
10771077 .ref => {},
10781078 .target => try w.writeByte('t'),
10791079 }
1080 try w.print("{d}", .{@as(u31, @truncate(@intFromEnum(index)))});
1080 try w.print("{d}", .{@as(u31, @truncate(@backingInt(index)))});
10811081 }
10821082 };
10831083
......@@ -1087,138 +1087,138 @@ pub const Inst = struct {
10871087 ///
10881088 /// The ref `none` is an exception: it has the tag bit set but refers to the InternPool.
10891089 pub const Ref = enum(u32) {
1090 u0_type = @intFromEnum(InternPool.Index.u0_type),
1091 u1_type = @intFromEnum(InternPool.Index.u1_type),
1092 u8_type = @intFromEnum(InternPool.Index.u8_type),
1093 i8_type = @intFromEnum(InternPool.Index.i8_type),
1094 u16_type = @intFromEnum(InternPool.Index.u16_type),
1095 i16_type = @intFromEnum(InternPool.Index.i16_type),
1096 u29_type = @intFromEnum(InternPool.Index.u29_type),
1097 u32_type = @intFromEnum(InternPool.Index.u32_type),
1098 i32_type = @intFromEnum(InternPool.Index.i32_type),
1099 u64_type = @intFromEnum(InternPool.Index.u64_type),
1100 i64_type = @intFromEnum(InternPool.Index.i64_type),
1101 u80_type = @intFromEnum(InternPool.Index.u80_type),
1102 u128_type = @intFromEnum(InternPool.Index.u128_type),
1103 i128_type = @intFromEnum(InternPool.Index.i128_type),
1104 u256_type = @intFromEnum(InternPool.Index.u256_type),
1105 usize_type = @intFromEnum(InternPool.Index.usize_type),
1106 isize_type = @intFromEnum(InternPool.Index.isize_type),
1107 c_char_type = @intFromEnum(InternPool.Index.c_char_type),
1108 c_short_type = @intFromEnum(InternPool.Index.c_short_type),
1109 c_ushort_type = @intFromEnum(InternPool.Index.c_ushort_type),
1110 c_int_type = @intFromEnum(InternPool.Index.c_int_type),
1111 c_uint_type = @intFromEnum(InternPool.Index.c_uint_type),
1112 c_long_type = @intFromEnum(InternPool.Index.c_long_type),
1113 c_ulong_type = @intFromEnum(InternPool.Index.c_ulong_type),
1114 c_longlong_type = @intFromEnum(InternPool.Index.c_longlong_type),
1115 c_ulonglong_type = @intFromEnum(InternPool.Index.c_ulonglong_type),
1116 c_longdouble_type = @intFromEnum(InternPool.Index.c_longdouble_type),
1117 f16_type = @intFromEnum(InternPool.Index.f16_type),
1118 f32_type = @intFromEnum(InternPool.Index.f32_type),
1119 f64_type = @intFromEnum(InternPool.Index.f64_type),
1120 f80_type = @intFromEnum(InternPool.Index.f80_type),
1121 f128_type = @intFromEnum(InternPool.Index.f128_type),
1122 anyopaque_type = @intFromEnum(InternPool.Index.anyopaque_type),
1123 bool_type = @intFromEnum(InternPool.Index.bool_type),
1124 void_type = @intFromEnum(InternPool.Index.void_type),
1125 type_type = @intFromEnum(InternPool.Index.type_type),
1126 anyerror_type = @intFromEnum(InternPool.Index.anyerror_type),
1127 comptime_int_type = @intFromEnum(InternPool.Index.comptime_int_type),
1128 comptime_float_type = @intFromEnum(InternPool.Index.comptime_float_type),
1129 noreturn_type = @intFromEnum(InternPool.Index.noreturn_type),
1130 anyframe_type = @intFromEnum(InternPool.Index.anyframe_type),
1131 null_type = @intFromEnum(InternPool.Index.null_type),
1132 undefined_type = @intFromEnum(InternPool.Index.undefined_type),
1133 enum_literal_type = @intFromEnum(InternPool.Index.enum_literal_type),
1134 ptr_usize_type = @intFromEnum(InternPool.Index.ptr_usize_type),
1135 ptr_const_comptime_int_type = @intFromEnum(InternPool.Index.ptr_const_comptime_int_type),
1136 manyptr_u8_type = @intFromEnum(InternPool.Index.manyptr_u8_type),
1137 manyptr_const_u8_type = @intFromEnum(InternPool.Index.manyptr_const_u8_type),
1138 manyptr_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.manyptr_const_u8_sentinel_0_type),
1139 slice_const_u8_type = @intFromEnum(InternPool.Index.slice_const_u8_type),
1140 slice_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.slice_const_u8_sentinel_0_type),
1141 manyptr_const_slice_const_u8_type = @intFromEnum(InternPool.Index.manyptr_const_slice_const_u8_type),
1142 slice_const_slice_const_u8_type = @intFromEnum(InternPool.Index.slice_const_slice_const_u8_type),
1143 optional_type_type = @intFromEnum(InternPool.Index.optional_type_type),
1144 manyptr_const_type_type = @intFromEnum(InternPool.Index.manyptr_const_type_type),
1145 slice_const_type_type = @intFromEnum(InternPool.Index.slice_const_type_type),
1146 vector_8_i8_type = @intFromEnum(InternPool.Index.vector_8_i8_type),
1147 vector_16_i8_type = @intFromEnum(InternPool.Index.vector_16_i8_type),
1148 vector_32_i8_type = @intFromEnum(InternPool.Index.vector_32_i8_type),
1149 vector_64_i8_type = @intFromEnum(InternPool.Index.vector_64_i8_type),
1150 vector_1_u8_type = @intFromEnum(InternPool.Index.vector_1_u8_type),
1151 vector_2_u8_type = @intFromEnum(InternPool.Index.vector_2_u8_type),
1152 vector_4_u8_type = @intFromEnum(InternPool.Index.vector_4_u8_type),
1153 vector_8_u8_type = @intFromEnum(InternPool.Index.vector_8_u8_type),
1154 vector_16_u8_type = @intFromEnum(InternPool.Index.vector_16_u8_type),
1155 vector_32_u8_type = @intFromEnum(InternPool.Index.vector_32_u8_type),
1156 vector_64_u8_type = @intFromEnum(InternPool.Index.vector_64_u8_type),
1157 vector_2_i16_type = @intFromEnum(InternPool.Index.vector_2_i16_type),
1158 vector_4_i16_type = @intFromEnum(InternPool.Index.vector_4_i16_type),
1159 vector_8_i16_type = @intFromEnum(InternPool.Index.vector_8_i16_type),
1160 vector_16_i16_type = @intFromEnum(InternPool.Index.vector_16_i16_type),
1161 vector_32_i16_type = @intFromEnum(InternPool.Index.vector_32_i16_type),
1162 vector_4_u16_type = @intFromEnum(InternPool.Index.vector_4_u16_type),
1163 vector_8_u16_type = @intFromEnum(InternPool.Index.vector_8_u16_type),
1164 vector_16_u16_type = @intFromEnum(InternPool.Index.vector_16_u16_type),
1165 vector_32_u16_type = @intFromEnum(InternPool.Index.vector_32_u16_type),
1166 vector_2_i32_type = @intFromEnum(InternPool.Index.vector_2_i32_type),
1167 vector_4_i32_type = @intFromEnum(InternPool.Index.vector_4_i32_type),
1168 vector_8_i32_type = @intFromEnum(InternPool.Index.vector_8_i32_type),
1169 vector_16_i32_type = @intFromEnum(InternPool.Index.vector_16_i32_type),
1170 vector_4_u32_type = @intFromEnum(InternPool.Index.vector_4_u32_type),
1171 vector_8_u32_type = @intFromEnum(InternPool.Index.vector_8_u32_type),
1172 vector_16_u32_type = @intFromEnum(InternPool.Index.vector_16_u32_type),
1173 vector_2_i64_type = @intFromEnum(InternPool.Index.vector_2_i64_type),
1174 vector_4_i64_type = @intFromEnum(InternPool.Index.vector_4_i64_type),
1175 vector_8_i64_type = @intFromEnum(InternPool.Index.vector_8_i64_type),
1176 vector_2_u64_type = @intFromEnum(InternPool.Index.vector_2_u64_type),
1177 vector_4_u64_type = @intFromEnum(InternPool.Index.vector_4_u64_type),
1178 vector_8_u64_type = @intFromEnum(InternPool.Index.vector_8_u64_type),
1179 vector_1_u128_type = @intFromEnum(InternPool.Index.vector_1_u128_type),
1180 vector_2_u128_type = @intFromEnum(InternPool.Index.vector_2_u128_type),
1181 vector_1_u256_type = @intFromEnum(InternPool.Index.vector_1_u256_type),
1182 vector_4_f16_type = @intFromEnum(InternPool.Index.vector_4_f16_type),
1183 vector_8_f16_type = @intFromEnum(InternPool.Index.vector_8_f16_type),
1184 vector_16_f16_type = @intFromEnum(InternPool.Index.vector_16_f16_type),
1185 vector_32_f16_type = @intFromEnum(InternPool.Index.vector_32_f16_type),
1186 vector_2_f32_type = @intFromEnum(InternPool.Index.vector_2_f32_type),
1187 vector_4_f32_type = @intFromEnum(InternPool.Index.vector_4_f32_type),
1188 vector_8_f32_type = @intFromEnum(InternPool.Index.vector_8_f32_type),
1189 vector_16_f32_type = @intFromEnum(InternPool.Index.vector_16_f32_type),
1190 vector_2_f64_type = @intFromEnum(InternPool.Index.vector_2_f64_type),
1191 vector_4_f64_type = @intFromEnum(InternPool.Index.vector_4_f64_type),
1192 vector_8_f64_type = @intFromEnum(InternPool.Index.vector_8_f64_type),
1193 optional_noreturn_type = @intFromEnum(InternPool.Index.optional_noreturn_type),
1194 anyerror_void_error_union_type = @intFromEnum(InternPool.Index.anyerror_void_error_union_type),
1195 adhoc_inferred_error_set_type = @intFromEnum(InternPool.Index.adhoc_inferred_error_set_type),
1196 generic_poison_type = @intFromEnum(InternPool.Index.generic_poison_type),
1197 empty_tuple_type = @intFromEnum(InternPool.Index.empty_tuple_type),
1198 undef = @intFromEnum(InternPool.Index.undef),
1199 undef_bool = @intFromEnum(InternPool.Index.undef_bool),
1200 undef_usize = @intFromEnum(InternPool.Index.undef_usize),
1201 undef_u1 = @intFromEnum(InternPool.Index.undef_u1),
1202 zero = @intFromEnum(InternPool.Index.zero),
1203 zero_usize = @intFromEnum(InternPool.Index.zero_usize),
1204 zero_u1 = @intFromEnum(InternPool.Index.zero_u1),
1205 zero_u8 = @intFromEnum(InternPool.Index.zero_u8),
1206 one = @intFromEnum(InternPool.Index.one),
1207 one_usize = @intFromEnum(InternPool.Index.one_usize),
1208 one_u1 = @intFromEnum(InternPool.Index.one_u1),
1209 one_u8 = @intFromEnum(InternPool.Index.one_u8),
1210 four_u8 = @intFromEnum(InternPool.Index.four_u8),
1211 negative_one = @intFromEnum(InternPool.Index.negative_one),
1212 void_value = @intFromEnum(InternPool.Index.void_value),
1213 unreachable_value = @intFromEnum(InternPool.Index.unreachable_value),
1214 null_value = @intFromEnum(InternPool.Index.null_value),
1215 bool_true = @intFromEnum(InternPool.Index.bool_true),
1216 bool_false = @intFromEnum(InternPool.Index.bool_false),
1217 empty_tuple = @intFromEnum(InternPool.Index.empty_tuple),
1090 u0_type = @backingInt(InternPool.Index.u0_type),
1091 u1_type = @backingInt(InternPool.Index.u1_type),
1092 u8_type = @backingInt(InternPool.Index.u8_type),
1093 i8_type = @backingInt(InternPool.Index.i8_type),
1094 u16_type = @backingInt(InternPool.Index.u16_type),
1095 i16_type = @backingInt(InternPool.Index.i16_type),
1096 u29_type = @backingInt(InternPool.Index.u29_type),
1097 u32_type = @backingInt(InternPool.Index.u32_type),
1098 i32_type = @backingInt(InternPool.Index.i32_type),
1099 u64_type = @backingInt(InternPool.Index.u64_type),
1100 i64_type = @backingInt(InternPool.Index.i64_type),
1101 u80_type = @backingInt(InternPool.Index.u80_type),
1102 u128_type = @backingInt(InternPool.Index.u128_type),
1103 i128_type = @backingInt(InternPool.Index.i128_type),
1104 u256_type = @backingInt(InternPool.Index.u256_type),
1105 usize_type = @backingInt(InternPool.Index.usize_type),
1106 isize_type = @backingInt(InternPool.Index.isize_type),
1107 c_char_type = @backingInt(InternPool.Index.c_char_type),
1108 c_short_type = @backingInt(InternPool.Index.c_short_type),
1109 c_ushort_type = @backingInt(InternPool.Index.c_ushort_type),
1110 c_int_type = @backingInt(InternPool.Index.c_int_type),
1111 c_uint_type = @backingInt(InternPool.Index.c_uint_type),
1112 c_long_type = @backingInt(InternPool.Index.c_long_type),
1113 c_ulong_type = @backingInt(InternPool.Index.c_ulong_type),
1114 c_longlong_type = @backingInt(InternPool.Index.c_longlong_type),
1115 c_ulonglong_type = @backingInt(InternPool.Index.c_ulonglong_type),
1116 c_longdouble_type = @backingInt(InternPool.Index.c_longdouble_type),
1117 f16_type = @backingInt(InternPool.Index.f16_type),
1118 f32_type = @backingInt(InternPool.Index.f32_type),
1119 f64_type = @backingInt(InternPool.Index.f64_type),
1120 f80_type = @backingInt(InternPool.Index.f80_type),
1121 f128_type = @backingInt(InternPool.Index.f128_type),
1122 anyopaque_type = @backingInt(InternPool.Index.anyopaque_type),
1123 bool_type = @backingInt(InternPool.Index.bool_type),
1124 void_type = @backingInt(InternPool.Index.void_type),
1125 type_type = @backingInt(InternPool.Index.type_type),
1126 anyerror_type = @backingInt(InternPool.Index.anyerror_type),
1127 comptime_int_type = @backingInt(InternPool.Index.comptime_int_type),
1128 comptime_float_type = @backingInt(InternPool.Index.comptime_float_type),
1129 noreturn_type = @backingInt(InternPool.Index.noreturn_type),
1130 anyframe_type = @backingInt(InternPool.Index.anyframe_type),
1131 null_type = @backingInt(InternPool.Index.null_type),
1132 undefined_type = @backingInt(InternPool.Index.undefined_type),
1133 enum_literal_type = @backingInt(InternPool.Index.enum_literal_type),
1134 ptr_usize_type = @backingInt(InternPool.Index.ptr_usize_type),
1135 ptr_const_comptime_int_type = @backingInt(InternPool.Index.ptr_const_comptime_int_type),
1136 manyptr_u8_type = @backingInt(InternPool.Index.manyptr_u8_type),
1137 manyptr_const_u8_type = @backingInt(InternPool.Index.manyptr_const_u8_type),
1138 manyptr_const_u8_sentinel_0_type = @backingInt(InternPool.Index.manyptr_const_u8_sentinel_0_type),
1139 slice_const_u8_type = @backingInt(InternPool.Index.slice_const_u8_type),
1140 slice_const_u8_sentinel_0_type = @backingInt(InternPool.Index.slice_const_u8_sentinel_0_type),
1141 manyptr_const_slice_const_u8_type = @backingInt(InternPool.Index.manyptr_const_slice_const_u8_type),
1142 slice_const_slice_const_u8_type = @backingInt(InternPool.Index.slice_const_slice_const_u8_type),
1143 optional_type_type = @backingInt(InternPool.Index.optional_type_type),
1144 manyptr_const_type_type = @backingInt(InternPool.Index.manyptr_const_type_type),
1145 slice_const_type_type = @backingInt(InternPool.Index.slice_const_type_type),
1146 vector_8_i8_type = @backingInt(InternPool.Index.vector_8_i8_type),
1147 vector_16_i8_type = @backingInt(InternPool.Index.vector_16_i8_type),
1148 vector_32_i8_type = @backingInt(InternPool.Index.vector_32_i8_type),
1149 vector_64_i8_type = @backingInt(InternPool.Index.vector_64_i8_type),
1150 vector_1_u8_type = @backingInt(InternPool.Index.vector_1_u8_type),
1151 vector_2_u8_type = @backingInt(InternPool.Index.vector_2_u8_type),
1152 vector_4_u8_type = @backingInt(InternPool.Index.vector_4_u8_type),
1153 vector_8_u8_type = @backingInt(InternPool.Index.vector_8_u8_type),
1154 vector_16_u8_type = @backingInt(InternPool.Index.vector_16_u8_type),
1155 vector_32_u8_type = @backingInt(InternPool.Index.vector_32_u8_type),
1156 vector_64_u8_type = @backingInt(InternPool.Index.vector_64_u8_type),
1157 vector_2_i16_type = @backingInt(InternPool.Index.vector_2_i16_type),
1158 vector_4_i16_type = @backingInt(InternPool.Index.vector_4_i16_type),
1159 vector_8_i16_type = @backingInt(InternPool.Index.vector_8_i16_type),
1160 vector_16_i16_type = @backingInt(InternPool.Index.vector_16_i16_type),
1161 vector_32_i16_type = @backingInt(InternPool.Index.vector_32_i16_type),
1162 vector_4_u16_type = @backingInt(InternPool.Index.vector_4_u16_type),
1163 vector_8_u16_type = @backingInt(InternPool.Index.vector_8_u16_type),
1164 vector_16_u16_type = @backingInt(InternPool.Index.vector_16_u16_type),
1165 vector_32_u16_type = @backingInt(InternPool.Index.vector_32_u16_type),
1166 vector_2_i32_type = @backingInt(InternPool.Index.vector_2_i32_type),
1167 vector_4_i32_type = @backingInt(InternPool.Index.vector_4_i32_type),
1168 vector_8_i32_type = @backingInt(InternPool.Index.vector_8_i32_type),
1169 vector_16_i32_type = @backingInt(InternPool.Index.vector_16_i32_type),
1170 vector_4_u32_type = @backingInt(InternPool.Index.vector_4_u32_type),
1171 vector_8_u32_type = @backingInt(InternPool.Index.vector_8_u32_type),
1172 vector_16_u32_type = @backingInt(InternPool.Index.vector_16_u32_type),
1173 vector_2_i64_type = @backingInt(InternPool.Index.vector_2_i64_type),
1174 vector_4_i64_type = @backingInt(InternPool.Index.vector_4_i64_type),
1175 vector_8_i64_type = @backingInt(InternPool.Index.vector_8_i64_type),
1176 vector_2_u64_type = @backingInt(InternPool.Index.vector_2_u64_type),
1177 vector_4_u64_type = @backingInt(InternPool.Index.vector_4_u64_type),
1178 vector_8_u64_type = @backingInt(InternPool.Index.vector_8_u64_type),
1179 vector_1_u128_type = @backingInt(InternPool.Index.vector_1_u128_type),
1180 vector_2_u128_type = @backingInt(InternPool.Index.vector_2_u128_type),
1181 vector_1_u256_type = @backingInt(InternPool.Index.vector_1_u256_type),
1182 vector_4_f16_type = @backingInt(InternPool.Index.vector_4_f16_type),
1183 vector_8_f16_type = @backingInt(InternPool.Index.vector_8_f16_type),
1184 vector_16_f16_type = @backingInt(InternPool.Index.vector_16_f16_type),
1185 vector_32_f16_type = @backingInt(InternPool.Index.vector_32_f16_type),
1186 vector_2_f32_type = @backingInt(InternPool.Index.vector_2_f32_type),
1187 vector_4_f32_type = @backingInt(InternPool.Index.vector_4_f32_type),
1188 vector_8_f32_type = @backingInt(InternPool.Index.vector_8_f32_type),
1189 vector_16_f32_type = @backingInt(InternPool.Index.vector_16_f32_type),
1190 vector_2_f64_type = @backingInt(InternPool.Index.vector_2_f64_type),
1191 vector_4_f64_type = @backingInt(InternPool.Index.vector_4_f64_type),
1192 vector_8_f64_type = @backingInt(InternPool.Index.vector_8_f64_type),
1193 optional_noreturn_type = @backingInt(InternPool.Index.optional_noreturn_type),
1194 anyerror_void_error_union_type = @backingInt(InternPool.Index.anyerror_void_error_union_type),
1195 adhoc_inferred_error_set_type = @backingInt(InternPool.Index.adhoc_inferred_error_set_type),
1196 generic_poison_type = @backingInt(InternPool.Index.generic_poison_type),
1197 empty_tuple_type = @backingInt(InternPool.Index.empty_tuple_type),
1198 undef = @backingInt(InternPool.Index.undef),
1199 undef_bool = @backingInt(InternPool.Index.undef_bool),
1200 undef_usize = @backingInt(InternPool.Index.undef_usize),
1201 undef_u1 = @backingInt(InternPool.Index.undef_u1),
1202 zero = @backingInt(InternPool.Index.zero),
1203 zero_usize = @backingInt(InternPool.Index.zero_usize),
1204 zero_u1 = @backingInt(InternPool.Index.zero_u1),
1205 zero_u8 = @backingInt(InternPool.Index.zero_u8),
1206 one = @backingInt(InternPool.Index.one),
1207 one_usize = @backingInt(InternPool.Index.one_usize),
1208 one_u1 = @backingInt(InternPool.Index.one_u1),
1209 one_u8 = @backingInt(InternPool.Index.one_u8),
1210 four_u8 = @backingInt(InternPool.Index.four_u8),
1211 negative_one = @backingInt(InternPool.Index.negative_one),
1212 void_value = @backingInt(InternPool.Index.void_value),
1213 unreachable_value = @backingInt(InternPool.Index.unreachable_value),
1214 null_value = @backingInt(InternPool.Index.null_value),
1215 bool_true = @backingInt(InternPool.Index.bool_true),
1216 bool_false = @backingInt(InternPool.Index.bool_false),
1217 empty_tuple = @backingInt(InternPool.Index.empty_tuple),
12181218
12191219 /// This Ref does not correspond to any AIR instruction or constant
12201220 /// value and may instead be used as a sentinel to indicate null.
1221 none = @intFromEnum(InternPool.Index.none),
1221 none = @backingInt(InternPool.Index.none),
12221222 _,
12231223
12241224 pub fn toInterned(ref: Ref) ?InternPool.Index {
......@@ -1229,8 +1229,8 @@ pub const Inst = struct {
12291229 pub fn toInternedAllowNone(ref: Ref) ?InternPool.Index {
12301230 return switch (ref) {
12311231 .none => .none,
1232 else => if (@intFromEnum(ref) >> 31 == 0)
1233 @enumFromInt(@as(u31, @truncate(@intFromEnum(ref))))
1232 else => if (@backingInt(ref) >> 31 == 0)
1233 @fromBackingInt(@intCast(@as(u31, @truncate(@backingInt(ref)))))
12341234 else
12351235 null,
12361236 };
......@@ -1244,8 +1244,8 @@ pub const Inst = struct {
12441244 pub fn toIndexAllowNone(ref: Ref) ?Index {
12451245 return switch (ref) {
12461246 .none => null,
1247 else => if (@intFromEnum(ref) >> 31 != 0)
1248 @enumFromInt(@as(u31, @truncate(@intFromEnum(ref))))
1247 else => if (@backingInt(ref) >> 31 != 0)
1248 @fromBackingInt(@intCast(@as(u31, @truncate(@backingInt(ref)))))
12491249 else
12501250 null,
12511251 };
......@@ -1259,8 +1259,8 @@ pub const Inst = struct {
12591259 return switch (ip_index) {
12601260 .none => .none,
12611261 else => {
1262 assert(@intFromEnum(ip_index) >> 31 == 0);
1263 return @enumFromInt(@as(u31, @intCast(@intFromEnum(ip_index))));
1262 assert(@backingInt(ip_index) >> 31 == 0);
1263 return @fromBackingInt(@intCast(@as(u31, @intCast(@backingInt(ip_index)))));
12641264 },
12651265 };
12661266 }
......@@ -1452,11 +1452,11 @@ pub const VectorCmp = struct {
14521452 op: u32,
14531453
14541454 pub fn compareOperator(self: VectorCmp) std.math.CompareOperator {
1455 return @enumFromInt(@as(u3, @intCast(self.op)));
1455 return @fromBackingInt(@intCast(@as(u3, @intCast(self.op))));
14561456 }
14571457
14581458 pub fn encodeOp(compare_operator: std.math.CompareOperator) u32 {
1459 return @intFromEnum(compare_operator);
1459 return @backingInt(compare_operator);
14601460 }
14611461};
14621462
......@@ -1469,7 +1469,7 @@ pub const ShuffleOneMask = packed struct(u32) {
14691469 return .{ .index = @intCast(idx), .kind = .elem };
14701470 }
14711471 pub fn value(val: Value) ShuffleOneMask {
1472 return .{ .index = @intCast(@intFromEnum(val.toIntern())), .kind = .value };
1472 return .{ .index = @intCast(@backingInt(val.toIntern())), .kind = .value };
14731473 }
14741474 pub const Unwrapped = union(enum) {
14751475 /// The resulting element is this index into the runtime vector.
......@@ -1481,7 +1481,7 @@ pub const ShuffleOneMask = packed struct(u32) {
14811481 pub fn unwrap(raw: ShuffleOneMask) Unwrapped {
14821482 return switch (raw.kind) {
14831483 .elem => .{ .elem = raw.index },
1484 .value => .{ .value = @enumFromInt(raw.index) },
1484 .value => .{ .value = @fromBackingInt(@intCast(raw.index)) },
14851485 };
14861486 }
14871487};
......@@ -1492,10 +1492,10 @@ pub const ShuffleTwoMask = enum(u32) {
14921492 undef = std.math.maxInt(u32),
14931493 _,
14941494 pub fn aElem(idx: u32) ShuffleTwoMask {
1495 return @enumFromInt(idx << 1);
1495 return @fromBackingInt(@intCast(idx << 1));
14961496 }
14971497 pub fn bElem(idx: u32) ShuffleTwoMask {
1498 return @enumFromInt(idx << 1 | 1);
1498 return @fromBackingInt(@intCast(idx << 1 | 1));
14991499 }
15001500 pub const Unwrapped = union(enum) {
15011501 /// The resulting element is this index into the first runtime vector.
......@@ -1510,7 +1510,7 @@ pub const ShuffleTwoMask = enum(u32) {
15101510 .undef => return .undef,
15111511 _ => {},
15121512 }
1513 const x = @intFromEnum(raw);
1513 const x = @backingInt(raw);
15141514 return switch (@as(u1, @truncate(x))) {
15151515 0 => .{ .a_elem = x >> 1 },
15161516 1 => .{ .b_elem = x >> 1 },
......@@ -1556,11 +1556,11 @@ pub const Cmpxchg = struct {
15561556 flags: u32,
15571557
15581558 pub fn successOrder(self: Cmpxchg) std.lang.AtomicOrder {
1559 return @enumFromInt(@as(u3, @truncate(self.flags)));
1559 return @fromBackingInt(@intCast(@as(u3, @truncate(self.flags))));
15601560 }
15611561
15621562 pub fn failureOrder(self: Cmpxchg) std.lang.AtomicOrder {
1563 return @enumFromInt(@as(u3, @intCast(self.flags >> 3)));
1563 return @fromBackingInt(@intCast(@as(u3, @intCast(self.flags >> 3))));
15641564 }
15651565};
15661566
......@@ -1571,11 +1571,11 @@ pub const AtomicRmw = struct {
15711571 flags: u32,
15721572
15731573 pub fn ordering(self: AtomicRmw) std.lang.AtomicOrder {
1574 return @enumFromInt(@as(u3, @truncate(self.flags)));
1574 return @fromBackingInt(@intCast(@as(u3, @truncate(self.flags))));
15751575 }
15761576
15771577 pub fn op(self: AtomicRmw) std.lang.AtomicRmwOp {
1578 return @enumFromInt(@as(u4, @intCast(self.flags >> 3)));
1578 return @fromBackingInt(@intCast(@as(u4, @intCast(self.flags >> 3))));
15791579 }
15801580};
15811581
......@@ -1585,7 +1585,7 @@ pub const UnionInit = struct {
15851585};
15861586
15871587pub fn getMainBody(air: Air) []const Air.Inst.Index {
1588 const body_index = air.extra.items[@intFromEnum(ExtraIndex.main_block)];
1588 const body_index = air.extra.items[@backingInt(ExtraIndex.main_block)];
15891589 const extra = air.extraData(Block, body_index);
15901590 return @ptrCast(air.extra.items[extra.end..][0..extra.data.body_len]);
15911591}
......@@ -1600,7 +1600,7 @@ pub fn typeOf(air: *const Air, inst: Air.Inst.Ref, ip: *const InternPool) Type {
16001600
16011601pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool) Type {
16021602 const datas = air.instructions.items(.data);
1603 switch (air.instructions.items(.tag)[@intFromEnum(inst)]) {
1603 switch (air.instructions.items(.tag)[@backingInt(inst)]) {
16041604 .add,
16051605 .add_safe,
16061606 .add_wrap,
......@@ -1640,7 +1640,7 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool)
16401640 .div_exact_optimized,
16411641 .rem_optimized,
16421642 .mod_optimized,
1643 => return air.typeOf(datas[@intFromEnum(inst)].bin_op.lhs, ip),
1643 => return air.typeOf(datas[@backingInt(inst)].bin_op.lhs, ip),
16441644
16451645 .sqrt,
16461646 .sin,
......@@ -1657,7 +1657,7 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool)
16571657 .trunc_float,
16581658 .neg,
16591659 .neg_optimized,
1660 => return air.typeOf(datas[@intFromEnum(inst)].un_op, ip),
1660 => return air.typeOf(datas[@backingInt(inst)].un_op, ip),
16611661
16621662 .cmp_lt,
16631663 .cmp_lte,
......@@ -1688,9 +1688,9 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool)
16881688 .ret_ptr,
16891689 .err_return_trace,
16901690 .c_va_start,
1691 => return datas[@intFromEnum(inst)].ty,
1691 => return datas[@backingInt(inst)].ty,
16921692
1693 .arg => return datas[@intFromEnum(inst)].arg.ty.toType(),
1693 .arg => return datas[@backingInt(inst)].arg.ty.toType(),
16941694
16951695 .assembly,
16961696 .block,
......@@ -1717,7 +1717,7 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool)
17171717 .try_ptr_cold,
17181718 .shuffle_one,
17191719 .shuffle_two,
1720 => return datas[@intFromEnum(inst)].ty_pl.ty.toType(),
1720 => return datas[@backingInt(inst)].ty_pl.ty.toType(),
17211721
17221722 .not,
17231723 .bit_cast,
......@@ -1770,7 +1770,7 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool)
17701770 .c_va_arg,
17711771 .c_va_copy,
17721772 .abs,
1773 => return datas[@intFromEnum(inst)].ty_op.ty.toType(),
1773 => return datas[@backingInt(inst)].ty_op.ty.toType(),
17741774
17751775 .loop,
17761776 .repeat,
......@@ -1821,40 +1821,40 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool)
18211821 .tag_name, .error_name => return .slice_const_u8_sentinel_0,
18221822
18231823 .call, .call_always_tail, .call_never_tail, .call_never_inline => {
1824 const callee_ty = air.typeOf(datas[@intFromEnum(inst)].pl_op.operand, ip);
1824 const callee_ty = air.typeOf(datas[@backingInt(inst)].pl_op.operand, ip);
18251825 return .fromInterned(ip.funcTypeReturnType(callee_ty.toIntern()));
18261826 },
18271827
18281828 .slice_elem_val, .ptr_elem_val, .array_elem_val, .legalize_vec_elem_val => {
1829 const ptr_ty = air.typeOf(datas[@intFromEnum(inst)].bin_op.lhs, ip);
1829 const ptr_ty = air.typeOf(datas[@backingInt(inst)].bin_op.lhs, ip);
18301830 return ptr_ty.childTypeIp(ip);
18311831 },
18321832 .atomic_load => {
1833 const ptr_ty = air.typeOf(datas[@intFromEnum(inst)].atomic_load.ptr, ip);
1833 const ptr_ty = air.typeOf(datas[@backingInt(inst)].atomic_load.ptr, ip);
18341834 return ptr_ty.childTypeIp(ip);
18351835 },
18361836 .atomic_rmw => {
1837 const ptr_ty = air.typeOf(datas[@intFromEnum(inst)].pl_op.operand, ip);
1837 const ptr_ty = air.typeOf(datas[@backingInt(inst)].pl_op.operand, ip);
18381838 return ptr_ty.childTypeIp(ip);
18391839 },
18401840
18411841 .reduce, .reduce_optimized => {
1842 const operand_ty = air.typeOf(datas[@intFromEnum(inst)].reduce.operand, ip);
1842 const operand_ty = air.typeOf(datas[@backingInt(inst)].reduce.operand, ip);
18431843 return .fromInterned(ip.indexToKey(operand_ty.ip_index).vector_type.child);
18441844 },
18451845
1846 .mul_add => return air.typeOf(datas[@intFromEnum(inst)].pl_op.operand, ip),
1846 .mul_add => return air.typeOf(datas[@backingInt(inst)].pl_op.operand, ip),
18471847 .select => {
1848 const extra = air.extraData(Air.Bin, datas[@intFromEnum(inst)].pl_op.payload).data;
1848 const extra = air.extraData(Air.Bin, datas[@backingInt(inst)].pl_op.payload).data;
18491849 return air.typeOf(extra.lhs, ip);
18501850 },
18511851
18521852 .@"try", .try_cold => {
1853 const err_union_ty = air.typeOf(datas[@intFromEnum(inst)].pl_op.operand, ip);
1853 const err_union_ty = air.typeOf(datas[@backingInt(inst)].pl_op.operand, ip);
18541854 return .fromInterned(ip.indexToKey(err_union_ty.ip_index).error_union_type.payload_type);
18551855 },
18561856
1857 .runtime_nav_ptr => return .fromInterned(datas[@intFromEnum(inst)].ty_nav.ty),
1857 .runtime_nav_ptr => return .fromInterned(datas[@backingInt(inst)].ty_nav.ty),
18581858
18591859 .work_item_id,
18601860 .work_group_size,
......@@ -1862,7 +1862,7 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool)
18621862 .spirv_runtime_array_len,
18631863 => return .u32,
18641864
1865 .legalize_compiler_rt_call => return datas[@intFromEnum(inst)].legalize_compiler_rt_call.func.returnType(),
1865 .legalize_compiler_rt_call => return datas[@backingInt(inst)].legalize_compiler_rt_call.func.returnType(),
18661866
18671867 .inferred_alloc => unreachable,
18681868 .inferred_alloc_comptime => unreachable,
......@@ -1878,7 +1878,7 @@ pub fn extraData(air: Air, comptime T: type, index: usize) struct { data: T, end
18781878 inline for (info.field_names, info.field_types) |field_name, field_type| {
18791879 @field(result, field_name) = switch (field_type) {
18801880 u32 => air.extra.items[i],
1881 InternPool.Index, Inst.Ref => @enumFromInt(air.extra.items[i]),
1881 InternPool.Index, Inst.Ref => @fromBackingInt(@intCast(air.extra.items[i])),
18821882 i32, CondBr.BranchHints, Asm.Flags => @bitCast(air.extra.items[i]),
18831883 else => @compileError("bad field type: " ++ @typeName(field_type)),
18841884 };
......@@ -1906,7 +1906,7 @@ pub const NullTerminatedString = enum(u32) {
19061906
19071907 pub fn toSlice(nts: NullTerminatedString, air: Air) [:0]const u8 {
19081908 if (nts == .none) return "";
1909 const bytes = std.mem.sliceAsBytes(air.extra.items[@intFromEnum(nts)..]);
1909 const bytes = std.mem.sliceAsBytes(air.extra.items[@backingInt(nts)..]);
19101910 return bytes[0..std.mem.indexOfScalar(u8, bytes, 0).? :0];
19111911 }
19121912};
......@@ -1916,8 +1916,8 @@ pub const NullTerminatedString = enum(u32) {
19161916/// lowered, and Liveness determines its result is unused, backends should
19171917/// avoid lowering it.
19181918pub fn mustLower(air: Air, inst: Air.Inst.Index, ip: *const InternPool) bool {
1919 const data = air.instructions.items(.data)[@intFromEnum(inst)];
1920 return switch (air.instructions.items(.tag)[@intFromEnum(inst)]) {
1919 const data = air.instructions.items(.data)[@backingInt(inst)];
1920 return switch (air.instructions.items(.tag)[@backingInt(inst)]) {
19211921 .arg,
19221922 .assembly,
19231923 .block,
......@@ -2165,7 +2165,7 @@ pub const UnwrappedSwitch = struct {
21652165 fn getHintInner(us: UnwrappedSwitch, idx: u32) std.lang.BranchHint {
21662166 const bag = us.air.extra.items[us.branch_hints_start..][idx / 10];
21672167 const bits: u3 = @truncate(bag >> @intCast(3 * (idx % 10)));
2168 return @enumFromInt(bits);
2168 return @fromBackingInt(@intCast(bits));
21692169 }
21702170
21712171 pub fn iterateCases(us: UnwrappedSwitch) CaseIterator {
......@@ -2224,7 +2224,7 @@ pub const UnwrappedSwitch = struct {
22242224};
22252225
22262226pub fn unwrapSwitch(air: *const Air, switch_inst: Inst.Index) UnwrappedSwitch {
2227 const inst = air.instructions.get(@intFromEnum(switch_inst));
2227 const inst = air.instructions.get(@backingInt(switch_inst));
22282228 switch (inst.tag) {
22292229 .switch_br, .loop_switch_br => {},
22302230 else => unreachable, // assertion failure
......@@ -2249,8 +2249,8 @@ pub const UnwrappedDbgInlineBlock = struct {
22492249};
22502250
22512251pub fn unwrapDbgBlock(air: *const Air, inst_index: Inst.Index) UnwrappedDbgInlineBlock {
2252 const data = air.instructions.items(.data)[@intFromEnum(inst_index)];
2253 const tag = air.instructions.items(.tag)[@intFromEnum(inst_index)];
2252 const data = air.instructions.items(.data)[@backingInt(inst_index)];
2253 const tag = air.instructions.items(.tag)[@backingInt(inst_index)];
22542254 assert(tag == .dbg_inline_block);
22552255 const payload = data.ty_pl.payload;
22562256 const extra = air.extraData(Air.DbgInlineBlock, payload);
......@@ -2267,8 +2267,8 @@ pub const UnwrappedBlock = struct {
22672267};
22682268
22692269pub fn unwrapBlock(air: *const Air, inst_index: Inst.Index) UnwrappedBlock {
2270 const data = air.instructions.items(.data)[@intFromEnum(inst_index)];
2271 const tag = air.instructions.items(.tag)[@intFromEnum(inst_index)];
2270 const data = air.instructions.items(.data)[@backingInt(inst_index)];
2271 const tag = air.instructions.items(.tag)[@backingInt(inst_index)];
22722272 const payload = switch (tag) {
22732273 .block, .loop => data.ty_pl.payload,
22742274 else => unreachable,
......@@ -2286,8 +2286,8 @@ pub const UnwrappedCall = struct {
22862286};
22872287
22882288pub fn unwrapCall(air: *const Air, inst_index: Inst.Index) UnwrappedCall {
2289 const data = air.instructions.items(.data)[@intFromEnum(inst_index)];
2290 const tag = air.instructions.items(.tag)[@intFromEnum(inst_index)];
2289 const data = air.instructions.items(.data)[@backingInt(inst_index)];
2290 const tag = air.instructions.items(.tag)[@backingInt(inst_index)];
22912291 const payload = switch (tag) {
22922292 .call, .call_always_tail, .call_never_tail, .call_never_inline => data.pl_op.payload,
22932293 else => unreachable,
......@@ -2305,8 +2305,8 @@ pub const UnwrappedCompilerRtCall = struct {
23052305};
23062306
23072307pub fn unwrapCompilerRtCall(air: *const Air, inst_index: Inst.Index) UnwrappedCompilerRtCall {
2308 const data = air.instructions.items(.data)[@intFromEnum(inst_index)];
2309 const tag = air.instructions.items(.tag)[@intFromEnum(inst_index)];
2308 const data = air.instructions.items(.data)[@backingInt(inst_index)];
2309 const tag = air.instructions.items(.tag)[@backingInt(inst_index)];
23102310 assert(tag == .legalize_compiler_rt_call);
23112311 const payload = data.legalize_compiler_rt_call.payload;
23122312 const extra = air.extraData(Air.Call, payload);
......@@ -2324,8 +2324,8 @@ pub const UnwrappedCondBr = struct {
23242324};
23252325
23262326pub fn unwrapCondBr(air: *const Air, inst_index: Inst.Index) UnwrappedCondBr {
2327 const data = air.instructions.items(.data)[@intFromEnum(inst_index)];
2328 const tag = air.instructions.items(.tag)[@intFromEnum(inst_index)];
2327 const data = air.instructions.items(.data)[@backingInt(inst_index)];
2328 const tag = air.instructions.items(.tag)[@backingInt(inst_index)];
23292329 assert(tag == .cond_br);
23302330 const payload = data.pl_op.payload;
23312331 const extra = air.extraData(Air.CondBr, payload);
......@@ -2343,8 +2343,8 @@ pub const UnwrappedTry = struct {
23432343};
23442344
23452345pub fn unwrapTry(air: *const Air, inst_index: Inst.Index) UnwrappedTry {
2346 const data = air.instructions.items(.data)[@intFromEnum(inst_index)];
2347 const tag = air.instructions.items(.tag)[@intFromEnum(inst_index)];
2346 const data = air.instructions.items(.data)[@backingInt(inst_index)];
2347 const tag = air.instructions.items(.tag)[@backingInt(inst_index)];
23482348 assert(tag == .@"try" or tag == .try_cold);
23492349 const payload = data.pl_op.payload;
23502350 const extra = air.extraData(Air.Try, payload);
......@@ -2361,8 +2361,8 @@ pub const UnwrappedTryPtr = struct {
23612361};
23622362
23632363pub fn unwrapTryPtr(air: *const Air, inst_index: Inst.Index) UnwrappedTryPtr {
2364 const data = air.instructions.items(.data)[@intFromEnum(inst_index)];
2365 const tag = air.instructions.items(.tag)[@intFromEnum(inst_index)];
2364 const data = air.instructions.items(.data)[@backingInt(inst_index)];
2365 const tag = air.instructions.items(.tag)[@backingInt(inst_index)];
23662366 assert(tag == .try_ptr or tag == .try_ptr_cold);
23672367 const payload = data.ty_pl.payload;
23682368 const extra = air.extraData(Air.TryPtr, payload);
......@@ -2430,8 +2430,8 @@ pub const UnwrappedAsm = struct {
24302430};
24312431
24322432pub fn unwrapAsm(air: *const Air, inst_index: Inst.Index) UnwrappedAsm {
2433 const data = air.instructions.items(.data)[@intFromEnum(inst_index)];
2434 const tag = air.instructions.items(.tag)[@intFromEnum(inst_index)];
2433 const data = air.instructions.items(.data)[@backingInt(inst_index)];
2434 const tag = air.instructions.items(.tag)[@backingInt(inst_index)];
24352435 assert(tag == .assembly);
24362436 const payload = data.ty_pl.payload;
24372437 const extra = air.extraData(Air.Asm, payload);
......@@ -2465,7 +2465,7 @@ pub const UnwrappedShuffleOne = struct {
24652465};
24662466
24672467pub fn unwrapShuffleOne(air: *const Air, zcu: *const Zcu, inst_index: Inst.Index) UnwrappedShuffleOne {
2468 const inst = air.instructions.get(@intFromEnum(inst_index));
2468 const inst = air.instructions.get(@backingInt(inst_index));
24692469 switch (inst.tag) {
24702470 .shuffle_one => {},
24712471 else => unreachable, // assertion failure
......@@ -2475,7 +2475,7 @@ pub fn unwrapShuffleOne(air: *const Air, zcu: *const Zcu, inst_index: Inst.Index
24752475 const extra_idx = inst.data.ty_pl.payload;
24762476 return .{
24772477 .result_ty = result_ty,
2478 .operand = @enumFromInt(air.extra.items[extra_idx + mask_len]),
2478 .operand = @fromBackingInt(@intCast(air.extra.items[extra_idx + mask_len])),
24792479 .mask = @ptrCast(air.extra.items[extra_idx..][0..mask_len]),
24802480 };
24812481}
......@@ -2488,7 +2488,7 @@ pub const UnwrappedShuffleTwo = struct {
24882488};
24892489
24902490pub fn unwrapShuffleTwo(air: *const Air, zcu: *const Zcu, inst_index: Inst.Index) UnwrappedShuffleTwo {
2491 const inst = air.instructions.get(@intFromEnum(inst_index));
2491 const inst = air.instructions.get(@backingInt(inst_index));
24922492 switch (inst.tag) {
24932493 .shuffle_two => {},
24942494 else => unreachable, // assertion failure
......@@ -2498,8 +2498,8 @@ pub fn unwrapShuffleTwo(air: *const Air, zcu: *const Zcu, inst_index: Inst.Index
24982498 const extra_idx = inst.data.ty_pl.payload;
24992499 return .{
25002500 .result_ty = result_ty,
2501 .operand_a = @enumFromInt(air.extra.items[extra_idx + mask_len + 0]),
2502 .operand_b = @enumFromInt(air.extra.items[extra_idx + mask_len + 1]),
2501 .operand_a = @fromBackingInt(@intCast(air.extra.items[extra_idx + mask_len + 0])),
2502 .operand_b = @fromBackingInt(@intCast(air.extra.items[extra_idx + mask_len + 1])),
25032503 .mask = @ptrCast(air.extra.items[extra_idx..][0..mask_len]),
25042504 };
25052505}
src/Air/Legalize.zig+79-79
......@@ -328,7 +328,7 @@ pub fn legalize(air: *Air, pt: Zcu.PerThread, features: *const Features) Error!v
328328 .features = .init(features),
329329 };
330330 defer air.* = l.getTmpAir();
331 const main_extra = l.extraData(Air.Block, l.air_extra.items[@intFromEnum(Air.ExtraIndex.main_block)]);
331 const main_extra = l.extraData(Air.Block, l.air_extra.items[@backingInt(Air.ExtraIndex.main_block)]);
332332 try l.legalizeBody(main_extra.end, main_extra.data.body_len);
333333}
334334
......@@ -359,8 +359,8 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
359359 const zcu = l.pt.zcu;
360360 const ip = &zcu.intern_pool;
361361 for (0..body_len) |body_index| {
362 const inst: Air.Inst.Index = @enumFromInt(l.air_extra.items[body_start + body_index]);
363 inst: switch (l.air_instructions.items(.tag)[@intFromEnum(inst)]) {
362 const inst: Air.Inst.Index = @fromBackingInt(@intCast(l.air_extra.items[body_start + body_index]));
363 inst: switch (l.air_instructions.items(.tag)[@backingInt(inst)]) {
364364 .arg => {},
365365 inline .add,
366366 .add_optimized,
......@@ -377,7 +377,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
377377 .min,
378378 .max,
379379 => |air_tag| {
380 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
380 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
381381 const ty = l.typeOf(bin_op.lhs);
382382 switch (l.wantScalarizeOrSoftFloat(air_tag, ty)) {
383383 .none => {},
......@@ -395,7 +395,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
395395 .div_floor,
396396 .div_floor_optimized,
397397 => |air_tag| {
398 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
398 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
399399 switch (l.wantScalarizeOrSoftFloat(air_tag, l.typeOf(bin_op.lhs))) {
400400 .none => {},
401401 .scalarize => continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .bin_op)),
......@@ -408,7 +408,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
408408 }
409409 },
410410 inline .mod, .mod_optimized => |air_tag| {
411 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
411 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
412412 switch (l.wantScalarizeOrSoftFloat(air_tag, l.typeOf(bin_op.lhs))) {
413413 .none => {},
414414 .scalarize => continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .bin_op)),
......@@ -429,7 +429,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
429429 .bit_or,
430430 .xor,
431431 => |air_tag| if (l.features.has(comptime .scalarize(air_tag))) {
432 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
432 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
433433 if (l.typeOf(bin_op.lhs).isVector(zcu)) {
434434 continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .bin_op));
435435 }
......@@ -438,7 +438,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
438438 assert(!l.features.has(.scalarize_add_safe)); // it doesn't make sense to do both
439439 continue :inst l.replaceInst(inst, .block, try l.safeArithmeticBlockPayload(inst, .add_with_overflow));
440440 } else if (l.features.has(.scalarize_add_safe)) {
441 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
441 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
442442 if (l.typeOf(bin_op.lhs).isVector(zcu)) {
443443 continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .bin_op));
444444 }
......@@ -447,7 +447,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
447447 assert(!l.features.has(.scalarize_sub_safe)); // it doesn't make sense to do both
448448 continue :inst l.replaceInst(inst, .block, try l.safeArithmeticBlockPayload(inst, .sub_with_overflow));
449449 } else if (l.features.has(.scalarize_sub_safe)) {
450 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
450 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
451451 if (l.typeOf(bin_op.lhs).isVector(zcu)) {
452452 continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .bin_op));
453453 }
......@@ -456,7 +456,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
456456 assert(!l.features.has(.scalarize_mul_safe)); // it doesn't make sense to do both
457457 continue :inst l.replaceInst(inst, .block, try l.safeArithmeticBlockPayload(inst, .mul_with_overflow));
458458 } else if (l.features.has(.scalarize_mul_safe)) {
459 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
459 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
460460 if (l.typeOf(bin_op.lhs).isVector(zcu)) {
461461 continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .bin_op));
462462 }
......@@ -467,7 +467,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
467467 .mul_with_overflow,
468468 .shl_with_overflow,
469469 => |air_tag| if (l.features.has(comptime .scalarize(air_tag))) {
470 const ty_pl = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_pl;
470 const ty_pl = l.air_instructions.items(.data)[@backingInt(inst)].ty_pl;
471471 if (ty_pl.ty.toType().fieldType(0, zcu).isVector(zcu)) {
472472 continue :inst l.replaceInst(inst, .block, try l.scalarizeOverflowBlockPayload(inst));
473473 }
......@@ -484,7 +484,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
484484 .unsplat_shift_rhs,
485485 .scalarize(air_tag),
486486 })) {
487 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
487 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
488488 if (l.typeOf(bin_op.rhs).isVector(zcu)) {
489489 if (l.features.has(.unsplat_shift_rhs)) {
490490 if (bin_op.rhs.toInterned()) |rhs_ip_index| switch (ip.indexToKey(rhs_ip_index)) {
......@@ -498,11 +498,11 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
498498 },
499499 } else {
500500 const rhs_inst = bin_op.rhs.toIndex().?;
501 switch (l.air_instructions.items(.tag)[@intFromEnum(rhs_inst)]) {
501 switch (l.air_instructions.items(.tag)[@backingInt(rhs_inst)]) {
502502 else => {},
503503 .splat => continue :inst l.replaceInst(inst, air_tag, .{ .bin_op = .{
504504 .lhs = bin_op.lhs,
505 .rhs = l.air_instructions.items(.data)[@intFromEnum(rhs_inst)].ty_op.operand,
505 .rhs = l.air_instructions.items(.data)[@backingInt(rhs_inst)].ty_op.operand,
506506 } }),
507507 }
508508 }
......@@ -524,13 +524,13 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
524524 .int_from_ptr,
525525 .trunc,
526526 => |air_tag| if (l.features.has(comptime .scalarize(air_tag))) {
527 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
527 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
528528 if (ty_op.ty.toType().isVector(zcu)) {
529529 continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .ty_op));
530530 }
531531 },
532532 .abs => {
533 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
533 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
534534 switch (l.wantScalarizeOrSoftFloat(.abs, ty_op.ty.toType())) {
535535 .none => {},
536536 .scalarize => continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .ty_op)),
......@@ -543,7 +543,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
543543 }
544544 },
545545 .fptrunc => {
546 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
546 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
547547 const src_ty = l.typeOf(ty_op.operand);
548548 const dest_ty = ty_op.ty.toType();
549549 if (src_ty.zigTypeTag(zcu) == .vector) {
......@@ -558,7 +558,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
558558 }
559559 },
560560 .fpext => {
561 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
561 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
562562 const src_ty = l.typeOf(ty_op.operand);
563563 const dest_ty = ty_op.ty.toType();
564564 if (src_ty.zigTypeTag(zcu) == .vector) {
......@@ -573,7 +573,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
573573 }
574574 },
575575 inline .int_from_float, .int_from_float_optimized => |air_tag| {
576 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
576 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
577577 switch (l.wantScalarizeOrSoftFloat(air_tag, l.typeOf(ty_op.operand))) {
578578 .none => {},
579579 .scalarize => continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .ty_op)),
......@@ -584,7 +584,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
584584 }
585585 },
586586 .float_from_int => {
587 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
587 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
588588 const dest_ty = ty_op.ty.toType();
589589 switch (l.wantScalarizeOrSoftFloat(.float_from_int, dest_ty)) {
590590 .none => {},
......@@ -608,7 +608,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
608608 if (try l.safeBitcastBlockPayload(inst)) |payload| {
609609 continue :inst l.replaceInst(inst, .block, payload);
610610 }
611 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
611 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
612612 continue :inst l.replaceInst(inst, .bit_cast, .{ .ty_op = ty_op });
613613 } else if (l.features.hasAny(&.{
614614 .scalarize_bit_cast_array,
......@@ -624,10 +624,10 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
624624 if (try l.safeIntcastBlockPayload(inst)) |payload| {
625625 continue :inst l.replaceInst(inst, .block, payload);
626626 }
627 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
627 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
628628 continue :inst l.replaceInst(inst, .int_cast, .{ .ty_op = ty_op });
629629 } else if (l.features.has(.scalarize_int_cast_safe)) {
630 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
630 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
631631 if (ty_op.ty.toType().isVector(zcu)) {
632632 continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .ty_op));
633633 }
......@@ -643,7 +643,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
643643 assert(!l.features.has(.scalarize(air_tag))); // it doesn't make sense to do both
644644 continue :inst l.replaceInst(inst, .block, try l.divCeilBlockPayload(inst, air_tag));
645645 } else {
646 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
646 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
647647 switch (l.wantScalarizeOrSoftFloat(air_tag, l.typeOf(bin_op.lhs))) {
648648 .none => {},
649649 .scalarize => continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .bin_op)),
......@@ -669,7 +669,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
669669 assert(!l.features.has(.scalarize(air_tag)));
670670 continue :inst l.replaceInst(inst, .block, try l.safeIntFromFloatBlockPayload(inst, optimized));
671671 }
672 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
672 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
673673 switch (l.wantScalarizeOrSoftFloat(air_tag, l.typeOf(ty_op.operand))) {
674674 .none => {},
675675 .scalarize => continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .ty_op)),
......@@ -678,7 +678,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
678678 }
679679 },
680680 .block, .loop => {
681 const ty_pl = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_pl;
681 const ty_pl = l.air_instructions.items(.data)[@backingInt(inst)].ty_pl;
682682 const extra = l.extraData(Air.Block, ty_pl.payload);
683683 try l.legalizeBody(extra.end, extra.data.body_len);
684684 },
......@@ -707,7 +707,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
707707 .round,
708708 .trunc_float,
709709 => |air_tag| {
710 const operand = l.air_instructions.items(.data)[@intFromEnum(inst)].un_op;
710 const operand = l.air_instructions.items(.data)[@backingInt(inst)].un_op;
711711 const ty = l.typeOf(operand);
712712 switch (l.wantScalarizeOrSoftFloat(air_tag, ty)) {
713713 .none => {},
......@@ -721,7 +721,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
721721 }
722722 },
723723 inline .neg, .neg_optimized => |air_tag| {
724 const operand = l.air_instructions.items(.data)[@intFromEnum(inst)].un_op;
724 const operand = l.air_instructions.items(.data)[@backingInt(inst)].un_op;
725725 switch (l.wantScalarizeOrSoftFloat(air_tag, l.typeOf(operand))) {
726726 .none => {},
727727 .scalarize => continue :inst l.replaceInst(inst, .block, try l.scalarizeBlockPayload(inst, .un_op)),
......@@ -741,7 +741,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
741741 .cmp_neq,
742742 .cmp_neq_optimized,
743743 => |air_tag| {
744 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
744 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
745745 const ty = l.typeOf(bin_op.lhs);
746746 if (l.wantSoftFloatScalar(ty)) {
747747 continue :inst l.replaceInst(
......@@ -752,7 +752,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
752752 }
753753 },
754754 inline .cmp_vector, .cmp_vector_optimized => |air_tag| {
755 const ty_pl = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_pl;
755 const ty_pl = l.air_instructions.items(.data)[@backingInt(inst)].ty_pl;
756756 const payload = l.extraData(Air.VectorCmp, ty_pl.payload).data;
757757 switch (l.wantScalarizeOrSoftFloat(air_tag, l.typeOf(payload.lhs))) {
758758 .none => {},
......@@ -761,13 +761,13 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
761761 }
762762 },
763763 .cond_br => {
764 const pl_op = l.air_instructions.items(.data)[@intFromEnum(inst)].pl_op;
764 const pl_op = l.air_instructions.items(.data)[@backingInt(inst)].pl_op;
765765 const extra = l.extraData(Air.CondBr, pl_op.payload);
766766 try l.legalizeBody(extra.end, extra.data.then_body_len);
767767 try l.legalizeBody(extra.end + extra.data.then_body_len, extra.data.else_body_len);
768768 },
769769 .switch_br, .loop_switch_br => {
770 const pl_op = l.air_instructions.items(.data)[@intFromEnum(inst)].pl_op;
770 const pl_op = l.air_instructions.items(.data)[@backingInt(inst)].pl_op;
771771 const extra = l.extraData(Air.SwitchBr, pl_op.payload);
772772 const hint_bag_count = @divCeil(extra.data.cases_len + 1, 10);
773773 var extra_index = extra.end + hint_bag_count;
......@@ -781,18 +781,18 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
781781 },
782782 .switch_dispatch => {},
783783 .@"try", .try_cold => {
784 const pl_op = l.air_instructions.items(.data)[@intFromEnum(inst)].pl_op;
784 const pl_op = l.air_instructions.items(.data)[@backingInt(inst)].pl_op;
785785 const extra = l.extraData(Air.Try, pl_op.payload);
786786 try l.legalizeBody(extra.end, extra.data.body_len);
787787 },
788788 .try_ptr, .try_ptr_cold => {
789 const ty_pl = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_pl;
789 const ty_pl = l.air_instructions.items(.data)[@backingInt(inst)].ty_pl;
790790 const extra = l.extraData(Air.TryPtr, ty_pl.payload);
791791 try l.legalizeBody(extra.end, extra.data.body_len);
792792 },
793793 .dbg_stmt, .dbg_empty_stmt => {},
794794 .dbg_inline_block => {
795 const ty_pl = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_pl;
795 const ty_pl = l.air_instructions.items(.data)[@backingInt(inst)].ty_pl;
796796 const extra = l.extraData(Air.DbgInlineBlock, ty_pl.payload);
797797 try l.legalizeBody(extra.end, extra.data.body_len);
798798 },
......@@ -809,7 +809,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
809809 .is_non_err_ptr,
810810 => {},
811811 .load => if (l.features.has(.expand_packed_load)) {
812 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
812 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
813813 const ptr_info = l.typeOf(ty_op.operand).ptrInfo(zcu);
814814 if (ptr_info.packed_offset.host_size > 0 and ptr_info.flags.vector_index == .none) {
815815 continue :inst l.replaceInst(inst, .block, try l.packedLoadBlockPayload(inst));
......@@ -817,7 +817,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
817817 },
818818 .ret, .ret_safe, .ret_load => {},
819819 .store, .store_safe => if (l.features.has(.expand_packed_store)) {
820 const bin_op = l.air_instructions.items(.data)[@intFromEnum(inst)].bin_op;
820 const bin_op = l.air_instructions.items(.data)[@backingInt(inst)].bin_op;
821821 const ptr_info = l.typeOf(bin_op.lhs).ptrInfo(zcu);
822822 if (ptr_info.packed_offset.host_size > 0 and ptr_info.flags.vector_index == .none) {
823823 continue :inst l.replaceInst(inst, .block, try l.packedStoreBlockPayload(inst));
......@@ -842,7 +842,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
842842 .struct_field_ptr_index_3,
843843 => {},
844844 .agg_field_val => if (l.features.has(.expand_packed_agg_field_val)) {
845 const ty_pl = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_pl;
845 const ty_pl = l.air_instructions.items(.data)[@backingInt(inst)].ty_pl;
846846 const extra = l.extraData(Air.StructField, ty_pl.payload).data;
847847 switch (l.typeOf(extra.struct_operand).containerLayout(zcu)) {
848848 .auto, .@"extern" => {},
......@@ -864,7 +864,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
864864 .array_to_slice,
865865 => {},
866866 inline .reduce, .reduce_optimized => |air_tag| {
867 const reduce = l.air_instructions.items(.data)[@intFromEnum(inst)].reduce;
867 const reduce = l.air_instructions.items(.data)[@backingInt(inst)].reduce;
868868 const vector_ty = l.typeOf(reduce.operand);
869869 if (l.features.has(.reduce_one_elem_to_bit_cast)) {
870870 switch (vector_ty.vectorLen(zcu)) {
......@@ -887,7 +887,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
887887 }
888888 },
889889 .splat => if (l.features.has(.splat_one_elem_to_bit_cast)) {
890 const ty_op = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_op;
890 const ty_op = l.air_instructions.items(.data)[@backingInt(inst)].ty_op;
891891 switch (ty_op.ty.toType().vectorLen(zcu)) {
892892 0 => unreachable,
893893 1 => continue :inst l.replaceInst(inst, .bit_cast, .{ .ty_op = .{
......@@ -898,7 +898,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
898898 }
899899 },
900900 .shuffle_one => {
901 const ty_pl = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_pl;
901 const ty_pl = l.air_instructions.items(.data)[@backingInt(inst)].ty_pl;
902902 switch (l.wantScalarizeOrSoftFloat(.shuffle_one, ty_pl.ty.toType())) {
903903 .none => {},
904904 .scalarize => continue :inst l.replaceInst(inst, .block, try l.scalarizeShuffleOneBlockPayload(inst)),
......@@ -906,7 +906,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
906906 }
907907 },
908908 .shuffle_two => {
909 const ty_pl = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_pl;
909 const ty_pl = l.air_instructions.items(.data)[@backingInt(inst)].ty_pl;
910910 switch (l.wantScalarizeOrSoftFloat(.shuffle_two, ty_pl.ty.toType())) {
911911 .none => {},
912912 .scalarize => continue :inst l.replaceInst(inst, .block, try l.scalarizeShuffleTwoBlockPayload(inst)),
......@@ -914,7 +914,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
914914 }
915915 },
916916 .select => {
917 const pl_op = l.air_instructions.items(.data)[@intFromEnum(inst)].pl_op;
917 const pl_op = l.air_instructions.items(.data)[@backingInt(inst)].pl_op;
918918 const bin = l.extraData(Air.Bin, pl_op.payload).data;
919919 switch (l.wantScalarizeOrSoftFloat(.select, l.typeOf(bin.lhs))) {
920920 .none => {},
......@@ -940,7 +940,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
940940 .error_set_has_value,
941941 => {},
942942 .aggregate_init => if (l.features.has(.expand_packed_aggregate_init)) {
943 const ty_pl = l.air_instructions.items(.data)[@intFromEnum(inst)].ty_pl;
943 const ty_pl = l.air_instructions.items(.data)[@backingInt(inst)].ty_pl;
944944 const agg_ty = ty_pl.ty.toType();
945945 switch (agg_ty.zigTypeTag(zcu)) {
946946 else => {},
......@@ -958,7 +958,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
958958 // Just bitcast this field.
959959 continue :inst l.replaceInst(inst, .bit_cast, .{ .ty_op = .{
960960 .ty = .fromType(agg_ty),
961 .operand = @enumFromInt(l.air_extra.items[ty_pl.payload + field_index]),
961 .operand = @fromBackingInt(@intCast(l.air_extra.items[ty_pl.payload + field_index])),
962962 } });
963963 }
964964 }
......@@ -971,7 +971,7 @@ fn legalizeBody(l: *Legalize, body_start: usize, body_len: usize) Error!void {
971971 },
972972 .union_init, .prefetch => {},
973973 .mul_add => {
974 const pl_op = l.air_instructions.items(.data)[@intFromEnum(inst)].pl_op;
974 const pl_op = l.air_instructions.items(.data)[@backingInt(inst)].pl_op;
975975 const ty = l.typeOf(pl_op.operand);
976976 switch (l.wantScalarizeOrSoftFloat(.mul_add, ty)) {
977977 .none => {},
......@@ -1017,7 +1017,7 @@ fn scalarizeBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, form: Scalariz
10171017 const pt = l.pt;
10181018 const zcu = pt.zcu;
10191019
1020 const orig = l.air_instructions.get(@intFromEnum(orig_inst));
1020 const orig = l.air_instructions.get(@backingInt(orig_inst));
10211021 const res_ty = l.typeOfIndex(orig_inst);
10221022 const result_is_array = switch (res_ty.zigTypeTag(zcu)) {
10231023 .vector => false,
......@@ -1167,7 +1167,7 @@ fn scalarizeBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, form: Scalariz
11671167 try condbr.finish(l);
11681168
11691169 const inst_data = l.air_instructions.items(.data);
1170 inst_data[@intFromEnum(elem_block_inst)].ty_pl.payload = try l.addBlockBody(elem_block.body());
1170 inst_data[@backingInt(elem_block_inst)].ty_pl.payload = try l.addBlockBody(elem_block.body());
11711171
11721172 break :elem elem_block_inst.toRef();
11731173 },
......@@ -1519,13 +1519,13 @@ fn addScalarizedShuffle(
15191519 try loop.finish(l);
15201520
15211521 const inst_data = l.air_instructions.items(.data);
1522 inst_data[@intFromEnum(main_block_inst)].ty_pl.payload = try l.addBlockBody(main_block.body());
1522 inst_data[@backingInt(main_block_inst)].ty_pl.payload = try l.addBlockBody(main_block.body());
15231523}
15241524fn scalarizeBitcastBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!?Air.Inst.Data {
15251525 const pt = l.pt;
15261526 const zcu = pt.zcu;
15271527
1528 const ty_op = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].ty_op;
1528 const ty_op = l.air_instructions.items(.data)[@backingInt(orig_inst)].ty_op;
15291529
15301530 const dest_ty = ty_op.ty.toType();
15311531 const operand_ty = l.typeOf(ty_op.operand);
......@@ -1723,7 +1723,7 @@ fn scalarizeBitcastBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!?
17231723 try loop.finish(l);
17241724
17251725 const inst_data = l.air_instructions.items(.data);
1726 inst_data[@intFromEnum(uint_block_inst)].ty_pl.payload = try l.addBlockBody(uint_block.body());
1726 inst_data[@backingInt(uint_block_inst)].ty_pl.payload = try l.addBlockBody(uint_block.body());
17271727
17281728 break :uint_val uint_block_inst.toRef();
17291729 };
......@@ -1736,7 +1736,7 @@ fn scalarizeBitcastBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!?
17361736
17371737 if (int_to_dest_ok) {
17381738 _ = main_block.stealCapacity(17);
1739 const result = switch (l.air_instructions.items(.tag)[@intFromEnum(orig_inst)]) {
1739 const result = switch (l.air_instructions.items(.tag)[@backingInt(orig_inst)]) {
17401740 .bit_cast => main_block.addBitCast(l, dest_ty, uint_val),
17411741 .bit_cast_safe => main_block.add(l, .{
17421742 .tag = .bit_cast_safe,
......@@ -1752,7 +1752,7 @@ fn scalarizeBitcastBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!?
17521752 _ = main_block.stealCapacity(16);
17531753 const elem = main_block.addBitCast(l, dest_ty.childType(zcu), uint_val);
17541754 const aggregate_init_payload_start = l.air_extra.items.len;
1755 try l.air_extra.append(zcu.gpa, @intFromEnum(elem));
1755 try l.air_extra.append(zcu.gpa, @backingInt(elem));
17561756 const result = main_block.add(l, .{
17571757 .tag = .aggregate_init,
17581758 .data = .{ .ty_pl = .{
......@@ -1863,7 +1863,7 @@ fn scalarizeOverflowBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!
18631863 const pt = l.pt;
18641864 const zcu = pt.zcu;
18651865
1866 const orig = l.air_instructions.get(@intFromEnum(orig_inst));
1866 const orig = l.air_instructions.get(@backingInt(orig_inst));
18671867 const orig_operands = l.extraData(Air.Bin, orig.data.ty_pl.payload).data;
18681868
18691869 const vec_tuple_ty = l.typeOfIndex(orig_inst);
......@@ -2009,7 +2009,7 @@ fn scalarizeReduceBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, optimize
20092009 const pt = l.pt;
20102010 const zcu = pt.zcu;
20112011
2012 const reduce = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].reduce;
2012 const reduce = l.air_instructions.items(.data)[@backingInt(orig_inst)].reduce;
20132013
20142014 const vector_ty = l.typeOf(reduce.operand);
20152015 const scalar_ty = vector_ty.childType(zcu);
......@@ -2136,7 +2136,7 @@ fn scalarizeReduceBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, optimize
21362136fn safeBitcastBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!?Air.Inst.Data {
21372137 const pt = l.pt;
21382138 const zcu = pt.zcu;
2139 const ty_op = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].ty_op;
2139 const ty_op = l.air_instructions.items(.data)[@backingInt(orig_inst)].ty_op;
21402140
21412141 const operand_ref = ty_op.operand;
21422142 const dest_ty = ty_op.ty.toType();
......@@ -2191,7 +2191,7 @@ fn safeBitcastBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!?Air.I
21912191fn safeIntcastBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!?Air.Inst.Data {
21922192 const pt = l.pt;
21932193 const zcu = pt.zcu;
2194 const ty_op = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].ty_op;
2194 const ty_op = l.air_instructions.items(.data)[@backingInt(orig_inst)].ty_op;
21952195
21962196 const operand_ref = ty_op.operand;
21972197 const operand_ty = l.typeOf(operand_ref);
......@@ -2362,7 +2362,7 @@ fn safeIntFromFloatBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, optimiz
23622362 const pt = l.pt;
23632363 const zcu = pt.zcu;
23642364 const gpa = zcu.gpa;
2365 const ty_op = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].ty_op;
2365 const ty_op = l.air_instructions.items(.data)[@backingInt(orig_inst)].ty_op;
23662366
23672367 const operand_ref = ty_op.operand;
23682368 const operand_ty = l.typeOf(operand_ref);
......@@ -2470,7 +2470,7 @@ fn safeIntFromFloatBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, optimiz
24702470fn safeArithmeticBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index, overflow_op_tag: Air.Inst.Tag) Error!Air.Inst.Data {
24712471 const pt = l.pt;
24722472 const zcu = pt.zcu;
2473 const bin_op = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].bin_op;
2473 const bin_op = l.air_instructions.items(.data)[@backingInt(orig_inst)].bin_op;
24742474
24752475 const operand_ty = l.typeOf(bin_op.lhs);
24762476 assert(l.typeOf(bin_op.rhs).toIntern() == operand_ty.toIntern());
......@@ -2567,7 +2567,7 @@ fn divCeilBlockPayload(
25672567 const zcu = pt.zcu;
25682568 const gpa = zcu.gpa;
25692569
2570 const bin_op = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].bin_op;
2570 const bin_op = l.air_instructions.items(.data)[@backingInt(orig_inst)].bin_op;
25712571 const operand_ty = l.typeOf(bin_op.lhs);
25722572 assert(l.typeOf(bin_op.rhs).toIntern() == operand_ty.toIntern());
25732573
......@@ -2715,7 +2715,7 @@ fn packedLoadBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!Air.Ins
27152715 const pt = l.pt;
27162716 const zcu = pt.zcu;
27172717
2718 const orig_ty_op = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].ty_op;
2718 const orig_ty_op = l.air_instructions.items(.data)[@backingInt(orig_inst)].ty_op;
27192719 const res_ty = orig_ty_op.ty.toType();
27202720 const res_int_ty = try pt.intType(.unsigned, @intCast(res_ty.bitSize(zcu)));
27212721 const ptr_ty = l.typeOf(orig_ty_op.operand);
......@@ -2771,7 +2771,7 @@ fn packedStoreBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Error!Air.In
27712771 const pt = l.pt;
27722772 const zcu = pt.zcu;
27732773
2774 const orig_bin_op = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].bin_op;
2774 const orig_bin_op = l.air_instructions.items(.data)[@backingInt(orig_inst)].bin_op;
27752775 const ptr_ty = l.typeOf(orig_bin_op.lhs);
27762776 const ptr_info = ptr_ty.ptrInfo(zcu);
27772777 const operand_ty = l.typeOf(orig_bin_op.rhs);
......@@ -2869,7 +2869,7 @@ fn packedStructFieldValBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Err
28692869 const pt = l.pt;
28702870 const zcu = pt.zcu;
28712871
2872 const orig_ty_pl = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].ty_pl;
2872 const orig_ty_pl = l.air_instructions.items(.data)[@backingInt(orig_inst)].ty_pl;
28732873 const orig_extra = l.extraData(Air.StructField, orig_ty_pl.payload).data;
28742874 const field_ty = orig_ty_pl.ty.toType();
28752875 const agg_ty = l.typeOf(orig_extra.struct_operand);
......@@ -2903,7 +2903,7 @@ fn packedAggregateInitBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Erro
29032903 const zcu = pt.zcu;
29042904 const gpa = zcu.gpa;
29052905
2906 const orig_ty_pl = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].ty_pl;
2906 const orig_ty_pl = l.air_instructions.items(.data)[@backingInt(orig_inst)].ty_pl;
29072907 const agg_ty = orig_ty_pl.ty.toType();
29082908 const agg_field_count = agg_ty.structFieldCount(zcu);
29092909
......@@ -2930,7 +2930,7 @@ fn packedAggregateInitBlockPayload(l: *Legalize, orig_inst: Air.Inst.Index) Erro
29302930 assert(field_bits < num_bits);
29312931 const field_uint_ty = try pt.intType(.unsigned, field_bits);
29322932 const field_bit_size_ref: Air.Inst.Ref = .fromValue(try pt.intValue(shift_ty, field_bits));
2933 const field_val: Air.Inst.Ref = @enumFromInt(l.air_extra.items[orig_ty_pl.payload + field_idx]);
2933 const field_val: Air.Inst.Ref = @fromBackingInt(@intCast(l.air_extra.items[orig_ty_pl.payload + field_idx]));
29342934
29352935 const shifted = main_block.addBinOp(l, .shl_exact, cur_uint, field_bit_size_ref).toRef();
29362936 const field_as_uint = main_block.addBitCast(l, field_uint_ty, field_val);
......@@ -3298,7 +3298,7 @@ const Loop = struct {
32983298 }
32993299
33003300 fn finish(loop: Loop, l: *Legalize) Error!void {
3301 const data = &l.air_instructions.items(.data)[@intFromEnum(loop.inst)];
3301 const data = &l.air_instructions.items(.data)[@backingInt(loop.inst)];
33023302 data.ty_pl.payload = try l.addBlockBody(loop.block.body());
33033303 }
33043304};
......@@ -3331,7 +3331,7 @@ const CondBr = struct {
33313331 const else_body = cond_br.else_block.body();
33323332 try l.air_extra.ensureUnusedCapacity(l.pt.zcu.gpa, 3 + then_body.len + else_body.len);
33333333
3334 const data = &l.air_instructions.items(.data)[@intFromEnum(cond_br.inst)];
3334 const data = &l.air_instructions.items(.data)[@backingInt(cond_br.inst)];
33353335 data.pl_op.payload = @intCast(l.air_extra.items.len);
33363336 l.air_extra.appendSliceAssumeCapacity(&.{
33373337 @intCast(then_body.len),
......@@ -3345,7 +3345,7 @@ const CondBr = struct {
33453345
33463346fn addInstAssumeCapacity(l: *Legalize, inst: Air.Inst) Air.Inst.Index {
33473347 defer l.air_instructions.appendAssumeCapacity(inst);
3348 return @enumFromInt(l.air_instructions.len);
3348 return @fromBackingInt(@intCast(l.air_instructions.len));
33493349}
33503350
33513351fn addExtra(l: *Legalize, comptime Extra: type, extra: Extra) Error!u32 {
......@@ -3353,7 +3353,7 @@ fn addExtra(l: *Legalize, comptime Extra: type, extra: Extra) Error!u32 {
33533353 try l.air_extra.ensureUnusedCapacity(l.pt.zcu.gpa, extra_info.field_names.len);
33543354 defer inline for (extra_info.field_names, extra_info.field_types) |field_name, field_type| l.air_extra.appendAssumeCapacity(switch (field_type) {
33553355 u32 => @field(extra, field_name),
3356 Air.Inst.Ref => @intFromEnum(@field(extra, field_name)),
3356 Air.Inst.Ref => @backingInt(@field(extra, field_name)),
33573357 else => @compileError(@typeName(field_type)),
33583358 });
33593359 return @intCast(l.air_extra.items.len);
......@@ -3372,7 +3372,7 @@ fn addBlockBody(l: *Legalize, body: []const Air.Inst.Index) Error!u32 {
33723372/// `inline` to propagate the comptime-known `tag` result.
33733373inline fn replaceInst(l: *Legalize, inst: Air.Inst.Index, comptime tag: Air.Inst.Tag, data: Air.Inst.Data) Air.Inst.Tag {
33743374 const orig_ty = if (std.debug.runtime_safety) l.typeOfIndex(inst) else {};
3375 l.air_instructions.set(@intFromEnum(inst), .{ .tag = tag, .data = data });
3375 l.air_instructions.set(@backingInt(inst), .{ .tag = tag, .data = data });
33763376 if (std.debug.runtime_safety) assert(l.typeOfIndex(inst).toIntern() == orig_ty.toIntern());
33773377 return tag;
33783378}
......@@ -3436,7 +3436,7 @@ fn softFptruncFunc(l: *const Legalize, src_ty: Type, dst_ty: Type) Air.CompilerR
34363436 80 => 3,
34373437 else => unreachable,
34383438 };
3439 return @enumFromInt(@intFromEnum(to_f16_func) + offset);
3439 return @fromBackingInt(@intCast(@backingInt(to_f16_func) + offset));
34403440}
34413441fn softFpextFunc(l: *const Legalize, src_ty: Type, dst_ty: Type) Air.CompilerRtFunc {
34423442 const target = l.pt.zcu.getTarget();
......@@ -3457,7 +3457,7 @@ fn softFpextFunc(l: *const Legalize, src_ty: Type, dst_ty: Type) Air.CompilerRtF
34573457 32 => 3,
34583458 else => unreachable,
34593459 };
3460 return @enumFromInt(@intFromEnum(to_f128_func) + offset);
3460 return @fromBackingInt(@intCast(@backingInt(to_f128_func) + offset));
34613461}
34623462fn softFloatFromInt(l: *Legalize, orig_inst: Air.Inst.Index) Error!union(enum) {
34633463 call: Air.CompilerRtFunc,
......@@ -3467,7 +3467,7 @@ fn softFloatFromInt(l: *Legalize, orig_inst: Air.Inst.Index) Error!union(enum) {
34673467 const zcu = pt.zcu;
34683468 const target = zcu.getTarget();
34693469
3470 const ty_op = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].ty_op;
3470 const ty_op = l.air_instructions.items(.data)[@backingInt(orig_inst)].ty_op;
34713471 const dest_ty = ty_op.ty.toType();
34723472 const src_ty = l.typeOf(ty_op.operand);
34733473
......@@ -3497,7 +3497,7 @@ fn softFloatFromInt(l: *Legalize, orig_inst: Air.Inst.Index) Error!union(enum) {
34973497 break :fixed;
34983498 }
34993499
3500 const func: Air.CompilerRtFunc = @enumFromInt(@intFromEnum(base) + int_bits_off + float_off);
3500 const func: Air.CompilerRtFunc = @fromBackingInt(@intCast(@backingInt(base) + int_bits_off + float_off));
35013501 if (extended_int_bits == src_info.bits) return .{ .call = func };
35023502
35033503 // We need to emit a block which first sign/zero-extends to the right type and *then* calls
......@@ -3522,7 +3522,7 @@ fn softFloatFromInt(l: *Legalize, orig_inst: Air.Inst.Index) Error!union(enum) {
35223522 // We need to emit a block which puts the integer into an `alloc` (possibly sign/zero-extended)
35233523 // and calls an arbitrary-width conversion routine.
35243524
3525 const func: Air.CompilerRtFunc = @enumFromInt(@intFromEnum(base) + 15 + float_off);
3525 const func: Air.CompilerRtFunc = @fromBackingInt(@intCast(@backingInt(base) + 15 + float_off));
35263526
35273527 // The extended integer routines expect the integer representation where the integer is
35283528 // effectively zero- or sign-extended to its ABI size. We represent that by intcasting to
......@@ -3560,7 +3560,7 @@ fn softIntFromFloat(l: *Legalize, orig_inst: Air.Inst.Index) Error!union(enum) {
35603560 const zcu = pt.zcu;
35613561 const target = zcu.getTarget();
35623562
3563 const ty_op = l.air_instructions.items(.data)[@intFromEnum(orig_inst)].ty_op;
3563 const ty_op = l.air_instructions.items(.data)[@backingInt(orig_inst)].ty_op;
35643564 const src_ty = l.typeOf(ty_op.operand);
35653565 const dest_ty = ty_op.ty.toType();
35663566
......@@ -3590,7 +3590,7 @@ fn softIntFromFloat(l: *Legalize, orig_inst: Air.Inst.Index) Error!union(enum) {
35903590 break :fixed;
35913591 }
35923592
3593 const func: Air.CompilerRtFunc = @enumFromInt(@intFromEnum(base) + int_bits_off + float_off);
3593 const func: Air.CompilerRtFunc = @fromBackingInt(@intCast(@backingInt(base) + int_bits_off + float_off));
35943594 if (extended_int_bits == dest_info.bits) return .{ .call = func };
35953595
35963596 // We need to emit a block which calls the routine and then casts to the required type.
......@@ -3611,7 +3611,7 @@ fn softIntFromFloat(l: *Legalize, orig_inst: Air.Inst.Index) Error!union(enum) {
36113611
36123612 // We need to emit a block which calls an arbitrary-width conversion routine, then loads the
36133613 // integer from an `alloc` and possibly truncates it.
3614 const func: Air.CompilerRtFunc = @enumFromInt(@intFromEnum(base) + 15 + float_off);
3614 const func: Air.CompilerRtFunc = @fromBackingInt(@intCast(@backingInt(base) + 15 + float_off));
36153615
36163616 const extended_ty = try pt.intType(dest_info.signedness, @intCast(dest_ty.abiSize(zcu) * 8));
36173617 assert(extended_ty.abiSize(zcu) == dest_ty.abiSize(zcu));
......@@ -3678,7 +3678,7 @@ fn softFloatFunc(op: Air.Inst.Tag, float_ty: Type, zcu: *const Zcu) Air.Compiler
36783678 128 => 4,
36793679 else => unreachable,
36803680 };
3681 return @enumFromInt(@intFromEnum(f16_func) + offset);
3681 return @fromBackingInt(@intCast(@backingInt(f16_func) + offset));
36823682}
36833683
36843684fn softFloatNegBlockPayload(
src/Air/Liveness.zig+36-36
......@@ -188,23 +188,23 @@ pub fn analyze(zcu: *Zcu, air: Air, intern_pool: *InternPool) Allocator.Error!Li
188188}
189189
190190pub fn getTombBits(l: Liveness, inst: Air.Inst.Index) Bpi {
191 const usize_index = (@intFromEnum(inst) * bpi) / @bitSizeOf(usize);
191 const usize_index = (@backingInt(inst) * bpi) / @bitSizeOf(usize);
192192 return @as(Bpi, @truncate(l.tomb_bits[usize_index] >>
193 @as(Log2Int(usize), @intCast((@intFromEnum(inst) % (@bitSizeOf(usize) / bpi)) * bpi))));
193 @as(Log2Int(usize), @intCast((@backingInt(inst) % (@bitSizeOf(usize) / bpi)) * bpi))));
194194}
195195
196196pub fn isUnused(l: Liveness, inst: Air.Inst.Index) bool {
197 const usize_index = (@intFromEnum(inst) * bpi) / @bitSizeOf(usize);
197 const usize_index = (@backingInt(inst) * bpi) / @bitSizeOf(usize);
198198 const mask = @as(usize, 1) <<
199 @as(Log2Int(usize), @intCast((@intFromEnum(inst) % (@bitSizeOf(usize) / bpi)) * bpi + (bpi - 1)));
199 @as(Log2Int(usize), @intCast((@backingInt(inst) % (@bitSizeOf(usize) / bpi)) * bpi + (bpi - 1)));
200200 return (l.tomb_bits[usize_index] & mask) != 0;
201201}
202202
203203pub fn operandDies(l: Liveness, inst: Air.Inst.Index, operand: OperandInt) bool {
204204 assert(operand < bpi - 1);
205 const usize_index = (@intFromEnum(inst) * bpi) / @bitSizeOf(usize);
205 const usize_index = (@backingInt(inst) * bpi) / @bitSizeOf(usize);
206206 const mask = @as(usize, 1) <<
207 @as(Log2Int(usize), @intCast((@intFromEnum(inst) % (@bitSizeOf(usize) / bpi)) * bpi + operand));
207 @as(Log2Int(usize), @intCast((@backingInt(inst) % (@bitSizeOf(usize) / bpi)) * bpi + operand));
208208 return (l.tomb_bits[usize_index] & mask) != 0;
209209}
210210
......@@ -393,7 +393,7 @@ fn analyzeInst(
393393 const inst_tags = a.air.instructions.items(.tag);
394394 const inst_datas = a.air.instructions.items(.data);
395395
396 switch (inst_tags[@intFromEnum(inst)]) {
396 switch (inst_tags[@backingInt(inst)]) {
397397 .add,
398398 .add_safe,
399399 .add_optimized,
......@@ -461,7 +461,7 @@ fn analyzeInst(
461461 .memmove,
462462 .legalize_vec_elem_val,
463463 => {
464 const o = inst_datas[@intFromEnum(inst)].bin_op;
464 const o = inst_datas[@backingInt(inst)].bin_op;
465465 return analyzeOperands(a, pass, data, inst, .{ o.lhs, o.rhs, .none });
466466 },
467467
......@@ -543,7 +543,7 @@ fn analyzeInst(
543543 .c_va_copy,
544544 .abs,
545545 => {
546 const o = inst_datas[@intFromEnum(inst)].ty_op;
546 const o = inst_datas[@backingInt(inst)].ty_op;
547547 return analyzeOperands(a, pass, data, inst, .{ o.operand, .none, .none });
548548 },
549549
......@@ -577,7 +577,7 @@ fn analyzeInst(
577577 .set_err_return_trace,
578578 .c_va_end,
579579 => {
580 const operand = inst_datas[@intFromEnum(inst)].un_op;
580 const operand = inst_datas[@backingInt(inst)].un_op;
581581 return analyzeOperands(a, pass, data, inst, .{ operand, .none, .none });
582582 },
583583
......@@ -585,7 +585,7 @@ fn analyzeInst(
585585 .ret_safe,
586586 .ret_load,
587587 => {
588 const operand = inst_datas[@intFromEnum(inst)].un_op;
588 const operand = inst_datas[@backingInt(inst)].un_op;
589589 return analyzeFuncEnd(a, pass, data, inst, .{ operand, .none, .none });
590590 },
591591
......@@ -599,7 +599,7 @@ fn analyzeInst(
599599 .slice_elem_ptr,
600600 .slice,
601601 => {
602 const ty_pl = inst_datas[@intFromEnum(inst)].ty_pl;
602 const ty_pl = inst_datas[@backingInt(inst)].ty_pl;
603603 const extra = a.air.extraData(Air.Bin, ty_pl.payload).data;
604604 return analyzeOperands(a, pass, data, inst, .{ extra.lhs, extra.rhs, .none });
605605 },
......@@ -608,12 +608,12 @@ fn analyzeInst(
608608 .dbg_var_val,
609609 .dbg_arg_inline,
610610 => {
611 const operand = inst_datas[@intFromEnum(inst)].pl_op.operand;
611 const operand = inst_datas[@backingInt(inst)].pl_op.operand;
612612 return analyzeOperands(a, pass, data, inst, .{ operand, .none, .none });
613613 },
614614
615615 .prefetch => {
616 const prefetch = inst_datas[@intFromEnum(inst)].prefetch;
616 const prefetch = inst_datas[@backingInt(inst)].prefetch;
617617 return analyzeOperands(a, pass, data, inst, .{ prefetch.ptr, .none, .none });
618618 },
619619
......@@ -638,7 +638,7 @@ fn analyzeInst(
638638 return big.finish();
639639 },
640640 .select => {
641 const pl_op = inst_datas[@intFromEnum(inst)].pl_op;
641 const pl_op = inst_datas[@backingInt(inst)].pl_op;
642642 const extra = a.air.extraData(Air.Bin, pl_op.payload).data;
643643 return analyzeOperands(a, pass, data, inst, .{ pl_op.operand, extra.lhs, extra.rhs });
644644 },
......@@ -651,15 +651,15 @@ fn analyzeInst(
651651 return analyzeOperands(a, pass, data, inst, .{ unwrapped.operand_a, unwrapped.operand_b, .none });
652652 },
653653 .reduce, .reduce_optimized => {
654 const reduce = inst_datas[@intFromEnum(inst)].reduce;
654 const reduce = inst_datas[@backingInt(inst)].reduce;
655655 return analyzeOperands(a, pass, data, inst, .{ reduce.operand, .none, .none });
656656 },
657657 .cmp_vector, .cmp_vector_optimized => {
658 const extra = a.air.extraData(Air.VectorCmp, inst_datas[@intFromEnum(inst)].ty_pl.payload).data;
658 const extra = a.air.extraData(Air.VectorCmp, inst_datas[@backingInt(inst)].ty_pl.payload).data;
659659 return analyzeOperands(a, pass, data, inst, .{ extra.lhs, extra.rhs, .none });
660660 },
661661 .aggregate_init => {
662 const ty_pl = inst_datas[@intFromEnum(inst)].ty_pl;
662 const ty_pl = inst_datas[@backingInt(inst)].ty_pl;
663663 const aggregate_ty = ty_pl.ty.toType();
664664 const len = @as(usize, @intCast(aggregate_ty.arrayLenIp(ip)));
665665 const elements = @as([]const Air.Inst.Ref, @ptrCast(a.air.extra.items[ty_pl.payload..][0..len]));
......@@ -680,32 +680,32 @@ fn analyzeInst(
680680 return big.finish();
681681 },
682682 .union_init => {
683 const extra = a.air.extraData(Air.UnionInit, inst_datas[@intFromEnum(inst)].ty_pl.payload).data;
683 const extra = a.air.extraData(Air.UnionInit, inst_datas[@backingInt(inst)].ty_pl.payload).data;
684684 return analyzeOperands(a, pass, data, inst, .{ extra.init, .none, .none });
685685 },
686686 .struct_field_ptr, .agg_field_val, .spirv_runtime_array_len => {
687 const extra = a.air.extraData(Air.StructField, inst_datas[@intFromEnum(inst)].ty_pl.payload).data;
687 const extra = a.air.extraData(Air.StructField, inst_datas[@backingInt(inst)].ty_pl.payload).data;
688688 return analyzeOperands(a, pass, data, inst, .{ extra.struct_operand, .none, .none });
689689 },
690690 .field_parent_ptr => {
691 const extra = a.air.extraData(Air.FieldParentPtr, inst_datas[@intFromEnum(inst)].ty_pl.payload).data;
691 const extra = a.air.extraData(Air.FieldParentPtr, inst_datas[@backingInt(inst)].ty_pl.payload).data;
692692 return analyzeOperands(a, pass, data, inst, .{ extra.field_ptr, .none, .none });
693693 },
694694 .cmpxchg_strong, .cmpxchg_weak => {
695 const extra = a.air.extraData(Air.Cmpxchg, inst_datas[@intFromEnum(inst)].ty_pl.payload).data;
695 const extra = a.air.extraData(Air.Cmpxchg, inst_datas[@backingInt(inst)].ty_pl.payload).data;
696696 return analyzeOperands(a, pass, data, inst, .{ extra.ptr, extra.expected_value, extra.new_value });
697697 },
698698 .mul_add => {
699 const pl_op = inst_datas[@intFromEnum(inst)].pl_op;
699 const pl_op = inst_datas[@backingInt(inst)].pl_op;
700700 const extra = a.air.extraData(Air.Bin, pl_op.payload).data;
701701 return analyzeOperands(a, pass, data, inst, .{ extra.lhs, extra.rhs, pl_op.operand });
702702 },
703703 .atomic_load => {
704 const ptr = inst_datas[@intFromEnum(inst)].atomic_load.ptr;
704 const ptr = inst_datas[@backingInt(inst)].atomic_load.ptr;
705705 return analyzeOperands(a, pass, data, inst, .{ ptr, .none, .none });
706706 },
707707 .atomic_rmw => {
708 const pl_op = inst_datas[@intFromEnum(inst)].pl_op;
708 const pl_op = inst_datas[@backingInt(inst)].pl_op;
709709 const extra = a.air.extraData(Air.AtomicRmw, pl_op.payload).data;
710710 return analyzeOperands(a, pass, data, inst, .{ pl_op.operand, extra.operand, .none });
711711 },
......@@ -769,12 +769,12 @@ fn analyzeInst(
769769 .loop_switch_br => return analyzeInstSwitchBr(a, pass, data, inst, true),
770770
771771 .wasm_memory_grow => {
772 const pl_op = inst_datas[@intFromEnum(inst)].pl_op;
772 const pl_op = inst_datas[@backingInt(inst)].pl_op;
773773 return analyzeOperands(a, pass, data, inst, .{ pl_op.operand, .none, .none });
774774 },
775775
776776 .legalize_vec_store_elem => {
777 const pl_op = inst_datas[@intFromEnum(inst)].pl_op;
777 const pl_op = inst_datas[@backingInt(inst)].pl_op;
778778 const bin = a.air.extraData(Air.Bin, pl_op.payload).data;
779779 return analyzeOperands(a, pass, data, inst, .{ pl_op.operand, bin.lhs, bin.rhs });
780780 },
......@@ -823,7 +823,7 @@ fn analyzeOperands(
823823 },
824824
825825 .main_analysis => {
826 const usize_index = (@intFromEnum(inst) * bpi) / @bitSizeOf(usize);
826 const usize_index = (@backingInt(inst) * bpi) / @bitSizeOf(usize);
827827
828828 // This logic must synchronize with `will_die_immediately` in `AnalyzeBigOperands.init`.
829829 const immediate_death = if (data.live_set.remove(inst)) blk: {
......@@ -858,7 +858,7 @@ fn analyzeOperands(
858858 }
859859
860860 a.tomb_bits[usize_index] |= @as(usize, tomb_bits) <<
861 @as(Log2Int(usize), @intCast((@intFromEnum(inst) % (@bitSizeOf(usize) / bpi)) * bpi));
861 @as(Log2Int(usize), @intCast((@backingInt(inst) % (@bitSizeOf(usize) / bpi)) * bpi));
862862 },
863863 }
864864}
......@@ -893,7 +893,7 @@ fn analyzeInstBr(
893893 inst: Air.Inst.Index,
894894) !void {
895895 const inst_datas = a.air.instructions.items(.data);
896 const br = inst_datas[@intFromEnum(inst)].br;
896 const br = inst_datas[@backingInt(inst)].br;
897897 const gpa = a.gpa;
898898
899899 switch (pass) {
......@@ -920,7 +920,7 @@ fn analyzeInstRepeat(
920920 inst: Air.Inst.Index,
921921) !void {
922922 const inst_datas = a.air.instructions.items(.data);
923 const repeat = inst_datas[@intFromEnum(inst)].repeat;
923 const repeat = inst_datas[@backingInt(inst)].repeat;
924924 const gpa = a.gpa;
925925
926926 switch (pass) {
......@@ -949,7 +949,7 @@ fn analyzeInstSwitchDispatch(
949949 // This happens to be identical to `analyzeInstBr`, but is separated anyway for clarity.
950950
951951 const inst_datas = a.air.instructions.items(.data);
952 const br = inst_datas[@intFromEnum(inst)].br;
952 const br = inst_datas[@backingInt(inst)].br;
953953 const gpa = a.gpa;
954954
955955 switch (pass) {
......@@ -1023,7 +1023,7 @@ fn analyzeInstBlock(
10231023 const alive = key.*;
10241024 if (!block_scope.live_set.contains(alive)) {
10251025 // Dies in block
1026 a.extra.appendAssumeCapacity(@intFromEnum(alive));
1026 a.extra.appendAssumeCapacity(@backingInt(alive));
10271027 measured_num += 1;
10281028 }
10291029 }
......@@ -1064,7 +1064,7 @@ fn writeLoopInfo(
10641064 var it = data.breaks.keyIterator();
10651065 while (it.next()) |key| {
10661066 const block_inst = key.*;
1067 a.extra.appendAssumeCapacity(@intFromEnum(block_inst));
1067 a.extra.appendAssumeCapacity(@backingInt(block_inst));
10681068 }
10691069 log.debug("[{t}] {f}: includes breaks to {f}", .{ LivenessPass.loop_analysis, inst, fmtInstSet(&data.breaks) });
10701070
......@@ -1076,7 +1076,7 @@ fn writeLoopInfo(
10761076 it = data.live_set.keyIterator();
10771077 while (it.next()) |key| {
10781078 const alive = key.*;
1079 a.extra.appendAssumeCapacity(@intFromEnum(alive));
1079 a.extra.appendAssumeCapacity(@backingInt(alive));
10801080 }
10811081 log.debug("[{t}] {f}: maintain liveness of {f}", .{ LivenessPass.loop_analysis, inst, fmtInstSet(&data.live_set) });
10821082
......@@ -1297,7 +1297,7 @@ fn analyzeInstSwitchBr(
12971297 is_dispatch_loop: bool,
12981298) !void {
12991299 const inst_datas = a.air.instructions.items(.data);
1300 const pl_op = inst_datas[@intFromEnum(inst)].pl_op;
1300 const pl_op = inst_datas[@backingInt(inst)].pl_op;
13011301 const condition = pl_op.operand;
13021302 const switch_br = a.air.unwrapSwitch(inst);
13031303 const gpa = a.gpa;
src/Air/Liveness/Verify.zig+24-24
......@@ -48,7 +48,7 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
4848 continue;
4949 }
5050
51 switch (tags[@intFromEnum(inst)]) {
51 switch (tags[@backingInt(inst)]) {
5252 // no operands
5353 .arg,
5454 .alloc,
......@@ -131,7 +131,7 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
131131 .c_va_copy,
132132 .abs,
133133 => {
134 const ty_op = data[@intFromEnum(inst)].ty_op;
134 const ty_op = data[@backingInt(inst)].ty_op;
135135 try self.verifyInstOperands(inst, .{ ty_op.operand, .none, .none });
136136 },
137137 .is_null,
......@@ -164,14 +164,14 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
164164 .set_err_return_trace,
165165 .c_va_end,
166166 => {
167 const un_op = data[@intFromEnum(inst)].un_op;
167 const un_op = data[@backingInt(inst)].un_op;
168168 try self.verifyInstOperands(inst, .{ un_op, .none, .none });
169169 },
170170 .ret,
171171 .ret_safe,
172172 .ret_load,
173173 => {
174 const un_op = data[@intFromEnum(inst)].un_op;
174 const un_op = data[@backingInt(inst)].un_op;
175175 try self.verifyInstOperands(inst, .{ un_op, .none, .none });
176176 // This instruction terminates the function, so everything should be dead
177177 if (self.live.count() > 0) return invalid("{f}: instructions still alive", .{inst});
......@@ -181,36 +181,36 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
181181 .dbg_arg_inline,
182182 .wasm_memory_grow,
183183 => {
184 const pl_op = data[@intFromEnum(inst)].pl_op;
184 const pl_op = data[@backingInt(inst)].pl_op;
185185 try self.verifyInstOperands(inst, .{ pl_op.operand, .none, .none });
186186 },
187187 .prefetch => {
188 const prefetch = data[@intFromEnum(inst)].prefetch;
188 const prefetch = data[@backingInt(inst)].prefetch;
189189 try self.verifyInstOperands(inst, .{ prefetch.ptr, .none, .none });
190190 },
191191 .reduce,
192192 .reduce_optimized,
193193 => {
194 const reduce = data[@intFromEnum(inst)].reduce;
194 const reduce = data[@backingInt(inst)].reduce;
195195 try self.verifyInstOperands(inst, .{ reduce.operand, .none, .none });
196196 },
197197 .union_init => {
198 const ty_pl = data[@intFromEnum(inst)].ty_pl;
198 const ty_pl = data[@backingInt(inst)].ty_pl;
199199 const extra = self.air.extraData(Air.UnionInit, ty_pl.payload).data;
200200 try self.verifyInstOperands(inst, .{ extra.init, .none, .none });
201201 },
202202 .struct_field_ptr, .agg_field_val, .spirv_runtime_array_len => {
203 const ty_pl = data[@intFromEnum(inst)].ty_pl;
203 const ty_pl = data[@backingInt(inst)].ty_pl;
204204 const extra = self.air.extraData(Air.StructField, ty_pl.payload).data;
205205 try self.verifyInstOperands(inst, .{ extra.struct_operand, .none, .none });
206206 },
207207 .field_parent_ptr => {
208 const ty_pl = data[@intFromEnum(inst)].ty_pl;
208 const ty_pl = data[@backingInt(inst)].ty_pl;
209209 const extra = self.air.extraData(Air.FieldParentPtr, ty_pl.payload).data;
210210 try self.verifyInstOperands(inst, .{ extra.field_ptr, .none, .none });
211211 },
212212 .atomic_load => {
213 const atomic_load = data[@intFromEnum(inst)].atomic_load;
213 const atomic_load = data[@backingInt(inst)].atomic_load;
214214 try self.verifyInstOperands(inst, .{ atomic_load.ptr, .none, .none });
215215 },
216216
......@@ -282,7 +282,7 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
282282 .memmove,
283283 .legalize_vec_elem_val,
284284 => {
285 const bin_op = data[@intFromEnum(inst)].bin_op;
285 const bin_op = data[@backingInt(inst)].bin_op;
286286 try self.verifyInstOperands(inst, .{ bin_op.lhs, bin_op.rhs, .none });
287287 },
288288 .add_with_overflow,
......@@ -295,7 +295,7 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
295295 .slice_elem_ptr,
296296 .slice,
297297 => {
298 const ty_pl = data[@intFromEnum(inst)].ty_pl;
298 const ty_pl = data[@backingInt(inst)].ty_pl;
299299 const extra = self.air.extraData(Air.Bin, ty_pl.payload).data;
300300 try self.verifyInstOperands(inst, .{ extra.lhs, extra.rhs, .none });
301301 },
......@@ -310,38 +310,38 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
310310 .cmp_vector,
311311 .cmp_vector_optimized,
312312 => {
313 const ty_pl = data[@intFromEnum(inst)].ty_pl;
313 const ty_pl = data[@backingInt(inst)].ty_pl;
314314 const extra = self.air.extraData(Air.VectorCmp, ty_pl.payload).data;
315315 try self.verifyInstOperands(inst, .{ extra.lhs, extra.rhs, .none });
316316 },
317317 .atomic_rmw => {
318 const pl_op = data[@intFromEnum(inst)].pl_op;
318 const pl_op = data[@backingInt(inst)].pl_op;
319319 const extra = self.air.extraData(Air.AtomicRmw, pl_op.payload).data;
320320 try self.verifyInstOperands(inst, .{ pl_op.operand, extra.operand, .none });
321321 },
322322
323323 // ternary
324324 .select => {
325 const pl_op = data[@intFromEnum(inst)].pl_op;
325 const pl_op = data[@backingInt(inst)].pl_op;
326326 const extra = self.air.extraData(Air.Bin, pl_op.payload).data;
327327 try self.verifyInstOperands(inst, .{ pl_op.operand, extra.lhs, extra.rhs });
328328 },
329329 .mul_add => {
330 const pl_op = data[@intFromEnum(inst)].pl_op;
330 const pl_op = data[@backingInt(inst)].pl_op;
331331 const extra = self.air.extraData(Air.Bin, pl_op.payload).data;
332332 try self.verifyInstOperands(inst, .{ extra.lhs, extra.rhs, pl_op.operand });
333333 },
334334 .cmpxchg_strong,
335335 .cmpxchg_weak,
336336 => {
337 const ty_pl = data[@intFromEnum(inst)].ty_pl;
337 const ty_pl = data[@backingInt(inst)].ty_pl;
338338 const extra = self.air.extraData(Air.Cmpxchg, ty_pl.payload).data;
339339 try self.verifyInstOperands(inst, .{ extra.ptr, extra.expected_value, extra.new_value });
340340 },
341341
342342 // big tombs
343343 .aggregate_init => {
344 const ty_pl = data[@intFromEnum(inst)].ty_pl;
344 const ty_pl = data[@backingInt(inst)].ty_pl;
345345 const aggregate_ty = ty_pl.ty.toType();
346346 const len = @as(usize, @intCast(aggregate_ty.arrayLenIp(ip)));
347347 const elements = @as([]const Air.Inst.Ref, @ptrCast(self.air.extra.items[ty_pl.payload..][0..len]));
......@@ -422,7 +422,7 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
422422 try self.verifyInst(inst);
423423 },
424424 .br => {
425 const br = data[@intFromEnum(inst)].br;
425 const br = data[@backingInt(inst)].br;
426426 const gop = try self.blocks.getOrPut(self.gpa, br.block_inst);
427427
428428 try self.verifyOperand(inst, br.operand, self.liveness.operandDies(inst, 0));
......@@ -434,14 +434,14 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
434434 try self.verifyInst(inst);
435435 },
436436 .repeat => {
437 const repeat = data[@intFromEnum(inst)].repeat;
437 const repeat = data[@backingInt(inst)].repeat;
438438 const expected_live = self.loops.get(repeat.loop_inst) orelse
439439 return invalid("{f}: loop {f} not in scope", .{ inst, repeat.loop_inst });
440440
441441 try self.verifyMatchingLiveness(repeat.loop_inst, expected_live);
442442 },
443443 .switch_dispatch => {
444 const br = data[@intFromEnum(inst)].br;
444 const br = data[@backingInt(inst)].br;
445445
446446 try self.verifyOperand(inst, br.operand, self.liveness.operandDies(inst, 0));
447447
......@@ -451,7 +451,7 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
451451 try self.verifyMatchingLiveness(br.block_inst, expected_live);
452452 },
453453 .block, .dbg_inline_block => |tag| {
454 const ty_pl = data[@intFromEnum(inst)].ty_pl;
454 const ty_pl = data[@backingInt(inst)].ty_pl;
455455 const block_ty = ty_pl.ty.toType();
456456 const block_body = switch (tag) {
457457 .block => self.air.unwrapBlock(inst).body,
......@@ -570,7 +570,7 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void {
570570 try self.verifyInst(inst);
571571 },
572572 .legalize_vec_store_elem => {
573 const pl_op = data[@intFromEnum(inst)].pl_op;
573 const pl_op = data[@backingInt(inst)].pl_op;
574574 const bin = self.air.extraData(Air.Bin, pl_op.payload).data;
575575 try self.verifyInstOperands(inst, .{ pl_op.operand, bin.lhs, bin.rhs });
576576 },
src/Air/Verify.zig+13-13
......@@ -69,7 +69,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
6969 const data = air.instructions.items(.data);
7070 for (body_insts, 0..) |inst, body_index| {
7171 verify.cur_inst = inst;
72 switch (tags[@intFromEnum(inst)]) {
72 switch (tags[@backingInt(inst)]) {
7373 .block => {
7474 const block = air.unwrapBlock(inst);
7575 try verify.body(block.body);
......@@ -107,11 +107,11 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
107107 }
108108 },
109109 .ret, .ret_safe => {
110 const operand = data[@intFromEnum(inst)].un_op;
110 const operand = data[@backingInt(inst)].un_op;
111111 if (air.typeOf(operand, ip).toIntern() != verify.ret_ty.toIntern()) return verify.fail("bad return type");
112112 },
113113 .ret_load => {
114 const operand = data[@intFromEnum(inst)].un_op;
114 const operand = data[@backingInt(inst)].un_op;
115115 const ptr_ty = air.typeOf(operand, ip);
116116 if (ptr_ty.zigTypeTag(zcu) != .pointer) return verify.fail("operand is not a pointer");
117117 if (ptr_ty.ptrSize(zcu) != .one) return verify.fail("pointer size is not '.one'");
......@@ -119,7 +119,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
119119 },
120120
121121 .bit_cast, .bit_cast_safe => {
122 const ty_op = data[@intFromEnum(inst)].ty_op;
122 const ty_op = data[@backingInt(inst)].ty_op;
123123 const operand_ty = air.typeOf(ty_op.operand, ip);
124124 const result_ty = ty_op.ty.toType();
125125 // Enums are allowed here even if their backing type is implicit.
......@@ -134,7 +134,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
134134 if (operand_ty.bitSize(zcu) != result_ty.bitSize(zcu)) return verify.fail("bit size mismatch");
135135 },
136136 .ptr_cast => {
137 const ty_op = data[@intFromEnum(inst)].ty_op;
137 const ty_op = data[@backingInt(inst)].ty_op;
138138 const operand_ty = air.typeOf(ty_op.operand, ip);
139139 const result_ty = ty_op.ty.toType();
140140 const operand_scalar_ty = operand_ty.scalarType(zcu);
......@@ -152,7 +152,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
152152 }
153153 },
154154 .ptr_from_int => {
155 const ty_op = data[@intFromEnum(inst)].ty_op;
155 const ty_op = data[@backingInt(inst)].ty_op;
156156 const operand_ty = air.typeOf(ty_op.operand, ip);
157157 const result_ty = ty_op.ty.toType();
158158 const operand_scalar_ty = operand_ty.scalarType(zcu);
......@@ -163,7 +163,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
163163 if (!operand_ty.isVector(zcu) and result_ty.isVector(zcu)) return verify.fail("result is vector, but operand is not");
164164 },
165165 .int_from_ptr => {
166 const ty_op = data[@intFromEnum(inst)].ty_op;
166 const ty_op = data[@backingInt(inst)].ty_op;
167167 const operand_ty = air.typeOf(ty_op.operand, ip);
168168 const result_ty = ty_op.ty.toType();
169169 const operand_scalar_ty = operand_ty.scalarType(zcu);
......@@ -174,7 +174,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
174174 if (!operand_ty.isVector(zcu) and result_ty.isVector(zcu)) return verify.fail("result is vector, but operand is not");
175175 },
176176 .error_cast => {
177 const ty_op = data[@intFromEnum(inst)].ty_op;
177 const ty_op = data[@backingInt(inst)].ty_op;
178178 const operand_ty = air.typeOf(ty_op.operand, ip);
179179 const result_ty = ty_op.ty.toType();
180180 switch (operand_ty.zigTypeTag(zcu)) {
......@@ -193,7 +193,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
193193 }
194194 },
195195 .error_from_int => {
196 const ty_op = data[@intFromEnum(inst)].ty_op;
196 const ty_op = data[@backingInt(inst)].ty_op;
197197 const operand_ty = air.typeOf(ty_op.operand, ip);
198198 const result_ty = ty_op.ty.toType();
199199 if (!operand_ty.isUnsignedInt(zcu)) return verify.fail("bad operand type");
......@@ -201,7 +201,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
201201 if (result_ty.zigTypeTag(zcu) != .error_set) return verify.fail("bad result type");
202202 },
203203 .int_from_error => {
204 const ty_op = data[@intFromEnum(inst)].ty_op;
204 const ty_op = data[@backingInt(inst)].ty_op;
205205 const operand_ty = air.typeOf(ty_op.operand, ip);
206206 const result_ty = ty_op.ty.toType();
207207 if (operand_ty.zigTypeTag(zcu) != .error_set) return verify.fail("bad operand type");
......@@ -209,7 +209,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
209209 if (result_ty.bitSize(zcu) != zcu.errorSetBits()) return verify.fail("bad result bit size");
210210 },
211211 .union_from_enum => {
212 const ty_op = data[@intFromEnum(inst)].ty_op;
212 const ty_op = data[@backingInt(inst)].ty_op;
213213 const operand_ty = air.typeOf(ty_op.operand, ip);
214214 const result_ty = ty_op.ty.toType();
215215 if (operand_ty.zigTypeTag(zcu) != .@"enum") return verify.fail("bad operand type");
......@@ -219,7 +219,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
219219 },
220220
221221 .ptr_elem_ptr => {
222 const ty_pl = data[@intFromEnum(inst)].ty_pl;
222 const ty_pl = data[@backingInt(inst)].ty_pl;
223223 const bin_op = air.extraData(Air.Bin, ty_pl.payload).data;
224224 const ptr_ty = air.typeOf(bin_op.lhs, ip);
225225 const result_ty = ty_pl.ty.toType();
......@@ -442,7 +442,7 @@ fn body(verify: *Verify, body_insts: []const Air.Inst.Index) Error!void {
442442 // probably just needs to live exclusively in backends; putting AIR instructions after a
443443 // call implies that we have e.g. a valid stack at that point, which we can't actually
444444 // assume when the user has gotten a function's ABI wrong.
445 switch (tags[@intFromEnum(inst)]) {
445 switch (tags[@backingInt(inst)]) {
446446 .call,
447447 .call_always_tail,
448448 .call_never_tail,
src/Air/print.zig+33-33
......@@ -106,7 +106,7 @@ const Writer = struct {
106106 }
107107
108108 fn writeInst(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
109 const tag = w.air.instructions.items(.tag)[@intFromEnum(inst)];
109 const tag = w.air.instructions.items(.tag)[@backingInt(inst)];
110110 try s.splatByteAll(' ', w.indent);
111111 try s.print("{f}{c}= {s}(", .{
112112 inst,
......@@ -357,14 +357,14 @@ const Writer = struct {
357357 }
358358
359359 fn writeBinOp(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
360 const bin_op = w.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
360 const bin_op = w.air.instructions.items(.data)[@backingInt(inst)].bin_op;
361361 try w.writeOperand(s, inst, 0, bin_op.lhs);
362362 try s.writeAll(", ");
363363 try w.writeOperand(s, inst, 1, bin_op.rhs);
364364 }
365365
366366 fn writeUnOp(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
367 const un_op = w.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
367 const un_op = w.air.instructions.items(.data)[@backingInt(inst)].un_op;
368368 try w.writeOperand(s, inst, 0, un_op);
369369 }
370370
......@@ -380,25 +380,25 @@ const Writer = struct {
380380 }
381381
382382 fn writeTy(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
383 const ty = w.air.instructions.items(.data)[@intFromEnum(inst)].ty;
383 const ty = w.air.instructions.items(.data)[@backingInt(inst)].ty;
384384 try w.writeType(s, ty);
385385 }
386386
387387 fn writeArg(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
388 const arg = w.air.instructions.items(.data)[@intFromEnum(inst)].arg;
388 const arg = w.air.instructions.items(.data)[@backingInt(inst)].arg;
389389 try w.writeType(s, arg.ty.toType());
390390 try s.print(", {d}", .{arg.zir_param_index});
391391 }
392392
393393 fn writeTyOp(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
394 const ty_op = w.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
394 const ty_op = w.air.instructions.items(.data)[@backingInt(inst)].ty_op;
395395 try w.writeType(s, ty_op.ty.toType());
396396 try s.writeAll(", ");
397397 try w.writeOperand(s, inst, 0, ty_op.operand);
398398 }
399399
400400 fn writeBlock(w: *Writer, s: *std.Io.Writer, tag: Air.Inst.Tag, inst: Air.Inst.Index) Error!void {
401 const ty_pl = w.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
401 const ty_pl = w.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
402402 try w.writeType(s, ty_pl.ty.toType());
403403
404404 const body = switch (tag) {
......@@ -446,7 +446,7 @@ const Writer = struct {
446446
447447 fn writeAggregateInit(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
448448 const zcu = w.pt.zcu;
449 const ty_pl = w.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
449 const ty_pl = w.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
450450 const vector_ty = ty_pl.ty.toType();
451451 const len = @as(usize, @intCast(vector_ty.arrayLen(zcu)));
452452 const elements = @as([]const Air.Inst.Ref, @ptrCast(w.air.extra.items[ty_pl.payload..][0..len]));
......@@ -461,7 +461,7 @@ const Writer = struct {
461461 }
462462
463463 fn writeUnionInit(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
464 const ty_pl = w.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
464 const ty_pl = w.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
465465 const extra = w.air.extraData(Air.UnionInit, ty_pl.payload).data;
466466
467467 try s.print("{d}, ", .{extra.field_index});
......@@ -469,7 +469,7 @@ const Writer = struct {
469469 }
470470
471471 fn writeStructField(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
472 const ty_pl = w.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
472 const ty_pl = w.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
473473 const extra = w.air.extraData(Air.StructField, ty_pl.payload).data;
474474
475475 try w.writeOperand(s, inst, 0, extra.struct_operand);
......@@ -478,10 +478,10 @@ const Writer = struct {
478478
479479 fn writeTyPlBin(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
480480 const data = w.air.instructions.items(.data);
481 const ty_pl = data[@intFromEnum(inst)].ty_pl;
481 const ty_pl = data[@backingInt(inst)].ty_pl;
482482 const extra = w.air.extraData(Air.Bin, ty_pl.payload).data;
483483
484 const inst_ty = data[@intFromEnum(inst)].ty_pl.ty.toType();
484 const inst_ty = data[@backingInt(inst)].ty_pl.ty.toType();
485485 try w.writeType(s, inst_ty);
486486 try s.writeAll(", ");
487487 try w.writeOperand(s, inst, 0, extra.lhs);
......@@ -490,7 +490,7 @@ const Writer = struct {
490490 }
491491
492492 fn writeCmpxchg(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
493 const ty_pl = w.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
493 const ty_pl = w.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
494494 const extra = w.air.extraData(Air.Cmpxchg, ty_pl.payload).data;
495495
496496 try w.writeOperand(s, inst, 0, extra.ptr);
......@@ -504,7 +504,7 @@ const Writer = struct {
504504 }
505505
506506 fn writeMulAdd(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
507 const pl_op = w.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
507 const pl_op = w.air.instructions.items(.data)[@backingInt(inst)].pl_op;
508508 const extra = w.air.extraData(Air.Bin, pl_op.payload).data;
509509
510510 try w.writeOperand(s, inst, 0, extra.lhs);
......@@ -515,7 +515,7 @@ const Writer = struct {
515515 }
516516
517517 fn writeLegalizeVecStoreElem(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
518 const pl_op = w.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
518 const pl_op = w.air.instructions.items(.data)[@backingInt(inst)].pl_op;
519519 const bin = w.air.extraData(Air.Bin, pl_op.payload).data;
520520
521521 try w.writeOperand(s, inst, 0, pl_op.operand);
......@@ -574,7 +574,7 @@ const Writer = struct {
574574
575575 fn writeSelect(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
576576 const zcu = w.pt.zcu;
577 const pl_op = w.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
577 const pl_op = w.air.instructions.items(.data)[@backingInt(inst)].pl_op;
578578 const extra = w.air.extraData(Air.Bin, pl_op.payload).data;
579579
580580 const elem_ty = w.typeOfIndex(inst).childType(zcu);
......@@ -588,14 +588,14 @@ const Writer = struct {
588588 }
589589
590590 fn writeReduce(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
591 const reduce = w.air.instructions.items(.data)[@intFromEnum(inst)].reduce;
591 const reduce = w.air.instructions.items(.data)[@backingInt(inst)].reduce;
592592
593593 try w.writeOperand(s, inst, 0, reduce.operand);
594594 try s.print(", {s}", .{@tagName(reduce.operation)});
595595 }
596596
597597 fn writeCmpVector(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
598 const ty_pl = w.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
598 const ty_pl = w.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
599599 const extra = w.air.extraData(Air.VectorCmp, ty_pl.payload).data;
600600
601601 try s.print("{s}, ", .{@tagName(extra.compareOperator())});
......@@ -606,20 +606,20 @@ const Writer = struct {
606606
607607 fn writeRuntimeNavPtr(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
608608 const ip = &w.pt.zcu.intern_pool;
609 const ty_nav = w.air.instructions.items(.data)[@intFromEnum(inst)].ty_nav;
609 const ty_nav = w.air.instructions.items(.data)[@backingInt(inst)].ty_nav;
610610 try w.writeType(s, .fromInterned(ty_nav.ty));
611611 try s.print(", '{f}'", .{ip.getNav(ty_nav.nav).fqn.fmt(ip)});
612612 }
613613
614614 fn writeAtomicLoad(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
615 const atomic_load = w.air.instructions.items(.data)[@intFromEnum(inst)].atomic_load;
615 const atomic_load = w.air.instructions.items(.data)[@backingInt(inst)].atomic_load;
616616
617617 try w.writeOperand(s, inst, 0, atomic_load.ptr);
618618 try s.print(", {s}", .{@tagName(atomic_load.order)});
619619 }
620620
621621 fn writePrefetch(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
622 const prefetch = w.air.instructions.items(.data)[@intFromEnum(inst)].prefetch;
622 const prefetch = w.air.instructions.items(.data)[@backingInt(inst)].prefetch;
623623
624624 try w.writeOperand(s, inst, 0, prefetch.ptr);
625625 try s.print(", {s}, {d}, {s}", .{
......@@ -633,7 +633,7 @@ const Writer = struct {
633633 inst: Air.Inst.Index,
634634 order: std.lang.AtomicOrder,
635635 ) Error!void {
636 const bin_op = w.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
636 const bin_op = w.air.instructions.items(.data)[@backingInt(inst)].bin_op;
637637 try w.writeOperand(s, inst, 0, bin_op.lhs);
638638 try s.writeAll(", ");
639639 try w.writeOperand(s, inst, 1, bin_op.rhs);
......@@ -641,7 +641,7 @@ const Writer = struct {
641641 }
642642
643643 fn writeAtomicRmw(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
644 const pl_op = w.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
644 const pl_op = w.air.instructions.items(.data)[@backingInt(inst)].pl_op;
645645 const extra = w.air.extraData(Air.AtomicRmw, pl_op.payload).data;
646646
647647 try w.writeOperand(s, inst, 0, pl_op.operand);
......@@ -651,7 +651,7 @@ const Writer = struct {
651651 }
652652
653653 fn writeFieldParentPtr(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
654 const ty_pl = w.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
654 const ty_pl = w.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
655655 const extra = w.air.extraData(Air.FieldParentPtr, ty_pl.payload).data;
656656
657657 try w.writeOperand(s, inst, 0, extra.field_ptr);
......@@ -719,14 +719,14 @@ const Writer = struct {
719719 }
720720
721721 fn writeDbgStmt(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
722 const dbg_stmt = w.air.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt;
722 const dbg_stmt = w.air.instructions.items(.data)[@backingInt(inst)].dbg_stmt;
723723 try s.print("{d}:{d}", .{ dbg_stmt.line + 1, dbg_stmt.column + 1 });
724724 }
725725
726726 fn writeDbgVar(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
727 const pl_op = w.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
727 const pl_op = w.air.instructions.items(.data)[@backingInt(inst)].pl_op;
728728 try w.writeOperand(s, inst, 0, pl_op.operand);
729 const name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
729 const name: Air.NullTerminatedString = @fromBackingInt(@intCast(pl_op.payload));
730730 try s.print(", \"{f}\"", .{std.zig.fmtString(name.toSlice(w.air))});
731731 }
732732
......@@ -743,14 +743,14 @@ const Writer = struct {
743743 }
744744
745745 fn writeBr(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
746 const br = w.air.instructions.items(.data)[@intFromEnum(inst)].br;
746 const br = w.air.instructions.items(.data)[@backingInt(inst)].br;
747747 try w.writeInstIndex(s, br.block_inst, false);
748748 try s.writeAll(", ");
749749 try w.writeOperand(s, inst, 0, br.operand);
750750 }
751751
752752 fn writeRepeat(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
753 const repeat = w.air.instructions.items(.data)[@intFromEnum(inst)].repeat;
753 const repeat = w.air.instructions.items(.data)[@backingInt(inst)].repeat;
754754 try w.writeInstIndex(s, repeat.loop_inst, false);
755755 }
756756
......@@ -968,18 +968,18 @@ const Writer = struct {
968968 }
969969
970970 fn writeWasmMemorySize(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
971 const pl_op = w.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
971 const pl_op = w.air.instructions.items(.data)[@backingInt(inst)].pl_op;
972972 try s.print("{d}", .{pl_op.payload});
973973 }
974974
975975 fn writeWasmMemoryGrow(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
976 const pl_op = w.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
976 const pl_op = w.air.instructions.items(.data)[@backingInt(inst)].pl_op;
977977 try s.print("{d}, ", .{pl_op.payload});
978978 try w.writeOperand(s, inst, 0, pl_op.operand);
979979 }
980980
981981 fn writeWorkDimension(w: *Writer, s: *std.Io.Writer, inst: Air.Inst.Index) Error!void {
982 const pl_op = w.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
982 const pl_op = w.air.instructions.items(.data)[@backingInt(inst)].pl_op;
983983 try s.print("{d}", .{pl_op.payload});
984984 }
985985
......@@ -1015,7 +1015,7 @@ const Writer = struct {
10151015 operand: Air.Inst.Ref,
10161016 dies: bool,
10171017 ) Error!void {
1018 if (@intFromEnum(operand) < InternPool.static_len) {
1018 if (@backingInt(operand) < InternPool.static_len) {
10191019 return s.print("@{}", .{operand});
10201020 } else if (operand.toInterned()) |ip_index| {
10211021 const pt = w.pt;
src/Compilation.zig+39-39
......@@ -418,7 +418,7 @@ pub const Path = struct {
418418 /// The added data is relocatable across any compiler process using the same lib and cache
419419 /// directories; it does not depend on cwd.
420420 pub fn addToHasher(p: Path, h: *Cache.Hasher) void {
421 h.update(&.{@intFromEnum(p.root)});
421 h.update(&.{@backingInt(p.root)});
422422 h.update(p.sub_path);
423423 }
424424
......@@ -843,7 +843,7 @@ pub const CObject = struct {
843843
844844 pub fn addToErrorBundle(diag: *const Diag, io: Io, eb: *ErrorBundle.Wip, bundle: Bundle, note: *u32) !void {
845845 const err_msg = try eb.addErrorMessage(try diag.toErrorMessage(io, eb, bundle, 0));
846 eb.extra.items[note.*] = @intFromEnum(err_msg);
846 eb.extra.items[note.*] = @backingInt(err_msg);
847847 note.* += 1;
848848 for (diag.sub_diags) |sub_diag| try sub_diag.addToErrorBundle(io, eb, bundle, note);
849849 }
......@@ -976,12 +976,12 @@ pub const CObject = struct {
976976
977977 try bc.checkMagic("DIAG");
978978 while (try bc.next()) |item| switch (item) {
979 .start_block => |block| switch (@as(BlockId, @enumFromInt(block.id))) {
979 .start_block => |block| switch (@as(BlockId, @fromBackingInt(@intCast(block.id)))) {
980980 .Meta => if (stack.items.len > 0) try bc.skipBlock(block),
981981 .Diag => try stack.append(gpa, .{}),
982982 _ => try bc.skipBlock(block),
983983 },
984 .record => |record| switch (@as(RecordId, @enumFromInt(record.id))) {
984 .record => |record| switch (@as(RecordId, @fromBackingInt(@intCast(record.id)))) {
985985 .Version => if (record.operands[0] != 2) return error.InvalidVersion,
986986 .DiagInfo => {
987987 const top = &stack.items[stack.items.len - 1];
......@@ -1027,7 +1027,7 @@ pub const CObject = struct {
10271027 .FixIt => {},
10281028 _ => {},
10291029 },
1030 .end_block => |block| switch (@as(BlockId, @enumFromInt(block.id))) {
1030 .end_block => |block| switch (@as(BlockId, @fromBackingInt(@intCast(block.id)))) {
10311031 .Meta => {},
10321032 .Diag => {
10331033 try stack.items[stack.items.len - 2].sub_diags.ensureUnusedCapacity(gpa, 1);
......@@ -2401,26 +2401,26 @@ pub fn create(gpa: Allocator, arena: Allocator, io: Io, diag: *CreateDiagnostic,
24012401 if (!std.zig.target.canBuildLibC(target)) return diag.fail(.cross_libc_unavailable);
24022402
24032403 if (musl.needsCrt0(comp.config.output_mode, comp.config.link_mode, comp.config.pie)) |f| {
2404 comp.queued_jobs.musl_crt_file[@intFromEnum(f)] = true;
2404 comp.queued_jobs.musl_crt_file[@backingInt(f)] = true;
24052405 }
24062406 switch (comp.config.link_mode) {
2407 .static => comp.queued_jobs.musl_crt_file[@intFromEnum(musl.CrtFile.libc_a)] = true,
2408 .dynamic => comp.queued_jobs.musl_crt_file[@intFromEnum(musl.CrtFile.libc_so)] = true,
2407 .static => comp.queued_jobs.musl_crt_file[@backingInt(musl.CrtFile.libc_a)] = true,
2408 .dynamic => comp.queued_jobs.musl_crt_file[@backingInt(musl.CrtFile.libc_so)] = true,
24092409 }
24102410 } else if (target.isGnuLibC()) {
24112411 if (!std.zig.target.canBuildLibC(target)) return diag.fail(.cross_libc_unavailable);
24122412
24132413 if (glibc.needsCrt0(comp.config.output_mode)) |f| {
2414 comp.queued_jobs.glibc_crt_file[@intFromEnum(f)] = true;
2414 comp.queued_jobs.glibc_crt_file[@backingInt(f)] = true;
24152415 }
24162416 comp.queued_jobs.glibc_shared_objects = true;
24172417
2418 comp.queued_jobs.glibc_crt_file[@intFromEnum(glibc.CrtFile.libc_nonshared_a)] = true;
2418 comp.queued_jobs.glibc_crt_file[@backingInt(glibc.CrtFile.libc_nonshared_a)] = true;
24192419 } else if (target.isFreeBSDLibC()) {
24202420 if (!std.zig.target.canBuildLibC(target)) return diag.fail(.cross_libc_unavailable);
24212421
24222422 if (freebsd.needsCrt0(comp.config.output_mode)) |f| {
2423 comp.queued_jobs.freebsd_crt_file[@intFromEnum(f)] = true;
2423 comp.queued_jobs.freebsd_crt_file[@backingInt(f)] = true;
24242424 }
24252425
24262426 comp.queued_jobs.freebsd_shared_objects = true;
......@@ -2428,7 +2428,7 @@ pub fn create(gpa: Allocator, arena: Allocator, io: Io, diag: *CreateDiagnostic,
24282428 if (!std.zig.target.canBuildLibC(target)) return diag.fail(.cross_libc_unavailable);
24292429
24302430 if (netbsd.needsCrt0(comp.config.output_mode)) |f| {
2431 comp.queued_jobs.netbsd_crt_file[@intFromEnum(f)] = true;
2431 comp.queued_jobs.netbsd_crt_file[@backingInt(f)] = true;
24322432 }
24332433
24342434 comp.queued_jobs.netbsd_shared_objects = true;
......@@ -2436,21 +2436,21 @@ pub fn create(gpa: Allocator, arena: Allocator, io: Io, diag: *CreateDiagnostic,
24362436 if (!std.zig.target.canBuildLibC(target)) return diag.fail(.cross_libc_unavailable);
24372437
24382438 if (openbsd.needsCrt0(comp.config.output_mode)) |f| {
2439 comp.queued_jobs.openbsd_crt_file[@intFromEnum(f)] = true;
2439 comp.queued_jobs.openbsd_crt_file[@backingInt(f)] = true;
24402440 }
24412441
24422442 comp.queued_jobs.openbsd_shared_objects = true;
24432443 } else if (target.isWasiLibC()) {
24442444 if (!std.zig.target.canBuildLibC(target)) return diag.fail(.cross_libc_unavailable);
24452445
2446 comp.queued_jobs.wasi_libc_crt_file[@intFromEnum(wasi_libc.execModelCrtFile(comp.config.wasi_exec_model))] = true;
2447 comp.queued_jobs.wasi_libc_crt_file[@intFromEnum(wasi_libc.CrtFile.libc_a)] = true;
2446 comp.queued_jobs.wasi_libc_crt_file[@backingInt(wasi_libc.execModelCrtFile(comp.config.wasi_exec_model))] = true;
2447 comp.queued_jobs.wasi_libc_crt_file[@backingInt(wasi_libc.CrtFile.libc_a)] = true;
24482448 } else if (target.isMinGW()) {
24492449 if (!std.zig.target.canBuildLibC(target)) return diag.fail(.cross_libc_unavailable);
24502450
24512451 const main_crt_file: mingw.CrtFile = if (is_dyn_lib) .dllcrt2_o else .crt2_o;
2452 comp.queued_jobs.mingw_crt_file[@intFromEnum(main_crt_file)] = true;
2453 comp.queued_jobs.mingw_crt_file[@intFromEnum(mingw.CrtFile.libmingw32_lib)] = true;
2452 comp.queued_jobs.mingw_crt_file[@backingInt(main_crt_file)] = true;
2453 comp.queued_jobs.mingw_crt_file[@backingInt(mingw.CrtFile.libmingw32_lib)] = true;
24542454
24552455 // When linking mingw-w64 there are some import libs we always need.
24562456 try comp.windows_libs.ensureUnusedCapacity(gpa, mingw.always_link_libs.len);
......@@ -3783,7 +3783,7 @@ pub fn getAllErrorsAlloc(comp: *Compilation) error{OutOfMemory}!ErrorBundle {
37833783 });
37843784 const notes_start = try bundle.reserveNotes(notes_len);
37853785 for (notes_start.., lld_error.context_lines) |note, context_line| {
3786 bundle.extra.items[note] = @intFromEnum(bundle.addErrorMessageAssumeCapacity(.{
3786 bundle.extra.items[note] = @backingInt(bundle.addErrorMessageAssumeCapacity(.{
37873787 .msg = try bundle.addString(context_line),
37883788 }));
37893789 }
......@@ -3845,7 +3845,7 @@ pub fn getAllErrorsAlloc(comp: *Compilation) error{OutOfMemory}!ErrorBundle {
38453845 pub fn lessThan(ctx: @This(), lhs_index: usize, rhs_index: usize) bool {
38463846 const lhs_path = ctx.zcu.fileByIndex(ctx.failed_files_keys[lhs_index]).path;
38473847 const rhs_path = ctx.zcu.fileByIndex(ctx.failed_files_keys[rhs_index]).path;
3848 if (lhs_path.root != rhs_path.root) return @intFromEnum(lhs_path.root) < @intFromEnum(rhs_path.root);
3848 if (lhs_path.root != rhs_path.root) return @backingInt(lhs_path.root) < @backingInt(rhs_path.root);
38493849 return std.mem.order(u8, lhs_path.sub_path, rhs_path.sub_path).compare(.lt);
38503850 }
38513851 };
......@@ -3946,7 +3946,7 @@ pub fn getAllErrorsAlloc(comp: *Compilation) error{OutOfMemory}!ErrorBundle {
39463946 .notes_len = 1,
39473947 });
39483948 const notes_start = try bundle.reserveNotes(1);
3949 bundle.extra.items[notes_start] = @intFromEnum(bundle.addErrorMessageAssumeCapacity(.{
3949 bundle.extra.items[notes_start] = @backingInt(bundle.addErrorMessageAssumeCapacity(.{
39503950 .msg = try bundle.printString("use '--error-limit {d}' to increase limit", .{
39513951 actual_error_count,
39523952 }),
......@@ -3968,10 +3968,10 @@ pub fn getAllErrorsAlloc(comp: *Compilation) error{OutOfMemory}!ErrorBundle {
39683968 .notes_len = 2,
39693969 });
39703970 const notes_start = try bundle.reserveNotes(2);
3971 bundle.extra.items[notes_start + 0] = @intFromEnum(bundle.addErrorMessageAssumeCapacity(.{
3971 bundle.extra.items[notes_start + 0] = @backingInt(bundle.addErrorMessageAssumeCapacity(.{
39723972 .msg = try bundle.addString("run 'zig libc -h' to learn about libc installations"),
39733973 }));
3974 bundle.extra.items[notes_start + 1] = @intFromEnum(bundle.addErrorMessageAssumeCapacity(.{
3974 bundle.extra.items[notes_start + 1] = @backingInt(bundle.addErrorMessageAssumeCapacity(.{
39753975 .msg = try bundle.addString("run 'zig targets' to see the targets for which zig can always provide libc"),
39763976 }));
39773977 }
......@@ -4227,7 +4227,7 @@ pub fn addModuleErrorMsg(
42274227 const notes_start = try eb.reserveNotes(notes_len);
42284228
42294229 for (notes_start.., notes.keys()) |i, note| {
4230 eb.extra.items[i] = @intFromEnum(eb.addErrorMessageAssumeCapacity(note));
4230 eb.extra.items[i] = @backingInt(eb.addErrorMessageAssumeCapacity(note));
42314231 }
42324232}
42334233
......@@ -4260,7 +4260,7 @@ fn addWholeFileError(
42604260 });
42614261 if (imported_note) |n| {
42624262 const note_idx = try eb.reserveNotes(1);
4263 eb.extra.items[note_idx] = @intFromEnum(n);
4263 eb.extra.items[note_idx] = @backingInt(n);
42644264 }
42654265}
42664266
......@@ -4483,49 +4483,49 @@ fn dispatchPrelinkWork(comp: *Compilation, main_progress_node: std.Progress.Node
44834483
44844484 for (0..@typeInfo(musl.CrtFile).@"enum".field_names.len) |i| {
44854485 if (comp.queued_jobs.musl_crt_file[i]) {
4486 const tag: musl.CrtFile = @enumFromInt(i);
4486 const tag: musl.CrtFile = @fromBackingInt(@intCast(i));
44874487 prelink_group.async(io, buildMuslCrtFile, .{ comp, tag, main_progress_node });
44884488 }
44894489 }
44904490
44914491 for (0..@typeInfo(glibc.CrtFile).@"enum".field_names.len) |i| {
44924492 if (comp.queued_jobs.glibc_crt_file[i]) {
4493 const tag: glibc.CrtFile = @enumFromInt(i);
4493 const tag: glibc.CrtFile = @fromBackingInt(@intCast(i));
44944494 prelink_group.async(io, buildGlibcCrtFile, .{ comp, tag, main_progress_node });
44954495 }
44964496 }
44974497
44984498 for (0..@typeInfo(freebsd.CrtFile).@"enum".field_names.len) |i| {
44994499 if (comp.queued_jobs.freebsd_crt_file[i]) {
4500 const tag: freebsd.CrtFile = @enumFromInt(i);
4500 const tag: freebsd.CrtFile = @fromBackingInt(@intCast(i));
45014501 prelink_group.async(io, buildFreeBSDCrtFile, .{ comp, tag, main_progress_node });
45024502 }
45034503 }
45044504
45054505 for (0..@typeInfo(netbsd.CrtFile).@"enum".field_names.len) |i| {
45064506 if (comp.queued_jobs.netbsd_crt_file[i]) {
4507 const tag: netbsd.CrtFile = @enumFromInt(i);
4507 const tag: netbsd.CrtFile = @fromBackingInt(@intCast(i));
45084508 prelink_group.async(io, buildNetBSDCrtFile, .{ comp, tag, main_progress_node });
45094509 }
45104510 }
45114511
45124512 for (0..@typeInfo(openbsd.CrtFile).@"enum".field_names.len) |i| {
45134513 if (comp.queued_jobs.openbsd_crt_file[i]) {
4514 const tag: openbsd.CrtFile = @enumFromInt(i);
4514 const tag: openbsd.CrtFile = @fromBackingInt(@intCast(i));
45154515 prelink_group.async(io, buildOpenBSDCrtFile, .{ comp, tag, main_progress_node });
45164516 }
45174517 }
45184518
45194519 for (0..@typeInfo(wasi_libc.CrtFile).@"enum".field_names.len) |i| {
45204520 if (comp.queued_jobs.wasi_libc_crt_file[i]) {
4521 const tag: wasi_libc.CrtFile = @enumFromInt(i);
4521 const tag: wasi_libc.CrtFile = @fromBackingInt(@intCast(i));
45224522 prelink_group.async(io, buildWasiLibcCrtFile, .{ comp, tag, main_progress_node });
45234523 }
45244524 }
45254525
45264526 for (0..@typeInfo(mingw.CrtFile).@"enum".field_names.len) |i| {
45274527 if (comp.queued_jobs.mingw_crt_file[i]) {
4528 const tag: mingw.CrtFile = @enumFromInt(i);
4528 const tag: mingw.CrtFile = @fromBackingInt(@intCast(i));
45294529 prelink_group.async(io, buildMingwCrtFile, .{ comp, tag, main_progress_node });
45304530 }
45314531 }
......@@ -5127,7 +5127,7 @@ fn buildRt(
51275127
51285128fn buildMuslCrtFile(comp: *Compilation, crt_file: musl.CrtFile, prog_node: std.Progress.Node) void {
51295129 if (musl.buildCrtFile(comp, crt_file, prog_node)) |_| {
5130 comp.queued_jobs.musl_crt_file[@intFromEnum(crt_file)] = false;
5130 comp.queued_jobs.musl_crt_file[@backingInt(crt_file)] = false;
51315131 } else |err| switch (err) {
51325132 error.AlreadyReported => return,
51335133 else => comp.lockAndSetMiscFailure(.musl_crt_file, "unable to build musl {s}: {s}", .{
......@@ -5138,7 +5138,7 @@ fn buildMuslCrtFile(comp: *Compilation, crt_file: musl.CrtFile, prog_node: std.P
51385138
51395139fn buildGlibcCrtFile(comp: *Compilation, crt_file: glibc.CrtFile, prog_node: std.Progress.Node) void {
51405140 if (glibc.buildCrtFile(comp, crt_file, prog_node)) |_| {
5141 comp.queued_jobs.glibc_crt_file[@intFromEnum(crt_file)] = false;
5141 comp.queued_jobs.glibc_crt_file[@backingInt(crt_file)] = false;
51425142 } else |err| switch (err) {
51435143 error.AlreadyReported => return,
51445144 else => comp.lockAndSetMiscFailure(.glibc_crt_file, "unable to build glibc {s}: {s}", .{
......@@ -5159,7 +5159,7 @@ fn buildGlibcSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) voi
51595159
51605160fn buildFreeBSDCrtFile(comp: *Compilation, crt_file: freebsd.CrtFile, prog_node: std.Progress.Node) void {
51615161 if (freebsd.buildCrtFile(comp, crt_file, prog_node)) |_| {
5162 comp.queued_jobs.freebsd_crt_file[@intFromEnum(crt_file)] = false;
5162 comp.queued_jobs.freebsd_crt_file[@backingInt(crt_file)] = false;
51635163 } else |err| switch (err) {
51645164 error.AlreadyReported => return,
51655165 else => comp.lockAndSetMiscFailure(.freebsd_crt_file, "unable to build FreeBSD {s}: {s}", .{
......@@ -5182,7 +5182,7 @@ fn buildFreeBSDSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) v
51825182
51835183fn buildNetBSDCrtFile(comp: *Compilation, crt_file: netbsd.CrtFile, prog_node: std.Progress.Node) void {
51845184 if (netbsd.buildCrtFile(comp, crt_file, prog_node)) |_| {
5185 comp.queued_jobs.netbsd_crt_file[@intFromEnum(crt_file)] = false;
5185 comp.queued_jobs.netbsd_crt_file[@backingInt(crt_file)] = false;
51865186 } else |err| switch (err) {
51875187 error.AlreadyReported => return,
51885188 else => comp.lockAndSetMiscFailure(.netbsd_crt_file, "unable to build NetBSD {s}: {s}", .{
......@@ -5205,7 +5205,7 @@ fn buildNetBSDSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) vo
52055205
52065206fn buildOpenBSDCrtFile(comp: *Compilation, crt_file: openbsd.CrtFile, prog_node: std.Progress.Node) void {
52075207 if (openbsd.buildCrtFile(comp, crt_file, prog_node)) |_| {
5208 comp.queued_jobs.openbsd_crt_file[@intFromEnum(crt_file)] = false;
5208 comp.queued_jobs.openbsd_crt_file[@backingInt(crt_file)] = false;
52095209 } else |err| switch (err) {
52105210 error.AlreadyReported => return,
52115211 else => comp.lockAndSetMiscFailure(.openbsd_crt_file, "unable to build OpenBSD {s}: {s}", .{
......@@ -5228,7 +5228,7 @@ fn buildOpenBSDSharedObjects(comp: *Compilation, prog_node: std.Progress.Node) v
52285228
52295229fn buildMingwCrtFile(comp: *Compilation, crt_file: mingw.CrtFile, prog_node: std.Progress.Node) void {
52305230 if (mingw.buildCrtFile(comp, crt_file, prog_node)) |_| {
5231 comp.queued_jobs.mingw_crt_file[@intFromEnum(crt_file)] = false;
5231 comp.queued_jobs.mingw_crt_file[@backingInt(crt_file)] = false;
52325232 } else |err| switch (err) {
52335233 error.AlreadyReported => return,
52345234 else => comp.lockAndSetMiscFailure(.mingw_crt_file, "unable to build mingw-w64 {s}: {s}", .{
......@@ -5272,7 +5272,7 @@ fn buildMingwImportLib(comp: *Compilation, lib_name: []const u8, is_prelink: boo
52725272
52735273fn buildWasiLibcCrtFile(comp: *Compilation, crt_file: wasi_libc.CrtFile, prog_node: std.Progress.Node) void {
52745274 if (wasi_libc.buildCrtFile(comp, crt_file, prog_node)) |_| {
5275 comp.queued_jobs.wasi_libc_crt_file[@intFromEnum(crt_file)] = false;
5275 comp.queued_jobs.wasi_libc_crt_file[@backingInt(crt_file)] = false;
52765276 } else |err| switch (err) {
52775277 error.AlreadyReported => return,
52785278 else => comp.lockAndSetMiscFailure(.wasi_libc_crt_file, "unable to build WASI libc {s}: {s}", .{
......@@ -6213,7 +6213,7 @@ fn addCommonCCArgs(
62136213 } else if (target.isMinGW()) {
62146214 try argv.append("-D__MSVCRT_VERSION__=0xE00"); // use ucrt
62156215
6216 const minver: u16 = @truncate(@intFromEnum(target.os.versionRange().windows.min) >> 16);
6216 const minver: u16 = @truncate(@backingInt(target.os.versionRange().windows.min) >> 16);
62176217 try argv.append(
62186218 try std.fmt.allocPrint(arena, "-D_WIN32_WINNT=0x{x:0>4}", .{minver}),
62196219 );
src/IncrementalDebugServer.zig+19-19
......@@ -208,7 +208,7 @@ fn handleCommand(zcu: *Zcu, w: *Io.Writer, cmd_str: []const u8, arg_str: []const
208208 zcu.incremental_debug_state.units.count(),
209209 });
210210 } else if (std.mem.eql(u8, cmd_str, "nav_info")) {
211 const nav_index: InternPool.Nav.Index = @enumFromInt(parseIndex(arg_str) orelse return w.writeAll("malformed nav index"));
211 const nav_index: InternPool.Nav.Index = @fromBackingInt(@intCast(parseIndex(arg_str) orelse return w.writeAll("malformed nav index")));
212212 const create_gen = zcu.incremental_debug_state.navs.get(nav_index) orelse return w.writeAll("unknown nav index");
213213 const nav = ip.getNav(nav_index);
214214 try w.print(
......@@ -251,7 +251,7 @@ fn handleCommand(zcu: *Zcu, w: *Io.Writer, cmd_str: []const u8, arg_str: []const
251251 };
252252 if (success) {
253253 num_results += 1;
254 try w.print("* type {d} ('{s}')\n", .{ @intFromEnum(type_ip_index), ty_name });
254 try w.print("* type {d} ('{s}')\n", .{ @backingInt(type_ip_index), ty_name });
255255 }
256256 }
257257 try w.print("Found {d} results\n", .{num_results});
......@@ -272,7 +272,7 @@ fn handleCommand(zcu: *Zcu, w: *Io.Writer, cmd_str: []const u8, arg_str: []const
272272 };
273273 if (success) {
274274 num_results += 1;
275 try w.print("* nav {d} ('{s}')\n", .{ @intFromEnum(nav_index), nav_fqn });
275 try w.print("* nav {d} ('{s}')\n", .{ @backingInt(nav_index), nav_fqn });
276276 }
277277 }
278278 try w.print("Found {d} results\n", .{num_results});
......@@ -308,8 +308,8 @@ fn handleCommand(zcu: *Zcu, w: *Io.Writer, cmd_str: []const u8, arg_str: []const
308308 try w.print("[{d}] ", .{i});
309309 switch (dependee) {
310310 .src_hash, .namespace, .namespace_name, .source_file, .embed_file => try w.print("{f}", .{zcu.fmtDependee(dependee)}),
311 .nav_val, .nav_ty => |nav| try w.print("{t} {d}", .{ dependee, @intFromEnum(nav) }),
312 .type_layout, .struct_defaults, .func_ies => |ip_index| try w.print("{t} {d}", .{ dependee, @intFromEnum(ip_index) }),
311 .nav_val, .nav_ty => |nav| try w.print("{t} {d}", .{ dependee, @backingInt(nav) }),
312 .type_layout, .struct_defaults, .func_ies => |ip_index| try w.print("{t} {d}", .{ dependee, @backingInt(ip_index) }),
313313 .memoized_state => |stage| try w.print("memoized_state {s}", .{@tagName(stage)}),
314314 }
315315 try w.writeByte('\n');
......@@ -326,7 +326,7 @@ fn handleCommand(zcu: *Zcu, w: *Io.Writer, cmd_str: []const u8, arg_str: []const
326326 opt_cur = if (refs.get(cur).?) |ref| ref.referencer else null;
327327 }
328328 } else if (std.mem.eql(u8, cmd_str, "type_info")) {
329 const ip_index: InternPool.Index = @enumFromInt(parseIndex(arg_str) orelse return w.writeAll("malformed ip index"));
329 const ip_index: InternPool.Index = @fromBackingInt(@intCast(parseIndex(arg_str) orelse return w.writeAll("malformed ip index")));
330330 const create_gen = zcu.incremental_debug_state.types.get(ip_index) orelse return w.writeAll("unknown type");
331331 try w.print(
332332 \\name: '{f}'
......@@ -337,24 +337,24 @@ fn handleCommand(zcu: *Zcu, w: *Io.Writer, cmd_str: []const u8, arg_str: []const
337337 create_gen,
338338 });
339339 } else if (std.mem.eql(u8, cmd_str, "type_namespace")) {
340 const ip_index: InternPool.Index = @enumFromInt(parseIndex(arg_str) orelse return w.writeAll("malformed ip index"));
340 const ip_index: InternPool.Index = @fromBackingInt(@intCast(parseIndex(arg_str) orelse return w.writeAll("malformed ip index")));
341341 if (!zcu.incremental_debug_state.types.contains(ip_index)) return w.writeAll("unknown type");
342342 const ns = zcu.namespacePtr(Type.fromInterned(ip_index).getNamespaceIndex(zcu));
343343 try w.print("{d} pub decls:\n", .{ns.pub_decls.count()});
344344 for (ns.pub_decls.keys()) |nav| {
345 try w.print("* nav {d}\n", .{@intFromEnum(nav)});
345 try w.print("* nav {d}\n", .{@backingInt(nav)});
346346 }
347347 try w.print("{d} non-pub decls:\n", .{ns.priv_decls.count()});
348348 for (ns.priv_decls.keys()) |nav| {
349 try w.print("* nav {d}\n", .{@intFromEnum(nav)});
349 try w.print("* nav {d}\n", .{@backingInt(nav)});
350350 }
351351 try w.print("{d} comptime decls:\n", .{ns.comptime_decls.items.len});
352352 for (ns.comptime_decls.items) |id| {
353 try w.print("* comptime {d}\n", .{@intFromEnum(id)});
353 try w.print("* comptime {d}\n", .{@backingInt(id)});
354354 }
355355 try w.print("{d} tests:\n", .{ns.test_decls.items.len});
356356 for (ns.test_decls.items) |nav| {
357 try w.print("* nav {d}\n", .{@intFromEnum(nav)});
357 try w.print("* nav {d}\n", .{@backingInt(nav)});
358358 }
359359 } else {
360360 try w.writeAll("command not found; run 'help' for a command list");
......@@ -369,17 +369,17 @@ fn parseAnalUnit(str: []const u8) ?AnalUnit {
369369 const kind = str[0..split_idx];
370370 const idx_str = str[split_idx + 1 ..];
371371 if (std.mem.eql(u8, kind, "comptime")) {
372 return .wrap(.{ .@"comptime" = @enumFromInt(parseIndex(idx_str) orelse return null) });
372 return .wrap(.{ .@"comptime" = @fromBackingInt(@intCast(parseIndex(idx_str) orelse return null)) });
373373 } else if (std.mem.eql(u8, kind, "nav_val")) {
374 return .wrap(.{ .nav_val = @enumFromInt(parseIndex(idx_str) orelse return null) });
374 return .wrap(.{ .nav_val = @fromBackingInt(@intCast(parseIndex(idx_str) orelse return null)) });
375375 } else if (std.mem.eql(u8, kind, "nav_ty")) {
376 return .wrap(.{ .nav_ty = @enumFromInt(parseIndex(idx_str) orelse return null) });
376 return .wrap(.{ .nav_ty = @fromBackingInt(@intCast(parseIndex(idx_str) orelse return null)) });
377377 } else if (std.mem.eql(u8, kind, "type_layout")) {
378 return .wrap(.{ .type_layout = @enumFromInt(parseIndex(idx_str) orelse return null) });
378 return .wrap(.{ .type_layout = @fromBackingInt(@intCast(parseIndex(idx_str) orelse return null)) });
379379 } else if (std.mem.eql(u8, kind, "struct_defaults")) {
380 return .wrap(.{ .struct_defaults = @enumFromInt(parseIndex(idx_str) orelse return null) });
380 return .wrap(.{ .struct_defaults = @fromBackingInt(@intCast(parseIndex(idx_str) orelse return null)) });
381381 } else if (std.mem.eql(u8, kind, "func")) {
382 return .wrap(.{ .func = @enumFromInt(parseIndex(idx_str) orelse return null) });
382 return .wrap(.{ .func = @fromBackingInt(@intCast(parseIndex(idx_str) orelse return null)) });
383383 } else if (std.mem.eql(u8, kind, "memoized_state")) {
384384 return .wrap(.{ .memoized_state = std.meta.stringToEnum(
385385 InternPool.MemoizedStateStage,
......@@ -392,7 +392,7 @@ fn parseAnalUnit(str: []const u8) ?AnalUnit {
392392fn printAnalUnit(unit: AnalUnit, buf: *[32]u8) []const u8 {
393393 const idx: u32 = switch (unit.unwrap()) {
394394 .memoized_state => |stage| return std.fmt.bufPrint(buf, "memoized_state {s}", .{@tagName(stage)}) catch unreachable,
395 inline else => |i| @intFromEnum(i),
395 inline else => |i| @backingInt(i),
396396 };
397397 return std.fmt.bufPrint(buf, "{s} {d}", .{ @tagName(unit.unwrap()), idx }) catch unreachable;
398398}
......@@ -437,7 +437,7 @@ fn printType(ty: Type, zcu: *const Zcu, w: *Io.Writer) Io.Writer.Error!void {
437437 .union_type,
438438 .enum_type,
439439 .opaque_type,
440 => try w.print("{f}[{d}]", .{ ty.containerTypeName(ip).fmt(ip), @intFromEnum(ty.toIntern()) }),
440 => try w.print("{f}[{d}]", .{ ty.containerTypeName(ip).fmt(ip), @backingInt(ty.toIntern()) }),
441441
442442 else => unreachable,
443443 }
src/InternPool.zig+319-319
......@@ -152,11 +152,11 @@ pub const TrackedInst = extern struct {
152152 pub fn unwrap(inst: ZirIndex) ?Zir.Inst.Index {
153153 return switch (inst) {
154154 .lost => null,
155 _ => @enumFromInt(@intFromEnum(inst)),
155 _ => @fromBackingInt(@intCast(@backingInt(inst))),
156156 };
157157 }
158158 pub fn wrap(inst: Zir.Inst.Index) ZirIndex {
159 return @enumFromInt(@intFromEnum(inst));
159 return @fromBackingInt(@intCast(@backingInt(inst)));
160160 }
161161 };
162162 comptime {
......@@ -187,7 +187,7 @@ pub const TrackedInst = extern struct {
187187 }
188188
189189 pub fn toOptional(i: TrackedInst.Index) Optional {
190 return @enumFromInt(@intFromEnum(i));
190 return @fromBackingInt(@intCast(@backingInt(i)));
191191 }
192192 pub const Optional = enum(u32) {
193193 none = std.math.maxInt(u32),
......@@ -195,7 +195,7 @@ pub const TrackedInst = extern struct {
195195 pub fn unwrap(opt: Optional) ?TrackedInst.Index {
196196 return switch (opt) {
197197 .none => null,
198 _ => @enumFromInt(@intFromEnum(opt)),
198 _ => @fromBackingInt(@intCast(@backingInt(opt))),
199199 };
200200 }
201201
......@@ -207,16 +207,16 @@ pub const TrackedInst = extern struct {
207207 index: u32,
208208
209209 pub fn wrap(unwrapped: Unwrapped, ip: *const InternPool) TrackedInst.Index {
210 assert(@intFromEnum(unwrapped.tid) <= ip.getTidMask());
210 assert(@backingInt(unwrapped.tid) <= ip.getTidMask());
211211 assert(unwrapped.index <= ip.getIndexMask(u32));
212 return @enumFromInt(@shlExact(@as(u32, @intFromEnum(unwrapped.tid)), ip.tid_shift_32) |
213 unwrapped.index);
212 return @fromBackingInt(@intCast(@shlExact(@as(u32, @backingInt(unwrapped.tid)), ip.tid_shift_32) |
213 unwrapped.index));
214214 }
215215 };
216216 pub fn unwrap(tracked_inst_index: TrackedInst.Index, ip: *const InternPool) Unwrapped {
217217 return .{
218 .tid = @enumFromInt(@intFromEnum(tracked_inst_index) >> ip.tid_shift_32 & ip.getTidMask()),
219 .index = @intFromEnum(tracked_inst_index) & ip.getIndexMask(u32),
218 .tid = @fromBackingInt(@intCast(@backingInt(tracked_inst_index) >> ip.tid_shift_32 & ip.getTidMask())),
219 .index = @backingInt(tracked_inst_index) & ip.getIndexMask(u32),
220220 };
221221 }
222222
......@@ -408,7 +408,7 @@ pub fn rehashTrackedInsts(
408408 if (entry.acquire() == .none) break entry;
409409 };
410410 const index = TrackedInst.Index.Unwrapped.wrap(.{
411 .tid = @enumFromInt(local_tid),
411 .tid = @fromBackingInt(@intCast(local_tid)),
412412 .index = @intCast(local_inst_index),
413413 }, ip);
414414 entry.hash = hash;
......@@ -455,7 +455,7 @@ pub const AnalUnit = packed struct(u64) {
455455 inline else => |tag| @unionInit(
456456 Unwrapped,
457457 @tagName(tag),
458 @enumFromInt(au.id),
458 @fromBackingInt(@intCast(au.id)),
459459 ),
460460 };
461461 }
......@@ -463,13 +463,13 @@ pub const AnalUnit = packed struct(u64) {
463463 return switch (raw) {
464464 inline else => |id, tag| .{
465465 .kind = tag,
466 .id = @intFromEnum(id),
466 .id = @backingInt(id),
467467 },
468468 };
469469 }
470470
471471 pub fn toOptional(as: AnalUnit) Optional {
472 return @enumFromInt(@as(u64, @bitCast(as)));
472 return @fromBackingInt(@intCast(@as(u64, @bitCast(as))));
473473 }
474474 pub const Optional = enum(u64) {
475475 none = std.math.maxInt(u64),
......@@ -477,7 +477,7 @@ pub const AnalUnit = packed struct(u64) {
477477 pub fn unwrap(opt: Optional) ?AnalUnit {
478478 return switch (opt) {
479479 .none => null,
480 _ => @bitCast(@intFromEnum(opt)),
480 _ => @bitCast(@backingInt(opt)),
481481 };
482482 }
483483 };
......@@ -509,16 +509,16 @@ pub const ComptimeUnit = extern struct {
509509 tid: Zcu.PerThread.Id,
510510 index: u32,
511511 fn wrap(unwrapped: Unwrapped, ip: *const InternPool) ComptimeUnit.Id {
512 assert(@intFromEnum(unwrapped.tid) <= ip.getTidMask());
512 assert(@backingInt(unwrapped.tid) <= ip.getTidMask());
513513 assert(unwrapped.index <= ip.getIndexMask(u32));
514 return @enumFromInt(@shlExact(@as(u32, @intFromEnum(unwrapped.tid)), ip.tid_shift_32) |
515 unwrapped.index);
514 return @fromBackingInt(@intCast(@shlExact(@as(u32, @backingInt(unwrapped.tid)), ip.tid_shift_32) |
515 unwrapped.index));
516516 }
517517 };
518518 fn unwrap(id: Id, ip: *const InternPool) Unwrapped {
519519 return .{
520 .tid = @enumFromInt(@intFromEnum(id) >> ip.tid_shift_32 & ip.getTidMask()),
521 .index = @intFromEnum(id) & ip.getIndexMask(u31),
520 .tid = @fromBackingInt(@intCast(@backingInt(id) >> ip.tid_shift_32 & ip.getTidMask())),
521 .index = @backingInt(id) & ip.getIndexMask(u31),
522522 };
523523 }
524524
......@@ -633,30 +633,30 @@ pub const Nav = struct {
633633 pub fn unwrap(opt: Optional) ?Nav.Index {
634634 return switch (opt) {
635635 .none => null,
636 _ => @enumFromInt(@intFromEnum(opt)),
636 _ => @fromBackingInt(@intCast(@backingInt(opt))),
637637 };
638638 }
639639
640640 const debug_state = InternPool.debug_state;
641641 };
642642 pub fn toOptional(i: Nav.Index) Optional {
643 return @enumFromInt(@intFromEnum(i));
643 return @fromBackingInt(@intCast(@backingInt(i)));
644644 }
645645 const Unwrapped = struct {
646646 tid: Zcu.PerThread.Id,
647647 index: u32,
648648
649649 fn wrap(unwrapped: Unwrapped, ip: *const InternPool) Nav.Index {
650 assert(@intFromEnum(unwrapped.tid) <= ip.getTidMask());
650 assert(@backingInt(unwrapped.tid) <= ip.getTidMask());
651651 assert(unwrapped.index <= ip.getIndexMask(u30));
652 return @enumFromInt(@shlExact(@as(u32, @intFromEnum(unwrapped.tid)), ip.tid_shift_30) |
653 unwrapped.index);
652 return @fromBackingInt(@intCast(@shlExact(@as(u32, @backingInt(unwrapped.tid)), ip.tid_shift_30) |
653 unwrapped.index));
654654 }
655655 };
656656 fn unwrap(nav_index: Nav.Index, ip: *const InternPool) Unwrapped {
657657 return .{
658 .tid = @enumFromInt(@intFromEnum(nav_index) >> ip.tid_shift_30 & ip.getTidMask()),
659 .index = @intFromEnum(nav_index) & ip.getIndexMask(u30),
658 .tid = @fromBackingInt(@intCast(@backingInt(nav_index) >> ip.tid_shift_30 & ip.getTidMask())),
659 .index = @backingInt(nav_index) & ip.getIndexMask(u30),
660660 };
661661 }
662662
......@@ -762,19 +762,19 @@ pub fn removeDependenciesForDepender(ip: *InternPool, gpa: Allocator, depender:
762762 var opt_idx = (ip.first_dependency.fetchSwapRemove(depender) orelse return).value.toOptional();
763763
764764 while (opt_idx.unwrap()) |idx| {
765 const dep = ip.dep_entries.items[@intFromEnum(idx)];
765 const dep = ip.dep_entries.items[@backingInt(idx)];
766766 opt_idx = dep.next_dependee;
767767
768768 const prev_idx = dep.prev.unwrap() orelse {
769769 // This entry is the start of a list in some `*_deps`.
770770 // We cannot easily remove this mapping, so this must remain as a dummy entry.
771 ip.dep_entries.items[@intFromEnum(idx)].depender = .none;
771 ip.dep_entries.items[@backingInt(idx)].depender = .none;
772772 continue;
773773 };
774774
775 ip.dep_entries.items[@intFromEnum(prev_idx)].next = dep.next;
775 ip.dep_entries.items[@backingInt(prev_idx)].next = dep.next;
776776 if (dep.next.unwrap()) |next_idx| {
777 ip.dep_entries.items[@intFromEnum(next_idx)].prev = dep.prev;
777 ip.dep_entries.items[@backingInt(next_idx)].prev = dep.prev;
778778 }
779779
780780 ip.free_dep_entries.append(gpa, idx) catch {
......@@ -790,7 +790,7 @@ pub const DependencyIterator = struct {
790790 pub fn next(it: *DependencyIterator) ?AnalUnit {
791791 while (true) {
792792 const idx = it.next_entry.unwrap() orelse return null;
793 const entry = it.ip.dep_entries.items[@intFromEnum(idx)];
793 const entry = it.ip.dep_entries.items[@backingInt(idx)];
794794 it.next_entry = entry.next;
795795 if (entry.depender.unwrap()) |depender| return depender;
796796 }
......@@ -853,7 +853,7 @@ pub fn addDependency(ip: *InternPool, gpa: Allocator, depender: AnalUnit, depend
853853 };
854854
855855 if (deps.unwrap()) |first| {
856 if (ip.dep_entries.items[@intFromEnum(first)].depender == .none) {
856 if (ip.dep_entries.items[@backingInt(first)].depender == .none) {
857857 // Dummy entry, so we can reuse it rather than allocating a new one!
858858 break :new_index first;
859859 }
......@@ -861,11 +861,11 @@ pub fn addDependency(ip: *InternPool, gpa: Allocator, depender: AnalUnit, depend
861861
862862 // Prepend a new dependency.
863863 const new_index: DepEntry.Index, const ptr = if (ip.free_dep_entries.pop()) |new_index| new: {
864 break :new .{ new_index, &ip.dep_entries.items[@intFromEnum(new_index)] };
865 } else .{ @enumFromInt(ip.dep_entries.items.len), ip.dep_entries.addOneAssumeCapacity() };
864 break :new .{ new_index, &ip.dep_entries.items[@backingInt(new_index)] };
865 } else .{ @fromBackingInt(@intCast(ip.dep_entries.items.len)), ip.dep_entries.addOneAssumeCapacity() };
866866 if (deps.unwrap()) |old_first| {
867867 ptr.next = old_first.toOptional();
868 ip.dep_entries.items[@intFromEnum(old_first)].prev = new_index.toOptional();
868 ip.dep_entries.items[@backingInt(old_first)].prev = new_index.toOptional();
869869 } else {
870870 ptr.next = .none;
871871 }
......@@ -887,18 +887,18 @@ pub fn addDependency(ip: *InternPool, gpa: Allocator, depender: AnalUnit, depend
887887 .memoized_state => comptime unreachable,
888888 }.getOrPut(gpa, dependee_payload);
889889
890 if (gop.found_existing and ip.dep_entries.items[@intFromEnum(gop.value_ptr.*)].depender == .none) {
890 if (gop.found_existing and ip.dep_entries.items[@backingInt(gop.value_ptr.*)].depender == .none) {
891891 // Dummy entry, so we can reuse it rather than allocating a new one!
892892 break :new_index gop.value_ptr.*;
893893 }
894894
895895 // Prepend a new dependency.
896896 const new_index: DepEntry.Index, const ptr = if (ip.free_dep_entries.pop()) |new_index| new: {
897 break :new .{ new_index, &ip.dep_entries.items[@intFromEnum(new_index)] };
898 } else .{ @enumFromInt(ip.dep_entries.items.len), ip.dep_entries.addOneAssumeCapacity() };
897 break :new .{ new_index, &ip.dep_entries.items[@backingInt(new_index)] };
898 } else .{ @fromBackingInt(@intCast(ip.dep_entries.items.len)), ip.dep_entries.addOneAssumeCapacity() };
899899 if (gop.found_existing) {
900900 ptr.next = gop.value_ptr.*.toOptional();
901 ip.dep_entries.items[@intFromEnum(gop.value_ptr.*)].prev = new_index.toOptional();
901 ip.dep_entries.items[@backingInt(gop.value_ptr.*)].prev = new_index.toOptional();
902902 } else {
903903 ptr.next = .none;
904904 }
......@@ -907,9 +907,9 @@ pub fn addDependency(ip: *InternPool, gpa: Allocator, depender: AnalUnit, depend
907907 },
908908 };
909909
910 ip.dep_entries.items[@intFromEnum(new_index)].depender = depender.toOptional();
911 ip.dep_entries.items[@intFromEnum(new_index)].prev = .none;
912 ip.dep_entries.items[@intFromEnum(new_index)].next_dependee = first_depender_dep;
910 ip.dep_entries.items[@backingInt(new_index)].depender = depender.toOptional();
911 ip.dep_entries.items[@backingInt(new_index)].prev = .none;
912 ip.dep_entries.items[@backingInt(new_index)].next_dependee = first_depender_dep;
913913 ip.first_dependency.putAssumeCapacity(depender, new_index);
914914}
915915
......@@ -942,7 +942,7 @@ pub const DepEntry = extern struct {
942942 pub const Index = enum(u32) {
943943 _,
944944 pub fn toOptional(dep: DepEntry.Index) Optional {
945 return @enumFromInt(@intFromEnum(dep));
945 return @fromBackingInt(@intCast(@backingInt(dep)));
946946 }
947947 pub const Optional = enum(u32) {
948948 none = std.math.maxInt(u32),
......@@ -950,7 +950,7 @@ pub const DepEntry = extern struct {
950950 pub fn unwrap(opt: Optional) ?DepEntry.Index {
951951 return switch (opt) {
952952 .none => null,
953 _ => @enumFromInt(@intFromEnum(opt)),
953 _ => @fromBackingInt(@intCast(@backingInt(opt))),
954954 };
955955 }
956956 };
......@@ -1439,11 +1439,11 @@ const Local = struct {
14391439};
14401440
14411441pub fn getLocal(ip: *InternPool, tid: Zcu.PerThread.Id) *Local {
1442 return &ip.locals[@intFromEnum(tid)];
1442 return &ip.locals[@backingInt(tid)];
14431443}
14441444
14451445pub fn getLocalShared(ip: *const InternPool, tid: Zcu.PerThread.Id) *const Local.Shared {
1446 return &ip.locals[@intFromEnum(tid)].shared;
1446 return &ip.locals[@backingInt(tid)].shared;
14471447}
14481448
14491449const Shard = struct {
......@@ -1596,7 +1596,7 @@ pub const OptionalMapIndex = enum(u32) {
15961596
15971597 pub fn unwrap(oi: OptionalMapIndex) ?MapIndex {
15981598 if (oi == .none) return null;
1599 return @enumFromInt(@intFromEnum(oi));
1599 return @fromBackingInt(@intCast(@backingInt(oi)));
16001600 }
16011601};
16021602
......@@ -1611,7 +1611,7 @@ pub const MapIndex = enum(u32) {
16111611 }
16121612
16131613 pub fn toOptional(i: MapIndex) OptionalMapIndex {
1614 return @enumFromInt(@intFromEnum(i));
1614 return @fromBackingInt(@intCast(@backingInt(i)));
16151615 }
16161616
16171617 const Unwrapped = struct {
......@@ -1619,16 +1619,16 @@ pub const MapIndex = enum(u32) {
16191619 index: u32,
16201620
16211621 fn wrap(unwrapped: Unwrapped, ip: *const InternPool) MapIndex {
1622 assert(@intFromEnum(unwrapped.tid) <= ip.getTidMask());
1622 assert(@backingInt(unwrapped.tid) <= ip.getTidMask());
16231623 assert(unwrapped.index <= ip.getIndexMask(u32));
1624 return @enumFromInt(@shlExact(@as(u32, @intFromEnum(unwrapped.tid)), ip.tid_shift_32) |
1625 unwrapped.index);
1624 return @fromBackingInt(@intCast(@shlExact(@as(u32, @backingInt(unwrapped.tid)), ip.tid_shift_32) |
1625 unwrapped.index));
16261626 }
16271627 };
16281628 fn unwrap(map_index: MapIndex, ip: *const InternPool) Unwrapped {
16291629 return .{
1630 .tid = @enumFromInt(@intFromEnum(map_index) >> ip.tid_shift_32 & ip.getTidMask()),
1631 .index = @intFromEnum(map_index) & ip.getIndexMask(u32),
1630 .tid = @fromBackingInt(@intCast(@backingInt(map_index) >> ip.tid_shift_32 & ip.getTidMask())),
1631 .index = @backingInt(map_index) & ip.getIndexMask(u32),
16321632 };
16331633 }
16341634};
......@@ -1644,25 +1644,25 @@ pub const NamespaceIndex = enum(u32) {
16441644 index: u32,
16451645
16461646 fn wrap(unwrapped: Unwrapped, ip: *const InternPool) NamespaceIndex {
1647 assert(@intFromEnum(unwrapped.tid) <= ip.getTidMask());
1647 assert(@backingInt(unwrapped.tid) <= ip.getTidMask());
16481648 assert(unwrapped.bucket_index <= ip.getIndexMask(u32) >> Local.namespaces_bucket_width);
16491649 assert(unwrapped.index <= Local.namespaces_bucket_mask);
1650 return @enumFromInt(@shlExact(@as(u32, @intFromEnum(unwrapped.tid)), ip.tid_shift_32) |
1650 return @fromBackingInt(@intCast(@shlExact(@as(u32, @backingInt(unwrapped.tid)), ip.tid_shift_32) |
16511651 unwrapped.bucket_index << Local.namespaces_bucket_width |
1652 unwrapped.index);
1652 unwrapped.index));
16531653 }
16541654 };
16551655 fn unwrap(namespace_index: NamespaceIndex, ip: *const InternPool) Unwrapped {
1656 const index = @intFromEnum(namespace_index) & ip.getIndexMask(u32);
1656 const index = @backingInt(namespace_index) & ip.getIndexMask(u32);
16571657 return .{
1658 .tid = @enumFromInt(@intFromEnum(namespace_index) >> ip.tid_shift_32 & ip.getTidMask()),
1658 .tid = @fromBackingInt(@intCast(@backingInt(namespace_index) >> ip.tid_shift_32 & ip.getTidMask())),
16591659 .bucket_index = index >> Local.namespaces_bucket_width,
16601660 .index = index & Local.namespaces_bucket_mask,
16611661 };
16621662 }
16631663
16641664 pub fn toOptional(i: NamespaceIndex) OptionalNamespaceIndex {
1665 return @enumFromInt(@intFromEnum(i));
1665 return @fromBackingInt(@intCast(@backingInt(i)));
16661666 }
16671667};
16681668
......@@ -1671,12 +1671,12 @@ pub const OptionalNamespaceIndex = enum(u32) {
16711671 _,
16721672
16731673 pub fn init(oi: ?NamespaceIndex) OptionalNamespaceIndex {
1674 return @enumFromInt(@intFromEnum(oi orelse return .none));
1674 return @fromBackingInt(@intCast(@backingInt(oi orelse return .none)));
16751675 }
16761676
16771677 pub fn unwrap(oi: OptionalNamespaceIndex) ?NamespaceIndex {
16781678 if (oi == .none) return null;
1679 return @enumFromInt(@intFromEnum(oi));
1679 return @fromBackingInt(@intCast(@backingInt(oi)));
16801680 }
16811681};
16821682
......@@ -1688,20 +1688,20 @@ pub const FileIndex = enum(u32) {
16881688 index: u32,
16891689
16901690 fn wrap(unwrapped: Unwrapped, ip: *const InternPool) FileIndex {
1691 assert(@intFromEnum(unwrapped.tid) <= ip.getTidMask());
1691 assert(@backingInt(unwrapped.tid) <= ip.getTidMask());
16921692 assert(unwrapped.index <= ip.getIndexMask(u32));
1693 return @enumFromInt(@shlExact(@as(u32, @intFromEnum(unwrapped.tid)), ip.tid_shift_32) |
1694 unwrapped.index);
1693 return @fromBackingInt(@intCast(@shlExact(@as(u32, @backingInt(unwrapped.tid)), ip.tid_shift_32) |
1694 unwrapped.index));
16951695 }
16961696 };
16971697 pub fn unwrap(file_index: FileIndex, ip: *const InternPool) Unwrapped {
16981698 return .{
1699 .tid = @enumFromInt(@intFromEnum(file_index) >> ip.tid_shift_32 & ip.getTidMask()),
1700 .index = @intFromEnum(file_index) & ip.getIndexMask(u32),
1699 .tid = @fromBackingInt(@intCast(@backingInt(file_index) >> ip.tid_shift_32 & ip.getTidMask())),
1700 .index = @backingInt(file_index) & ip.getIndexMask(u32),
17011701 };
17021702 }
17031703 pub fn toOptional(i: FileIndex) Optional {
1704 return @enumFromInt(@intFromEnum(i));
1704 return @fromBackingInt(@intCast(@backingInt(i)));
17051705 }
17061706 pub const Optional = enum(u32) {
17071707 none = std.math.maxInt(u32),
......@@ -1709,7 +1709,7 @@ pub const FileIndex = enum(u32) {
17091709 pub fn unwrap(opt: Optional) ?FileIndex {
17101710 return switch (opt) {
17111711 .none => null,
1712 _ => @enumFromInt(@intFromEnum(opt)),
1712 _ => @fromBackingInt(@intCast(@backingInt(opt))),
17131713 };
17141714 }
17151715 };
......@@ -1739,7 +1739,7 @@ pub const String = enum(u32) {
17391739 pub fn toNullTerminatedString(string: String, len: u64, ip: *const InternPool) NullTerminatedString {
17401740 assert(std.mem.indexOfScalar(u8, string.toSlice(len, ip), 0) == null);
17411741 assert(string.at(len, ip) == 0);
1742 return @enumFromInt(@intFromEnum(string));
1742 return @fromBackingInt(@intCast(@backingInt(string)));
17431743 }
17441744
17451745 const Unwrapped = struct {
......@@ -1747,16 +1747,16 @@ pub const String = enum(u32) {
17471747 index: u32,
17481748
17491749 fn wrap(unwrapped: Unwrapped, ip: *const InternPool) String {
1750 assert(@intFromEnum(unwrapped.tid) <= ip.getTidMask());
1750 assert(@backingInt(unwrapped.tid) <= ip.getTidMask());
17511751 assert(unwrapped.index <= ip.getIndexMask(u32));
1752 return @enumFromInt(@shlExact(@as(u32, @intFromEnum(unwrapped.tid)), ip.tid_shift_32) |
1753 unwrapped.index);
1752 return @fromBackingInt(@intCast(@shlExact(@as(u32, @backingInt(unwrapped.tid)), ip.tid_shift_32) |
1753 unwrapped.index));
17541754 }
17551755 };
17561756 fn unwrap(string: String, ip: *const InternPool) Unwrapped {
17571757 return .{
1758 .tid = @enumFromInt(@intFromEnum(string) >> ip.tid_shift_32 & ip.getTidMask()),
1759 .index = @intFromEnum(string) & ip.getIndexMask(u32),
1758 .tid = @fromBackingInt(@intCast(@backingInt(string) >> ip.tid_shift_32 & ip.getTidMask())),
1759 .index = @backingInt(string) & ip.getIndexMask(u32),
17601760 };
17611761 }
17621762
......@@ -1779,7 +1779,7 @@ pub const OptionalString = enum(u32) {
17791779 _,
17801780
17811781 pub fn unwrap(string: OptionalString) ?String {
1782 return if (string != .none) @enumFromInt(@intFromEnum(string)) else null;
1782 return if (string != .none) @fromBackingInt(@intCast(@backingInt(string))) else null;
17831783 }
17841784
17851785 pub fn toSlice(string: OptionalString, len: u64, ip: *const InternPool) ?[]const u8 {
......@@ -1812,11 +1812,11 @@ pub const NullTerminatedString = enum(u32) {
18121812 };
18131813
18141814 pub fn toString(self: NullTerminatedString) String {
1815 return @enumFromInt(@intFromEnum(self));
1815 return @fromBackingInt(@intCast(@backingInt(self)));
18161816 }
18171817
18181818 pub fn toOptional(self: NullTerminatedString) OptionalNullTerminatedString {
1819 return @enumFromInt(@intFromEnum(self));
1819 return @fromBackingInt(@intCast(@backingInt(self)));
18201820 }
18211821
18221822 pub fn toSlice(string: NullTerminatedString, ip: *const InternPool) [:0]const u8 {
......@@ -1851,14 +1851,14 @@ pub const NullTerminatedString = enum(u32) {
18511851
18521852 pub fn hash(ctx: @This(), a: NullTerminatedString) u32 {
18531853 _ = ctx;
1854 return std.hash.int(@intFromEnum(a));
1854 return std.hash.int(@backingInt(a));
18551855 }
18561856 };
18571857
18581858 /// Compare based on integer value alone, ignoring the string contents.
18591859 pub fn indexLessThan(ctx: void, a: NullTerminatedString, b: NullTerminatedString) bool {
18601860 _ = ctx;
1861 return @intFromEnum(a) < @intFromEnum(b);
1861 return @backingInt(a) < @backingInt(b);
18621862 }
18631863
18641864 pub fn toUnsigned(string: NullTerminatedString, ip: *const InternPool) ?u32 {
......@@ -1901,7 +1901,7 @@ pub const OptionalNullTerminatedString = enum(u32) {
19011901 _,
19021902
19031903 pub fn unwrap(string: OptionalNullTerminatedString) ?NullTerminatedString {
1904 return if (string != .none) @enumFromInt(@intFromEnum(string)) else null;
1904 return if (string != .none) @fromBackingInt(@intCast(@backingInt(string))) else null;
19051905 }
19061906
19071907 pub fn toSlice(string: OptionalNullTerminatedString, ip: *const InternPool) ?[:0]const u8 {
......@@ -1923,18 +1923,18 @@ pub const CaptureValue = packed struct(u32) {
19231923
19241924 pub fn wrap(val: Unwrapped) CaptureValue {
19251925 return switch (val) {
1926 .@"comptime" => |i| .{ .tag = .@"comptime", .idx = @intCast(@intFromEnum(i)) },
1927 .runtime => |i| .{ .tag = .runtime, .idx = @intCast(@intFromEnum(i)) },
1928 .nav_val => |i| .{ .tag = .nav_val, .idx = @intCast(@intFromEnum(i)) },
1929 .nav_ref => |i| .{ .tag = .nav_ref, .idx = @intCast(@intFromEnum(i)) },
1926 .@"comptime" => |i| .{ .tag = .@"comptime", .idx = @intCast(@backingInt(i)) },
1927 .runtime => |i| .{ .tag = .runtime, .idx = @intCast(@backingInt(i)) },
1928 .nav_val => |i| .{ .tag = .nav_val, .idx = @intCast(@backingInt(i)) },
1929 .nav_ref => |i| .{ .tag = .nav_ref, .idx = @intCast(@backingInt(i)) },
19301930 };
19311931 }
19321932 pub fn unwrap(val: CaptureValue) Unwrapped {
19331933 return switch (val.tag) {
1934 .@"comptime" => .{ .@"comptime" = @enumFromInt(val.idx) },
1935 .runtime => .{ .runtime = @enumFromInt(val.idx) },
1936 .nav_val => .{ .nav_val = @enumFromInt(val.idx) },
1937 .nav_ref => .{ .nav_ref = @enumFromInt(val.idx) },
1934 .@"comptime" => .{ .@"comptime" = @fromBackingInt(@intCast(val.idx)) },
1935 .runtime => .{ .runtime = @fromBackingInt(@intCast(val.idx)) },
1936 .nav_val => .{ .nav_val = @fromBackingInt(@intCast(val.idx)) },
1937 .nav_ref => .{ .nav_ref = @fromBackingInt(@intCast(val.idx)) },
19381938 };
19391939 }
19401940
......@@ -2605,7 +2605,7 @@ pub const Key = union(enum) {
26052605 pub fn hash64(key: Key, ip: *const InternPool) u64 {
26062606 const asBytes = std.mem.asBytes;
26072607 const KeyTag = @typeInfo(Key).@"union".tag_type.?;
2608 const seed = @intFromEnum(@as(KeyTag, key));
2608 const seed = @backingInt(@as(KeyTag, key));
26092609 return switch (key) {
26102610 inline .ptr_type,
26112611 .array_type,
......@@ -2629,7 +2629,7 @@ pub const Key = union(enum) {
26292629 return Hash.hash(seed, asBytes(&x));
26302630 },
26312631
2632 .int_type => |x| Hash.hash(seed + @intFromEnum(x.signedness), asBytes(&x.bits)),
2632 .int_type => |x| Hash.hash(seed + @backingInt(x.signedness), asBytes(&x.bits)),
26332633
26342634 .error_union => |x| switch (x.val) {
26352635 .err_name => |y| Hash.hash(seed + 0, asBytes(&x.ty) ++ asBytes(&y)),
......@@ -2695,7 +2695,7 @@ pub const Key = union(enum) {
26952695 // Int-to-ptr pointers are hashed separately than decl-referencing pointers.
26962696 // This is sound due to pointer provenance rules.
26972697 const addr_tag: Key.Ptr.BaseAddr.Tag = ptr.base_addr;
2698 const seed2 = seed + @intFromEnum(addr_tag);
2698 const seed2 = seed + @backingInt(addr_tag);
26992699 const big_offset: i128 = ptr.byte_offset;
27002700 const common = asBytes(&ptr.ty) ++ asBytes(&big_offset);
27012701 return switch (ptr.base_addr) {
......@@ -2829,7 +2829,7 @@ pub const Key = union(enum) {
28292829 asBytes(&e.is_threadlocal) ++ asBytes(&e.is_dll_import) ++
28302830 asBytes(&e.relocation) ++
28312831 asBytes(&e.is_const) ++ asBytes(&e.alignment) ++ asBytes(&e.@"addrspace") ++
2832 asBytes(&e.zir_index) ++ &[1]u8{@intFromEnum(e.source)}),
2832 asBytes(&e.zir_index) ++ &[1]u8{@backingInt(e.source)}),
28332833
28342834 .bitpack => |bitpack| Hash.hash(seed, asBytes(&bitpack.ty) ++ asBytes(&bitpack.backing_int_val)),
28352835 };
......@@ -3304,7 +3304,7 @@ pub const LoadedStructType = struct {
33043304 return switch (i) {
33053305 .omitted => null,
33063306 .unresolved => unreachable,
3307 else => @intFromEnum(i),
3307 else => @backingInt(i),
33083308 };
33093309 }
33103310 };
......@@ -3642,7 +3642,7 @@ pub fn loadStructType(ip: *const InternPool, index: Index) LoadedStructType {
36423642 _ => |n| .{
36433643 .tid = unwrapped_index.tid,
36443644 .start = extra_index,
3645 .len = @intFromEnum(n),
3645 .len = @backingInt(n),
36463646 },
36473647 };
36483648 extra_index += captures.len;
......@@ -3778,7 +3778,7 @@ pub fn loadUnionType(ip: *const InternPool, index: Index) LoadedUnionType {
37783778 _ => |n| .{
37793779 .tid = unwrapped_index.tid,
37803780 .start = extra_index,
3781 .len = @intFromEnum(n),
3781 .len = @backingInt(n),
37823782 },
37833783 };
37843784 extra_index += captures.len;
......@@ -3834,30 +3834,30 @@ pub fn loadEnumType(ip: *const InternPool, index: Index) LoadedEnumType {
38343834 var extra_index: u32 = @intCast(extra.end);
38353835 const zir_index: TrackedInst.Index.Optional, const captures: CaptureValue.Slice, const owner_union: Index = switch (extra.data.bits.captures_len) {
38363836 .reified => info: {
3837 const zir_index: TrackedInst.Index = @enumFromInt(extra_items[extra_index]);
3837 const zir_index: TrackedInst.Index = @fromBackingInt(@intCast(extra_items[extra_index]));
38383838 extra_index += 1;
38393839 extra_index += 2; // type_hash: PackedU64
38403840 break :info .{ zir_index.toOptional(), .empty, .none };
38413841 },
38423842 .generated_union_tag => info: {
3843 const owner_union: Index = @enumFromInt(extra_items[extra_index]);
3843 const owner_union: Index = @fromBackingInt(@intCast(extra_items[extra_index]));
38443844 extra_index += 1;
38453845 break :info .{ .none, .empty, owner_union };
38463846 },
38473847 _ => |n| info: {
3848 const zir_index: TrackedInst.Index = @enumFromInt(extra_items[extra_index]);
3848 const zir_index: TrackedInst.Index = @fromBackingInt(@intCast(extra_items[extra_index]));
38493849 extra_index += 1;
38503850 const captures: CaptureValue.Slice = .{
38513851 .tid = unwrapped_index.tid,
38523852 .start = extra_index,
3853 .len = @intFromEnum(n),
3853 .len = @backingInt(n),
38543854 };
38553855 extra_index += captures.len;
38563856 break :info .{ zir_index.toOptional(), captures, .none };
38573857 },
38583858 };
38593859 const field_value_map: OptionalMapIndex = if (explicit_int_tag) m: {
3860 const map: MapIndex = @enumFromInt(extra_items[extra_index]);
3860 const map: MapIndex = @fromBackingInt(@intCast(extra_items[extra_index]));
38613861 extra_index += 1;
38623862 break :m map.toOptional();
38633863 } else .none;
......@@ -4138,7 +4138,7 @@ pub const Index = enum(u32) {
41384138
41394139 pub fn hash(ctx: @This(), a: Index) u32 {
41404140 _ = ctx;
4141 return std.hash.int(@intFromEnum(a));
4141 return std.hash.int(@backingInt(a));
41424142 }
41434143 };
41444144
......@@ -4147,10 +4147,10 @@ pub const Index = enum(u32) {
41474147 index: u32,
41484148
41494149 fn wrap(unwrapped: Unwrapped, ip: *const InternPool) Index {
4150 assert(@intFromEnum(unwrapped.tid) <= ip.getTidMask());
4150 assert(@backingInt(unwrapped.tid) <= ip.getTidMask());
41514151 assert(unwrapped.index <= ip.getIndexMask(u30));
4152 return @enumFromInt(@shlExact(@as(u32, @intFromEnum(unwrapped.tid)), ip.tid_shift_30) |
4153 unwrapped.index);
4152 return @fromBackingInt(@intCast(@shlExact(@as(u32, @backingInt(unwrapped.tid)), ip.tid_shift_30) |
4153 unwrapped.index));
41544154 }
41554155
41564156 pub fn getExtra(unwrapped: Unwrapped, ip: *const InternPool) Local.Extra {
......@@ -4188,8 +4188,8 @@ pub const Index = enum(u32) {
41884188 };
41894189 pub fn unwrap(index: Index, ip: *const InternPool) Unwrapped {
41904190 return .{
4191 .tid = @enumFromInt(@intFromEnum(index) >> ip.tid_shift_30 & ip.getTidMask()),
4192 .index = @intFromEnum(index) & ip.getIndexMask(u30),
4191 .tid = @fromBackingInt(@intCast(@backingInt(index) >> ip.tid_shift_30 & ip.getTidMask())),
4192 .index = @backingInt(index) & ip.getIndexMask(u30),
41934193 };
41944194 }
41954195
......@@ -5794,46 +5794,46 @@ pub const TypeTuple = struct {
57945794/// implement logic that only wants to deal with types because the logic can
57955795/// ignore all simple values. Note that technically, types are values.
57965796pub const SimpleType = enum(u32) {
5797 f16 = @intFromEnum(Index.f16_type),
5798 f32 = @intFromEnum(Index.f32_type),
5799 f64 = @intFromEnum(Index.f64_type),
5800 f80 = @intFromEnum(Index.f80_type),
5801 f128 = @intFromEnum(Index.f128_type),
5802 usize = @intFromEnum(Index.usize_type),
5803 isize = @intFromEnum(Index.isize_type),
5804 c_char = @intFromEnum(Index.c_char_type),
5805 c_short = @intFromEnum(Index.c_short_type),
5806 c_ushort = @intFromEnum(Index.c_ushort_type),
5807 c_int = @intFromEnum(Index.c_int_type),
5808 c_uint = @intFromEnum(Index.c_uint_type),
5809 c_long = @intFromEnum(Index.c_long_type),
5810 c_ulong = @intFromEnum(Index.c_ulong_type),
5811 c_longlong = @intFromEnum(Index.c_longlong_type),
5812 c_ulonglong = @intFromEnum(Index.c_ulonglong_type),
5813 c_longdouble = @intFromEnum(Index.c_longdouble_type),
5814 anyopaque = @intFromEnum(Index.anyopaque_type),
5815 bool = @intFromEnum(Index.bool_type),
5816 void = @intFromEnum(Index.void_type),
5817 type = @intFromEnum(Index.type_type),
5818 anyerror = @intFromEnum(Index.anyerror_type),
5819 comptime_int = @intFromEnum(Index.comptime_int_type),
5820 comptime_float = @intFromEnum(Index.comptime_float_type),
5821 noreturn = @intFromEnum(Index.noreturn_type),
5822 null = @intFromEnum(Index.null_type),
5823 undefined = @intFromEnum(Index.undefined_type),
5824 enum_literal = @intFromEnum(Index.enum_literal_type),
5825
5826 adhoc_inferred_error_set = @intFromEnum(Index.adhoc_inferred_error_set_type),
5827 generic_poison = @intFromEnum(Index.generic_poison_type),
5797 f16 = @backingInt(Index.f16_type),
5798 f32 = @backingInt(Index.f32_type),
5799 f64 = @backingInt(Index.f64_type),
5800 f80 = @backingInt(Index.f80_type),
5801 f128 = @backingInt(Index.f128_type),
5802 usize = @backingInt(Index.usize_type),
5803 isize = @backingInt(Index.isize_type),
5804 c_char = @backingInt(Index.c_char_type),
5805 c_short = @backingInt(Index.c_short_type),
5806 c_ushort = @backingInt(Index.c_ushort_type),
5807 c_int = @backingInt(Index.c_int_type),
5808 c_uint = @backingInt(Index.c_uint_type),
5809 c_long = @backingInt(Index.c_long_type),
5810 c_ulong = @backingInt(Index.c_ulong_type),
5811 c_longlong = @backingInt(Index.c_longlong_type),
5812 c_ulonglong = @backingInt(Index.c_ulonglong_type),
5813 c_longdouble = @backingInt(Index.c_longdouble_type),
5814 anyopaque = @backingInt(Index.anyopaque_type),
5815 bool = @backingInt(Index.bool_type),
5816 void = @backingInt(Index.void_type),
5817 type = @backingInt(Index.type_type),
5818 anyerror = @backingInt(Index.anyerror_type),
5819 comptime_int = @backingInt(Index.comptime_int_type),
5820 comptime_float = @backingInt(Index.comptime_float_type),
5821 noreturn = @backingInt(Index.noreturn_type),
5822 null = @backingInt(Index.null_type),
5823 undefined = @backingInt(Index.undefined_type),
5824 enum_literal = @backingInt(Index.enum_literal_type),
5825
5826 adhoc_inferred_error_set = @backingInt(Index.adhoc_inferred_error_set_type),
5827 generic_poison = @backingInt(Index.generic_poison_type),
58285828};
58295829
58305830pub const SimpleValue = enum(u32) {
5831 void = @intFromEnum(Index.void_value),
5831 void = @backingInt(Index.void_value),
58325832 /// This is untyped `null`.
5833 null = @intFromEnum(Index.null_value),
5834 true = @intFromEnum(Index.bool_true),
5835 false = @intFromEnum(Index.bool_false),
5836 @"unreachable" = @intFromEnum(Index.unreachable_value),
5833 null = @backingInt(Index.null_value),
5834 true = @backingInt(Index.bool_true),
5835 false = @backingInt(Index.bool_false),
5836 @"unreachable" = @backingInt(Index.unreachable_value),
58375837};
58385838
58395839/// Stored as a power-of-two, with one special value to indicate none.
......@@ -5851,14 +5851,14 @@ pub const Alignment = enum(u6) {
58515851 pub fn toByteUnits(a: Alignment) ?u64 {
58525852 return switch (a) {
58535853 .none => null,
5854 else => @as(u64, 1) << @intFromEnum(a),
5854 else => @as(u64, 1) << @backingInt(a),
58555855 };
58565856 }
58575857
58585858 pub fn fromByteUnits(n: u64) Alignment {
58595859 if (n == 0) return .none;
58605860 assert(std.math.isPowerOfTwo(n));
5861 return @enumFromInt(@ctz(n));
5861 return @fromBackingInt(@intCast(@ctz(n)));
58625862 }
58635863
58645864 pub fn fromNonzeroByteUnits(n: u64) Alignment {
......@@ -5868,21 +5868,21 @@ pub const Alignment = enum(u6) {
58685868
58695869 pub fn toLog2Units(a: Alignment) u6 {
58705870 assert(a != .none);
5871 return @intFromEnum(a);
5871 return @backingInt(a);
58725872 }
58735873
58745874 /// This is just a glorified `@enumFromInt` but using it can help
58755875 /// document the intended conversion.
58765876 /// The parameter uses a u32 for convenience at the callsite.
58775877 pub fn fromLog2Units(a: u32) Alignment {
5878 assert(a != @intFromEnum(Alignment.none));
5879 return @enumFromInt(a);
5878 assert(a != @backingInt(Alignment.none));
5879 return @fromBackingInt(@intCast(a));
58805880 }
58815881
58825882 pub fn order(lhs: Alignment, rhs: Alignment) std.math.Order {
58835883 assert(lhs != .none);
58845884 assert(rhs != .none);
5885 return std.math.order(@intFromEnum(lhs), @intFromEnum(rhs));
5885 return std.math.order(@backingInt(lhs), @backingInt(rhs));
58865886 }
58875887
58885888 /// Relaxed comparison. We have this as default because a lot of callsites
......@@ -5896,7 +5896,7 @@ pub const Alignment = enum(u6) {
58965896 pub fn compareStrict(lhs: Alignment, op: std.math.CompareOperator, rhs: Alignment) bool {
58975897 assert(lhs != .none);
58985898 assert(rhs != .none);
5899 return std.math.compare(@intFromEnum(lhs), op, @intFromEnum(rhs));
5899 return std.math.compare(@backingInt(lhs), op, @backingInt(rhs));
59005900 }
59015901
59025902 /// Treats `none` as zero.
......@@ -5911,7 +5911,7 @@ pub const Alignment = enum(u6) {
59115911 pub fn maxStrict(lhs: Alignment, rhs: Alignment) Alignment {
59125912 assert(lhs != .none);
59135913 assert(rhs != .none);
5914 return @enumFromInt(@max(@intFromEnum(lhs), @intFromEnum(rhs)));
5914 return @fromBackingInt(@intCast(@max(@backingInt(lhs), @backingInt(rhs))));
59155915 }
59165916
59175917 /// Treats `none` as zero.
......@@ -5926,7 +5926,7 @@ pub const Alignment = enum(u6) {
59265926 pub fn minStrict(lhs: Alignment, rhs: Alignment) Alignment {
59275927 assert(lhs != .none);
59285928 assert(rhs != .none);
5929 return @enumFromInt(@min(@intFromEnum(lhs), @intFromEnum(rhs)));
5929 return @fromBackingInt(@intCast(@min(@backingInt(lhs), @backingInt(rhs))));
59305930 }
59315931
59325932 /// Given a base address known to be aligned to `a`,
......@@ -5938,21 +5938,21 @@ pub const Alignment = enum(u6) {
59385938 /// Align an address forwards to this alignment.
59395939 pub fn forward(a: Alignment, addr: u64) u64 {
59405940 assert(a != .none);
5941 const x = (@as(u64, 1) << @intFromEnum(a)) - 1;
5941 const x = (@as(u64, 1) << @backingInt(a)) - 1;
59425942 return (addr + x) & ~x;
59435943 }
59445944
59455945 /// Align an address backwards to this alignment.
59465946 pub fn backward(a: Alignment, addr: u64) u64 {
59475947 assert(a != .none);
5948 const x = (@as(u64, 1) << @intFromEnum(a)) - 1;
5948 const x = (@as(u64, 1) << @backingInt(a)) - 1;
59495949 return addr & ~x;
59505950 }
59515951
59525952 /// Check if an address is aligned to this amount.
59535953 pub fn check(a: Alignment, addr: u64) bool {
59545954 assert(a != .none);
5955 return @ctz(addr) >= @intFromEnum(a);
5955 return @ctz(addr) >= @backingInt(a);
59565956 }
59575957
59585958 /// An array of `Alignment` objects existing within the `extra` array.
......@@ -5981,25 +5981,25 @@ pub const Alignment = enum(u6) {
59815981 };
59825982
59835983 pub fn toRelaxedCompareUnits(a: Alignment) u8 {
5984 const n: u8 = @intFromEnum(a);
5985 assert(n <= @intFromEnum(Alignment.none));
5986 if (n == @intFromEnum(Alignment.none)) return 0;
5984 const n: u8 = @backingInt(a);
5985 assert(n <= @backingInt(Alignment.none));
5986 if (n == @backingInt(Alignment.none)) return 0;
59875987 return n + 1;
59885988 }
59895989
59905990 pub fn toStdMem(a: Alignment) std.mem.Alignment {
59915991 assert(a != .none);
5992 return @enumFromInt(@intFromEnum(a));
5992 return @fromBackingInt(@intCast(@backingInt(a)));
59935993 }
59945994
59955995 pub fn fromStdMem(a: std.mem.Alignment) Alignment {
5996 const r: Alignment = @enumFromInt(@intFromEnum(a));
5996 const r: Alignment = @fromBackingInt(@intCast(@backingInt(a)));
59975997 assert(r != .none);
59985998 return r;
59995999 }
60006000
60016001 pub fn toLlvm(a: Alignment) std.zig.llvm.Builder.Alignment {
6002 return @enumFromInt(@intFromEnum(a));
6002 return @fromBackingInt(@intCast(@backingInt(a)));
60036003 }
60046004};
60056005
......@@ -6349,7 +6349,7 @@ pub fn init(ip: *InternPool, gpa: Allocator, io: Io, available_threads: usize) !
63496349
63506350 // This inserts all the statically-known values into the intern pool in the
63516351 // order expected.
6352 for (&static_keys, 0..) |key, key_index| switch (@as(Index, @enumFromInt(key_index))) {
6352 for (&static_keys, 0..) |key, key_index| switch (@as(Index, @fromBackingInt(@intCast(key_index)))) {
63536353 .empty_tuple_type => assert(try ip.getTupleType(gpa, io, .main, .{
63546354 .types = &.{},
63556355 .values = &.{},
......@@ -6476,8 +6476,8 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
64766476 .sentinel = .none,
64776477 } };
64786478 },
6479 .simple_type => .{ .simple_type = @enumFromInt(@intFromEnum(index)) },
6480 .simple_value => .{ .simple_value = @enumFromInt(@intFromEnum(index)) },
6479 .simple_type => .{ .simple_type = @fromBackingInt(@intCast(@backingInt(index))) },
6480 .simple_value => .{ .simple_value = @fromBackingInt(@intCast(@backingInt(index))) },
64816481
64826482 .type_vector => {
64836483 const vector_info = extraData(unwrapped_index.getExtra(ip), Vector, data);
......@@ -6490,7 +6490,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
64906490 .type_pointer => .{ .ptr_type = extraData(unwrapped_index.getExtra(ip), Tag.TypePointer, data) },
64916491
64926492 .type_slice => {
6493 const many_ptr_index: Index = @enumFromInt(data);
6493 const many_ptr_index: Index = @fromBackingInt(@intCast(data));
64946494 const many_ptr_unwrapped = many_ptr_index.unwrap(ip);
64956495 const many_ptr_item = many_ptr_unwrapped.getItem(ip);
64966496 assert(many_ptr_item.tag == .type_pointer);
......@@ -6499,17 +6499,17 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
64996499 return .{ .ptr_type = ptr_info };
65006500 },
65016501
6502 .type_optional => .{ .opt_type = @enumFromInt(data) },
6503 .type_anyframe => .{ .anyframe_type = @enumFromInt(data) },
6502 .type_optional => .{ .opt_type = @fromBackingInt(@intCast(data)) },
6503 .type_anyframe => .{ .anyframe_type = @fromBackingInt(@intCast(data)) },
65046504
65056505 .type_error_union => .{ .error_union_type = extraData(unwrapped_index.getExtra(ip), Key.ErrorUnionType, data) },
65066506 .type_anyerror_union => .{ .error_union_type = .{
65076507 .error_set_type = .anyerror_type,
6508 .payload_type = @enumFromInt(data),
6508 .payload_type = @fromBackingInt(@intCast(data)),
65096509 } },
65106510 .type_error_set => .{ .error_set_type = extraErrorSet(unwrapped_index.tid, unwrapped_index.getExtra(ip), data) },
65116511 .type_inferred_error_set => .{
6512 .inferred_error_set_type = @enumFromInt(data),
6512 .inferred_error_set_type = @fromBackingInt(@intCast(data)),
65136513 },
65146514 .type_function => .{ .func_type = extraFuncType(unwrapped_index.tid, unwrapped_index.getExtra(ip), data) },
65156515 .type_tuple => .{ .tuple_type = extraTypeTuple(unwrapped_index.tid, unwrapped_index.getExtra(ip), data) },
......@@ -6553,7 +6553,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
65536553 .captures = .{ .owned = .{
65546554 .tid = unwrapped_index.tid,
65556555 .start = extra.end,
6556 .len = @intFromEnum(len),
6556 .len = @backingInt(len),
65576557 } },
65586558 } },
65596559 };
......@@ -6593,7 +6593,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
65936593 .captures = .{ .owned = .{
65946594 .tid = unwrapped_index.tid,
65956595 .start = extra.end,
6596 .len = @intFromEnum(len),
6596 .len = @backingInt(len),
65976597 } },
65986598 } },
65996599 };
......@@ -6603,18 +6603,18 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
66036603 const extra = extraDataTrail(extra_list, Tag.TypeEnum, data);
66046604 break :ns switch (extra.data.bits.captures_len) {
66056605 .reified => .{ .reified = .{
6606 .zir_index = @enumFromInt(extra_list.view().items(.@"0")[extra.end]),
6606 .zir_index = @fromBackingInt(@intCast(extra_list.view().items(.@"0")[extra.end])),
66076607 .type_hash = extraData(extra_list, PackedU64, extra.end + 1).get(),
66086608 } },
66096609 .generated_union_tag => .{ .generated_union_tag = owner_union: {
6610 break :owner_union @enumFromInt(extra_list.view().items(.@"0")[extra.end]);
6610 break :owner_union @fromBackingInt(@intCast(extra_list.view().items(.@"0")[extra.end]));
66116611 } },
66126612 _ => |len| .{ .declared = .{
6613 .zir_index = @enumFromInt(extra_list.view().items(.@"0")[extra.end]),
6613 .zir_index = @fromBackingInt(@intCast(extra_list.view().items(.@"0")[extra.end])),
66146614 .captures = .{ .owned = .{
66156615 .tid = unwrapped_index.tid,
66166616 .start = extra.end + 1,
6617 .len = @intFromEnum(len),
6617 .len = @backingInt(len),
66186618 } },
66196619 } },
66206620 };
......@@ -6638,9 +6638,9 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
66386638 } };
66396639 } },
66406640
6641 .undef => .{ .undef = @enumFromInt(data) },
6641 .undef => .{ .undef = @fromBackingInt(@intCast(data)) },
66426642 .opt_null => .{ .opt = .{
6643 .ty = @enumFromInt(data),
6643 .ty = @fromBackingInt(@intCast(data)),
66446644 .val = .none,
66456645 } },
66466646 .opt_payload => {
......@@ -6820,7 +6820,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
68206820 .func_decl => .{ .func = extraFuncDecl(unwrapped_index.tid, unwrapped_index.getExtra(ip), data) },
68216821 .func_coerced => .{ .func = ip.extraFuncCoerced(unwrapped_index.getExtra(ip), data) },
68226822 .only_possible_value => {
6823 const ty: Index = @enumFromInt(data);
6823 const ty: Index = @fromBackingInt(@intCast(data));
68246824 const ty_unwrapped = ty.unwrap(ip);
68256825 const ty_extra = ty_unwrapped.getExtra(ip);
68266826 const ty_item = ty_unwrapped.getItem(ip);
......@@ -6912,7 +6912,7 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
69126912 .val = .{ .payload = extra.val },
69136913 } };
69146914 },
6915 .enum_literal => .{ .enum_literal = @enumFromInt(data) },
6915 .enum_literal => .{ .enum_literal = @fromBackingInt(@intCast(data)) },
69166916 .enum_tag => .{ .enum_tag = extraData(unwrapped_index.getExtra(ip), Tag.EnumTag, data) },
69176917 .bitpack => .{ .bitpack = extraData(unwrapped_index.getExtra(ip), Key.Bitpack, data) },
69186918
......@@ -7015,9 +7015,9 @@ fn extraFuncInstance(ip: *const InternPool, tid: Zcu.PerThread.Id, extra: Local.
70157015 const extra_items = extra.view().items(.@"0");
70167016 const analysis_extra_index = extra_index + std.meta.fieldIndex(Tag.FuncInstance, "analysis").?;
70177017 const analysis: FuncAnalysis = @bitCast(@atomicLoad(u32, &extra_items[analysis_extra_index], .unordered));
7018 const owner_nav: Nav.Index = @enumFromInt(extra_items[extra_index + std.meta.fieldIndex(Tag.FuncInstance, "owner_nav").?]);
7019 const ty: Index = @enumFromInt(extra_items[extra_index + std.meta.fieldIndex(Tag.FuncInstance, "ty").?]);
7020 const generic_owner: Index = @enumFromInt(extra_items[extra_index + std.meta.fieldIndex(Tag.FuncInstance, "generic_owner").?]);
7018 const owner_nav: Nav.Index = @fromBackingInt(@intCast(extra_items[extra_index + std.meta.fieldIndex(Tag.FuncInstance, "owner_nav").?]));
7019 const ty: Index = @fromBackingInt(@intCast(extra_items[extra_index + std.meta.fieldIndex(Tag.FuncInstance, "ty").?]));
7020 const generic_owner: Index = @fromBackingInt(@intCast(extra_items[extra_index + std.meta.fieldIndex(Tag.FuncInstance, "generic_owner").?]));
70217021 const func_decl = ip.funcDeclInfo(generic_owner);
70227022 const end_extra_index = extra_index + @as(u32, @typeInfo(Tag.FuncInstance).@"struct".field_names.len);
70237023 return .{
......@@ -7279,7 +7279,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerThread.Id, key:
72797279 try items.ensureUnusedCapacity(1);
72807280 items.appendAssumeCapacity(.{
72817281 .tag = .type_slice,
7282 .data = @intFromEnum(ptr_type_index),
7282 .data = @backingInt(ptr_type_index),
72837283 });
72847284 return gop.put();
72857285 }
......@@ -7333,20 +7333,20 @@ pub fn get(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerThread.Id, key:
73337333 assert(payload_type != .none);
73347334 items.appendAssumeCapacity(.{
73357335 .tag = .type_optional,
7336 .data = @intFromEnum(payload_type),
7336 .data = @backingInt(payload_type),
73377337 });
73387338 },
73397339 .anyframe_type => |payload_type| {
73407340 // payload_type might be none, indicating the type is `anyframe`.
73417341 items.appendAssumeCapacity(.{
73427342 .tag = .type_anyframe,
7343 .data = @intFromEnum(payload_type),
7343 .data = @backingInt(payload_type),
73447344 });
73457345 },
73467346 .error_union_type => |error_union_type| {
73477347 items.appendAssumeCapacity(if (error_union_type.error_set_type == .anyerror_type) .{
73487348 .tag = .type_anyerror_union,
7349 .data = @intFromEnum(error_union_type.payload_type),
7349 .data = @backingInt(error_union_type.payload_type),
73507350 } else .{
73517351 .tag = .type_error_union,
73527352 .data = try addExtra(extra, error_union_type),
......@@ -7372,18 +7372,18 @@ pub fn get(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerThread.Id, key:
73727372 .inferred_error_set_type => |ies_index| {
73737373 items.appendAssumeCapacity(.{
73747374 .tag = .type_inferred_error_set,
7375 .data = @intFromEnum(ies_index),
7375 .data = @backingInt(ies_index),
73767376 });
73777377 },
73787378 .simple_type => |simple_type| {
7379 assert(@intFromEnum(simple_type) == items.mutate.len);
7379 assert(@backingInt(simple_type) == items.mutate.len);
73807380 items.appendAssumeCapacity(.{
73817381 .tag = .simple_type,
73827382 .data = 0, // avoid writing `undefined` bits to a file
73837383 });
73847384 },
73857385 .simple_value => |simple_value| {
7386 assert(@intFromEnum(simple_value) == items.mutate.len);
7386 assert(@backingInt(simple_value) == items.mutate.len);
73877387 items.appendAssumeCapacity(.{
73887388 .tag = .simple_value,
73897389 .data = 0, // avoid writing `undefined` bits to a file
......@@ -7393,7 +7393,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerThread.Id, key:
73937393 assert(ty != .none);
73947394 items.appendAssumeCapacity(.{
73957395 .tag = .undef,
7396 .data = @intFromEnum(ty),
7396 .data = @backingInt(ty),
73977397 });
73987398 },
73997399
......@@ -7535,7 +7535,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerThread.Id, key:
75357535 assert(opt.val == .none or ip.indexToKey(opt.ty).opt_type == ip.typeOf(opt.val));
75367536 items.appendAssumeCapacity(if (opt.val == .none) .{
75377537 .tag = .opt_null,
7538 .data = @intFromEnum(opt.ty),
7538 .data = @backingInt(opt.ty),
75397539 } else .{
75407540 .tag = .opt_payload,
75417541 .data = try addExtra(extra, Tag.TypeValue{
......@@ -7735,7 +7735,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerThread.Id, key:
77357735
77367736 .enum_literal => |enum_literal| items.appendAssumeCapacity(.{
77377737 .tag = .enum_literal,
7738 .data = @intFromEnum(enum_literal),
7738 .data = @backingInt(enum_literal),
77397739 }),
77407740
77417741 .enum_tag => |enum_tag| {
......@@ -7849,7 +7849,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerThread.Id, key:
78497849 if (len == 0) {
78507850 items.appendAssumeCapacity(.{
78517851 .tag = .only_possible_value,
7852 .data = @intFromEnum(aggregate.ty),
7852 .data = @backingInt(aggregate.ty),
78537853 });
78547854 return gop.put();
78557855 }
......@@ -7882,7 +7882,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerThread.Id, key:
78827882 // in the aggregate fields.
78837883 items.appendAssumeCapacity(.{
78847884 .tag = .only_possible_value,
7885 .data = @intFromEnum(aggregate.ty),
7885 .data = @backingInt(aggregate.ty),
78867886 });
78877887 return gop.put();
78887888 },
......@@ -7977,7 +7977,7 @@ pub fn get(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerThread.Id, key:
79777977 }),
79787978 });
79797979 extra.appendSliceAssumeCapacity(.{@ptrCast(aggregate.storage.elems)});
7980 if (sentinel != .none) extra.appendAssumeCapacity(.{@intFromEnum(sentinel)});
7980 if (sentinel != .none) extra.appendAssumeCapacity(.{@backingInt(sentinel)});
79817981 },
79827982 .bitpack => |bitpack| {
79837983 switch (ip.zigTypeTag(bitpack.ty)) {
......@@ -8066,7 +8066,7 @@ pub fn getDeclaredStructType(
80668066 const extra_index = addExtraAssumeCapacity(extra, Tag.TypeStructPacked{
80678067 .zir_index = ini.zir_index,
80688068 .bits = .{
8069 .captures_len = @enumFromInt(ini.captures.len),
8069 .captures_len = @fromBackingInt(@intCast(ini.captures.len)),
80708070 .want_layout = false,
80718071 },
80728072 .name = undefined, // set by `finish`
......@@ -8077,10 +8077,10 @@ pub fn getDeclaredStructType(
80778077 .field_name_map = field_name_map,
80788078 });
80798079 extra.appendSliceAssumeCapacity(.{@ptrCast(ini.captures)}); // capture
8080 extra.appendNTimesAssumeCapacity(.{@intFromEnum(NullTerminatedString.empty)}, ini.fields_len); // field_name
8081 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_type
8080 extra.appendNTimesAssumeCapacity(.{@backingInt(NullTerminatedString.empty)}, ini.fields_len); // field_name
8081 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_type
80828082 if (ini.any_field_defaults) {
8083 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_default
8083 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_default
80848084 }
80858085 items.appendAssumeCapacity(.{
80868086 .tag = switch (ini.packed_backing_mode) {
......@@ -8138,10 +8138,10 @@ pub fn getDeclaredStructType(
81388138 extra.appendAssumeCapacity(.{@intCast(ini.captures.len)}); // captures_len
81398139 extra.appendSliceAssumeCapacity(.{@ptrCast(ini.captures)}); // capture
81408140 }
8141 extra.appendNTimesAssumeCapacity(.{@intFromEnum(NullTerminatedString.empty)}, ini.fields_len); // field_name
8142 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_type
8141 extra.appendNTimesAssumeCapacity(.{@backingInt(NullTerminatedString.empty)}, ini.fields_len); // field_name
8142 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_type
81438143 if (ini.any_field_defaults) {
8144 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_default
8144 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_default
81458145 }
81468146 if (ini.any_field_aligns) {
81478147 extra.appendNTimesAssumeCapacity(.{0}, (ini.fields_len + 3) / 4); // field_align
......@@ -8150,7 +8150,7 @@ pub fn getDeclaredStructType(
81508150 extra.appendNTimesAssumeCapacity(.{0}, (ini.fields_len + 31) / 32); // field_is_comptime_bits
81518151 }
81528152 if (!is_extern) {
8153 extra.appendNTimesAssumeCapacity(.{@intFromEnum(LoadedStructType.RuntimeOrder.unresolved)}, ini.fields_len); // field_runtime_order
8153 extra.appendNTimesAssumeCapacity(.{@backingInt(LoadedStructType.RuntimeOrder.unresolved)}, ini.fields_len); // field_runtime_order
81548154 }
81558155 extra.appendNTimesAssumeCapacity(.{0}, ini.fields_len); // field_offset
81568156 items.appendAssumeCapacity(.{
......@@ -8222,12 +8222,12 @@ pub fn getReifiedStructType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Pe
82228222 });
82238223 _ = addExtraAssumeCapacity(extra, PackedU64.init(ini.type_hash)); // type_hash
82248224 const field_names_start = extra.mutate.len;
8225 extra.appendNTimesAssumeCapacity(.{@intFromEnum(NullTerminatedString.empty)}, ini.fields_len); // field_name
8225 extra.appendNTimesAssumeCapacity(.{@backingInt(NullTerminatedString.empty)}, ini.fields_len); // field_name
82268226 const field_types_start = extra.mutate.len;
8227 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_type
8227 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_type
82288228 const field_defaults_start = extra.mutate.len;
82298229 if (ini.any_field_defaults) {
8230 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_default
8230 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_default
82318231 }
82328232 items.appendAssumeCapacity(.{
82338233 .tag = switch (ini.packed_backing_int_type) {
......@@ -8285,12 +8285,12 @@ pub fn getReifiedStructType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Pe
82858285 });
82868286 _ = addExtraAssumeCapacity(extra, PackedU64.init(ini.type_hash)); // type_hash
82878287 const field_names_start = extra.mutate.len;
8288 extra.appendNTimesAssumeCapacity(.{@intFromEnum(NullTerminatedString.empty)}, ini.fields_len); // field_name
8288 extra.appendNTimesAssumeCapacity(.{@backingInt(NullTerminatedString.empty)}, ini.fields_len); // field_name
82898289 const field_types_start = extra.mutate.len;
8290 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_type
8290 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_type
82918291 const field_defaults_start = extra.mutate.len;
82928292 if (ini.any_field_defaults) {
8293 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_default
8293 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_default
82948294 }
82958295 const field_aligns_start = extra.mutate.len;
82968296 if (ini.any_field_aligns) {
......@@ -8301,7 +8301,7 @@ pub fn getReifiedStructType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Pe
83018301 extra.appendNTimesAssumeCapacity(.{0}, (ini.fields_len + 31) / 32); // field_is_comptime_bits
83028302 }
83038303 if (!is_extern) {
8304 extra.appendNTimesAssumeCapacity(.{@intFromEnum(LoadedStructType.RuntimeOrder.unresolved)}, ini.fields_len); // field_runtime_order
8304 extra.appendNTimesAssumeCapacity(.{@backingInt(LoadedStructType.RuntimeOrder.unresolved)}, ini.fields_len); // field_runtime_order
83058305 }
83068306 extra.appendNTimesAssumeCapacity(.{0}, ini.fields_len); // field_offset
83078307 items.appendAssumeCapacity(.{
......@@ -8381,7 +8381,7 @@ pub fn getDeclaredUnionType(
83818381 const extra_index = addExtraAssumeCapacity(extra, Tag.TypeUnionPacked{
83828382 .zir_index = ini.zir_index,
83838383 .bits = .{
8384 .captures_len = @enumFromInt(ini.captures.len),
8384 .captures_len = @fromBackingInt(@intCast(ini.captures.len)),
83858385 .want_layout = false,
83868386 },
83878387 .name = undefined, // set by `finish`
......@@ -8392,7 +8392,7 @@ pub fn getDeclaredUnionType(
83928392 .fields_len = ini.fields_len,
83938393 });
83948394 extra.appendSliceAssumeCapacity(.{@ptrCast(ini.captures)}); // capture
8395 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_type
8395 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_type
83968396 items.appendAssumeCapacity(.{
83978397 .tag = switch (ini.packed_backing_mode) {
83988398 .auto => .type_union_packed_auto,
......@@ -8446,7 +8446,7 @@ pub fn getDeclaredUnionType(
84468446 extra.appendAssumeCapacity(.{@intCast(ini.captures.len)}); // captures_len
84478447 extra.appendSliceAssumeCapacity(.{@ptrCast(ini.captures)}); // capture
84488448 }
8449 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_type
8449 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_type
84508450 if (ini.any_field_aligns) {
84518451 extra.appendNTimesAssumeCapacity(.{0}, (ini.fields_len + 3) / 4); // field_align
84528452 }
......@@ -8516,9 +8516,9 @@ pub fn getReifiedUnionType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Per
85168516 });
85178517 _ = addExtraAssumeCapacity(extra, PackedU64.init(ini.type_hash)); // type_hash
85188518 const field_names_start = extra.mutate.len;
8519 extra.appendNTimesAssumeCapacity(.{@intFromEnum(NullTerminatedString.empty)}, ini.fields_len); // reified_field_name
8519 extra.appendNTimesAssumeCapacity(.{@backingInt(NullTerminatedString.empty)}, ini.fields_len); // reified_field_name
85208520 const field_types_start = extra.mutate.len;
8521 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_type
8521 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_type
85228522 items.appendAssumeCapacity(.{
85238523 .tag = switch (ini.packed_backing_int_type) {
85248524 .none => .type_union_packed_auto,
......@@ -8570,9 +8570,9 @@ pub fn getReifiedUnionType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.Per
85708570 });
85718571 _ = addExtraAssumeCapacity(extra, PackedU64.init(ini.type_hash));
85728572 const field_names_start = extra.mutate.len;
8573 extra.appendNTimesAssumeCapacity(.{@intFromEnum(NullTerminatedString.empty)}, ini.fields_len); // reified_field_name
8573 extra.appendNTimesAssumeCapacity(.{@backingInt(NullTerminatedString.empty)}, ini.fields_len); // reified_field_name
85748574 const field_types_start = extra.mutate.len;
8575 extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_type
8575 extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_type
85768576 const field_aligns_start = extra.mutate.len;
85778577 if (ini.any_field_aligns) {
85788578 extra.appendNTimesAssumeCapacity(.{0}, (ini.fields_len + 3) / 4); // field_align
......@@ -8657,7 +8657,7 @@ pub fn getDeclaredEnumType(
86578657
86588658 const extra_index = addExtraAssumeCapacity(extra, Tag.TypeEnum{
86598659 .bits = .{
8660 .captures_len = @enumFromInt(ini.captures.len),
8660 .captures_len = @fromBackingInt(@intCast(ini.captures.len)),
86618661 .want_layout = false,
86628662 },
86638663 .name = undefined, // set by `finish`
......@@ -8667,11 +8667,11 @@ pub fn getDeclaredEnumType(
86678667 .fields_len = ini.fields_len,
86688668 .field_name_map = field_name_map,
86698669 });
8670 extra.appendAssumeCapacity(.{@intFromEnum(ini.zir_index)}); // zir_index
8670 extra.appendAssumeCapacity(.{@backingInt(ini.zir_index)}); // zir_index
86718671 extra.appendSliceAssumeCapacity(.{@ptrCast(ini.captures)}); // capture
8672 if (have_values) extra.appendAssumeCapacity(.{@intFromEnum(field_value_map)}); // field_value_map
8673 extra.appendNTimesAssumeCapacity(.{@intFromEnum(NullTerminatedString.empty)}, ini.fields_len); // field_name
8674 if (have_values) extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_value
8672 if (have_values) extra.appendAssumeCapacity(.{@backingInt(field_value_map)}); // field_value_map
8673 extra.appendNTimesAssumeCapacity(.{@backingInt(NullTerminatedString.empty)}, ini.fields_len); // field_name
8674 if (have_values) extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_value
86758675 items.appendAssumeCapacity(.{
86768676 .tag = tag,
86778677 .data = extra_index,
......@@ -8742,13 +8742,13 @@ pub fn getReifiedEnumType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu.PerT
87428742 .fields_len = ini.fields_len,
87438743 .field_name_map = field_name_map,
87448744 });
8745 extra.appendAssumeCapacity(.{@intFromEnum(ini.zir_index)}); // zir_index
8745 extra.appendAssumeCapacity(.{@backingInt(ini.zir_index)}); // zir_index
87468746 _ = addExtraAssumeCapacity(extra, PackedU64.init(ini.type_hash)); // type_hash
8747 if (have_values) extra.appendAssumeCapacity(.{@intFromEnum(field_value_map)}); // field_value_map
8747 if (have_values) extra.appendAssumeCapacity(.{@backingInt(field_value_map)}); // field_value_map
87488748 const field_names_start = extra.mutate.len;
8749 extra.appendNTimesAssumeCapacity(.{@intFromEnum(NullTerminatedString.empty)}, ini.fields_len); // field_name
8749 extra.appendNTimesAssumeCapacity(.{@backingInt(NullTerminatedString.empty)}, ini.fields_len); // field_name
87508750 const field_values_start = extra.mutate.len;
8751 if (have_values) extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_value
8751 if (have_values) extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_value
87528752 items.appendAssumeCapacity(.{
87538753 .tag = tag,
87548754 .data = extra_index,
......@@ -8841,10 +8841,10 @@ pub fn getGeneratedEnumTagType(ip: *InternPool, gpa: Allocator, io: Io, tid: Zcu
88418841 .fields_len = ini.fields_len,
88428842 .field_name_map = field_name_map,
88438843 });
8844 extra.appendAssumeCapacity(.{@intFromEnum(ini.union_type)}); // owner_union
8845 if (have_values) extra.appendAssumeCapacity(.{@intFromEnum(field_value_map)});
8846 extra.appendNTimesAssumeCapacity(.{@intFromEnum(NullTerminatedString.empty)}, ini.fields_len); // field_name
8847 if (have_values) extra.appendNTimesAssumeCapacity(.{@intFromEnum(Index.none)}, ini.fields_len); // field_value
8844 extra.appendAssumeCapacity(.{@backingInt(ini.union_type)}); // owner_union
8845 if (have_values) extra.appendAssumeCapacity(.{@backingInt(field_value_map)});
8846 extra.appendNTimesAssumeCapacity(.{@backingInt(NullTerminatedString.empty)}, ini.fields_len); // field_name
8847 if (have_values) extra.appendNTimesAssumeCapacity(.{@backingInt(Index.none)}, ini.fields_len); // field_value
88488848 items.appendAssumeCapacity(.{
88498849 .tag = switch (ini.int_tag_mode) {
88508850 .auto => .type_enum_auto,
......@@ -8936,8 +8936,8 @@ pub const WipContainerType = struct {
89368936 ) void {
89378937 const extra = ip.getLocalShared(wip.tid).extra.acquire();
89388938 const extra_items = extra.view().items(.@"0");
8939 extra_items[wip.type_name_index] = @intFromEnum(type_name);
8940 extra_items[wip.name_nav_index] = @intFromEnum(name_nav);
8939 extra_items[wip.type_name_index] = @backingInt(type_name);
8940 extra_items[wip.name_nav_index] = @backingInt(name_nav);
89418941 }
89428942
89438943 pub fn finish(
......@@ -8948,7 +8948,7 @@ pub const WipContainerType = struct {
89488948 const extra = ip.getLocalShared(wip.tid).extra.acquire();
89498949 const extra_items = extra.view().items(.@"0");
89508950
8951 extra_items[wip.namespace_index] = @intFromEnum(namespace);
8951 extra_items[wip.namespace_index] = @backingInt(namespace);
89528952
89538953 return wip.index;
89548954 }
......@@ -9361,7 +9361,7 @@ pub fn getFuncDeclIes(
93619361 .lbrace_column = key.lbrace_column,
93629362 .rbrace_column = key.rbrace_column,
93639363 });
9364 extra.appendAssumeCapacity(.{@intFromEnum(Index.none)});
9364 extra.appendAssumeCapacity(.{@backingInt(Index.none)});
93659365
93669366 const func_type_extra_index = addExtraAssumeCapacity(extra, Tag.TypeFunction{
93679367 .params_len = params_len,
......@@ -9391,7 +9391,7 @@ pub fn getFuncDeclIes(
93919391 .error_set_type = error_set_type,
93929392 .payload_type = key.bare_return_type,
93939393 }),
9394 @intFromEnum(func_index),
9394 @backingInt(func_index),
93959395 func_type_extra_index,
93969396 },
93979397 });
......@@ -9659,7 +9659,7 @@ fn getFuncInstanceIes(
96599659 .branch_quota = 0,
96609660 .generic_owner = generic_owner,
96619661 });
9662 extra.appendAssumeCapacity(.{@intFromEnum(Index.none)}); // resolved error set
9662 extra.appendAssumeCapacity(.{@backingInt(Index.none)}); // resolved error set
96639663 extra.appendSliceAssumeCapacity(.{@ptrCast(arg.comptime_args)});
96649664
96659665 const func_type_extra_index = addExtraAssumeCapacity(extra, Tag.TypeFunction{
......@@ -9690,7 +9690,7 @@ fn getFuncInstanceIes(
96909690 .error_set_type = error_set_type,
96919691 .payload_type = arg.bare_return_type,
96929692 }),
9693 @intFromEnum(func_index),
9693 @backingInt(func_index),
96949694 func_type_extra_index,
96959695 },
96969696 });
......@@ -9759,7 +9759,7 @@ fn finishFuncInstance(
97599759
97609760 // TODO: improve this name
97619761 const nav_name = try ip.getOrPutStringFmt(gpa, io, tid, "{f}__anon_{d}", .{
9762 fn_owner_nav.name.fmt(ip), @intFromEnum(func_index),
9762 fn_owner_nav.name.fmt(ip), @backingInt(func_index),
97639763 }, .no_embedded_nulls);
97649764 const nav_fqn = try ip.namespacePtr(fn_namespace).internFullyQualifiedName(ip, gpa, io, tid, nav_name);
97659765 const nav_index = try ip.createNav(gpa, io, tid, nav_name, nav_fqn, .{
......@@ -9776,7 +9776,7 @@ fn finishFuncInstance(
97769776 // Populate the owner_nav field which was left undefined until now.
97779777 extra.view().items(.@"0")[
97789778 func_extra_index + std.meta.fieldIndex(Tag.FuncInstance, "owner_nav").?
9779 ] = @intFromEnum(nav_index);
9779 ] = @backingInt(nav_index);
97809780}
97819781
97829782pub fn getIfExists(ip: *const InternPool, key: Key) ?Index {
......@@ -9891,7 +9891,7 @@ fn addExtraAssumeCapacity(extra: Local.Extra.Mutable, item: anytype) u32 {
98919891 TrackedInst.Index,
98929892 TrackedInst.Index.Optional,
98939893 ComptimeAllocIndex,
9894 => @intFromEnum(@field(item, field_name)),
9894 => @backingInt(@field(item, field_name)),
98959895
98969896 u32,
98979897 i32,
......@@ -9925,7 +9925,7 @@ fn addLimbsExtraAssumeCapacity(ip: *InternPool, extra: anytype) u32 {
99259925 inline for (info.field_names, info.field_types, 0..) |field_name, field_type, i| {
99269926 const new: u32 = switch (field_type) {
99279927 u32 => @field(extra, field_name),
9928 Index => @intFromEnum(@field(extra, field_name)),
9928 Index => @backingInt(@field(extra, field_name)),
99299929 else => @compileError("bad field type: " ++ @typeName(field_type)),
99309930 };
99319931 if (i % 2 == 0) {
......@@ -9959,7 +9959,7 @@ fn extraDataTrail(extra: Local.Extra, comptime T: type, index: u32) struct { dat
99599959 TrackedInst.Index,
99609960 TrackedInst.Index.Optional,
99619961 ComptimeAllocIndex,
9962 => @enumFromInt(extra_item),
9962 => @fromBackingInt(@intCast(extra_item)),
99639963
99649964 u32,
99659965 i32,
......@@ -10047,7 +10047,7 @@ pub fn slicePtrType(ip: *const InternPool, index: Index) Index {
1004710047 }
1004810048 const item = index.unwrap(ip).getItem(ip);
1004910049 switch (item.tag) {
10050 .type_slice => return @enumFromInt(item.data),
10050 .type_slice => return @fromBackingInt(@intCast(item.data)),
1005110051 else => unreachable, // not a slice type
1005210052 }
1005310053}
......@@ -10135,9 +10135,9 @@ pub fn getCoerced(
1013510135 .func_decl => return getCoercedFuncDecl(ip, gpa, io, tid, val, new_ty),
1013610136 .func_instance => return getCoercedFuncInstance(ip, gpa, io, tid, val, new_ty),
1013710137 .func_coerced => {
10138 const func: Index = @enumFromInt(unwrapped_val.getExtra(ip).view().items(.@"0")[
10138 const func: Index = @fromBackingInt(@intCast(unwrapped_val.getExtra(ip).view().items(.@"0")[
1013910139 val_item.data + std.meta.fieldIndex(Tag.FuncCoerced, "func").?
10140 ]);
10140 ]));
1014110141 switch (func.unwrap(ip).getTag(ip)) {
1014210142 .func_decl => return getCoercedFuncDecl(ip, gpa, io, tid, func, new_ty),
1014310143 .func_instance => return getCoercedFuncInstance(ip, gpa, io, tid, func, new_ty),
......@@ -10378,9 +10378,9 @@ fn getCoercedFuncDecl(
1037810378 new_ty: Index,
1037910379) Allocator.Error!Index {
1038010380 const unwrapped_val = val.unwrap(ip);
10381 const prev_ty: Index = @enumFromInt(unwrapped_val.getExtra(ip).view().items(.@"0")[
10381 const prev_ty: Index = @fromBackingInt(@intCast(unwrapped_val.getExtra(ip).view().items(.@"0")[
1038210382 unwrapped_val.getData(ip) + std.meta.fieldIndex(Tag.FuncDecl, "ty").?
10383 ]);
10383 ]));
1038410384 if (new_ty == prev_ty) return val;
1038510385 return getCoercedFunc(ip, gpa, io, tid, val, new_ty);
1038610386}
......@@ -10394,9 +10394,9 @@ fn getCoercedFuncInstance(
1039410394 new_ty: Index,
1039510395) Allocator.Error!Index {
1039610396 const unwrapped_val = val.unwrap(ip);
10397 const prev_ty: Index = @enumFromInt(unwrapped_val.getExtra(ip).view().items(.@"0")[
10397 const prev_ty: Index = @fromBackingInt(@intCast(unwrapped_val.getExtra(ip).view().items(.@"0")[
1039810398 unwrapped_val.getData(ip) + std.meta.fieldIndex(Tag.FuncInstance, "ty").?
10399 ]);
10399 ]));
1040010400 if (new_ty == prev_ty) return val;
1040110401 return getCoercedFunc(ip, gpa, io, tid, val, new_ty);
1040210402}
......@@ -10739,7 +10739,7 @@ fn dumpStatsFallible(ip: *const InternPool, w: *Io.Writer, arena: Allocator) !vo
1073910739 const extra = extraDataTrail(extra_list, Tag.TypeStructPacked, data);
1074010740 switch (extra.data.bits.captures_len) {
1074110741 .reified => n += 2, // type_hash: PackedU64
10742 _ => |len| n += @intFromEnum(len), // capture: CaptureValue
10742 _ => |len| n += @backingInt(len), // capture: CaptureValue
1074310743 }
1074410744 n += extra.data.fields_len; // field_name: NullTerminatedString
1074510745 n += extra.data.fields_len; // field_type: Index
......@@ -10750,7 +10750,7 @@ fn dumpStatsFallible(ip: *const InternPool, w: *Io.Writer, arena: Allocator) !vo
1075010750 const extra = extraDataTrail(extra_list, Tag.TypeStructPacked, data);
1075110751 switch (extra.data.bits.captures_len) {
1075210752 .reified => n += 2, // type_hash: PackedU64
10753 _ => |len| n += @intFromEnum(len), // capture: CaptureValue
10753 _ => |len| n += @backingInt(len), // capture: CaptureValue
1075410754 }
1075510755 n += extra.data.fields_len; // field_name: NullTerminatedString
1075610756 n += extra.data.fields_len; // field_type: Index
......@@ -10779,7 +10779,7 @@ fn dumpStatsFallible(ip: *const InternPool, w: *Io.Writer, arena: Allocator) !vo
1077910779 const extra = extraDataTrail(extra_list, Tag.TypeUnionPacked, data);
1078010780 switch (extra.data.bits.captures_len) {
1078110781 .reified => n += 2, // type_hash: PackedU64
10782 _ => |len| n += @intFromEnum(len), // capture: CaptureValue
10782 _ => |len| n += @backingInt(len), // capture: CaptureValue
1078310783 }
1078410784 n += extra.data.fields_len; // field_type: Index
1078510785 break :b n * @sizeOf(u32);
......@@ -10795,7 +10795,7 @@ fn dumpStatsFallible(ip: *const InternPool, w: *Io.Writer, arena: Allocator) !vo
1079510795 },
1079610796 _ => |len| {
1079710797 n += 1; // zir_index: TrackedInst.Index,
10798 n += @intFromEnum(len); // capture: CaptureValue
10798 n += @backingInt(len); // capture: CaptureValue
1079910799 },
1080010800 }
1080110801 n += extra.fields_len; // field_name: NullTerminatedString
......@@ -10812,7 +10812,7 @@ fn dumpStatsFallible(ip: *const InternPool, w: *Io.Writer, arena: Allocator) !vo
1081210812 },
1081310813 _ => |len| {
1081410814 n += 1; // zir_index: TrackedInst.Index,
10815 n += @intFromEnum(len); // capture: CaptureValue
10815 n += @backingInt(len); // capture: CaptureValue
1081610816 },
1081710817 }
1081810818 n += 1; // field_value_map: MapIndex
......@@ -10931,13 +10931,13 @@ fn dumpAllFallible(ip: *const InternPool, w: *Io.Writer) anyerror!void {
1093110931 items.items(.data)[0..local.mutate.items.len],
1093210932 0..,
1093310933 ) |tag, data, index| {
10934 const i = Index.Unwrapped.wrap(.{ .tid = @enumFromInt(tid), .index = @intCast(index) }, ip);
10934 const i = Index.Unwrapped.wrap(.{ .tid = @fromBackingInt(@intCast(tid)), .index = @intCast(index) }, ip);
1093510935 try w.print("${d} = {s}(", .{ i, @tagName(tag) });
1093610936 switch (tag) {
1093710937 .removed => {},
1093810938
10939 .simple_type => try w.print("{s}", .{@tagName(@as(SimpleType, @enumFromInt(@intFromEnum(i))))}),
10940 .simple_value => try w.print("{s}", .{@tagName(@as(SimpleValue, @enumFromInt(@intFromEnum(i))))}),
10939 .simple_type => try w.print("{s}", .{@tagName(@as(SimpleType, @fromBackingInt(@intCast(@backingInt(i)))))}),
10940 .simple_value => try w.print("{s}", .{@tagName(@as(SimpleValue, @fromBackingInt(@intCast(@backingInt(i)))))}),
1094110941
1094210942 .type_int_signed,
1094310943 .type_int_unsigned,
......@@ -11054,7 +11054,7 @@ pub fn dumpGenericInstancesFallible(ip: *const InternPool, allocator: Allocator,
1105411054
1105511055 try gop.value_ptr.append(
1105611056 arena,
11057 Index.Unwrapped.wrap(.{ .tid = @enumFromInt(tid), .index = @intCast(index) }, ip),
11057 Index.Unwrapped.wrap(.{ .tid = @fromBackingInt(@intCast(tid)), .index = @intCast(index) }, ip),
1105811058 );
1105911059 }
1106011060 }
......@@ -11272,10 +11272,10 @@ pub fn createNamespace(
1127211272 const local = ip.getLocal(tid);
1127311273 const free_list_next = local.mutate.namespaces.free_list;
1127411274 if (free_list_next != Local.BucketListMutate.free_list_sentinel) {
11275 const reused_namespace_index: NamespaceIndex = @enumFromInt(free_list_next);
11275 const reused_namespace_index: NamespaceIndex = @fromBackingInt(@intCast(free_list_next));
1127611276 const reused_namespace = ip.namespacePtr(reused_namespace_index);
1127711277 local.mutate.namespaces.free_list =
11278 @intFromEnum(@field(reused_namespace, Local.namespace_next_free_field));
11278 @backingInt(@field(reused_namespace, Local.namespace_next_free_field));
1127911279 reused_namespace.* = initialization;
1128011280 return reused_namespace_index;
1128111281 }
......@@ -11314,8 +11314,8 @@ pub fn destroyNamespace(
1131411314 .generation = undefined,
1131511315 };
1131611316 @field(namespace, Local.namespace_next_free_field) =
11317 @enumFromInt(local.mutate.namespaces.free_list);
11318 local.mutate.namespaces.free_list = @intFromEnum(namespace_index);
11317 @fromBackingInt(@intCast(local.mutate.namespaces.free_list));
11318 local.mutate.namespaces.free_list = @backingInt(namespace_index);
1131911319}
1132011320
1132111321pub fn filePtr(ip: *const InternPool, file_index: FileIndex) *Zcu.File {
......@@ -11424,10 +11424,10 @@ pub fn getOrPutTrailingString(
1142411424 try string_bytes.ensureUnusedCapacity(1);
1142511425 }
1142611426 const key: []const u8 = string_bytes.view().items(.@"0")[start..];
11427 const value: embedded_nulls.StringType() = @enumFromInt(@intFromEnum((String.Unwrapped{
11427 const value: embedded_nulls.StringType() = @fromBackingInt(@intCast(@backingInt((String.Unwrapped{
1142811428 .tid = tid,
1142911429 .index = strings.mutate.len - 1,
11430 }).wrap(ip)));
11430 }).wrap(ip))));
1143111431 const has_embedded_null = std.mem.indexOfScalar(u8, key, 0) != null;
1143211432 switch (embedded_nulls) {
1143311433 .no_embedded_nulls => assert(!has_embedded_null),
......@@ -11452,7 +11452,7 @@ pub fn getOrPutTrailingString(
1145211452 if (entry.hash != hash) continue;
1145311453 if (!index.eqlSlice(key, ip)) continue;
1145411454 string_bytes.shrinkRetainingCapacity(start);
11455 return @enumFromInt(@intFromEnum(index));
11455 return @fromBackingInt(@intCast(@backingInt(index)));
1145611456 }
1145711457 shard.mutate.string_map.mutex.lock(io, tid);
1145811458 defer shard.mutate.string_map.mutex.unlock(io);
......@@ -11468,7 +11468,7 @@ pub fn getOrPutTrailingString(
1146811468 if (entry.hash != hash) continue;
1146911469 if (!index.eqlSlice(key, ip)) continue;
1147011470 string_bytes.shrinkRetainingCapacity(start);
11471 return @enumFromInt(@intFromEnum(index));
11471 return @fromBackingInt(@intCast(@backingInt(index)));
1147211472 }
1147311473 defer shard.mutate.string_map.len += 1;
1147411474 const map_header = map.header().*;
......@@ -11477,7 +11477,7 @@ pub fn getOrPutTrailingString(
1147711477 strings.appendAssumeCapacity(.{string_bytes.mutate.len});
1147811478 const entry = &map.entries[map_index];
1147911479 entry.hash = hash;
11480 entry.release(@enumFromInt(@intFromEnum(value)));
11480 entry.release(@fromBackingInt(@intCast(@backingInt(value))));
1148111481 return value;
1148211482 }
1148311483 const arena_state = &local.mutate.arena;
......@@ -11519,7 +11519,7 @@ pub fn getOrPutTrailingString(
1151911519 string_bytes.appendAssumeCapacity(.{0});
1152011520 strings.appendAssumeCapacity(.{string_bytes.mutate.len});
1152111521 map.entries[map_index] = .{
11522 .value = @enumFromInt(@intFromEnum(value)),
11522 .value = @fromBackingInt(@intCast(@backingInt(value))),
1152311523 .hash = hash,
1152411524 };
1152511525 shard.shared.string_map.release(new_map);
......@@ -11710,7 +11710,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
1171011710 .undef,
1171111711 .opt_null,
1171211712 .only_possible_value,
11713 => @enumFromInt(item.data),
11713 => @fromBackingInt(@intCast(item.data)),
1171411714
1171511715 .simple_type, .simple_value => unreachable, // handled via Index above
1171611716
......@@ -11742,7 +11742,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
1174211742 .bitpack,
1174311743 => |t| {
1174411744 const extra_list = unwrapped_index.getExtra(ip);
11745 return @enumFromInt(extra_list.view().items(.@"0")[item.data + std.meta.fieldIndex(t.Payload(), "ty").?]);
11745 return @fromBackingInt(@intCast(extra_list.view().items(.@"0")[item.data + std.meta.fieldIndex(t.Payload(), "ty").?]));
1174611746 },
1174711747
1174811748 .int_u8 => .u8_type,
......@@ -11788,7 +11788,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
1178811788/// Assumes that the enum's field indexes equal its value tags.
1178911789pub fn toEnum(ip: *const InternPool, comptime E: type, i: Index) E {
1179011790 const int = ip.indexToKey(i).enum_tag.int;
11791 return @enumFromInt(ip.indexToKey(int).int.storage.u64);
11791 return @fromBackingInt(@intCast(ip.indexToKey(int).int.storage.u64));
1179211792}
1179311793
1179411794pub fn toFunc(ip: *const InternPool, i: Index) Key.Func {
......@@ -11821,9 +11821,9 @@ pub fn funcTypeReturnType(ip: *const InternPool, ty: Index) Index {
1182111821 const ty_item = unwrapped_ty.getItem(ip);
1182211822 const child_extra, const child_item = switch (ty_item.tag) {
1182311823 .type_pointer => child: {
11824 const child_index: Index = @enumFromInt(ty_extra.view().items(.@"0")[
11824 const child_index: Index = @fromBackingInt(@intCast(ty_extra.view().items(.@"0")[
1182511825 ty_item.data + std.meta.fieldIndex(Tag.TypePointer, "child").?
11826 ]);
11826 ]));
1182711827 const unwrapped_child = child_index.unwrap(ip);
1182811828 break :child .{ unwrapped_child.getExtra(ip), unwrapped_child.getItem(ip) };
1182911829 },
......@@ -11831,9 +11831,9 @@ pub fn funcTypeReturnType(ip: *const InternPool, ty: Index) Index {
1183111831 else => unreachable,
1183211832 };
1183311833 assert(child_item.tag == .type_function);
11834 return @enumFromInt(child_extra.view().items(.@"0")[
11834 return @fromBackingInt(@intCast(child_extra.view().items(.@"0")[
1183511835 child_item.data + std.meta.fieldIndex(Tag.TypeFunction, "return_type").?
11836 ]);
11836 ]));
1183711837}
1183811838
1183911839pub fn isUndef(ip: *const InternPool, val: Index) bool {
......@@ -11857,12 +11857,12 @@ pub fn getBackingAddrTag(ip: *const InternPool, val: Index) ?Key.Ptr.BaseAddr.Ta
1185711857 .ptr_opt_payload,
1185811858 .ptr_elem,
1185911859 .ptr_field,
11860 => |tag| base = @enumFromInt(unwrapped_base.getExtra(ip).view().items(.@"0")[
11860 => |tag| base = @fromBackingInt(@intCast(unwrapped_base.getExtra(ip).view().items(.@"0")[
1186111861 base_item.data + std.meta.fieldIndex(tag.Payload(), "base").?
11862 ]),
11863 inline .ptr_slice => |tag| base = @enumFromInt(unwrapped_base.getExtra(ip).view().items(.@"0")[
11862 ])),
11863 inline .ptr_slice => |tag| base = @fromBackingInt(@intCast(unwrapped_base.getExtra(ip).view().items(.@"0")[
1186411864 base_item.data + std.meta.fieldIndex(tag.Payload(), "ptr").?
11865 ]),
11865 ])),
1186611866 else => return null,
1186711867 }
1186811868 }
......@@ -12139,7 +12139,7 @@ fn funcAnalysisPtr(ip: *const InternPool, func: Index) *FuncAnalysis {
1213912139 .func_instance => item.data + std.meta.fieldIndex(Tag.FuncInstance, "analysis").?,
1214012140 .func_coerced => {
1214112141 const extra_index = item.data + std.meta.fieldIndex(Tag.FuncCoerced, "func").?;
12142 const coerced_func_index: Index = @enumFromInt(extra.view().items(.@"0")[extra_index]);
12142 const coerced_func_index: Index = @fromBackingInt(@intCast(extra.view().items(.@"0")[extra_index]));
1214312143 const unwrapped_coerced_func = coerced_func_index.unwrap(ip);
1214412144 const coerced_func_item = unwrapped_coerced_func.getItem(ip);
1214512145 return @ptrCast(&unwrapped_coerced_func.getExtra(ip).view().items(.@"0")[
......@@ -12201,20 +12201,20 @@ pub fn funcZirBodyInst(ip: *const InternPool, func: Index) TrackedInst.Index {
1220112201 const item_extra = unwrapped_func.getExtra(ip);
1220212202 const zir_body_inst_field_index = std.meta.fieldIndex(Tag.FuncDecl, "zir_body_inst").?;
1220312203 switch (item.tag) {
12204 .func_decl => return @enumFromInt(item_extra.view().items(.@"0")[item.data + zir_body_inst_field_index]),
12204 .func_decl => return @fromBackingInt(@intCast(item_extra.view().items(.@"0")[item.data + zir_body_inst_field_index])),
1220512205 .func_instance => {
1220612206 const generic_owner_field_index = std.meta.fieldIndex(Tag.FuncInstance, "generic_owner").?;
12207 const func_decl_index: Index = @enumFromInt(item_extra.view().items(.@"0")[item.data + generic_owner_field_index]);
12207 const func_decl_index: Index = @fromBackingInt(@intCast(item_extra.view().items(.@"0")[item.data + generic_owner_field_index]));
1220812208 const unwrapped_func_decl = func_decl_index.unwrap(ip);
1220912209 const func_decl_item = unwrapped_func_decl.getItem(ip);
1221012210 const func_decl_extra = unwrapped_func_decl.getExtra(ip);
1221112211 assert(func_decl_item.tag == .func_decl);
12212 return @enumFromInt(func_decl_extra.view().items(.@"0")[func_decl_item.data + zir_body_inst_field_index]);
12212 return @fromBackingInt(@intCast(func_decl_extra.view().items(.@"0")[func_decl_item.data + zir_body_inst_field_index]));
1221312213 },
1221412214 .func_coerced => {
12215 const uncoerced_func_index: Index = @enumFromInt(item_extra.view().items(.@"0")[
12215 const uncoerced_func_index: Index = @fromBackingInt(@intCast(item_extra.view().items(.@"0")[
1221612216 item.data + std.meta.fieldIndex(Tag.FuncCoerced, "func").?
12217 ]);
12217 ]));
1221812218 return ip.funcZirBodyInst(uncoerced_func_index);
1221912219 },
1222012220 else => unreachable,
......@@ -12224,7 +12224,7 @@ pub fn funcZirBodyInst(ip: *const InternPool, func: Index) TrackedInst.Index {
1222412224pub fn iesFuncIndex(ip: *const InternPool, ies_index: Index) Index {
1222512225 const item = ies_index.unwrap(ip).getItem(ip);
1222612226 assert(item.tag == .type_inferred_error_set);
12227 const func_index: Index = @enumFromInt(item.data);
12227 const func_index: Index = @fromBackingInt(@intCast(item.data));
1222812228 switch (func_index.unwrap(ip).getTag(ip)) {
1222912229 .func_decl, .func_instance => {},
1223012230 else => unreachable, // assertion failed
......@@ -12244,9 +12244,9 @@ fn funcIesResolvedPtr(ip: *const InternPool, func_index: Index) *Index {
1224412244 .func_decl => func_item.data + @typeInfo(Tag.FuncDecl).@"struct".field_names.len,
1224512245 .func_instance => func_item.data + @typeInfo(Tag.FuncInstance).@"struct".field_names.len,
1224612246 .func_coerced => {
12247 const uncoerced_func_index: Index = @enumFromInt(func_extra.view().items(.@"0")[
12247 const uncoerced_func_index: Index = @fromBackingInt(@intCast(func_extra.view().items(.@"0")[
1224812248 func_item.data + std.meta.fieldIndex(Tag.FuncCoerced, "func").?
12249 ]);
12249 ]));
1225012250 const unwrapped_uncoerced_func = uncoerced_func_index.unwrap(ip);
1225112251 const uncoerced_func_item = unwrapped_uncoerced_func.getItem(ip);
1225212252 return @ptrCast(&unwrapped_uncoerced_func.getExtra(ip).view().items(.@"0")[
......@@ -12294,9 +12294,9 @@ pub fn unwrapCoercedFunc(ip: *const InternPool, index: Index) Index {
1229412294 const unwrapped_index = index.unwrap(ip);
1229512295 const item = unwrapped_index.getItem(ip);
1229612296 return switch (item.tag) {
12297 .func_coerced => @enumFromInt(unwrapped_index.getExtra(ip).view().items(.@"0")[
12297 .func_coerced => @fromBackingInt(@intCast(unwrapped_index.getExtra(ip).view().items(.@"0")[
1229812298 item.data + std.meta.fieldIndex(Tag.FuncCoerced, "func").?
12299 ]),
12299 ])),
1230012300 .func_instance, .func_decl => index,
1230112301 else => unreachable,
1230212302 };
......@@ -12392,7 +12392,7 @@ const GlobalErrorSet = struct {
1239212392 name: NullTerminatedString,
1239312393 ) Allocator.Error!GlobalErrorSet.Index {
1239412394 if (name == .empty) return .none;
12395 const hash = std.hash.int(@intFromEnum(name));
12395 const hash = std.hash.int(@backingInt(name));
1239612396 var map = ges.shared.map.acquire();
1239712397 const Map = @TypeOf(map);
1239812398 var map_mask = map.header().mask();
......@@ -12404,7 +12404,7 @@ const GlobalErrorSet = struct {
1240412404 const index = entry.acquire();
1240512405 if (index == .none) break;
1240612406 if (entry.hash != hash) continue;
12407 if (names.view().items(.@"0")[@intFromEnum(index) - 1] == name) return index;
12407 if (names.view().items(.@"0")[@backingInt(index) - 1] == name) return index;
1240812408 }
1240912409 ges.mutate.map.mutex.lockUncancelable(io);
1241012410 defer ges.mutate.map.mutex.unlock(io);
......@@ -12419,7 +12419,7 @@ const GlobalErrorSet = struct {
1241912419 const index = entry.value;
1242012420 if (index == .none) break;
1242112421 if (entry.hash != hash) continue;
12422 if (names.view().items(.@"0")[@intFromEnum(index) - 1] == name) return index;
12422 if (names.view().items(.@"0")[@backingInt(index) - 1] == name) return index;
1242312423 }
1242412424 const mutable_names: Names.Mutable = .{
1242512425 .gpa = gpa,
......@@ -12432,7 +12432,7 @@ const GlobalErrorSet = struct {
1243212432 const map_header = map.header().*;
1243312433 if (ges.mutate.names.len < map_header.capacity * 3 / 5) {
1243412434 mutable_names.appendAssumeCapacity(.{name});
12435 const index: GlobalErrorSet.Index = @enumFromInt(mutable_names.mutate.len);
12435 const index: GlobalErrorSet.Index = @fromBackingInt(@intCast(mutable_names.mutate.len));
1243612436 const entry = &map.entries[map_index];
1243712437 entry.hash = hash;
1243812438 entry.release(index);
......@@ -12475,7 +12475,7 @@ const GlobalErrorSet = struct {
1247512475 if (map.entries[map_index].value == .none) break;
1247612476 }
1247712477 mutable_names.appendAssumeCapacity(.{name});
12478 const index: GlobalErrorSet.Index = @enumFromInt(mutable_names.mutate.len);
12478 const index: GlobalErrorSet.Index = @fromBackingInt(@intCast(mutable_names.mutate.len));
1247912479 map.entries[map_index] = .{ .value = index, .hash = hash };
1248012480 ges.shared.map.release(new_map);
1248112481 return index;
......@@ -12486,7 +12486,7 @@ const GlobalErrorSet = struct {
1248612486 name: NullTerminatedString,
1248712487 ) ?GlobalErrorSet.Index {
1248812488 if (name == .empty) return .none;
12489 const hash = std.hash.int(@intFromEnum(name));
12489 const hash = std.hash.int(@backingInt(name));
1249012490 const map = ges.shared.map.acquire();
1249112491 const map_mask = map.header().mask();
1249212492 const names_items = ges.shared.names.acquire().view().items(.@"0");
......@@ -12497,7 +12497,7 @@ const GlobalErrorSet = struct {
1249712497 const index = entry.acquire();
1249812498 if (index == .none) return null;
1249912499 if (entry.hash != hash) continue;
12500 if (names_items[@intFromEnum(index) - 1] == name) return index;
12500 if (names_items[@backingInt(index) - 1] == name) return index;
1250112501 }
1250212502 }
1250312503};
......@@ -12509,11 +12509,11 @@ pub fn getErrorValue(
1250912509 tid: Zcu.PerThread.Id,
1251012510 name: NullTerminatedString,
1251112511) Allocator.Error!Zcu.ErrorInt {
12512 return @intFromEnum(try ip.global_error_set.getErrorValue(gpa, io, &ip.getLocal(tid).mutate.arena, name));
12512 return @backingInt(try ip.global_error_set.getErrorValue(gpa, io, &ip.getLocal(tid).mutate.arena, name));
1251312513}
1251412514
1251512515pub fn getErrorValueIfExists(ip: *const InternPool, name: NullTerminatedString) ?Zcu.ErrorInt {
12516 return @intFromEnum(ip.global_error_set.getErrorValueIfExists(name) orelse return null);
12516 return @backingInt(ip.global_error_set.getErrorValueIfExists(name) orelse return null);
1251712517}
1251812518
1251912519const PackedCallingConvention = packed struct(u18) {
......@@ -12544,32 +12544,32 @@ const PackedCallingConvention = packed struct(u18) {
1254412544 std.lang.CallingConvention.ArcInterruptOptions => .{
1254512545 .tag = tag,
1254612546 .incoming_stack_alignment = .fromByteUnits(pl.incoming_stack_alignment orelse 0),
12547 .extra = @intFromEnum(pl.type),
12547 .extra = @backingInt(pl.type),
1254812548 },
1254912549 std.lang.CallingConvention.ArmInterruptOptions => .{
1255012550 .tag = tag,
1255112551 .incoming_stack_alignment = .fromByteUnits(pl.incoming_stack_alignment orelse 0),
12552 .extra = @intFromEnum(pl.type),
12552 .extra = @backingInt(pl.type),
1255312553 },
1255412554 std.lang.CallingConvention.MicroblazeInterruptOptions => .{
1255512555 .tag = tag,
1255612556 .incoming_stack_alignment = .fromByteUnits(pl.incoming_stack_alignment orelse 0),
12557 .extra = @intFromEnum(pl.type),
12557 .extra = @backingInt(pl.type),
1255812558 },
1255912559 std.lang.CallingConvention.MipsInterruptOptions => .{
1256012560 .tag = tag,
1256112561 .incoming_stack_alignment = .fromByteUnits(pl.incoming_stack_alignment orelse 0),
12562 .extra = @intFromEnum(pl.mode),
12562 .extra = @backingInt(pl.mode),
1256312563 },
1256412564 std.lang.CallingConvention.RiscvInterruptOptions => .{
1256512565 .tag = tag,
1256612566 .incoming_stack_alignment = .fromByteUnits(pl.incoming_stack_alignment orelse 0),
12567 .extra = @intFromEnum(pl.mode),
12567 .extra = @backingInt(pl.mode),
1256812568 },
1256912569 std.lang.CallingConvention.ShInterruptOptions => .{
1257012570 .tag = tag,
1257112571 .incoming_stack_alignment = .fromByteUnits(pl.incoming_stack_alignment orelse 0),
12572 .extra = @intFromEnum(pl.save),
12572 .extra = @backingInt(pl.save),
1257312573 },
1257412574 std.lang.CallingConvention.SpirvKernelOptions => .{
1257512575 .tag = tag,
......@@ -12579,12 +12579,12 @@ const PackedCallingConvention = packed struct(u18) {
1257912579 std.lang.CallingConvention.SpirvFragmentOptions => .{
1258012580 .tag = tag,
1258112581 .incoming_stack_alignment = .none,
12582 .extra = @as(u4, @intFromEnum(pl.depth_assumption)) << 1 | @intFromBool(pl.pixel_centered_integer),
12582 .extra = @as(u4, @backingInt(pl.depth_assumption)) << 1 | @intFromBool(pl.pixel_centered_integer),
1258312583 },
1258412584 std.lang.CallingConvention.SpirvMeshOptions => .{
1258512585 .tag = tag,
1258612586 .incoming_stack_alignment = .none,
12587 .extra = @intFromEnum(pl.stage_output),
12587 .extra = @backingInt(pl.stage_output),
1258812588 },
1258912589 else => comptime unreachable,
1259012590 },
......@@ -12615,27 +12615,27 @@ const PackedCallingConvention = packed struct(u18) {
1261512615 },
1261612616 std.lang.CallingConvention.ArcInterruptOptions => .{
1261712617 .incoming_stack_alignment = cc.incoming_stack_alignment.toByteUnits(),
12618 .type = @enumFromInt(cc.extra),
12618 .type = @fromBackingInt(@intCast(cc.extra)),
1261912619 },
1262012620 std.lang.CallingConvention.ArmInterruptOptions => .{
1262112621 .incoming_stack_alignment = cc.incoming_stack_alignment.toByteUnits(),
12622 .type = @enumFromInt(cc.extra),
12622 .type = @fromBackingInt(@intCast(cc.extra)),
1262312623 },
1262412624 std.lang.CallingConvention.MicroblazeInterruptOptions => .{
1262512625 .incoming_stack_alignment = cc.incoming_stack_alignment.toByteUnits(),
12626 .type = @enumFromInt(cc.extra),
12626 .type = @fromBackingInt(@intCast(cc.extra)),
1262712627 },
1262812628 std.lang.CallingConvention.MipsInterruptOptions => .{
1262912629 .incoming_stack_alignment = cc.incoming_stack_alignment.toByteUnits(),
12630 .mode = @enumFromInt(cc.extra),
12630 .mode = @fromBackingInt(@intCast(cc.extra)),
1263112631 },
1263212632 std.lang.CallingConvention.RiscvInterruptOptions => .{
1263312633 .incoming_stack_alignment = cc.incoming_stack_alignment.toByteUnits(),
12634 .mode = @enumFromInt(cc.extra),
12634 .mode = @fromBackingInt(@intCast(cc.extra)),
1263512635 },
1263612636 std.lang.CallingConvention.ShInterruptOptions => .{
1263712637 .incoming_stack_alignment = cc.incoming_stack_alignment.toByteUnits(),
12638 .save = @enumFromInt(cc.extra),
12638 .save = @fromBackingInt(@intCast(cc.extra)),
1263912639 },
1264012640 std.lang.CallingConvention.SpirvKernelOptions => .{
1264112641 .x = trailing[0],
......@@ -12644,10 +12644,10 @@ const PackedCallingConvention = packed struct(u18) {
1264412644 },
1264512645 std.lang.CallingConvention.SpirvFragmentOptions => .{
1264612646 .pixel_centered_integer = @bitCast(@as(u1, @truncate(cc.extra))),
12647 .depth_assumption = @enumFromInt(@as(u2, @truncate(cc.extra >> 1))),
12647 .depth_assumption = @fromBackingInt(@intCast(@as(u2, @truncate(cc.extra >> 1)))),
1264812648 },
1264912649 std.lang.CallingConvention.SpirvMeshOptions => .{
12650 .stage_output = @enumFromInt(cc.extra),
12650 .stage_output = @fromBackingInt(@intCast(cc.extra)),
1265112651 .max_primitives = trailing[0],
1265212652 .max_vertices = trailing[1],
1265312653 },
......@@ -12713,7 +12713,7 @@ pub fn resolveUnionLayout(
1271312713 const item = unwrapped_index.getItem(ip);
1271412714 assert(item.tag == .type_union);
1271512715
12716 extra_items[item.data + std.meta.fieldIndex(Tag.TypeUnion, "enum_tag_type").?] = @intFromEnum(enum_tag_type);
12716 extra_items[item.data + std.meta.fieldIndex(Tag.TypeUnion, "enum_tag_type").?] = @backingInt(enum_tag_type);
1271712717 extra_items[item.data + std.meta.fieldIndex(Tag.TypeUnion, "size").?] = size;
1271812718 extra_items[item.data + std.meta.fieldIndex(Tag.TypeUnion, "padding").?] = padding;
1271912719 const flags: *Tag.TypeUnion.Flags = @ptrCast(&extra_items[item.data + std.meta.fieldIndex(Tag.TypeUnion, "flags").?]);
......@@ -12746,7 +12746,7 @@ pub fn resolvePackedStructLayout(
1274612746 else => unreachable,
1274712747 }
1274812748
12749 extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "backing_int_type").?] = @intFromEnum(backing_int_type);
12749 extra_items[item.data + std.meta.fieldIndex(Tag.TypeStructPacked, "backing_int_type").?] = @backingInt(backing_int_type);
1275012750}
1275112751
1275212752/// Asserts that `union_type` is a packed union type.
......@@ -12772,8 +12772,8 @@ pub fn resolvePackedUnionLayout(
1277212772 else => unreachable,
1277312773 }
1277412774
12775 extra_items[item.data + std.meta.fieldIndex(Tag.TypeUnionPacked, "enum_tag_type").?] = @intFromEnum(enum_tag_type);
12776 extra_items[item.data + std.meta.fieldIndex(Tag.TypeUnionPacked, "backing_int_type").?] = @intFromEnum(backing_int_type);
12775 extra_items[item.data + std.meta.fieldIndex(Tag.TypeUnionPacked, "enum_tag_type").?] = @backingInt(enum_tag_type);
12776 extra_items[item.data + std.meta.fieldIndex(Tag.TypeUnionPacked, "backing_int_type").?] = @backingInt(backing_int_type);
1277712777}
1277812778
1277912779/// Asserts that `enum_type` is an enum type.
......@@ -12799,7 +12799,7 @@ pub fn resolveEnumLayout(
1279912799 else => unreachable,
1280012800 }
1280112801
12802 extra_items[item.data + std.meta.fieldIndex(Tag.TypeEnum, "int_tag_type").?] = @intFromEnum(int_tag_type);
12802 extra_items[item.data + std.meta.fieldIndex(Tag.TypeEnum, "int_tag_type").?] = @backingInt(int_tag_type);
1280312803}
1280412804
1280512805/// Sets the "want_layout" flag on the given struct, union, or enum type. Returns true if the flag
src/Module.zig+3-3
......@@ -353,11 +353,11 @@ pub fn create(arena: Allocator, options: CreateOptions) !*Module {
353353 // See https://github.com/ziglang/zig/issues/23539
354354 if (target_util.isDynamicAMDGCNFeature(target, feature)) continue;
355355
356 if (target.cpu.arch.isPowerPC() and @as(std.Target.powerpc.Feature, @enumFromInt(feature.index)) == .@"64bit") continue;
357 if (target.cpu.arch.isX86() and @as(std.Target.x86.Feature, @enumFromInt(feature.index)) == .x32) continue;
356 if (target.cpu.arch.isPowerPC() and @as(std.Target.powerpc.Feature, @fromBackingInt(@intCast(feature.index))) == .@"64bit") continue;
357 if (target.cpu.arch.isX86() and @as(std.Target.x86.Feature, @fromBackingInt(@intCast(feature.index))) == .x32) continue;
358358
359359 var is_enabled = target.cpu.features.isEnabled(feature.index);
360 if (target.cpu.arch == .s390x and @as(std.Target.s390x.Feature, @enumFromInt(feature.index)) == .backchain) {
360 if (target.cpu.arch == .s390x and @as(std.Target.s390x.Feature, @fromBackingInt(@intCast(feature.index))) == .backchain) {
361361 is_enabled = !omit_frame_pointer;
362362 }
363363
src/Sema.zig+433-433
......@@ -142,7 +142,7 @@ const RuntimeIndex = enum(u32) {
142142 _,
143143
144144 pub fn increment(ri: *RuntimeIndex) void {
145 ri.* = @enumFromInt(@intFromEnum(ri.*) + 1);
145 ri.* = @fromBackingInt(@intCast(@backingInt(ri.*) + 1));
146146 }
147147};
148148
......@@ -191,11 +191,11 @@ fn newComptimeAlloc(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type, align
191191 .alignment = alignment,
192192 .runtime_index = block.runtime_index,
193193 });
194 return @enumFromInt(idx);
194 return @fromBackingInt(@intCast(idx));
195195}
196196
197197pub fn getComptimeAlloc(sema: *Sema, idx: ComptimeAllocIndex) *ComptimeAlloc {
198 return &sema.comptime_allocs.items[@intFromEnum(idx)];
198 return &sema.comptime_allocs.items[@backingInt(idx)];
199199}
200200
201201pub const default_branch_quota = 1000;
......@@ -253,7 +253,7 @@ pub const InferredErrorSet = struct {
253253/// be called safely for any of the instructions passed in.
254254pub const InstMap = struct {
255255 items: []Air.Inst.Ref = &[_]Air.Inst.Ref{},
256 start: Zir.Inst.Index = @enumFromInt(0),
256 start: Zir.Inst.Index = @fromBackingInt(@intCast(0)),
257257
258258 pub fn deinit(map: InstMap, allocator: mem.Allocator) void {
259259 allocator.free(map.items);
......@@ -261,7 +261,7 @@ pub const InstMap = struct {
261261
262262 pub fn get(map: InstMap, key: Zir.Inst.Index) ?Air.Inst.Ref {
263263 if (!map.contains(key)) return null;
264 return map.items[@intFromEnum(key) - @intFromEnum(map.start)];
264 return map.items[@backingInt(key) - @backingInt(map.start)];
265265 }
266266
267267 pub fn putAssumeCapacity(
......@@ -269,7 +269,7 @@ pub const InstMap = struct {
269269 key: Zir.Inst.Index,
270270 ref: Air.Inst.Ref,
271271 ) void {
272 map.items[@intFromEnum(key) - @intFromEnum(map.start)] = ref;
272 map.items[@backingInt(key) - @backingInt(map.start)] = ref;
273273 }
274274
275275 pub fn putAssumeCapacityNoClobber(
......@@ -290,7 +290,7 @@ pub const InstMap = struct {
290290 map: *InstMap,
291291 key: Zir.Inst.Index,
292292 ) GetOrPutResult {
293 const index = @intFromEnum(key) - @intFromEnum(map.start);
293 const index = @backingInt(key) - @backingInt(map.start);
294294 return GetOrPutResult{
295295 .value_ptr = &map.items[index],
296296 .found_existing = map.items[index] != .none,
......@@ -299,12 +299,12 @@ pub const InstMap = struct {
299299
300300 pub fn remove(map: InstMap, key: Zir.Inst.Index) bool {
301301 if (!map.contains(key)) return false;
302 map.items[@intFromEnum(key) - @intFromEnum(map.start)] = .none;
302 map.items[@backingInt(key) - @backingInt(map.start)] = .none;
303303 return true;
304304 }
305305
306306 pub fn contains(map: InstMap, key: Zir.Inst.Index) bool {
307 return map.items[@intFromEnum(key) - @intFromEnum(map.start)] != .none;
307 return map.items[@backingInt(key) - @backingInt(map.start)] != .none;
308308 }
309309
310310 pub fn ensureSpaceForInstructions(
......@@ -313,7 +313,7 @@ pub const InstMap = struct {
313313 insts: []const Zir.Inst.Index,
314314 ) !void {
315315 const start, const end = mem.minMax(u32, @ptrCast(insts));
316 const map_start = @intFromEnum(map.start);
316 const map_start = @backingInt(map.start);
317317 if (map_start <= start and end < map.items.len + map_start)
318318 return;
319319
......@@ -336,7 +336,7 @@ pub const InstMap = struct {
336336
337337 allocator.free(map.items);
338338 map.items = new_items;
339 map.start = @enumFromInt(better_start);
339 map.start = @fromBackingInt(@intCast(better_start));
340340 }
341341};
342342
......@@ -814,7 +814,7 @@ pub const Block = struct {
814814 try sema.air_instructions.ensureUnusedCapacity(gpa, 1);
815815 try block.instructions.ensureUnusedCapacity(gpa, 1);
816816
817 const result_index: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
817 const result_index: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
818818 sema.air_instructions.appendAssumeCapacity(inst);
819819 block.instructions.appendAssumeCapacity(result_index);
820820 return result_index;
......@@ -832,10 +832,10 @@ pub const Block = struct {
832832
833833 try sema.air_instructions.ensureUnusedCapacity(gpa, 1);
834834
835 const result_index: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
835 const result_index: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
836836 sema.air_instructions.appendAssumeCapacity(inst);
837837
838 try block.instructions.insert(gpa, @intFromEnum(index), result_index);
838 try block.instructions.insert(gpa, @backingInt(index), result_index);
839839 return result_index;
840840 }
841841
......@@ -1020,7 +1020,7 @@ fn analyzeBodyRuntimeBreak(sema: *Sema, block: *Block, body: []const Zir.Inst.In
10201020 sema.analyzeBodyInner(block, body) catch |err| switch (err) {
10211021 error.ComptimeBreak => {
10221022 const zir_datas = sema.code.instructions.items(.data);
1023 const break_data = zir_datas[@intFromEnum(sema.comptime_break_inst)].@"break";
1023 const break_data = zir_datas[@backingInt(sema.comptime_break_inst)].@"break";
10241024 const extra = sema.code.extraData(Zir.Inst.Break, break_data.payload_index).data;
10251025 try sema.addRuntimeBreak(block, extra.block_inst, break_data.operand);
10261026 },
......@@ -1061,7 +1061,7 @@ fn analyzeInlineBody(
10611061 error.ComptimeBreak => {},
10621062 else => |e| return e,
10631063 }
1064 const break_inst = sema.code.instructions.get(@intFromEnum(sema.comptime_break_inst));
1064 const break_inst = sema.code.instructions.get(@backingInt(sema.comptime_break_inst));
10651065 switch (break_inst.tag) {
10661066 .switch_continue => {
10671067 // This is handled by separate logic.
......@@ -1145,7 +1145,7 @@ fn analyzeBodyInner(
11451145 }, inst });
11461146 }
11471147
1148 const air_ref: Air.Inst.Ref = inst: switch (tags[@intFromEnum(inst)]) {
1148 const air_ref: Air.Inst.Ref = inst: switch (tags[@backingInt(inst)]) {
11491149 // zig fmt: off
11501150 .alloc => try sema.zirAlloc(block, inst),
11511151 .alloc_inferred => try sema.zirAllocInferred(block, true),
......@@ -1373,7 +1373,7 @@ fn analyzeBodyInner(
13731373 .declaration => unreachable,
13741374
13751375 .extended => ext: {
1376 const extended = datas[@intFromEnum(inst)].extended;
1376 const extended = datas[@backingInt(inst)].extended;
13771377 break :ext switch (extended.opcode) {
13781378 // zig fmt: off
13791379 .struct_decl => try sema.zirStructDecl( block, inst),
......@@ -1624,7 +1624,7 @@ fn analyzeBodyInner(
16241624 },
16251625 .check_comptime_control_flow => {
16261626 if (!block.isComptime()) {
1627 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
1627 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
16281628 const src = block.nodeOffset(inst_data.src_node);
16291629 const inline_block = inst_data.operand.toIndex().?;
16301630
......@@ -1636,7 +1636,7 @@ fn analyzeBodyInner(
16361636 check_block = check_block.parent.?;
16371637 };
16381638
1639 if (@intFromEnum(target_runtime_index) < @intFromEnum(block.runtime_index)) {
1639 if (@backingInt(target_runtime_index) < @backingInt(block.runtime_index)) {
16401640 const runtime_src = block.runtime_cond orelse block.runtime_loop.?;
16411641 const msg = msg: {
16421642 const msg = try sema.errMsg(src, "comptime control flow inside runtime block", .{});
......@@ -1656,13 +1656,13 @@ fn analyzeBodyInner(
16561656 continue;
16571657 },
16581658 .restore_err_ret_index_unconditional => {
1659 const un_node = datas[@intFromEnum(inst)].un_node;
1659 const un_node = datas[@backingInt(inst)].un_node;
16601660 try sema.restoreErrRetIndex(block, block.nodeOffset(un_node.src_node), un_node.operand, .none);
16611661 i += 1;
16621662 continue;
16631663 },
16641664 .restore_err_ret_index_fn_entry => {
1665 const un_node = datas[@intFromEnum(inst)].un_node;
1665 const un_node = datas[@backingInt(inst)].un_node;
16661666 try sema.restoreErrRetIndex(block, block.nodeOffset(un_node.src_node), .none, un_node.operand);
16671667 i += 1;
16681668 continue;
......@@ -1685,7 +1685,7 @@ fn analyzeBodyInner(
16851685 .repeat => {
16861686 if (block.isComptime()) {
16871687 // Send comptime control flow back to the beginning of this block.
1688 const src = block.nodeOffset(datas[@intFromEnum(inst)].node);
1688 const src = block.nodeOffset(datas[@backingInt(inst)].node);
16891689 try sema.emitBackwardBranch(block, src);
16901690 i = 0;
16911691 continue;
......@@ -1700,7 +1700,7 @@ fn analyzeBodyInner(
17001700 },
17011701 .repeat_inline => {
17021702 // Send comptime control flow back to the beginning of this block.
1703 const src = block.nodeOffset(datas[@intFromEnum(inst)].node);
1703 const src = block.nodeOffset(datas[@backingInt(inst)].node);
17041704 try sema.emitBackwardBranch(block, src);
17051705 i = 0;
17061706 continue;
......@@ -1722,7 +1722,7 @@ fn analyzeBodyInner(
17221722 } else try sema.zirBlock(block, inst),
17231723
17241724 .block_comptime => {
1725 const pl_node = datas[@intFromEnum(inst)].pl_node;
1725 const pl_node = datas[@backingInt(inst)].pl_node;
17261726 const src = block.nodeOffset(pl_node.src_node);
17271727 const extra = sema.code.extraData(Zir.Inst.BlockComptime, pl_node.payload_index);
17281728 const block_body = sema.code.bodySlice(extra.end, extra.data.body_len);
......@@ -1760,7 +1760,7 @@ fn analyzeBodyInner(
17601760 // through a runtime conditional branch, we must retroactively emit
17611761 // a block, so we remember the block index here just in case.
17621762 const block_index = block.instructions.items.len;
1763 const inst_data = datas[@intFromEnum(inst)].pl_node;
1763 const inst_data = datas[@backingInt(inst)].pl_node;
17641764 const extra = sema.code.extraData(Zir.Inst.Block, inst_data.payload_index);
17651765 const inline_body = sema.code.bodySlice(extra.end, extra.data.body_len);
17661766 const gpa = sema.gpa;
......@@ -1780,7 +1780,7 @@ fn analyzeBodyInner(
17801780 // If this block contains a function prototype, we need to reset the
17811781 // current list of parameters and restore it later.
17821782 // Note: this probably needs to be resolved in a more general manner.
1783 const tag_index = @intFromEnum(inline_body[inline_body.len - 1]);
1783 const tag_index = @backingInt(inline_body[inline_body.len - 1]);
17841784 child_block.inline_block = (if (tags[tag_index] == .repeat_inline)
17851785 inline_body[0]
17861786 else
......@@ -1801,7 +1801,7 @@ fn analyzeBodyInner(
18011801 } else |err| switch (err) {
18021802 error.ComptimeBreak => brk_res: {
18031803 const break_inst = sema.comptime_break_inst;
1804 const break_data = sema.code.instructions.items(.data)[@intFromEnum(break_inst)].@"break";
1804 const break_data = sema.code.instructions.items(.data)[@backingInt(break_inst)].@"break";
18051805 const break_extra = sema.code.extraData(Zir.Inst.Break, break_data.payload_index).data;
18061806 break :brk_res .{
18071807 .block_inst = break_extra.block_inst,
......@@ -1869,7 +1869,7 @@ fn analyzeBodyInner(
18691869 break;
18701870 },
18711871 .condbr_inline => {
1872 const inst_data = datas[@intFromEnum(inst)].pl_node;
1872 const inst_data = datas[@backingInt(inst)].pl_node;
18731873 const cond_src = block.src(.{ .node_offset_if_cond = inst_data.src_node });
18741874 const extra = sema.code.extraData(Zir.Inst.CondBr, inst_data.payload_index);
18751875 const then_body = sema.code.bodySlice(extra.end, extra.data.then_body_len);
......@@ -1898,7 +1898,7 @@ fn analyzeBodyInner(
18981898 },
18991899 .@"try" => blk: {
19001900 if (!block.isComptime()) break :blk try sema.zirTry(block, inst);
1901 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1901 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
19021902 const src = block.nodeOffset(inst_data.src_node);
19031903 const operand_src = block.src(.{ .node_offset_try_operand = inst_data.src_node });
19041904 const extra = sema.code.extraData(Zir.Inst.Try, inst_data.payload_index);
......@@ -1924,7 +1924,7 @@ fn analyzeBodyInner(
19241924 },
19251925 .try_ptr => blk: {
19261926 if (!block.isComptime()) break :blk try sema.zirTryPtr(block, inst);
1927 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1927 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
19281928 const src = block.nodeOffset(inst_data.src_node);
19291929 const operand_src = block.src(.{ .node_offset_try_operand = inst_data.src_node });
19301930 const extra = sema.code.extraData(Zir.Inst.Try, inst_data.payload_index);
......@@ -1940,7 +1940,7 @@ fn analyzeBodyInner(
19401940 break :blk result;
19411941 },
19421942 .@"defer" => blk: {
1943 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].@"defer";
1943 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].@"defer";
19441944 const defer_body = sema.code.bodySlice(inst_data.index, inst_data.len);
19451945 if (sema.analyzeBodyInner(block, defer_body)) {
19461946 // The defer terminated noreturn - no more analysis needed.
......@@ -1956,7 +1956,7 @@ fn analyzeBodyInner(
19561956 },
19571957 };
19581958
1959 const is_inferred_alloc = if (air_ref.toIndex()) |air_inst| switch (sema.air_instructions.items(.tag)[@intFromEnum(air_inst)]) {
1959 const is_inferred_alloc = if (air_ref.toIndex()) |air_inst| switch (sema.air_instructions.items(.tag)[@backingInt(air_inst)]) {
19601960 .inferred_alloc, .inferred_alloc_comptime => true,
19611961 else => false,
19621962 } else false;
......@@ -1998,7 +1998,7 @@ fn resolveInst(sema: *Sema, zir_ref: Zir.Inst.Ref) Air.Inst.Ref {
19981998 }
19991999 // First section of indexes correspond to a set number of constant values.
20002000 // We intentionally map the same indexes to the same values between ZIR and AIR.
2001 return @enumFromInt(@intFromEnum(zir_ref));
2001 return @fromBackingInt(@intCast(@backingInt(zir_ref)));
20022002}
20032003
20042004fn resolveConstBool(
......@@ -2130,29 +2130,29 @@ fn genericPoisonReason(sema: *Sema, block: *Block, ref: Zir.Inst.Ref) GenericPoi
21302130 var cur = ref;
21312131 while (true) {
21322132 const inst = cur.toIndex() orelse return .unknown;
2133 switch (sema.code.instructions.items(.tag)[@intFromEnum(inst)]) {
2133 switch (sema.code.instructions.items(.tag)[@backingInt(inst)]) {
21342134 .validate_array_init_ref_ty => {
2135 const pl_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
2135 const pl_node = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
21362136 const extra = sema.code.extraData(Zir.Inst.ArrayInitRefTy, pl_node.payload_index).data;
21372137 cur = extra.ptr_ty;
21382138 },
21392139 .array_init_elem_type => {
2140 const bin = sema.code.instructions.items(.data)[@intFromEnum(inst)].bin;
2140 const bin = sema.code.instructions.items(.data)[@backingInt(inst)].bin;
21412141 cur = bin.lhs;
21422142 },
21432143 .indexable_ptr_elem_type, .splat_op_result_ty => {
2144 const un_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
2144 const un_node = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
21452145 cur = un_node.operand;
21462146 },
21472147 .struct_init_field_type => {
2148 const pl_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
2148 const pl_node = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
21492149 const extra = sema.code.extraData(Zir.Inst.FieldType, pl_node.payload_index).data;
21502150 cur = extra.container_type;
21512151 },
21522152 .elem_type => {
21532153 // There are two cases here: the pointer type may already have been
21542154 // generic poison, or it may have been an anyopaque pointer.
2155 const un_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
2155 const un_node = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
21562156 const operand_ref = sema.resolveInst(un_node.operand);
21572157 const operand_val = operand_ref.toInterned() orelse return .unknown;
21582158 if (operand_val == .generic_poison_type) {
......@@ -2167,7 +2167,7 @@ fn genericPoisonReason(sema: *Sema, block: *Block, ref: Zir.Inst.Ref) GenericPoi
21672167 // A function call can never return generic poison, so we must be
21682168 // evaluating an `anytype` function parameter.
21692169 // TODO: better source location - function decl rather than call
2170 const pl_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
2170 const pl_node = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
21712171 return .{ .anytype_param = block.nodeOffset(pl_node.src_node) };
21722172 },
21732173 else => return .unknown,
......@@ -2242,7 +2242,7 @@ fn resolveValue(sema: *Sema, inst: Air.Inst.Ref) ?Value {
22422242
22432243 // Runtime-known value. We'll be returning `null`, but first, some assertions.
22442244 const air_tags = sema.air_instructions.items(.tag);
2245 switch (air_tags[@intFromEnum(inst.toIndex().?)]) {
2245 switch (air_tags[@backingInt(inst.toIndex().?)]) {
22462246 .inferred_alloc => unreachable, // assertion failure
22472247 .inferred_alloc_comptime => unreachable, // assertion failure
22482248 else => {},
......@@ -3043,7 +3043,7 @@ fn zirErrorSetDecl(
30433043 const gpa = comp.gpa;
30443044 const io = comp.io;
30453045
3046 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
3046 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
30473047 const extra = sema.code.extraData(Zir.Inst.ErrorSetDecl, inst_data.payload_index);
30483048
30493049 var names: InferredErrorSet.NameMap = .{};
......@@ -3052,7 +3052,7 @@ fn zirErrorSetDecl(
30523052 var extra_index: u32 = @intCast(extra.end);
30533053 const extra_index_end = extra_index + extra.data.fields_len;
30543054 while (extra_index < extra_index_end) : (extra_index += 1) {
3055 const name_index: Zir.NullTerminatedString = @enumFromInt(sema.code.extra[extra_index]);
3055 const name_index: Zir.NullTerminatedString = @fromBackingInt(@intCast(sema.code.extra[extra_index]));
30563056 const name = sema.code.nullTerminatedString(name_index);
30573057 const name_ip = try zcu.intern_pool.getOrPutString(gpa, io, pt.tid, name, .no_embedded_nulls);
30583058 _ = try pt.getErrorValue(name_ip);
......@@ -3067,7 +3067,7 @@ fn zirRetPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
30673067 const pt = sema.pt;
30683068 const zcu = pt.zcu;
30693069
3070 const src = block.nodeOffset(sema.code.instructions.items(.data)[@intFromEnum(inst)].node);
3070 const src = block.nodeOffset(sema.code.instructions.items(.data)[@backingInt(inst)].node);
30713071
30723072 if (block.isComptime() or sema.fn_ret_ty.comptimeOnly(zcu)) {
30733073 return sema.analyzeComptimeAlloc(block, src, sema.fn_ret_ty, .none);
......@@ -3090,13 +3090,13 @@ fn zirRetPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
30903090}
30913091
30923092fn zirRef(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
3093 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_tok;
3093 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_tok;
30943094 const operand = sema.resolveInst(inst_data.operand);
30953095 return sema.analyzeRef(block, block.tokenOffset(inst_data.src_tok), operand, .none);
30963096}
30973097
30983098fn zirDeref(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
3099 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3099 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
31003100 const src = block.nodeOffset(inst_data.src_node);
31013101 const ptr_src = block.src(.{ .node_offset_deref_ptr = inst_data.src_node });
31023102 const operand = sema.resolveInst(inst_data.operand);
......@@ -3109,7 +3109,7 @@ fn zirDeref(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.I
31093109fn zirRefDeref(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
31103110 const pt = sema.pt;
31113111 const zcu = pt.zcu;
3112 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3112 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
31133113 const src = block.nodeOffset(inst_data.src_node);
31143114 const operand = sema.resolveInst(inst_data.operand);
31153115 const operand_ty = sema.typeOf(operand);
......@@ -3169,7 +3169,7 @@ fn validateDeref(
31693169}
31703170
31713171fn zirEnsureResultUsed(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
3172 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3172 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
31733173 const operand = sema.resolveInst(inst_data.operand);
31743174 const src = block.nodeOffset(inst_data.src_node);
31753175
......@@ -3212,7 +3212,7 @@ fn ensureResultUsed(
32123212fn zirEnsureResultNonError(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
32133213 const pt = sema.pt;
32143214 const zcu = pt.zcu;
3215 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3215 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
32163216 const operand = sema.resolveInst(inst_data.operand);
32173217 const src = block.nodeOffset(inst_data.src_node);
32183218 const operand_ty = sema.typeOf(operand);
......@@ -3234,7 +3234,7 @@ fn zirEnsureResultNonError(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Com
32343234fn zirEnsureErrUnionPayloadVoid(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
32353235 const pt = sema.pt;
32363236 const zcu = pt.zcu;
3237 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3237 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
32383238 const src = block.nodeOffset(inst_data.src_node);
32393239 const operand = sema.resolveInst(inst_data.operand);
32403240 const operand_ty = sema.typeOf(operand);
......@@ -3256,7 +3256,7 @@ fn zirEnsureErrUnionPayloadVoid(sema: *Sema, block: *Block, inst: Zir.Inst.Index
32563256}
32573257
32583258fn zirIndexablePtrLen(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
3259 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3259 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
32603260 const src = block.nodeOffset(inst_data.src_node);
32613261 const object = sema.resolveInst(inst_data.operand);
32623262
......@@ -3320,13 +3320,13 @@ fn zirAllocExtended(
33203320 var extra_index: usize = extra.end;
33213321
33223322 const var_ty: Type = if (small.has_type) blk: {
3323 const type_ref: Zir.Inst.Ref = @enumFromInt(sema.code.extra[extra_index]);
3323 const type_ref: Zir.Inst.Ref = @fromBackingInt(@intCast(sema.code.extra[extra_index]));
33243324 extra_index += 1;
33253325 break :blk try sema.resolveType(block, ty_src, type_ref);
33263326 } else undefined;
33273327
33283328 const alignment = if (small.has_align) blk: {
3329 const align_ref: Zir.Inst.Ref = @enumFromInt(sema.code.extra[extra_index]);
3329 const align_ref: Zir.Inst.Ref = @fromBackingInt(@intCast(sema.code.extra[extra_index]));
33303330 extra_index += 1;
33313331 break :blk try sema.resolveAlign(block, align_src, align_ref);
33323332 } else .none;
......@@ -3361,7 +3361,7 @@ fn zirAllocExtended(
33613361 }
33623362
33633363 if (block.isComptime() or small.is_comptime) {
3364 const iac_index: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
3364 const iac_index: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
33653365 try sema.air_instructions.append(gpa, .{
33663366 .tag = .inferred_alloc_comptime,
33673367 .data = .{ .inferred_alloc_comptime = .{
......@@ -3389,7 +3389,7 @@ fn zirAllocExtended(
33893389}
33903390
33913391fn zirAllocComptime(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
3392 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3392 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
33933393 const ty_src = block.src(.{ .node_offset_var_decl_ty = inst_data.src_node });
33943394 const var_src = block.nodeOffset(inst_data.src_node);
33953395 const var_ty = try sema.resolveType(block, ty_src, inst_data.operand);
......@@ -3400,7 +3400,7 @@ fn zirAllocComptime(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr
34003400fn zirMakePtrConst(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
34013401 const pt = sema.pt;
34023402 const zcu = pt.zcu;
3403 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3403 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
34043404 const alloc = sema.resolveInst(inst_data.operand);
34053405 const alloc_ty = sema.typeOf(alloc);
34063406 const ptr_info = alloc_ty.ptrInfo(zcu);
......@@ -3502,7 +3502,7 @@ fn resolveComptimeKnownAllocPtr(sema: *Sema, block: *Block, alloc: Air.Inst.Ref,
35023502
35033503 simple: {
35043504 if (stores.len != 1) break :simple;
3505 const store_inst = sema.air_instructions.get(@intFromEnum(stores[0]));
3505 const store_inst = sema.air_instructions.get(@backingInt(stores[0]));
35063506 switch (store_inst.tag) {
35073507 .store, .store_safe => {},
35083508 .set_union_tag, .optional_payload_ptr_set, .errunion_payload_ptr_set => break :simple, // there's OPV stuff going on!
......@@ -3536,7 +3536,7 @@ fn resolveComptimeKnownAllocPtr(sema: *Sema, block: *Block, alloc: Air.Inst.Ref,
35363536 var to_map = try std.array_list.Managed(Air.Inst.Index).initCapacity(sema.arena, stores.len);
35373537
35383538 for (stores) |store_inst_idx| {
3539 const store_inst = sema.air_instructions.get(@intFromEnum(store_inst_idx));
3539 const store_inst = sema.air_instructions.get(@backingInt(store_inst_idx));
35403540 const ptr_to_map = switch (store_inst.tag) {
35413541 .store, .store_safe => store_inst.data.bin_op.lhs.toIndex().?, // Map the pointer being stored to.
35423542 .set_union_tag => store_inst.data.bin_op.lhs.toIndex().?, // Map the union pointer.
......@@ -3557,12 +3557,12 @@ fn resolveComptimeKnownAllocPtr(sema: *Sema, block: *Block, alloc: Air.Inst.Ref,
35573557 field: u32,
35583558 elem: u64,
35593559 };
3560 const inst_tag = tmp_air.instructions.items(.tag)[@intFromEnum(air_ptr)];
3560 const inst_tag = tmp_air.instructions.items(.tag)[@backingInt(air_ptr)];
35613561 const air_parent_ptr: Air.Inst.Ref, const method: PointerMethod = switch (inst_tag) {
35623562 .struct_field_ptr => blk: {
35633563 const data = tmp_air.extraData(
35643564 Air.StructField,
3565 tmp_air.instructions.items(.data)[@intFromEnum(air_ptr)].ty_pl.payload,
3565 tmp_air.instructions.items(.data)[@backingInt(air_ptr)].ty_pl.payload,
35663566 ).data;
35673567 break :blk .{
35683568 data.struct_operand,
......@@ -3574,7 +3574,7 @@ fn resolveComptimeKnownAllocPtr(sema: *Sema, block: *Block, alloc: Air.Inst.Ref,
35743574 .struct_field_ptr_index_2,
35753575 .struct_field_ptr_index_3,
35763576 => .{
3577 tmp_air.instructions.items(.data)[@intFromEnum(air_ptr)].ty_op.operand,
3577 tmp_air.instructions.items(.data)[@backingInt(air_ptr)].ty_op.operand,
35783578 .{ .field = switch (inst_tag) {
35793579 .struct_field_ptr_index_0 => 0,
35803580 .struct_field_ptr_index_1 => 1,
......@@ -3584,17 +3584,17 @@ fn resolveComptimeKnownAllocPtr(sema: *Sema, block: *Block, alloc: Air.Inst.Ref,
35843584 } },
35853585 },
35863586 .ptr_slice_ptr_ptr => .{
3587 tmp_air.instructions.items(.data)[@intFromEnum(air_ptr)].ty_op.operand,
3587 tmp_air.instructions.items(.data)[@backingInt(air_ptr)].ty_op.operand,
35883588 .{ .field = Value.slice_ptr_index },
35893589 },
35903590 .ptr_slice_len_ptr => .{
3591 tmp_air.instructions.items(.data)[@intFromEnum(air_ptr)].ty_op.operand,
3591 tmp_air.instructions.items(.data)[@backingInt(air_ptr)].ty_op.operand,
35923592 .{ .field = Value.slice_len_index },
35933593 },
35943594 .ptr_elem_ptr => blk: {
35953595 const data = tmp_air.extraData(
35963596 Air.Bin,
3597 tmp_air.instructions.items(.data)[@intFromEnum(air_ptr)].ty_pl.payload,
3597 tmp_air.instructions.items(.data)[@backingInt(air_ptr)].ty_pl.payload,
35983598 ).data;
35993599 const idx_val = sema.resolveValue(data.rhs).?;
36003600 break :blk .{
......@@ -3603,15 +3603,15 @@ fn resolveComptimeKnownAllocPtr(sema: *Sema, block: *Block, alloc: Air.Inst.Ref,
36033603 };
36043604 },
36053605 .ptr_cast => .{
3606 tmp_air.instructions.items(.data)[@intFromEnum(air_ptr)].ty_op.operand,
3606 tmp_air.instructions.items(.data)[@backingInt(air_ptr)].ty_op.operand,
36073607 .same_addr,
36083608 },
36093609 .optional_payload_ptr_set => .{
3610 tmp_air.instructions.items(.data)[@intFromEnum(air_ptr)].ty_op.operand,
3610 tmp_air.instructions.items(.data)[@backingInt(air_ptr)].ty_op.operand,
36113611 .opt_payload,
36123612 },
36133613 .errunion_payload_ptr_set => .{
3614 tmp_air.instructions.items(.data)[@intFromEnum(air_ptr)].ty_op.operand,
3614 tmp_air.instructions.items(.data)[@backingInt(air_ptr)].ty_op.operand,
36153615 .eu_payload,
36163616 },
36173617 else => unreachable,
......@@ -3688,7 +3688,7 @@ fn resolveComptimeKnownAllocPtr(sema: *Sema, block: *Block, alloc: Air.Inst.Ref,
36883688 // instructions were already done above.
36893689
36903690 for (stores) |store_inst_idx| {
3691 const store_inst = sema.air_instructions.get(@intFromEnum(store_inst_idx));
3691 const store_inst = sema.air_instructions.get(@backingInt(store_inst_idx));
36923692 switch (store_inst.tag) {
36933693 .optional_payload_ptr_set, .errunion_payload_ptr_set => {}, // Handled explicitly above
36943694 .set_union_tag => {
......@@ -3750,9 +3750,9 @@ fn finishResolveComptimeKnownAllocPtr(
37503750 .operand = .zero_usize,
37513751 } } };
37523752
3753 sema.air_instructions.set(@intFromEnum(alloc_inst), nop_inst);
3753 sema.air_instructions.set(@backingInt(alloc_inst), nop_inst);
37543754 for (comptime_info.stores.items(.inst)) |store_inst| {
3755 sema.air_instructions.set(@intFromEnum(store_inst), nop_inst);
3755 sema.air_instructions.set(@backingInt(store_inst), nop_inst);
37563756 }
37573757
37583758 if (Value.fromInterned(result_val).canMutateComptimeVarState(zcu)) {
......@@ -3812,14 +3812,14 @@ fn zirAllocInferredComptime(
38123812 .ptr = undefined,
38133813 } },
38143814 });
3815 return @as(Air.Inst.Index, @enumFromInt(sema.air_instructions.len - 1)).toRef();
3815 return @as(Air.Inst.Index, @fromBackingInt(@intCast(sema.air_instructions.len - 1))).toRef();
38163816}
38173817
38183818fn zirAlloc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
38193819 const pt = sema.pt;
38203820 const zcu = pt.zcu;
38213821
3822 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3822 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
38233823 const ty_src = block.src(.{ .node_offset_var_decl_ty = inst_data.src_node });
38243824 const var_src = block.nodeOffset(inst_data.src_node);
38253825
......@@ -3848,7 +3848,7 @@ fn zirAllocMut(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
38483848 const pt = sema.pt;
38493849 const zcu = pt.zcu;
38503850
3851 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3851 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
38523852 const ty_src = block.src(.{ .node_offset_var_decl_ty = inst_data.src_node });
38533853 const var_src = block.nodeOffset(inst_data.src_node);
38543854
......@@ -3886,7 +3886,7 @@ fn zirAllocInferred(
38863886 .ptr = undefined,
38873887 } },
38883888 });
3889 return @as(Air.Inst.Index, @enumFromInt(sema.air_instructions.len - 1)).toRef();
3889 return @as(Air.Inst.Index, @fromBackingInt(@intCast(sema.air_instructions.len - 1))).toRef();
38903890 }
38913891
38923892 const result_index = try block.addInstAsIndex(.{
......@@ -3908,24 +3908,24 @@ fn zirResolveInferredAlloc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Com
39083908 const pt = sema.pt;
39093909 const zcu = pt.zcu;
39103910 const gpa = sema.gpa;
3911 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
3911 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
39123912 const src = block.nodeOffset(inst_data.src_node);
39133913 const ty_src = block.src(.{ .node_offset_var_decl_ty = inst_data.src_node });
39143914 const ptr = sema.resolveInst(inst_data.operand);
39153915 const ptr_inst = ptr.toIndex().?;
39163916 const target = zcu.getTarget();
39173917
3918 switch (sema.air_instructions.items(.tag)[@intFromEnum(ptr_inst)]) {
3918 switch (sema.air_instructions.items(.tag)[@backingInt(ptr_inst)]) {
39193919 .inferred_alloc_comptime => {
39203920 // The work was already done for us by `Sema.storeToInferredAllocComptime`. Also, since
39213921 // we had a value of the exact correct type to store, the result type's layout must be
39223922 // already resolved. So all we need to do here is return the pointer.
3923 const iac = sema.air_instructions.items(.data)[@intFromEnum(ptr_inst)].inferred_alloc_comptime;
3923 const iac = sema.air_instructions.items(.data)[@backingInt(ptr_inst)].inferred_alloc_comptime;
39243924 const resolved_ptr = iac.ptr;
39253925
39263926 if (std.debug.runtime_safety) {
39273927 // The inferred_alloc_comptime should never be referenced again
3928 sema.air_instructions.set(@intFromEnum(ptr_inst), .{ .tag = undefined, .data = undefined });
3928 sema.air_instructions.set(@backingInt(ptr_inst), .{ .tag = undefined, .data = undefined });
39293929 }
39303930
39313931 const val = switch (zcu.intern_pool.indexToKey(resolved_ptr).ptr.base_addr) {
......@@ -3948,12 +3948,12 @@ fn zirResolveInferredAlloc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Com
39483948 return Air.internedToRef(resolved_ptr);
39493949 },
39503950 .inferred_alloc => {
3951 const ia1 = sema.air_instructions.items(.data)[@intFromEnum(ptr_inst)].inferred_alloc;
3951 const ia1 = sema.air_instructions.items(.data)[@backingInt(ptr_inst)].inferred_alloc;
39523952 const ia2 = sema.unresolved_inferred_allocs.fetchSwapRemove(ptr_inst).?.value;
39533953 const peer_vals = try sema.arena.alloc(Air.Inst.Ref, ia2.prongs.items.len);
39543954 for (peer_vals, ia2.prongs.items) |*peer_val, store_inst| {
3955 assert(sema.air_instructions.items(.tag)[@intFromEnum(store_inst)] == .store);
3956 const bin_op = sema.air_instructions.items(.data)[@intFromEnum(store_inst)].bin_op;
3955 assert(sema.air_instructions.items(.tag)[@backingInt(store_inst)] == .store);
3956 const bin_op = sema.air_instructions.items(.data)[@backingInt(store_inst)].bin_op;
39573957 peer_val.* = bin_op.rhs;
39583958 }
39593959 const final_elem_ty = try sema.resolvePeerTypes(block, ty_src, peer_vals, .none);
......@@ -3988,7 +3988,7 @@ fn zirResolveInferredAlloc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Com
39883988 return sema.fail(block, mut_src, "local variable in naked function", .{});
39893989 }
39903990 // Change it to a normal alloc.
3991 sema.air_instructions.set(@intFromEnum(ptr_inst), .{
3991 sema.air_instructions.set(@backingInt(ptr_inst), .{
39923992 .tag = .alloc,
39933993 .data = .{ .ty = final_ptr_ty },
39943994 });
......@@ -4000,15 +4000,15 @@ fn zirResolveInferredAlloc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Com
40004000 var replacement_block = block.makeSubBlock();
40014001 defer replacement_block.instructions.deinit(gpa);
40024002
4003 assert(sema.air_instructions.items(.tag)[@intFromEnum(placeholder_inst)] == .store);
4004 const bin_op = sema.air_instructions.items(.data)[@intFromEnum(placeholder_inst)].bin_op;
4003 assert(sema.air_instructions.items(.tag)[@backingInt(placeholder_inst)] == .store);
4004 const bin_op = sema.air_instructions.items(.data)[@backingInt(placeholder_inst)].bin_op;
40054005 try sema.storePtr2(&replacement_block, src, bin_op.lhs, src, bin_op.rhs, src, .store);
40064006
40074007 // If only one instruction is produced then we can replace the store
40084008 // placeholder instruction with this instruction; no need for an entire block.
40094009 if (replacement_block.instructions.items.len == 1) {
40104010 const only_inst = replacement_block.instructions.items[0];
4011 sema.air_instructions.set(@intFromEnum(placeholder_inst), sema.air_instructions.get(@intFromEnum(only_inst)));
4011 sema.air_instructions.set(@backingInt(placeholder_inst), sema.air_instructions.get(@backingInt(only_inst)));
40124012 continue;
40134013 }
40144014
......@@ -4019,7 +4019,7 @@ fn zirResolveInferredAlloc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Com
40194019 gpa,
40204020 @typeInfo(Air.Block).@"struct".field_names.len + replacement_block.instructions.items.len,
40214021 );
4022 sema.air_instructions.set(@intFromEnum(placeholder_inst), .{
4022 sema.air_instructions.set(@backingInt(placeholder_inst), .{
40234023 .tag = .block,
40244024 .data = .{ .ty_pl = .{
40254025 .ty = .void_type,
......@@ -4049,7 +4049,7 @@ fn zirForLen(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
40494049 const io = comp.io;
40504050 const ip = &zcu.intern_pool;
40514051
4052 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
4052 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
40534053 const extra = sema.code.extraData(Zir.Inst.MultiOp, inst_data.payload_index);
40544054 const all_args = sema.code.refSlice(extra.end, extra.data.operands_len);
40554055 const arg_pairs: []const [2]Zir.Inst.Ref = @as([*]const [2]Zir.Inst.Ref, @ptrCast(all_args))[0..@divExact(all_args.len, 2)];
......@@ -4202,7 +4202,7 @@ fn optEuBasePtrInit(sema: *Sema, block: *Block, ptr: Air.Inst.Ref, src: LazySrcL
42024202}
42034203
42044204fn zirOptEuBasePtrInit(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
4205 const un_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
4205 const un_node = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
42064206 const ptr = sema.resolveInst(un_node.operand);
42074207 const src = block.nodeOffset(un_node.src_node);
42084208 try sema.ensureLayoutResolved(sema.typeOf(ptr).childType(sema.pt.zcu), src, .init);
......@@ -4212,7 +4212,7 @@ fn zirOptEuBasePtrInit(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compile
42124212fn zirCoercePtrElemTy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
42134213 const pt = sema.pt;
42144214 const zcu = pt.zcu;
4215 const pl_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
4215 const pl_node = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
42164216 const src = block.nodeOffset(pl_node.src_node);
42174217 const extra = sema.code.extraData(Zir.Inst.Bin, pl_node.payload_index).data;
42184218 const uncoerced_val = sema.resolveInst(extra.rhs);
......@@ -4265,7 +4265,7 @@ fn zirTryOperandTy(sema: *Sema, block: *Block, inst: Zir.Inst.Index, is_ref: boo
42654265 const gpa = comp.gpa;
42664266 const io = comp.io;
42674267
4268 const un_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
4268 const un_node = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
42694269 const src = block.nodeOffset(un_node.src_node);
42704270
42714271 const operand_ty = try sema.resolveTypeOrPoison(block, src, un_node.operand) orelse return .generic_poison_type;
......@@ -4311,7 +4311,7 @@ fn zirTryOperandTy(sema: *Sema, block: *Block, inst: Zir.Inst.Index, is_ref: boo
43114311fn zirValidateRefTy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
43124312 const pt = sema.pt;
43134313 const zcu = pt.zcu;
4314 const un_tok = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_tok;
4314 const un_tok = sema.code.instructions.items(.data)[@backingInt(inst)].un_tok;
43154315 const src = block.tokenOffset(un_tok.src_tok);
43164316 // In case of GenericPoison, we don't actually have a type, so this will be
43174317 // treated as an untyped address-of operator.
......@@ -4329,7 +4329,7 @@ fn zirValidateRefTy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr
43294329fn zirValidateConst(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
43304330 if (!block.isComptime()) return;
43314331
4332 const un_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
4332 const un_node = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
43334333 const src = block.nodeOffset(un_node.src_node);
43344334 const init_ref = sema.resolveInst(un_node.operand);
43354335 if (!try sema.isComptimeKnown(init_ref)) {
......@@ -4344,7 +4344,7 @@ fn zirValidateArrayInitRefTy(
43444344) CompileError!Air.Inst.Ref {
43454345 const pt = sema.pt;
43464346 const zcu = pt.zcu;
4347 const pl_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
4347 const pl_node = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
43484348 const src = block.nodeOffset(pl_node.src_node);
43494349 const extra = sema.code.extraData(Zir.Inst.ArrayInitRefTy, pl_node.payload_index).data;
43504350 const maybe_wrapped_ptr_ty = try sema.resolveTypeOrPoison(block, LazySrcLoc.unneeded, extra.ptr_ty) orelse return .generic_poison_type;
......@@ -4384,7 +4384,7 @@ fn zirValidateArrayInitTy(
43844384) CompileError!void {
43854385 const pt = sema.pt;
43864386 const zcu = pt.zcu;
4387 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
4387 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
43884388 const src = block.nodeOffset(inst_data.src_node);
43894389 const ty_src: LazySrcLoc = if (is_result_ty) src else block.src(.{ .node_offset_init_ty = inst_data.src_node });
43904390 const extra = sema.code.extraData(Zir.Inst.ArrayInit, inst_data.payload_index).data;
......@@ -4445,7 +4445,7 @@ fn zirValidateStructInitTy(
44454445) CompileError!void {
44464446 const pt = sema.pt;
44474447 const zcu = pt.zcu;
4448 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
4448 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
44494449 const src = block.nodeOffset(inst_data.src_node);
44504450 // It's okay for the type to be poison: this will result in an anonymous struct init.
44514451 const ty = try sema.resolveTypeOrPoison(block, src, inst_data.operand) orelse return;
......@@ -4465,11 +4465,11 @@ fn zirValidatePtrStructInit(
44654465) CompileError!void {
44664466 const pt = sema.pt;
44674467 const zcu = pt.zcu;
4468 const validate_inst = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
4468 const validate_inst = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
44694469 const init_src = block.nodeOffset(validate_inst.src_node);
44704470 const validate_extra = sema.code.extraData(Zir.Inst.Block, validate_inst.payload_index);
44714471 const instrs = sema.code.bodySlice(validate_extra.end, validate_extra.data.body_len);
4472 const field_ptr_data = sema.code.instructions.items(.data)[@intFromEnum(instrs[0])].pl_node;
4472 const field_ptr_data = sema.code.instructions.items(.data)[@backingInt(instrs[0])].pl_node;
44734473 const field_ptr_extra = sema.code.extraData(Zir.Inst.Field, field_ptr_data.payload_index).data;
44744474 const object_ptr = sema.resolveInst(field_ptr_extra.lhs);
44754475 const agg_ty = sema.typeOf(object_ptr).childType(zcu).optEuBaseType(zcu);
......@@ -4511,7 +4511,7 @@ fn validateUnionInit(
45114511 errdefer msg.destroy(sema.gpa);
45124512
45134513 for (instrs[1..]) |inst| {
4514 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
4514 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
45154515 const inst_src = block.src(.{ .node_offset_initializer = inst_data.src_node });
45164516 try sema.errNote(inst_src, msg, "additional initializer here", .{});
45174517 }
......@@ -4542,7 +4542,7 @@ fn validateStructInit(
45424542 @memset(found_fields, false);
45434543
45444544 for (instrs) |field_ptr| {
4545 const field_ptr_data = sema.code.instructions.items(.data)[@intFromEnum(field_ptr)].pl_node;
4545 const field_ptr_data = sema.code.instructions.items(.data)[@backingInt(field_ptr)].pl_node;
45464546 const field_src = block.src(.{ .node_offset_initializer = field_ptr_data.src_node });
45474547 const field_ptr_extra = sema.code.extraData(Zir.Inst.Field, field_ptr_data.payload_index).data;
45484548 const field_name = try ip.getOrPutString(
......@@ -4631,11 +4631,11 @@ fn zirValidatePtrArrayInit(
46314631) CompileError!void {
46324632 const pt = sema.pt;
46334633 const zcu = pt.zcu;
4634 const validate_inst = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
4634 const validate_inst = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
46354635 const init_src = block.nodeOffset(validate_inst.src_node);
46364636 const validate_extra = sema.code.extraData(Zir.Inst.Block, validate_inst.payload_index);
46374637 const instrs = sema.code.bodySlice(validate_extra.end, validate_extra.data.body_len);
4638 const first_elem_ptr_data = sema.code.instructions.items(.data)[@intFromEnum(instrs[0])].pl_node;
4638 const first_elem_ptr_data = sema.code.instructions.items(.data)[@backingInt(instrs[0])].pl_node;
46394639 const elem_ptr_extra = sema.code.extraData(Zir.Inst.ElemPtrImm, first_elem_ptr_data.payload_index).data;
46404640 const array_ptr = sema.resolveInst(elem_ptr_extra.ptr);
46414641 const array_ty = sema.typeOf(array_ptr).childType(zcu).optEuBaseType(zcu);
......@@ -4695,7 +4695,7 @@ fn zirValidatePtrArrayInit(
46954695fn zirValidateDestructure(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
46964696 const pt = sema.pt;
46974697 const zcu = pt.zcu;
4698 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
4698 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
46994699 const extra = sema.code.extraData(Zir.Inst.ValidateDestructure, inst_data.payload_index).data;
47004700 const src = block.nodeOffset(inst_data.src_node);
47014701 const destructure_src = block.nodeOffset(extra.destructure_node);
......@@ -4821,7 +4821,7 @@ pub fn addDeclaredHereNote(sema: *Sema, parent: *Zcu.ErrorMsg, decl_ty: Type) Al
48214821}
48224822
48234823fn zirStoreToInferredPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
4824 const pl_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
4824 const pl_node = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
48254825 const src = block.nodeOffset(pl_node.src_node);
48264826 const bin = sema.code.extraData(Zir.Inst.Bin, pl_node.payload_index).data;
48274827 const ptr = sema.resolveInst(bin.lhs);
......@@ -4829,9 +4829,9 @@ fn zirStoreToInferredPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compi
48294829 const ptr_inst = ptr.toIndex().?;
48304830 const air_datas = sema.air_instructions.items(.data);
48314831
4832 switch (sema.air_instructions.items(.tag)[@intFromEnum(ptr_inst)]) {
4832 switch (sema.air_instructions.items(.tag)[@backingInt(ptr_inst)]) {
48334833 .inferred_alloc_comptime => {
4834 const iac = &air_datas[@intFromEnum(ptr_inst)].inferred_alloc_comptime;
4834 const iac = &air_datas[@backingInt(ptr_inst)].inferred_alloc_comptime;
48354835 return sema.storeToInferredAllocComptime(block, src, operand, iac);
48364836 },
48374837 .inferred_alloc => {
......@@ -4904,7 +4904,7 @@ fn storeToInferredAllocComptime(
49044904}
49054905
49064906fn zirSetEvalBranchQuota(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
4907 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
4907 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
49084908 const src = block.nodeOffset(inst_data.src_node);
49094909 const quota: u32 = @intCast(try sema.resolveInt(block, src, inst_data.operand, .u32, .{ .simple = .operand_setEvalBranchQuota }));
49104910 sema.branch_quota = @max(sema.branch_quota, quota);
......@@ -4914,14 +4914,14 @@ fn zirSetEvalBranchQuota(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compi
49144914fn zirStoreNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
49154915 const zir_tags = sema.code.instructions.items(.tag);
49164916 const zir_datas = sema.code.instructions.items(.data);
4917 const inst_data = zir_datas[@intFromEnum(inst)].pl_node;
4917 const inst_data = zir_datas[@backingInt(inst)].pl_node;
49184918 const src = block.nodeOffset(inst_data.src_node);
49194919 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
49204920 const ptr = sema.resolveInst(extra.lhs);
49214921 const operand = sema.resolveInst(extra.rhs);
49224922
49234923 const is_ret = if (extra.lhs.toIndex()) |ptr_index|
4924 zir_tags[@intFromEnum(ptr_index)] == .ret_ptr
4924 zir_tags[@backingInt(ptr_index)] == .ret_ptr
49254925 else
49264926 false;
49274927
......@@ -4943,7 +4943,7 @@ fn zirStr(sema: *Sema, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
49434943 const gpa = comp.gpa;
49444944 const io = comp.io;
49454945 const ip = &zcu.intern_pool;
4946 const bytes = sema.code.instructions.items(.data)[@intFromEnum(inst)].str.get(sema.code);
4946 const bytes = sema.code.instructions.items(.data)[@backingInt(inst)].str.get(sema.code);
49474947 return sema.addStrLit(
49484948 try ip.getOrPutString(gpa, io, pt.tid, bytes, .maybe_embedded_nulls),
49494949 bytes.len,
......@@ -4975,16 +4975,16 @@ fn uavRef(sema: *Sema, val: Value) CompileError!Air.Inst.Ref {
49754975fn zirInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
49764976 _ = block;
49774977
4978 const int = sema.code.instructions.items(.data)[@intFromEnum(inst)].int;
4978 const int = sema.code.instructions.items(.data)[@backingInt(inst)].int;
49794979 return sema.pt.intRef(.comptime_int, int);
49804980}
49814981
49824982fn zirIntBig(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
49834983 _ = block;
49844984
4985 const int = sema.code.instructions.items(.data)[@intFromEnum(inst)].str;
4985 const int = sema.code.instructions.items(.data)[@backingInt(inst)].str;
49864986 const byte_count = int.len * @sizeOf(std.math.big.Limb);
4987 const limb_bytes = sema.code.string_bytes[@intFromEnum(int.start)..][0..byte_count];
4987 const limb_bytes = sema.code.string_bytes[@backingInt(int.start)..][0..byte_count];
49884988
49894989 // TODO: this allocation and copy is only needed because the limbs may be unaligned.
49904990 // If ZIR is adjusted so that big int limbs are guaranteed to be aligned, these
......@@ -5000,7 +5000,7 @@ fn zirIntBig(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
50005000
50015001fn zirFloat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
50025002 _ = block;
5003 const number = sema.code.instructions.items(.data)[@intFromEnum(inst)].float;
5003 const number = sema.code.instructions.items(.data)[@backingInt(inst)].float;
50045004 return Air.internedToRef((try sema.pt.floatValue(
50055005 .comptime_float,
50065006 number,
......@@ -5009,14 +5009,14 @@ fn zirFloat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.I
50095009
50105010fn zirFloat128(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
50115011 _ = block;
5012 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
5012 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
50135013 const extra = sema.code.extraData(Zir.Inst.Float128, inst_data.payload_index).data;
50145014 const number = extra.get();
50155015 return Air.internedToRef((try sema.pt.floatValue(.comptime_float, number)).toIntern());
50165016}
50175017
50185018fn zirCompileError(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
5019 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
5019 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
50205020 const src = block.nodeOffset(inst_data.src_node);
50215021 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
50225022 const msg = try sema.resolveConstString(block, operand_src, inst_data.operand, .{ .simple = .compile_error_string });
......@@ -5059,7 +5059,7 @@ fn zirCompileLog(
50595059 const line_data = try zcu.intern_pool.getOrPutString(gpa, io, pt.tid, aw.written(), .no_embedded_nulls);
50605060
50615061 const line_idx: Zcu.CompileLogLine.Index = if (zcu.free_compile_log_lines.pop()) |idx| idx: {
5062 zcu.compile_log_lines.items[@intFromEnum(idx)] = .{
5062 zcu.compile_log_lines.items[@backingInt(idx)] = .{
50635063 .next = .none,
50645064 .data = line_data,
50655065 };
......@@ -5069,7 +5069,7 @@ fn zirCompileLog(
50695069 .next = .none,
50705070 .data = line_data,
50715071 });
5072 break :idx @enumFromInt(zcu.compile_log_lines.items.len - 1);
5072 break :idx @fromBackingInt(@intCast(zcu.compile_log_lines.items.len - 1));
50735073 };
50745074
50755075 const gop = try zcu.compile_logs.getOrPut(gpa, sema.owner);
......@@ -5093,7 +5093,7 @@ fn zirPanic(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
50935093 const pt = sema.pt;
50945094 const zcu = pt.zcu;
50955095
5096 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
5096 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
50975097 const src = block.nodeOffset(inst_data.src_node);
50985098 const msg_inst = sema.resolveInst(inst_data.operand);
50995099
......@@ -5135,7 +5135,7 @@ fn zirPanic(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
51355135}
51365136
51375137fn zirTrap(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
5138 const src_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].node;
5138 const src_node = sema.code.instructions.items(.data)[@backingInt(inst)].node;
51395139 const src = block.nodeOffset(src_node);
51405140 if (block.isComptime())
51415141 return sema.fail(block, src, "encountered @trap at comptime", .{});
......@@ -5143,7 +5143,7 @@ fn zirTrap(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
51435143}
51445144
51455145fn zirBreakpoint(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!void {
5146 const src_node: std.zig.Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(extended.operand)));
5146 const src_node: std.zig.Ast.Node.Offset = @fromBackingInt(@intCast(@as(i32, @bitCast(extended.operand))));
51475147 const src = block.nodeOffset(src_node);
51485148 if (block.isComptime())
51495149 return sema.fail(block, src, "encountered @breakpoint at comptime", .{});
......@@ -5153,7 +5153,7 @@ fn zirBreakpoint(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstDat
51535153fn zirLoop(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
51545154 const pt = sema.pt;
51555155 const zcu = pt.zcu;
5156 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
5156 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
51575157 const src = parent_block.nodeOffset(inst_data.src_node);
51585158 const extra = sema.code.extraData(Zir.Inst.Block, inst_data.payload_index);
51595159 const body = sema.code.bodySlice(extra.end, extra.data.body_len);
......@@ -5163,8 +5163,8 @@ fn zirLoop(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError
51635163 // Reserve space for a Loop instruction so that generated Break instructions can
51645164 // point to it, even if it doesn't end up getting used because the code ends up being
51655165 // comptime evaluated.
5166 const block_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
5167 const loop_inst: Air.Inst.Index = @enumFromInt(@intFromEnum(block_inst) + 1);
5166 const block_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
5167 const loop_inst: Air.Inst.Index = @fromBackingInt(@intCast(@backingInt(block_inst) + 1));
51685168 try sema.air_instructions.ensureUnusedCapacity(gpa, 2);
51695169 sema.air_instructions.appendAssumeCapacity(.{
51705170 .tag = .block,
......@@ -5224,7 +5224,7 @@ fn zirLoop(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError
52245224 try child_block.instructions.append(gpa, loop_inst);
52255225
52265226 try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.Block).@"struct".field_names.len + loop_block_len + 1);
5227 sema.air_instructions.items(.data)[@intFromEnum(loop_inst)].ty_pl.payload = sema.addExtraAssumeCapacity(
5227 sema.air_instructions.items(.data)[@backingInt(loop_inst)].ty_pl.payload = sema.addExtraAssumeCapacity(
52285228 Air.Block{ .body_len = @intCast(loop_block_len + 1) },
52295229 );
52305230 sema.air_extra.appendSliceAssumeCapacity(@ptrCast(loop_block.instructions.items));
......@@ -5233,13 +5233,13 @@ fn zirLoop(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError
52335233}
52345234
52355235fn zirSuspendBlock(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
5236 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
5236 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
52375237 const src = parent_block.nodeOffset(inst_data.src_node);
52385238 return sema.failWithUseOfAsync(parent_block, src);
52395239}
52405240
52415241fn zirBlock(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
5242 const pl_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
5242 const pl_node = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
52435243 const src = parent_block.nodeOffset(pl_node.src_node);
52445244 const extra = sema.code.extraData(Zir.Inst.Block, pl_node.payload_index);
52455245 const body = sema.code.bodySlice(extra.end, extra.data.body_len);
......@@ -5248,7 +5248,7 @@ fn zirBlock(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileErro
52485248 // Reserve space for a Block instruction so that generated Break instructions can
52495249 // point to it, even if it doesn't end up getting used because the code ends up being
52505250 // comptime evaluated or is an unlabeled block.
5251 const block_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
5251 const block_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
52525252 try sema.air_instructions.append(gpa, .{
52535253 .tag = .block,
52545254 .data = undefined,
......@@ -5306,7 +5306,7 @@ fn resolveBlockBody(
53065306 if (child_block.isComptime()) {
53075307 return sema.resolveInlineBody(child_block, body, body_inst);
53085308 } else {
5309 assert(sema.air_instructions.items(.tag)[@intFromEnum(merges.block_inst)] == .block);
5309 assert(sema.air_instructions.items(.tag)[@backingInt(merges.block_inst)] == .block);
53105310 var need_debug_scope = false;
53115311 child_block.need_debug_scope = &need_debug_scope;
53125312 if (sema.analyzeBodyInner(child_block, body)) {
......@@ -5314,7 +5314,7 @@ fn resolveBlockBody(
53145314 } else |err| switch (err) {
53155315 error.ComptimeBreak => {
53165316 const break_inst = sema.comptime_break_inst;
5317 const break_data = sema.code.instructions.items(.data)[@intFromEnum(break_inst)].@"break";
5317 const break_data = sema.code.instructions.items(.data)[@backingInt(break_inst)].@"break";
53185318 const extra = sema.code.extraData(Zir.Inst.Break, break_data.payload_index).data;
53195319 const breaks_to_body = extra.block_inst == body_inst;
53205320
......@@ -5330,7 +5330,7 @@ fn resolveBlockBody(
53305330 try parent_block.instructions.append(sema.gpa, merges.block_inst);
53315331 try sema.air_extra.ensureUnusedCapacity(sema.gpa, @typeInfo(Air.Block).@"struct".field_names.len +
53325332 child_block.instructions.items.len);
5333 sema.air_instructions.items(.data)[@intFromEnum(merges.block_inst)] = .{ .ty_pl = .{
5333 sema.air_instructions.items(.data)[@backingInt(merges.block_inst)] = .{ .ty_pl = .{
53345334 .ty = Air.internedToRef(operand_ty.toIntern()),
53355335 .payload = sema.addExtraAssumeCapacity(Air.Block{
53365336 .body_len = @intCast(child_block.instructions.items.len),
......@@ -5386,7 +5386,7 @@ fn resolveAnalyzedBlock(
53865386 assert(child_block.instructions.items.len != 0);
53875387 assert(sema.typeOf(child_block.instructions.items[child_block.instructions.items.len - 1].toRef()).isNoReturn(zcu));
53885388
5389 const block_tag = sema.air_instructions.items(.tag)[@intFromEnum(merges.block_inst)];
5389 const block_tag = sema.air_instructions.items(.tag)[@backingInt(merges.block_inst)];
53905390 switch (block_tag) {
53915391 .block => {},
53925392 .dbg_inline_block => assert(need_debug_scope),
......@@ -5412,7 +5412,7 @@ fn resolveAnalyzedBlock(
54125412 try parent_block.instructions.append(gpa, merges.block_inst);
54135413 try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.DbgInlineBlock).@"struct".field_names.len +
54145414 child_block.instructions.items.len);
5415 sema.air_instructions.items(.data)[@intFromEnum(merges.block_inst)] = .{ .ty_pl = .{
5415 sema.air_instructions.items(.data)[@backingInt(merges.block_inst)] = .{ .ty_pl = .{
54165416 .ty = .noreturn_type,
54175417 .payload = sema.addExtraAssumeCapacity(Air.DbgInlineBlock{
54185418 .func = child_block.inlining.?.func,
......@@ -5450,7 +5450,7 @@ fn resolveAnalyzedBlock(
54505450 .block => {
54515451 try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.Block).@"struct".field_names.len +
54525452 child_block.instructions.items.len);
5453 sema.air_instructions.items(.data)[@intFromEnum(merges.block_inst)] = .{ .ty_pl = .{
5453 sema.air_instructions.items(.data)[@backingInt(merges.block_inst)] = .{ .ty_pl = .{
54545454 .ty = .void_type,
54555455 .payload = sema.addExtraAssumeCapacity(Air.Block{
54565456 .body_len = @intCast(child_block.instructions.items.len),
......@@ -5460,7 +5460,7 @@ fn resolveAnalyzedBlock(
54605460 .dbg_inline_block => {
54615461 try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.DbgInlineBlock).@"struct".field_names.len +
54625462 child_block.instructions.items.len);
5463 sema.air_instructions.items(.data)[@intFromEnum(merges.block_inst)] = .{ .ty_pl = .{
5463 sema.air_instructions.items(.data)[@backingInt(merges.block_inst)] = .{ .ty_pl = .{
54645464 .ty = .void_type,
54655465 .payload = sema.addExtraAssumeCapacity(Air.DbgInlineBlock{
54665466 .func = child_block.inlining.?.func,
......@@ -5473,7 +5473,7 @@ fn resolveAnalyzedBlock(
54735473 sema.air_extra.appendSliceAssumeCapacity(@ptrCast(child_block.instructions.items));
54745474 // Rewrite the break to just give value {}; the value is
54755475 // comptime-known and will be returned directly.
5476 sema.air_instructions.items(.data)[@intFromEnum(merges.br_list.items[0])].br.operand = .void_value;
5476 sema.air_instructions.items(.data)[@backingInt(merges.br_list.items[0])].br.operand = .void_value;
54775477 return Air.internedToRef(result_val.toIntern());
54785478 }
54795479 }
......@@ -5515,7 +5515,7 @@ fn resolveAnalyzedBlock(
55155515 .block => {
55165516 try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.Block).@"struct".field_names.len +
55175517 child_block.instructions.items.len);
5518 sema.air_instructions.items(.data)[@intFromEnum(merges.block_inst)] = .{ .ty_pl = .{
5518 sema.air_instructions.items(.data)[@backingInt(merges.block_inst)] = .{ .ty_pl = .{
55195519 .ty = ty_inst,
55205520 .payload = sema.addExtraAssumeCapacity(Air.Block{
55215521 .body_len = @intCast(child_block.instructions.items.len),
......@@ -5525,7 +5525,7 @@ fn resolveAnalyzedBlock(
55255525 .dbg_inline_block => {
55265526 try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.DbgInlineBlock).@"struct".field_names.len +
55275527 child_block.instructions.items.len);
5528 sema.air_instructions.items(.data)[@intFromEnum(merges.block_inst)] = .{ .ty_pl = .{
5528 sema.air_instructions.items(.data)[@backingInt(merges.block_inst)] = .{ .ty_pl = .{
55295529 .ty = ty_inst,
55305530 .payload = sema.addExtraAssumeCapacity(Air.DbgInlineBlock{
55315531 .func = child_block.inlining.?.func,
......@@ -5539,7 +5539,7 @@ fn resolveAnalyzedBlock(
55395539 // Now that the block has its type resolved, we need to go back into all the break
55405540 // instructions, and insert type coercion on the operands.
55415541 for (merges.br_list.items) |br| {
5542 const br_operand = sema.air_instructions.items(.data)[@intFromEnum(br)].br.operand;
5542 const br_operand = sema.air_instructions.items(.data)[@backingInt(br)].br.operand;
55435543 const br_operand_src = src;
55445544 const br_operand_ty = sema.typeOf(br_operand);
55455545 if (br_operand_ty.eql(resolved_ty)) {
......@@ -5552,7 +5552,7 @@ fn resolveAnalyzedBlock(
55525552 // If no instructions were produced, such as in the case of a coercion of a
55535553 // constant value to a new type, we can simply point the br operand to it.
55545554 if (coerce_block.instructions.items.len == 0) {
5555 sema.air_instructions.items(.data)[@intFromEnum(br)].br.operand = coerced_operand;
5555 sema.air_instructions.items(.data)[@backingInt(br)].br.operand = coerced_operand;
55565556 continue;
55575557 }
55585558 assert(coerce_block.instructions.items[coerce_block.instructions.items.len - 1].toRef() == coerced_operand);
......@@ -5563,17 +5563,17 @@ fn resolveAnalyzedBlock(
55635563 try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.Block).@"struct".field_names.len +
55645564 sub_block_len);
55655565 try sema.air_instructions.ensureUnusedCapacity(gpa, 1);
5566 const sub_br_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
5566 const sub_br_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
55675567
5568 sema.air_instructions.items(.tag)[@intFromEnum(br)] = .block;
5569 sema.air_instructions.items(.data)[@intFromEnum(br)] = .{ .ty_pl = .{
5568 sema.air_instructions.items(.tag)[@backingInt(br)] = .block;
5569 sema.air_instructions.items(.data)[@backingInt(br)] = .{ .ty_pl = .{
55705570 .ty = .noreturn_type,
55715571 .payload = sema.addExtraAssumeCapacity(Air.Block{
55725572 .body_len = sub_block_len,
55735573 }),
55745574 } };
55755575 sema.air_extra.appendSliceAssumeCapacity(@ptrCast(coerce_block.instructions.items));
5576 sema.air_extra.appendAssumeCapacity(@intFromEnum(sub_br_inst));
5576 sema.air_extra.appendAssumeCapacity(@backingInt(sub_br_inst));
55775577
55785578 sema.air_instructions.appendAssumeCapacity(.{
55795579 .tag = .br,
......@@ -5592,7 +5592,7 @@ fn zirExport(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
55925592 const pt = sema.pt;
55935593 const zcu = pt.zcu;
55945594 const ip = &zcu.intern_pool;
5595 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
5595 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
55965596 const extra = sema.code.extraData(Zir.Inst.Export, inst_data.payload_index).data;
55975597
55985598 const src = block.nodeOffset(inst_data.src_node);
......@@ -5753,13 +5753,13 @@ fn zirSetFloatMode(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstD
57535753}
57545754
57555755fn zirSetRuntimeSafety(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
5756 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
5756 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
57575757 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
57585758 block.want_safety = try sema.resolveConstBool(block, operand_src, inst_data.operand, .{ .simple = .operand_setRuntimeSafety });
57595759}
57605760
57615761fn zirBreak(sema: *Sema, start_block: *Block, inst: Zir.Inst.Index) CompileError!void {
5762 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].@"break";
5762 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].@"break";
57635763 const extra = sema.code.extraData(Zir.Inst.Break, inst_data.payload_index).data;
57645764 const operand = sema.resolveInst(inst_data.operand);
57655765 const zir_block = extra.block_inst;
......@@ -5789,13 +5789,13 @@ fn zirBreak(sema: *Sema, start_block: *Block, inst: Zir.Inst.Index) CompileError
57895789}
57905790
57915791fn zirSwitchContinue(sema: *Sema, start_block: *Block, inst: Zir.Inst.Index) CompileError!void {
5792 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].@"break";
5792 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].@"break";
57935793 const extra = sema.code.extraData(Zir.Inst.Break, inst_data.payload_index).data;
57945794 const operand_src = start_block.nodeOffset(extra.operand_src_node.unwrap().?);
57955795 const uncoerced_operand = sema.resolveInst(inst_data.operand);
57965796 const switch_inst = extra.block_inst;
57975797
5798 switch (sema.code.instructions.items(.tag)[@intFromEnum(switch_inst)]) {
5798 switch (sema.code.instructions.items(.tag)[@backingInt(switch_inst)]) {
57995799 .switch_block, .switch_block_ref => {},
58005800 .switch_block_err_union => unreachable, // wrong code path!
58015801 else => unreachable, // assertion failure
......@@ -5833,13 +5833,13 @@ fn zirSwitchContinue(sema: *Sema, start_block: *Block, inst: Zir.Inst.Index) Com
58335833fn zirDbgStmt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
58345834 if (block.isComptime() or block.ownerModule().strip) return;
58355835
5836 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt;
5836 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].dbg_stmt;
58375837
58385838 if (block.instructions.items.len != 0) {
58395839 const idx = block.instructions.items[block.instructions.items.len - 1];
5840 if (sema.air_instructions.items(.tag)[@intFromEnum(idx)] == .dbg_stmt) {
5840 if (sema.air_instructions.items(.tag)[@backingInt(idx)] == .dbg_stmt) {
58415841 // The previous dbg_stmt didn't correspond to any actual code, so replace it.
5842 sema.air_instructions.items(.data)[@intFromEnum(idx)].dbg_stmt = .{
5842 sema.air_instructions.items(.data)[@backingInt(idx)].dbg_stmt = .{
58435843 .line = inst_data.line,
58445844 .column = inst_data.column,
58455845 };
......@@ -5867,7 +5867,7 @@ fn zirDbgVar(
58675867 inst: Zir.Inst.Index,
58685868 air_tag: Air.Inst.Tag,
58695869) CompileError!void {
5870 const str_op = sema.code.instructions.items(.data)[@intFromEnum(inst)].str_op;
5870 const str_op = sema.code.instructions.items(.data)[@backingInt(inst)].str_op;
58715871 const operand = sema.resolveInst(str_op.operand);
58725872 const name = str_op.getStr(sema.code);
58735873 try sema.addDbgVar(block, operand, air_tag, name);
......@@ -5911,7 +5911,7 @@ fn addDbgVar(
59115911 _ = try block.addInst(.{
59125912 .tag = air_tag,
59135913 .data = .{ .pl_op = .{
5914 .payload = @intFromEnum(name_nts),
5914 .payload = @backingInt(name_nts),
59155915 .operand = operand,
59165916 } },
59175917 });
......@@ -5919,7 +5919,7 @@ fn addDbgVar(
59195919
59205920pub fn appendAirString(sema: *Sema, str: []const u8) Allocator.Error!Air.NullTerminatedString {
59215921 if (str.len == 0) return .none;
5922 const nts: Air.NullTerminatedString = @enumFromInt(sema.air_extra.items.len);
5922 const nts: Air.NullTerminatedString = @fromBackingInt(@intCast(sema.air_extra.items.len));
59235923 const elements_used = str.len / 4 + 1;
59245924 const elements = try sema.air_extra.addManyAsSlice(sema.gpa, elements_used);
59255925 const buffer = mem.sliceAsBytes(elements);
......@@ -5935,7 +5935,7 @@ fn zirDeclRef(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
59355935 const gpa = comp.gpa;
59365936 const io = comp.io;
59375937
5938 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].str_tok;
5938 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].str_tok;
59395939 const src = block.tokenOffset(inst_data.src_tok);
59405940 const decl_name = try zcu.intern_pool.getOrPutString(
59415941 gpa,
......@@ -5955,7 +5955,7 @@ fn zirDeclVal(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
59555955 const gpa = comp.gpa;
59565956 const io = comp.io;
59575957
5958 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].str_tok;
5958 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].str_tok;
59595959 const src = block.tokenOffset(inst_data.src_tok);
59605960 const decl_name = try zcu.intern_pool.getOrPutString(
59615961 gpa,
......@@ -6144,7 +6144,7 @@ fn popErrorReturnTrace(
61446144 then_block.instructions.items.len + else_block.instructions.items.len +
61456145 @typeInfo(Air.Block).@"struct".field_names.len + 1); // +1 for the sole .cond_br instruction in the .block
61466146
6147 const cond_br_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
6147 const cond_br_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
61486148 try sema.air_instructions.append(gpa, .{
61496149 .tag = .cond_br,
61506150 .data = .{
......@@ -6168,8 +6168,8 @@ fn popErrorReturnTrace(
61686168 sema.air_extra.appendSliceAssumeCapacity(@ptrCast(then_block.instructions.items));
61696169 sema.air_extra.appendSliceAssumeCapacity(@ptrCast(else_block.instructions.items));
61706170
6171 sema.air_instructions.items(.data)[@intFromEnum(cond_block_inst)].ty_pl.payload = sema.addExtraAssumeCapacity(Air.Block{ .body_len = 1 });
6172 sema.air_extra.appendAssumeCapacity(@intFromEnum(cond_br_inst));
6171 sema.air_instructions.items(.data)[@backingInt(cond_block_inst)].ty_pl.payload = sema.addExtraAssumeCapacity(Air.Block{ .body_len = 1 });
6172 sema.air_extra.appendAssumeCapacity(@backingInt(cond_br_inst));
61736173 }
61746174}
61756175
......@@ -6185,7 +6185,7 @@ fn zirCall(
61856185 const gpa = comp.gpa;
61866186 const io = comp.io;
61876187
6188 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
6188 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
61896189 const callee_src = block.src(.{ .node_offset_call_func = inst_data.src_node });
61906190 const call_src = block.nodeOffset(inst_data.src_node);
61916191 const ExtraType = switch (kind) {
......@@ -6195,7 +6195,7 @@ fn zirCall(
61956195 const extra = sema.code.extraData(ExtraType, inst_data.payload_index);
61966196 const args_len = extra.data.flags.args_len;
61976197
6198 const modifier: std.lang.CallModifier = @enumFromInt(extra.data.flags.packed_modifier);
6198 const modifier: std.lang.CallModifier = @fromBackingInt(@intCast(extra.data.flags.packed_modifier));
61996199 const ensure_result_used = extra.data.flags.ensure_result_used;
62006200 const pop_error_return_trace = extra.data.flags.pop_error_return_trace;
62016201
......@@ -6224,7 +6224,7 @@ fn zirCall(
62246224 const func_ty = try sema.checkCallArgumentCount(block, func, callee_src, callee_ty, total_args, callee == .method);
62256225
62266226 // The block index before the call, so we can potentially insert an error trace save here later.
6227 const block_index: Air.Inst.Index = @enumFromInt(block.instructions.items.len);
6227 const block_index: Air.Inst.Index = @fromBackingInt(@intCast(block.instructions.items.len));
62286228
62296229 // This will be set by `analyzeCall` to indicate whether any parameter was an error (making the
62306230 // error trace potentially dirty).
......@@ -6244,7 +6244,7 @@ fn zirCall(
62446244 } };
62456245
62466246 // AstGen ensures that a call instruction is always preceded by a dbg_stmt instruction.
6247 const call_dbg_node: Zir.Inst.Index = @enumFromInt(@intFromEnum(inst) - 1);
6247 const call_dbg_node: Zir.Inst.Index = @fromBackingInt(@intCast(@backingInt(inst) - 1));
62486248 const call_inst = try sema.analyzeCall(block, func, func_ty, callee_src, call_src, modifier, ensure_result_used, args_info, call_dbg_node, .call);
62496249
62506250 if (block.ownerModule().error_tracing and
......@@ -6530,11 +6530,11 @@ const CallArgsInfo = union(enum) {
65306530
65316531 const arg_body = if (real_arg_idx == 0) blk: {
65326532 const start = zir_call.num_args;
6533 const end = @intFromEnum(zir_call.args_body[0]);
6533 const end = @backingInt(zir_call.args_body[0]);
65346534 break :blk zir_call.args_body[start..end];
65356535 } else blk: {
6536 const start = @intFromEnum(zir_call.args_body[real_arg_idx - 1]);
6537 const end = @intFromEnum(zir_call.args_body[real_arg_idx]);
6536 const start = @backingInt(zir_call.args_body[real_arg_idx - 1]);
6537 const end = @backingInt(zir_call.args_body[real_arg_idx]);
65386538 break :blk zir_call.args_body[start..end];
65396539 };
65406540
......@@ -6777,7 +6777,7 @@ fn analyzeCall(
67776777 // We must discover the generic parameter type.
67786778 assert(any_generic_types);
67796779 const param_inst_idx = fn_zir_info.param_body[arg_idx];
6780 const param_inst = fn_zir.instructions.get(@intFromEnum(param_inst_idx));
6780 const param_inst = fn_zir.instructions.get(@backingInt(param_inst_idx));
67816781 switch (param_inst.tag) {
67826782 .param_anytype, .param_anytype_comptime => break :ty .generic_poison,
67836783 .param, .param_comptime => {},
......@@ -6853,7 +6853,7 @@ fn analyzeCall(
68536853 } else {
68546854 // We need a dummy instruction with this type. It doesn't actually need to be in any block,
68556855 // since it will never be referenced at runtime!
6856 const dummy: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
6856 const dummy: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
68576857 try sema.air_instructions.append(gpa, .{ .tag = .alloc, .data = .{ .ty = arg_ty } });
68586858 generic_inst_map.putAssumeCapacityNoClobber(param_inst_idx, dummy.toRef());
68596859 }
......@@ -7256,7 +7256,7 @@ fn analyzeCall(
72567256 }
72577257
72587258 const need_debug_scope = !block.isComptime() and !block.is_typeof and !block.ownerModule().strip;
7259 const block_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
7259 const block_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
72607260 try sema.air_instructions.append(gpa, .{
72617261 .tag = if (need_debug_scope) .dbg_inline_block else .block,
72627262 .data = undefined,
......@@ -7313,15 +7313,15 @@ fn analyzeCall(
73137313 if (!block.isComptime() and !block.is_typeof) {
73147314 const zir_tags = sema.code.instructions.items(.tag);
73157315 const zir_datas = sema.code.instructions.items(.data);
7316 for (fn_zir_info.param_body) |inst| switch (zir_tags[@intFromEnum(inst)]) {
7316 for (fn_zir_info.param_body) |inst| switch (zir_tags[@backingInt(inst)]) {
73177317 .param, .param_comptime => {
7318 const extra = sema.code.extraData(Zir.Inst.Param, zir_datas[@intFromEnum(inst)].pl_tok.payload_index);
7318 const extra = sema.code.extraData(Zir.Inst.Param, zir_datas[@backingInt(inst)].pl_tok.payload_index);
73197319 const param_name = sema.code.nullTerminatedString(extra.data.name);
73207320 const air_inst = sema.inst_map.get(inst).?;
73217321 try sema.addDbgVar(&child_block, air_inst, .dbg_arg_inline, param_name);
73227322 },
73237323 .param_anytype, .param_anytype_comptime => {
7324 const param_name = zir_datas[@intFromEnum(inst)].str_tok.get(sema.code);
7324 const param_name = zir_datas[@backingInt(inst)].str_tok.get(sema.code);
73257325 const air_inst = sema.inst_map.get(inst).?;
73267326 try sema.addDbgVar(&child_block, air_inst, .dbg_arg_inline, param_name);
73277327 },
......@@ -7410,7 +7410,7 @@ fn handleTailCall(sema: *Sema, block: *Block, call_src: LazySrcLoc, func_ty: Typ
74107410}
74117411
74127412fn zirIntType(sema: *Sema, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
7413 const int_type = sema.code.instructions.items(.data)[@intFromEnum(inst)].int_type;
7413 const int_type = sema.code.instructions.items(.data)[@backingInt(inst)].int_type;
74147414 const ty = try sema.pt.intType(int_type.signedness, int_type.bit_count);
74157415 return Air.internedToRef(ty.toIntern());
74167416}
......@@ -7418,7 +7418,7 @@ fn zirIntType(sema: *Sema, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
74187418fn zirOptionalType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
74197419 const pt = sema.pt;
74207420 const zcu = pt.zcu;
7421 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
7421 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
74227422 const operand_src = block.src(.{ .node_offset_un_op = inst_data.src_node });
74237423 const child_type = try sema.resolveType(block, operand_src, inst_data.operand);
74247424 if (child_type.zigTypeTag(zcu) == .@"opaque") {
......@@ -7434,12 +7434,12 @@ fn zirOptionalType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErro
74347434fn zirArrayInitElemType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
74357435 const pt = sema.pt;
74367436 const zcu = pt.zcu;
7437 const bin = sema.code.instructions.items(.data)[@intFromEnum(inst)].bin;
7437 const bin = sema.code.instructions.items(.data)[@backingInt(inst)].bin;
74387438 const maybe_wrapped_indexable_ty = try sema.resolveTypeOrPoison(block, LazySrcLoc.unneeded, bin.lhs) orelse return .generic_poison_type;
74397439 const indexable_ty = maybe_wrapped_indexable_ty.optEuBaseType(zcu);
74407440 assert(indexable_ty.isIndexable(zcu)); // validated by a previous instruction
74417441 const elem_ty = switch (indexable_ty.zigTypeTag(zcu)) {
7442 .@"struct" => indexable_ty.fieldType(@intFromEnum(bin.rhs), zcu),
7442 .@"struct" => indexable_ty.fieldType(@backingInt(bin.rhs), zcu),
74437443 else => indexable_ty.indexableElem(zcu),
74447444 };
74457445 return .fromType(elem_ty);
......@@ -7448,7 +7448,7 @@ fn zirArrayInitElemType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compil
74487448fn zirElemType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
74497449 const pt = sema.pt;
74507450 const zcu = pt.zcu;
7451 const un_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
7451 const un_node = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
74527452 const maybe_wrapped_ptr_ty = try sema.resolveTypeOrPoison(block, LazySrcLoc.unneeded, un_node.operand) orelse return .generic_poison_type;
74537453 const ptr_ty = maybe_wrapped_ptr_ty.optEuBaseType(zcu);
74547454 assert(ptr_ty.zigTypeTag(zcu) == .pointer); // validated by a previous instruction
......@@ -7464,7 +7464,7 @@ fn zirElemType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
74647464fn zirIndexablePtrElemType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
74657465 const pt = sema.pt;
74667466 const zcu = pt.zcu;
7467 const un_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
7467 const un_node = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
74687468 const src = block.nodeOffset(un_node.src_node);
74697469 const ptr_ty = try sema.resolveTypeOrPoison(block, src, un_node.operand) orelse return .generic_poison_type;
74707470 try sema.checkMemOperand(block, src, ptr_ty);
......@@ -7478,7 +7478,7 @@ fn zirIndexablePtrElemType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Com
74787478fn zirSplatOpResultType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
74797479 const pt = sema.pt;
74807480 const zcu = pt.zcu;
7481 const un_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
7481 const un_node = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
74827482
74837483 const raw_ty = try sema.resolveTypeOrPoison(block, LazySrcLoc.unneeded, un_node.operand) orelse return .generic_poison_type;
74847484 const vec_ty = raw_ty.optEuBaseType(zcu);
......@@ -7491,7 +7491,7 @@ fn zirSplatOpResultType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compil
74917491}
74927492
74937493fn zirVectorType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
7494 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
7494 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
74957495 const len_src = block.builtinCallArgSrc(inst_data.src_node, 0);
74967496 const elem_type_src = block.builtinCallArgSrc(inst_data.src_node, 1);
74977497 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
......@@ -7506,7 +7506,7 @@ fn zirVectorType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!
75067506}
75077507
75087508fn zirArrayType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
7509 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
7509 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
75107510 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
75117511 const len_src = block.src(.{ .node_offset_array_type_len = inst_data.src_node });
75127512 const elem_src = block.src(.{ .node_offset_array_type_elem = inst_data.src_node });
......@@ -7529,7 +7529,7 @@ fn zirArrayTypeSentinel(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compil
75297529 const io = comp.io;
75307530 const ip = &zcu.intern_pool;
75317531
7532 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
7532 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
75337533 const extra = sema.code.extraData(Zir.Inst.ArrayTypeSentinel, inst_data.payload_index).data;
75347534 const len_src = block.src(.{ .node_offset_array_type_len = inst_data.src_node });
75357535 const sentinel_src = block.src(.{ .node_offset_array_type_sentinel = inst_data.src_node });
......@@ -7565,7 +7565,7 @@ fn validateArrayElemType(sema: *Sema, block: *Block, elem_type: Type, elem_src:
75657565}
75667566
75677567fn zirAnyframeType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
7568 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
7568 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
75697569 if (true) {
75707570 return sema.failWithUseOfAsync(block, block.nodeOffset(inst_data.src_node));
75717571 }
......@@ -7580,7 +7580,7 @@ fn zirAnyframeType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErro
75807580fn zirErrorUnionType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
75817581 const pt = sema.pt;
75827582 const zcu = pt.zcu;
7583 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
7583 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
75847584 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
75857585 const lhs_src = block.src(.{ .node_offset_bin_lhs = inst_data.src_node });
75867586 const rhs_src = block.src(.{ .node_offset_bin_rhs = inst_data.src_node });
......@@ -7620,7 +7620,7 @@ fn zirErrorValue(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!
76207620 const gpa = comp.gpa;
76217621 const io = comp.io;
76227622
7623 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].str_tok;
7623 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].str_tok;
76247624 const name = try pt.zcu.intern_pool.getOrPutString(
76257625 gpa,
76267626 io,
......@@ -7718,7 +7718,7 @@ fn zirMergeErrorSets(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileEr
77187718 const pt = sema.pt;
77197719 const zcu = pt.zcu;
77207720 const ip = &zcu.intern_pool;
7721 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
7721 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
77227722 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
77237723 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
77247724 const lhs_src = block.src(.{ .node_offset_bin_lhs = inst_data.src_node });
......@@ -7776,7 +7776,7 @@ fn zirEnumLiteral(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
77767776 const gpa = comp.gpa;
77777777 const io = comp.io;
77787778
7779 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].str_tok;
7779 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].str_tok;
77807780 const name = inst_data.get(sema.code);
77817781 return Air.internedToRef((try pt.intern(.{
77827782 .enum_literal = try zcu.intern_pool.getOrPutString(gpa, io, pt.tid, name, .no_embedded_nulls),
......@@ -7790,7 +7790,7 @@ fn zirDeclLiteral(sema: *Sema, block: *Block, inst: Zir.Inst.Index, do_coerce: b
77907790 const gpa = comp.gpa;
77917791 const io = comp.io;
77927792
7793 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
7793 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
77947794 const src = block.nodeOffset(inst_data.src_node);
77957795 const extra = sema.code.extraData(Zir.Inst.Field, inst_data.payload_index).data;
77967796 const name = try zcu.intern_pool.getOrPutString(
......@@ -7851,7 +7851,7 @@ fn analyzeDeclLiteral(
78517851fn zirIntFromEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
78527852 const pt = sema.pt;
78537853 const zcu = pt.zcu;
7854 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
7854 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
78557855 const src = block.nodeOffset(inst_data.src_node);
78567856 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
78577857 const operand = sema.resolveInst(inst_data.operand);
......@@ -7893,7 +7893,7 @@ fn zirIntFromEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
78937893fn zirEnumFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
78947894 const pt = sema.pt;
78957895 const zcu = pt.zcu;
7896 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
7896 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
78977897 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
78987898 const src = block.nodeOffset(inst_data.src_node);
78997899 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
......@@ -7954,7 +7954,7 @@ fn zirOptionalPayloadPtr(
79547954 inst: Zir.Inst.Index,
79557955 safety_check: bool,
79567956) CompileError!Air.Inst.Ref {
7957 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
7957 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
79587958 const optional_ptr = sema.resolveInst(inst_data.operand);
79597959 const src = block.nodeOffset(inst_data.src_node);
79607960
......@@ -8042,7 +8042,7 @@ fn zirOptionalPayload(
80428042) CompileError!Air.Inst.Ref {
80438043 const pt = sema.pt;
80448044 const zcu = pt.zcu;
8045 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
8045 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
80468046 const src = block.nodeOffset(inst_data.src_node);
80478047 const operand = sema.resolveInst(inst_data.operand);
80488048 const operand_ty = sema.typeOf(operand);
......@@ -8093,7 +8093,7 @@ fn zirErrUnionPayload(
80938093) CompileError!Air.Inst.Ref {
80948094 const pt = sema.pt;
80958095 const zcu = pt.zcu;
8096 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
8096 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
80978097 const src = block.nodeOffset(inst_data.src_node);
80988098 const operand = sema.resolveInst(inst_data.operand);
80998099 const operand_src = src;
......@@ -8147,7 +8147,7 @@ fn zirErrUnionPayloadPtr(
81478147 block: *Block,
81488148 inst: Zir.Inst.Index,
81498149) CompileError!Air.Inst.Ref {
8150 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
8150 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
81518151 const operand = sema.resolveInst(inst_data.operand);
81528152 const src = block.nodeOffset(inst_data.src_node);
81538153
......@@ -8236,7 +8236,7 @@ fn analyzeErrUnionPayloadPtr(
82368236
82378237/// Value in, value out
82388238fn zirErrUnionCode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
8239 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
8239 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
82408240 const src = block.nodeOffset(inst_data.src_node);
82418241 const operand = sema.resolveInst(inst_data.operand);
82428242 return sema.analyzeErrUnionCode(block, src, operand);
......@@ -8269,7 +8269,7 @@ fn analyzeErrUnionCode(sema: *Sema, block: *Block, src: LazySrcLoc, operand: Air
82698269
82708270/// Pointer in, value out
82718271fn zirErrUnionCodePtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
8272 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
8272 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
82738273 const src = block.nodeOffset(inst_data.src_node);
82748274 const operand = sema.resolveInst(inst_data.operand);
82758275 return sema.analyzeErrUnionCodePtr(block, src, operand);
......@@ -8316,7 +8316,7 @@ fn zirFunc(
83168316 const io = comp.io;
83178317 const ip = &zcu.intern_pool;
83188318
8319 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
8319 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
83208320 const extra = sema.code.extraData(Zir.Inst.Func, inst_data.payload_index);
83218321 const target = zcu.getTarget();
83228322 const ret_ty_src = block.src(.{ .node_offset_fn_type_ret_ty = inst_data.src_node });
......@@ -8329,7 +8329,7 @@ fn zirFunc(
83298329 else switch (extra.data.ret_ty.body_len) {
83308330 0 => .void,
83318331 1 => blk: {
8332 const ret_ty_ref: Zir.Inst.Ref = @enumFromInt(sema.code.extra[extra_index]);
8332 const ret_ty_ref: Zir.Inst.Ref = @fromBackingInt(@intCast(sema.code.extra[extra_index]));
83338333 extra_index += 1;
83348334 break :blk try sema.resolveType(block, ret_ty_src, ret_ty_ref);
83358335 },
......@@ -9063,7 +9063,7 @@ fn zirParam(
90639063 inst: Zir.Inst.Index,
90649064 comptime_syntax: bool,
90659065) CompileError!void {
9066 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_tok;
9066 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_tok;
90679067 const src = block.tokenOffset(inst_data.src_tok);
90689068 const extra = sema.code.extraData(Zir.Inst.Param, inst_data.payload_index);
90699069 const param_name: Zir.NullTerminatedString = extra.data.name;
......@@ -9094,7 +9094,7 @@ fn zirParamAnytype(
90949094 inst: Zir.Inst.Index,
90959095 comptime_syntax: bool,
90969096) CompileError!void {
9097 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].str_tok;
9097 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].str_tok;
90989098 const param_name: Zir.NullTerminatedString = inst_data.start;
90999099
91009100 try block.params.append(sema.arena, .{
......@@ -9105,14 +9105,14 @@ fn zirParamAnytype(
91059105}
91069106
91079107fn zirAsNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9108 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9108 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
91099109 const src = block.nodeOffset(inst_data.src_node);
91109110 const extra = sema.code.extraData(Zir.Inst.As, inst_data.payload_index).data;
91119111 return sema.analyzeAs(block, src, extra.dest_type, extra.operand, false);
91129112}
91139113
91149114fn zirAsShiftOperand(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9115 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9115 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
91169116 const src = block.nodeOffset(inst_data.src_node);
91179117 const extra = sema.code.extraData(Zir.Inst.As, inst_data.payload_index).data;
91189118 return sema.analyzeAs(block, src, extra.dest_type, extra.operand, true);
......@@ -9137,7 +9137,7 @@ fn analyzeAs(
91379137 }
91389138
91399139 const is_ret = if (zir_dest_type.toIndex()) |ptr_index|
9140 sema.code.instructions.items(.tag)[@intFromEnum(ptr_index)] == .ret_type
9140 sema.code.instructions.items(.tag)[@backingInt(ptr_index)] == .ret_type
91419141 else
91429142 false;
91439143 return sema.coerceExtra(block, dest_ty, operand, src, .{ .is_ret = is_ret, .no_cast_to_comptime_int = no_cast_to_comptime_int }) catch |err| switch (err) {
......@@ -9149,7 +9149,7 @@ fn analyzeAs(
91499149fn zirIntFromPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
91509150 const pt = sema.pt;
91519151 const zcu = pt.zcu;
9152 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
9152 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
91539153 const ptr_src = block.builtinCallArgSrc(inst_data.src_node, 0);
91549154 const operand = sema.resolveInst(inst_data.operand);
91559155 const operand_ty = sema.typeOf(operand);
......@@ -9207,7 +9207,7 @@ fn zirFieldPtrLoad(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErro
92079207 const gpa = comp.gpa;
92089208 const io = comp.io;
92099209
9210 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9210 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
92119211 const src = block.nodeOffset(inst_data.src_node);
92129212 const field_name_src = block.src(.{ .node_offset_field_name = inst_data.src_node });
92139213 const extra = sema.code.extraData(Zir.Inst.Field, inst_data.payload_index).data;
......@@ -9229,7 +9229,7 @@ fn zirFieldPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
92299229 const gpa = comp.gpa;
92309230 const io = comp.io;
92319231
9232 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9232 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
92339233 const src = block.nodeOffset(inst_data.src_node);
92349234 const field_name_src = block.src(.{ .node_offset_field_name = inst_data.src_node });
92359235 const extra = sema.code.extraData(Zir.Inst.Field, inst_data.payload_index).data;
......@@ -9251,7 +9251,7 @@ fn zirStructInitFieldPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compi
92519251 const gpa = comp.gpa;
92529252 const io = comp.io;
92539253
9254 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9254 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
92559255 const src = block.nodeOffset(inst_data.src_node);
92569256 const field_name_src = block.src(.{ .node_offset_field_name_init = inst_data.src_node });
92579257 const extra = sema.code.extraData(Zir.Inst.Field, inst_data.payload_index).data;
......@@ -9275,7 +9275,7 @@ fn zirStructInitFieldPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compi
92759275}
92769276
92779277fn zirFieldPtrNamedLoad(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9278 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9278 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
92799279 const src = block.nodeOffset(inst_data.src_node);
92809280 const field_name_src = block.builtinCallArgSrc(inst_data.src_node, 1);
92819281 const extra = sema.code.extraData(Zir.Inst.FieldNamed, inst_data.payload_index).data;
......@@ -9285,7 +9285,7 @@ fn zirFieldPtrNamedLoad(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compil
92859285}
92869286
92879287fn zirFieldPtrNamed(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9288 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9288 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
92899289 const src = block.nodeOffset(inst_data.src_node);
92909290 const field_name_src = block.builtinCallArgSrc(inst_data.src_node, 1);
92919291 const extra = sema.code.extraData(Zir.Inst.FieldNamed, inst_data.payload_index).data;
......@@ -9295,7 +9295,7 @@ fn zirFieldPtrNamed(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr
92959295}
92969296
92979297fn zirIntCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9298 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9298 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
92999299 const src = block.nodeOffset(inst_data.src_node);
93009300 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
93019301 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
......@@ -9367,7 +9367,7 @@ fn intCast(
93679367fn zirBitcast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
93689368 const pt = sema.pt;
93699369 const zcu = pt.zcu;
9370 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9370 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
93719371 const src = block.nodeOffset(inst_data.src_node);
93729372 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
93739373 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
......@@ -9467,7 +9467,7 @@ fn zirBackingInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!
94679467 const pt = sema.pt;
94689468 const zcu = pt.zcu;
94699469 const gpa = zcu.comp.gpa;
9470 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
9470 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
94719471 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
94729472
94739473 const operand = sema.resolveInst(inst_data.operand);
......@@ -9524,7 +9524,7 @@ fn zirBackingInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!
95249524fn zirFromBackingIntArgTy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
95259525 const pt = sema.pt;
95269526 const zcu = pt.zcu;
9527 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
9527 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
95289528 const src = block.nodeOffset(inst_data.src_node);
95299529
95309530 const dest_ty = try sema.resolveDestType(block, src, inst_data.operand, .remove_eu_opt, "@fromBackingInt");
......@@ -9552,7 +9552,7 @@ fn zirFromBackingInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileEr
95529552 const zcu = pt.zcu;
95539553 const ip = &zcu.intern_pool;
95549554
9555 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9555 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
95569556 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
95579557 const src = block.nodeOffset(inst_data.src_node);
95589558 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
......@@ -9602,7 +9602,7 @@ fn zirFromBackingInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileEr
96029602fn zirFloatCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
96039603 const pt = sema.pt;
96049604 const zcu = pt.zcu;
9605 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9605 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
96069606 const src = block.nodeOffset(inst_data.src_node);
96079607 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
96089608 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
......@@ -9665,7 +9665,7 @@ fn zirFloatCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
96659665}
96669666
96679667fn zirElemVal(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9668 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9668 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
96699669 const src = block.nodeOffset(inst_data.src_node);
96709670 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
96719671 const array = sema.resolveInst(extra.lhs);
......@@ -9674,7 +9674,7 @@ fn zirElemVal(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
96749674}
96759675
96769676fn zirElemPtrLoad(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9677 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9677 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
96789678 const src = block.nodeOffset(inst_data.src_node);
96799679 const elem_index_src = block.src(.{ .node_offset_array_access_index = inst_data.src_node });
96809680 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
......@@ -9693,7 +9693,7 @@ fn zirElemPtrLoad(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
96939693}
96949694
96959695fn zirElemValImm(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9696 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].elem_val_imm;
9696 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].elem_val_imm;
96979697 const array = sema.resolveInst(inst_data.operand);
96989698 const elem_index = try sema.pt.intRef(.usize, inst_data.idx);
96999699 return sema.elemVal(block, LazySrcLoc.unneeded, array, elem_index, LazySrcLoc.unneeded, false);
......@@ -9702,7 +9702,7 @@ fn zirElemValImm(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!
97029702fn zirElemPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
97039703 const pt = sema.pt;
97049704 const zcu = pt.zcu;
9705 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9705 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
97069706 const src = block.nodeOffset(inst_data.src_node);
97079707 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
97089708 const array_ptr = sema.resolveInst(extra.lhs);
......@@ -9728,7 +9728,7 @@ fn zirElemPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
97289728}
97299729
97309730fn zirElemPtrNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9731 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9731 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
97329732 const src = block.nodeOffset(inst_data.src_node);
97339733 const elem_index_src = block.src(.{ .node_offset_array_access_index = inst_data.src_node });
97349734 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
......@@ -9741,7 +9741,7 @@ fn zirElemPtrNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
97419741fn zirArrayInitElemPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
97429742 const pt = sema.pt;
97439743 const zcu = pt.zcu;
9744 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9744 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
97459745 const src = block.nodeOffset(inst_data.src_node);
97469746 const extra = sema.code.extraData(Zir.Inst.ElemPtrImm, inst_data.payload_index).data;
97479747 const array_ptr = sema.resolveInst(extra.ptr);
......@@ -9757,7 +9757,7 @@ fn zirArrayInitElemPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compile
97579757}
97589758
97599759fn zirSliceStart(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9760 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9760 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
97619761 const src = block.nodeOffset(inst_data.src_node);
97629762 const extra = sema.code.extraData(Zir.Inst.SliceStart, inst_data.payload_index).data;
97639763 const array_ptr = sema.resolveInst(extra.lhs);
......@@ -9770,7 +9770,7 @@ fn zirSliceStart(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!
97709770}
97719771
97729772fn zirSliceEnd(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9773 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9773 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
97749774 const src = block.nodeOffset(inst_data.src_node);
97759775 const extra = sema.code.extraData(Zir.Inst.SliceEnd, inst_data.payload_index).data;
97769776 const array_ptr = sema.resolveInst(extra.lhs);
......@@ -9784,7 +9784,7 @@ fn zirSliceEnd(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
97849784}
97859785
97869786fn zirSliceSentinel(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9787 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9787 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
97889788 const src = block.nodeOffset(inst_data.src_node);
97899789 const sentinel_src = block.src(.{ .node_offset_slice_sentinel = inst_data.src_node });
97909790 const extra = sema.code.extraData(Zir.Inst.SliceSentinel, inst_data.payload_index).data;
......@@ -9800,7 +9800,7 @@ fn zirSliceSentinel(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr
98009800}
98019801
98029802fn zirSliceLength(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
9803 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
9803 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
98049804 const src = block.nodeOffset(inst_data.src_node);
98059805 const extra = sema.code.extraData(Zir.Inst.SliceLength, inst_data.payload_index).data;
98069806 const array_ptr = sema.resolveInst(extra.lhs);
......@@ -9822,7 +9822,7 @@ fn zirSliceSentinelTy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileE
98229822 const pt = sema.pt;
98239823 const zcu = pt.zcu;
98249824
9825 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
9825 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
98269826
98279827 const src = block.nodeOffset(inst_data.src_node);
98289828 const ptr_src = block.src(.{ .node_offset_slice_ptr = inst_data.src_node });
......@@ -9867,7 +9867,7 @@ fn zirSwitchBlockErrUnion(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Comp
98679867
98689868 assert(!zir_switch.has_continue); // wrong codepath!
98699869
9870 const block_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
9870 const block_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
98719871 try sema.air_instructions.append(gpa, .{
98729872 .tag = .block,
98739873 .data = undefined,
......@@ -10021,7 +10021,7 @@ fn zirSwitchBlock(
1002110021) CompileError!Air.Inst.Ref {
1002210022 const zir_switch = sema.code.getSwitchBlock(inst);
1002310023
10024 const block_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
10024 const block_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
1002510025 try sema.air_instructions.append(sema.gpa, .{
1002610026 .tag = .block,
1002710027 .data = undefined,
......@@ -10161,7 +10161,7 @@ fn analyzeSwitchBlock(
1016110161 return result;
1016210162 } else |err| switch (err) {
1016310163 error.ComptimeBreak => {
10164 const break_inst = sema.code.instructions.get(@intFromEnum(sema.comptime_break_inst));
10164 const break_inst = sema.code.instructions.get(@backingInt(sema.comptime_break_inst));
1016510165 if (break_inst.tag != .switch_continue) return error.ComptimeBreak;
1016610166 const extra = sema.code.extraData(Zir.Inst.Break, break_inst.data.@"break".payload_index).data;
1016710167 if (extra.block_inst != switch_inst) return error.ComptimeBreak;
......@@ -10342,7 +10342,7 @@ fn analyzeSwitchBlock(
1034210342 break :switch_ref .{ air_ref, true };
1034310343 };
1034410344
10345 const air_tag = sema.air_instructions.items(.tag)[@intFromEnum(switch_ref.toIndex().?)];
10345 const air_tag = sema.air_instructions.items(.tag)[@backingInt(switch_ref.toIndex().?)];
1034610346 switch (air_tag) {
1034710347 .loop_switch_br, .switch_br => assert(!item_has_opv),
1034810348 .loop, .block => assert(item_has_opv),
......@@ -10362,8 +10362,8 @@ fn analyzeSwitchBlock(
1036210362 var replacement_block = block.makeSubBlock();
1036310363 defer replacement_block.instructions.deinit(gpa);
1036410364
10365 assert(sema.air_instructions.items(.tag)[@intFromEnum(placeholder_inst)] == .br);
10366 const new_operand_maybe_ref = sema.air_instructions.items(.data)[@intFromEnum(placeholder_inst)].br.operand;
10365 assert(sema.air_instructions.items(.tag)[@backingInt(placeholder_inst)] == .br);
10366 const new_operand_maybe_ref = sema.air_instructions.items(.data)[@backingInt(placeholder_inst)].br.operand;
1036710367
1036810368 if (zir_switch.any_maybe_runtime_capture and !item_has_opv) {
1036910369 _ = try replacement_block.addBinOp(.store, operand.loop.operand_alloc, new_operand_maybe_ref);
......@@ -10404,8 +10404,8 @@ fn analyzeSwitchBlock(
1040410404 if (replacement_block.instructions.items.len == 1) {
1040510405 // Optimization: we don't need a block!
1040610406 sema.air_instructions.set(
10407 @intFromEnum(placeholder_inst),
10408 sema.air_instructions.get(@intFromEnum(replacement_block.instructions.items[0])),
10407 @backingInt(placeholder_inst),
10408 sema.air_instructions.get(@backingInt(replacement_block.instructions.items[0])),
1040910409 );
1041010410 continue;
1041110411 }
......@@ -10414,7 +10414,7 @@ fn analyzeSwitchBlock(
1041410414 // No `br` is needed as the block is a switch dispatch so necessarily `noreturn`.
1041510415 try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.Block).@"struct".field_names.len +
1041610416 replacement_block.instructions.items.len);
10417 sema.air_instructions.set(@intFromEnum(placeholder_inst), .{
10417 sema.air_instructions.set(@backingInt(placeholder_inst), .{
1041810418 .tag = .block,
1041910419 .data = .{ .ty_pl = .{
1042010420 .ty = .noreturn_type,
......@@ -10470,7 +10470,7 @@ fn finishSwitchBr(
1047010470
1047110471 // AstGen guarantees that the instruction immediately preceding
1047210472 // switch_block[_ref]/switch_block_err_union is a dbg_stmt.
10473 const cond_dbg_node_index: Zir.Inst.Index = @enumFromInt(@intFromEnum(switch_inst) - 1);
10473 const cond_dbg_node_index: Zir.Inst.Index = @fromBackingInt(@intCast(@backingInt(switch_inst) - 1));
1047410474
1047510475 const else_is_named_only = has_else and has_under;
1047610476
......@@ -10499,7 +10499,7 @@ fn finishSwitchBr(
1049910499 fn appendAssumeCapacity(hints: *@This(), hint: std.lang.BranchHint) void {
1050010500 const idx_in_bag = hints.count % hints_per_bag;
1050110501 var bag: u32 = if (idx_in_bag > 0) hints.bags.pop().? else 0;
10502 bag |= @as(u32, @intFromEnum(hint)) << @intCast(@bitSizeOf(std.lang.BranchHint) * idx_in_bag);
10502 bag |= @as(u32, @backingInt(hint)) << @intCast(@bitSizeOf(std.lang.BranchHint) * idx_in_bag);
1050310503 hints.count += 1;
1050410504 return hints.bags.appendAssumeCapacity(bag);
1050510505 }
......@@ -10613,7 +10613,7 @@ fn finishSwitchBr(
1061310613 .ranges_len = 0,
1061410614 .body_len = @intCast(case_block.instructions.items.len),
1061510615 }));
10616 cases_extra.appendAssumeCapacity(@intFromEnum(item_ref));
10616 cases_extra.appendAssumeCapacity(@backingInt(item_ref));
1061710617 cases_extra.appendSliceAssumeCapacity(@ptrCast(case_block.instructions.items));
1061810618 }
1061910619 }
......@@ -10685,7 +10685,7 @@ fn finishSwitchBr(
1068510685 .ranges_len = 0,
1068610686 .body_len = @intCast(case_block.instructions.items.len),
1068710687 }));
10688 cases_extra.appendAssumeCapacity(@intFromEnum(item_ref));
10688 cases_extra.appendAssumeCapacity(@backingInt(item_ref));
1068910689 cases_extra.appendSliceAssumeCapacity(@ptrCast(case_block.instructions.items));
1069010690 }
1069110691 }
......@@ -10828,7 +10828,7 @@ fn finishSwitchBr(
1082810828 .ranges_len = 0,
1082910829 .body_len = @intCast(case_block.instructions.items.len),
1083010830 }));
10831 cases_extra.appendAssumeCapacity(@intFromEnum(item_ref));
10831 cases_extra.appendAssumeCapacity(@backingInt(item_ref));
1083210832 cases_extra.appendSliceAssumeCapacity(@ptrCast(case_block.instructions.items));
1083310833 }
1083410834 }
......@@ -10891,7 +10891,7 @@ fn finishSwitchBr(
1089110891 if (seen_field != null) continue;
1089210892 const item_val = try pt.enumValueFieldIndex(item_ty, @intCast(field_i));
1089310893 const item_ref: Air.Inst.Ref = .fromValue(item_val);
10894 cases_extra.appendAssumeCapacity(@intFromEnum(item_ref));
10894 cases_extra.appendAssumeCapacity(@backingInt(item_ref));
1089510895 items_len += 1;
1089610896 }
1089710897 assert(items_len > 0); // `else` must be reachable at this point
......@@ -12370,7 +12370,7 @@ fn analyzeSwitchPayloadCaptureTaggedUnion(
1237012370
1237112371 {
1237212372 // All branch hints are `.none`, so just add zero elems.
12373 comptime assert(@intFromEnum(std.lang.BranchHint.none) == 0);
12373 comptime assert(@backingInt(std.lang.BranchHint.none) == 0);
1237412374 const need_elems = @divCeil(field_indices.len + 1, 10);
1237512375 try cases_extra.appendNTimes(gpa, 0, need_elems);
1237612376 }
......@@ -12402,15 +12402,15 @@ fn analyzeSwitchPayloadCaptureTaggedUnion(
1240212402 .ranges_len = 0,
1240312403 .body_len = @intCast(coerce_block.instructions.items.len),
1240412404 }));
12405 cases_extra.appendAssumeCapacity(@intFromEnum(item)); // item
12405 cases_extra.appendAssumeCapacity(@backingInt(item)); // item
1240612406 cases_extra.appendSliceAssumeCapacity(@ptrCast(coerce_block.instructions.items)); // body
1240712407 }
1240812408 }
1240912409 const else_body_len = len: {
1241012410 // 'else' prong is unreachable
12411 const result_index: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
12411 const result_index: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
1241212412 try sema.air_instructions.append(gpa, .{ .tag = .unreach, .data = .{ .no_op = {} } });
12413 try cases_extra.append(gpa, @intFromEnum(result_index));
12413 try cases_extra.append(gpa, @backingInt(result_index));
1241412414 break :len 1;
1241512415 };
1241612416
......@@ -12439,13 +12439,13 @@ fn analyzeSwitchPayloadCaptureTaggedUnion(
1243912439 .simple => |s| {
1244012440 const air_datas = sema.air_instructions.items(.data);
1244112441 air_datas[switch_br_inst].pl_op.operand = s.cond;
12442 air_datas[@intFromEnum(capture_block_inst)].ty_pl.payload =
12442 air_datas[@backingInt(capture_block_inst)].ty_pl.payload =
1244312443 sema.addExtraAssumeCapacity(Air.Block{ .body_len = 1 });
1244412444 sema.air_extra.appendAssumeCapacity(switch_br_inst);
1244512445 },
1244612446 .loop => {
1244712447 // The block must first extract the tag from the loaded union.
12448 const tag_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
12448 const tag_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
1244912449 try sema.air_instructions.append(sema.gpa, .{
1245012450 .tag = .get_union_tag,
1245112451 .data = .{ .ty_op = .{
......@@ -12455,9 +12455,9 @@ fn analyzeSwitchPayloadCaptureTaggedUnion(
1245512455 });
1245612456 const air_datas = sema.air_instructions.items(.data);
1245712457 air_datas[switch_br_inst].pl_op.operand = tag_inst.toRef();
12458 air_datas[@intFromEnum(capture_block_inst)].ty_pl.payload =
12458 air_datas[@backingInt(capture_block_inst)].ty_pl.payload =
1245912459 sema.addExtraAssumeCapacity(Air.Block{ .body_len = 2 });
12460 sema.air_extra.appendAssumeCapacity(@intFromEnum(tag_inst));
12460 sema.air_extra.appendAssumeCapacity(@backingInt(tag_inst));
1246112461 sema.air_extra.appendAssumeCapacity(switch_br_inst);
1246212462 },
1246312463 }
......@@ -12674,7 +12674,7 @@ fn maybeErrorUnwrap(
1267412674
1267512675 const tags = sema.code.instructions.items(.tag);
1267612676 for (body) |inst| {
12677 switch (tags[@intFromEnum(inst)]) {
12677 switch (tags[@backingInt(inst)]) {
1267812678 .@"unreachable" => if (!block.wantSafety()) return false,
1267912679 .err_union_code => if (!allow_err_code_inst) return false,
1268012680 .save_err_ret_index,
......@@ -12688,7 +12688,7 @@ fn maybeErrorUnwrap(
1268812688 }
1268912689
1269012690 for (body) |inst| {
12691 const air_inst = switch (tags[@intFromEnum(inst)]) {
12691 const air_inst = switch (tags[@backingInt(inst)]) {
1269212692 .err_union_code => continue,
1269312693 .dbg_stmt => {
1269412694 try sema.zirDbgStmt(block, inst);
......@@ -12705,7 +12705,7 @@ fn maybeErrorUnwrap(
1270512705 return true;
1270612706 },
1270712707 .panic => {
12708 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
12708 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1270912709 const msg_inst = sema.resolveInst(inst_data.operand);
1271012710
1271112711 const panic_fn = try getStdLangValue(sema, operand_src, .@"panic.call");
......@@ -12726,9 +12726,9 @@ fn maybeErrorUnwrapCondbr(sema: *Sema, block: *Block, body: []const Zir.Inst.Ind
1272612726 const pt = sema.pt;
1272712727 const zcu = pt.zcu;
1272812728 const index = cond.toIndex() orelse return;
12729 if (sema.code.instructions.items(.tag)[@intFromEnum(index)] != .is_non_err) return;
12729 if (sema.code.instructions.items(.tag)[@backingInt(index)] != .is_non_err) return;
1273012730
12731 const err_inst_data = sema.code.instructions.items(.data)[@intFromEnum(index)].un_node;
12731 const err_inst_data = sema.code.instructions.items(.data)[@backingInt(index)].un_node;
1273212732 const err_operand = sema.resolveInst(err_inst_data.operand);
1273312733 const operand_ty = sema.typeOf(err_operand);
1273412734 if (operand_ty.zigTypeTag(zcu) == .error_set) {
......@@ -12745,7 +12745,7 @@ fn maybeErrorUnwrapCondbr(sema: *Sema, block: *Block, body: []const Zir.Inst.Ind
1274512745fn maybeErrorUnwrapComptime(sema: *Sema, block: *Block, body: []const Zir.Inst.Index, operand: Air.Inst.Ref) !void {
1274612746 const tags = sema.code.instructions.items(.tag);
1274712747 const inst = for (body) |inst| {
12748 switch (tags[@intFromEnum(inst)]) {
12748 switch (tags[@backingInt(inst)]) {
1274912749 .dbg_stmt,
1275012750 .save_err_ret_index,
1275112751 => {},
......@@ -12753,7 +12753,7 @@ fn maybeErrorUnwrapComptime(sema: *Sema, block: *Block, body: []const Zir.Inst.I
1275312753 else => return,
1275412754 }
1275512755 } else return;
12756 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].@"unreachable";
12756 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].@"unreachable";
1275712757 const src = block.nodeOffset(inst_data.src_node);
1275812758
1275912759 if (try sema.resolveDefinedValue(block, src, operand)) |val| {
......@@ -12766,7 +12766,7 @@ fn maybeErrorUnwrapComptime(sema: *Sema, block: *Block, body: []const Zir.Inst.I
1276612766fn zirHasField(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1276712767 const pt = sema.pt;
1276812768 const zcu = pt.zcu;
12769 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
12769 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1277012770 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
1277112771 const ty_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1277212772 const name_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -12813,7 +12813,7 @@ fn zirHasField(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1281312813fn zirHasDecl(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1281412814 const pt = sema.pt;
1281512815 const zcu = pt.zcu;
12816 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
12816 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1281712817 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
1281812818 const lhs_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1281912819 const rhs_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -12834,7 +12834,7 @@ fn zirHasDecl(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1283412834fn zirImport(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1283512835 const pt = sema.pt;
1283612836 const zcu = pt.zcu;
12837 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_tok;
12837 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_tok;
1283812838 const extra = sema.code.extraData(Zir.Inst.Import, inst_data.payload_index).data;
1283912839 const operand_src = block.tokenOffset(inst_data.src_tok);
1284012840 const operand = sema.code.nullTerminatedString(extra.path);
......@@ -12883,7 +12883,7 @@ fn zirEmbedFile(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
1288312883 const pt = sema.pt;
1288412884 const zcu = pt.zcu;
1288512885
12886 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
12886 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1288712887 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1288812888 const name = try sema.resolveConstString(block, operand_src, inst_data.operand, .{ .simple = .operand_embedFile });
1288912889
......@@ -12916,7 +12916,7 @@ fn zirShl(
1291612916) CompileError!Air.Inst.Ref {
1291712917 const pt = sema.pt;
1291812918 const zcu = pt.zcu;
12919 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
12919 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1292012920 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
1292112921 const lhs = sema.resolveInst(extra.lhs);
1292212922 const rhs = sema.resolveInst(extra.rhs);
......@@ -13103,7 +13103,7 @@ fn zirShr(
1310313103) CompileError!Air.Inst.Ref {
1310413104 const pt = sema.pt;
1310513105 const zcu = pt.zcu;
13106 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
13106 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1310713107 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
1310813108 const lhs = sema.resolveInst(extra.lhs);
1310913109 const rhs = sema.resolveInst(extra.rhs);
......@@ -13230,7 +13230,7 @@ fn zirBitwise(
1323013230) CompileError!Air.Inst.Ref {
1323113231 const pt = sema.pt;
1323213232 const zcu = pt.zcu;
13233 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
13233 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1323413234 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
1323513235 const lhs_src = block.src(.{ .node_offset_bin_lhs = inst_data.src_node });
1323613236 const rhs_src = block.src(.{ .node_offset_bin_rhs = inst_data.src_node });
......@@ -13284,7 +13284,7 @@ fn zirBitwise(
1328413284fn zirBitNot(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1328513285 const pt = sema.pt;
1328613286 const zcu = pt.zcu;
13287 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
13287 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1328813288 const operand_src = block.src(.{ .node_offset_un_op = inst_data.src_node });
1328913289 const src = block.nodeOffset(inst_data.src_node);
1329013290 const operand = sema.resolveInst(inst_data.operand);
......@@ -13410,7 +13410,7 @@ fn analyzeTupleCat(
1341013410fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1341113411 const pt = sema.pt;
1341213412 const zcu = pt.zcu;
13413 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
13413 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1341413414 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
1341513415 const lhs = sema.resolveInst(extra.lhs);
1341613416 const rhs = sema.resolveInst(extra.rhs);
......@@ -13844,7 +13844,7 @@ fn analyzeTupleMul(
1384413844fn zirNegate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1384513845 const pt = sema.pt;
1384613846 const zcu = pt.zcu;
13847 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
13847 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1384813848 const src = block.nodeOffset(inst_data.src_node);
1384913849 const lhs_src = src;
1385013850 const rhs_src = block.src(.{ .node_offset_un_op = inst_data.src_node });
......@@ -13877,7 +13877,7 @@ fn zirNegate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
1387713877fn zirNegateWrap(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1387813878 const pt = sema.pt;
1387913879 const zcu = pt.zcu;
13880 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
13880 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1388113881 const src = block.nodeOffset(inst_data.src_node);
1388213882 const lhs_src = src;
1388313883 const rhs_src = block.src(.{ .node_offset_un_op = inst_data.src_node });
......@@ -13902,7 +13902,7 @@ fn zirArithmetic(
1390213902 zir_tag: Zir.Inst.Tag,
1390313903 safety: bool,
1390413904) CompileError!Air.Inst.Ref {
13905 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
13905 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1390613906 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
1390713907 const lhs_src = block.src(.{ .node_offset_bin_lhs = inst_data.src_node });
1390813908 const rhs_src = block.src(.{ .node_offset_bin_rhs = inst_data.src_node });
......@@ -13916,7 +13916,7 @@ fn zirArithmetic(
1391613916fn zirDiv(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1391713917 const pt = sema.pt;
1391813918 const zcu = pt.zcu;
13919 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
13919 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1392013920 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
1392113921 const lhs_src = block.src(.{ .node_offset_bin_lhs = inst_data.src_node });
1392213922 const rhs_src = block.src(.{ .node_offset_bin_rhs = inst_data.src_node });
......@@ -14025,7 +14025,7 @@ fn zirDiv(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
1402514025fn zirDivExact(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1402614026 const pt = sema.pt;
1402714027 const zcu = pt.zcu;
14028 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
14028 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1402914029 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
1403014030 const lhs_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1403114031 const rhs_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -14121,7 +14121,7 @@ fn zirDivExact(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1412114121fn zirDivFloor(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1412214122 const pt = sema.pt;
1412314123 const zcu = pt.zcu;
14124 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
14124 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1412514125 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
1412614126 const lhs_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1412714127 const rhs_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -14186,7 +14186,7 @@ fn zirDivFloor(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1418614186fn zirDivCeil(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1418714187 const pt = sema.pt;
1418814188 const zcu = pt.zcu;
14189 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
14189 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1419014190 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
1419114191 const lhs_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1419214192 const rhs_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -14251,7 +14251,7 @@ fn zirDivCeil(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1425114251fn zirDivTrunc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1425214252 const pt = sema.pt;
1425314253 const zcu = pt.zcu;
14254 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
14254 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1425514255 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
1425614256 const lhs_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1425714257 const rhs_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -14462,7 +14462,7 @@ fn airTag(block: *Block, is_int: bool, normal: Air.Inst.Tag, optimized: Air.Inst
1446214462fn zirModRem(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1446314463 const pt = sema.pt;
1446414464 const zcu = pt.zcu;
14465 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
14465 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1446614466 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
1446714467 const lhs_src = block.src(.{ .node_offset_bin_lhs = inst_data.src_node });
1446814468 const rhs_src = block.src(.{ .node_offset_bin_rhs = inst_data.src_node });
......@@ -14563,7 +14563,7 @@ fn zirModRem(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
1456314563fn zirMod(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1456414564 const pt = sema.pt;
1456514565 const zcu = pt.zcu;
14566 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
14566 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1456714567 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
1456814568 const lhs_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1456914569 const rhs_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -14627,7 +14627,7 @@ fn zirMod(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
1462714627fn zirRem(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1462814628 const pt = sema.pt;
1462914629 const zcu = pt.zcu;
14630 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
14630 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1463114631 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
1463214632 const lhs_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1463314633 const rhs_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -15211,7 +15211,7 @@ fn analyzePtrArithmetic(
1521115211}
1521215212
1521315213fn zirLoad(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
15214 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
15214 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1521515215 const src = block.nodeOffset(inst_data.src_node);
1521615216 const ptr_src = src; // TODO better source location
1521715217 const ptr = sema.resolveInst(inst_data.operand);
......@@ -15241,7 +15241,7 @@ fn zirAsm(
1524115241 const is_global_assembly = sema.func_index == .none;
1524215242
1524315243 const asm_source: []const u8 = if (tmpl_is_expr) s: {
15244 const tmpl: Zir.Inst.Ref = @enumFromInt(@intFromEnum(extra.data.asm_source));
15244 const tmpl: Zir.Inst.Ref = @fromBackingInt(@intCast(@backingInt(extra.data.asm_source)));
1524515245 break :s try sema.resolveConstString(block, src, tmpl, .{ .simple = .inline_assembly_code });
1524615246 } else sema.code.nullTerminatedString(extra.data.asm_source);
1524715247
......@@ -15495,7 +15495,7 @@ fn zirCmpEq(
1549515495) CompileError!Air.Inst.Ref {
1549615496 const pt = sema.pt;
1549715497 const zcu = pt.zcu;
15498 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
15498 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1549915499 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
1550015500 const src: LazySrcLoc = block.nodeOffset(inst_data.src_node);
1550115501 const lhs_src = block.src(.{ .node_offset_bin_lhs = inst_data.src_node });
......@@ -15606,7 +15606,7 @@ fn zirCmp(
1560615606 inst: Zir.Inst.Index,
1560715607 op: std.math.CompareOperator,
1560815608) CompileError!Air.Inst.Ref {
15609 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
15609 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1561015610 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
1561115611 const src: LazySrcLoc = block.nodeOffset(inst_data.src_node);
1561215612 const lhs_src = block.src(.{ .node_offset_bin_lhs = inst_data.src_node });
......@@ -15762,7 +15762,7 @@ fn runtimeBoolCmp(
1576215762fn zirSizeOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1576315763 const pt = sema.pt;
1576415764 const zcu = pt.zcu;
15765 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
15765 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1576615766 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1576715767 const ty = try sema.resolveType(block, operand_src, inst_data.operand);
1576815768 try sema.ensureLayoutResolved(ty, operand_src, .size_of);
......@@ -15786,7 +15786,7 @@ fn zirSizeOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
1578615786fn zirBitSizeOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1578715787 const pt = sema.pt;
1578815788 const zcu = pt.zcu;
15789 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
15789 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1579015790 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1579115791 const operand_ty = try sema.resolveType(block, operand_src, inst_data.operand);
1579215792 if (!operand_ty.hasBitRepresentation(zcu) and
......@@ -15816,7 +15816,7 @@ fn zirClosureGet(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstDat
1581615816 const ip = &zcu.intern_pool;
1581715817 const captures = Type.fromInterned(zcu.namespacePtr(block.namespace).owner_type).getCaptures(zcu);
1581815818
15819 const src_node: std.zig.Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(extended.operand)));
15819 const src_node: std.zig.Ast.Node.Offset = @fromBackingInt(@intCast(@as(i32, @bitCast(extended.operand))));
1582015820 const src = block.nodeOffset(src_node);
1582115821
1582215822 const capture_ty = switch (captures.get(ip)[extended.small].unwrap()) {
......@@ -15912,7 +15912,7 @@ fn zirFrameAddress(
1591215912 block: *Block,
1591315913 extended: Zir.Inst.Extended.InstData,
1591415914) CompileError!Air.Inst.Ref {
15915 const src_node: std.zig.Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(extended.operand)));
15915 const src_node: std.zig.Ast.Node.Offset = @fromBackingInt(@intCast(@as(i32, @bitCast(extended.operand))));
1591615916 const src = block.nodeOffset(src_node);
1591715917 try sema.requireRuntimeBlock(block, src, null);
1591815918 return try block.addNoOp(.frame_addr);
......@@ -16034,7 +16034,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1603416034 const io = comp.io;
1603516035 const ip = &zcu.intern_pool;
1603616036
16037 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
16037 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1603816038 const src = block.nodeOffset(inst_data.src_node);
1603916039 const ty = try sema.resolveType(block, src, inst_data.operand);
1604016040 const type_info_ty = try sema.getStdLangType(src, .Type);
......@@ -16207,7 +16207,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1620716207 };
1620816208 return Air.internedToRef((try pt.internUnion(.{
1620916209 .ty = type_info_ty.toIntern(),
16210 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.@"fn"))).toIntern(),
16210 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.@"fn"))).toIntern(),
1621116211 .val = (try pt.aggregateValue(fn_info_ty, &field_values)).toIntern(),
1621216212 })));
1621316213 },
......@@ -16217,13 +16217,13 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1621716217 const info = ty.intInfo(zcu);
1621816218 const field_values = .{
1621916219 // signedness: Signedness,
16220 (try pt.enumValueFieldIndex(signedness_ty, @intFromEnum(info.signedness))).toIntern(),
16220 (try pt.enumValueFieldIndex(signedness_ty, @backingInt(info.signedness))).toIntern(),
1622116221 // bits: u16,
1622216222 (try pt.intValue(.u16, info.bits)).toIntern(),
1622316223 };
1622416224 return Air.internedToRef((try pt.internUnion(.{
1622516225 .ty = type_info_ty.toIntern(),
16226 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.int))).toIntern(),
16226 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.int))).toIntern(),
1622716227 .val = (try pt.aggregateValue(int_info_ty, &field_values)).toIntern(),
1622816228 })));
1622916229 },
......@@ -16236,7 +16236,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1623616236 };
1623716237 return Air.internedToRef((try pt.internUnion(.{
1623816238 .ty = type_info_ty.toIntern(),
16239 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.float))).toIntern(),
16239 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.float))).toIntern(),
1624016240 .val = (try pt.aggregateValue(float_info_ty, &field_vals)).toIntern(),
1624116241 })));
1624216242 },
......@@ -16279,7 +16279,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1627916279
1628016280 const field_values = .{
1628116281 // size: Size,
16282 (try pt.enumValueFieldIndex(ptr_size_ty, @intFromEnum(info.flags.size))).toIntern(),
16282 (try pt.enumValueFieldIndex(ptr_size_ty, @backingInt(info.flags.size))).toIntern(),
1628316283 // attrs: Attributes
1628416284 (try pt.aggregateValue(ptr_attrs_ty, &attributes)).toIntern(),
1628516285 // child: type,
......@@ -16292,7 +16292,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1629216292 };
1629316293 return Air.internedToRef((try pt.internUnion(.{
1629416294 .ty = type_info_ty.toIntern(),
16295 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.pointer))).toIntern(),
16295 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.pointer))).toIntern(),
1629616296 .val = (try pt.aggregateValue(pointer_ty, &field_values)).toIntern(),
1629716297 })));
1629816298 },
......@@ -16310,7 +16310,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1631016310 };
1631116311 return Air.internedToRef((try pt.internUnion(.{
1631216312 .ty = type_info_ty.toIntern(),
16313 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.array))).toIntern(),
16313 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.array))).toIntern(),
1631416314 .val = (try pt.aggregateValue(array_field_ty, &field_values)).toIntern(),
1631516315 })));
1631616316 },
......@@ -16326,7 +16326,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1632616326 };
1632716327 return Air.internedToRef((try pt.internUnion(.{
1632816328 .ty = type_info_ty.toIntern(),
16329 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.vector))).toIntern(),
16329 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.vector))).toIntern(),
1633016330 .val = (try pt.aggregateValue(vector_field_ty, &field_values)).toIntern(),
1633116331 })));
1633216332 },
......@@ -16339,7 +16339,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1633916339 };
1634016340 return Air.internedToRef((try pt.internUnion(.{
1634116341 .ty = type_info_ty.toIntern(),
16342 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.optional))).toIntern(),
16342 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.optional))).toIntern(),
1634316343 .val = (try pt.aggregateValue(optional_field_ty, &field_values)).toIntern(),
1634416344 })));
1634516345 },
......@@ -16430,7 +16430,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1643016430 // Construct Type{ .error_set = errors_val }
1643116431 return Air.internedToRef((try pt.internUnion(.{
1643216432 .ty = type_info_ty.toIntern(),
16433 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.error_set))).toIntern(),
16433 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.error_set))).toIntern(),
1643416434 .val = (try pt.aggregateValue(error_set_ty, &field_values)).toIntern(),
1643516435 })));
1643616436 },
......@@ -16445,7 +16445,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1644516445 };
1644616446 return Air.internedToRef((try pt.internUnion(.{
1644716447 .ty = type_info_ty.toIntern(),
16448 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.error_union))).toIntern(),
16448 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.error_union))).toIntern(),
1644916449 .val = (try pt.aggregateValue(error_union_field_ty, &field_values)).toIntern(),
1645016450 })));
1645116451 },
......@@ -16583,7 +16583,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1658316583 };
1658416584 return Air.internedToRef((try pt.internUnion(.{
1658516585 .ty = type_info_ty.toIntern(),
16586 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.@"enum"))).toIntern(),
16586 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.@"enum"))).toIntern(),
1658716587 .val = (try pt.aggregateValue(type_enum_ty, &field_values)).toIntern(),
1658816588 })));
1658916589 },
......@@ -16763,7 +16763,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1676316763
1676416764 const field_values = .{
1676516765 // layout: ContainerLayout,
16766 (try pt.enumValueFieldIndex(container_layout_ty, @intFromEnum(layout))).toIntern(),
16766 (try pt.enumValueFieldIndex(container_layout_ty, @backingInt(layout))).toIntern(),
1676716767
1676816768 // tag_type: ?type,
1676916769 enum_tag_ty_val,
......@@ -16782,7 +16782,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1678216782 };
1678316783 return Air.internedToRef((try pt.internUnion(.{
1678416784 .ty = type_info_ty.toIntern(),
16785 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.@"union"))).toIntern(),
16785 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.@"union"))).toIntern(),
1678616786 .val = (try pt.aggregateValue(type_union_ty, &field_values)).toIntern(),
1678716787 })));
1678816788 },
......@@ -17040,7 +17040,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1704017040 // is_tuple: bool,
1704117041 Value.makeBool(ty.isTuple(zcu)).toIntern(),
1704217042 // layout: ContainerLayout,
17043 (try pt.enumValueFieldIndex(container_layout_ty, @intFromEnum(layout))).toIntern(),
17043 (try pt.enumValueFieldIndex(container_layout_ty, @backingInt(layout))).toIntern(),
1704417044 // backing_integer: ?type,
1704517045 backing_integer_val,
1704617046
......@@ -17056,7 +17056,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1705617056 };
1705717057 return Air.internedToRef((try pt.internUnion(.{
1705817058 .ty = type_info_ty.toIntern(),
17059 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.@"struct"))).toIntern(),
17059 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.@"struct"))).toIntern(),
1706017060 .val = (try pt.aggregateValue(type_struct_ty, &field_values)).toIntern(),
1706117061 })));
1706217062 },
......@@ -17071,7 +17071,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1707117071 };
1707217072 return Air.internedToRef((try pt.internUnion(.{
1707317073 .ty = type_info_ty.toIntern(),
17074 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.@"opaque"))).toIntern(),
17074 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.@"opaque"))).toIntern(),
1707517075 .val = (try pt.aggregateValue(type_opaque_ty, &field_values)).toIntern(),
1707617076 })));
1707717077 },
......@@ -17079,7 +17079,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1707917079 const spirv_info = ip.loadSpirvType(ty.toIntern());
1708017080 const spirv_union_ty = try sema.getStdLangType(src, .@"Type.Spirv");
1708117081 const spirv_tag_ty = spirv_union_ty.unionTagType(zcu).?;
17082 const spirv_tag_val = try pt.enumValueFieldIndex(spirv_tag_ty, @intFromEnum(spirv_info.flags.tag));
17082 const spirv_tag_val = try pt.enumValueFieldIndex(spirv_tag_ty, @backingInt(spirv_info.flags.tag));
1708317083 const spirv_payload_val: Value = switch (spirv_info.flags.tag) {
1708417084 .sampler => .void,
1708517085 .sampled_image, .runtime_array => .fromInterned(spirv_info.ty),
......@@ -17091,14 +17091,14 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1709117091 const depth_ty = try sema.getStdLangType(src, .@"Type.Spirv.Image.Depth");
1709217092 const access_ty = try sema.getStdLangType(src, .@"Type.Spirv.Image.Access");
1709317093 const usage_tag_ty = usage_union_ty.unionTagType(zcu).?;
17094 const usage_tag_val = try pt.enumValueFieldIndex(usage_tag_ty, @intFromEnum(spirv_info.flags.usage));
17094 const usage_tag_val = try pt.enumValueFieldIndex(usage_tag_ty, @backingInt(spirv_info.flags.usage));
1709517095 const usage_val = try pt.unionValue(usage_union_ty, usage_tag_val, .fromInterned(spirv_info.ty));
1709617096 const image_field_vals = [_]InternPool.Index{
1709717097 usage_val.toIntern(),
17098 (try pt.enumValueFieldIndex(format_ty, @intFromEnum(spirv_info.flags.format))).toIntern(),
17099 (try pt.enumValueFieldIndex(dim_ty, @intFromEnum(spirv_info.flags.dim))).toIntern(),
17100 (try pt.enumValueFieldIndex(depth_ty, @intFromEnum(spirv_info.flags.depth))).toIntern(),
17101 (try pt.enumValueFieldIndex(access_ty, @intFromEnum(spirv_info.flags.access))).toIntern(),
17098 (try pt.enumValueFieldIndex(format_ty, @backingInt(spirv_info.flags.format))).toIntern(),
17099 (try pt.enumValueFieldIndex(dim_ty, @backingInt(spirv_info.flags.dim))).toIntern(),
17100 (try pt.enumValueFieldIndex(depth_ty, @backingInt(spirv_info.flags.depth))).toIntern(),
17101 (try pt.enumValueFieldIndex(access_ty, @backingInt(spirv_info.flags.access))).toIntern(),
1710217102 Value.makeBool(spirv_info.flags.is_arrayed).toIntern(),
1710317103 Value.makeBool(spirv_info.flags.is_multisampled).toIntern(),
1710417104 };
......@@ -17108,7 +17108,7 @@ fn zirTypeInfo(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1710817108 const spirv_val = try pt.unionValue(spirv_union_ty, spirv_tag_val, spirv_payload_val);
1710917109 return Air.internedToRef((try pt.internUnion(.{
1711017110 .ty = type_info_ty.toIntern(),
17111 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @intFromEnum(std.lang.TypeId.spirv))).toIntern(),
17111 .tag = (try pt.enumValueFieldIndex(type_info_tag_ty, @backingInt(std.lang.TypeId.spirv))).toIntern(),
1711217112 .val = spirv_val.toIntern(),
1711317113 })));
1711417114 },
......@@ -17214,14 +17214,14 @@ fn typeInfoNamespaceDecls(
1721417214fn zirTypeof(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1721517215 _ = block;
1721617216 const zir_datas = sema.code.instructions.items(.data);
17217 const inst_data = zir_datas[@intFromEnum(inst)].un_node;
17217 const inst_data = zir_datas[@backingInt(inst)].un_node;
1721817218 const operand = sema.resolveInst(inst_data.operand);
1721917219 const operand_ty = sema.typeOf(operand);
1722017220 return Air.internedToRef(operand_ty.toIntern());
1722117221}
1722217222
1722317223fn zirTypeofBuiltin(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
17224 const pl_node = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
17224 const pl_node = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1722517225 const extra = sema.code.extraData(Zir.Inst.Block, pl_node.payload_index);
1722617226 const body = sema.code.bodySlice(extra.end, extra.data.body_len);
1722717227
......@@ -17245,7 +17245,7 @@ fn zirTypeofBuiltin(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr
1724517245}
1724617246
1724717247fn zirTypeofLog2IntType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
17248 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
17248 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1724917249 const src = block.nodeOffset(inst_data.src_node);
1725017250 const operand = sema.resolveInst(inst_data.operand);
1725117251 const operand_ty = sema.typeOf(operand);
......@@ -17324,7 +17324,7 @@ fn zirTypeofPeer(
1732417324fn zirBoolNot(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1732517325 const pt = sema.pt;
1732617326 const zcu = pt.zcu;
17327 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
17327 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1732817328 const src = block.nodeOffset(inst_data.src_node);
1732917329 const operand_src = block.src(.{ .node_offset_un_op = inst_data.src_node });
1733017330 const uncasted_operand = sema.resolveInst(inst_data.operand);
......@@ -17356,7 +17356,7 @@ fn zirBoolBr(
1735617356 const gpa = sema.gpa;
1735717357
1735817358 const datas = sema.code.instructions.items(.data);
17359 const inst_data = datas[@intFromEnum(inst)].pl_node;
17359 const inst_data = datas[@backingInt(inst)].pl_node;
1736017360 const extra = sema.code.extraData(Zir.Inst.BoolBr, inst_data.payload_index);
1736117361
1736217362 const uncoerced_lhs = sema.resolveInst(extra.data.lhs);
......@@ -17382,7 +17382,7 @@ fn zirBoolBr(
1738217382 return sema.coerce(parent_block, .bool, rhs_result, rhs_src);
1738317383 }
1738417384
17385 const block_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
17385 const block_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
1738617386 try sema.air_instructions.append(gpa, .{
1738717387 .tag = .block,
1738817388 .data = .{ .ty_pl = .{
......@@ -17484,7 +17484,7 @@ fn finishCondBr(
1748417484 .payload = cond_br_payload,
1748517485 } } });
1748617486
17487 sema.air_instructions.items(.data)[@intFromEnum(block_inst)].ty_pl.payload = sema.addExtraAssumeCapacity(
17487 sema.air_instructions.items(.data)[@backingInt(block_inst)].ty_pl.payload = sema.addExtraAssumeCapacity(
1748817488 Air.Block{ .body_len = @intCast(child_block.instructions.items.len) },
1748917489 );
1749017490 sema.air_extra.appendSliceAssumeCapacity(@ptrCast(child_block.instructions.items));
......@@ -17517,7 +17517,7 @@ fn zirIsNonNull(
1751717517 block: *Block,
1751817518 inst: Zir.Inst.Index,
1751917519) CompileError!Air.Inst.Ref {
17520 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
17520 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1752117521 const src = block.nodeOffset(inst_data.src_node);
1752217522 const operand = sema.resolveInst(inst_data.operand);
1752317523 try sema.checkNullableType(block, src, sema.typeOf(operand));
......@@ -17531,7 +17531,7 @@ fn zirIsNonNullPtr(
1753117531) CompileError!Air.Inst.Ref {
1753217532 const pt = sema.pt;
1753317533 const zcu = pt.zcu;
17534 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
17534 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1753517535 const src = block.nodeOffset(inst_data.src_node);
1753617536 const ptr = sema.resolveInst(inst_data.operand);
1753717537 const ptr_ty = sema.typeOf(ptr);
......@@ -17565,7 +17565,7 @@ fn checkErrorType(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type) !void {
1756517565}
1756617566
1756717567fn zirIsNonErr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
17568 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
17568 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1756917569 const src = block.nodeOffset(inst_data.src_node);
1757017570 const operand = sema.resolveInst(inst_data.operand);
1757117571 try sema.checkErrorType(block, src, sema.typeOf(operand));
......@@ -17575,7 +17575,7 @@ fn zirIsNonErr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
1757517575fn zirIsNonErrPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1757617576 const pt = sema.pt;
1757717577 const zcu = pt.zcu;
17578 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
17578 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1757917579 const src = block.nodeOffset(inst_data.src_node);
1758017580 const ptr = sema.resolveInst(inst_data.operand);
1758117581 const ptr_ty = sema.typeOf(ptr);
......@@ -17587,7 +17587,7 @@ fn zirIsNonErrPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
1758717587}
1758817588
1758917589fn zirRetIsNonErr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
17590 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
17590 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1759117591 const src = block.nodeOffset(inst_data.src_node);
1759217592 const operand = sema.resolveInst(inst_data.operand);
1759317593 return sema.analyzeIsNonErr(block, src, operand);
......@@ -17600,7 +17600,7 @@ fn zirCondbr(
1760017600) CompileError!void {
1760117601 const pt = sema.pt;
1760217602 const zcu = pt.zcu;
17603 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
17603 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1760417604 const cond_src = parent_block.src(.{ .node_offset_if_cond = inst_data.src_node });
1760517605 const extra = sema.code.extraData(Zir.Inst.CondBr, inst_data.payload_index);
1760617606
......@@ -17640,9 +17640,9 @@ fn zirCondbr(
1764017640
1764117641 const err_cond = blk: {
1764217642 const index = extra.data.condition.toIndex() orelse break :blk null;
17643 if (sema.code.instructions.items(.tag)[@intFromEnum(index)] != .is_non_err) break :blk null;
17643 if (sema.code.instructions.items(.tag)[@backingInt(index)] != .is_non_err) break :blk null;
1764417644
17645 const err_inst_data = sema.code.instructions.items(.data)[@intFromEnum(index)].un_node;
17645 const err_inst_data = sema.code.instructions.items(.data)[@backingInt(index)].un_node;
1764617646 const err_operand = sema.resolveInst(err_inst_data.operand);
1764717647 const operand_ty = sema.typeOf(err_operand);
1764817648 assert(operand_ty.zigTypeTag(zcu) == .error_union);
......@@ -17686,7 +17686,7 @@ fn zirCondbr(
1768617686}
1768717687
1768817688fn zirTry(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
17689 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
17689 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1769017690 const src = parent_block.nodeOffset(inst_data.src_node);
1769117691 const operand_src = parent_block.src(.{ .node_offset_try_operand = inst_data.src_node });
1769217692 const extra = sema.code.extraData(Zir.Inst.Try, inst_data.payload_index);
......@@ -17753,7 +17753,7 @@ fn zirTry(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError!
1775317753}
1775417754
1775517755fn zirTryPtr(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
17756 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
17756 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1775717757 const src = parent_block.nodeOffset(inst_data.src_node);
1775817758 const operand_src = parent_block.src(.{ .node_offset_try_operand = inst_data.src_node });
1775917759 const extra = sema.code.extraData(Zir.Inst.Try, inst_data.payload_index);
......@@ -17835,7 +17835,7 @@ fn ensurePostHoc(sema: *Sema, block: *Block, dest_block: Zir.Inst.Index) !*Label
1783517835
1783617836 try sema.post_hoc_blocks.ensureUnusedCapacity(sema.gpa, 1);
1783717837
17838 const new_block_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
17838 const new_block_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
1783917839 gop.value_ptr.* = new_block_inst.toRef();
1784017840 try sema.air_instructions.append(sema.gpa, .{
1784117841 .tag = .block,
......@@ -17889,7 +17889,7 @@ fn addRuntimeBreak(sema: *Sema, child_block: *Block, block_inst: Zir.Inst.Index,
1788917889}
1789017890
1789117891fn zirUnreachable(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
17892 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].@"unreachable";
17892 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].@"unreachable";
1789317893 const src = block.nodeOffset(inst_data.src_node);
1789417894
1789517895 if (block.isComptime()) {
......@@ -17918,7 +17918,7 @@ fn zirRetErrValue(
1791817918 const gpa = comp.gpa;
1791917919 const io = comp.io;
1792017920
17921 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].str_tok;
17921 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].str_tok;
1792217922 const src = block.tokenOffset(inst_data.src_tok);
1792317923 const err_name = try zcu.intern_pool.getOrPutString(
1792417924 gpa,
......@@ -17944,7 +17944,7 @@ fn zirRetImplicit(
1794417944) CompileError!void {
1794517945 const pt = sema.pt;
1794617946 const zcu = pt.zcu;
17947 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_tok;
17947 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_tok;
1794817948 const r_brace_src = block.tokenOffset(inst_data.src_tok);
1794917949 if (block.inlining == null and sema.func_is_naked) {
1795017950 assert(!block.isComptime());
......@@ -17986,7 +17986,7 @@ fn zirRetImplicit(
1798617986}
1798717987
1798817988fn zirRetNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
17989 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
17989 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1799017990 const operand = sema.resolveInst(inst_data.operand);
1799117991 const src = block.nodeOffset(inst_data.src_node);
1799217992
......@@ -17994,7 +17994,7 @@ fn zirRetNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!voi
1799417994}
1799517995
1799617996fn zirRetLoad(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
17997 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
17997 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1799817998 const src = block.nodeOffset(inst_data.src_node);
1799917999 const ret_ptr = sema.resolveInst(inst_data.operand);
1800018000
......@@ -18053,13 +18053,13 @@ fn maybePushErrorTrace(
1805318053 err_block.instructions.items.len + 1, // the error branch contains the `returnError` call and a `br`
1805418054 );
1805518055
18056 const block_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
18057 const cond_br_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len + 1);
18058 const then_br_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len + 2);
18059 const else_br_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len + 3);
18056 const block_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
18057 const cond_br_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len + 1));
18058 const then_br_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len + 2));
18059 const else_br_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len + 3));
1806018060
1806118061 const block_payload = sema.addExtraAssumeCapacity(Air.Block{ .body_len = 1 });
18062 sema.air_extra.appendAssumeCapacity(@intFromEnum(cond_br_inst));
18062 sema.air_extra.appendAssumeCapacity(@backingInt(cond_br_inst));
1806318063 sema.air_instructions.appendAssumeCapacity(.{
1806418064 .tag = .block,
1806518065 .data = .{ .ty_pl = .{
......@@ -18080,9 +18080,9 @@ fn maybePushErrorTrace(
1808018080 .else_cov = .none,
1808118081 },
1808218082 });
18083 sema.air_extra.appendAssumeCapacity(@intFromEnum(then_br_inst));
18083 sema.air_extra.appendAssumeCapacity(@backingInt(then_br_inst));
1808418084 sema.air_extra.appendSliceAssumeCapacity(@ptrCast(err_block.instructions.items));
18085 sema.air_extra.appendAssumeCapacity(@intFromEnum(else_br_inst));
18085 sema.air_extra.appendAssumeCapacity(@backingInt(else_br_inst));
1808618086 sema.air_instructions.appendAssumeCapacity(.{
1808718087 .tag = .cond_br,
1808818088 .data = .{ .pl_op = .{
......@@ -18112,7 +18112,7 @@ fn wantErrorReturnTracing(sema: *Sema) bool {
1811218112fn zirSaveErrRetIndex(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
1811318113 const pt = sema.pt;
1811418114 const zcu = pt.zcu;
18115 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].save_err_ret_index;
18115 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].save_err_ret_index;
1811618116
1811718117 if (!block.ownerModule().error_tracing) return;
1811818118
......@@ -18306,7 +18306,7 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1830618306 const io = comp.io;
1830718307 const ip = &zcu.intern_pool;
1830818308
18309 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].ptr_type;
18309 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].ptr_type;
1831018310 const extra = sema.code.extraData(Zir.Inst.PtrType, inst_data.payload_index);
1831118311 const elem_ty_src = block.src(.{ .node_offset_ptr_elem = extra.data.src_node });
1831218312 const sentinel_src = block.src(.{ .node_offset_ptr_sentinel = extra.data.src_node });
......@@ -18335,7 +18335,7 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1833518335 var extra_i = extra.end;
1833618336
1833718337 const sentinel = if (inst_data.flags.has_sentinel) blk: {
18338 const ref: Zir.Inst.Ref = @enumFromInt(sema.code.extra[extra_i]);
18338 const ref: Zir.Inst.Ref = @fromBackingInt(@intCast(sema.code.extra[extra_i]));
1833918339 extra_i += 1;
1834018340 const coerced = try sema.coerce(block, elem_ty, sema.resolveInst(ref), sentinel_src);
1834118341 const val = try sema.resolveConstDefinedValue(block, sentinel_src, coerced, .{ .simple = .pointer_sentinel });
......@@ -18348,7 +18348,7 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1834818348 } else .none;
1834918349
1835018350 const abi_align: Alignment = if (inst_data.flags.has_align) blk: {
18351 const ref: Zir.Inst.Ref = @enumFromInt(sema.code.extra[extra_i]);
18351 const ref: Zir.Inst.Ref = @fromBackingInt(@intCast(sema.code.extra[extra_i]));
1835218352 extra_i += 1;
1835318353 const coerced = try sema.coerce(block, align_ty, sema.resolveInst(ref), align_src);
1835418354 const val = try sema.resolveConstDefinedValue(block, align_src, coerced, .{ .simple = .@"align" });
......@@ -18357,20 +18357,20 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1835718357 } else .none;
1835818358
1835918359 const address_space: std.lang.AddressSpace = if (inst_data.flags.has_addrspace) blk: {
18360 const ref: Zir.Inst.Ref = @enumFromInt(sema.code.extra[extra_i]);
18360 const ref: Zir.Inst.Ref = @fromBackingInt(@intCast(sema.code.extra[extra_i]));
1836118361 extra_i += 1;
1836218362 break :blk try sema.resolveAddressSpace(block, addrspace_src, ref, .pointer);
1836318363 } else if (elem_ty.zigTypeTag(zcu) == .@"fn" and target.cpu.arch == .avr) .flash else .generic;
1836418364
1836518365 const bit_offset: u16 = if (inst_data.flags.has_bit_range) blk: {
18366 const ref: Zir.Inst.Ref = @enumFromInt(sema.code.extra[extra_i]);
18366 const ref: Zir.Inst.Ref = @fromBackingInt(@intCast(sema.code.extra[extra_i]));
1836718367 extra_i += 1;
1836818368 const bit_offset = try sema.resolveInt(block, bitoffset_src, ref, .u16, .{ .simple = .type });
1836918369 break :blk @intCast(bit_offset);
1837018370 } else 0;
1837118371
1837218372 const host_size: u16 = if (inst_data.flags.has_bit_range) blk: {
18373 const ref: Zir.Inst.Ref = @enumFromInt(sema.code.extra[extra_i]);
18373 const ref: Zir.Inst.Ref = @fromBackingInt(@intCast(sema.code.extra[extra_i]));
1837418374 extra_i += 1;
1837518375 const host_size = try sema.resolveInt(block, hostsize_src, ref, .u16, .{ .simple = .type });
1837618376 break :blk @intCast(host_size);
......@@ -18425,7 +18425,7 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1842518425}
1842618426
1842718427fn zirStructInitEmpty(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
18428 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
18428 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1842918429 const src = block.nodeOffset(inst_data.src_node);
1843018430 const ty_src = block.src(.{ .node_offset_init_ty = inst_data.src_node });
1843118431 const obj_ty = try sema.resolveType(block, ty_src, inst_data.operand);
......@@ -18445,7 +18445,7 @@ fn zirStructInitEmpty(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileE
1844518445fn zirStructInitEmptyResult(sema: *Sema, block: *Block, inst: Zir.Inst.Index, is_byref: bool) CompileError!Air.Inst.Ref {
1844618446 const pt = sema.pt;
1844718447 const zcu = pt.zcu;
18448 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
18448 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1844918449 const src = block.nodeOffset(inst_data.src_node);
1845018450
1845118451 // Generic poison means this is an untyped anonymous empty struct/array init
......@@ -18557,7 +18557,7 @@ fn zirUnionInit(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
1855718557 const pt = sema.pt;
1855818558 const zcu = pt.zcu;
1855918559 const ip = &zcu.intern_pool;
18560 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
18560 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1856118561 const ty_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1856218562 const field_src = block.builtinCallArgSrc(inst_data.src_node, 1);
1856318563 const payload_src = block.builtinCallArgSrc(inst_data.src_node, 2);
......@@ -18601,12 +18601,12 @@ fn zirStructInit(
1860118601 const ip = &zcu.intern_pool;
1860218602
1860318603 const zir_datas = sema.code.instructions.items(.data);
18604 const inst_data = zir_datas[@intFromEnum(inst)].pl_node;
18604 const inst_data = zir_datas[@backingInt(inst)].pl_node;
1860518605 const extra = sema.code.extraData(Zir.Inst.StructInit, inst_data.payload_index);
1860618606 const src = block.nodeOffset(inst_data.src_node);
1860718607
1860818608 const first_item = sema.code.extraData(Zir.Inst.StructInit.Item, extra.end).data;
18609 const first_field_type_data = zir_datas[@intFromEnum(first_item.field_type)].pl_node;
18609 const first_field_type_data = zir_datas[@backingInt(first_item.field_type)].pl_node;
1861018610 const first_field_type_extra = sema.code.extraData(Zir.Inst.FieldType, first_field_type_data.payload_index).data;
1861118611 const result_ty = try sema.resolveTypeOrPoison(block, src, first_field_type_extra.container_type) orelse {
1861218612 // The type wasn't actually known, so treat this as an anon struct init.
......@@ -18640,7 +18640,7 @@ fn zirStructInit(
1864018640 const item = sema.code.extraData(Zir.Inst.StructInit.Item, extra_index);
1864118641 extra_index = item.end;
1864218642
18643 const field_type_data = zir_datas[@intFromEnum(item.data.field_type)].pl_node;
18643 const field_type_data = zir_datas[@backingInt(item.data.field_type)].pl_node;
1864418644 const field_src = block.src(.{ .node_offset_initializer = field_type_data.src_node });
1864518645 const field_type_extra = sema.code.extraData(Zir.Inst.FieldType, field_type_data.payload_index).data;
1864618646 const field_name = try ip.getOrPutString(
......@@ -18679,7 +18679,7 @@ fn zirStructInit(
1867918679
1868018680 const item = sema.code.extraData(Zir.Inst.StructInit.Item, extra.end);
1868118681
18682 const field_type_data = zir_datas[@intFromEnum(item.data.field_type)].pl_node;
18682 const field_type_data = zir_datas[@backingInt(item.data.field_type)].pl_node;
1868318683 const field_src = block.src(.{ .node_offset_initializer = field_type_data.src_node });
1868418684 const field_type_extra = sema.code.extraData(Zir.Inst.FieldType, field_type_data.payload_index).data;
1868518685 const field_name = try ip.getOrPutString(
......@@ -18933,7 +18933,7 @@ fn zirStructInitAnon(
1893318933 block: *Block,
1893418934 inst: Zir.Inst.Index,
1893518935) CompileError!Air.Inst.Ref {
18936 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
18936 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1893718937 const src = block.nodeOffset(inst_data.src_node);
1893818938 const extra = sema.code.extraData(Zir.Inst.StructInitAnon, inst_data.payload_index);
1893918939 return sema.structInitAnon(block, src, inst, .anon_init, extra.data, extra.end, false);
......@@ -18984,7 +18984,7 @@ fn structInitAnon(
1898418984 .anon_init => sema.code.nullTerminatedString(item.data.field_name),
1898518985 .typed_init => name: {
1898618986 // `item.data.field_type` references a `field_type` instruction
18987 const field_type_data = zir_datas[@intFromEnum(item.data.field_type)].pl_node;
18987 const field_type_data = zir_datas[@backingInt(item.data.field_type)].pl_node;
1898818988 const field_type_extra = sema.code.extraData(Zir.Inst.FieldType, field_type_data.payload_index);
1898918989 break :name sema.code.nullTerminatedString(field_type_extra.data.name_start);
1899018990 },
......@@ -19155,7 +19155,7 @@ fn zirArrayInit(
1915519155 const pt = sema.pt;
1915619156 const zcu = pt.zcu;
1915719157 const gpa = sema.gpa;
19158 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
19158 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1915919159 const src = block.nodeOffset(inst_data.src_node);
1916019160
1916119161 const extra = sema.code.extraData(Zir.Inst.MultiOp, inst_data.payload_index);
......@@ -19286,7 +19286,7 @@ fn zirArrayInitAnon(
1928619286 block: *Block,
1928719287 inst: Zir.Inst.Index,
1928819288) CompileError!Air.Inst.Ref {
19289 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
19289 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1929019290 const src = block.nodeOffset(inst_data.src_node);
1929119291 const extra = sema.code.extraData(Zir.Inst.MultiOp, inst_data.payload_index);
1929219292 const operands = sema.code.refSlice(extra.end, extra.data.operands_len);
......@@ -19406,7 +19406,7 @@ fn addConstantMaybeRef(sema: *Sema, val: Value, is_ref: bool) !Air.Inst.Ref {
1940619406}
1940719407
1940819408fn zirFieldTypeRef(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
19409 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
19409 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1941019410 const extra = sema.code.extraData(Zir.Inst.FieldTypeRef, inst_data.payload_index).data;
1941119411 const ty_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1941219412 const field_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -19424,7 +19424,7 @@ fn zirStructInitFieldType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Comp
1942419424 const io = comp.io;
1942519425 const ip = &zcu.intern_pool;
1942619426
19427 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
19427 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1942819428 const extra = sema.code.extraData(Zir.Inst.FieldType, inst_data.payload_index).data;
1942919429 const ty_src = block.nodeOffset(inst_data.src_node);
1943019430 const field_name_src = block.src(.{ .node_offset_field_name_init = inst_data.src_node });
......@@ -19528,7 +19528,7 @@ fn zirFrame(
1952819528 block: *Block,
1952919529 extended: Zir.Inst.Extended.InstData,
1953019530) CompileError!Air.Inst.Ref {
19531 const src_node: std.zig.Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(extended.operand)));
19531 const src_node: std.zig.Ast.Node.Offset = @fromBackingInt(@intCast(@as(i32, @bitCast(extended.operand))));
1953219532 const src = block.nodeOffset(src_node);
1953319533 return sema.failWithUseOfAsync(block, src);
1953419534}
......@@ -19536,7 +19536,7 @@ fn zirFrame(
1953619536fn zirAlignOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1953719537 const pt = sema.pt;
1953819538 const zcu = pt.zcu;
19539 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
19539 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1954019540 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1954119541 const ty = try sema.resolveType(block, operand_src, inst_data.operand);
1954219542 try sema.ensureLayoutResolved(ty, operand_src, .align_of);
......@@ -19549,7 +19549,7 @@ fn zirAlignOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1954919549fn zirIntFromBool(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1955019550 const pt = sema.pt;
1955119551 const zcu = pt.zcu;
19552 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
19552 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1955319553 const src = block.nodeOffset(inst_data.src_node);
1955419554 const operand = sema.resolveInst(inst_data.operand);
1955519555 const operand_ty = sema.typeOf(operand);
......@@ -19581,7 +19581,7 @@ fn zirIntFromBool(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
1958119581}
1958219582
1958319583fn zirErrorName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
19584 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
19584 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1958519585 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1958619586 const uncoerced_operand = sema.resolveInst(inst_data.operand);
1958719587 const operand = try sema.coerce(block, .anyerror, uncoerced_operand, operand_src);
......@@ -19603,7 +19603,7 @@ fn zirAbs(
1960319603) CompileError!Air.Inst.Ref {
1960419604 const pt = sema.pt;
1960519605 const zcu = pt.zcu;
19606 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
19606 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1960719607 const operand = sema.resolveInst(inst_data.operand);
1960819608 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1960919609 const operand_ty = sema.typeOf(operand);
......@@ -19694,7 +19694,7 @@ fn zirUnaryMath(
1969419694 air_tag: Air.Inst.Tag,
1969519695 comptime eval: fn (Value, Type, Allocator, Zcu.PerThread) Allocator.Error!Value,
1969619696) CompileError!Air.Inst.Ref {
19697 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
19697 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1969819698 const operand = sema.resolveInst(inst_data.operand);
1969919699 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1970019700
......@@ -19702,7 +19702,7 @@ fn zirUnaryMath(
1970219702}
1970319703
1970419704fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
19705 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
19705 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
1970619706 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1970719707 const src = block.nodeOffset(inst_data.src_node);
1970819708 const operand = sema.resolveInst(inst_data.operand);
......@@ -19752,7 +19752,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1975219752}
1975319753
1975419754fn zirReifyInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
19755 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
19755 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
1975619756 const signedness_src = block.builtinCallArgSrc(inst_data.src_node, 0);
1975719757 const bits_src = block.builtinCallArgSrc(inst_data.src_node, 1);
1975819758 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
......@@ -19773,7 +19773,7 @@ fn zirReifySliceArgTy(
1977319773 const zcu = pt.zcu;
1977419774
1977519775 const extra = sema.code.extraData(Zir.Inst.UnNode, extended.operand).data;
19776 const info: Zir.Inst.ReifySliceArgInfo = @enumFromInt(extended.small);
19776 const info: Zir.Inst.ReifySliceArgInfo = @fromBackingInt(@intCast(extended.small));
1977719777
1977819778 const src = block.nodeOffset(extra.node);
1977919779
......@@ -20090,7 +20090,7 @@ fn zirReifyStruct(
2009020090 const io = comp.io;
2009120091 const ip = &zcu.intern_pool;
2009220092
20093 const name_strategy: Zir.Inst.NameStrategy = @enumFromInt(extended.small);
20093 const name_strategy: Zir.Inst.NameStrategy = @fromBackingInt(@intCast(extended.small));
2009420094 const extra = sema.code.extraData(Zir.Inst.ReifyStruct, extended.operand).data;
2009520095 const tracked_inst = try block.trackZir(inst);
2009620096
......@@ -20371,7 +20371,7 @@ fn zirReifyUnion(
2037120371 const io = comp.io;
2037220372 const ip = &zcu.intern_pool;
2037320373
20374 const name_strategy: Zir.Inst.NameStrategy = @enumFromInt(extended.small);
20374 const name_strategy: Zir.Inst.NameStrategy = @fromBackingInt(@intCast(extended.small));
2037520375 const extra = sema.code.extraData(Zir.Inst.ReifyUnion, extended.operand).data;
2037620376 const tracked_inst = try block.trackZir(inst);
2037720377 const src: LazySrcLoc = .{
......@@ -20592,7 +20592,7 @@ fn zirReifyEnum(
2059220592 const io = comp.io;
2059320593 const ip = &zcu.intern_pool;
2059420594
20595 const name_strategy: Zir.Inst.NameStrategy = @enumFromInt(extended.small);
20595 const name_strategy: Zir.Inst.NameStrategy = @fromBackingInt(@intCast(extended.small));
2059620596 const extra = sema.code.extraData(Zir.Inst.ReifyEnum, extended.operand).data;
2059720597 const tracked_inst = try block.trackZir(inst);
2059820598 const src: LazySrcLoc = .{
......@@ -21053,7 +21053,7 @@ fn zirCVaEnd(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) C
2105321053}
2105421054
2105521055fn zirCVaStart(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) CompileError!Air.Inst.Ref {
21056 const src_node: std.zig.Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(extended.operand)));
21056 const src_node: std.zig.Ast.Node.Offset = @fromBackingInt(@intCast(@as(i32, @bitCast(extended.operand))));
2105721057 const src = block.nodeOffset(src_node);
2105821058
2105921059 const va_list_ty = try sema.getStdLangType(src, .VaList);
......@@ -21072,7 +21072,7 @@ fn zirTypeName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
2107221072 const io = comp.io;
2107321073 const ip = &zcu.intern_pool;
2107421074
21075 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
21075 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
2107621076 const ty_src = block.builtinCallArgSrc(inst_data.src_node, 0);
2107721077 const ty = try sema.resolveType(block, ty_src, inst_data.operand);
2107821078
......@@ -21081,7 +21081,7 @@ fn zirTypeName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
2108121081}
2108221082
2108321083fn zirFrameType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
21084 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
21084 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
2108521085 const src = block.nodeOffset(inst_data.src_node);
2108621086 return sema.failWithUseOfAsync(block, src);
2108721087}
......@@ -21089,7 +21089,7 @@ fn zirFrameType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
2108921089fn zirIntFromFloat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
2109021090 const pt = sema.pt;
2109121091 const zcu = pt.zcu;
21092 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
21092 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2109321093 const src = block.nodeOffset(inst_data.src_node);
2109421094 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
2109521095 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
......@@ -21152,7 +21152,7 @@ fn zirRoundCast(
2115221152
2115321153 const operand = sema.resolveInst(extra.rhs);
2115421154
21155 const round_op: Zir.Inst.RoundOp = @enumFromInt(extended.small);
21155 const round_op: Zir.Inst.RoundOp = @fromBackingInt(@intCast(extended.small));
2115621156 const mode: IntFromFloatMode = switch (round_op) {
2115721157 .round => .round,
2115821158 .floor => .floor,
......@@ -21266,7 +21266,7 @@ fn zirRoundCast(
2126621266fn zirFloatFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
2126721267 const pt = sema.pt;
2126821268 const zcu = pt.zcu;
21269 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
21269 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2127021270 const src = block.nodeOffset(inst_data.src_node);
2127121271 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
2127221272 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
......@@ -21308,7 +21308,7 @@ fn zirFloatFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErro
2130821308fn zirPtrFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
2130921309 const pt = sema.pt;
2131021310 const zcu = pt.zcu;
21311 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
21311 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2131221312 const src = block.nodeOffset(inst_data.src_node);
2131321313
2131421314 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
......@@ -21635,7 +21635,7 @@ fn zirPtrCastFull(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstDa
2163521635}
2163621636
2163721637fn zirPtrCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
21638 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
21638 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2163921639 const src = block.nodeOffset(inst_data.src_node);
2164021640 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
2164121641 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
......@@ -22336,7 +22336,7 @@ fn zirPtrCastNoDest(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.Inst
2233622336fn zirTruncate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
2233722337 const pt = sema.pt;
2233822338 const zcu = pt.zcu;
22339 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
22339 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2234022340 const src = block.nodeOffset(inst_data.src_node);
2234122341 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
2234222342 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
......@@ -22391,7 +22391,7 @@ fn zirBitCount(
2239122391) CompileError!Air.Inst.Ref {
2239222392 const pt = sema.pt;
2239322393 const zcu = pt.zcu;
22394 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
22394 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
2239522395 const src = block.nodeOffset(inst_data.src_node);
2239622396 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
2239722397 const operand = sema.resolveInst(inst_data.operand);
......@@ -22439,7 +22439,7 @@ fn zirBitCount(
2243922439fn zirByteSwap(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
2244022440 const pt = sema.pt;
2244122441 const zcu = pt.zcu;
22442 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
22442 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
2244322443 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
2244422444 const operand = sema.resolveInst(inst_data.operand);
2244522445 const operand_ty = sema.typeOf(operand);
......@@ -22460,7 +22460,7 @@ fn zirByteSwap(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
2246022460}
2246122461
2246222462fn zirBitReverse(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
22463 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
22463 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
2246422464 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 0);
2246522465 const operand = sema.resolveInst(inst_data.operand);
2246622466 const operand_ty = sema.typeOf(operand);
......@@ -22484,7 +22484,7 @@ fn zirOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
2248422484}
2248522485
2248622486fn bitOffsetOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!u64 {
22487 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
22487 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2248822488 const src = block.src(.{ .node_offset_bin_op = inst_data.src_node });
2248922489 const ty_src = block.builtinCallArgSrc(inst_data.src_node, 0);
2249022490 const field_name_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -23099,13 +23099,13 @@ fn zirCmpxchg(
2309923099 const success_order = try sema.resolveAtomicOrder(block, success_order_src, extra.success_order, .{ .simple = .atomic_order });
2310023100 const failure_order = try sema.resolveAtomicOrder(block, failure_order_src, extra.failure_order, .{ .simple = .atomic_order });
2310123101
23102 if (@intFromEnum(success_order) < @intFromEnum(std.lang.AtomicOrder.monotonic)) {
23102 if (@backingInt(success_order) < @backingInt(std.lang.AtomicOrder.monotonic)) {
2310323103 return sema.fail(block, success_order_src, "success atomic ordering must be monotonic or stricter", .{});
2310423104 }
23105 if (@intFromEnum(failure_order) < @intFromEnum(std.lang.AtomicOrder.monotonic)) {
23105 if (@backingInt(failure_order) < @backingInt(std.lang.AtomicOrder.monotonic)) {
2310623106 return sema.fail(block, failure_order_src, "failure atomic ordering must be monotonic or stricter", .{});
2310723107 }
23108 if (@intFromEnum(failure_order) > @intFromEnum(success_order)) {
23108 if (@backingInt(failure_order) > @backingInt(success_order)) {
2310923109 return sema.fail(block, failure_order_src, "failure atomic ordering must be no stricter than success", .{});
2311023110 }
2311123111 if (failure_order == .release or failure_order == .acq_rel) {
......@@ -23141,8 +23141,8 @@ fn zirCmpxchg(
2314123141 } else break :rs expected_src;
2314223142 } else ptr_src;
2314323143
23144 const flags: u32 = @as(u32, @intFromEnum(success_order)) |
23145 (@as(u32, @intFromEnum(failure_order)) << 3);
23144 const flags: u32 = @as(u32, @backingInt(success_order)) |
23145 (@as(u32, @backingInt(failure_order)) << 3);
2314623146
2314723147 try sema.requireRuntimeBlock(block, src, runtime_src);
2314823148 return block.addInst(.{
......@@ -23162,7 +23162,7 @@ fn zirCmpxchg(
2316223162fn zirSplat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
2316323163 const pt = sema.pt;
2316423164 const zcu = pt.zcu;
23165 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
23165 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2316623166 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
2316723167 const src = block.nodeOffset(inst_data.src_node);
2316823168 const scalar_src = block.builtinCallArgSrc(inst_data.src_node, 0);
......@@ -23214,7 +23214,7 @@ fn zirSplat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.I
2321423214}
2321523215
2321623216fn zirReduce(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
23217 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
23217 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2321823218 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
2321923219 const op_src = block.builtinCallArgSrc(inst_data.src_node, 0);
2322023220 const operand_src = block.builtinCallArgSrc(inst_data.src_node, 1);
......@@ -23282,7 +23282,7 @@ fn zirReduce(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
2328223282fn zirShuffle(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
2328323283 const pt = sema.pt;
2328423284 const zcu = pt.zcu;
23285 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
23285 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2328623286 const extra = sema.code.extraData(Zir.Inst.Shuffle, inst_data.payload_index).data;
2328723287 const elem_ty_src = block.builtinCallArgSrc(inst_data.src_node, 0);
2328823288 const mask_src = block.builtinCallArgSrc(inst_data.src_node, 3);
......@@ -23564,7 +23564,7 @@ fn zirSelect(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData) C
2356423564}
2356523565
2356623566fn zirAtomicLoad(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
23567 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
23567 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2356823568 const extra = sema.code.extraData(Zir.Inst.AtomicLoad, inst_data.payload_index).data;
2356923569 // zig fmt: off
2357023570 const elem_ty_src = block.builtinCallArgSrc(inst_data.src_node, 0);
......@@ -23611,7 +23611,7 @@ fn zirAtomicLoad(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!
2361123611fn zirAtomicRmw(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
2361223612 const pt = sema.pt;
2361323613 const zcu = pt.zcu;
23614 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
23614 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2361523615 const extra = sema.code.extraData(Zir.Inst.AtomicRmw, inst_data.payload_index).data;
2361623616 const src = block.nodeOffset(inst_data.src_node);
2361723617 // zig fmt: off
......@@ -23676,7 +23676,7 @@ fn zirAtomicRmw(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
2367623676 } else break :rs ptr_src;
2367723677 } else ptr_src;
2367823678
23679 const flags: u32 = @as(u32, @intFromEnum(order)) | (@as(u32, @intFromEnum(op)) << 3);
23679 const flags: u32 = @as(u32, @backingInt(order)) | (@as(u32, @backingInt(op)) << 3);
2368023680
2368123681 try sema.requireRuntimeBlock(block, src, runtime_src);
2368223682 return block.addInst(.{
......@@ -23692,7 +23692,7 @@ fn zirAtomicRmw(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
2369223692}
2369323693
2369423694fn zirAtomicStore(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void {
23695 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
23695 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2369623696 const extra = sema.code.extraData(Zir.Inst.AtomicStore, inst_data.payload_index).data;
2369723697 const src = block.nodeOffset(inst_data.src_node);
2369823698 // zig fmt: off
......@@ -23726,7 +23726,7 @@ fn zirAtomicStore(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
2372623726}
2372723727
2372823728fn zirMulAdd(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
23729 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
23729 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2373023730 const extra = sema.code.extraData(Zir.Inst.MulAdd, inst_data.payload_index).data;
2373123731 const src = block.nodeOffset(inst_data.src_node);
2373223732
......@@ -23793,7 +23793,7 @@ fn zirMulAdd(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
2379323793fn zirBuiltinCall(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
2379423794 const pt = sema.pt;
2379523795 const zcu = pt.zcu;
23796 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
23796 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2379723797 const modifier_src = block.builtinCallArgSrc(inst_data.src_node, 0);
2379823798 const func_src = block.builtinCallArgSrc(inst_data.src_node, 1);
2379923799 const args_src = block.builtinCallArgSrc(inst_data.src_node, 2);
......@@ -24081,7 +24081,7 @@ fn zirMinMax(
2408124081 inst: Zir.Inst.Index,
2408224082 comptime air_tag: Air.Inst.Tag,
2408324083) CompileError!Air.Inst.Ref {
24084 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
24084 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2408524085 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
2408624086 const src = block.nodeOffset(inst_data.src_node);
2408724087 const lhs_src = block.builtinCallArgSrc(inst_data.src_node, 0);
......@@ -24262,10 +24262,10 @@ fn analyzeMinMax(
2426224262 },
2426324263 else => unreachable,
2426424264 };
24265 if (@intFromEnum(want_strat) < @intFromEnum(cur_strat)) {
24265 if (@backingInt(want_strat) < @backingInt(cur_strat)) {
2426624266 // `want_strat` overrides `cur_strat`.
2426724267 cur_strat = want_strat;
24268 } else if (@intFromEnum(want_strat) == @intFromEnum(cur_strat)) {
24268 } else if (@backingInt(want_strat) == @backingInt(cur_strat)) {
2426924269 // The behavior depends on the tag.
2427024270 switch (cur_strat) {
2427124271 .none, .comptime_float => {}, // no payload, so nop
......@@ -24470,7 +24470,7 @@ fn zirMemcpy(
2447024470 air_tag: Air.Inst.Tag,
2447124471 check_aliasing: bool,
2447224472) CompileError!void {
24473 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
24473 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2447424474 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
2447524475 const src = block.nodeOffset(inst_data.src_node);
2447624476 const dest_src = block.builtinCallArgSrc(inst_data.src_node, 0);
......@@ -24734,7 +24734,7 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
2473424734 const io = comp.io;
2473524735 const ip = &zcu.intern_pool;
2473624736
24737 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
24737 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2473824738 const extra = sema.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
2473924739 const src = block.nodeOffset(inst_data.src_node);
2474024740 const dest_src = block.builtinCallArgSrc(inst_data.src_node, 0);
......@@ -24830,7 +24830,7 @@ fn zirMemset(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void
2483024830}
2483124831
2483224832fn zirResume(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
24833 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
24833 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].un_node;
2483424834 const src = block.nodeOffset(inst_data.src_node);
2483524835 return sema.failWithUseOfAsync(block, src);
2483624836}
......@@ -24843,7 +24843,7 @@ fn zirFuncFancy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
2484324843 const io = comp.io;
2484424844 const ip = &zcu.intern_pool;
2484524845
24846 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
24846 const inst_data = sema.code.instructions.items(.data)[@backingInt(inst)].pl_node;
2484724847 const extra = sema.code.extraData(Zir.Inst.FuncFancy, inst_data.payload_index);
2484824848 const target = zcu.getTarget();
2484924849
......@@ -24863,7 +24863,7 @@ fn zirFuncFancy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
2486324863 const val = try sema.resolveGenericBody(block, cc_src, body, inst, cc_ty, .{ .simple = .@"callconv" });
2486424864 break :blk try sema.analyzeValueAsCallconv(block, cc_src, val);
2486524865 } else if (extra.data.bits.has_cc_ref) blk: {
24866 const cc_ref: Zir.Inst.Ref = @enumFromInt(sema.code.extra[extra_index]);
24866 const cc_ref: Zir.Inst.Ref = @fromBackingInt(@intCast(sema.code.extra[extra_index]));
2486724867 extra_index += 1;
2486824868 const cc_ty = try sema.getStdLangType(cc_src, .CallingConvention);
2486924869 const uncoerced_cc = sema.resolveInst(cc_ref);
......@@ -24907,7 +24907,7 @@ fn zirFuncFancy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
2490724907 const ty = val.toType();
2490824908 break :blk ty;
2490924909 } else if (extra.data.bits.has_ret_ty_ref) blk: {
24910 const ret_ty_ref: Zir.Inst.Ref = @enumFromInt(sema.code.extra[extra_index]);
24910 const ret_ty_ref: Zir.Inst.Ref = @fromBackingInt(@intCast(sema.code.extra[extra_index]));
2491124911 extra_index += 1;
2491224912 if (extra.data.bits.ret_ty_is_generic) break :blk .generic_poison;
2491324913
......@@ -25330,9 +25330,9 @@ fn zirStdLangValue(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstD
2533025330 const io = comp.io;
2533125331 const ip = &zcu.intern_pool;
2533225332
25333 const src_node: std.zig.Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(extended.operand)));
25333 const src_node: std.zig.Ast.Node.Offset = @fromBackingInt(@intCast(@as(i32, @bitCast(extended.operand))));
2533425334 const src = block.nodeOffset(src_node);
25335 const value: Zir.Inst.StdLangValue = @enumFromInt(extended.small);
25335 const value: Zir.Inst.StdLangValue = @fromBackingInt(@intCast(extended.small));
2533625336
2533725337 const std_lang_type: Zcu.StdLangDecl = switch (value) {
2533825338 // zig fmt: off
......@@ -25387,10 +25387,10 @@ fn zirInplaceArithResultTy(sema: *Sema, extended: Zir.Inst.Extended.InstData) Co
2538725387 const pt = sema.pt;
2538825388 const zcu = pt.zcu;
2538925389
25390 const lhs = sema.resolveInst(@enumFromInt(extended.operand));
25390 const lhs = sema.resolveInst(@fromBackingInt(@intCast(extended.operand)));
2539125391 const lhs_ty = sema.typeOf(lhs);
2539225392
25393 const op: Zir.Inst.InplaceOp = @enumFromInt(extended.small);
25393 const op: Zir.Inst.InplaceOp = @fromBackingInt(@intCast(extended.small));
2539425394 const ty: Type = switch (op) {
2539525395 .add_eq => ty: {
2539625396 const ptr_size = lhs_ty.ptrSizeOrNull(zcu) orelse break :ty lhs_ty;
......@@ -25840,9 +25840,9 @@ fn addSafetyCheckExtra(
2584025840 fail_block.instructions.items.len);
2584125841
2584225842 try sema.air_instructions.ensureUnusedCapacity(gpa, 3);
25843 const block_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
25844 const cond_br_inst: Air.Inst.Index = @enumFromInt(@intFromEnum(block_inst) + 1);
25845 const br_inst: Air.Inst.Index = @enumFromInt(@intFromEnum(cond_br_inst) + 1);
25843 const block_inst: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
25844 const cond_br_inst: Air.Inst.Index = @fromBackingInt(@intCast(@backingInt(block_inst) + 1));
25845 const br_inst: Air.Inst.Index = @fromBackingInt(@intCast(@backingInt(cond_br_inst) + 1));
2584625846 sema.air_instructions.appendAssumeCapacity(.{
2584725847 .tag = .block,
2584825848 .data = .{ .ty_pl = .{
......@@ -25852,7 +25852,7 @@ fn addSafetyCheckExtra(
2585225852 }),
2585325853 } },
2585425854 });
25855 sema.air_extra.appendAssumeCapacity(@intFromEnum(cond_br_inst));
25855 sema.air_extra.appendAssumeCapacity(@backingInt(cond_br_inst));
2585625856
2585725857 sema.air_instructions.appendAssumeCapacity(.{
2585825858 .tag = .cond_br,
......@@ -25874,7 +25874,7 @@ fn addSafetyCheckExtra(
2587425874 },
2587525875 },
2587625876 });
25877 sema.air_extra.appendAssumeCapacity(@intFromEnum(br_inst));
25877 sema.air_extra.appendAssumeCapacity(@backingInt(br_inst));
2587825878 sema.air_extra.appendSliceAssumeCapacity(@ptrCast(fail_block.instructions.items));
2587925879
2588025880 sema.air_instructions.appendAssumeCapacity(.{
......@@ -26313,8 +26313,8 @@ fn analyzeSpirvRuntimeArrayLen(
2631326313
2631426314 const struct_operand: Air.Inst.Ref, const field_index: u32 = sf: {
2631526315 if (runtime_array_ptr.toIndex()) |inst| {
26316 const tag = sema.air_instructions.items(.tag)[@intFromEnum(inst)];
26317 const data = sema.air_instructions.items(.data)[@intFromEnum(inst)];
26316 const tag = sema.air_instructions.items(.tag)[@backingInt(inst)];
26317 const data = sema.air_instructions.items(.data)[@backingInt(inst)];
2631826318 switch (tag) {
2631926319 .struct_field_ptr => {
2632026320 const extra = sema.getTmpAir().extraData(Air.StructField, data.ty_pl.payload).data;
......@@ -27592,7 +27592,7 @@ fn elemPtrVector(
2759227592 .is_volatile = vector_ptr_info.flags.is_volatile,
2759327593 .is_allowzero = vector_ptr_info.flags.is_allowzero,
2759427594 .address_space = vector_ptr_info.flags.address_space,
27595 .vector_index = @enumFromInt(index),
27595 .vector_index = @fromBackingInt(@intCast(index)),
2759627596 },
2759727597 .packed_offset = .{
2759827598 .host_size = @intCast(vector_len),
......@@ -29754,7 +29754,7 @@ fn storePtr2(
2975429754/// Handles calling `validateRuntimeValue` if the store is runtime for any reason.
2975529755fn checkComptimeKnownStore(sema: *Sema, block: *Block, store_inst_ref: Air.Inst.Ref, store_src: LazySrcLoc) !void {
2975629756 const store_inst = store_inst_ref.toIndex().?;
29757 const inst_data = sema.air_instructions.items(.data)[@intFromEnum(store_inst)].bin_op;
29757 const inst_data = sema.air_instructions.items(.data)[@backingInt(store_inst)].bin_op;
2975829758 const ptr = inst_data.lhs.toIndex() orelse return;
2975929759 const operand = inst_data.rhs;
2976029760
......@@ -29788,7 +29788,7 @@ fn checkKnownAllocPtr(sema: *Sema, block: *Block, base_ptr: Air.Inst.Ref, new_pt
2978829788 const alloc_inst = sema.base_allocs.get(base_ptr_inst) orelse return;
2978929789 try sema.base_allocs.put(sema.gpa, new_ptr_inst, alloc_inst);
2979029790
29791 switch (sema.air_instructions.items(.tag)[@intFromEnum(new_ptr_inst)]) {
29791 switch (sema.air_instructions.items(.tag)[@backingInt(new_ptr_inst)]) {
2979229792 .optional_payload_ptr_set, .errunion_payload_ptr_set => {
2979329793 const maybe_comptime_alloc = sema.maybe_comptime_allocs.getPtr(alloc_inst) orelse return;
2979429794
......@@ -29805,7 +29805,7 @@ fn checkKnownAllocPtr(sema: *Sema, block: *Block, base_ptr: Air.Inst.Ref, new_pt
2980529805 },
2980629806 .ptr_elem_ptr => {
2980729807 const tmp_air = sema.getTmpAir();
29808 const pl_idx = tmp_air.instructions.items(.data)[@intFromEnum(new_ptr_inst)].ty_pl.payload;
29808 const pl_idx = tmp_air.instructions.items(.data)[@backingInt(new_ptr_inst)].ty_pl.payload;
2980929809 const bin = tmp_air.extraData(Air.Bin, pl_idx).data;
2981029810 const index_ref = bin.rhs;
2981129811
......@@ -29826,12 +29826,12 @@ fn markMaybeComptimeAllocRuntime(sema: *Sema, block: *Block, alloc_inst: Air.Ins
2982629826 const slice = maybe_comptime_alloc.stores.slice();
2982729827 for (slice.items(.inst), slice.items(.src)) |other_inst, other_src| {
2982829828 if (other_src.offset == .unneeded) {
29829 switch (sema.air_instructions.items(.tag)[@intFromEnum(other_inst)]) {
29829 switch (sema.air_instructions.items(.tag)[@backingInt(other_inst)]) {
2983029830 .set_union_tag, .optional_payload_ptr_set, .errunion_payload_ptr_set => continue,
2983129831 else => unreachable, // assertion failure
2983229832 }
2983329833 }
29834 const other_data = sema.air_instructions.items(.data)[@intFromEnum(other_inst)].bin_op;
29834 const other_data = sema.air_instructions.items(.data)[@backingInt(other_inst)].bin_op;
2983529835 const other_operand = other_data.rhs;
2983629836 try sema.validateRuntimeValue(block, other_src, other_operand);
2983729837 }
......@@ -32174,7 +32174,7 @@ const PeerResolveStrategy = enum {
3217432174 // Our merging should be order-independent. Thus, even though the union order is arbitrary,
3217532175 // by sorting the tags and switching first on the smaller, we have half as many cases to
3217632176 // worry about (since we avoid the duplicates).
32177 const s0_is_a = @intFromEnum(a) <= @intFromEnum(b);
32177 const s0_is_a = @backingInt(a) <= @backingInt(b);
3217832178 const s0 = if (s0_is_a) a else b;
3217932179 const s1 = if (s0_is_a) b else a;
3218032180
......@@ -33839,7 +33839,7 @@ fn payloadToExtraItems(data: anytype) [@typeInfo(@TypeOf(data)).@"struct".field_
3383933839 val.* = switch (field_type) {
3384033840 u32 => @field(data, field_name),
3384133841 i32, Air.CondBr.BranchHints, Air.Asm.Flags => @bitCast(@field(data, field_name)),
33842 Air.Inst.Ref, InternPool.Index => @intFromEnum(@field(data, field_name)),
33842 Air.Inst.Ref, InternPool.Index => @backingInt(@field(data, field_name)),
3384333843 else => @compileError("bad field type: " ++ @typeName(field_type)),
3384433844 };
3384533845 }
......@@ -33853,8 +33853,8 @@ fn appendRefsAssumeCapacity(sema: *Sema, refs: []const Air.Inst.Ref) void {
3385333853fn getBreakBlock(sema: *Sema, inst_index: Air.Inst.Index) ?Air.Inst.Index {
3385433854 const air_datas = sema.air_instructions.items(.data);
3385533855 const air_tags = sema.air_instructions.items(.tag);
33856 switch (air_tags[@intFromEnum(inst_index)]) {
33857 .br => return air_datas[@intFromEnum(inst_index)].br.block_inst,
33856 switch (air_tags[@backingInt(inst_index)]) {
33857 .br => return air_datas[@backingInt(inst_index)].br.block_inst,
3385833858 else => return null,
3385933859 }
3386033860}
......@@ -34596,7 +34596,7 @@ pub fn flushExports(sema: *Sema) !void {
3459634596 try zcu.single_exports.ensureUnusedCapacity(gpa, 1);
3459734597 const export_idx: Zcu.Export.Index = zcu.free_exports.pop() orelse idx: {
3459834598 _ = try zcu.all_exports.addOne(gpa);
34599 break :idx @enumFromInt(zcu.all_exports.items.len - 1);
34599 break :idx @fromBackingInt(@intCast(zcu.all_exports.items.len - 1));
3460034600 };
3460134601 export_idx.ptr(zcu).* = sema.exports.items[0];
3460234602 zcu.single_exports.putAssumeCapacityNoClobber(sema.owner, export_idx);
......@@ -34920,7 +34920,7 @@ pub fn setTypeName(
3492034920 io,
3492134921 pt.tid,
3492234922 "{f}__{s}_{d}",
34923 .{ block.type_name_ctx.fmt(ip), anon_prefix, @intFromEnum(wip.index) },
34923 .{ block.type_name_ctx.fmt(ip), anon_prefix, @backingInt(wip.index) },
3492434924 .no_embedded_nulls,
3492534925 ), .none);
3492634926 },
......@@ -34935,7 +34935,7 @@ pub fn setTypeName(
3493534935 w.print("{f}(", .{block.type_name_ctx.fmt(ip)}) catch return error.OutOfMemory;
3493634936
3493734937 var arg_i: usize = 0;
34938 for (fn_info.param_body) |zir_inst| switch (zir_tags[@intFromEnum(zir_inst)]) {
34938 for (fn_info.param_body) |zir_inst| switch (zir_tags[@backingInt(zir_inst)]) {
3493934939 .param, .param_comptime, .param_anytype, .param_anytype_comptime => {
3494034940 const arg = sema.inst_map.get(zir_inst).?;
3494134941 // If this is being called in a generic function then analyzeCall will
......@@ -34975,7 +34975,7 @@ pub fn setTypeName(
3497534975 const ref = inst.toRef();
3497634976 const zir_tags = sema.code.instructions.items(.tag);
3497734977 const zir_data = sema.code.instructions.items(.data);
34978 const var_name = for (@intFromEnum(inst)..zir_tags.len) |i| switch (zir_tags[i]) {
34978 const var_name = for (@backingInt(inst)..zir_tags.len) |i| switch (zir_tags[i]) {
3497934979 .dbg_var_ptr, .dbg_var_val => if (zir_data[i].str_op.operand == ref) {
3498034980 break zir_data[i].str_op.getStr(sema.code);
3498134981 },
src/Sema/comptime_ptr_access.zig+5-5
......@@ -40,7 +40,7 @@ pub fn loadComptimePtr(sema: *Sema, block: *Block, src: LazySrcLoc, ptr: Value)
4040 const result_val: Value = try .readFromPackedMemory(elem_ty, pt, buf, ptr_info.packed_offset.bit_offset);
4141 return .{ .success = .{ .interned = result_val.toIntern() } };
4242 }
43 if (@intFromEnum(ptr_info.flags.vector_index) >= host_size) {
43 if (@backingInt(ptr_info.flags.vector_index) >= host_size) {
4444 return .exceeds_host_size;
4545 }
4646 const load_ty: Type = try pt.vectorType(.{
......@@ -52,7 +52,7 @@ pub fn loadComptimePtr(sema: *Sema, block: *Block, src: LazySrcLoc, ptr: Value)
5252 .success => |mv| mv,
5353 };
5454 const vector_val = try vector_mv.intern(pt, sema.arena);
55 const result_val = try vector_val.elemValue(pt, @intFromEnum(ptr_info.flags.vector_index));
55 const result_val = try vector_val.elemValue(pt, @backingInt(ptr_info.flags.vector_index));
5656 return .{ .success = .{ .interned = result_val.toIntern() } };
5757}
5858
......@@ -115,7 +115,7 @@ pub fn storeComptimePtr(
115115 return storeComptimePtrInner(sema, block, src, ptr, new_backing_int_val);
116116 }
117117
118 if (@intFromEnum(ptr_info.flags.vector_index) >= host_size) {
118 if (@backingInt(ptr_info.flags.vector_index) >= host_size) {
119119 return .exceeds_host_size;
120120 }
121121 const vec_ty: Type = try pt.vectorType(.{
......@@ -133,7 +133,7 @@ pub fn storeComptimePtr(
133133 const elem_val = try old_vector_val.elemValue(pt, elem_index);
134134 elem.* = elem_val.toIntern();
135135 }
136 elems_buf[@intFromEnum(ptr_info.flags.vector_index)] = store_val.toIntern();
136 elems_buf[@backingInt(ptr_info.flags.vector_index)] = store_val.toIntern();
137137 const new_vector_val = try pt.aggregateValue(vec_ty, elems_buf);
138138 return storeComptimePtrInner(sema, block, src, ptr, new_vector_val);
139139}
......@@ -1076,7 +1076,7 @@ fn checkComptimeVarStore(
10761076 alloc_index: ComptimeAllocIndex,
10771077) !void {
10781078 const runtime_index = sema.getComptimeAlloc(alloc_index).runtime_index;
1079 if (@intFromEnum(runtime_index) < @intFromEnum(block.runtime_index)) {
1079 if (@backingInt(runtime_index) < @backingInt(block.runtime_index)) {
10801080 if (block.runtime_cond) |cond_src| {
10811081 const msg = msg: {
10821082 const msg = try sema.errMsg(src, "store to comptime variable depends on runtime condition", .{});
src/Sema/type_resolution.zig+3-3
......@@ -375,7 +375,7 @@ pub fn resolveStructLayout(sema: *Sema, struct_ty: Type) CompileError!void {
375375 }
376376 struct_align = struct_align.maxStrict(field_align);
377377 if (struct_obj.layout == .auto) {
378 struct_obj.field_runtime_order.get(ip)[field_idx] = @enumFromInt(field_idx);
378 struct_obj.field_runtime_order.get(ip)[field_idx] = @fromBackingInt(@intCast(field_idx));
379379 }
380380 switch (field_ty.classify(zcu)) {
381381 .one_possible_value => {},
......@@ -428,8 +428,8 @@ pub fn resolveStructLayout(sema: *Sema, struct_ty: Type) CompileError!void {
428428 assert(b != .unresolved);
429429 if (a == .omitted) return false;
430430 if (b == .omitted) return true;
431 const a_align = ctx.aligns[@intFromEnum(a)];
432 const b_align = ctx.aligns[@intFromEnum(b)];
431 const a_align = ctx.aligns[@backingInt(a)];
432 const b_align = ctx.aligns[@backingInt(b)];
433433 return a_align.compare(.gt, b_align);
434434 }
435435 };
src/Type.zig+2-2
......@@ -476,7 +476,7 @@ pub fn print(ty: Type, writer: *std.Io.Writer, pt: Zcu.PerThread, ctx: ?*Compari
476476 });
477477 }
478478 if (info.flags.vector_index != .none) {
479 try writer.print(":{d}", .{@intFromEnum(info.flags.vector_index)});
479 try writer.print(":{d}", .{@backingInt(info.flags.vector_index)});
480480 }
481481 try writer.writeAll(") ");
482482 }
......@@ -2660,7 +2660,7 @@ pub fn typeDeclSrcLine(ty: Type, zcu: *Zcu) ?u32 {
26602660 .zig => file.zir.?,
26612661 .zon => return 0,
26622662 };
2663 const inst = zir.instructions.get(@intFromEnum(info.inst));
2663 const inst = zir.instructions.get(@backingInt(info.inst));
26642664 return switch (inst.tag) {
26652665 .struct_init, .struct_init_ref => zir.extraData(Zir.Inst.StructInit, inst.data.pl_node.payload_index).data.abs_line,
26662666 .struct_init_anon => zir.extraData(Zir.Inst.StructInitAnon, inst.data.pl_node.payload_index).data.abs_line,
src/Value.zig+1-1
......@@ -2373,7 +2373,7 @@ pub fn uninterpret(val: anytype, ty: Type, pt: Zcu.PerThread) error{ OutOfMemory
23732373 try pt.nullValue(ty),
23742374
23752375 .@"enum" => switch (interpret_mode) {
2376 .direct => try pt.enumValue(ty, try uninterpret(@intFromEnum(val), ty.backingIntType(zcu), pt)),
2376 .direct => try pt.enumValue(ty, try uninterpret(@backingInt(val), ty.backingIntType(zcu), pt)),
23772377 .by_name => {
23782378 const field_name_ip = try ip.getOrPutString(zcu.gpa, io, pt.tid, @tagName(val), .no_embedded_nulls);
23792379 const field_idx = ty.enumFieldIndex(field_name_ip, zcu) orelse return error.TypeMismatch;
src/Zcu.zig+49-49
......@@ -402,7 +402,7 @@ pub const ImportTableAdapter = struct {
402402 zcu: *const Zcu,
403403 pub fn hash(ctx: ImportTableAdapter, path: Compilation.Path) u32 {
404404 _ = ctx;
405 return @truncate(std.hash.Wyhash.hash(@intFromEnum(path.root), path.sub_path));
405 return @truncate(std.hash.Wyhash.hash(@backingInt(path.root), path.sub_path));
406406 }
407407 pub fn eql(ctx: ImportTableAdapter, a_path: Compilation.Path, b_file: File.Index, b_index: usize) bool {
408408 _ = b_index;
......@@ -414,7 +414,7 @@ pub const ImportTableAdapter = struct {
414414pub const EmbedTableAdapter = struct {
415415 pub fn hash(ctx: EmbedTableAdapter, path: Compilation.Path) u32 {
416416 _ = ctx;
417 return @truncate(std.hash.Wyhash.hash(@intFromEnum(path.root), path.sub_path));
417 return @truncate(std.hash.Wyhash.hash(@backingInt(path.root), path.sub_path));
418418 }
419419 pub fn eql(ctx: EmbedTableAdapter, a_path: Compilation.Path, b_file: *EmbedFile, b_index: usize) bool {
420420 _ = ctx;
......@@ -614,7 +614,7 @@ pub const StdLangDecl = enum {
614614 .VaList => .va_list,
615615 .assembly, .@"assembly.Clobbers" => .assembly,
616616 else => {
617 if (@intFromEnum(decl) <= @intFromEnum(StdLangDecl.@"Type.Spirv.Image.Access")) {
617 if (@backingInt(decl) <= @backingInt(StdLangDecl.@"Type.Spirv.Image.Access")) {
618618 return .main;
619619 } else {
620620 return .panic;
......@@ -635,7 +635,7 @@ pub const StdLangDecl = enum {
635635 const name = @tagName(tag);
636636 const split = (comptime std.mem.lastIndexOfScalar(u8, name, '.')) orelse return .{ .direct = name };
637637 const parent = @field(StdLangDecl, name[0..split]);
638 comptime assert(@intFromEnum(parent) < @intFromEnum(tag)); // dependencies ordered correctly
638 comptime assert(@backingInt(parent) < @backingInt(tag)); // dependencies ordered correctly
639639 return .{ .nested = .{ parent, name[split + 1 ..] } };
640640 },
641641 };
......@@ -757,7 +757,7 @@ pub const Export = struct {
757757 _,
758758
759759 pub fn ptr(i: Index, zcu: *const Zcu) *Export {
760 return &zcu.all_exports.items[@intFromEnum(i)];
760 return &zcu.all_exports.items[@backingInt(i)];
761761 }
762762 };
763763};
......@@ -769,10 +769,10 @@ pub const CompileLogLine = struct {
769769 pub const Index = enum(u32) {
770770 _,
771771 pub fn get(idx: Index, zcu: *Zcu) *CompileLogLine {
772 return &zcu.compile_log_lines.items[@intFromEnum(idx)];
772 return &zcu.compile_log_lines.items[@backingInt(idx)];
773773 }
774774 pub fn toOptional(idx: Index) Optional {
775 return @enumFromInt(@intFromEnum(idx));
775 return @fromBackingInt(@intCast(@backingInt(idx)));
776776 }
777777 pub const Optional = enum(u32) {
778778 none = std.math.maxInt(u32),
......@@ -780,7 +780,7 @@ pub const CompileLogLine = struct {
780780 pub fn unwrap(opt: Optional) ?Index {
781781 return switch (opt) {
782782 .none => null,
783 _ => @enumFromInt(@intFromEnum(opt)),
783 _ => @fromBackingInt(@intCast(@backingInt(opt))),
784784 };
785785 }
786786 };
......@@ -815,10 +815,10 @@ pub const InlineReferenceFrame = struct {
815815 pub const Index = enum(u32) {
816816 _,
817817 pub fn ptr(idx: Index, zcu: *Zcu) *InlineReferenceFrame {
818 return &zcu.inline_reference_frames.items[@intFromEnum(idx)];
818 return &zcu.inline_reference_frames.items[@backingInt(idx)];
819819 }
820820 pub fn toOptional(idx: Index) Optional {
821 return @enumFromInt(@intFromEnum(idx));
821 return @fromBackingInt(@intCast(@backingInt(idx)));
822822 }
823823 pub const Optional = enum(u32) {
824824 none = std.math.maxInt(u32),
......@@ -826,7 +826,7 @@ pub const InlineReferenceFrame = struct {
826826 pub fn unwrap(opt: Optional) ?Index {
827827 return switch (opt) {
828828 .none => null,
829 _ => @enumFromInt(@intFromEnum(opt)),
829 _ => @fromBackingInt(@intCast(@backingInt(opt))),
830830 };
831831 }
832832 };
......@@ -869,7 +869,7 @@ pub const Namespace = struct {
869869
870870 pub fn hash(ctx: NavNameContext, nav: InternPool.Nav.Index) u32 {
871871 const name = ctx.zcu.intern_pool.getNav(nav).name;
872 return std.hash.int(@intFromEnum(name));
872 return std.hash.int(@backingInt(name));
873873 }
874874
875875 pub fn eql(ctx: NavNameContext, a_nav: InternPool.Nav.Index, b_nav: InternPool.Nav.Index, b_index: usize) bool {
......@@ -885,7 +885,7 @@ pub const Namespace = struct {
885885
886886 pub fn hash(ctx: NameAdapter, s: InternPool.NullTerminatedString) u32 {
887887 _ = ctx;
888 return std.hash.int(@intFromEnum(s));
888 return std.hash.int(@backingInt(s));
889889 }
890890
891891 pub fn eql(ctx: NameAdapter, a: InternPool.NullTerminatedString, b_nav: InternPool.Nav.Index, b_index: usize) bool {
......@@ -1235,7 +1235,7 @@ pub const EmbedFile = struct {
12351235 pub const Index = enum(u32) {
12361236 _,
12371237 pub fn get(idx: Index, zcu: *const Zcu) *EmbedFile {
1238 return zcu.embed_table.keys()[@intFromEnum(idx)];
1238 return zcu.embed_table.keys()[@backingInt(idx)];
12391239 }
12401240 };
12411241};
......@@ -1625,7 +1625,7 @@ pub const SrcLoc = struct {
16251625 // that contains this input.
16261626 const node_tags = tree.nodes.items(.tag);
16271627 for (node_tags, 0..) |node_tag, node_usize| {
1628 const node: Ast.Node.Index = @enumFromInt(node_usize);
1628 const node: Ast.Node.Index = @fromBackingInt(@intCast(node_usize));
16291629 switch (node_tag) {
16301630 .for_simple, .@"for" => {
16311631 const for_full = tree.fullFor(node).?;
......@@ -1665,7 +1665,7 @@ pub const SrcLoc = struct {
16651665 var buf: [2]Ast.Node.Index = undefined;
16661666 const call_full = tree.fullCall(buf[0..1], node) orelse {
16671667 assert(tree.nodeTag(node) == .builtin_call);
1668 const call_args_node: Ast.Node.Index = @enumFromInt(tree.extra_data[@intFromEnum(tree.nodeData(node).extra_range.end) - 1]);
1668 const call_args_node: Ast.Node.Index = @fromBackingInt(@intCast(tree.extra_data[@backingInt(tree.nodeData(node).extra_range.end) - 1]));
16691669 switch (tree.nodeTag(call_args_node)) {
16701670 .array_init_one,
16711671 .array_init_one_comma,
......@@ -2740,7 +2740,7 @@ pub const LazySrcLoc = struct {
27402740 // Otherwise, make sure ZIR is loaded.
27412741 const zir = file.zir.?;
27422742
2743 const inst = zir.instructions.get(@intFromEnum(zir_inst));
2743 const inst = zir.instructions.get(@backingInt(zir_inst));
27442744 const base_node: Ast.Node.Index = switch (inst.tag) {
27452745 .declaration => inst.data.declaration.src_node,
27462746 .struct_init, .struct_init_ref => zir.extraData(Zir.Inst.StructInit, inst.data.pl_node.payload_index).data.abs_node,
......@@ -2789,7 +2789,7 @@ pub const LazySrcLoc = struct {
27892789 if (lhs_resolved.file_scope != rhs_resolved.file_scope) {
27902790 const lhs_path = lhs_resolved.file_scope.path;
27912791 const rhs_path = rhs_resolved.file_scope.path;
2792 return std.math.order(@intFromEnum(lhs_path.root), @intFromEnum(rhs_path.root)).differ() orelse
2792 return std.math.order(@backingInt(lhs_path.root), @backingInt(rhs_path.root)).differ() orelse
27932793 std.mem.order(u8, lhs_path.sub_path, rhs_path.sub_path).differ().?;
27942794 }
27952795 const prev_prot = zcu.comp.io.swapCancelProtection(.blocked);
......@@ -3009,10 +3009,10 @@ pub fn loadZirCacheBody(gpa: Allocator, header: Zir.Header, cache_br: *Io.Reader
30093009 if (data_has_safety_tag) {
30103010 const tags = zir.instructions.items(.tag);
30113011 for (zir.instructions.items(.data), 0..) |*data, i| {
3012 const union_tag = Zir.Inst.Tag.data_tags[@intFromEnum(tags[i])];
3012 const union_tag = Zir.Inst.Tag.data_tags[@backingInt(tags[i])];
30133013 const as_struct = @as(*HackDataLayout, @ptrCast(data));
30143014 as_struct.* = .{
3015 .safety_tag = @intFromEnum(union_tag),
3015 .safety_tag = @backingInt(union_tag),
30163016 .data = safety_buffer[i],
30173017 };
30183018 }
......@@ -3408,8 +3408,8 @@ pub fn mapOldZirToNew(
34083408 // updates. If they have, we need to ignore this mapping. These properties are essentially
34093409 // everything passed into `InternPool.getDeclaredStructType` (likewise for unions, enums,
34103410 // and opaques).
3411 const old_tag = old_zir.instructions.items(.data)[@intFromEnum(match_item.old_inst)].extended.opcode;
3412 const new_tag = new_zir.instructions.items(.data)[@intFromEnum(match_item.new_inst)].extended.opcode;
3411 const old_tag = old_zir.instructions.items(.data)[@backingInt(match_item.old_inst)].extended.opcode;
3412 const new_tag = new_zir.instructions.items(.data)[@backingInt(match_item.new_inst)].extended.opcode;
34133413 if (old_tag != new_tag) continue;
34143414 switch (old_tag) {
34153415 .struct_decl => {
......@@ -3756,7 +3756,7 @@ pub fn resetUnit(zcu: *Zcu, unit: AnalUnit) void {
37563756 exports: {
37573757 const base: u32, const len: u32 = index: {
37583758 if (zcu.single_exports.fetchSwapRemove(unit)) |kv| {
3759 break :index .{ @intFromEnum(kv.value), 1 };
3759 break :index .{ @backingInt(kv.value), 1 };
37603760 }
37613761 if (zcu.multi_exports.fetchSwapRemove(unit)) |kv| {
37623762 break :index .{ kv.value.index, kv.value.len };
......@@ -3764,7 +3764,7 @@ pub fn resetUnit(zcu: *Zcu, unit: AnalUnit) void {
37643764 break :exports;
37653765 };
37663766 for (zcu.all_exports.items[base..][0..len], base..) |exp, exp_index_usize| {
3767 const exp_index: Export.Index = @enumFromInt(exp_index_usize);
3767 const exp_index: Export.Index = @fromBackingInt(@intCast(exp_index_usize));
37683768 if (zcu.llvm_object) |llvm_object| {
37693769 _ = llvm_object; // TODO: delete exports from LLVM
37703770 } else if (zcu.comp.bin_file) |lf| {
......@@ -3780,7 +3780,7 @@ pub fn resetUnit(zcu: *Zcu, unit: AnalUnit) void {
37803780 break :exports;
37813781 };
37823782 for (base..base + len) |exp_index| {
3783 zcu.free_exports.appendAssumeCapacity(@enumFromInt(exp_index));
3783 zcu.free_exports.appendAssumeCapacity(@fromBackingInt(@intCast(exp_index)));
37843784 }
37853785 }
37863786
......@@ -3836,7 +3836,7 @@ pub fn resetUnit(zcu: *Zcu, unit: AnalUnit) void {
38363836pub fn addInlineReferenceFrame(zcu: *Zcu, frame: InlineReferenceFrame) Allocator.Error!Zcu.InlineReferenceFrame.Index {
38373837 const frame_idx: InlineReferenceFrame.Index = zcu.free_inline_reference_frames.pop() orelse idx: {
38383838 _ = try zcu.inline_reference_frames.addOne(zcu.gpa);
3839 break :idx @enumFromInt(zcu.inline_reference_frames.items.len - 1);
3839 break :idx @fromBackingInt(@intCast(zcu.inline_reference_frames.items.len - 1));
38403840 };
38413841 frame_idx.ptr(zcu).* = frame;
38423842 return frame_idx;
......@@ -4251,7 +4251,7 @@ fn resolveReferencesInner(zcu: *Zcu) Allocator.Error!std.array_hash_map.Auto(Ana
42514251 if (!gop.found_existing) {
42524252 refs_log.debug("type '{f}': ref comptime %{}", .{
42534253 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
4254 @intFromEnum(ip.getComptimeUnit(cu).zir_index.resolve(ip) orelse continue),
4254 @backingInt(ip.getComptimeUnit(cu).zir_index.resolve(ip) orelse continue),
42554255 });
42564256 gop.value_ptr.* = referencer;
42574257 }
......@@ -4285,7 +4285,7 @@ fn resolveReferencesInner(zcu: *Zcu) Allocator.Error!std.array_hash_map.Auto(Ana
42854285 if (!gop.found_existing) {
42864286 refs_log.debug("type '{f}': ref test %{}", .{
42874287 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
4288 @intFromEnum(inst_info.inst),
4288 @backingInt(inst_info.inst),
42894289 });
42904290 gop.value_ptr.* = referencer;
42914291 }
......@@ -4308,7 +4308,7 @@ fn resolveReferencesInner(zcu: *Zcu) Allocator.Error!std.array_hash_map.Auto(Ana
43084308 if (!gop.found_existing) {
43094309 refs_log.debug("type '{f}': ref named %{}", .{
43104310 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
4311 @intFromEnum(inst_info.inst),
4311 @backingInt(inst_info.inst),
43124312 });
43134313 gop.value_ptr.* = referencer;
43144314 }
......@@ -4325,7 +4325,7 @@ fn resolveReferencesInner(zcu: *Zcu) Allocator.Error!std.array_hash_map.Auto(Ana
43254325 if (!gop.found_existing) {
43264326 refs_log.debug("type '{f}': ref named %{}", .{
43274327 Type.fromInterned(ty).containerTypeName(ip).fmt(ip),
4328 @intFromEnum(inst_info.inst),
4328 @backingInt(inst_info.inst),
43294329 });
43304330 gop.value_ptr.* = referencer;
43314331 }
......@@ -4494,16 +4494,16 @@ fn formatAnalUnit(data: FormatAnalUnit, writer: *Io.Writer) Io.Writer.Error!void
44944494 const cu = ip.getComptimeUnit(cu_id);
44954495 if (cu.zir_index.resolveFull(ip)) |resolved| {
44964496 const file_path = zcu.fileByIndex(resolved.file).path;
4497 return writer.print("comptime(inst=('{f}', %{}) [{}])", .{ file_path.fmt(zcu.comp), @intFromEnum(resolved.inst), @intFromEnum(cu_id) });
4497 return writer.print("comptime(inst=('{f}', %{}) [{}])", .{ file_path.fmt(zcu.comp), @backingInt(resolved.inst), @backingInt(cu_id) });
44984498 } else {
4499 return writer.print("comptime(inst=<lost> [{}])", .{@intFromEnum(cu_id)});
4499 return writer.print("comptime(inst=<lost> [{}])", .{@backingInt(cu_id)});
45004500 }
45014501 },
4502 .nav_val, .nav_ty => |nav, tag| return writer.print("{t}('{f}' [{}])", .{ tag, ip.getNav(nav).fqn.fmt(ip), @intFromEnum(nav) }),
4503 .type_layout, .struct_defaults => |ty, tag| return writer.print("{t}('{f}' [{}])", .{ tag, Type.fromInterned(ty).containerTypeName(ip).fmt(ip), @intFromEnum(ty) }),
4502 .nav_val, .nav_ty => |nav, tag| return writer.print("{t}('{f}' [{}])", .{ tag, ip.getNav(nav).fqn.fmt(ip), @backingInt(nav) }),
4503 .type_layout, .struct_defaults => |ty, tag| return writer.print("{t}('{f}' [{}])", .{ tag, Type.fromInterned(ty).containerTypeName(ip).fmt(ip), @backingInt(ty) }),
45044504 .func => |func| {
45054505 const nav = zcu.funcInfo(func).owner_nav;
4506 return writer.print("func('{f}' [{}])", .{ ip.getNav(nav).fqn.fmt(ip), @intFromEnum(func) });
4506 return writer.print("func('{f}' [{}])", .{ ip.getNav(nav).fqn.fmt(ip), @backingInt(func) });
45074507 },
45084508 .memoized_state => return writer.writeAll("memoized_state"),
45094509 }
......@@ -4519,7 +4519,7 @@ fn formatDependee(data: FormatDependee, writer: *Io.Writer) Io.Writer.Error!void
45194519 return writer.writeAll("inst(<lost>)");
45204520 };
45214521 const file_path = zcu.fileByIndex(info.file).path;
4522 return writer.print("inst('{f}', %{d})", .{ file_path.fmt(zcu.comp), @intFromEnum(info.inst) });
4522 return writer.print("inst('{f}', %{d})", .{ file_path.fmt(zcu.comp), @backingInt(info.inst) });
45234523 },
45244524 .nav_val, .nav_ty => |nav, tag| {
45254525 const fqn = ip.getNav(nav).fqn;
......@@ -4546,14 +4546,14 @@ fn formatDependee(data: FormatDependee, writer: *Io.Writer) Io.Writer.Error!void
45464546 return writer.writeAll("namespace(<lost>)");
45474547 };
45484548 const file_path = zcu.fileByIndex(info.file).path;
4549 return writer.print("namespace('{f}', %{d})", .{ file_path.fmt(zcu.comp), @intFromEnum(info.inst) });
4549 return writer.print("namespace('{f}', %{d})", .{ file_path.fmt(zcu.comp), @backingInt(info.inst) });
45504550 },
45514551 .namespace_name => |k| {
45524552 const info = k.namespace.resolveFull(ip) orelse {
45534553 return writer.print("namespace(<lost>, '{f}')", .{k.name.fmt(ip)});
45544554 };
45554555 const file_path = zcu.fileByIndex(info.file).path;
4556 return writer.print("namespace('{f}', %{d}, '{f}')", .{ file_path.fmt(zcu.comp), @intFromEnum(info.inst), k.name.fmt(ip) });
4556 return writer.print("namespace('{f}', %{d}, '{f}')", .{ file_path.fmt(zcu.comp), @backingInt(info.inst), k.name.fmt(ip) });
45574557 },
45584558 .memoized_state => return writer.writeAll("memoized_state"),
45594559 }
......@@ -5276,7 +5276,7 @@ pub const CodegenTaskPool = struct {
52765276 @memset(task_funcs, .none);
52775277
52785278 var free: std.ArrayList(Index) = try .initCapacity(arena, max_funcs_in_flight);
5279 for (0..max_funcs_in_flight) |index| free.appendAssumeCapacity(@enumFromInt(index));
5279 for (0..max_funcs_in_flight) |index| free.appendAssumeCapacity(@fromBackingInt(@intCast(index)));
52805280
52815281 return .{
52825282 .available_air_bytes = max_air_bytes_in_flight,
......@@ -5349,10 +5349,10 @@ pub const CodegenTaskPool = struct {
53495349 errdefer comptime unreachable;
53505350
53515351 assert(zcu.pending_codegen_jobs.fetchAdd(1, .monotonic) > 0); // the "Code Generation" node is still active
5352 assert(pool.task_funcs[@intFromEnum(index)] == .none);
5353 pool.task_funcs[@intFromEnum(index)] = func_index;
5354 pool.task_air_bytes[@intFromEnum(index)] = actual_air_bytes;
5355 pool.task_futures[@intFromEnum(index)] = if (move_air) io.async(
5352 assert(pool.task_funcs[@backingInt(index)] == .none);
5353 pool.task_funcs[@backingInt(index)] = func_index;
5354 pool.task_air_bytes[@backingInt(index)] = actual_air_bytes;
5355 pool.task_futures[@backingInt(index)] = if (move_air) io.async(
53565356 workerCodegenOwnedAir,
53575357 .{ zcu, func_index, air.* },
53585358 ) else io.async(
......@@ -5373,14 +5373,14 @@ pub const CodegenTaskPool = struct {
53735373 zcu: *const Zcu,
53745374 ) PerThread.RunCodegenError!struct { InternPool.Index, codegen.AnyMir } {
53755375 const io = zcu.comp.io;
5376 const func = pool.task_funcs[@intFromEnum(index)];
5376 const func = pool.task_funcs[@backingInt(index)];
53775377 assert(func != .none);
5378 const effective_air_bytes = pool.task_air_bytes[@intFromEnum(index)];
5379 const result = pool.task_futures[@intFromEnum(index)].await(io);
5378 const effective_air_bytes = pool.task_air_bytes[@backingInt(index)];
5379 const result = pool.task_futures[@backingInt(index)].await(io);
53805380
5381 pool.task_funcs[@intFromEnum(index)] = .none;
5382 pool.task_air_bytes[@intFromEnum(index)] = undefined;
5383 pool.task_futures[@intFromEnum(index)] = undefined;
5381 pool.task_funcs[@backingInt(index)] = .none;
5382 pool.task_air_bytes[@backingInt(index)] = undefined;
5383 pool.task_futures[@backingInt(index)] = undefined;
53845384
53855385 {
53865386 pool.mutex.lockUncancelable(io);
src/Zcu/PerThread.zig+18-18
......@@ -73,7 +73,7 @@ pub const Id = if (InternPool.single_threaded) enum {
7373 pub fn allocate(arena: Allocator, n: usize) Allocator.Error!void {
7474 assert(available_tids.items.len == 0);
7575 try available_tids.ensureTotalCapacityPrecise(arena, n - 1);
76 for (1..n) |tid| available_tids.appendAssumeCapacity(@enumFromInt(tid));
76 for (1..n) |tid| available_tids.appendAssumeCapacity(@fromBackingInt(@intCast(tid)));
7777 switch (build_options.io_mode) {
7878 .threaded => {
7979 // Called from the main thread, so mark ourselves as such.
......@@ -194,7 +194,7 @@ pub fn update(
194194 // because `workerUpdateEmbedFile` can't invalidate it. The different here is that one
195195 // `@embedFile` can't trigger analysis of a new `@embedFile`!
196196 for (0.., zcu.embed_table.keys()) |ef_index_usize, ef| {
197 const ef_index: Zcu.EmbedFile.Index = @enumFromInt(ef_index_usize);
197 const ef_index: Zcu.EmbedFile.Index = @fromBackingInt(@intCast(ef_index_usize));
198198 astgen_group.async(io, workerUpdateEmbedFile, .{
199199 comp, ef_index, ef,
200200 });
......@@ -390,7 +390,7 @@ fn workerUpdateFile(
390390 // Discover all imports in the file. Imports of modules we ignore for now since we don't
391391 // know which module we're in, but imports of file paths might need us to queue up other
392392 // AstGen jobs.
393 const imports_index = file.zir.?.extra[@intFromEnum(Zir.ExtraIndex.imports)];
393 const imports_index = file.zir.?.extra[@backingInt(Zir.ExtraIndex.imports)];
394394 if (imports_index != 0) {
395395 const extra = file.zir.?.extraData(Zir.Inst.Imports, imports_index);
396396 var import_i: u32 = 0;
......@@ -853,7 +853,7 @@ fn updateZirRefs(pt: Zcu.PerThread) (Io.Cancelable || Allocator.Error)!void {
853853
854854 const old_inst = tracked_inst.inst.unwrap() orelse continue; // we can't continue tracking lost insts
855855 const tracked_inst_index = (InternPool.TrackedInst.Index.Unwrapped{
856 .tid = @enumFromInt(tid),
856 .tid = @fromBackingInt(@intCast(tid)),
857857 .index = @intCast(tracked_inst_unwrapped_index),
858858 }).wrap(ip);
859859 const new_inst = updated_file.inst_map.get(old_inst) orelse {
......@@ -868,8 +868,8 @@ fn updateZirRefs(pt: Zcu.PerThread) (Io.Cancelable || Allocator.Error)!void {
868868
869869 const old_zir = file.prev_zir.?.*;
870870 const new_zir = file.zir.?;
871 const old_tag = old_zir.instructions.items(.tag)[@intFromEnum(old_inst)];
872 const old_data = old_zir.instructions.items(.data)[@intFromEnum(old_inst)];
871 const old_tag = old_zir.instructions.items(.tag)[@backingInt(old_inst)];
872 const old_data = old_zir.instructions.items(.data)[@backingInt(old_inst)];
873873
874874 switch (old_tag) {
875875 .declaration => {
......@@ -1882,7 +1882,7 @@ fn analyzeNavVal(
18821882 });
18831883
18841884 if (zir_decl.linkage == .@"export") {
1885 const export_src = block.src(.{ .token_offset = @enumFromInt(@intFromBool(zir_decl.is_pub)) });
1885 const export_src = block.src(.{ .token_offset = @fromBackingInt(@intCast(@intFromBool(zir_decl.is_pub))) });
18861886 const name_slice = zir.nullTerminatedString(zir_decl.name);
18871887 const name_ip = try ip.getOrPutString(gpa, io, pt.tid, name_slice, .no_embedded_nulls);
18881888 try sema.analyzeExportSelfNav(&block, export_src, name_ip);
......@@ -2623,7 +2623,7 @@ fn computeAliveFiles(pt: Zcu.PerThread) Allocator.Error!bool {
26232623 if (file.status != .success) continue; // ZIR not valid if there was a file failure
26242624
26252625 const zir = file.zir.?;
2626 const imports_index = zir.extra[@intFromEnum(Zir.ExtraIndex.imports)];
2626 const imports_index = zir.extra[@backingInt(Zir.ExtraIndex.imports)];
26272627 if (imports_index == 0) continue; // this Zig file has no imports
26282628 const extra = zir.extraData(Zir.Inst.Imports, imports_index);
26292629 var extra_index = extra.end;
......@@ -2794,7 +2794,7 @@ pub fn updateBuiltinModule(pt: Zcu.PerThread, opts: Builtin) Allocator.Error!voi
27942794 assert(!file.zir.?.hasCompileErrors());
27952795 {
27962796 // Check that it has only one import, which is 'std'.
2797 const imports_idx = file.zir.?.extra[@intFromEnum(Zir.ExtraIndex.imports)];
2797 const imports_idx = file.zir.?.extra[@backingInt(Zir.ExtraIndex.imports)];
27982798 assert(imports_idx != 0); // there is an import
27992799 const extra = file.zir.?.extraData(Zir.Inst.Imports, imports_idx);
28002800 assert(extra.data.imports_len == 1); // there is exactly one import
......@@ -2838,11 +2838,11 @@ pub fn embedFile(
28382838 const gop = try zcu.embed_table.getOrPutAdapted(gpa, path, Zcu.EmbedTableAdapter{});
28392839 if (gop.found_existing) {
28402840 path.deinit(gpa); // we're not using this key
2841 return @enumFromInt(gop.index);
2841 return @fromBackingInt(@intCast(gop.index));
28422842 }
28432843 errdefer _ = zcu.embed_table.pop();
28442844 gop.key_ptr.* = try pt.newEmbedFile(path);
2845 return @enumFromInt(gop.index);
2845 return @fromBackingInt(@intCast(gop.index));
28462846 }
28472847
28482848 const embed_file: *Zcu.EmbedFile, const embed_file_idx: Zcu.EmbedFile.Index = ef: {
......@@ -2851,11 +2851,11 @@ pub fn embedFile(
28512851 const gop = try zcu.embed_table.getOrPutAdapted(gpa, path, Zcu.EmbedTableAdapter{});
28522852 if (gop.found_existing) {
28532853 path.deinit(gpa); // we're not using this key
2854 break :ef .{ gop.key_ptr.*, @enumFromInt(gop.index) };
2854 break :ef .{ gop.key_ptr.*, @fromBackingInt(@intCast(gop.index)) };
28552855 } else {
28562856 errdefer _ = zcu.embed_table.pop();
28572857 gop.key_ptr.* = try pt.newEmbedFile(path);
2858 break :ef .{ gop.key_ptr.*, @enumFromInt(gop.index) };
2858 break :ef .{ gop.key_ptr.*, @fromBackingInt(@intCast(gop.index)) };
28592859 }
28602860 };
28612861
......@@ -3394,7 +3394,7 @@ fn analyzeFuncBodyInner(
33943394 gop.value_ptr.* = .fromValue(opv);
33953395 continue;
33963396 }
3397 const arg_index: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
3397 const arg_index: Air.Inst.Index = @fromBackingInt(@intCast(sema.air_instructions.len));
33983398 gop.value_ptr.* = arg_index.toRef();
33993399 inner_block.instructions.appendAssumeCapacity(arg_index);
34003400 sema.air_instructions.appendAssumeCapacity(.{
......@@ -3441,7 +3441,7 @@ fn analyzeFuncBodyInner(
34413441 for (sema.unresolved_inferred_allocs.keys()) |ptr_inst| {
34423442 // The lack of a resolve_inferred_alloc means that this instruction
34433443 // is unused so it just has to be a no-op.
3444 sema.air_instructions.set(@intFromEnum(ptr_inst), .{
3444 sema.air_instructions.set(@backingInt(ptr_inst), .{
34453445 .tag = .alloc,
34463446 .data = .{ .ty = .ptr_const_comptime_int },
34473447 });
......@@ -3466,7 +3466,7 @@ fn analyzeFuncBodyInner(
34663466 .body_len = @intCast(inner_block.instructions.items.len),
34673467 });
34683468 sema.air_extra.appendSliceAssumeCapacity(@ptrCast(inner_block.instructions.items));
3469 sema.air_extra.items[@intFromEnum(Air.ExtraIndex.main_block)] = main_block_index;
3469 sema.air_extra.items[@backingInt(Air.ExtraIndex.main_block)] = main_block_index;
34703470
34713471 // Resolving inferred error sets is done *before* setting the function
34723472 // state to success, so that "unable to resolve inferred error set" errors
......@@ -3640,7 +3640,7 @@ pub fn processExports(pt: Zcu.PerThread) !void {
36403640 },
36413641 };
36423642 if (!found_existing) value_ptr.* = .empty;
3643 try value_ptr.append(gpa, @enumFromInt(export_idx));
3643 try value_ptr.append(gpa, @fromBackingInt(@intCast(export_idx)));
36443644 }
36453645 }
36463646
......@@ -3994,7 +3994,7 @@ pub fn ptrType(pt: Zcu.PerThread, info: InternPool.Key.PtrType) Allocator.Error!
39943994 canon_info.packed_offset.host_size = 0;
39953995 }
39963996 },
3997 _ => assert(@intFromEnum(info.flags.vector_index) < info.packed_offset.host_size),
3997 _ => assert(@backingInt(info.flags.vector_index) < info.packed_offset.host_size),
39983998 }
39993999
40004000 return .fromInterned(try pt.intern(.{ .ptr_type = canon_info }));
src/codegen.zig+6-6
......@@ -793,7 +793,7 @@ fn lowerNavRef(
793793 @panic("TODO add out_reloc for this");
794794 } else {
795795 try wasm.func_table_fixups.append(gpa, .{
796 .table_index = @enumFromInt(gop.index),
796 .table_index = @fromBackingInt(@intCast(gop.index)),
797797 .offset = @intCast(w.end),
798798 });
799799 }
......@@ -855,7 +855,7 @@ pub fn genNavRef(
855855 .internal => {
856856 const sym_index = try zo.getOrCreateMetadataForNav(zcu, nav_index);
857857 if (is_threadlocal) zo.symbol(sym_index).flags.is_tls = true;
858 return @enumFromInt(sym_index);
858 return @fromBackingInt(@intCast(sym_index));
859859 },
860860 .strong, .weak => {
861861 const sym_index = try elf_file.getGlobalSymbol(nav.name.toSlice(ip), lib_name.toSlice(ip));
......@@ -866,7 +866,7 @@ pub fn genNavRef(
866866 .link_once => unreachable,
867867 }
868868 if (is_threadlocal) zo.symbol(sym_index).flags.is_tls = true;
869 return @enumFromInt(sym_index);
869 return @fromBackingInt(@intCast(sym_index));
870870 },
871871 .link_once => unreachable,
872872 }
......@@ -878,7 +878,7 @@ pub fn genNavRef(
878878 .internal => {
879879 const sym_index = try zo.getOrCreateMetadataForNav(macho_file, nav_index);
880880 if (is_threadlocal) zo.symbols.items[sym_index].flags.tlv = true;
881 return @enumFromInt(sym_index);
881 return @fromBackingInt(@intCast(sym_index));
882882 },
883883 .strong, .weak => {
884884 const sym_index = try macho_file.getGlobalSymbol(nav.name.toSlice(ip), lib_name.toSlice(ip));
......@@ -889,12 +889,12 @@ pub fn genNavRef(
889889 .link_once => unreachable,
890890 }
891891 if (is_threadlocal) zo.symbols.items[sym_index].flags.tlv = true;
892 return @enumFromInt(sym_index);
892 return @fromBackingInt(@intCast(sym_index));
893893 },
894894 .link_once => unreachable,
895895 }
896896 } else if (lf.cast(.coff2)) |coff| {
897 return @enumFromInt(@intFromEnum(try coff.navSymbol(zcu, nav_index)));
897 return @fromBackingInt(@intCast(@backingInt(try coff.navSymbol(zcu, nav_index))));
898898 } else {
899899 std.debug.panic("TODO genNavRef for '{t}'", .{lf.tag});
900900 }
src/codegen/aarch64.zig+11-11
......@@ -72,8 +72,8 @@ pub fn generate(
7272 const air_main_body = air.getMainBody();
7373 var param_it: Select.CallAbiIterator = .init;
7474 const air_args = for (air_main_body, 0..) |air_inst_index, body_index| {
75 if (air.instructions.items(.tag)[@intFromEnum(air_inst_index)] != .arg) break air_main_body[0..body_index];
76 const arg = air.instructions.items(.data)[@intFromEnum(air_inst_index)].arg;
75 if (air.instructions.items(.tag)[@backingInt(air_inst_index)] != .arg) break air_main_body[0..body_index];
76 const arg = air.instructions.items(.data)[@backingInt(air_inst_index)].arg;
7777 const param_ty = arg.ty.toType();
7878 const param_vi = param_vi: {
7979 if (arg.zir_param_index >= named_params_len) {
......@@ -82,17 +82,17 @@ pub fn generate(
8282 }
8383 break :param_vi try param_it.param(&isel, param_ty);
8484 };
85 tracking_log.debug("${d} <- %{d}", .{ @intFromEnum(param_vi.?), @intFromEnum(air_inst_index) });
85 tracking_log.debug("${d} <- %{d}", .{ @backingInt(param_vi.?), @backingInt(air_inst_index) });
8686 try isel.live_values.putNoClobber(gpa, air_inst_index, param_vi.?);
8787 } else unreachable;
8888
8989 const saved_gra_start = if (mod.strip) param_it.ngrn else Select.CallAbiIterator.ngrn_start;
9090 const saved_gra_end = if (is_sysv_var_args) Select.CallAbiIterator.ngrn_end else param_it.ngrn;
91 const saved_gra_len = @intFromEnum(saved_gra_end) - @intFromEnum(saved_gra_start);
91 const saved_gra_len = @backingInt(saved_gra_end) - @backingInt(saved_gra_start);
9292
9393 const saved_vra_start = if (mod.strip) param_it.nsrn else Select.CallAbiIterator.nsrn_start;
9494 const saved_vra_end = if (is_sysv_var_args) Select.CallAbiIterator.nsrn_end else param_it.nsrn;
95 const saved_vra_len = @intFromEnum(saved_vra_end) - @intFromEnum(saved_vra_start);
95 const saved_vra_len = @backingInt(saved_vra_end) - @backingInt(saved_vra_start);
9696
9797 const frame_record = 2;
9898 const named_stack_args: Select.Value.Indirect = .{
......@@ -106,13 +106,13 @@ pub fn generate(
106106 .__stack = stack_var_args,
107107 .__gr_top = gr_top,
108108 .__vr_top = vr_top,
109 .__gr_offs = @as(i32, @intFromEnum(Select.CallAbiIterator.ngrn_end) - @intFromEnum(param_it.ngrn)) * -8,
110 .__vr_offs = @as(i32, @intFromEnum(Select.CallAbiIterator.nsrn_end) - @intFromEnum(param_it.nsrn)) * -16,
109 .__gr_offs = @as(i32, @backingInt(Select.CallAbiIterator.ngrn_end) - @backingInt(param_it.ngrn)) * -8,
110 .__vr_offs = @as(i32, @backingInt(Select.CallAbiIterator.nsrn_end) - @backingInt(param_it.nsrn)) * -16,
111111 } } else .{ .other = stack_var_args };
112112
113113 // translate arg locations from caller-based to callee-based
114114 for (air_args) |air_inst_index| {
115 assert(air.instructions.items(.tag)[@intFromEnum(air_inst_index)] == .arg);
115 assert(air.instructions.items(.tag)[@backingInt(air_inst_index)] == .arg);
116116 const arg_vi = isel.live_values.get(air_inst_index).?;
117117 const passed_vi = switch (arg_vi.parent(&isel)) {
118118 .unallocated, .stack_slot => arg_vi,
......@@ -125,9 +125,9 @@ pub fn generate(
125125 const first_passed_part_vi = part_it.next().?;
126126 const hint_ra = first_passed_part_vi.hint(&isel).?;
127127 passed_vi.setParent(&isel, .{ .stack_slot = if (hint_ra.isVector())
128 vr_top.withOffset(@as(i8, -16) * (@intFromEnum(saved_vra_end) - @intFromEnum(hint_ra)))
128 vr_top.withOffset(@as(i8, -16) * (@backingInt(saved_vra_end) - @backingInt(hint_ra)))
129129 else
130 gr_top.withOffset(@as(i8, -8) * (@intFromEnum(saved_gra_end) - @intFromEnum(hint_ra))) });
130 gr_top.withOffset(@as(i8, -8) * (@backingInt(saved_gra_end) - @backingInt(hint_ra))) });
131131 },
132132 .stack_slot => |stack_slot| {
133133 assert(stack_slot.base == .sp);
......@@ -140,7 +140,7 @@ pub fn generate(
140140 ret: {
141141 var ret_it: Select.CallAbiIterator = .init;
142142 const ret_vi = try ret_it.ret(&isel, .fromInterned(func_type.return_type)) orelse break :ret;
143 tracking_log.debug("${d} <- %main", .{@intFromEnum(ret_vi)});
143 tracking_log.debug("${d} <- %main", .{@backingInt(ret_vi)});
144144 try isel.live_values.putNoClobber(gpa, Select.Block.main, ret_vi);
145145 }
146146
src/codegen/aarch64/Disassemble.zig+23-23
......@@ -363,7 +363,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
363363 return writer.print("{f}{s}{f}{s}#0x{d}{s}.{c}0x{x}", .{
364364 fmtCase(group.op, dis.case),
365365 dis.mnemonic_operands_separator,
366 group.Rt.decode(.{}).general(@enumFromInt(group.b5)).fmtCase(dis.case),
366 group.Rt.decode(.{}).general(@fromBackingInt(@intCast(group.b5))).fmtCase(dis.case),
367367 dis.operands_separator,
368368 @as(u6, group.b5) << 5 |
369369 @as(u6, group.b40) << 0,
......@@ -383,7 +383,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
383383 const decoded = integer.decode();
384384 if (decoded == .unallocated) break :unallocated;
385385 const group = integer.group;
386 const sf: aarch64.encoding.Register.GeneralSize = @enumFromInt(group.opc >> 1);
386 const sf: aarch64.encoding.Register.GeneralSize = @fromBackingInt(@intCast(group.opc >> 1));
387387 return writer.print("{f}{s}{f}{s}{f}{s}[{f}]{s}#{s}0x{x}", .{
388388 fmtCase(decoded, dis.case),
389389 dis.mnemonic_operands_separator,
......@@ -394,7 +394,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
394394 group.Rn.decode(.{ .sp = true }).x().fmtCase(dis.case),
395395 dis.operands_separator,
396396 if (group.imm7 < 0) "-" else "",
397 @as(u10, @abs(group.imm7)) << (@as(u2, 2) + @intFromEnum(sf)),
397 @as(u10, @abs(group.imm7)) << (@as(u2, 2) + @backingInt(sf)),
398398 });
399399 },
400400 .vector => |vector| {
......@@ -412,7 +412,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
412412 group.Rn.decode(.{ .sp = true }).x().fmtCase(dis.case),
413413 dis.operands_separator,
414414 if (group.imm7 < 0) "-" else "",
415 @as(u11, @abs(group.imm7)) << (@as(u3, 2) + @intFromEnum(vs)),
415 @as(u11, @abs(group.imm7)) << (@as(u3, 2) + @backingInt(vs)),
416416 });
417417 },
418418 },
......@@ -421,7 +421,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
421421 const decoded = integer.decode();
422422 if (decoded == .unallocated) break :unallocated;
423423 const group = integer.group;
424 const sf: aarch64.encoding.Register.GeneralSize = @enumFromInt(group.opc >> 1);
424 const sf: aarch64.encoding.Register.GeneralSize = @fromBackingInt(@intCast(group.opc >> 1));
425425 try writer.print("{f}{s}{f}{s}{f}{s}[{f}", .{
426426 fmtCase(decoded, dis.case),
427427 dis.mnemonic_operands_separator,
......@@ -434,7 +434,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
434434 if (group.imm7 != 0) try writer.print("{s}#{s}0x{x}", .{
435435 dis.operands_separator,
436436 if (group.imm7 < 0) "-" else "",
437 @as(u10, @abs(group.imm7)) << (@as(u2, 2) + @intFromEnum(sf)),
437 @as(u10, @abs(group.imm7)) << (@as(u2, 2) + @backingInt(sf)),
438438 });
439439 return writer.writeByte(']');
440440 },
......@@ -455,7 +455,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
455455 if (group.imm7 != 0) try writer.print("{s}#{s}0x{x}", .{
456456 dis.operands_separator,
457457 if (group.imm7 < 0) "-" else "",
458 @as(u11, @abs(group.imm7)) << (@as(u3, 2) + @intFromEnum(vs)),
458 @as(u11, @abs(group.imm7)) << (@as(u3, 2) + @backingInt(vs)),
459459 });
460460 return writer.writeByte(']');
461461 },
......@@ -465,7 +465,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
465465 const decoded = integer.decode();
466466 if (decoded == .unallocated) break :unallocated;
467467 const group = integer.group;
468 const sf: aarch64.encoding.Register.GeneralSize = @enumFromInt(group.opc >> 1);
468 const sf: aarch64.encoding.Register.GeneralSize = @fromBackingInt(@intCast(group.opc >> 1));
469469 return writer.print("{f}{s}{f}{s}{f}{s}[{f}{s}#{s}0x{x}]!", .{
470470 fmtCase(decoded, dis.case),
471471 dis.mnemonic_operands_separator,
......@@ -476,7 +476,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
476476 group.Rn.decode(.{ .sp = true }).x().fmtCase(dis.case),
477477 dis.operands_separator,
478478 if (group.imm7 < 0) "-" else "",
479 @as(u10, @abs(group.imm7)) << (@as(u2, 2) + @intFromEnum(sf)),
479 @as(u10, @abs(group.imm7)) << (@as(u2, 2) + @backingInt(sf)),
480480 });
481481 },
482482 .vector => |vector| {
......@@ -494,7 +494,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
494494 group.Rn.decode(.{ .sp = true }).x().fmtCase(dis.case),
495495 dis.operands_separator,
496496 if (group.imm7 < 0) "-" else "",
497 @as(u11, @abs(group.imm7)) << (@as(u3, 2) + @intFromEnum(vs)),
497 @as(u11, @abs(group.imm7)) << (@as(u3, 2) + @backingInt(vs)),
498498 });
499499 },
500500 },
......@@ -597,7 +597,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
597597 fmtCase(group.option, dis.case),
598598 });
599599 if (group.S) try writer.print(" #{d}", .{
600 @intFromEnum(group.size),
600 @backingInt(group.size),
601601 });
602602 }
603603 return writer.writeByte(']');
......@@ -627,7 +627,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
627627 });
628628 if (group.imm12 > 0) try writer.print("{s}#0x{x}", .{
629629 dis.operands_separator,
630 @as(u15, group.imm12) << @intFromEnum(group.size),
630 @as(u15, group.imm12) << @backingInt(group.size),
631631 });
632632 return writer.writeByte(']');
633633 },
......@@ -969,10 +969,10 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
969969 else
970970 fmtCase(decoded, dis.case),
971971 dis.mnemonic_operands_separator,
972 group.Rd.decode(.{ .V = true }).scalar(@enumFromInt(elem_size)).fmtCase(dis.case),
972 group.Rd.decode(.{ .V = true }).scalar(@fromBackingInt(@intCast(elem_size))).fmtCase(dis.case),
973973 dis.operands_separator,
974974 group.Rn.decode(.{ .V = true }).element(
975 @enumFromInt(elem_size),
975 @fromBackingInt(@intCast(elem_size)),
976976 @intCast(group.imm5 >> (elem_size + 1)),
977977 ).fmtCase(dis.case),
978978 });
......@@ -1066,11 +1066,11 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
10661066 .unallocated => unreachable,
10671067 .dup => |dup| group.Rd.decode(.{ .V = true }).vector(.wrap(.{
10681068 .size = dup.Q,
1069 .elem_size = @enumFromInt(elem_size),
1069 .elem_size = @fromBackingInt(@intCast(elem_size)),
10701070 })),
10711071 inline .smov, .umov => |mov| group.Rd.decode(.{}).general(mov.Q),
10721072 .ins => group.Rd.decode(.{ .V = true }).element(
1073 @enumFromInt(elem_size),
1073 @fromBackingInt(@intCast(elem_size)),
10741074 @intCast(group.imm5 >> (elem_size + 1)),
10751075 ),
10761076 }.fmtCase(dis.case),
......@@ -1079,7 +1079,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
10791079 .unallocated => unreachable,
10801080 .dup => |dup| switch (dup.imm4) {
10811081 .element => group.Rn.decode(.{ .V = true }).element(
1082 @enumFromInt(elem_size),
1082 @fromBackingInt(@intCast(elem_size)),
10831083 @intCast(group.imm5 >> (elem_size + 1)),
10841084 ),
10851085 .general => group.Rn.decode(.{}).general(switch (elem_size) {
......@@ -1090,12 +1090,12 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
10901090 _ => unreachable,
10911091 },
10921092 .smov, .umov => group.Rn.decode(.{ .V = true }).element(
1093 @enumFromInt(elem_size),
1093 @fromBackingInt(@intCast(elem_size)),
10941094 @intCast(group.imm5 >> (elem_size + 1)),
10951095 ),
10961096 .ins => |ins| switch (ins.op) {
10971097 .element => group.Rn.decode(.{ .V = true }).element(
1098 @enumFromInt(elem_size),
1098 @fromBackingInt(@intCast(elem_size)),
10991099 @intCast(group.imm4 >> @intCast(elem_size)),
11001100 ),
11011101 .general => group.Rn.decode(.{}).general(switch (elem_size) {
......@@ -1263,7 +1263,7 @@ pub fn printInstruction(dis: Disassemble, inst: aarch64.encoding.Instruction, wr
12631263 .size = group.Q,
12641264 .elem_size = switch (group.o2) {
12651265 0b1 => .half,
1266 0b0 => DataProcessingVector.Sz.toSize(@enumFromInt(group.op)),
1266 0b0 => DataProcessingVector.Sz.toSize(@fromBackingInt(@intCast(group.op))),
12671267 },
12681268 })).fmtCase(dis.case),
12691269 });
......@@ -1404,7 +1404,7 @@ pub const RegisterFormatter = struct {
14041404 .r30,
14051405 => |alias| try writer.print("{c}{d}", .{
14061406 data.case.convert(size.prefix()),
1407 @intFromEnum(alias.encode(.{})),
1407 @backingInt(alias.encode(.{})),
14081408 }),
14091409 .zr => try writer.print("{c}{f}", .{
14101410 data.case.convert(size.prefix()),
......@@ -1420,7 +1420,7 @@ pub const RegisterFormatter = struct {
14201420 },
14211421 .scalar => |size| try writer.print("{c}{d}", .{
14221422 data.case.convert(size.prefix()),
1423 @intFromEnum(data.reg.alias.encode(.{ .V = true })),
1423 @backingInt(data.reg.alias.encode(.{ .V = true })),
14241424 }),
14251425 .vector => |arrangement| try writer.print("{f}.{f}", .{
14261426 fmtCase(data.reg.alias, data.case),
......@@ -1433,7 +1433,7 @@ pub const RegisterFormatter = struct {
14331433 }),
14341434 .scalable => try writer.print("{c}{d}", .{
14351435 data.case.convert('z'),
1436 @intFromEnum(data.reg.alias.encode(.{ .V = true })),
1436 @backingInt(data.reg.alias.encode(.{ .V = true })),
14371437 }),
14381438 }
14391439 }
src/codegen/aarch64/Mir.zig+23-23
......@@ -122,11 +122,11 @@ pub fn emit(
122122 zcu,
123123 atom_index,
124124 if (lf.cast(.elf)) |ef|
125 @enumFromInt(ef.zigObjectPtr().?.getOrCreateMetadataForLazySymbol(ef, pt, lazy_reloc.symbol) catch |err|
126 return zcu.codegenFail(func.owner_nav, "{s} creating lazy symbol", .{@errorName(err)}))
125 @fromBackingInt(@intCast(ef.zigObjectPtr().?.getOrCreateMetadataForLazySymbol(ef, pt, lazy_reloc.symbol) catch |err|
126 return zcu.codegenFail(func.owner_nav, "{s} creating lazy symbol", .{@errorName(err)})))
127127 else if (lf.cast(.macho)) |mf|
128 @enumFromInt(mf.getZigObject().?.getOrCreateMetadataForLazySymbol(mf, pt, lazy_reloc.symbol) catch |err|
129 return zcu.codegenFail(func.owner_nav, "{s} creating lazy symbol", .{@errorName(err)}))
128 @fromBackingInt(@intCast(mf.getZigObject().?.getOrCreateMetadataForLazySymbol(mf, pt, lazy_reloc.symbol) catch |err|
129 return zcu.codegenFail(func.owner_nav, "{s} creating lazy symbol", .{@errorName(err)})))
130130 else
131131 return zcu.codegenFail(func.owner_nav, "external symbols unimplemented for {t}", .{lf.tag}),
132132 mir.body[lazy_reloc.reloc.label],
......@@ -139,9 +139,9 @@ pub fn emit(
139139 zcu,
140140 atom_index,
141141 if (lf.cast(.elf)) |ef|
142 @enumFromInt(try ef.getGlobalSymbol(std.mem.span(global_reloc.name), null))
142 @fromBackingInt(@intCast(try ef.getGlobalSymbol(std.mem.span(global_reloc.name), null)))
143143 else if (lf.cast(.macho)) |mf|
144 @enumFromInt(try mf.getGlobalSymbol(std.mem.span(global_reloc.name), null))
144 @fromBackingInt(@intCast(try mf.getGlobalSymbol(std.mem.span(global_reloc.name), null)))
145145 else
146146 return zcu.codegenFail(func.owner_nav, "external symbols unimplemented for {t}", .{lf.tag}),
147147 mir.body[global_reloc.reloc.label],
......@@ -189,7 +189,7 @@ fn emitReloc(
189189 else => unreachable,
190190 .data_processing_immediate => |decoded| if (lf.cast(.elf)) |ef| {
191191 const zo = ef.zigObjectPtr().?;
192 const atom = zo.symbol(@intFromEnum(atom_index)).atom(ef).?;
192 const atom = zo.symbol(@backingInt(atom_index)).atom(ef).?;
193193 const r_type: std.elf.R_AARCH64 = switch (decoded.decode()) {
194194 else => unreachable,
195195 .pc_relative_addressing => |pc_relative_addressing| switch (pc_relative_addressing.group.op) {
......@@ -212,12 +212,12 @@ fn emitReloc(
212212 };
213213 try atom.addReloc(gpa, .{
214214 .r_offset = offset,
215 .r_info = @as(u64, @intFromEnum(sym_index)) << 32 | @intFromEnum(r_type),
215 .r_info = @as(u64, @backingInt(sym_index)) << 32 | @backingInt(r_type),
216216 .r_addend = @bitCast(addend),
217217 }, zo);
218218 } else if (lf.cast(.macho)) |mf| {
219219 const zo = mf.getZigObject().?;
220 const atom = zo.symbols.items[@intFromEnum(atom_index)].getAtom(mf).?;
220 const atom = zo.symbols.items[@backingInt(atom_index)].getAtom(mf).?;
221221 switch (decoded.decode()) {
222222 else => unreachable,
223223 .pc_relative_addressing => |pc_relative_addressing| switch (pc_relative_addressing.group.op) {
......@@ -225,7 +225,7 @@ fn emitReloc(
225225 .adrp => try atom.addReloc(mf, .{
226226 .tag = .@"extern",
227227 .offset = offset,
228 .target = @intFromEnum(sym_index),
228 .target = @backingInt(sym_index),
229229 .addend = @bitCast(addend),
230230 .type = switch (kind) {
231231 .direct => .page,
......@@ -235,7 +235,7 @@ fn emitReloc(
235235 .pcrel = true,
236236 .has_subtractor = false,
237237 .length = 2,
238 .symbolnum = @intCast(@intFromEnum(sym_index)),
238 .symbolnum = @intCast(@backingInt(sym_index)),
239239 },
240240 }),
241241 },
......@@ -243,7 +243,7 @@ fn emitReloc(
243243 .add => try atom.addReloc(mf, .{
244244 .tag = .@"extern",
245245 .offset = offset,
246 .target = @intFromEnum(sym_index),
246 .target = @backingInt(sym_index),
247247 .addend = @bitCast(addend),
248248 .type = switch (kind) {
249249 .direct => .pageoff,
......@@ -253,7 +253,7 @@ fn emitReloc(
253253 .pcrel = false,
254254 .has_subtractor = false,
255255 .length = 2,
256 .symbolnum = @intCast(@intFromEnum(sym_index)),
256 .symbolnum = @intCast(@backingInt(sym_index)),
257257 },
258258 }),
259259 .sub => unreachable,
......@@ -262,36 +262,36 @@ fn emitReloc(
262262 },
263263 .branch_exception_generating_system => |decoded| if (lf.cast(.elf)) |ef| {
264264 const zo = ef.zigObjectPtr().?;
265 const atom = zo.symbol(@intFromEnum(atom_index)).atom(ef).?;
265 const atom = zo.symbol(@backingInt(atom_index)).atom(ef).?;
266266 const r_type: std.elf.R_AARCH64 = switch (decoded.decode().unconditional_branch_immediate.group.op) {
267267 .b => .JUMP26,
268268 .bl => .CALL26,
269269 };
270270 try atom.addReloc(gpa, .{
271271 .r_offset = offset,
272 .r_info = @as(u64, @intFromEnum(sym_index)) << 32 | @intFromEnum(r_type),
272 .r_info = @as(u64, @backingInt(sym_index)) << 32 | @backingInt(r_type),
273273 .r_addend = @bitCast(addend),
274274 }, zo);
275275 } else if (lf.cast(.macho)) |mf| {
276276 const zo = mf.getZigObject().?;
277 const atom = zo.symbols.items[@intFromEnum(atom_index)].getAtom(mf).?;
277 const atom = zo.symbols.items[@backingInt(atom_index)].getAtom(mf).?;
278278 try atom.addReloc(mf, .{
279279 .tag = .@"extern",
280280 .offset = offset,
281 .target = @intFromEnum(sym_index),
281 .target = @backingInt(sym_index),
282282 .addend = @bitCast(addend),
283283 .type = .branch,
284284 .meta = .{
285285 .pcrel = true,
286286 .has_subtractor = false,
287287 .length = 2,
288 .symbolnum = @intCast(@intFromEnum(sym_index)),
288 .symbolnum = @intCast(@backingInt(sym_index)),
289289 },
290290 });
291291 },
292292 .load_store => |decoded| if (lf.cast(.elf)) |ef| {
293293 const zo = ef.zigObjectPtr().?;
294 const atom = zo.symbol(@intFromEnum(atom_index)).atom(ef).?;
294 const atom = zo.symbol(@backingInt(atom_index)).atom(ef).?;
295295 const r_type: std.elf.R_AARCH64 = switch (decoded.decode().register_unsigned_immediate.decode()) {
296296 .integer => |integer| switch (integer.decode()) {
297297 .unallocated, .prfm => unreachable,
......@@ -332,16 +332,16 @@ fn emitReloc(
332332 };
333333 try atom.addReloc(gpa, .{
334334 .r_offset = offset,
335 .r_info = @as(u64, @intFromEnum(sym_index)) << 32 | @intFromEnum(r_type),
335 .r_info = @as(u64, @backingInt(sym_index)) << 32 | @backingInt(r_type),
336336 .r_addend = @bitCast(addend),
337337 }, zo);
338338 } else if (lf.cast(.macho)) |mf| {
339339 const zo = mf.getZigObject().?;
340 const atom = zo.symbols.items[@intFromEnum(atom_index)].getAtom(mf).?;
340 const atom = zo.symbols.items[@backingInt(atom_index)].getAtom(mf).?;
341341 try atom.addReloc(mf, .{
342342 .tag = .@"extern",
343343 .offset = offset,
344 .target = @intFromEnum(sym_index),
344 .target = @backingInt(sym_index),
345345 .addend = @bitCast(addend),
346346 .type = switch (kind) {
347347 .direct => .pageoff,
......@@ -351,7 +351,7 @@ fn emitReloc(
351351 .pcrel = false,
352352 .has_subtractor = false,
353353 .length = 2,
354 .symbolnum = @intCast(@intFromEnum(sym_index)),
354 .symbolnum = @intCast(@backingInt(sym_index)),
355355 },
356356 });
357357 },
src/codegen/aarch64/Select.zig+111-111
......@@ -52,9 +52,9 @@ pub const Block = struct {
5252 live_registers: LiveRegisters,
5353 target_label: u32,
5454
55 pub const main: Air.Inst.Index = @enumFromInt(
55 pub const main: Air.Inst.Index = @fromBackingInt(@intCast(
5656 std.math.maxInt(@typeInfo(Air.Inst.Index).@"enum".tag_type),
57 );
57 ));
5858
5959 fn branch(target_block: *const Block, isel: *Select) !void {
6060 if (isel.instructions.items.len > target_block.target_label) {
......@@ -72,19 +72,19 @@ pub const Loop = struct {
7272 live_registers: LiveRegisters,
7373 repeat_list: u32,
7474
75 pub const invalid: Air.Inst.Index = @enumFromInt(
75 pub const invalid: Air.Inst.Index = @fromBackingInt(@intCast(
7676 std.math.maxInt(@typeInfo(Air.Inst.Index).@"enum".tag_type),
77 );
77 ));
7878
7979 pub const Index = enum(u32) {
8080 _,
8181
8282 fn inst(li: Loop.Index, isel: *Select) Air.Inst.Index {
83 return isel.loops.keys()[@intFromEnum(li)];
83 return isel.loops.keys()[@backingInt(li)];
8484 }
8585
8686 fn get(li: Loop.Index, isel: *Select) *Loop {
87 return &isel.loops.values()[@intFromEnum(li)];
87 return &isel.loops.values()[@backingInt(li)];
8888 }
8989 };
9090
......@@ -133,7 +133,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
133133 var air_body_index: usize = 0;
134134 var air_inst_index = air_body[air_body_index];
135135 const initial_def_order_len = isel.def_order.count();
136 air_tag: switch (air_tags[@intFromEnum(air_inst_index)]) {
136 air_tag: switch (air_tags[@backingInt(air_inst_index)]) {
137137 // No "scalarize" legalizations are enabled, so these instructions never appear.
138138 .legalize_vec_elem_val => unreachable,
139139 .legalize_vec_store_elem => unreachable,
......@@ -152,7 +152,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
152152
153153 air_body_index += 1;
154154 air_inst_index = air_body[air_body_index];
155 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
155 continue :air_tag air_tags[@backingInt(air_inst_index)];
156156 },
157157 .add,
158158 .add_safe,
......@@ -209,7 +209,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
209209 .slice_elem_val,
210210 .ptr_elem_val,
211211 => {
212 const bin_op = air_data[@intFromEnum(air_inst_index)].bin_op;
212 const bin_op = air_data[@backingInt(air_inst_index)].bin_op;
213213
214214 try isel.analyzeUse(bin_op.lhs);
215215 try isel.analyzeUse(bin_op.rhs);
......@@ -217,7 +217,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
217217
218218 air_body_index += 1;
219219 air_inst_index = air_body[air_body_index];
220 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
220 continue :air_tag air_tags[@backingInt(air_inst_index)];
221221 },
222222 .ptr_add,
223223 .ptr_sub,
......@@ -229,7 +229,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
229229 .slice_elem_ptr,
230230 .ptr_elem_ptr,
231231 => {
232 const ty_pl = air_data[@intFromEnum(air_inst_index)].ty_pl;
232 const ty_pl = air_data[@backingInt(air_inst_index)].ty_pl;
233233 const bin_op = isel.air.extraData(Air.Bin, ty_pl.payload).data;
234234
235235 try isel.analyzeUse(bin_op.lhs);
......@@ -238,17 +238,17 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
238238
239239 air_body_index += 1;
240240 air_inst_index = air_body[air_body_index];
241 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
241 continue :air_tag air_tags[@backingInt(air_inst_index)];
242242 },
243243 .alloc => {
244 const ty = air_data[@intFromEnum(air_inst_index)].ty;
244 const ty = air_data[@backingInt(air_inst_index)].ty;
245245
246246 isel.stack_align = isel.stack_align.maxStrict(ty.ptrAlignment(zcu));
247247 try isel.def_order.putNoClobber(gpa, air_inst_index, {});
248248
249249 air_body_index += 1;
250250 air_inst_index = air_body[air_body_index];
251 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
251 continue :air_tag air_tags[@backingInt(air_inst_index)];
252252 },
253253 .inferred_alloc,
254254 .inferred_alloc_comptime,
......@@ -260,7 +260,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
260260 .spirv_runtime_array_len,
261261 => unreachable,
262262 .ret_ptr => {
263 const ty = air_data[@intFromEnum(air_inst_index)].ty;
263 const ty = air_data[@backingInt(air_inst_index)].ty;
264264
265265 if (isel.live_values.get(Block.main)) |ret_vi| switch (ret_vi.parent(isel)) {
266266 .unallocated, .stack_slot => isel.stack_align = isel.stack_align.maxStrict(ty.ptrAlignment(zcu)),
......@@ -271,10 +271,10 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
271271
272272 air_body_index += 1;
273273 air_inst_index = air_body[air_body_index];
274 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
274 continue :air_tag air_tags[@backingInt(air_inst_index)];
275275 },
276276 .assembly => {
277 const ty_pl = air_data[@intFromEnum(air_inst_index)].ty_pl;
277 const ty_pl = air_data[@backingInt(air_inst_index)].ty_pl;
278278 const unwrapped_asm = isel.air.unwrapAsm(air_inst_index);
279279
280280 for (unwrapped_asm.outputs) |operand| if (operand != .none) try isel.analyzeUse(operand);
......@@ -282,7 +282,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
282282
283283 air_body_index += 1;
284284 air_inst_index = air_body[air_body_index];
285 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
285 continue :air_tag air_tags[@backingInt(air_inst_index)];
286286 },
287287 .not,
288288 .clz,
......@@ -327,14 +327,14 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
327327 .c_va_arg,
328328 .c_va_copy,
329329 => {
330 const ty_op = air_data[@intFromEnum(air_inst_index)].ty_op;
330 const ty_op = air_data[@backingInt(air_inst_index)].ty_op;
331331
332332 try isel.analyzeUse(ty_op.operand);
333333 try isel.def_order.putNoClobber(gpa, air_inst_index, {});
334334
335335 air_body_index += 1;
336336 air_inst_index = air_body[air_body_index];
337 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
337 continue :air_tag air_tags[@backingInt(air_inst_index)];
338338 },
339339 .bit_cast,
340340 .ptr_cast,
......@@ -345,7 +345,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
345345 .int_from_error,
346346 .union_from_enum,
347347 => {
348 const ty_op = air_data[@intFromEnum(air_inst_index)].ty_op;
348 const ty_op = air_data[@backingInt(air_inst_index)].ty_op;
349349 maybe_noop: {
350350 if (ty_op.ty.toInterned().? != isel.air.typeOf(ty_op.operand, ip).toIntern()) break :maybe_noop;
351351 if (true) break :maybe_noop;
......@@ -360,7 +360,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
360360
361361 air_body_index += 1;
362362 air_inst_index = air_body[air_body_index];
363 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
363 continue :air_tag air_tags[@backingInt(air_inst_index)];
364364 },
365365 .bit_cast_safe => unreachable, // legalized
366366 inline .block, .dbg_inline_block => |air_tag| {
......@@ -388,7 +388,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
388388
389389 air_body_index += 1;
390390 air_inst_index = air_body[air_body_index];
391 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
391 continue :air_tag air_tags[@backingInt(air_inst_index)];
392392 },
393393 .loop => {
394394 const air_body_block = isel.air.unwrapBlock(air_inst_index);
......@@ -397,7 +397,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
397397 const initial_dom_len = isel.dom_len;
398398 isel.dom_start = @intCast(isel.dom.items.len);
399399 isel.dom_len = @intCast(isel.blocks.count());
400 try isel.active_loops.append(gpa, @enumFromInt(isel.loops.count()));
400 try isel.active_loops.append(gpa, @fromBackingInt(@intCast(isel.loops.count())));
401401 try isel.loops.putNoClobber(gpa, air_inst_index, .{
402402 .def_order = @intCast(isel.def_order.count()),
403403 .dom = isel.dom_start,
......@@ -420,7 +420,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
420420 },
421421 .repeat, .trap, .unreach => air_body_index += 1,
422422 .br => {
423 const br = air_data[@intFromEnum(air_inst_index)].br;
423 const br = air_data[@backingInt(air_inst_index)].br;
424424 const block_index = isel.blocks.getIndex(br.block_inst).?;
425425 if (block_index < isel.dom_len) isel.dom.items[isel.dom_start + block_index / @bitSizeOf(DomInt)] |= @as(DomInt, 1) << @truncate(block_index);
426426 try isel.analyzeUse(br.operand);
......@@ -430,7 +430,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
430430 .breakpoint, .dbg_stmt, .dbg_empty_stmt, .dbg_var_ptr, .dbg_var_val, .dbg_arg_inline, .c_va_end => {
431431 air_body_index += 1;
432432 air_inst_index = air_body[air_body_index];
433 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
433 continue :air_tag air_tags[@backingInt(air_inst_index)];
434434 },
435435 .call,
436436 .call_always_tail,
......@@ -486,7 +486,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
486486
487487 var ret_it: CallAbiIterator = .init;
488488 if (try ret_it.ret(isel, isel.air.typeOfIndex(air_inst_index, ip))) |ret_vi| {
489 tracking_log.debug("${d} <- %{d}", .{ @intFromEnum(ret_vi), @intFromEnum(air_inst_index) });
489 tracking_log.debug("${d} <- %{d}", .{ @backingInt(ret_vi), @backingInt(air_inst_index) });
490490 switch (ret_vi.parent(isel)) {
491491 .unallocated, .stack_slot => {},
492492 .value, .constant => unreachable,
......@@ -504,7 +504,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
504504
505505 air_body_index += 1;
506506 air_inst_index = air_body[air_body_index];
507 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
507 continue :air_tag air_tags[@backingInt(air_inst_index)];
508508 },
509509 .sqrt,
510510 .sin,
......@@ -534,17 +534,17 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
534534 .error_name,
535535 .cmp_lte_errors_len,
536536 => {
537 const un_op = air_data[@intFromEnum(air_inst_index)].un_op;
537 const un_op = air_data[@backingInt(air_inst_index)].un_op;
538538
539539 try isel.analyzeUse(un_op);
540540 try isel.def_order.putNoClobber(gpa, air_inst_index, {});
541541
542542 air_body_index += 1;
543543 air_inst_index = air_body[air_body_index];
544 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
544 continue :air_tag air_tags[@backingInt(air_inst_index)];
545545 },
546546 .cmp_vector, .cmp_vector_optimized => {
547 const ty_pl = air_data[@intFromEnum(air_inst_index)].ty_pl;
547 const ty_pl = air_data[@backingInt(air_inst_index)].ty_pl;
548548 const extra = isel.air.extraData(Air.VectorCmp, ty_pl.payload).data;
549549
550550 try isel.analyzeUse(extra.lhs);
......@@ -553,7 +553,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
553553
554554 air_body_index += 1;
555555 air_inst_index = air_body[air_body_index];
556 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
556 continue :air_tag air_tags[@backingInt(air_inst_index)];
557557 },
558558 .cond_br => {
559559 const cond_br = isel.air.unwrapCondBr(air_inst_index);
......@@ -583,7 +583,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
583583 const initial_dom_len = isel.dom_len;
584584 isel.dom_start = @intCast(isel.dom.items.len);
585585 isel.dom_len = @intCast(isel.blocks.count());
586 try isel.active_loops.append(gpa, @enumFromInt(isel.loops.count()));
586 try isel.active_loops.append(gpa, @fromBackingInt(@intCast(isel.loops.count())));
587587 try isel.loops.putNoClobber(gpa, air_inst_index, .{
588588 .def_order = @intCast(isel.def_order.count()),
589589 .dom = isel.dom_start,
......@@ -609,7 +609,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
609609 air_body_index += 1;
610610 },
611611 .switch_dispatch => {
612 const br = air_data[@intFromEnum(air_inst_index)].br;
612 const br = air_data[@backingInt(air_inst_index)].br;
613613
614614 try isel.analyzeUse(br.operand);
615615
......@@ -624,7 +624,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
624624
625625 air_body_index += 1;
626626 air_inst_index = air_body[air_body_index];
627 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
627 continue :air_tag air_tags[@backingInt(air_inst_index)];
628628 },
629629 .try_ptr, .try_ptr_cold => {
630630 const unwrapped_try = isel.air.unwrapTryPtr(air_inst_index);
......@@ -635,10 +635,10 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
635635
636636 air_body_index += 1;
637637 air_inst_index = air_body[air_body_index];
638 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
638 continue :air_tag air_tags[@backingInt(air_inst_index)];
639639 },
640640 .ret, .ret_safe, .ret_load => {
641 const un_op = air_data[@intFromEnum(air_inst_index)].un_op;
641 const un_op = air_data[@backingInt(air_inst_index)].un_op;
642642 isel.returns = true;
643643
644644 const block_index = 0;
......@@ -661,17 +661,17 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
661661 .atomic_store_release,
662662 .atomic_store_seq_cst,
663663 => {
664 const bin_op = air_data[@intFromEnum(air_inst_index)].bin_op;
664 const bin_op = air_data[@backingInt(air_inst_index)].bin_op;
665665
666666 try isel.analyzeUse(bin_op.lhs);
667667 try isel.analyzeUse(bin_op.rhs);
668668
669669 air_body_index += 1;
670670 air_inst_index = air_body[air_body_index];
671 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
671 continue :air_tag air_tags[@backingInt(air_inst_index)];
672672 },
673673 .struct_field_ptr, .agg_field_val => {
674 const ty_pl = air_data[@intFromEnum(air_inst_index)].ty_pl;
674 const ty_pl = air_data[@backingInt(air_inst_index)].ty_pl;
675675 const extra = isel.air.extraData(Air.StructField, ty_pl.payload).data;
676676
677677 try isel.analyzeUse(extra.struct_operand);
......@@ -679,10 +679,10 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
679679
680680 air_body_index += 1;
681681 air_inst_index = air_body[air_body_index];
682 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
682 continue :air_tag air_tags[@backingInt(air_inst_index)];
683683 },
684684 .slice_len => {
685 const ty_op = air_data[@intFromEnum(air_inst_index)].ty_op;
685 const ty_op = air_data[@backingInt(air_inst_index)].ty_op;
686686
687687 try isel.analyzeUse(ty_op.operand);
688688 try isel.def_order.putNoClobber(gpa, air_inst_index, {});
......@@ -694,10 +694,10 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
694694
695695 air_body_index += 1;
696696 air_inst_index = air_body[air_body_index];
697 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
697 continue :air_tag air_tags[@backingInt(air_inst_index)];
698698 },
699699 .slice_ptr => {
700 const ty_op = air_data[@intFromEnum(air_inst_index)].ty_op;
700 const ty_op = air_data[@backingInt(air_inst_index)].ty_op;
701701
702702 try isel.analyzeUse(ty_op.operand);
703703 try isel.def_order.putNoClobber(gpa, air_inst_index, {});
......@@ -709,17 +709,17 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
709709
710710 air_body_index += 1;
711711 air_inst_index = air_body[air_body_index];
712 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
712 continue :air_tag air_tags[@backingInt(air_inst_index)];
713713 },
714714 .reduce, .reduce_optimized => {
715 const reduce = air_data[@intFromEnum(air_inst_index)].reduce;
715 const reduce = air_data[@backingInt(air_inst_index)].reduce;
716716
717717 try isel.analyzeUse(reduce.operand);
718718 try isel.def_order.putNoClobber(gpa, air_inst_index, {});
719719
720720 air_body_index += 1;
721721 air_inst_index = air_body[air_body_index];
722 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
722 continue :air_tag air_tags[@backingInt(air_inst_index)];
723723 },
724724 .shuffle_one => {
725725 const extra = isel.air.unwrapShuffleOne(zcu, air_inst_index);
......@@ -729,7 +729,7 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
729729
730730 air_body_index += 1;
731731 air_inst_index = air_body[air_body_index];
732 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
732 continue :air_tag air_tags[@backingInt(air_inst_index)];
733733 },
734734 .shuffle_two => {
735735 const extra = isel.air.unwrapShuffleTwo(zcu, air_inst_index);
......@@ -740,10 +740,10 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
740740
741741 air_body_index += 1;
742742 air_inst_index = air_body[air_body_index];
743 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
743 continue :air_tag air_tags[@backingInt(air_inst_index)];
744744 },
745745 .select, .mul_add => {
746 const pl_op = air_data[@intFromEnum(air_inst_index)].pl_op;
746 const pl_op = air_data[@backingInt(air_inst_index)].pl_op;
747747 const bin_op = isel.air.extraData(Air.Bin, pl_op.payload).data;
748748
749749 try isel.analyzeUse(pl_op.operand);
......@@ -753,10 +753,10 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
753753
754754 air_body_index += 1;
755755 air_inst_index = air_body[air_body_index];
756 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
756 continue :air_tag air_tags[@backingInt(air_inst_index)];
757757 },
758758 .cmpxchg_weak, .cmpxchg_strong => {
759 const ty_pl = air_data[@intFromEnum(air_inst_index)].ty_pl;
759 const ty_pl = air_data[@backingInt(air_inst_index)].ty_pl;
760760 const extra = isel.air.extraData(Air.Cmpxchg, ty_pl.payload).data;
761761
762762 try isel.analyzeUse(extra.ptr);
......@@ -766,20 +766,20 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
766766
767767 air_body_index += 1;
768768 air_inst_index = air_body[air_body_index];
769 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
769 continue :air_tag air_tags[@backingInt(air_inst_index)];
770770 },
771771 .atomic_load => {
772 const atomic_load = air_data[@intFromEnum(air_inst_index)].atomic_load;
772 const atomic_load = air_data[@backingInt(air_inst_index)].atomic_load;
773773
774774 try isel.analyzeUse(atomic_load.ptr);
775775 try isel.def_order.putNoClobber(gpa, air_inst_index, {});
776776
777777 air_body_index += 1;
778778 air_inst_index = air_body[air_body_index];
779 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
779 continue :air_tag air_tags[@backingInt(air_inst_index)];
780780 },
781781 .atomic_rmw => {
782 const pl_op = air_data[@intFromEnum(air_inst_index)].pl_op;
782 const pl_op = air_data[@backingInt(air_inst_index)].pl_op;
783783 const extra = isel.air.extraData(Air.AtomicRmw, pl_op.payload).data;
784784
785785 try isel.analyzeUse(extra.operand);
......@@ -787,10 +787,10 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
787787
788788 air_body_index += 1;
789789 air_inst_index = air_body[air_body_index];
790 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
790 continue :air_tag air_tags[@backingInt(air_inst_index)];
791791 },
792792 .aggregate_init => {
793 const ty_pl = air_data[@intFromEnum(air_inst_index)].ty_pl;
793 const ty_pl = air_data[@backingInt(air_inst_index)].ty_pl;
794794 const elements: []const Air.Inst.Ref = @ptrCast(isel.air.extra.items[ty_pl.payload..][0..@intCast(ty_pl.ty.toType().arrayLen(zcu))]);
795795
796796 for (elements) |element| try isel.analyzeUse(element);
......@@ -798,10 +798,10 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
798798
799799 air_body_index += 1;
800800 air_inst_index = air_body[air_body_index];
801 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
801 continue :air_tag air_tags[@backingInt(air_inst_index)];
802802 },
803803 .union_init => {
804 const ty_pl = air_data[@intFromEnum(air_inst_index)].ty_pl;
804 const ty_pl = air_data[@backingInt(air_inst_index)].ty_pl;
805805 const extra = isel.air.extraData(Air.UnionInit, ty_pl.payload).data;
806806
807807 try isel.analyzeUse(extra.init);
......@@ -809,19 +809,19 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
809809
810810 air_body_index += 1;
811811 air_inst_index = air_body[air_body_index];
812 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
812 continue :air_tag air_tags[@backingInt(air_inst_index)];
813813 },
814814 .prefetch => {
815 const prefetch = air_data[@intFromEnum(air_inst_index)].prefetch;
815 const prefetch = air_data[@backingInt(air_inst_index)].prefetch;
816816
817817 try isel.analyzeUse(prefetch.ptr);
818818
819819 air_body_index += 1;
820820 air_inst_index = air_body[air_body_index];
821 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
821 continue :air_tag air_tags[@backingInt(air_inst_index)];
822822 },
823823 .field_parent_ptr => {
824 const ty_pl = air_data[@intFromEnum(air_inst_index)].ty_pl;
824 const ty_pl = air_data[@backingInt(air_inst_index)].ty_pl;
825825 const extra = isel.air.extraData(Air.FieldParentPtr, ty_pl.payload).data;
826826
827827 try isel.analyzeUse(extra.field_ptr);
......@@ -829,16 +829,16 @@ pub fn analyze(isel: *Select, air_body: []const Air.Inst.Index) !void {
829829
830830 air_body_index += 1;
831831 air_inst_index = air_body[air_body_index];
832 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
832 continue :air_tag air_tags[@backingInt(air_inst_index)];
833833 },
834834 .set_err_return_trace => {
835 const un_op = air_data[@intFromEnum(air_inst_index)].un_op;
835 const un_op = air_data[@backingInt(air_inst_index)].un_op;
836836
837837 try isel.analyzeUse(un_op);
838838
839839 air_body_index += 1;
840840 air_inst_index = air_body[air_body_index];
841 continue :air_tag air_tags[@intFromEnum(air_inst_index)];
841 continue :air_tag air_tags[@backingInt(air_inst_index)];
842842 },
843843 }
844844 assert(air_body_index == air_body.len);
......@@ -923,11 +923,11 @@ pub fn body(isel: *Select, air_body: []const Air.Inst.Index) error{ OutOfMemory,
923923 inst_index: Air.Inst.Index,
924924
925925 fn tag(it: *@This(), inst_index: Air.Inst.Index) Air.Inst.Tag {
926 return it.tag_items[@intFromEnum(inst_index)];
926 return it.tag_items[@backingInt(inst_index)];
927927 }
928928
929929 fn data(it: *@This(), inst_index: Air.Inst.Index) Air.Inst.Data {
930 return it.data_items[@intFromEnum(inst_index)];
930 return it.data_items[@backingInt(inst_index)];
931931 }
932932
933933 fn next(it: *@This()) ?Air.Inst.Tag {
......@@ -7619,7 +7619,7 @@ pub fn layout(
76197619
76207620 // callee saved gr area
76217621 save_ra = .r19;
7622 while (save_ra != .r29) : (save_ra = @enumFromInt(@intFromEnum(save_ra) + 1)) {
7622 while (save_ra != .r29) : (save_ra = @fromBackingInt(@intCast(@backingInt(save_ra) + 1))) {
76237623 if (!isel.saved_registers.contains(save_ra)) continue;
76247624 saves_size = std.mem.alignForward(u10, saves_size, 8);
76257625 saves_buf[saves_len] = .{
......@@ -7641,7 +7641,7 @@ pub fn layout(
76417641
76427642 // callee saved vr area
76437643 save_ra = .v8;
7644 while (save_ra != .v16) : (save_ra = @enumFromInt(@intFromEnum(save_ra) + 1)) {
7644 while (save_ra != .v16) : (save_ra = @fromBackingInt(@intCast(@backingInt(save_ra) + 1))) {
76457645 if (!isel.saved_registers.contains(save_ra)) continue;
76467646 saves_size = std.mem.alignForward(u10, saves_size, 8);
76477647 saves_buf[saves_len] = .{
......@@ -7681,7 +7681,7 @@ pub fn layout(
76817681
76827682 // incoming vr arguments
76837683 save_ra = if (mod.strip) incoming.nsrn else CallAbiIterator.nsrn_start;
7684 while (save_ra != if (is_sysv_var_args) CallAbiIterator.nsrn_end else incoming.nsrn) : (save_ra = @enumFromInt(@intFromEnum(save_ra) + 1)) {
7684 while (save_ra != if (is_sysv_var_args) CallAbiIterator.nsrn_end else incoming.nsrn) : (save_ra = @fromBackingInt(@intCast(@backingInt(save_ra) + 1))) {
76857685 saves_size = std.mem.alignForward(u10, saves_size, 16);
76867686 saves_buf[saves_len] = .{
76877687 .class = .vector,
......@@ -7736,7 +7736,7 @@ pub fn layout(
77367736 1 => saves_size += 8,
77377737 }
77387738 save_ra = if (mod.strip) incoming.ngrn else CallAbiIterator.ngrn_start;
7739 while (save_ra != if (is_sysv_var_args) CallAbiIterator.ngrn_end else incoming.ngrn) : (save_ra = @enumFromInt(@intFromEnum(save_ra) + 1)) {
7739 while (save_ra != if (is_sysv_var_args) CallAbiIterator.ngrn_end else incoming.ngrn) : (save_ra = @fromBackingInt(@intCast(@backingInt(save_ra) + 1))) {
77407740 saves_size = std.mem.alignForward(u10, saves_size, 8);
77417741 saves_buf[saves_len] = .{
77427742 .class = .integer,
......@@ -7917,7 +7917,7 @@ fn fmtDom(isel: *Select, inst: Air.Inst.Index, start: u32, len: u32) struct {
79177917 start: u32,
79187918 len: u32,
79197919 pub fn format(data: @This(), writer: *std.Io.Writer) std.Io.Writer.Error!void {
7920 try writer.print("%{d} -> {{", .{@intFromEnum(data.inst)});
7920 try writer.print("%{d} -> {{", .{@backingInt(data.inst)});
79217921 var first = true;
79227922 for (data.isel.blocks.keys()[0..data.len], 0..) |block_inst_index, dom_index| {
79237923 if (@as(u1, @truncate(data.isel.dom.items[
......@@ -7930,7 +7930,7 @@ fn fmtDom(isel: *Select, inst: Air.Inst.Index, start: u32, len: u32) struct {
79307930 }
79317931 switch (block_inst_index) {
79327932 Block.main => try writer.writeAll(" %main"),
7933 else => try writer.print(" %{d}", .{@intFromEnum(block_inst_index)}),
7933 else => try writer.print(" %{d}", .{@backingInt(block_inst_index)}),
79347934 }
79357935 }
79367936 if (!first) try writer.writeByte(' ');
......@@ -7949,7 +7949,7 @@ fn fmtLoopLive(isel: *Select, loop_inst: Air.Inst.Index) struct {
79497949 const live_insts =
79507950 data.isel.loop_live.list.items[loops[loop_index].live..loops[loop_index + 1].live];
79517951
7952 try writer.print("%{d} <- {{", .{@intFromEnum(data.inst)});
7952 try writer.print("%{d} <- {{", .{@backingInt(data.inst)});
79537953 var first = true;
79547954 for (live_insts) |live_inst| {
79557955 if (first) {
......@@ -7957,7 +7957,7 @@ fn fmtLoopLive(isel: *Select, loop_inst: Air.Inst.Index) struct {
79577957 } else {
79587958 try writer.writeByte(',');
79597959 }
7960 try writer.print(" %{d}", .{@intFromEnum(live_inst)});
7960 try writer.print(" %{d}", .{@backingInt(live_inst)});
79617961 }
79627962 if (!first) try writer.writeByte(' ');
79637963 try writer.writeByte('}');
......@@ -8090,7 +8090,7 @@ fn movImmediate(isel: *Select, dst_reg: Register, src_imm: u64) !void {
80908090 .doubleword => .xzr,
80918091 },
80928092 .{ .immediate = .{
8093 .N = @enumFromInt(elem_width >> 6),
8093 .N = @fromBackingInt(@intCast(elem_width >> 6)),
80948094 .immr = hi + mid_masked,
80958095 .imms = ((((lo + hi) & smask) | mid_masked) - 1) | -%@as(u6, @truncate(elem_width)) << 1,
80968096 } },
......@@ -8107,18 +8107,18 @@ fn movImmediate(isel: *Select, dst_reg: Register, src_imm: u64) !void {
81078107 try isel.emit(if (remaining_parts > 0) .movk(
81088108 dst_reg,
81098109 parts[part_index],
8110 .{ .lsl = @enumFromInt(part_index) },
8110 .{ .lsl = @fromBackingInt(@intCast(part_index)) },
81118111 ) else switch (fill_part) {
81128112 else => unreachable,
81138113 min_part => .movz(
81148114 dst_reg,
81158115 parts[part_index],
8116 .{ .lsl = @enumFromInt(part_index) },
8116 .{ .lsl = @fromBackingInt(@intCast(part_index)) },
81178117 ),
81188118 max_part => .movn(
81198119 dst_reg,
81208120 ~parts[part_index],
8121 .{ .lsl = @enumFromInt(part_index) },
8121 .{ .lsl = @fromBackingInt(@intCast(part_index)) },
81228122 ),
81238123 });
81248124 }
......@@ -8954,7 +8954,7 @@ pub const Value = struct {
89548954 _,
89558955
89568956 fn get(vi: Value.Index, isel: *Select) *Value {
8957 return &isel.values.items[@intFromEnum(vi)];
8957 return &isel.values.items[@backingInt(vi)];
89588958 }
89598959
89608960 fn setAlignment(vi: Value.Index, isel: *Select, new_alignment: InternPool.Alignment) void {
......@@ -9099,15 +9099,15 @@ pub const Value = struct {
90999099 assert(parts_len > 1);
91009100 const value = vi.get(isel);
91019101 assert(value.flags.parts_len_minus_one == 0);
9102 value.parts = @enumFromInt(isel.values.items.len);
9102 value.parts = @fromBackingInt(@intCast(isel.values.items.len));
91039103 value.flags.parts_len_minus_one = @intCast(parts_len - 1);
91049104 }
91059105
91069106 fn addPart(vi: Value.Index, isel: *Select, part_offset: u64, part_size: u64) Value.Index {
91079107 const part_vi = isel.initValueAdvanced(vi.alignment(isel), part_offset, part_size);
91089108 tracking_log.debug("${d} <- ${d}[{d}]", .{
9109 @intFromEnum(part_vi),
9110 @intFromEnum(vi),
9109 @backingInt(part_vi),
9110 @backingInt(vi),
91119111 part_offset,
91129112 });
91139113 part_vi.setParent(isel, .{ .value = vi });
......@@ -9132,7 +9132,7 @@ pub const Value = struct {
91329132 const end_vi = vi.partAtOffset(isel, part_size - 1 + part_offset);
91339133 return .{
91349134 .vi = start_vi,
9135 .remaining = @intCast(@intFromEnum(end_vi) - @intFromEnum(start_vi) + 1),
9135 .remaining = @intCast(@backingInt(end_vi) - @backingInt(start_vi) + 1),
91369136 };
91379137 }
91389138 comptime {
......@@ -9148,7 +9148,7 @@ pub const Value = struct {
91489148 last += 1;
91499149 while (true) {
91509150 const mid = (first + last) / 2;
9151 const mid_vi: Value.Index = @enumFromInt(@intFromEnum(value.parts) + mid);
9151 const mid_vi: Value.Index = @fromBackingInt(@intCast(@backingInt(value.parts) + mid));
91529152 if (mid == first) return mid_vi;
91539153 if (offset < mid_vi.get(isel).offset_from_parent) last = mid else first = mid;
91549154 }
......@@ -10042,7 +10042,7 @@ pub const Value = struct {
1004210042 fn allocStackSlot(vi: Value.Index, isel: *Select) Value.Indirect {
1004310043 const offset = vi.alignment(isel).forward(isel.stack_size);
1004410044 isel.stack_size = @intCast(offset + vi.size(isel));
10045 tracking_log.debug("${d} -> [sp, #0x{x}]", .{ @intFromEnum(vi), @abs(offset) });
10045 tracking_log.debug("${d} -> [sp, #0x{x}]", .{ @backingInt(vi), @abs(offset) });
1004610046 return .{
1004710047 .base = .sp,
1004810048 .offset = @intCast(offset),
......@@ -10145,7 +10145,7 @@ pub const Value = struct {
1014510145 pub fn next(it: *PartIterator) ?Value.Index {
1014610146 if (it.remaining == 0) return null;
1014710147 it.remaining -= 1;
10148 defer it.vi = @enumFromInt(@intFromEnum(it.vi) + 1);
10148 defer it.vi = @fromBackingInt(@intCast(@backingInt(it.vi) + 1));
1014910149 return it.vi;
1015010150 }
1015110151
......@@ -11229,7 +11229,7 @@ fn initValueAdvanced(
1122911229 } },
1123011230 .parts = undefined,
1123111231 };
11232 return @enumFromInt(isel.values.items.len);
11232 return @fromBackingInt(@intCast(isel.values.items.len));
1123311233}
1123411234const WhichValues = enum { only_referenced, all };
1123511235pub fn dumpValues(isel: *Select, which: WhichValues) void {
......@@ -11278,9 +11278,9 @@ fn dumpValuesInner(isel: *Select, which: WhichValues) !void {
1127811278 defer roots.deinit(gpa);
1127911279 {
1128011280 try roots.ensureTotalCapacity(gpa, isel.values.items.len);
11281 var vi: Value.Index = @enumFromInt(isel.values.items.len);
11282 while (@intFromEnum(vi) > 0) {
11283 vi = @enumFromInt(@intFromEnum(vi) - 1);
11281 var vi: Value.Index = @fromBackingInt(@intCast(isel.values.items.len));
11282 while (@backingInt(vi) > 0) {
11283 vi = @fromBackingInt(@intCast(@backingInt(vi) - 1));
1128411284 if (which == .only_referenced and vi.get(isel).refs == 0) continue;
1128511285 while (true) switch (vi.parent(isel)) {
1128611286 .unallocated, .stack_slot, .constant => break,
......@@ -11296,14 +11296,14 @@ fn dumpValuesInner(isel: *Select, which: WhichValues) !void {
1129611296 const vi = root_entry.key;
1129711297 const value = vi.get(isel);
1129811298 try stderr.splatByteAll(' ', 2 * (@as(usize, 1) + root_entry.value));
11299 try stderr.print("${d}", .{@intFromEnum(vi)});
11299 try stderr.print("${d}", .{@backingInt(vi)});
1130011300 {
1130111301 var first = true;
1130211302 if (reverse_live_values.get(vi)) |aiis| for (aiis.items) |aii| {
1130311303 if (aii == Block.main) {
1130411304 try stderr.print("{s}%main", .{if (first) " <- " else ", "});
1130511305 } else {
11306 try stderr.print("{s}%{d}", .{ if (first) " <- " else ", ", @intFromEnum(aii) });
11306 try stderr.print("{s}%{d}", .{ if (first) " <- " else ", ", @backingInt(aii) });
1130711307 }
1130811308 first = false;
1130911309 };
......@@ -11324,8 +11324,8 @@ fn dumpValuesInner(isel: *Select, which: WhichValues) !void {
1132411324 if (value.offset_from_parent != 0) try stderr.print("+0x{x}", .{value.offset_from_parent});
1132511325 try stderr.writeByte(']');
1132611326 },
11327 .value => try stderr.print(" ${d}+0x{x}", .{ @intFromEnum(value.parent_payload.value), value.offset_from_parent }),
11328 .address => try stderr.print(" ${d}[0x{x}]", .{ @intFromEnum(value.parent_payload.address), value.offset_from_parent }),
11327 .value => try stderr.print(" ${d}+0x{x}", .{ @backingInt(value.parent_payload.value), value.offset_from_parent }),
11328 .address => try stderr.print(" ${d}[0x{x}]", .{ @backingInt(value.parent_payload.address), value.offset_from_parent }),
1132911329 .constant => try stderr.print(" <{f}, {f}>", .{
1133011330 isel.fmtType(value.parent_payload.constant.typeOf(zcu)),
1133111331 isel.fmtConstant(value.parent_payload.constant),
......@@ -11350,7 +11350,7 @@ fn dumpValuesInner(isel: *Select, which: WhichValues) !void {
1135011350 var part_index = value.flags.parts_len_minus_one;
1135111351 if (part_index > 0) while (true) : (part_index -= 1) {
1135211352 roots.putAssumeCapacityNoClobber(
11353 @enumFromInt(@intFromEnum(value.parts) + part_index),
11353 @fromBackingInt(@intCast(@backingInt(value.parts) + part_index)),
1135411354 root_entry.value + 1,
1135511355 );
1135611356 if (part_index == 0) break;
......@@ -11517,7 +11517,7 @@ const TryAllocRegResult = union(enum) {
1151711517fn tryAllocIntReg(isel: *Select) TryAllocRegResult {
1151811518 var failed_result: TryAllocRegResult = .out_of_registers;
1151911519 var ra: Register.Alias = .r0;
11520 while (true) : (ra = @enumFromInt(@intFromEnum(ra) + 1)) {
11520 while (true) : (ra = @fromBackingInt(@intCast(@backingInt(ra) + 1))) {
1152111521 if (ra == .r18) continue; // The Platform Register
1152211522 if (ra == Register.Alias.fp) continue;
1152311523 const live_vi = isel.live_registers.getPtr(ra);
......@@ -11555,7 +11555,7 @@ fn allocIntReg(isel: *Select) !Register.Alias {
1155511555fn tryAllocVecReg(isel: *Select) TryAllocRegResult {
1155611556 var failed_result: TryAllocRegResult = .out_of_registers;
1155711557 var ra: Register.Alias = .v0;
11558 while (true) : (ra = @enumFromInt(@intFromEnum(ra) + 1)) {
11558 while (true) : (ra = @fromBackingInt(@intCast(@backingInt(ra) + 1))) {
1155911559 const live_vi = isel.live_registers.getPtr(ra);
1156011560 switch (live_vi.*) {
1156111561 _ => switch (failed_result) {
......@@ -11632,8 +11632,8 @@ fn use(isel: *Select, air_ref: Air.Inst.Ref) !Value.Index {
1163211632 const ty = isel.air.typeOf(air_ref, ip);
1163311633 const vi = isel.initValue(ty);
1163411634 tracking_log.debug("${d} <- %{d}", .{
11635 @intFromEnum(vi),
11636 @intFromEnum(air_inst_index),
11635 @backingInt(vi),
11636 @backingInt(air_inst_index),
1163711637 });
1163811638 live_gop.value_ptr.* = vi.ref(isel);
1163911639 break :vi_ty .{ vi, ty };
......@@ -11642,7 +11642,7 @@ fn use(isel: *Select, air_ref: Air.Inst.Ref) !Value.Index {
1164211642 const ty = constant.typeOf(zcu);
1164311643 const vi = isel.initValue(ty);
1164411644 tracking_log.debug("${d} <- <{f}, {f}>", .{
11645 @intFromEnum(vi),
11645 @backingInt(vi),
1164611646 isel.fmtType(ty),
1164711647 isel.fmtConstant(constant),
1164811648 });
......@@ -11857,8 +11857,8 @@ fn merge(
1185711857}
1185811858
1185911859const call = struct {
11860 const param_reg: Value.Index = @enumFromInt(@intFromEnum(Value.Index.allocating) - 2);
11861 const callee_clobbered_reg: Value.Index = @enumFromInt(@intFromEnum(Value.Index.allocating) - 1);
11860 const param_reg: Value.Index = @fromBackingInt(@intCast(@backingInt(Value.Index.allocating) - 2));
11861 const callee_clobbered_reg: Value.Index = @fromBackingInt(@intCast(@backingInt(Value.Index.allocating) - 1));
1186211862 const caller_saved_regs: LiveRegisters = .init(.{
1186311863 .r0 = param_reg,
1186411864 .r1 = param_reg,
......@@ -12454,7 +12454,7 @@ pub const CallAbiIterator = struct {
1245412454 wip_vi.setAlignment(isel, natural_alignment.maxStrict(.@"8"));
1245512455 if (it.ngrn == ngrn_end) return it.stack(isel, wip_vi);
1245612456 wip_vi.setHint(isel, it.ngrn);
12457 it.ngrn = @enumFromInt(@intFromEnum(it.ngrn) + 1);
12457 it.ngrn = @fromBackingInt(@intCast(@backingInt(it.ngrn) + 1));
1245812458 }
1245912459
1246012460 fn integers(it: *CallAbiIterator, isel: *Select, wip_vi: Value.Index, part_sizes: [2]u64) void {
......@@ -12463,11 +12463,11 @@ pub const CallAbiIterator = struct {
1246312463 assert(natural_alignment.order(.@"16").compare(.lte));
1246412464 wip_vi.setAlignment(isel, natural_alignment.maxStrict(.@"8"));
1246512465 // C.8
12466 if (natural_alignment == .@"16") it.ngrn = @enumFromInt(std.mem.alignForward(
12466 if (natural_alignment == .@"16") it.ngrn = @fromBackingInt(@intCast(std.mem.alignForward(
1246712467 @typeInfo(Register.Alias).@"enum".tag_type,
12468 @intFromEnum(it.ngrn),
12468 @backingInt(it.ngrn),
1246912469 2,
12470 ));
12470 )));
1247112471 if (it.ngrn == ngrn_end) return it.stack(isel, wip_vi);
1247212472 wip_vi.setParts(isel, part_sizes.len);
1247312473 for (0.., part_sizes) |part_index, part_size|
......@@ -12482,7 +12482,7 @@ pub const CallAbiIterator = struct {
1248212482 wip_vi.setIsVector(isel);
1248312483 if (it.nsrn == nsrn_end) return it.stack(isel, wip_vi);
1248412484 wip_vi.setHint(isel, it.nsrn);
12485 it.nsrn = @enumFromInt(@intFromEnum(it.nsrn) + 1);
12485 it.nsrn = @fromBackingInt(@intCast(@backingInt(it.nsrn) + 1));
1248612486 }
1248712487
1248812488 fn vectors(
......@@ -12497,7 +12497,7 @@ pub const CallAbiIterator = struct {
1249712497 const natural_alignment = wip_vi.alignment(isel);
1249812498 assert(natural_alignment.order(.@"16").compare(.lte));
1249912499 wip_vi.setAlignment(isel, natural_alignment.maxStrict(.@"8"));
12500 if (@intFromEnum(it.nsrn) > @intFromEnum(nsrn_end) - parts_len) return it.stack(isel, wip_vi);
12500 if (@backingInt(it.nsrn) > @backingInt(nsrn_end) - parts_len) return it.stack(isel, wip_vi);
1250112501 if (parts_len == 1) return it.vector(isel, wip_vi);
1250212502 wip_vi.setParts(isel, parts_len);
1250312503 const fdt_size = @as(u64, 1) << fdt_log2_size;
src/codegen/aarch64/encoding.zig+68-68
......@@ -34,11 +34,11 @@ pub const Register = struct {
3434 quad = 4,
3535
3636 pub fn n(ss: ScalarSize) ScalarSize {
37 return @enumFromInt(@intFromEnum(ss) - 1);
37 return @fromBackingInt(@intCast(@backingInt(ss) - 1));
3838 }
3939
4040 pub fn w(ss: ScalarSize) ScalarSize {
41 return @enumFromInt(@intFromEnum(ss) + 1);
41 return @fromBackingInt(@intCast(@backingInt(ss) + 1));
4242 }
4343
4444 pub fn prefix(ss: ScalarSize) u8 {
......@@ -68,10 +68,10 @@ pub const Register = struct {
6868 elem_size: Instruction.DataProcessingVector.Size,
6969 };
7070 pub fn wrap(unwrapped: Unwrapped) Arrangement {
71 return @enumFromInt(@as(@typeInfo(Arrangement).@"enum".tag_type, @bitCast(unwrapped)));
71 return @fromBackingInt(@intCast(@as(@typeInfo(Arrangement).@"enum".tag_type, @bitCast(unwrapped))));
7272 }
7373 pub fn unwrap(arrangement: Arrangement) Unwrapped {
74 return @bitCast(@intFromEnum(arrangement));
74 return @bitCast(@backingInt(arrangement));
7575 }
7676
7777 pub fn len(arrangement: Arrangement) u5 {
......@@ -395,9 +395,9 @@ pub const Register = struct {
395395
396396 pub fn decode(enc: Encoded, opts: struct { sp: bool = false, V: bool = false }) Alias {
397397 return switch (opts.V) {
398 false => @enumFromInt(@intFromEnum(Alias.r0) + @intFromEnum(enc) +
399 @intFromBool(opts.sp and enc == comptime Alias.sp.encode(.{ .sp = true }))),
400 true => @enumFromInt(@intFromEnum(Alias.v0) + @intFromEnum(enc)),
398 false => @fromBackingInt(@intCast(@backingInt(Alias.r0) + @backingInt(enc) +
399 @intFromBool(opts.sp and enc == comptime Alias.sp.encode(.{ .sp = true })))),
400 true => @fromBackingInt(@intCast(@backingInt(Alias.v0) + @backingInt(enc))),
401401 };
402402 }
403403 };
......@@ -503,38 +503,38 @@ pub const Register = struct {
503503
504504 pub fn alias(ra: Alias, fa: Format.Alias) Register {
505505 switch (fa) {
506 .general => assert(@intFromEnum(ra) >= @intFromEnum(Alias.r0) and @intFromEnum(ra) <= @intFromEnum(Alias.sp)),
506 .general => assert(@backingInt(ra) >= @backingInt(Alias.r0) and @backingInt(ra) <= @backingInt(Alias.sp)),
507507 .other => switch (ra) {
508508 else => unreachable,
509509 .pc, .fpcr, .fpsr, .ffr => {},
510510 },
511 .vector => assert(@intFromEnum(ra) >= @intFromEnum(Alias.v0) and @intFromEnum(ra) <= @intFromEnum(Alias.v31)),
512 .predicate => assert(@intFromEnum(ra) >= @intFromEnum(Alias.p0) and @intFromEnum(ra) <= @intFromEnum(Alias.p15)),
511 .vector => assert(@backingInt(ra) >= @backingInt(Alias.v0) and @backingInt(ra) <= @backingInt(Alias.v31)),
512 .predicate => assert(@backingInt(ra) >= @backingInt(Alias.p0) and @backingInt(ra) <= @backingInt(Alias.p15)),
513513 }
514514 return .{ .alias = ra, .format = .{ .alias = fa } };
515515 }
516516 pub fn general(ra: Alias, gs: GeneralSize) Register {
517 assert(@intFromEnum(ra) >= @intFromEnum(Alias.r0) and @intFromEnum(ra) <= @intFromEnum(Alias.sp));
517 assert(@backingInt(ra) >= @backingInt(Alias.r0) and @backingInt(ra) <= @backingInt(Alias.sp));
518518 return .{ .alias = ra, .format = .{ .general = gs } };
519519 }
520520 pub fn scalar(ra: Alias, ss: ScalarSize) Register {
521 assert(@intFromEnum(ra) >= @intFromEnum(Alias.v0) and @intFromEnum(ra) <= @intFromEnum(Alias.v31));
521 assert(@backingInt(ra) >= @backingInt(Alias.v0) and @backingInt(ra) <= @backingInt(Alias.v31));
522522 return .{ .alias = ra, .format = .{ .scalar = ss } };
523523 }
524524 pub fn vector(ra: Alias, arrangement: Arrangement) Register {
525 assert(@intFromEnum(ra) >= @intFromEnum(Alias.v0) and @intFromEnum(ra) <= @intFromEnum(Alias.v31));
525 assert(@backingInt(ra) >= @backingInt(Alias.v0) and @backingInt(ra) <= @backingInt(Alias.v31));
526526 return .{ .alias = ra, .format = .{ .vector = arrangement } };
527527 }
528528 pub fn element(ra: Alias, ss: ScalarSize, index: u4) Register {
529 assert(@intFromEnum(ra) >= @intFromEnum(Alias.v0) and @intFromEnum(ra) <= @intFromEnum(Alias.v31));
529 assert(@backingInt(ra) >= @backingInt(Alias.v0) and @backingInt(ra) <= @backingInt(Alias.v31));
530530 return .{ .alias = ra, .format = .{ .element = .{ .size = ss, .index = index } } };
531531 }
532532 pub fn z(ra: Alias) Register {
533 assert(@intFromEnum(ra) >= @intFromEnum(Alias.v0) and @intFromEnum(ra) <= @intFromEnum(Alias.v31));
533 assert(@backingInt(ra) >= @backingInt(Alias.v0) and @backingInt(ra) <= @backingInt(Alias.v31));
534534 return .{ .alias = ra, .format = .scalable };
535535 }
536536 pub fn p(ra: Alias) Register {
537 assert(@intFromEnum(ra) >= @intFromEnum(Alias.p0) and @intFromEnum(ra) <= @intFromEnum(Alias.p15));
537 assert(@backingInt(ra) >= @backingInt(Alias.p0) and @backingInt(ra) <= @backingInt(Alias.p15));
538538 return .{ .alias = ra, .format = .{ .scalar = .predicate } };
539539 }
540540
......@@ -700,7 +700,7 @@ pub const Register = struct {
700700 }
701701
702702 pub fn encode(ra: Alias, comptime opts: struct { sp: bool = false, V: bool = false }) Encoded {
703 return @enumFromInt(@as(u5, switch (ra) {
703 return @fromBackingInt(@intCast(@as(u5, switch (ra) {
704704 .r0 => if (opts.V) unreachable else 0,
705705 .r1 => if (opts.V) unreachable else 1,
706706 .r2 => if (opts.V) unreachable else 2,
......@@ -770,7 +770,7 @@ pub const Register = struct {
770770 .fpcr, .fpsr => unreachable,
771771 .p0, .p1, .p2, .p3, .p4, .p5, .p6, .p7, .p8, .p9, .p10, .p11, .p12, .p13, .p14, .p15 => unreachable,
772772 .ffr => unreachable,
773 }));
773 })));
774774 }
775775 };
776776
......@@ -806,21 +806,21 @@ pub const Register = struct {
806806 else => null,
807807 'r' => if (std.fmt.parseInt(u5, reg[1..], 10)) |n| switch (n) {
808808 0...30 => .{
809 .alias = @enumFromInt(@intFromEnum(Alias.r0) + n),
809 .alias = @fromBackingInt(@intCast(@backingInt(Alias.r0) + n)),
810810 .format = .{ .alias = .general },
811811 },
812812 31 => null,
813813 } else |_| null,
814814 'x' => if (std.fmt.parseInt(u5, reg[1..], 10)) |n| switch (n) {
815815 0...30 => .{
816 .alias = @enumFromInt(@intFromEnum(Alias.r0) + n),
816 .alias = @fromBackingInt(@intCast(@backingInt(Alias.r0) + n)),
817817 .format = .{ .general = .doubleword },
818818 },
819819 31 => null,
820820 } else |_| if (toLowerEqlAssertLower(reg, "xzr")) .xzr else null,
821821 'w' => if (std.fmt.parseInt(u5, reg[1..], 10)) |n| switch (n) {
822822 0...30 => .{
823 .alias = @enumFromInt(@intFromEnum(Alias.r0) + n),
823 .alias = @fromBackingInt(@intCast(@backingInt(Alias.r0) + n)),
824824 .format = .{ .general = .word },
825825 },
826826 31 => null,
......@@ -839,27 +839,27 @@ pub const Register = struct {
839839 'f' => return if (toLowerEqlAssertLower(reg, "fp")) .fp else null,
840840 'p' => return if (toLowerEqlAssertLower(reg, "pc")) .pc else null,
841841 'v' => if (std.fmt.parseInt(u5, reg[1..], 10)) |n| .{
842 .alias = @enumFromInt(@intFromEnum(Alias.v0) + n),
842 .alias = @fromBackingInt(@intCast(@backingInt(Alias.v0) + n)),
843843 .format = .{ .alias = .vector },
844844 } else |_| null,
845845 'q' => if (std.fmt.parseInt(u5, reg[1..], 10)) |n| .{
846 .alias = @enumFromInt(@intFromEnum(Alias.v0) + n),
846 .alias = @fromBackingInt(@intCast(@backingInt(Alias.v0) + n)),
847847 .format = .{ .scalar = .quad },
848848 } else |_| null,
849849 'd' => if (std.fmt.parseInt(u5, reg[1..], 10)) |n| .{
850 .alias = @enumFromInt(@intFromEnum(Alias.v0) + n),
850 .alias = @fromBackingInt(@intCast(@backingInt(Alias.v0) + n)),
851851 .format = .{ .scalar = .double },
852852 } else |_| null,
853853 's' => if (std.fmt.parseInt(u5, reg[1..], 10)) |n| .{
854 .alias = @enumFromInt(@intFromEnum(Alias.v0) + n),
854 .alias = @fromBackingInt(@intCast(@backingInt(Alias.v0) + n)),
855855 .format = .{ .scalar = .single },
856856 } else |_| if (toLowerEqlAssertLower(reg, "sp")) .sp else null,
857857 'h' => if (std.fmt.parseInt(u5, reg[1..], 10)) |n| .{
858 .alias = @enumFromInt(@intFromEnum(Alias.v0) + n),
858 .alias = @fromBackingInt(@intCast(@backingInt(Alias.v0) + n)),
859859 .format = .{ .scalar = .half },
860860 } else |_| null,
861861 'b' => if (std.fmt.parseInt(u5, reg[1..], 10)) |n| .{
862 .alias = @enumFromInt(@intFromEnum(Alias.v0) + n),
862 .alias = @fromBackingInt(@intCast(@backingInt(Alias.v0) + n)),
863863 .format = .{ .scalar = .byte },
864864 } else |_| null,
865865 };
......@@ -1363,7 +1363,7 @@ pub const ConditionCode = enum(u4) {
13631363 pub const cc: ConditionCode = .lo;
13641364
13651365 pub fn invert(cond: ConditionCode) ConditionCode {
1366 return @enumFromInt(@intFromEnum(cond) ^ 0b0001);
1366 return @fromBackingInt(@intCast(@backingInt(cond) ^ 0b0001));
13671367 }
13681368};
13691369
......@@ -2772,7 +2772,7 @@ pub const Instruction = packed union {
27722772
27732773 /// C6.2.37 BR
27742774 pub const Br = packed struct {
2775 Rm: Register.Encoded = @enumFromInt(0),
2775 Rm: Register.Encoded = @fromBackingInt(@intCast(0)),
27762776 Rn: Register.Encoded,
27772777 M: bool = false,
27782778 A: bool = false,
......@@ -2786,7 +2786,7 @@ pub const Instruction = packed union {
27862786
27872787 /// C6.2.35 BLR
27882788 pub const Blr = packed struct {
2789 Rm: Register.Encoded = @enumFromInt(0),
2789 Rm: Register.Encoded = @fromBackingInt(@intCast(0)),
27902790 Rn: Register.Encoded,
27912791 M: bool = false,
27922792 A: bool = false,
......@@ -2800,7 +2800,7 @@ pub const Instruction = packed union {
28002800
28012801 /// C6.2.254 RET
28022802 pub const Ret = packed struct {
2803 Rm: Register.Encoded = @enumFromInt(0),
2803 Rm: Register.Encoded = @fromBackingInt(@intCast(0)),
28042804 Rn: Register.Encoded,
28052805 M: bool = false,
28062806 A: bool = false,
......@@ -11131,11 +11131,11 @@ pub const Instruction = packed union {
1113111131 double = 0b11,
1113211132
1113311133 pub fn n(s: Size) Size {
11134 return @enumFromInt(@intFromEnum(s) - 1);
11134 return @fromBackingInt(@intCast(@backingInt(s) - 1));
1113511135 }
1113611136
1113711137 pub fn w(s: Size) Size {
11138 return @enumFromInt(@intFromEnum(s) + 1);
11138 return @fromBackingInt(@intCast(@backingInt(s) + 1));
1113911139 }
1114011140
1114111141 pub fn toScalarSize(s: Size) Register.ScalarSize {
......@@ -12379,12 +12379,12 @@ pub const Instruction = packed union {
1237912379 switch (d.format) {
1238012380 else => unreachable,
1238112381 .scalar => |elem_size| {
12382 assert(@intFromEnum(elem_size) <= @intFromEnum(Register.ScalarSize.double) and elem_size == n.format.element.size);
12382 assert(@backingInt(elem_size) <= @backingInt(Register.ScalarSize.double) and elem_size == n.format.element.size);
1238312383 return .{ .data_processing_vector = .{ .simd_scalar_copy = .{
1238412384 .dup = .{
1238512385 .Rd = d.alias.encode(.{ .V = true }),
1238612386 .Rn = n.alias.encode(.{ .V = true }),
12387 .imm5 = @shlExact(@as(u5, n.format.element.index) << 1 | @as(u5, 0b1), @intFromEnum(elem_size)),
12387 .imm5 = @shlExact(@as(u5, n.format.element.index) << 1 | @as(u5, 0b1), @backingInt(elem_size)),
1238812388 },
1238912389 } } };
1239012390 },
......@@ -12400,7 +12400,7 @@ pub const Instruction = packed union {
1240012400 .Rd = d.alias.encode(.{ .V = true }),
1240112401 .Rn = n.alias.encode(.{ .V = true }),
1240212402 .imm4 = .element,
12403 .imm5 = @shlExact(@as(u5, element.index) << 1 | @as(u5, 0b1), @intFromEnum(elem_size)),
12403 .imm5 = @shlExact(@as(u5, element.index) << 1 | @as(u5, 0b1), @backingInt(elem_size)),
1240412404 .Q = arrangement.size(),
1240512405 },
1240612406 } } };
......@@ -12415,7 +12415,7 @@ pub const Instruction = packed union {
1241512415 .Rd = d.alias.encode(.{ .V = true }),
1241612416 .Rn = n.alias.encode(.{}),
1241712417 .imm4 = .general,
12418 .imm5 = @shlExact(@as(u5, 0b1), @intFromEnum(elem_size)),
12418 .imm5 = @shlExact(@as(u5, 0b1), @backingInt(elem_size)),
1241912419 .Q = arrangement.size(),
1242012420 },
1242112421 } } };
......@@ -12867,7 +12867,7 @@ pub const Instruction = packed union {
1286712867 .fcmp = .{
1286812868 .opc0 = .register,
1286912869 .Rn = n.alias.encode(.{ .V = true }),
12870 .Rm = @enumFromInt(0b00000),
12870 .Rm = @fromBackingInt(@intCast(0b00000)),
1287112871 .ftype = .fromScalarSize(ftype),
1287212872 },
1287312873 } } },
......@@ -12892,7 +12892,7 @@ pub const Instruction = packed union {
1289212892 .fcmpe = .{
1289312893 .opc0 = .zero,
1289412894 .Rn = n.alias.encode(.{ .V = true }),
12895 .Rm = @enumFromInt(0b00000),
12895 .Rm = @fromBackingInt(@intCast(0b00000)),
1289612896 .ftype = .fromScalarSize(ftype),
1289712897 },
1289812898 } } },
......@@ -14194,8 +14194,8 @@ pub const Instruction = packed union {
1419414194 .ins = .{
1419514195 .Rd = d.alias.encode(.{ .V = true }),
1419614196 .Rn = n.alias.encode(.{ .V = true }),
14197 .imm4 = .{ .element = element.index << @intCast(@intFromEnum(elem_size)) },
14198 .imm5 = (@as(u5, d.format.element.index) << 1 | @as(u5, 0b1) << 0) << @intFromEnum(elem_size),
14197 .imm4 = .{ .element = element.index << @intCast(@backingInt(elem_size)) },
14198 .imm5 = (@as(u5, d.format.element.index) << 1 | @as(u5, 0b1) << 0) << @backingInt(elem_size),
1419914199 .op = .element,
1420014200 },
1420114201 } } };
......@@ -14211,7 +14211,7 @@ pub const Instruction = packed union {
1421114211 .Rd = d.alias.encode(.{ .V = true }),
1421214212 .Rn = n.alias.encode(.{}),
1421314213 .imm4 = .{ .general = .general },
14214 .imm5 = (@as(u5, d.format.element.index) << 1 | @as(u5, 0b1) << 0) << @intFromEnum(elem_size),
14214 .imm5 = (@as(u5, d.format.element.index) << 1 | @as(u5, 0b1) << 0) << @backingInt(elem_size),
1421514215 .op = .general,
1421614216 },
1421714217 } } };
......@@ -14246,7 +14246,7 @@ pub const Instruction = packed union {
1424614246 .Rt = t1.alias.encode(.{}),
1424714247 .Rn = post_index.base.alias.encode(.{ .sp = true }),
1424814248 .Rt2 = t2.alias.encode(.{}),
14249 .imm7 = @intCast(@shrExact(post_index.index, @as(u2, 2) + @intFromEnum(sf))),
14249 .imm7 = @intCast(@shrExact(post_index.index, @as(u2, 2) + @backingInt(sf))),
1425014250 .sf = sf,
1425114251 },
1425214252 } } } };
......@@ -14258,7 +14258,7 @@ pub const Instruction = packed union {
1425814258 .Rt = t1.alias.encode(.{}),
1425914259 .Rn = pre_index.base.alias.encode(.{ .sp = true }),
1426014260 .Rt2 = t2.alias.encode(.{}),
14261 .imm7 = @intCast(@shrExact(pre_index.index, @as(u2, 2) + @intFromEnum(sf))),
14261 .imm7 = @intCast(@shrExact(pre_index.index, @as(u2, 2) + @backingInt(sf))),
1426214262 .sf = sf,
1426314263 },
1426414264 } } } };
......@@ -14270,7 +14270,7 @@ pub const Instruction = packed union {
1427014270 .Rt = t1.alias.encode(.{}),
1427114271 .Rn = signed_offset.base.alias.encode(.{ .sp = true }),
1427214272 .Rt2 = t2.alias.encode(.{}),
14273 .imm7 = @intCast(@shrExact(signed_offset.offset, @as(u2, 2) + @intFromEnum(sf))),
14273 .imm7 = @intCast(@shrExact(signed_offset.offset, @as(u2, 2) + @backingInt(sf))),
1427414274 .sf = sf,
1427514275 },
1427614276 } } } };
......@@ -14288,7 +14288,7 @@ pub const Instruction = packed union {
1428814288 .Rt = t1.alias.encode(.{ .V = true }),
1428914289 .Rn = post_index.base.alias.encode(.{ .sp = true }),
1429014290 .Rt2 = t2.alias.encode(.{ .V = true }),
14291 .imm7 = @intCast(@shrExact(post_index.index, @intFromEnum(vs))),
14291 .imm7 = @intCast(@shrExact(post_index.index, @backingInt(vs))),
1429214292 .opc = .encode(vs),
1429314293 },
1429414294 } } } };
......@@ -14300,7 +14300,7 @@ pub const Instruction = packed union {
1430014300 .Rt = t1.alias.encode(.{ .V = true }),
1430114301 .Rn = signed_offset.base.alias.encode(.{ .sp = true }),
1430214302 .Rt2 = t2.alias.encode(.{ .V = true }),
14303 .imm7 = @intCast(@shrExact(signed_offset.offset, @intFromEnum(vs))),
14303 .imm7 = @intCast(@shrExact(signed_offset.offset, @backingInt(vs))),
1430414304 .opc = .encode(vs),
1430514305 },
1430614306 } } } };
......@@ -14312,7 +14312,7 @@ pub const Instruction = packed union {
1431214312 .Rt = t1.alias.encode(.{ .V = true }),
1431314313 .Rn = pre_index.base.alias.encode(.{ .sp = true }),
1431414314 .Rt2 = t2.alias.encode(.{ .V = true }),
14315 .imm7 = @intCast(@shrExact(pre_index.index, @intFromEnum(vs))),
14315 .imm7 = @intCast(@shrExact(pre_index.index, @backingInt(vs))),
1431614316 .opc = .encode(vs),
1431714317 },
1431814318 } } } };
......@@ -14377,7 +14377,7 @@ pub const Instruction = packed union {
1437714377 .ldr = .{
1437814378 .Rt = t.alias.encode(.{}),
1437914379 .Rn = unsigned_offset.base.alias.encode(.{ .sp = true }),
14380 .imm12 = @intCast(@shrExact(unsigned_offset.offset, @as(u2, 2) + @intFromEnum(sf))),
14380 .imm12 = @intCast(@shrExact(unsigned_offset.offset, @as(u2, 2) + @backingInt(sf))),
1438114381 .sf = sf,
1438214382 },
1438314383 } } } };
......@@ -14455,7 +14455,7 @@ pub const Instruction = packed union {
1445514455 .ldr = .{
1445614456 .Rt = t.alias.encode(.{ .V = true }),
1445714457 .Rn = unsigned_offset.base.alias.encode(.{ .sp = true }),
14458 .imm12 = @intCast(@shrExact(unsigned_offset.offset, @intFromEnum(vs))),
14458 .imm12 = @intCast(@shrExact(unsigned_offset.offset, @backingInt(vs))),
1445914459 .opc1 = .encode(vs),
1446014460 .size = .encode(vs),
1446114461 },
......@@ -14705,7 +14705,7 @@ pub const Instruction = packed union {
1470514705 .Rt = t.alias.encode(.{}),
1470614706 .Rn = post_index.base.alias.encode(.{ .sp = true }),
1470714707 .imm9 = post_index.index,
14708 .opc0 = ~@intFromEnum(sf),
14708 .opc0 = ~@backingInt(sf),
1470914709 },
1471014710 } } } };
1471114711 },
......@@ -14716,7 +14716,7 @@ pub const Instruction = packed union {
1471614716 .Rt = t.alias.encode(.{}),
1471714717 .Rn = pre_index.base.alias.encode(.{ .sp = true }),
1471814718 .imm9 = pre_index.index,
14719 .opc0 = ~@intFromEnum(sf),
14719 .opc0 = ~@backingInt(sf),
1472014720 },
1472114721 } } } };
1472214722 },
......@@ -14727,7 +14727,7 @@ pub const Instruction = packed union {
1472714727 .Rt = t.alias.encode(.{}),
1472814728 .Rn = unsigned_offset.base.alias.encode(.{ .sp = true }),
1472914729 .imm12 = unsigned_offset.offset,
14730 .opc0 = ~@intFromEnum(sf),
14730 .opc0 = ~@backingInt(sf),
1473114731 },
1473214732 } } } };
1473314733 },
......@@ -14745,7 +14745,7 @@ pub const Instruction = packed union {
1474514745 },
1474614746 .option = extended_register_explicit.option,
1474714747 .Rm = extended_register_explicit.index.alias.encode(.{}),
14748 .opc0 = ~@intFromEnum(sf),
14748 .opc0 = ~@backingInt(sf),
1474914749 },
1475014750 } } } };
1475114751 },
......@@ -14787,7 +14787,7 @@ pub const Instruction = packed union {
1478714787 .Rt = t.alias.encode(.{}),
1478814788 .Rn = post_index.base.alias.encode(.{ .sp = true }),
1478914789 .imm9 = post_index.index,
14790 .opc0 = ~@intFromEnum(sf),
14790 .opc0 = ~@backingInt(sf),
1479114791 },
1479214792 } } } };
1479314793 },
......@@ -14798,7 +14798,7 @@ pub const Instruction = packed union {
1479814798 .Rt = t.alias.encode(.{}),
1479914799 .Rn = pre_index.base.alias.encode(.{ .sp = true }),
1480014800 .imm9 = pre_index.index,
14801 .opc0 = ~@intFromEnum(sf),
14801 .opc0 = ~@backingInt(sf),
1480214802 },
1480314803 } } } };
1480414804 },
......@@ -14809,7 +14809,7 @@ pub const Instruction = packed union {
1480914809 .Rt = t.alias.encode(.{}),
1481014810 .Rn = unsigned_offset.base.alias.encode(.{ .sp = true }),
1481114811 .imm12 = @intCast(@shrExact(unsigned_offset.offset, 1)),
14812 .opc0 = ~@intFromEnum(sf),
14812 .opc0 = ~@backingInt(sf),
1481314813 },
1481414814 } } } };
1481514815 },
......@@ -14828,7 +14828,7 @@ pub const Instruction = packed union {
1482814828 },
1482914829 .option = extended_register_explicit.option,
1483014830 .Rm = extended_register_explicit.index.alias.encode(.{}),
14831 .opc0 = ~@intFromEnum(sf),
14831 .opc0 = ~@backingInt(sf),
1483214832 },
1483314833 } } } };
1483414834 },
......@@ -14984,7 +14984,7 @@ pub const Instruction = packed union {
1498414984 .Rt = t.alias.encode(.{}),
1498514985 .Rn = n.alias.encode(.{ .sp = true }),
1498614986 .imm9 = simm,
14987 .opc0 = ~@intFromEnum(t.format.general),
14987 .opc0 = ~@backingInt(t.format.general),
1498814988 },
1498914989 } } } };
1499014990 }
......@@ -14996,7 +14996,7 @@ pub const Instruction = packed union {
1499614996 .Rt = t.alias.encode(.{}),
1499714997 .Rn = n.alias.encode(.{ .sp = true }),
1499814998 .imm9 = simm,
14999 .opc0 = ~@intFromEnum(t.format.general),
14999 .opc0 = ~@backingInt(t.format.general),
1500015000 },
1500115001 } } } };
1500215002 }
......@@ -15778,7 +15778,7 @@ pub const Instruction = packed union {
1577815778 .Rt = t1.alias.encode(.{}),
1577915779 .Rn = post_index.base.alias.encode(.{ .sp = true }),
1578015780 .Rt2 = t2.alias.encode(.{}),
15781 .imm7 = @intCast(@shrExact(post_index.index, @as(u2, 2) + @intFromEnum(sf))),
15781 .imm7 = @intCast(@shrExact(post_index.index, @as(u2, 2) + @backingInt(sf))),
1578215782 .sf = sf,
1578315783 },
1578415784 } } } };
......@@ -15790,7 +15790,7 @@ pub const Instruction = packed union {
1579015790 .Rt = t1.alias.encode(.{}),
1579115791 .Rn = pre_index.base.alias.encode(.{ .sp = true }),
1579215792 .Rt2 = t2.alias.encode(.{}),
15793 .imm7 = @intCast(@shrExact(pre_index.index, @as(u2, 2) + @intFromEnum(sf))),
15793 .imm7 = @intCast(@shrExact(pre_index.index, @as(u2, 2) + @backingInt(sf))),
1579415794 .sf = sf,
1579515795 },
1579615796 } } } };
......@@ -15802,7 +15802,7 @@ pub const Instruction = packed union {
1580215802 .Rt = t1.alias.encode(.{}),
1580315803 .Rn = signed_offset.base.alias.encode(.{ .sp = true }),
1580415804 .Rt2 = t2.alias.encode(.{}),
15805 .imm7 = @intCast(@shrExact(signed_offset.offset, @as(u2, 2) + @intFromEnum(sf))),
15805 .imm7 = @intCast(@shrExact(signed_offset.offset, @as(u2, 2) + @backingInt(sf))),
1580615806 .sf = sf,
1580715807 },
1580815808 } } } };
......@@ -15820,7 +15820,7 @@ pub const Instruction = packed union {
1582015820 .Rt = t1.alias.encode(.{ .V = true }),
1582115821 .Rn = post_index.base.alias.encode(.{ .sp = true }),
1582215822 .Rt2 = t2.alias.encode(.{ .V = true }),
15823 .imm7 = @intCast(@shrExact(post_index.index, @intFromEnum(vs))),
15823 .imm7 = @intCast(@shrExact(post_index.index, @backingInt(vs))),
1582415824 .opc = .encode(vs),
1582515825 },
1582615826 } } } };
......@@ -15832,7 +15832,7 @@ pub const Instruction = packed union {
1583215832 .Rt = t1.alias.encode(.{ .V = true }),
1583315833 .Rn = signed_offset.base.alias.encode(.{ .sp = true }),
1583415834 .Rt2 = t2.alias.encode(.{ .V = true }),
15835 .imm7 = @intCast(@shrExact(signed_offset.offset, @intFromEnum(vs))),
15835 .imm7 = @intCast(@shrExact(signed_offset.offset, @backingInt(vs))),
1583615836 .opc = .encode(vs),
1583715837 },
1583815838 } } } };
......@@ -15844,7 +15844,7 @@ pub const Instruction = packed union {
1584415844 .Rt = t1.alias.encode(.{ .V = true }),
1584515845 .Rn = pre_index.base.alias.encode(.{ .sp = true }),
1584615846 .Rt2 = t2.alias.encode(.{ .V = true }),
15847 .imm7 = @intCast(@shrExact(pre_index.index, @intFromEnum(vs))),
15847 .imm7 = @intCast(@shrExact(pre_index.index, @backingInt(vs))),
1584815848 .opc = .encode(vs),
1584915849 },
1585015850 } } } };
......@@ -15893,7 +15893,7 @@ pub const Instruction = packed union {
1589315893 .str = .{
1589415894 .Rt = t.alias.encode(.{}),
1589515895 .Rn = unsigned_offset.base.alias.encode(.{ .sp = true }),
15896 .imm12 = @intCast(@shrExact(unsigned_offset.offset, @as(u2, 2) + @intFromEnum(sf))),
15896 .imm12 = @intCast(@shrExact(unsigned_offset.offset, @as(u2, 2) + @backingInt(sf))),
1589715897 .sf = sf,
1589815898 },
1589915899 } } } };
......@@ -15931,7 +15931,7 @@ pub const Instruction = packed union {
1593115931 .str = .{
1593215932 .Rt = t.alias.encode(.{ .V = true }),
1593315933 .Rn = unsigned_offset.base.alias.encode(.{ .sp = true }),
15934 .imm12 = @intCast(@shrExact(unsigned_offset.offset, @intFromEnum(vs))),
15934 .imm12 = @intCast(@shrExact(unsigned_offset.offset, @backingInt(vs))),
1593515935 .opc1 = .encode(vs),
1593615936 .size = .encode(vs),
1593715937 },
src/codegen/c.zig+98-98
......@@ -1657,10 +1657,10 @@ pub const DeclGen = struct {
16571657 switch (name) {
16581658 .nav => |nav| try renderNavName(w, nav, ip),
16591659 .nav_never_tail => |nav| try w.print("zig_never_tail_{f}__{d}", .{
1660 fmtIdentUnsolo(ip.getNav(nav).name.toSlice(ip)), @intFromEnum(nav),
1660 fmtIdentUnsolo(ip.getNav(nav).name.toSlice(ip)), @backingInt(nav),
16611661 }),
16621662 .nav_never_inline => |nav| try w.print("zig_never_inline_{f}__{d}", .{
1663 fmtIdentUnsolo(ip.getNav(nav).name.toSlice(ip)), @intFromEnum(nav),
1663 fmtIdentUnsolo(ip.getNav(nav).name.toSlice(ip)), @backingInt(nav),
16641664 }),
16651665 .@"export" => |@"export"| try w.print("{f}", .{fmtIdentSolo(@"export".extern_name.toSlice(ip))}),
16661666 }
......@@ -2121,7 +2121,7 @@ pub fn genTagNameFn(
21212121 try w.print("static {s} zig_tagName_{f}__{d}({s} tag) {{\n", .{
21222122 slice_const_u8_sentinel_0_type_name,
21232123 fmtIdentUnsolo(loaded_enum.name.toSlice(ip)),
2124 @intFromEnum(enum_ty.toIntern()),
2124 @backingInt(enum_ty.toIntern()),
21252125 enum_type_name,
21262126 });
21272127 for (loaded_enum.field_names.get(ip), 0..) |field_name, field_index| {
......@@ -2636,7 +2636,7 @@ fn genBodyInner(f: *Function, body: []const Air.Inst.Index) Error!void {
26362636 if (f.liveness.isUnused(inst) and !f.air.mustLower(inst, ip))
26372637 continue;
26382638
2639 const result_value = switch (air_tags[@intFromEnum(inst)]) {
2639 const result_value = switch (air_tags[@backingInt(inst)]) {
26402640 // zig fmt: off
26412641 .inferred_alloc, .inferred_alloc_comptime => unreachable,
26422642
......@@ -2948,7 +2948,7 @@ fn genBodyInner(f: *Function, body: []const Air.Inst.Index) Error!void {
29482948}
29492949
29502950fn airSliceField(f: *Function, inst: Air.Inst.Index, is_ptr: bool, field_name: []const u8) !CValue {
2951 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2951 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
29522952
29532953 const inst_ty = f.typeOfIndex(inst);
29542954 const operand = try f.resolveInst(ty_op.operand);
......@@ -2970,7 +2970,7 @@ fn airSliceField(f: *Function, inst: Air.Inst.Index, is_ptr: bool, field_name: [
29702970fn airPtrElemVal(f: *Function, inst: Air.Inst.Index) !CValue {
29712971 const zcu = f.dg.pt.zcu;
29722972 const inst_ty = f.typeOfIndex(inst);
2973 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2973 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
29742974 assert(inst_ty.hasRuntimeBits(zcu));
29752975
29762976 const ptr = try f.resolveInst(bin_op.lhs);
......@@ -2996,7 +2996,7 @@ fn airPtrElemVal(f: *Function, inst: Air.Inst.Index) !CValue {
29962996fn airPtrElemPtr(f: *Function, inst: Air.Inst.Index) !CValue {
29972997 const pt = f.dg.pt;
29982998 const zcu = pt.zcu;
2999 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2999 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
30003000 const bin_op = f.air.extraData(Air.Bin, ty_pl.payload).data;
30013001
30023002 const inst_ty = f.typeOfIndex(inst);
......@@ -3028,7 +3028,7 @@ fn airPtrElemPtr(f: *Function, inst: Air.Inst.Index) !CValue {
30283028fn airSliceElemVal(f: *Function, inst: Air.Inst.Index) !CValue {
30293029 const zcu = f.dg.pt.zcu;
30303030 const inst_ty = f.typeOfIndex(inst);
3031 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3031 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
30323032 assert(inst_ty.hasRuntimeBits(zcu));
30333033
30343034 const slice = try f.resolveInst(bin_op.lhs);
......@@ -3050,7 +3050,7 @@ fn airSliceElemVal(f: *Function, inst: Air.Inst.Index) !CValue {
30503050fn airSliceElemPtr(f: *Function, inst: Air.Inst.Index) !CValue {
30513051 const pt = f.dg.pt;
30523052 const zcu = pt.zcu;
3053 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3053 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
30543054 const bin_op = f.air.extraData(Air.Bin, ty_pl.payload).data;
30553055
30563056 const inst_ty = f.typeOfIndex(inst);
......@@ -3077,7 +3077,7 @@ fn airSliceElemPtr(f: *Function, inst: Air.Inst.Index) !CValue {
30773077
30783078fn airArrayElemVal(f: *Function, inst: Air.Inst.Index) !CValue {
30793079 const zcu = f.dg.pt.zcu;
3080 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3080 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
30813081 const inst_ty = f.typeOfIndex(inst);
30823082 assert(inst_ty.hasRuntimeBits(zcu));
30833083
......@@ -3098,7 +3098,7 @@ fn airArrayElemVal(f: *Function, inst: Air.Inst.Index) !CValue {
30983098}
30993099
31003100fn airLegalizeVecStoreElem(f: *Function, inst: Air.Inst.Index) !CValue {
3101 const pl_op = f.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
3101 const pl_op = f.air.instructions.items(.data)[@backingInt(inst)].pl_op;
31023102 const extra = f.air.extraData(Air.Bin, pl_op.payload).data;
31033103
31043104 const vec_ptr = try f.resolveInst(pl_op.operand);
......@@ -3209,7 +3209,7 @@ fn airArg(f: *Function, inst: Air.Inst.Index) !CValue {
32093209fn airLoad(f: *Function, inst: Air.Inst.Index) !CValue {
32103210 const pt = f.dg.pt;
32113211 const zcu = pt.zcu;
3212 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3212 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
32133213
32143214 const ptr_ty = f.typeOf(ty_op.operand);
32153215 const ptr_scalar_ty = ptr_ty.scalarType(zcu);
......@@ -3243,7 +3243,7 @@ fn airLoad(f: *Function, inst: Air.Inst.Index) !CValue {
32433243 else => |index| {
32443244 try w.writeByte('&');
32453245 try f.writeCValue(w, operand, .other);
3246 try w.print("[{d}]", .{@intFromEnum(index)});
3246 try w.print("[{d}]", .{@backingInt(index)});
32473247 },
32483248 }
32493249 try w.writeAll(", sizeof(");
......@@ -3256,7 +3256,7 @@ fn airLoad(f: *Function, inst: Air.Inst.Index) !CValue {
32563256 .none => try f.writeCValueDeref(w, operand),
32573257 else => |index| {
32583258 try f.writeCValue(w, operand, .other);
3259 try w.print("[{d}]", .{@intFromEnum(index)});
3259 try w.print("[{d}]", .{@backingInt(index)});
32603260 },
32613261 }
32623262 }
......@@ -3269,13 +3269,13 @@ fn airLoad(f: *Function, inst: Air.Inst.Index) !CValue {
32693269fn airRet(f: *Function, inst: Air.Inst.Index, is_ptr: bool) !void {
32703270 const pt = f.dg.pt;
32713271 const zcu = pt.zcu;
3272 const un_op = f.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
3272 const un_op = f.air.instructions.items(.data)[@backingInt(inst)].un_op;
32733273 const w = &f.code.writer;
32743274 const op_inst = un_op.toIndex();
32753275 const op_ty = f.typeOf(un_op);
32763276 const ret_ty = if (is_ptr) op_ty.childType(zcu) else op_ty;
32773277
3278 if (op_inst != null and f.air.instructions.items(.tag)[@intFromEnum(op_inst.?)] == .call_always_tail) {
3278 if (op_inst != null and f.air.instructions.items(.tag)[@backingInt(op_inst.?)] == .call_always_tail) {
32793279 try reap(f, inst, &.{un_op});
32803280 _ = try airCall(f, op_inst.?, .always_tail);
32813281 } else if (ret_ty.hasRuntimeBits(zcu)) {
......@@ -3301,7 +3301,7 @@ fn airRet(f: *Function, inst: Air.Inst.Index, is_ptr: bool) !void {
33013301fn airIntCast(f: *Function, inst: Air.Inst.Index) !CValue {
33023302 const pt = f.dg.pt;
33033303 const zcu = pt.zcu;
3304 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3304 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
33053305
33063306 const operand = try f.resolveInst(ty_op.operand);
33073307 try reap(f, inst, &.{ty_op.operand});
......@@ -3332,7 +3332,7 @@ fn airIntCast(f: *Function, inst: Air.Inst.Index) !CValue {
33323332fn airTrunc(f: *Function, inst: Air.Inst.Index) !CValue {
33333333 const pt = f.dg.pt;
33343334 const zcu = pt.zcu;
3335 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3335 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
33363336
33373337 const operand = try f.resolveInst(ty_op.operand);
33383338 try reap(f, inst, &.{ty_op.operand});
......@@ -3419,7 +3419,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
34193419 const pt = f.dg.pt;
34203420 const zcu = pt.zcu;
34213421 // *a = b;
3422 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3422 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
34233423
34243424 const ptr_ty = f.typeOf(bin_op.lhs);
34253425 const ptr_scalar_ty = ptr_ty.scalarType(zcu);
......@@ -3482,7 +3482,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
34823482 else => |index| {
34833483 try w.writeByte('&');
34843484 try f.writeCValue(w, ptr_val, .other);
3485 try w.print("[{d}]", .{@intFromEnum(index)});
3485 try w.print("[{d}]", .{@backingInt(index)});
34863486 },
34873487 }
34883488 try w.writeAll(", &");
......@@ -3508,7 +3508,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
35083508 .none => try f.writeCValueDeref(w, ptr_val),
35093509 else => |index| {
35103510 try f.writeCValue(w, ptr_val, .other);
3511 try w.print("[{d}]", .{@intFromEnum(index)});
3511 try w.print("[{d}]", .{@backingInt(index)});
35123512 },
35133513 }
35143514 try w.writeAll(" = ");
......@@ -3522,7 +3522,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
35223522fn airOverflow(f: *Function, inst: Air.Inst.Index, operation: []const u8, info: BuiltinInfo) !CValue {
35233523 const pt = f.dg.pt;
35243524 const zcu = pt.zcu;
3525 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3525 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
35263526 const bin_op = f.air.extraData(Air.Bin, ty_pl.payload).data;
35273527
35283528 const lhs = try f.resolveInst(bin_op.lhs);
......@@ -3584,7 +3584,7 @@ fn airOverflow(f: *Function, inst: Air.Inst.Index, operation: []const u8, info:
35843584fn airNot(f: *Function, inst: Air.Inst.Index) !CValue {
35853585 const pt = f.dg.pt;
35863586 const zcu = pt.zcu;
3587 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3587 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
35883588 const operand_ty = f.typeOf(ty_op.operand);
35893589 const scalar_ty = operand_ty.scalarType(zcu);
35903590 if (scalar_ty.toIntern() != .bool_type) return try airUnBuiltinCall(f, inst, ty_op.operand, "not", .bits);
......@@ -3619,7 +3619,7 @@ fn airBinOp(
36193619) !CValue {
36203620 const pt = f.dg.pt;
36213621 const zcu = pt.zcu;
3622 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3622 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
36233623 const operand_ty = f.typeOf(bin_op.lhs);
36243624 const scalar_ty = operand_ty.scalarType(zcu);
36253625 if ((scalar_ty.isInt(zcu) and scalar_ty.bitSize(zcu) > 64) or scalar_ty.isRuntimeFloat())
......@@ -3715,7 +3715,7 @@ fn airEquality(
37153715) !CValue {
37163716 const pt = f.dg.pt;
37173717 const zcu = pt.zcu;
3718 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3718 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
37193719
37203720 const operand_ty = f.typeOf(bin_op.lhs);
37213721 if (operand_ty.isAbiInt(zcu)) {
......@@ -3799,7 +3799,7 @@ fn airEquality(
37993799}
38003800
38013801fn airCmpLteErrorsLen(f: *Function, inst: Air.Inst.Index) !CValue {
3802 const un_op = f.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
3802 const un_op = f.air.instructions.items(.data)[@backingInt(inst)].un_op;
38033803
38043804 const operand = try f.resolveInst(un_op);
38053805 try reap(f, inst, &.{un_op});
......@@ -3817,7 +3817,7 @@ fn airCmpLteErrorsLen(f: *Function, inst: Air.Inst.Index) !CValue {
38173817fn airPtrAddSub(f: *Function, inst: Air.Inst.Index, operator: u8) !CValue {
38183818 const pt = f.dg.pt;
38193819 const zcu = pt.zcu;
3820 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3820 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
38213821 const bin_op = f.air.extraData(Air.Bin, ty_pl.payload).data;
38223822
38233823 const lhs = try f.resolveInst(bin_op.lhs);
......@@ -3857,7 +3857,7 @@ fn airPtrAddSub(f: *Function, inst: Air.Inst.Index, operator: u8) !CValue {
38573857fn airMinMax(f: *Function, inst: Air.Inst.Index, operator: u8, operation: []const u8) !CValue {
38583858 const pt = f.dg.pt;
38593859 const zcu = pt.zcu;
3860 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3860 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
38613861
38623862 const inst_ty = f.typeOfIndex(inst);
38633863 const inst_scalar_ty = inst_ty.scalarType(zcu);
......@@ -3897,7 +3897,7 @@ fn airMinMax(f: *Function, inst: Air.Inst.Index, operator: u8, operation: []cons
38973897}
38983898
38993899fn airSlice(f: *Function, inst: Air.Inst.Index) !CValue {
3900 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3900 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
39013901 const bin_op = f.air.extraData(Air.Bin, ty_pl.payload).data;
39023902
39033903 const ptr = try f.resolveInst(bin_op.lhs);
......@@ -4014,13 +4014,13 @@ fn airCall(
40144014 .never_tail => {
40154015 try f.need_never_tail_funcs.put(gpa, fn_nav, {});
40164016 try w.print("zig_never_tail_{f}__{d}", .{
4017 fmtIdentUnsolo(ip.getNav(fn_nav).name.toSlice(ip)), @intFromEnum(fn_nav),
4017 fmtIdentUnsolo(ip.getNav(fn_nav).name.toSlice(ip)), @backingInt(fn_nav),
40184018 });
40194019 },
40204020 .never_inline => {
40214021 try f.need_never_inline_funcs.put(gpa, fn_nav, {});
40224022 try w.print("zig_never_inline_{f}__{d}", .{
4023 fmtIdentUnsolo(ip.getNav(fn_nav).name.toSlice(ip)), @intFromEnum(fn_nav),
4023 fmtIdentUnsolo(ip.getNav(fn_nav).name.toSlice(ip)), @backingInt(fn_nav),
40244024 });
40254025 },
40264026 else => unreachable,
......@@ -4056,7 +4056,7 @@ fn airCall(
40564056}
40574057
40584058fn airDbgStmt(f: *Function, inst: Air.Inst.Index) !CValue {
4059 const dbg_stmt = f.air.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt;
4059 const dbg_stmt = f.air.instructions.items(.data)[@backingInt(inst)].dbg_stmt;
40604060 const w = &f.code.writer;
40614061 // TODO re-evaluate whether to emit these or not. If we naively emit
40624062 // these directives, the output file will report bogus line numbers because
......@@ -4093,9 +4093,9 @@ fn airDbgInlineBlock(f: *Function, inst: Air.Inst.Index) !CValue {
40934093fn airDbgVar(f: *Function, inst: Air.Inst.Index) !CValue {
40944094 const pt = f.dg.pt;
40954095 const zcu = pt.zcu;
4096 const tag = f.air.instructions.items(.tag)[@intFromEnum(inst)];
4097 const pl_op = f.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
4098 const name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
4096 const tag = f.air.instructions.items(.tag)[@backingInt(inst)];
4097 const pl_op = f.air.instructions.items(.data)[@backingInt(inst)].pl_op;
4098 const name: Air.NullTerminatedString = @fromBackingInt(@intCast(pl_op.payload));
40994099 const operand_is_undef = if (pl_op.operand.toInterned()) |ip_index| Value.fromInterned(ip_index).isUndef(zcu) else false;
41004100 if (!operand_is_undef) _ = try f.resolveInst(pl_op.operand);
41014101
......@@ -4236,7 +4236,7 @@ fn lowerTry(
42364236}
42374237
42384238fn airBr(f: *Function, inst: Air.Inst.Index) !void {
4239 const branch = f.air.instructions.items(.data)[@intFromEnum(inst)].br;
4239 const branch = f.air.instructions.items(.data)[@backingInt(inst)].br;
42404240 const block = f.blocks.get(branch.block_inst).?;
42414241 const result = block.result;
42424242 const w = &f.code.writer;
......@@ -4263,14 +4263,14 @@ fn airBr(f: *Function, inst: Air.Inst.Index) !void {
42634263}
42644264
42654265fn airRepeat(f: *Function, inst: Air.Inst.Index) !void {
4266 const repeat = f.air.instructions.items(.data)[@intFromEnum(inst)].repeat;
4267 try f.code.writer.print("goto zig_loop_{d};\n", .{@intFromEnum(repeat.loop_inst)});
4266 const repeat = f.air.instructions.items(.data)[@backingInt(inst)].repeat;
4267 try f.code.writer.print("goto zig_loop_{d};\n", .{@backingInt(repeat.loop_inst)});
42684268}
42694269
42704270fn airSwitchDispatch(f: *Function, inst: Air.Inst.Index) !void {
42714271 const pt = f.dg.pt;
42724272 const zcu = pt.zcu;
4273 const br = f.air.instructions.items(.data)[@intFromEnum(inst)].br;
4273 const br = f.air.instructions.items(.data)[@backingInt(inst)].br;
42744274 const w = &f.code.writer;
42754275
42764276 if (br.operand.toInterned()) |cond_ip_index| {
......@@ -4294,7 +4294,7 @@ fn airSwitchDispatch(f: *Function, inst: Air.Inst.Index) !void {
42944294 }
42954295 }
42964296 } else switch_br.cases_len;
4297 try w.print("goto zig_switch_{d}_dispatch_{d};\n", .{ @intFromEnum(br.block_inst), target_case_idx });
4297 try w.print("goto zig_switch_{d}_dispatch_{d};\n", .{ @backingInt(br.block_inst), target_case_idx });
42984298 return;
42994299 }
43004300
......@@ -4306,7 +4306,7 @@ fn airSwitchDispatch(f: *Function, inst: Air.Inst.Index) !void {
43064306 try f.writeCValue(w, cond, .other);
43074307 try w.writeByte(';');
43084308 try f.newline();
4309 try w.print("goto zig_switch_{d}_loop;\n", .{@intFromEnum(br.block_inst)});
4309 try w.print("goto zig_switch_{d}_loop;\n", .{@backingInt(br.block_inst)});
43104310}
43114311
43124312fn airPtrCast(f: *Function, inst: Air.Inst.Index) Error!CValue {
......@@ -4325,7 +4325,7 @@ fn airPtrCast(f: *Function, inst: Air.Inst.Index) Error!CValue {
43254325
43264326 // For slice casts we need to assign both fields.
43274327
4328 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4328 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
43294329 const operand = try f.resolveInst(ty_op.operand);
43304330
43314331 const w = &f.code.writer;
......@@ -4352,7 +4352,7 @@ fn airPtrCast(f: *Function, inst: Air.Inst.Index) Error!CValue {
43524352fn airSimpleCast(f: *Function, inst: Air.Inst.Index) Error!CValue {
43534353 const zcu = f.dg.pt.zcu;
43544354
4355 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4355 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
43564356 const dest_ty = f.typeOfIndex(inst);
43574357 const operand_ty = f.typeOf(ty_op.operand);
43584358 const operand = try f.resolveInst(ty_op.operand);
......@@ -4378,7 +4378,7 @@ fn airSimpleCast(f: *Function, inst: Air.Inst.Index) Error!CValue {
43784378fn airNopCast(f: *Function, inst: Air.Inst.Index) Error!CValue {
43794379 const zcu = f.dg.pt.zcu;
43804380
4381 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4381 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
43824382 const dest_ty = f.typeOfIndex(inst);
43834383 const operand_ty = f.typeOf(ty_op.operand);
43844384 const operand = try f.resolveInst(ty_op.operand);
......@@ -4393,7 +4393,7 @@ fn airNopCast(f: *Function, inst: Air.Inst.Index) Error!CValue {
43934393fn airUnionFromEnum(f: *Function, inst: Air.Inst.Index) Error!CValue {
43944394 const zcu = f.dg.pt.zcu;
43954395
4396 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4396 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
43974397 const dest_ty = f.typeOfIndex(inst);
43984398 const operand_ty = f.typeOf(ty_op.operand);
43994399 const operand = try f.resolveInst(ty_op.operand);
......@@ -4418,7 +4418,7 @@ fn airBitCast(f: *Function, inst: Air.Inst.Index) Error!CValue {
44184418 const zcu = pt.zcu;
44194419 const w = &f.code.writer;
44204420
4421 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4421 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
44224422 const dest_ty = f.typeOfIndex(inst);
44234423
44244424 const operand = try f.resolveInst(ty_op.operand);
......@@ -4594,7 +4594,7 @@ fn airLoop(f: *Function, inst: Air.Inst.Index) !void {
45944594 // this label. Since we need a label for arbitrary `repeat`
45954595 // anyway, there's actually no need to use a "real" looping
45964596 // construct at all!
4597 try w.print("zig_loop_{d}:", .{@intFromEnum(inst)});
4597 try w.print("zig_loop_{d}:", .{@backingInt(inst)});
45984598 try f.newline();
45994599 try genBodyInner(f, block.body); // no need to restore state, we're noreturn
46004600}
......@@ -4647,7 +4647,7 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
46474647 const cond_val = if (is_dispatch_loop) cond: {
46484648 const new_local = try f.allocLocal(inst, cond_ty);
46494649 try f.copyCValue(new_local, init_condition);
4650 try w.print("zig_switch_{d}_loop:", .{@intFromEnum(inst)});
4650 try w.print("zig_switch_{d}_loop:", .{@backingInt(inst)});
46514651 try f.newline();
46524652 try f.loop_switch_conds.put(gpa, inst, new_local.new_local);
46534653 break :cond new_local;
......@@ -4757,7 +4757,7 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
47574757 f.indent();
47584758 try f.newline();
47594759 if (is_dispatch_loop) {
4760 try w.print("zig_switch_{d}_dispatch_{d}:;", .{ @intFromEnum(inst), case.idx });
4760 try w.print("zig_switch_{d}_dispatch_{d}:;", .{ @backingInt(inst), case.idx });
47614761 try f.newline();
47624762 }
47634763 try genBodyResolveState(f, inst, liveness.deaths[case.idx], case.body, true);
......@@ -4781,7 +4781,7 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
47814781 try lowerSwitchToConditions(f, inst, cond_val, lowered_cond_ty, switch_br, liveness, is_dispatch_loop, true);
47824782 }
47834783 if (is_dispatch_loop) {
4784 try w.print("zig_switch_{d}_dispatch_{d}: ", .{ @intFromEnum(inst), switch_br.cases_len });
4784 try w.print("zig_switch_{d}_dispatch_{d}: ", .{ @backingInt(inst), switch_br.cases_len });
47854785 }
47864786 const else_body = it.elseBody();
47874787 if (else_body.len > 0) {
......@@ -4838,7 +4838,7 @@ fn lowerSwitchToConditions(
48384838 f.indent();
48394839 try f.newline();
48404840 if (is_dispatch_loop) {
4841 try w.print("zig_switch_{d}_dispatch_{d}: ", .{ @intFromEnum(inst), case.idx });
4841 try w.print("zig_switch_{d}_dispatch_{d}: ", .{ @backingInt(inst), case.idx });
48424842 }
48434843 try genBodyResolveState(f, inst, liveness.deaths[case.idx], case.body, true);
48444844 try f.outdent();
......@@ -4850,7 +4850,7 @@ fn lowerSwitchToConditions(
48504850
48514851 if (!only_ranges) {
48524852 if (is_dispatch_loop) {
4853 try w.print("zig_switch_{d}_dispatch_{d}: ", .{ @intFromEnum(inst), switch_br.cases_len });
4853 try w.print("zig_switch_{d}_dispatch_{d}: ", .{ @backingInt(inst), switch_br.cases_len });
48544854 }
48554855 const else_body = it.elseBody();
48564856 if (else_body.len > 0) {
......@@ -5210,7 +5210,7 @@ fn airIsNull(
52105210) !CValue {
52115211 const pt = f.dg.pt;
52125212 const zcu = pt.zcu;
5213 const un_op = f.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5213 const un_op = f.air.instructions.items(.data)[@backingInt(inst)].un_op;
52145214
52155215 const w = &f.code.writer;
52165216 const operand = try f.resolveInst(un_op);
......@@ -5268,7 +5268,7 @@ fn airIsNull(
52685268fn airOptionalPayload(f: *Function, inst: Air.Inst.Index, is_ptr: bool) !CValue {
52695269 const pt = f.dg.pt;
52705270 const zcu = pt.zcu;
5271 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5271 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
52725272
52735273 const inst_ty = f.typeOfIndex(inst);
52745274 const operand_ty = f.typeOf(ty_op.operand);
......@@ -5305,7 +5305,7 @@ fn airOptionalPayload(f: *Function, inst: Air.Inst.Index, is_ptr: bool) !CValue
53055305fn airOptionalPayloadPtrSet(f: *Function, inst: Air.Inst.Index) !CValue {
53065306 const pt = f.dg.pt;
53075307 const zcu = pt.zcu;
5308 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5308 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
53095309 const w = &f.code.writer;
53105310 const operand = try f.resolveInst(ty_op.operand);
53115311 try reap(f, inst, &.{ty_op.operand});
......@@ -5418,7 +5418,7 @@ fn fieldLocation(
54185418}
54195419
54205420fn airStructFieldPtr(f: *Function, inst: Air.Inst.Index) !CValue {
5421 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5421 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
54225422 const extra = f.air.extraData(Air.StructField, ty_pl.payload).data;
54235423
54245424 const container_ptr_val = try f.resolveInst(extra.struct_operand);
......@@ -5428,7 +5428,7 @@ fn airStructFieldPtr(f: *Function, inst: Air.Inst.Index) !CValue {
54285428}
54295429
54305430fn airStructFieldPtrIndex(f: *Function, inst: Air.Inst.Index, index: u8) !CValue {
5431 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5431 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
54325432
54335433 const container_ptr_val = try f.resolveInst(ty_op.operand);
54345434 try reap(f, inst, &.{ty_op.operand});
......@@ -5439,7 +5439,7 @@ fn airStructFieldPtrIndex(f: *Function, inst: Air.Inst.Index, index: u8) !CValue
54395439fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {
54405440 const pt = f.dg.pt;
54415441 const zcu = pt.zcu;
5442 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5442 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
54435443 const extra = f.air.extraData(Air.FieldParentPtr, ty_pl.payload).data;
54445444
54455445 const container_ptr_ty = f.typeOfIndex(inst);
......@@ -5535,7 +5535,7 @@ fn airAggFieldVal(f: *Function, inst: Air.Inst.Index) !CValue {
55355535 const pt = f.dg.pt;
55365536 const zcu = pt.zcu;
55375537 const ip = &zcu.intern_pool;
5538 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5538 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
55395539 const extra = f.air.extraData(Air.StructField, ty_pl.payload).data;
55405540
55415541 const inst_ty = f.typeOfIndex(inst);
......@@ -5573,7 +5573,7 @@ fn airAggFieldVal(f: *Function, inst: Air.Inst.Index) !CValue {
55735573fn airUnwrapErrUnionErr(f: *Function, inst: Air.Inst.Index) !CValue {
55745574 const pt = f.dg.pt;
55755575 const zcu = pt.zcu;
5576 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5576 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
55775577
55785578 const inst_ty = f.typeOfIndex(inst);
55795579 const operand = try f.resolveInst(ty_op.operand);
......@@ -5599,7 +5599,7 @@ fn airUnwrapErrUnionErr(f: *Function, inst: Air.Inst.Index) !CValue {
55995599fn airUnwrapErrUnionPay(f: *Function, inst: Air.Inst.Index, is_ptr: bool) !CValue {
56005600 const pt = f.dg.pt;
56015601 const zcu = pt.zcu;
5602 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5602 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
56035603
56045604 const inst_ty = f.typeOfIndex(inst);
56055605 const operand = try f.resolveInst(ty_op.operand);
......@@ -5635,7 +5635,7 @@ fn airUnwrapErrUnionPay(f: *Function, inst: Air.Inst.Index, is_ptr: bool) !CValu
56355635
56365636fn airWrapOptional(f: *Function, inst: Air.Inst.Index) !CValue {
56375637 const zcu = f.dg.pt.zcu;
5638 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5638 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
56395639
56405640 const inst_ty = f.typeOfIndex(inst);
56415641
......@@ -5673,7 +5673,7 @@ fn airWrapOptional(f: *Function, inst: Air.Inst.Index) !CValue {
56735673fn airWrapErrUnionErr(f: *Function, inst: Air.Inst.Index) !CValue {
56745674 const pt = f.dg.pt;
56755675 const zcu = pt.zcu;
5676 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5676 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
56775677
56785678 const inst_ty = f.typeOfIndex(inst);
56795679 const payload_ty = inst_ty.errorUnionPayload(zcu);
......@@ -5703,7 +5703,7 @@ fn airWrapErrUnionErr(f: *Function, inst: Air.Inst.Index) !CValue {
57035703fn airErrUnionPayloadPtrSet(f: *Function, inst: Air.Inst.Index) !CValue {
57045704 const pt = f.dg.pt;
57055705 const w = &f.code.writer;
5706 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5706 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
57075707 const inst_ty = f.typeOfIndex(inst);
57085708 const operand = try f.resolveInst(ty_op.operand);
57095709
......@@ -5746,7 +5746,7 @@ fn airSaveErrReturnTraceIndex(f: *Function, inst: Air.Inst.Index) !CValue {
57465746fn airWrapErrUnionPay(f: *Function, inst: Air.Inst.Index) !CValue {
57475747 const pt = f.dg.pt;
57485748 const zcu = pt.zcu;
5749 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5749 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
57505750
57515751 const inst_ty = f.typeOfIndex(inst);
57525752 const payload_ty = inst_ty.errorUnionPayload(zcu);
......@@ -5774,7 +5774,7 @@ fn airWrapErrUnionPay(f: *Function, inst: Air.Inst.Index) !CValue {
57745774
57755775fn airIsErr(f: *Function, inst: Air.Inst.Index, is_ptr: bool, operator: []const u8) !CValue {
57765776 const pt = f.dg.pt;
5777 const un_op = f.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5777 const un_op = f.air.instructions.items(.data)[@backingInt(inst)].un_op;
57785778
57795779 const w = &f.code.writer;
57805780 const operand = try f.resolveInst(un_op);
......@@ -5798,7 +5798,7 @@ fn airIsErr(f: *Function, inst: Air.Inst.Index, is_ptr: bool, operator: []const
57985798fn airArrayToSlice(f: *Function, inst: Air.Inst.Index) !CValue {
57995799 const pt = f.dg.pt;
58005800 const zcu = pt.zcu;
5801 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5801 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
58025802
58035803 const operand = try f.resolveInst(ty_op.operand);
58045804 try reap(f, inst, &.{ty_op.operand});
......@@ -5835,7 +5835,7 @@ fn airArrayToSlice(f: *Function, inst: Air.Inst.Index) !CValue {
58355835fn airFloatCast(f: *Function, inst: Air.Inst.Index) !CValue {
58365836 const pt = f.dg.pt;
58375837 const zcu = pt.zcu;
5838 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5838 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
58395839
58405840 const inst_ty = f.typeOfIndex(inst);
58415841 const inst_scalar_ty = inst_ty.scalarType(zcu);
......@@ -5939,7 +5939,7 @@ fn airBinBuiltinCall(
59395939) !CValue {
59405940 const pt = f.dg.pt;
59415941 const zcu = pt.zcu;
5942 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
5942 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
59435943
59445944 const operand_ty = f.typeOf(bin_op.lhs);
59455945 const is_big = lowersToBigInt(operand_ty, zcu);
......@@ -6052,7 +6052,7 @@ fn airCmpBuiltinCall(
60526052fn airCmpxchg(f: *Function, inst: Air.Inst.Index, flavor: [*:0]const u8) !CValue {
60536053 const pt = f.dg.pt;
60546054 const zcu = pt.zcu;
6055 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6055 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
60566056 const extra = f.air.extraData(Air.Cmpxchg, ty_pl.payload).data;
60576057 const inst_ty = f.typeOfIndex(inst);
60586058 const ptr = try f.resolveInst(extra.ptr);
......@@ -6151,7 +6151,7 @@ fn airCmpxchg(f: *Function, inst: Air.Inst.Index, flavor: [*:0]const u8) !CValue
61516151fn airAtomicRmw(f: *Function, inst: Air.Inst.Index) !CValue {
61526152 const pt = f.dg.pt;
61536153 const zcu = pt.zcu;
6154 const pl_op = f.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
6154 const pl_op = f.air.instructions.items(.data)[@backingInt(inst)].pl_op;
61556155 const extra = f.air.extraData(Air.AtomicRmw, pl_op.payload).data;
61566156 const inst_ty = f.typeOfIndex(inst);
61576157 const ptr_ty = f.typeOf(pl_op.operand);
......@@ -6208,7 +6208,7 @@ fn airAtomicRmw(f: *Function, inst: Air.Inst.Index) !CValue {
62086208fn airAtomicLoad(f: *Function, inst: Air.Inst.Index) !CValue {
62096209 const pt = f.dg.pt;
62106210 const zcu = pt.zcu;
6211 const atomic_load = f.air.instructions.items(.data)[@intFromEnum(inst)].atomic_load;
6211 const atomic_load = f.air.instructions.items(.data)[@backingInt(inst)].atomic_load;
62126212 const ptr = try f.resolveInst(atomic_load.ptr);
62136213 try reap(f, inst, &.{atomic_load.ptr});
62146214 const ptr_ty = f.typeOf(atomic_load.ptr);
......@@ -6246,7 +6246,7 @@ fn airAtomicLoad(f: *Function, inst: Air.Inst.Index) !CValue {
62466246fn airAtomicStore(f: *Function, inst: Air.Inst.Index, order: [*:0]const u8) !CValue {
62476247 const pt = f.dg.pt;
62486248 const zcu = pt.zcu;
6249 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6249 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
62506250 const ptr_ty = f.typeOf(bin_op.lhs);
62516251 const ty = ptr_ty.childType(zcu);
62526252 const ptr = try f.resolveInst(bin_op.lhs);
......@@ -6283,7 +6283,7 @@ fn airAtomicStore(f: *Function, inst: Air.Inst.Index, order: [*:0]const u8) !CVa
62836283fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
62846284 const pt = f.dg.pt;
62856285 const zcu = pt.zcu;
6286 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6286 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
62876287 const dest_ty = f.typeOf(bin_op.lhs);
62886288 const dest_slice = try f.resolveInst(bin_op.lhs);
62896289 const value = try f.resolveInst(bin_op.rhs);
......@@ -6389,7 +6389,7 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
63896389fn airMemcpy(f: *Function, inst: Air.Inst.Index, function_paren: []const u8) !CValue {
63906390 const pt = f.dg.pt;
63916391 const zcu = pt.zcu;
6392 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6392 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
63936393 const dest_ptr = try f.resolveInst(bin_op.lhs);
63946394 const src_ptr = try f.resolveInst(bin_op.rhs);
63956395 const dest_ty = f.typeOf(bin_op.lhs);
......@@ -6431,7 +6431,7 @@ fn airMemcpy(f: *Function, inst: Air.Inst.Index, function_paren: []const u8) !CV
64316431fn airSetUnionTag(f: *Function, inst: Air.Inst.Index) !CValue {
64326432 const pt = f.dg.pt;
64336433 const zcu = pt.zcu;
6434 const bin_op = f.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6434 const bin_op = f.air.instructions.items(.data)[@backingInt(inst)].bin_op;
64356435 const union_ptr = try f.resolveInst(bin_op.lhs);
64366436 const new_tag = try f.resolveInst(bin_op.rhs);
64376437 try reap(f, inst, &.{ bin_op.lhs, bin_op.rhs });
......@@ -6452,7 +6452,7 @@ fn airSetUnionTag(f: *Function, inst: Air.Inst.Index) !CValue {
64526452fn airGetUnionTag(f: *Function, inst: Air.Inst.Index) !CValue {
64536453 const pt = f.dg.pt;
64546454 const zcu = pt.zcu;
6455 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6455 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
64566456
64576457 const operand = try f.resolveInst(ty_op.operand);
64586458 try reap(f, inst, &.{ty_op.operand});
......@@ -6476,7 +6476,7 @@ fn airTagName(f: *Function, inst: Air.Inst.Index) !CValue {
64766476 const zcu = f.dg.pt.zcu;
64776477 const ip = &zcu.intern_pool;
64786478 const gpa = zcu.comp.gpa;
6479 const un_op = f.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
6479 const un_op = f.air.instructions.items(.data)[@backingInt(inst)].un_op;
64806480
64816481 const inst_ty = f.typeOfIndex(inst);
64826482 const enum_ty = f.typeOf(un_op);
......@@ -6489,7 +6489,7 @@ fn airTagName(f: *Function, inst: Air.Inst.Index) !CValue {
64896489 try f.need_tag_name_funcs.put(gpa, enum_ty.toIntern(), {});
64906490 try w.print(" = zig_tagName_{f}__{d}(", .{
64916491 fmtIdentUnsolo(enum_ty.containerTypeName(ip).toSlice(ip)),
6492 @intFromEnum(enum_ty.toIntern()),
6492 @backingInt(enum_ty.toIntern()),
64936493 });
64946494 try f.writeCValue(w, operand, .other);
64956495 try w.writeAll(");");
......@@ -6499,7 +6499,7 @@ fn airTagName(f: *Function, inst: Air.Inst.Index) !CValue {
64996499}
65006500
65016501fn airErrorName(f: *Function, inst: Air.Inst.Index) !CValue {
6502 const un_op = f.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
6502 const un_op = f.air.instructions.items(.data)[@backingInt(inst)].un_op;
65036503
65046504 const w = &f.code.writer;
65056505 const inst_ty = f.typeOfIndex(inst);
......@@ -6516,7 +6516,7 @@ fn airErrorName(f: *Function, inst: Air.Inst.Index) !CValue {
65166516}
65176517
65186518fn airSplat(f: *Function, inst: Air.Inst.Index) !CValue {
6519 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6519 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
65206520
65216521 const operand = try f.resolveInst(ty_op.operand);
65226522 try reap(f, inst, &.{ty_op.operand});
......@@ -6538,7 +6538,7 @@ fn airSplat(f: *Function, inst: Air.Inst.Index) !CValue {
65386538}
65396539
65406540fn airSelect(f: *Function, inst: Air.Inst.Index) !CValue {
6541 const pl_op = f.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
6541 const pl_op = f.air.instructions.items(.data)[@backingInt(inst)].pl_op;
65426542 const extra = f.air.extraData(Air.Bin, pl_op.payload).data;
65436543
65446544 const pred = try f.resolveInst(pl_op.operand);
......@@ -6645,7 +6645,7 @@ fn airShuffleTwo(f: *Function, inst: Air.Inst.Index) !CValue {
66456645fn airReduce(f: *Function, inst: Air.Inst.Index) !CValue {
66466646 const pt = f.dg.pt;
66476647 const zcu = pt.zcu;
6648 const reduce = f.air.instructions.items(.data)[@intFromEnum(inst)].reduce;
6648 const reduce = f.air.instructions.items(.data)[@backingInt(inst)].reduce;
66496649
66506650 const scalar_ty = f.typeOfIndex(inst);
66516651 const operand = try f.resolveInst(reduce.operand);
......@@ -6784,7 +6784,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
67846784 const pt = f.dg.pt;
67856785 const zcu = pt.zcu;
67866786 const ip = &zcu.intern_pool;
6787 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6787 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
67886788 const inst_ty = f.typeOfIndex(inst);
67896789 const len: usize = @intCast(inst_ty.arrayLen(zcu));
67906790 const elements: []const Air.Inst.Ref = @ptrCast(f.air.extra.items[ty_pl.payload..][0..len]);
......@@ -6860,7 +6860,7 @@ fn airUnionInit(f: *Function, inst: Air.Inst.Index) !CValue {
68606860 const pt = f.dg.pt;
68616861 const zcu = pt.zcu;
68626862 const ip = &zcu.intern_pool;
6863 const ty_pl = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6863 const ty_pl = f.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
68646864 const extra = f.air.extraData(Air.UnionInit, ty_pl.payload).data;
68656865 const field_index = extra.field_index;
68666866
......@@ -6904,7 +6904,7 @@ fn airUnionInit(f: *Function, inst: Air.Inst.Index) !CValue {
69046904fn airPrefetch(f: *Function, inst: Air.Inst.Index) !CValue {
69056905 const pt = f.dg.pt;
69066906 const zcu = pt.zcu;
6907 const prefetch = f.air.instructions.items(.data)[@intFromEnum(inst)].prefetch;
6907 const prefetch = f.air.instructions.items(.data)[@backingInt(inst)].prefetch;
69086908
69096909 const ptr_ty = f.typeOf(prefetch.ptr);
69106910 const ptr = try f.resolveInst(prefetch.ptr);
......@@ -6918,7 +6918,7 @@ fn airPrefetch(f: *Function, inst: Air.Inst.Index) !CValue {
69186918 try f.writeCValueMember(w, ptr, .{ .identifier = "ptr" })
69196919 else
69206920 try f.writeCValue(w, ptr, .other);
6921 try w.print(", {d}, {d});", .{ @intFromEnum(prefetch.rw), prefetch.locality });
6921 try w.print(", {d}, {d});", .{ @backingInt(prefetch.rw), prefetch.locality });
69226922 try f.newline();
69236923 },
69246924 // The available prefetch intrinsics do not accept a cache argument; only
......@@ -6930,7 +6930,7 @@ fn airPrefetch(f: *Function, inst: Air.Inst.Index) !CValue {
69306930}
69316931
69326932fn airWasmMemorySize(f: *Function, inst: Air.Inst.Index) !CValue {
6933 const pl_op = f.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
6933 const pl_op = f.air.instructions.items(.data)[@backingInt(inst)].pl_op;
69346934
69356935 const w = &f.code.writer;
69366936 const inst_ty = f.typeOfIndex(inst);
......@@ -6945,7 +6945,7 @@ fn airWasmMemorySize(f: *Function, inst: Air.Inst.Index) !CValue {
69456945}
69466946
69476947fn airWasmMemoryGrow(f: *Function, inst: Air.Inst.Index) !CValue {
6948 const pl_op = f.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
6948 const pl_op = f.air.instructions.items(.data)[@backingInt(inst)].pl_op;
69496949
69506950 const w = &f.code.writer;
69516951 const inst_ty = f.typeOfIndex(inst);
......@@ -6965,7 +6965,7 @@ fn airWasmMemoryGrow(f: *Function, inst: Air.Inst.Index) !CValue {
69656965fn airMulAdd(f: *Function, inst: Air.Inst.Index) !CValue {
69666966 const pt = f.dg.pt;
69676967 const zcu = pt.zcu;
6968 const pl_op = f.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
6968 const pl_op = f.air.instructions.items(.data)[@backingInt(inst)].pl_op;
69696969 const bin_op = f.air.extraData(Air.Bin, pl_op.payload).data;
69706970
69716971 const mulend1 = try f.resolveInst(bin_op.lhs);
......@@ -7000,7 +7000,7 @@ fn airMulAdd(f: *Function, inst: Air.Inst.Index) !CValue {
70007000}
70017001
70027002fn airRuntimeNavPtr(f: *Function, inst: Air.Inst.Index) !CValue {
7003 const ty_nav = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_nav;
7003 const ty_nav = f.air.instructions.items(.data)[@backingInt(inst)].ty_nav;
70047004 const w = &f.code.writer;
70057005 const local = try f.allocLocal(inst, .fromInterned(ty_nav.ty));
70067006 try f.writeCValue(w, local, .other);
......@@ -7032,7 +7032,7 @@ fn airCVaStart(f: *Function, inst: Air.Inst.Index) !CValue {
70327032}
70337033
70347034fn airCVaArg(f: *Function, inst: Air.Inst.Index) !CValue {
7035 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7035 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
70367036
70377037 const inst_ty = f.typeOfIndex(inst);
70387038 const va_list = try f.resolveInst(ty_op.operand);
......@@ -7051,7 +7051,7 @@ fn airCVaArg(f: *Function, inst: Air.Inst.Index) !CValue {
70517051}
70527052
70537053fn airCVaEnd(f: *Function, inst: Air.Inst.Index) !CValue {
7054 const un_op = f.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
7054 const un_op = f.air.instructions.items(.data)[@backingInt(inst)].un_op;
70557055
70567056 const va_list = try f.resolveInst(un_op);
70577057 try reap(f, inst, &.{un_op});
......@@ -7065,7 +7065,7 @@ fn airCVaEnd(f: *Function, inst: Air.Inst.Index) !CValue {
70657065}
70667066
70677067fn airCVaCopy(f: *Function, inst: Air.Inst.Index) !CValue {
7068 const ty_op = f.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7068 const ty_op = f.air.instructions.items(.data)[@backingInt(inst)].ty_op;
70697069
70707070 const inst_ty = f.typeOfIndex(inst);
70717071 const va_list = try f.resolveInst(ty_op.operand);
......@@ -7830,9 +7830,9 @@ fn freeLocal(f: *Function, inst: ?Air.Inst.Index, local_index: LocalIndex, ref_i
78307830 const local = f.locals.items[local_index];
78317831 if (inst) |i| {
78327832 if (ref_inst) |operand| {
7833 log.debug("%{d}: freeing t{d} (operand %{d})", .{ @intFromEnum(i), local_index, operand });
7833 log.debug("%{d}: freeing t{d} (operand %{d})", .{ @backingInt(i), local_index, operand });
78347834 } else {
7835 log.debug("%{d}: freeing t{d}", .{ @intFromEnum(i), local_index });
7835 log.debug("%{d}: freeing t{d}", .{ @backingInt(i), local_index });
78367836 }
78377837 } else {
78387838 if (ref_inst) |operand| {
......@@ -7915,11 +7915,11 @@ fn renderNavName(w: *Writer, nav_index: InternPool.Nav.Index, ip: *const InternP
79157915 const fqn_slice = ip.getNav(nav_index).fqn.toSlice(ip);
79167916 try w.print("{f}__{d}", .{
79177917 fmtIdentUnsolo(fqn_slice[0..@min(fqn_slice.len, 100)]),
7918 @intFromEnum(nav_index),
7918 @backingInt(nav_index),
79197919 });
79207920 }
79217921}
79227922
79237923fn renderUavName(w: *Writer, uav: Value) !void {
7924 try w.print("__anon_{d}", .{@intFromEnum(uav.toIntern())});
7924 try w.print("__anon_{d}", .{@backingInt(uav.toIntern())});
79257925}
src/codegen/c/type.zig+2-2
......@@ -904,7 +904,7 @@ pub const CType = union(enum) {
904904 },
905905 .error_set => switch (ty.toIntern()) {
906906 .anyerror_type => try w.writeAll("anyerror"),
907 else => try w.print("error_{d}", .{@intFromEnum(ty.toIntern())}),
907 else => try w.print("error_{d}", .{@backingInt(ty.toIntern())}),
908908 },
909909 .optional => try w.print("opt_{f}", .{fmtZigType(ty.optionalChild(zcu), zcu)}),
910910 .error_union => try w.print("errunion_{f}", .{fmtZigType(ty.errorUnionPayload(zcu), zcu)}),
......@@ -944,7 +944,7 @@ pub const CType = union(enum) {
944944
945945 .array => if (ty.sentinel(zcu)) |s| try w.print("arr_{d}s{d}_{f}", .{
946946 ty.arrayLen(zcu),
947 @intFromEnum(s.toIntern()),
947 @backingInt(s.toIntern()),
948948 fmtZigType(ty.childType(zcu), zcu),
949949 }) else try w.print("arr_{d}_{f}", .{
950950 ty.arrayLen(zcu),
src/codegen/llvm.zig+9-9
......@@ -1739,14 +1739,14 @@ pub const Object = struct {
17391739 assert(zcu.intern_pool.typeOf(val) == .type_type);
17401740
17411741 {
1742 assert(@intFromEnum(index) == o.lazy_abi_aligns.items.len);
1742 assert(@backingInt(index) == o.lazy_abi_aligns.items.len);
17431743 try o.lazy_abi_aligns.ensureUnusedCapacity(gpa, 1);
17441744 const fwd_ref = try o.builder.alignmentForwardReference();
17451745 o.lazy_abi_aligns.appendAssumeCapacity(fwd_ref);
17461746 }
17471747
17481748 if (!o.builder.strip) {
1749 assert(@intFromEnum(index) == o.debug_types.items.len);
1749 assert(@backingInt(index) == o.debug_types.items.len);
17501750 try o.debug_types.ensureUnusedCapacity(gpa, 1);
17511751 const fwd_ref = try o.builder.debugForwardReference();
17521752 o.debug_types.appendAssumeCapacity(fwd_ref);
......@@ -1766,13 +1766,13 @@ pub const Object = struct {
17661766 const ty: Type = .fromInterned(val);
17671767
17681768 {
1769 const fwd_ref = o.lazy_abi_aligns.items[@intFromEnum(index)];
1769 const fwd_ref = o.lazy_abi_aligns.items[@backingInt(index)];
17701770 o.builder.resolveAlignmentForwardReference(fwd_ref, .fromByteUnits(1));
17711771 }
17721772
17731773 if (!o.builder.strip) {
17741774 assert(val != .anyerror_type);
1775 const fwd_ref = o.debug_types.items[@intFromEnum(index)];
1775 const fwd_ref = o.debug_types.items[@backingInt(index)];
17761776 const name_str = try o.builder.metadataStringFmt("{f}", .{ty.fmt(pt)});
17771777 // If `ty` is a function, use a dummy *function* type to prevent existing debug
17781778 // subprograms from becoming ill-formed.
......@@ -1793,12 +1793,12 @@ pub const Object = struct {
17931793 const ty: Type = .fromInterned(val);
17941794
17951795 {
1796 const fwd_ref = o.lazy_abi_aligns.items[@intFromEnum(index)];
1796 const fwd_ref = o.lazy_abi_aligns.items[@backingInt(index)];
17971797 o.builder.resolveAlignmentForwardReference(fwd_ref, ty.abiAlignment(zcu).toLlvm());
17981798 }
17991799
18001800 if (!o.builder.strip) {
1801 const fwd_ref = o.debug_types.items[@intFromEnum(index)];
1801 const fwd_ref = o.debug_types.items[@backingInt(index)];
18021802 if (val == .anyerror_type) {
18031803 // Don't lower this now; it will be populated in `emit` instead.
18041804 assert(o.debug_anyerror_fwd_ref == fwd_ref.toOptional());
......@@ -1845,7 +1845,7 @@ pub const Object = struct {
18451845 pub fn getDebugType(o: *Object, pt: Zcu.PerThread, ty: Type) Allocator.Error!Builder.Metadata {
18461846 assert(!o.builder.strip);
18471847 const index = try o.type_pool.get(pt, .{ .llvm = o }, ty.toIntern());
1848 return o.debug_types.items[@intFromEnum(index)];
1848 return o.debug_types.items[@backingInt(index)];
18491849 }
18501850
18511851 /// In codegen logic, instead of calling this directly, use `getDebugType` to get a forward
......@@ -3958,7 +3958,7 @@ pub const Object = struct {
39583958 errdefer assert(o.uav_map.remove(.{ .val = uav_val, .@"addrspace" = @"addrspace" }));
39593959
39603960 const llvm_ty = try o.lowerType(uav_ty, .in_memory);
3961 const llvm_name = try o.builder.strtabStringFmt("__anon_{d}", .{@intFromEnum(uav_val)});
3961 const llvm_name = try o.builder.strtabStringFmt("__anon_{d}", .{@backingInt(uav_val)});
39623962 const llvm_variable = try o.builder.addVariable(llvm_name, llvm_ty, llvm_addrspace);
39633963 gop.value_ptr.* = llvm_variable;
39643964 try llvm_variable.setInitializer(try o.lowerValue(uav_val, .in_memory), &o.builder);
......@@ -4195,7 +4195,7 @@ pub const Object = struct {
41954195
41964196 pub fn lazyAbiAlignment(o: *Object, pt: Zcu.PerThread, ty: Type) Allocator.Error!Builder.Alignment.Lazy {
41974197 const index = try o.type_pool.get(pt, .{ .llvm = o }, ty.toIntern());
4198 return o.lazy_abi_aligns.items[@intFromEnum(index)];
4198 return o.lazy_abi_aligns.items[@backingInt(index)];
41994199 }
42004200
42014201 pub fn getIsNamedEnumValueFunction(o: *Object, enum_ty: Type) Allocator.Error!Builder.Function.Index {
src/codegen/llvm/FuncGen.zig+129-129
......@@ -351,7 +351,7 @@ fn genBody(self: *FuncGen, body: []const Air.Inst.Index, coverage_point: Air.Cov
351351 for (body) |inst| {
352352 if (self.liveness.isUnused(inst) and !self.air.mustLower(inst, ip)) continue;
353353
354 const val: Builder.Value = switch (air_tags[@intFromEnum(inst)]) {
354 const val: Builder.Value = switch (air_tags[@backingInt(inst)]) {
355355 // zig fmt: off
356356
357357 // Required due to `.scalarize_bit_cast_vector_non_elementwise` being enabled.
......@@ -1061,7 +1061,7 @@ fn airRet(self: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error!vo
10611061 const o = self.object;
10621062 const zcu = o.zcu;
10631063 const ip = &zcu.intern_pool;
1064 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1064 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
10651065
10661066 const ret_ty = self.typeOf(un_op);
10671067
......@@ -1136,7 +1136,7 @@ fn airRetLoad(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!void {
11361136 const o = self.object;
11371137 const zcu = o.zcu;
11381138 const ip = &zcu.intern_pool;
1139 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1139 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
11401140 const ptr_ty = self.typeOf(un_op);
11411141 const ret_ty = ptr_ty.childType(zcu);
11421142 const fn_info = zcu.typeToFunc(.fromInterned(ip.getNav(self.nav_index).resolved.?.type)).?;
......@@ -1162,7 +1162,7 @@ fn airRetLoad(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!void {
11621162}
11631163
11641164fn airCVaArg(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
1165 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1165 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
11661166 const list = try self.resolveInst(ty_op.operand);
11671167 const arg_ty = ty_op.ty.toType();
11681168 const llvm_arg_ty = try self.object.lowerType(arg_ty, .by_value);
......@@ -1173,7 +1173,7 @@ fn airCVaArg(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
11731173fn airCVaCopy(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
11741174 const o = self.object;
11751175 const zcu = o.zcu;
1176 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1176 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
11771177 const src_list = try self.resolveInst(ty_op.operand);
11781178 const va_list_ty = ty_op.ty.toType();
11791179
......@@ -1187,7 +1187,7 @@ fn airCVaCopy(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Valu
11871187}
11881188
11891189fn airCVaEnd(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
1190 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1190 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
11911191 const src_list = try self.resolveInst(un_op);
11921192
11931193 _ = try self.wip.callIntrinsic(.normal, .none, .va_end, &.{src_list.typeOfWip(&self.wip)}, &.{src_list}, "");
......@@ -1214,7 +1214,7 @@ fn airCmp(
12141214 op: math.CompareOperator,
12151215 fast: Builder.FastMathKind,
12161216) Allocator.Error!Builder.Value {
1217 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1217 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
12181218 const lhs = try self.resolveInst(bin_op.lhs);
12191219 const rhs = try self.resolveInst(bin_op.rhs);
12201220 const operand_ty = self.typeOf(bin_op.lhs);
......@@ -1223,7 +1223,7 @@ fn airCmp(
12231223}
12241224
12251225fn airCmpVector(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
1226 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
1226 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
12271227 const extra = self.air.extraData(Air.VectorCmp, ty_pl.payload).data;
12281228
12291229 const lhs = try self.resolveInst(extra.lhs);
......@@ -1236,7 +1236,7 @@ fn airCmpVector(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind
12361236
12371237fn airCmpLteErrorsLen(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
12381238 const o = self.object;
1239 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1239 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
12401240 const operand = try self.resolveInst(un_op);
12411241 const errors_len_ptr = try o.getErrorsLen();
12421242 const errors_len_val = try self.load(errors_len_ptr.toValue(&o.builder), .none, .anyerror, .normal);
......@@ -1392,7 +1392,7 @@ fn lowerBlock(
13921392
13931393fn airBr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!void {
13941394 const zcu = self.object.zcu;
1395 const branch = self.air.instructions.items(.data)[@intFromEnum(inst)].br;
1395 const branch = self.air.instructions.items(.data)[@backingInt(inst)].br;
13961396 const block = self.blocks.get(branch.block_inst).?;
13971397
13981398 // Add the values to the lists only if the break provides a value.
......@@ -1408,7 +1408,7 @@ fn airBr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!void {
14081408}
14091409
14101410fn airRepeat(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!void {
1411 const repeat = self.air.instructions.items(.data)[@intFromEnum(inst)].repeat;
1411 const repeat = self.air.instructions.items(.data)[@backingInt(inst)].repeat;
14121412 const loop_bb = self.loops.get(repeat.loop_inst).?;
14131413 loop_bb.ptr(&self.wip).incoming += 1;
14141414 _ = try self.wip.br(loop_bb);
......@@ -1603,7 +1603,7 @@ fn lowerSwitchDispatch(
16031603}
16041604
16051605fn airSwitchDispatch(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!void {
1606 const br = self.air.instructions.items(.data)[@intFromEnum(inst)].br;
1606 const br = self.air.instructions.items(.data)[@backingInt(inst)].br;
16071607 const dispatch_info = self.switch_dispatch_info.get(br.block_inst).?;
16081608 return self.lowerSwitchDispatch(br.block_inst, br.operand, dispatch_info);
16091609}
......@@ -1850,7 +1850,7 @@ fn airSwitchBr(self: *FuncGen, inst: Air.Inst.Index, is_dispatch_loop: bool) Tod
18501850 const table_val = try o.builder.arrayConst(table_llvm_ty, table_elems);
18511851
18521852 const table_variable = try o.builder.addVariable(
1853 try o.builder.strtabStringFmt("__jmptab_{d}", .{@intFromEnum(inst)}),
1853 try o.builder.strtabStringFmt("__jmptab_{d}", .{@backingInt(inst)}),
18541854 table_llvm_ty,
18551855 .default,
18561856 );
......@@ -2018,7 +2018,7 @@ fn airLoop(self: *FuncGen, inst: Air.Inst.Index) TodoError!void {
20182018fn airArrayToSlice(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
20192019 const o = self.object;
20202020 const zcu = o.zcu;
2021 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2021 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
20222022 const operand_ty = self.typeOf(ty_op.operand);
20232023 const array_ty = operand_ty.childType(zcu);
20242024 const llvm_usize = try o.lowerType(.usize, .by_value);
......@@ -2031,7 +2031,7 @@ fn airArrayToSlice(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder
20312031fn airFloatFromInt(self: *FuncGen, inst: Air.Inst.Index) TodoError!Builder.Value {
20322032 const o = self.object;
20332033 const zcu = o.zcu;
2034 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2034 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
20352035
20362036 const operand = try self.resolveInst(ty_op.operand);
20372037 const operand_ty = self.typeOf(ty_op.operand);
......@@ -2100,7 +2100,7 @@ fn airIntFromFloat(
21002100 const o = self.object;
21012101 const zcu = o.zcu;
21022102 const target = zcu.getTarget();
2103 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2103 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21042104
21052105 const operand = try self.resolveInst(ty_op.operand);
21062106 const operand_ty = self.typeOf(ty_op.operand);
......@@ -2188,21 +2188,21 @@ fn sliceOrArrayLenInBytes(fg: *FuncGen, ptr: Builder.Value, ty: Type) Allocator.
21882188}
21892189
21902190fn airSliceField(self: *FuncGen, inst: Air.Inst.Index, index: u32) Allocator.Error!Builder.Value {
2191 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2191 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21922192 const operand = try self.resolveInst(ty_op.operand);
21932193 return self.wip.extractValue(operand, &.{index}, "");
21942194}
21952195
21962196fn airPtrSliceFieldPtr(self: *FuncGen, inst: Air.Inst.Index, index: u1) Allocator.Error!Builder.Value {
21972197 const zcu = self.object.zcu;
2198 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2198 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21992199 const slice_ptr = try self.resolveInst(ty_op.operand);
22002200 return self.ptraddConst(slice_ptr, index * Type.usize.abiSize(zcu));
22012201}
22022202
22032203fn airSliceElemVal(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
22042204 const zcu = self.object.zcu;
2205 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2205 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
22062206 const slice_ty = self.typeOf(bin_op.lhs);
22072207 const slice = try self.resolveInst(bin_op.lhs);
22082208 const index = try self.resolveInst(bin_op.rhs);
......@@ -2219,7 +2219,7 @@ fn airSliceElemVal(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder
22192219
22202220fn airSliceElemPtr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
22212221 const zcu = self.object.zcu;
2222 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2222 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
22232223 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;
22242224 const slice_ty = self.typeOf(bin_op.lhs);
22252225
......@@ -2232,7 +2232,7 @@ fn airSliceElemPtr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder
22322232fn airArrayElemVal(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
22332233 const zcu = self.object.zcu;
22342234
2235 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2235 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
22362236 const array_ty = self.typeOf(bin_op.lhs);
22372237 const array_llvm_val = try self.resolveInst(bin_op.lhs);
22382238 const rhs = try self.resolveInst(bin_op.rhs);
......@@ -2247,7 +2247,7 @@ fn airArrayElemVal(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder
22472247}
22482248
22492249fn airLegalizeVecElemVal(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
2250 const bin_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2250 const bin_op = fg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
22512251 const vec = try fg.resolveInst(bin_op.lhs);
22522252 const index = try fg.resolveInst(bin_op.rhs);
22532253 return fg.wip.extractElement(vec, index, "");
......@@ -2255,7 +2255,7 @@ fn airLegalizeVecElemVal(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Bui
22552255fn airLegalizeVecStoreElem(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
22562256 const zcu = fg.object.zcu;
22572257
2258 const pl_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
2258 const pl_op = fg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
22592259 const extra = fg.air.extraData(Air.Bin, pl_op.payload).data;
22602260
22612261 const ptr_ty = fg.typeOf(pl_op.operand);
......@@ -2276,7 +2276,7 @@ fn airLegalizeVecStoreElem(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!B
22762276
22772277fn airPtrElemVal(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
22782278 const zcu = self.object.zcu;
2279 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2279 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
22802280 const ptr_ty = self.typeOf(bin_op.lhs);
22812281 const elem_ty = ptr_ty.indexableElem(zcu);
22822282 const base_ptr = try self.resolveInst(bin_op.lhs);
......@@ -2294,7 +2294,7 @@ fn airPtrElemVal(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.V
22942294
22952295fn airPtrElemPtr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
22962296 const zcu = self.object.zcu;
2297 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2297 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
22982298 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;
22992299 const ptr_ty = self.typeOf(bin_op.lhs);
23002300 const elem_ty = ptr_ty.indexableElem(zcu);
......@@ -2307,7 +2307,7 @@ fn airPtrElemPtr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.V
23072307}
23082308
23092309fn airStructFieldPtr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
2310 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2310 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
23112311 const struct_field = self.air.extraData(Air.StructField, ty_pl.payload).data;
23122312 const struct_ptr = try self.resolveInst(struct_field.struct_operand);
23132313 const struct_ptr_ty = self.typeOf(struct_field.struct_operand);
......@@ -2319,7 +2319,7 @@ fn airStructFieldPtrIndex(
23192319 inst: Air.Inst.Index,
23202320 field_index: u32,
23212321) Allocator.Error!Builder.Value {
2322 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2322 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
23232323 const struct_ptr = try self.resolveInst(ty_op.operand);
23242324 const struct_ptr_ty = self.typeOf(ty_op.operand);
23252325 return self.fieldPtr(struct_ptr, struct_ptr_ty, field_index);
......@@ -2328,7 +2328,7 @@ fn airStructFieldPtrIndex(
23282328fn airAggFieldVal(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
23292329 const o = self.object;
23302330 const zcu = o.zcu;
2331 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2331 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
23322332 const struct_field = self.air.extraData(Air.StructField, ty_pl.payload).data;
23332333 const struct_ty = self.typeOf(struct_field.struct_operand);
23342334 const struct_llvm_val = try self.resolveInst(struct_field.struct_operand);
......@@ -2386,7 +2386,7 @@ fn airAggFieldVal(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.
23862386fn airFieldParentPtr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
23872387 const o = self.object;
23882388 const zcu = o.zcu;
2389 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2389 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
23902390 const extra = self.air.extraData(Air.FieldParentPtr, ty_pl.payload).data;
23912391
23922392 const field_ptr = try self.resolveInst(extra.field_ptr);
......@@ -2409,7 +2409,7 @@ fn airFieldParentPtr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Build
24092409}
24102410
24112411fn airNot(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
2412 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2412 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
24132413 const operand = try self.resolveInst(ty_op.operand);
24142414
24152415 return self.wip.not(operand, "");
......@@ -2421,7 +2421,7 @@ fn airUnreach(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!void {
24212421}
24222422
24232423fn airDbgStmt(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
2424 const dbg_stmt = self.air.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt;
2424 const dbg_stmt = self.air.instructions.items(.data)[@backingInt(inst)].dbg_stmt;
24252425 self.prev_dbg_line = @intCast(self.base_line + dbg_stmt.line + 1);
24262426 self.prev_dbg_column = @intCast(dbg_stmt.column + 1);
24272427
......@@ -2445,9 +2445,9 @@ fn airDbgVarPtr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Va
24452445 const o = self.object;
24462446 const pt = self.pt;
24472447 const zcu = o.zcu;
2448 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
2448 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
24492449 const operand = try self.resolveInst(pl_op.operand);
2450 const name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
2450 const name: Air.NullTerminatedString = @fromBackingInt(@intCast(pl_op.payload));
24512451 const ptr_ty = self.typeOf(pl_op.operand);
24522452
24532453 const debug_local_var = try o.builder.debugLocalVar(
......@@ -2477,10 +2477,10 @@ fn airDbgVarPtr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Va
24772477fn airDbgVarVal(self: *FuncGen, inst: Air.Inst.Index, is_arg: bool) Allocator.Error!Builder.Value {
24782478 const o = self.object;
24792479 const pt = self.pt;
2480 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
2480 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
24812481 const operand = try self.resolveInst(pl_op.operand);
24822482 const operand_ty = self.typeOf(pl_op.operand);
2483 const name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
2483 const name: Air.NullTerminatedString = @fromBackingInt(@intCast(pl_op.payload));
24842484 const name_slice = name.toSlice(self.air);
24852485 const metadata_name = if (name_slice.len > 0) try o.builder.metadataString(name_slice) else null;
24862486 const debug_local_var = if (is_arg) try o.builder.debugParameter(
......@@ -2933,7 +2933,7 @@ fn airIsNonNull(
29332933) Allocator.Error!Builder.Value {
29342934 const o = self.object;
29352935 const zcu = o.zcu;
2936 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
2936 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
29372937 const operand = try self.resolveInst(un_op);
29382938 const operand_ty = self.typeOf(un_op);
29392939 const optional_ty = if (operand_is_ptr) operand_ty.childType(zcu) else operand_ty;
......@@ -2981,7 +2981,7 @@ fn airIsErr(
29812981) Allocator.Error!Builder.Value {
29822982 const o = self.object;
29832983 const zcu = o.zcu;
2984 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
2984 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
29852985 const operand = try self.resolveInst(un_op);
29862986 const operand_ty = self.typeOf(un_op);
29872987 const err_union_ty = if (operand_is_ptr) operand_ty.childType(zcu) else operand_ty;
......@@ -3021,7 +3021,7 @@ fn airIsErr(
30213021}
30223022
30233023fn airOptionalPayloadPtr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
3024 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3024 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
30253025 const operand = try self.resolveInst(ty_op.operand);
30263026 // If `Type.optionalReprIsPayload`, then the address should be the same. Otherwise, optional
30273027 // layouts always put the payload at offset 0, so... the address should still be the same.
......@@ -3033,7 +3033,7 @@ fn airOptionalPayloadPtrSet(self: *FuncGen, inst: Air.Inst.Index) Allocator.Erro
30333033
30343034 const o = self.object;
30353035 const zcu = o.zcu;
3036 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3036 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
30373037 const operand = try self.resolveInst(ty_op.operand);
30383038 const optional_ptr_ty = self.typeOf(ty_op.operand);
30393039 const optional_ty = optional_ptr_ty.childType(zcu);
......@@ -3073,7 +3073,7 @@ fn airOptionalPayloadPtrSet(self: *FuncGen, inst: Air.Inst.Index) Allocator.Erro
30733073
30743074fn airOptionalPayload(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
30753075 const zcu = self.object.zcu;
3076 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3076 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
30773077 const operand = try self.resolveInst(ty_op.operand);
30783078 const optional_ty = self.typeOf(ty_op.operand);
30793079 const payload_ty = self.typeOfIndex(inst);
......@@ -3090,7 +3090,7 @@ fn airOptionalPayload(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Buil
30903090fn airErrUnionPayload(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
30913091 const o = fg.object;
30923092 const zcu = o.zcu;
3093 const ty_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3093 const ty_op = fg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
30943094 const operand = try fg.resolveInst(ty_op.operand);
30953095 const err_union_ty = fg.typeOf(ty_op.operand);
30963096 const payload_ty = fg.typeOfIndex(inst);
......@@ -3106,7 +3106,7 @@ fn airErrUnionPayload(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builde
31063106fn airErrUnionPayloadPtr(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
31073107 const o = fg.object;
31083108 const zcu = o.zcu;
3109 const ty_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3109 const ty_op = fg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
31103110 const operand = try fg.resolveInst(ty_op.operand);
31113111 const payload_ty = fg.typeOfIndex(inst).childType(zcu);
31123112 return fg.ptraddConst(operand, codegen.errUnionPayloadOffset(payload_ty, zcu));
......@@ -3119,7 +3119,7 @@ fn airErrUnionErr(
31193119) Allocator.Error!Builder.Value {
31203120 const o = self.object;
31213121 const zcu = o.zcu;
3122 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3122 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
31233123 const operand = try self.resolveInst(ty_op.operand);
31243124 const operand_ty = self.typeOf(ty_op.operand);
31253125 const err_union_ty = if (operand_is_ptr) operand_ty.childType(zcu) else operand_ty;
......@@ -3149,7 +3149,7 @@ fn airErrUnionErr(
31493149fn airErrUnionPayloadPtrSet(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
31503150 const o = self.object;
31513151 const zcu = o.zcu;
3152 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3152 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
31533153 const operand = try self.resolveInst(ty_op.operand);
31543154 const err_union_ptr_ty = self.typeOf(ty_op.operand);
31553155 const err_union_ty = err_union_ptr_ty.childType(zcu);
......@@ -3181,7 +3181,7 @@ fn airErrReturnTrace(self: *FuncGen, _: Air.Inst.Index) Allocator.Error!Builder.
31813181}
31823182
31833183fn airSetErrReturnTrace(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
3184 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
3184 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
31853185 self.err_ret_trace = try self.resolveInst(un_op);
31863186 return .none;
31873187}
......@@ -3189,7 +3189,7 @@ fn airSetErrReturnTrace(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Bu
31893189fn airSaveErrReturnTraceIndex(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
31903190 const zcu = self.object.zcu;
31913191
3192 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3192 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
31933193 const struct_ty = ty_pl.ty.toType();
31943194 const field_index = ty_pl.payload;
31953195
......@@ -3205,7 +3205,7 @@ fn airSaveErrReturnTraceIndex(self: *FuncGen, inst: Air.Inst.Index) Allocator.Er
32053205fn airWrapOptional(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
32063206 const o = self.object;
32073207 const zcu = o.zcu;
3208 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3208 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
32093209 const payload_ty = self.typeOf(ty_op.operand);
32103210 comptime assert(optional_layout_version == 3);
32113211 assert(payload_ty.hasRuntimeBits(zcu));
......@@ -3228,7 +3228,7 @@ fn airWrapOptional(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder
32283228fn airWrapErrUnionPayload(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
32293229 const o = self.object;
32303230 const zcu = o.zcu;
3231 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3231 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
32323232 const err_un_ty = self.typeOfIndex(inst);
32333233 const operand = try self.resolveInst(ty_op.operand);
32343234 const payload_ty = self.typeOf(ty_op.operand);
......@@ -3250,7 +3250,7 @@ fn airWrapErrUnionPayload(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!
32503250fn airWrapErrUnionErr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
32513251 const o = self.object;
32523252 const zcu = o.zcu;
3253 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3253 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
32543254 const err_un_ty = self.typeOfIndex(inst);
32553255 const payload_ty = err_un_ty.errorUnionPayload(zcu);
32563256 const operand = try self.resolveInst(ty_op.operand);
......@@ -3271,7 +3271,7 @@ fn airWrapErrUnionErr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Buil
32713271
32723272fn airWasmMemorySize(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
32733273 const o = self.object;
3274 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
3274 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
32753275 const index = pl_op.payload;
32763276 const llvm_usize = try o.lowerType(.usize, .by_value);
32773277 return self.wip.callIntrinsic(.normal, .none, .@"wasm.memory.size", &.{llvm_usize}, &.{
......@@ -3281,7 +3281,7 @@ fn airWasmMemorySize(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Build
32813281
32823282fn airWasmMemoryGrow(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
32833283 const o = self.object;
3284 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
3284 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
32853285 const index = pl_op.payload;
32863286 const llvm_isize = try o.lowerType(.isize, .by_value);
32873287 return self.wip.callIntrinsic(.normal, .none, .@"wasm.memory.grow", &.{llvm_isize}, &.{
......@@ -3291,7 +3291,7 @@ fn airWasmMemoryGrow(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Build
32913291
32923292fn airRuntimeNavPtr(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
32933293 const o = fg.object;
3294 const ty_nav = fg.air.instructions.items(.data)[@intFromEnum(inst)].ty_nav;
3294 const ty_nav = fg.air.instructions.items(.data)[@backingInt(inst)].ty_nav;
32953295 const llvm_ptr = try o.lowerNavRef(ty_nav.nav);
32963296 return llvm_ptr.toValue();
32973297}
......@@ -3299,7 +3299,7 @@ fn airRuntimeNavPtr(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.
32993299fn airMin(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
33003300 const o = self.object;
33013301 const zcu = o.zcu;
3302 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3302 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
33033303 const lhs = try self.resolveInst(bin_op.lhs);
33043304 const rhs = try self.resolveInst(bin_op.rhs);
33053305 const inst_ty = self.typeOfIndex(inst);
......@@ -3319,7 +3319,7 @@ fn airMin(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
33193319fn airMax(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
33203320 const o = self.object;
33213321 const zcu = o.zcu;
3322 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3322 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
33233323 const lhs = try self.resolveInst(bin_op.lhs);
33243324 const rhs = try self.resolveInst(bin_op.rhs);
33253325 const inst_ty = self.typeOfIndex(inst);
......@@ -3337,7 +3337,7 @@ fn airMax(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
33373337}
33383338
33393339fn airSlice(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
3340 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3340 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
33413341 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;
33423342 const ptr = try self.resolveInst(bin_op.lhs);
33433343 const len = try self.resolveInst(bin_op.rhs);
......@@ -3347,7 +3347,7 @@ fn airSlice(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
33473347
33483348fn airAdd(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
33493349 const zcu = self.object.zcu;
3350 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3350 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
33513351 const lhs = try self.resolveInst(bin_op.lhs);
33523352 const rhs = try self.resolveInst(bin_op.rhs);
33533353 const inst_ty = self.typeOfIndex(inst);
......@@ -3366,7 +3366,7 @@ fn airSafeArithmetic(
33663366 const o = fg.object;
33673367 const zcu = o.zcu;
33683368
3369 const bin_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3369 const bin_op = fg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
33703370 const lhs = try fg.resolveInst(bin_op.lhs);
33713371 const rhs = try fg.resolveInst(bin_op.rhs);
33723372 const inst_ty = fg.typeOfIndex(inst);
......@@ -3403,7 +3403,7 @@ fn airSafeArithmetic(
34033403}
34043404
34053405fn airAddWrap(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
3406 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3406 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
34073407 const lhs = try self.resolveInst(bin_op.lhs);
34083408 const rhs = try self.resolveInst(bin_op.rhs);
34093409
......@@ -3413,7 +3413,7 @@ fn airAddWrap(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Valu
34133413fn airAddSat(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
34143414 const o = self.object;
34153415 const zcu = o.zcu;
3416 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3416 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
34173417 const lhs = try self.resolveInst(bin_op.lhs);
34183418 const rhs = try self.resolveInst(bin_op.rhs);
34193419 const inst_ty = self.typeOfIndex(inst);
......@@ -3431,7 +3431,7 @@ fn airAddSat(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
34313431
34323432fn airSub(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
34333433 const zcu = self.object.zcu;
3434 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3434 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
34353435 const lhs = try self.resolveInst(bin_op.lhs);
34363436 const rhs = try self.resolveInst(bin_op.rhs);
34373437 const inst_ty = self.typeOfIndex(inst);
......@@ -3442,7 +3442,7 @@ fn airSub(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allo
34423442}
34433443
34443444fn airSubWrap(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
3445 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3445 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
34463446 const lhs = try self.resolveInst(bin_op.lhs);
34473447 const rhs = try self.resolveInst(bin_op.rhs);
34483448
......@@ -3452,7 +3452,7 @@ fn airSubWrap(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Valu
34523452fn airSubSat(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
34533453 const o = self.object;
34543454 const zcu = o.zcu;
3455 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3455 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
34563456 const lhs = try self.resolveInst(bin_op.lhs);
34573457 const rhs = try self.resolveInst(bin_op.rhs);
34583458 const inst_ty = self.typeOfIndex(inst);
......@@ -3470,7 +3470,7 @@ fn airSubSat(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
34703470
34713471fn airMul(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
34723472 const zcu = self.object.zcu;
3473 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3473 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
34743474 const lhs = try self.resolveInst(bin_op.lhs);
34753475 const rhs = try self.resolveInst(bin_op.rhs);
34763476 const inst_ty = self.typeOfIndex(inst);
......@@ -3481,7 +3481,7 @@ fn airMul(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allo
34813481}
34823482
34833483fn airMulWrap(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
3484 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3484 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
34853485 const lhs = try self.resolveInst(bin_op.lhs);
34863486 const rhs = try self.resolveInst(bin_op.rhs);
34873487
......@@ -3491,7 +3491,7 @@ fn airMulWrap(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Valu
34913491fn airMulSat(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
34923492 const o = self.object;
34933493 const zcu = o.zcu;
3494 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3494 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
34953495 const lhs = try self.resolveInst(bin_op.lhs);
34963496 const rhs = try self.resolveInst(bin_op.rhs);
34973497 const inst_ty = self.typeOfIndex(inst);
......@@ -3508,7 +3508,7 @@ fn airMulSat(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
35083508}
35093509
35103510fn airDivFloat(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
3511 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3511 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
35123512 const lhs = try self.resolveInst(bin_op.lhs);
35133513 const rhs = try self.resolveInst(bin_op.rhs);
35143514 const inst_ty = self.typeOfIndex(inst);
......@@ -3518,7 +3518,7 @@ fn airDivFloat(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind)
35183518
35193519fn airDivTrunc(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
35203520 const zcu = self.object.zcu;
3521 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3521 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
35223522 const lhs = try self.resolveInst(bin_op.lhs);
35233523 const rhs = try self.resolveInst(bin_op.rhs);
35243524 const inst_ty = self.typeOfIndex(inst);
......@@ -3534,7 +3534,7 @@ fn airDivTrunc(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind)
35343534fn airDivFloor(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
35353535 const o = self.object;
35363536 const zcu = o.zcu;
3537 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3537 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
35383538 const lhs = try self.resolveInst(bin_op.lhs);
35393539 const rhs = try self.resolveInst(bin_op.rhs);
35403540 const inst_ty = self.typeOfIndex(inst);
......@@ -3583,7 +3583,7 @@ fn airDivFloor(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind)
35833583fn airDivCeil(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
35843584 const o = self.object;
35853585 const zcu = o.zcu;
3586 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3586 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
35873587 const lhs = try self.resolveInst(bin_op.lhs);
35883588 const rhs = try self.resolveInst(bin_op.rhs);
35893589 const inst_ty = self.typeOfIndex(inst);
......@@ -3654,7 +3654,7 @@ fn airDivCeil(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind)
36543654
36553655fn airDivExact(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
36563656 const zcu = self.object.zcu;
3657 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3657 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
36583658 const lhs = try self.resolveInst(bin_op.lhs);
36593659 const rhs = try self.resolveInst(bin_op.rhs);
36603660 const inst_ty = self.typeOfIndex(inst);
......@@ -3671,7 +3671,7 @@ fn airDivExact(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind)
36713671
36723672fn airRem(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
36733673 const zcu = self.object.zcu;
3674 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3674 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
36753675 const lhs = try self.resolveInst(bin_op.lhs);
36763676 const rhs = try self.resolveInst(bin_op.rhs);
36773677 const inst_ty = self.typeOfIndex(inst);
......@@ -3688,7 +3688,7 @@ fn airRem(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allo
36883688fn airMod(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
36893689 const o = self.object;
36903690 const zcu = o.zcu;
3691 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3691 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
36923692 const lhs = try self.resolveInst(bin_op.lhs);
36933693 const rhs = try self.resolveInst(bin_op.rhs);
36943694 const inst_ty = self.typeOfIndex(inst);
......@@ -3738,7 +3738,7 @@ fn airMod(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allo
37383738
37393739fn airPtrAdd(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
37403740 const zcu = self.object.zcu;
3741 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3741 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
37423742 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;
37433743 const ptr_or_slice = try self.resolveInst(bin_op.lhs);
37443744 const index = try self.resolveInst(bin_op.rhs);
......@@ -3754,7 +3754,7 @@ fn airPtrAdd(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
37543754fn airPtrSub(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
37553755 const o = self.object;
37563756 const zcu = o.zcu;
3757 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3757 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
37583758 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;
37593759 const ptr_or_slice = try self.resolveInst(bin_op.lhs);
37603760 const llvm_usize_ty = try o.lowerType(.usize, .by_value);
......@@ -3778,7 +3778,7 @@ fn airOverflow(
37783778) Allocator.Error!Builder.Value {
37793779 const o = self.object;
37803780 const zcu = o.zcu;
3781 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3781 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
37823782 const extra = self.air.extraData(Air.Bin, ty_pl.payload).data;
37833783
37843784 const lhs = try self.resolveInst(extra.lhs);
......@@ -4097,7 +4097,7 @@ fn buildFloatOp(
40974097}
40984098
40994099fn airMulAdd(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
4100 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
4100 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
41014101 const extra = self.air.extraData(Air.Bin, pl_op.payload).data;
41024102
41034103 const mulend1 = try self.resolveInst(extra.lhs);
......@@ -4111,7 +4111,7 @@ fn airMulAdd(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
41114111fn airShlWithOverflow(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
41124112 const o = self.object;
41134113 const zcu = o.zcu;
4114 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
4114 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
41154115 const extra = self.air.extraData(Air.Bin, ty_pl.payload).data;
41164116
41174117 const lhs = try self.resolveInst(extra.lhs);
......@@ -4160,21 +4160,21 @@ fn airShlWithOverflow(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Buil
41604160}
41614161
41624162fn airAnd(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
4163 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4163 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
41644164 const lhs = try self.resolveInst(bin_op.lhs);
41654165 const rhs = try self.resolveInst(bin_op.rhs);
41664166 return self.wip.bin(.@"and", lhs, rhs, "");
41674167}
41684168
41694169fn airOr(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
4170 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4170 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
41714171 const lhs = try self.resolveInst(bin_op.lhs);
41724172 const rhs = try self.resolveInst(bin_op.rhs);
41734173 return self.wip.bin(.@"or", lhs, rhs, "");
41744174}
41754175
41764176fn airXor(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
4177 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4177 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
41784178 const lhs = try self.resolveInst(bin_op.lhs);
41794179 const rhs = try self.resolveInst(bin_op.rhs);
41804180 return self.wip.bin(.xor, lhs, rhs, "");
......@@ -4183,7 +4183,7 @@ fn airXor(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
41834183fn airShlExact(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
41844184 const o = self.object;
41854185 const zcu = o.zcu;
4186 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4186 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
41874187
41884188 const lhs = try self.resolveInst(bin_op.lhs);
41894189 const rhs = try self.resolveInst(bin_op.rhs);
......@@ -4206,7 +4206,7 @@ fn airShlExact(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Val
42064206fn airShl(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
42074207 const o = self.object;
42084208 const zcu = o.zcu;
4209 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4209 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
42104210
42114211 const lhs = try self.resolveInst(bin_op.lhs);
42124212 const rhs = try self.resolveInst(bin_op.rhs);
......@@ -4224,7 +4224,7 @@ fn airShl(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
42244224fn airShlSat(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
42254225 const o = self.object;
42264226 const zcu = o.zcu;
4227 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4227 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
42284228
42294229 const lhs = try self.resolveInst(bin_op.lhs);
42304230 const rhs = try self.resolveInst(bin_op.rhs);
......@@ -4306,7 +4306,7 @@ fn airShlSat(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
43064306fn airShr(self: *FuncGen, inst: Air.Inst.Index, is_exact: bool) Allocator.Error!Builder.Value {
43074307 const o = self.object;
43084308 const zcu = o.zcu;
4309 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4309 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
43104310
43114311 const lhs = try self.resolveInst(bin_op.lhs);
43124312 const rhs = try self.resolveInst(bin_op.rhs);
......@@ -4330,7 +4330,7 @@ fn airShr(self: *FuncGen, inst: Air.Inst.Index, is_exact: bool) Allocator.Error!
43304330fn airAbs(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
43314331 const o = self.object;
43324332 const zcu = o.zcu;
4333 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4333 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
43344334 const operand = try self.resolveInst(ty_op.operand);
43354335 const operand_ty = self.typeOf(ty_op.operand);
43364336 const scalar_ty = operand_ty.scalarType(zcu);
......@@ -4352,7 +4352,7 @@ fn airAbs(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
43524352fn airIntCast(fg: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error!Builder.Value {
43534353 const o = fg.object;
43544354 const zcu = o.zcu;
4355 const ty_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4355 const ty_op = fg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
43564356 const dest_ty = fg.typeOfIndex(inst);
43574357 const dest_llvm_ty = try o.lowerType(dest_ty, .by_value);
43584358 const operand = try fg.resolveInst(ty_op.operand);
......@@ -4459,7 +4459,7 @@ fn airIntCast(fg: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error!
44594459}
44604460
44614461fn airTrunc(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
4462 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4462 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
44634463 const operand = try self.resolveInst(ty_op.operand);
44644464 const dest_llvm_ty = try self.object.lowerType(self.typeOfIndex(inst), .by_value);
44654465 return self.wip.cast(.trunc, operand, dest_llvm_ty, "");
......@@ -4468,7 +4468,7 @@ fn airTrunc(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
44684468fn airFptrunc(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
44694469 const o = self.object;
44704470 const zcu = o.zcu;
4471 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4471 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
44724472 const operand = try self.resolveInst(ty_op.operand);
44734473 const operand_ty = self.typeOf(ty_op.operand);
44744474 const dest_ty = self.typeOfIndex(inst);
......@@ -4502,7 +4502,7 @@ fn airFptrunc(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Valu
45024502fn airFpext(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
45034503 const o = self.object;
45044504 const zcu = o.zcu;
4505 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4505 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
45064506 const operand = try self.resolveInst(ty_op.operand);
45074507 const operand_ty = self.typeOf(ty_op.operand);
45084508 const dest_ty = self.typeOfIndex(inst);
......@@ -4543,7 +4543,7 @@ fn airBitCast(fg: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error!
45434543 const o = fg.object;
45444544 const zcu = o.zcu;
45454545
4546 const ty_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4546 const ty_op = fg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
45474547 const operand_ty = fg.typeOf(ty_op.operand);
45484548 const dest_ty = fg.typeOfIndex(inst);
45494549 const operand = try fg.resolveInst(ty_op.operand);
......@@ -4588,7 +4588,7 @@ fn airBitCast(fg: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error!
45884588
45894589fn airNopCast(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
45904590 const zcu = fg.object.zcu;
4591 const ty_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4591 const ty_op = fg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
45924592 const operand_ty = fg.typeOf(ty_op.operand);
45934593 const dest_ty = fg.typeOfIndex(inst);
45944594 assert(isByRef(operand_ty, zcu) == isByRef(dest_ty, zcu));
......@@ -4599,7 +4599,7 @@ fn airNopCast(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
45994599fn airPtrFromInt(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
46004600 const o = fg.object;
46014601 const zcu = o.zcu;
4602 const ty_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4602 const ty_op = fg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
46034603 const operand_ty = fg.typeOf(ty_op.operand);
46044604 const dest_ty = fg.typeOfIndex(inst);
46054605 assert(operand_ty.scalarType(zcu).toIntern() == .usize_type);
......@@ -4613,7 +4613,7 @@ fn airPtrFromInt(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Val
46134613fn airIntFromPtr(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
46144614 const o = fg.object;
46154615 const zcu = o.zcu;
4616 const ty_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4616 const ty_op = fg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
46174617 const operand_ty = fg.typeOf(ty_op.operand);
46184618 const dest_ty = fg.typeOfIndex(inst);
46194619 assert(operand_ty.scalarType(zcu).isPtrAtRuntime(zcu));
......@@ -4625,7 +4625,7 @@ fn airIntFromPtr(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Val
46254625}
46264626
46274627fn airUnionFromEnum(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
4628 const ty_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4628 const ty_op = fg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
46294629 const enum_ty = fg.typeOf(ty_op.operand);
46304630 const union_ty = fg.typeOfIndex(inst);
46314631 const enum_val = try fg.resolveInst(ty_op.operand);
......@@ -4652,7 +4652,7 @@ fn airArg(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
46524652
46534653 const mod = file.mod.?;
46544654 if (mod.strip) return arg_val;
4655 const arg = self.air.instructions.items(.data)[@intFromEnum(inst)].arg;
4655 const arg = self.air.instructions.items(.data)[@backingInt(inst)].arg;
46564656 const zir = &file.zir.?;
46574657 const name = zir.nullTerminatedString(zir.getParamName(zir.getParamBody(func_zir.inst)[arg.zir_param_index]).?);
46584658
......@@ -4791,7 +4791,7 @@ fn buildAlloca(
47914791fn airStore(fg: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error!Builder.Value {
47924792 const o = fg.object;
47934793 const zcu = o.zcu;
4794 const bin_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4794 const bin_op = fg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
47954795 const ptr = try fg.resolveInst(bin_op.lhs);
47964796 const ptr_ty = fg.typeOf(bin_op.lhs);
47974797 const ptr_info = ptr_ty.ptrInfo(zcu);
......@@ -4914,7 +4914,7 @@ fn airStore(fg: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error!Bu
49144914fn airLoad(fg: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
49154915 const o = fg.object;
49164916 const zcu = o.zcu;
4917 const ty_op = fg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4917 const ty_op = fg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
49184918 const ptr_ty = fg.typeOf(ty_op.operand);
49194919 const ptr_info = ptr_ty.ptrInfo(zcu);
49204920 const ptr = try fg.resolveInst(ty_op.operand);
......@@ -5024,7 +5024,7 @@ fn airCmpxchg(
50245024) Allocator.Error!Builder.Value {
50255025 const o = self.object;
50265026 const zcu = o.zcu;
5027 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5027 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
50285028 const extra = self.air.extraData(Air.Cmpxchg, ty_pl.payload).data;
50295029 const ptr = try self.resolveInst(extra.ptr);
50305030 const ptr_ty = self.typeOf(extra.ptr);
......@@ -5090,7 +5090,7 @@ fn airCmpxchg(
50905090fn airAtomicRmw(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
50915091 const o = self.object;
50925092 const zcu = o.zcu;
5093 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
5093 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
50945094 const extra = self.air.extraData(Air.AtomicRmw, pl_op.payload).data;
50955095 const ptr = try self.resolveInst(pl_op.operand);
50965096 const ptr_ty = self.typeOf(pl_op.operand);
......@@ -5155,7 +5155,7 @@ fn airAtomicRmw(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Va
51555155fn airAtomicLoad(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
51565156 const o = self.object;
51575157 const zcu = o.zcu;
5158 const atomic_load = self.air.instructions.items(.data)[@intFromEnum(inst)].atomic_load;
5158 const atomic_load = self.air.instructions.items(.data)[@backingInt(inst)].atomic_load;
51595159 const ptr = try self.resolveInst(atomic_load.ptr);
51605160 const ptr_ty = self.typeOf(atomic_load.ptr);
51615161 const info = ptr_ty.ptrInfo(zcu);
......@@ -5203,7 +5203,7 @@ fn airAtomicStore(
52035203 ordering: Builder.AtomicOrdering,
52045204) Allocator.Error!Builder.Value {
52055205 const zcu = self.object.zcu;
5206 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
5206 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
52075207 const ptr_ty = self.typeOf(bin_op.lhs);
52085208 const operand_ty = ptr_ty.childType(zcu);
52095209 if (!operand_ty.hasRuntimeBits(zcu)) return .none;
......@@ -5240,7 +5240,7 @@ fn airAtomicStore(
52405240fn airMemset(self: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error!Builder.Value {
52415241 const o = self.object;
52425242 const zcu = o.zcu;
5243 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
5243 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
52445244 const dest_slice = try self.resolveInst(bin_op.lhs);
52455245 const ptr_ty = self.typeOf(bin_op.lhs);
52465246 const elem_ty = self.typeOf(bin_op.rhs);
......@@ -5389,7 +5389,7 @@ fn airMemset(self: *FuncGen, inst: Air.Inst.Index, safety: bool) Allocator.Error
53895389
53905390fn airMemcpy(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
53915391 const zcu = self.object.zcu;
5392 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
5392 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
53935393 const dest_slice = try self.resolveInst(bin_op.lhs);
53945394 const dest_ptr_ty = self.typeOf(bin_op.lhs);
53955395 const src_slice = try self.resolveInst(bin_op.rhs);
......@@ -5417,7 +5417,7 @@ fn airMemcpy(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value
54175417
54185418fn airMemmove(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
54195419 const zcu = self.object.zcu;
5420 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
5420 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
54215421 const dest_slice = try self.resolveInst(bin_op.lhs);
54225422 const dest_ptr_ty = self.typeOf(bin_op.lhs);
54235423 const src_slice = try self.resolveInst(bin_op.rhs);
......@@ -5441,7 +5441,7 @@ fn airMemmove(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Valu
54415441
54425442fn airSetUnionTag(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
54435443 const zcu = self.object.zcu;
5444 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
5444 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
54455445 const un_ptr_ty = self.typeOf(bin_op.lhs);
54465446 const un_ty = un_ptr_ty.childType(zcu);
54475447 const layout = un_ty.unionGetLayout(zcu);
......@@ -5466,7 +5466,7 @@ fn airSetUnionTag(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.
54665466fn airGetUnionTag(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
54675467 const o = self.object;
54685468 const zcu = o.zcu;
5469 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5469 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
54705470 const un_ty = self.typeOf(ty_op.operand);
54715471 const layout = un_ty.unionGetLayout(zcu);
54725472 assert(layout.tag_size != 0);
......@@ -5477,7 +5477,7 @@ fn airGetUnionTag(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.
54775477}
54785478
54795479fn airUnaryOp(self: *FuncGen, inst: Air.Inst.Index, comptime op: FloatOp) Allocator.Error!Builder.Value {
5480 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5480 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
54815481 const operand = try self.resolveInst(un_op);
54825482 const operand_ty = self.typeOf(un_op);
54835483
......@@ -5485,7 +5485,7 @@ fn airUnaryOp(self: *FuncGen, inst: Air.Inst.Index, comptime op: FloatOp) Alloca
54855485}
54865486
54875487fn airNeg(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allocator.Error!Builder.Value {
5488 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5488 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
54895489 const operand = try self.resolveInst(un_op);
54905490 const operand_ty = self.typeOf(un_op);
54915491
......@@ -5494,7 +5494,7 @@ fn airNeg(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) Allo
54945494
54955495fn airClzCtz(self: *FuncGen, inst: Air.Inst.Index, intrinsic: Builder.Intrinsic) Allocator.Error!Builder.Value {
54965496 const o = self.object;
5497 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5497 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
54985498 const inst_ty = self.typeOfIndex(inst);
54995499 const operand_ty = self.typeOf(ty_op.operand);
55005500 const operand = try self.resolveInst(ty_op.operand);
......@@ -5512,7 +5512,7 @@ fn airClzCtz(self: *FuncGen, inst: Air.Inst.Index, intrinsic: Builder.Intrinsic)
55125512
55135513fn airBitOp(self: *FuncGen, inst: Air.Inst.Index, intrinsic: Builder.Intrinsic) Allocator.Error!Builder.Value {
55145514 const o = self.object;
5515 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5515 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
55165516 const inst_ty = self.typeOfIndex(inst);
55175517 const operand_ty = self.typeOf(ty_op.operand);
55185518 const operand = try self.resolveInst(ty_op.operand);
......@@ -5531,7 +5531,7 @@ fn airBitOp(self: *FuncGen, inst: Air.Inst.Index, intrinsic: Builder.Intrinsic)
55315531fn airByteSwap(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
55325532 const o = self.object;
55335533 const zcu = o.zcu;
5534 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5534 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
55355535 const operand_ty = self.typeOf(ty_op.operand);
55365536 var bits = operand_ty.intInfo(zcu).bits;
55375537 assert(bits % 8 == 0);
......@@ -5566,7 +5566,7 @@ fn airErrorSetHasValue(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Bui
55665566 const o = self.object;
55675567 const zcu = o.zcu;
55685568 const ip = &zcu.intern_pool;
5569 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5569 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
55705570 const operand = try self.resolveInst(ty_op.operand);
55715571 const error_set_ty = ty_op.ty.toType();
55725572
......@@ -5596,7 +5596,7 @@ fn airErrorSetHasValue(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Bui
55965596
55975597fn airIsNamedEnumValue(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
55985598 const o = self.object;
5599 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5599 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
56005600 const operand = try self.resolveInst(un_op);
56015601 const enum_ty = self.typeOf(un_op);
56025602
......@@ -5614,7 +5614,7 @@ fn airIsNamedEnumValue(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Bui
56145614
56155615fn airTagName(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
56165616 const o = self.object;
5617 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5617 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
56185618 const operand = try self.resolveInst(un_op);
56195619 const enum_ty = self.typeOf(un_op);
56205620
......@@ -5633,7 +5633,7 @@ fn airTagName(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Valu
56335633fn airErrorName(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
56345634 const o = self.object;
56355635 const zcu = o.zcu;
5636 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5636 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
56375637 const operand = try self.resolveInst(un_op);
56385638 const slice_ty = self.typeOfIndex(inst);
56395639
......@@ -5646,14 +5646,14 @@ fn airErrorName(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Va
56465646}
56475647
56485648fn airSplat(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
5649 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5649 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
56505650 const scalar = try self.resolveInst(ty_op.operand);
56515651 const vector_ty = self.typeOfIndex(inst);
56525652 return self.wip.splatVector(try self.object.lowerType(vector_ty, .by_value), scalar, "");
56535653}
56545654
56555655fn airSelect(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
5656 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
5656 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
56575657 const extra = self.air.extraData(Air.Bin, pl_op.payload).data;
56585658 const pred = try self.resolveInst(pl_op.operand);
56595659 const a = try self.resolveInst(extra.lhs);
......@@ -5921,7 +5921,7 @@ fn airReduce(self: *FuncGen, inst: Air.Inst.Index, fast: Builder.FastMathKind) A
59215921 const zcu = o.zcu;
59225922 const target = zcu.getTarget();
59235923
5924 const reduce = self.air.instructions.items(.data)[@intFromEnum(inst)].reduce;
5924 const reduce = self.air.instructions.items(.data)[@backingInt(inst)].reduce;
59255925 const operand = try self.resolveInst(reduce.operand);
59265926 const operand_ty = self.typeOf(reduce.operand);
59275927 const llvm_operand_ty = try o.lowerType(operand_ty, .by_value);
......@@ -6029,7 +6029,7 @@ fn airAggregateInit(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builde
60296029 const o = self.object;
60306030 const zcu = o.zcu;
60316031 const ip = &zcu.intern_pool;
6032 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6032 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
60336033 const result_ty = self.typeOfIndex(inst);
60346034 const len: usize = @intCast(result_ty.arrayLen(zcu));
60356035 const elements: []const Air.Inst.Ref = @ptrCast(self.air.extra.items[ty_pl.payload..][0..len]);
......@@ -6126,7 +6126,7 @@ fn airUnionInit(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Va
61266126 const o = self.object;
61276127 const zcu = o.zcu;
61286128 const ip = &zcu.intern_pool;
6129 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6129 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
61306130 const extra = self.air.extraData(Air.UnionInit, ty_pl.payload).data;
61316131 const union_ty = self.typeOfIndex(inst);
61326132 const union_obj = zcu.typeToUnion(union_ty).?;
......@@ -6167,16 +6167,16 @@ fn airUnionInit(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Va
61676167
61686168fn airPrefetch(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
61696169 const o = self.object;
6170 const prefetch = self.air.instructions.items(.data)[@intFromEnum(inst)].prefetch;
6170 const prefetch = self.air.instructions.items(.data)[@backingInt(inst)].prefetch;
61716171
6172 comptime assert(@intFromEnum(std.lang.PrefetchOptions.Rw.read) == 0);
6173 comptime assert(@intFromEnum(std.lang.PrefetchOptions.Rw.write) == 1);
6172 comptime assert(@backingInt(std.lang.PrefetchOptions.Rw.read) == 0);
6173 comptime assert(@backingInt(std.lang.PrefetchOptions.Rw.write) == 1);
61746174
61756175 comptime assert(prefetch.locality >= 0);
61766176 comptime assert(prefetch.locality <= 3);
61776177
6178 comptime assert(@intFromEnum(std.lang.PrefetchOptions.Cache.instruction) == 0);
6179 comptime assert(@intFromEnum(std.lang.PrefetchOptions.Cache.data) == 1);
6178 comptime assert(@backingInt(std.lang.PrefetchOptions.Cache.instruction) == 0);
6179 comptime assert(@backingInt(std.lang.PrefetchOptions.Cache.data) == 1);
61806180
61816181 // LLVM fails during codegen of instruction cache prefetchs for these architectures.
61826182 // This is an LLVM bug as the prefetch intrinsic should be a noop if not supported
......@@ -6215,7 +6215,7 @@ fn airPrefetch(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Val
62156215}
62166216
62176217fn airAddrSpaceCast(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
6218 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6218 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
62196219 const inst_ty = self.typeOfIndex(inst);
62206220 const operand = try self.resolveInst(ty_op.operand);
62216221 return self.wip.cast(.addrspacecast, operand, try self.object.lowerType(inst_ty, .by_value), "");
......@@ -6238,7 +6238,7 @@ fn workIntrinsic(
62386238fn airWorkItemId(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
62396239 const target = self.object.zcu.getTarget();
62406240
6241 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
6241 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
62426242 const dimension = pl_op.payload;
62436243
62446244 return switch (target.cpu.arch) {
......@@ -6251,7 +6251,7 @@ fn airWorkItemId(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.V
62516251fn airWorkGroupSize(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
62526252 const target = self.object.zcu.getTarget();
62536253
6254 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
6254 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
62556255 const dimension = pl_op.payload;
62566256
62576257 switch (target.cpu.arch) {
......@@ -6278,7 +6278,7 @@ fn airWorkGroupSize(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builde
62786278fn airWorkGroupId(self: *FuncGen, inst: Air.Inst.Index) Allocator.Error!Builder.Value {
62796279 const target = self.object.zcu.getTarget();
62806280
6281 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
6281 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
62826282 const dimension = pl_op.payload;
62836283
62846284 return switch (target.cpu.arch) {
src/codegen/llvm/bindings.zig+1-1
......@@ -5,7 +5,7 @@ pub const Bool = enum(c_int) {
55 _,
66
77 pub fn fromBool(b: bool) Bool {
8 return @as(Bool, @enumFromInt(@intFromBool(b)));
8 return @as(Bool, @fromBackingInt(@intCast(@intFromBool(b))));
99 }
1010
1111 pub fn toBool(b: Bool) bool {
src/codegen/riscv64/CodeGen.zig+130-130
......@@ -798,11 +798,11 @@ pub fn generate(
798798
799799 try function.frame_allocs.resize(gpa, FrameIndex.named_count);
800800 function.frame_allocs.set(
801 @intFromEnum(FrameIndex.stack_frame),
801 @backingInt(FrameIndex.stack_frame),
802802 FrameAlloc.init(.{ .size = 0, .alignment = .@"1" }),
803803 );
804804 function.frame_allocs.set(
805 @intFromEnum(FrameIndex.call_frame),
805 @backingInt(FrameIndex.call_frame),
806806 FrameAlloc.init(.{ .size = 0, .alignment = .@"1" }),
807807 );
808808
......@@ -813,22 +813,22 @@ pub fn generate(
813813
814814 function.args = call_info.args;
815815 function.ret_mcv = call_info.return_value;
816 function.frame_allocs.set(@intFromEnum(FrameIndex.ret_addr), FrameAlloc.init(.{
816 function.frame_allocs.set(@backingInt(FrameIndex.ret_addr), FrameAlloc.init(.{
817817 .size = Type.u64.abiSize(zcu),
818818 .alignment = Type.u64.abiAlignment(zcu).min(call_info.stack_align),
819819 }));
820 function.frame_allocs.set(@intFromEnum(FrameIndex.base_ptr), FrameAlloc.init(.{
820 function.frame_allocs.set(@backingInt(FrameIndex.base_ptr), FrameAlloc.init(.{
821821 .size = Type.u64.abiSize(zcu),
822822 .alignment = Alignment.min(
823823 call_info.stack_align,
824824 Alignment.fromNonzeroByteUnits(function.target.stackAlignment()),
825825 ),
826826 }));
827 function.frame_allocs.set(@intFromEnum(FrameIndex.args_frame), FrameAlloc.init(.{
827 function.frame_allocs.set(@backingInt(FrameIndex.args_frame), FrameAlloc.init(.{
828828 .size = call_info.stack_byte_count,
829829 .alignment = call_info.stack_align,
830830 }));
831 function.frame_allocs.set(@intFromEnum(FrameIndex.spill_frame), FrameAlloc.init(.{
831 function.frame_allocs.set(@backingInt(FrameIndex.spill_frame), FrameAlloc.init(.{
832832 .size = 0,
833833 .alignment = Type.u64.abiAlignment(zcu),
834834 }));
......@@ -1080,7 +1080,7 @@ fn setVl(func: *Func, dst_reg: Register, avl: u64, options: bits.VType) !void {
10801080 .data = .{
10811081 .i_type = .{
10821082 .rd = dst_reg,
1083 .rs1 = @enumFromInt(avl),
1083 .rs1 = @fromBackingInt(@intCast(avl)),
10841084 .imm12 = Immediate.u(options_int),
10851085 },
10861086 },
......@@ -1297,7 +1297,7 @@ fn genLazy(func: *Func, lazy_sym: link.File.LazySymbol) InnerError!void {
12971297 }) catch |err|
12981298 return func.fail("{s} creating lazy symbol", .{@errorName(err)});
12991299
1300 try func.genSetReg(Type.u64, data_reg, .{ .lea_symbol = .{ .sym = @enumFromInt(sym_index) } });
1300 try func.genSetReg(Type.u64, data_reg, .{ .lea_symbol = .{ .sym = @fromBackingInt(@intCast(sym_index)) } });
13011301
13021302 const cmp_reg, const cmp_lock = try func.allocReg(.int);
13031303 defer func.register_manager.unlockReg(cmp_lock);
......@@ -1381,7 +1381,7 @@ fn genBody(func: *Func, body: []const Air.Inst.Index) InnerError!void {
13811381
13821382 func.reused_operands = @TypeOf(func.reused_operands).empty;
13831383 try func.inst_tracking.ensureUnusedCapacity(func.gpa, 1);
1384 const tag = air_tags[@intFromEnum(inst)];
1384 const tag = air_tags[@backingInt(inst)];
13851385 switch (tag) {
13861386 // zig fmt: off
13871387
......@@ -1661,7 +1661,7 @@ fn genBody(func: *Func, body: []const Air.Inst.Index) InnerError!void {
16611661
16621662 if (std.debug.runtime_safety) {
16631663 if (func.air_bookkeeping < old_air_bookkeeping + 1) {
1664 std.debug.panic("in codegen.zig, handling of AIR instruction %{d} ('{}') did not do proper bookkeeping. Look for a missing call to finishAir.", .{ inst, air_tags[@intFromEnum(inst)] });
1664 std.debug.panic("in codegen.zig, handling of AIR instruction %{d} ('{}') did not do proper bookkeeping. Look for a missing call to finishAir.", .{ inst, air_tags[@backingInt(inst)] });
16651665 }
16661666
16671667 { // check consistency of tracked registers
......@@ -1768,7 +1768,7 @@ fn setFrameLoc(
17681768 offset: *i32,
17691769 comptime aligned: bool,
17701770) void {
1771 const frame_i = @intFromEnum(frame_index);
1771 const frame_i = @backingInt(frame_index);
17721772 if (aligned) {
17731773 const alignment: InternPool.Alignment = func.frame_allocs.items(.abi_align)[frame_i];
17741774 offset.* = math.sign(offset.*) * @as(i32, @intCast(alignment.backward(@intCast(@abs(offset.*)))));
......@@ -1787,13 +1787,13 @@ fn computeFrameLayout(func: *Func) !FrameLayout {
17871787 const frame_align = func.frame_allocs.items(.abi_align);
17881788
17891789 for (stack_frame_order, FrameIndex.named_count..) |*frame_order, frame_index|
1790 frame_order.* = @enumFromInt(frame_index);
1790 frame_order.* = @fromBackingInt(@intCast(frame_index));
17911791
17921792 {
17931793 const SortContext = struct {
17941794 frame_align: @TypeOf(frame_align),
17951795 pub fn lessThan(context: @This(), lhs: FrameIndex, rhs: FrameIndex) bool {
1796 return context.frame_align[@intFromEnum(lhs)].compare(.gt, context.frame_align[@intFromEnum(rhs)]);
1796 return context.frame_align[@backingInt(lhs)].compare(.gt, context.frame_align[@backingInt(rhs)]);
17971797 }
17981798 };
17991799 const sort_context = SortContext{ .frame_align = frame_align };
......@@ -1810,38 +1810,38 @@ fn computeFrameLayout(func: *Func) !FrameLayout {
18101810 const total_alloc_size: i32 = blk: {
18111811 var i: i32 = 0;
18121812 for (stack_frame_order) |frame_index| {
1813 i += frame_size[@intFromEnum(frame_index)];
1813 i += frame_size[@backingInt(frame_index)];
18141814 }
18151815 break :blk i;
18161816 };
18171817
18181818 const saved_reg_size = save_reg_list.size();
1819 frame_size[@intFromEnum(FrameIndex.spill_frame)] = @intCast(saved_reg_size);
1819 frame_size[@backingInt(FrameIndex.spill_frame)] = @intCast(saved_reg_size);
18201820
18211821 // The total frame size is calculated by the amount of s registers you need to save * 8, as each
18221822 // register is 8 bytes, the total allocation sizes, and 16 more register for the spilled ra and s0
18231823 // register. Finally we align the frame size to the alignment of the base pointer.
1824 const args_frame_size = frame_size[@intFromEnum(FrameIndex.args_frame)];
1825 const spill_frame_size = frame_size[@intFromEnum(FrameIndex.spill_frame)];
1826 const call_frame_size = frame_size[@intFromEnum(FrameIndex.call_frame)];
1824 const args_frame_size = frame_size[@backingInt(FrameIndex.args_frame)];
1825 const spill_frame_size = frame_size[@backingInt(FrameIndex.spill_frame)];
1826 const call_frame_size = frame_size[@backingInt(FrameIndex.call_frame)];
18271827
18281828 // TODO: this 64 should be a 16, but we were clobbering the top and bottom of the frame.
18291829 // maybe everything can go from the bottom?
18301830 const acc_frame_size: i32 = std.mem.alignForward(
18311831 i32,
18321832 total_alloc_size + 64 + args_frame_size + spill_frame_size + call_frame_size,
1833 @intCast(frame_align[@intFromEnum(FrameIndex.base_ptr)].toByteUnits().?),
1833 @intCast(frame_align[@backingInt(FrameIndex.base_ptr)].toByteUnits().?),
18341834 );
18351835 log.debug("frame size: {d}", .{acc_frame_size});
18361836
18371837 // store the ra at total_size - 8, so it's the very first thing in the stack
18381838 // relative to the fp
18391839 func.frame_locs.set(
1840 @intFromEnum(FrameIndex.ret_addr),
1840 @backingInt(FrameIndex.ret_addr),
18411841 .{ .base = .sp, .disp = acc_frame_size - 8 },
18421842 );
18431843 func.frame_locs.set(
1844 @intFromEnum(FrameIndex.base_ptr),
1844 @backingInt(FrameIndex.base_ptr),
18451845 .{ .base = .sp, .disp = acc_frame_size - 16 },
18461846 );
18471847
......@@ -1983,19 +1983,19 @@ fn allocFrameIndex(func: *Func, alloc: FrameAlloc) !FrameIndex {
19831983 const frame_size = frame_allocs_slice.items(.abi_size);
19841984 const frame_align = frame_allocs_slice.items(.abi_align);
19851985
1986 const stack_frame_align = &frame_align[@intFromEnum(FrameIndex.stack_frame)];
1986 const stack_frame_align = &frame_align[@backingInt(FrameIndex.stack_frame)];
19871987 stack_frame_align.* = stack_frame_align.max(alloc.abi_align);
19881988
19891989 for (func.free_frame_indices.keys(), 0..) |frame_index, free_i| {
1990 const abi_size = frame_size[@intFromEnum(frame_index)];
1990 const abi_size = frame_size[@backingInt(frame_index)];
19911991 if (abi_size != alloc.abi_size) continue;
1992 const abi_align = &frame_align[@intFromEnum(frame_index)];
1992 const abi_align = &frame_align[@backingInt(frame_index)];
19931993 abi_align.* = abi_align.max(alloc.abi_align);
19941994
19951995 _ = func.free_frame_indices.swapRemoveAt(free_i);
19961996 return frame_index;
19971997 }
1998 const frame_index: FrameIndex = @enumFromInt(func.frame_allocs.len);
1998 const frame_index: FrameIndex = @fromBackingInt(@intCast(func.frame_allocs.len));
19991999 try func.frame_allocs.append(func.gpa, alloc);
20002000 log.debug("allocated frame {}", .{frame_index});
20012001 return frame_index;
......@@ -2186,13 +2186,13 @@ fn airRetPtr(func: *Func, inst: Air.Inst.Index) !void {
21862186}
21872187
21882188fn airFptrunc(func: *Func, inst: Air.Inst.Index) !void {
2189 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2189 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21902190 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement airFptrunc for {}", .{func.target.cpu.arch});
21912191 return func.finishAir(inst, result, .{ ty_op.operand, .none, .none });
21922192}
21932193
21942194fn airFpext(func: *Func, inst: Air.Inst.Index) !void {
2195 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2195 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21962196 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement airFpext for {}", .{func.target.cpu.arch});
21972197 return func.finishAir(inst, result, .{ ty_op.operand, .none, .none });
21982198}
......@@ -2200,7 +2200,7 @@ fn airFpext(func: *Func, inst: Air.Inst.Index) !void {
22002200fn airIntCast(func: *Func, inst: Air.Inst.Index) !void {
22012201 const pt = func.pt;
22022202 const zcu = pt.zcu;
2203 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2203 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
22042204 const src_ty = func.typeOf(ty_op.operand);
22052205 const dst_ty = func.typeOfIndex(inst);
22062206
......@@ -2241,7 +2241,7 @@ fn airIntCast(func: *Func, inst: Air.Inst.Index) !void {
22412241}
22422242
22432243fn airTrunc(func: *Func, inst: Air.Inst.Index) !void {
2244 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2244 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
22452245 if (func.liveness.isUnused(inst))
22462246 return func.finishAir(inst, .unreach, .{ ty_op.operand, .none, .none });
22472247 // we assume no zeroext in the "Zig ABI", so it's fine to just not truncate it.
......@@ -2257,7 +2257,7 @@ fn airTrunc(func: *Func, inst: Air.Inst.Index) !void {
22572257}
22582258
22592259fn airNot(func: *Func, inst: Air.Inst.Index) !void {
2260 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2260 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
22612261 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
22622262 const pt = func.pt;
22632263 const zcu = pt.zcu;
......@@ -2319,7 +2319,7 @@ fn airNot(func: *Func, inst: Air.Inst.Index) !void {
23192319fn airSlice(func: *Func, inst: Air.Inst.Index) !void {
23202320 const pt = func.pt;
23212321 const zcu = pt.zcu;
2322 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2322 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
23232323 const bin_op = func.air.extraData(Air.Bin, ty_pl.payload).data;
23242324
23252325 const slice_ty = func.typeOfIndex(inst);
......@@ -2343,7 +2343,7 @@ fn airSlice(func: *Func, inst: Air.Inst.Index) !void {
23432343fn airBinOp(func: *Func, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
23442344 const pt = func.pt;
23452345 const zcu = pt.zcu;
2346 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2346 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
23472347 const dst_mcv = try func.binOp(inst, tag, bin_op.lhs, bin_op.rhs);
23482348
23492349 const dst_ty = func.typeOfIndex(inst);
......@@ -2873,7 +2873,7 @@ fn genBinOp(
28732873}
28742874
28752875fn airPtrArithmetic(func: *Func, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
2876 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2876 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
28772877 const bin_op = func.air.extraData(Air.Bin, ty_pl.payload).data;
28782878 const dst_mcv = try func.binOp(inst, tag, bin_op.lhs, bin_op.rhs);
28792879 return func.finishAir(inst, dst_mcv, .{ bin_op.lhs, bin_op.rhs, .none });
......@@ -2882,7 +2882,7 @@ fn airPtrArithmetic(func: *Func, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void
28822882fn airAddWithOverflow(func: *Func, inst: Air.Inst.Index) !void {
28832883 const pt = func.pt;
28842884 const zcu = pt.zcu;
2885 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2885 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
28862886 const extra = func.air.extraData(Air.Bin, ty_pl.payload).data;
28872887
28882888 const rhs_ty = func.typeOf(extra.rhs);
......@@ -3010,7 +3010,7 @@ fn airAddWithOverflow(func: *Func, inst: Air.Inst.Index) !void {
30103010fn airSubWithOverflow(func: *Func, inst: Air.Inst.Index) !void {
30113011 const pt = func.pt;
30123012 const zcu = pt.zcu;
3013 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3013 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
30143014 const extra = func.air.extraData(Air.Bin, ty_pl.payload).data;
30153015
30163016 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
......@@ -3135,7 +3135,7 @@ fn airSubWithOverflow(func: *Func, inst: Air.Inst.Index) !void {
31353135fn airMulWithOverflow(func: *Func, inst: Air.Inst.Index) !void {
31363136 const pt = func.pt;
31373137 const zcu = pt.zcu;
3138 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3138 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
31393139 const extra = func.air.extraData(Air.Bin, ty_pl.payload).data;
31403140
31413141 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
......@@ -3210,7 +3210,7 @@ fn airMulWithOverflow(func: *Func, inst: Air.Inst.Index) !void {
32103210
32113211fn airShlWithOverflow(func: *Func, inst: Air.Inst.Index) !void {
32123212 const zcu = func.pt.zcu;
3213 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3213 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
32143214 const result: MCValue = if (func.liveness.isUnused(inst))
32153215 .unreach
32163216 else if (func.typeOf(bin_op.lhs).isVector(zcu) and !func.typeOf(bin_op.rhs).isVector(zcu))
......@@ -3221,20 +3221,20 @@ fn airShlWithOverflow(func: *Func, inst: Air.Inst.Index) !void {
32213221}
32223222
32233223fn airSubSat(func: *Func, inst: Air.Inst.Index) !void {
3224 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3224 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
32253225 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement airSubSat", .{});
32263226 return func.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
32273227}
32283228
32293229fn airMulSat(func: *Func, inst: Air.Inst.Index) !void {
3230 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3230 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
32313231 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement airMulSat", .{});
32323232 return func.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
32333233}
32343234
32353235fn airShlSat(func: *Func, inst: Air.Inst.Index) !void {
32363236 const zcu = func.pt.zcu;
3237 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3237 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
32383238 const result: MCValue = if (func.liveness.isUnused(inst))
32393239 .unreach
32403240 else if (func.typeOf(bin_op.lhs).isVector(zcu) and !func.typeOf(bin_op.rhs).isVector(zcu))
......@@ -3246,7 +3246,7 @@ fn airShlSat(func: *Func, inst: Air.Inst.Index) !void {
32463246
32473247fn airOptionalPayload(func: *Func, inst: Air.Inst.Index) !void {
32483248 const zcu = func.pt.zcu;
3249 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3249 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
32503250 const result: MCValue = result: {
32513251 const pl_ty = func.typeOfIndex(inst);
32523252 if (!pl_ty.hasRuntimeBits(zcu)) break :result .none;
......@@ -3268,7 +3268,7 @@ fn airOptionalPayload(func: *Func, inst: Air.Inst.Index) !void {
32683268}
32693269
32703270fn airOptionalPayloadPtr(func: *Func, inst: Air.Inst.Index) !void {
3271 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3271 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
32723272 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement .optional_payload_ptr for {}", .{func.target.cpu.arch});
32733273 return func.finishAir(inst, result, .{ ty_op.operand, .none, .none });
32743274}
......@@ -3276,7 +3276,7 @@ fn airOptionalPayloadPtr(func: *Func, inst: Air.Inst.Index) !void {
32763276fn airOptionalPayloadPtrSet(func: *Func, inst: Air.Inst.Index) !void {
32773277 const zcu = func.pt.zcu;
32783278
3279 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3279 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
32803280 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
32813281 const dst_ty = func.typeOfIndex(inst);
32823282 const src_ty = func.typeOf(ty_op.operand);
......@@ -3310,7 +3310,7 @@ fn airOptionalPayloadPtrSet(func: *Func, inst: Air.Inst.Index) !void {
33103310}
33113311
33123312fn airUnwrapErrErr(func: *Func, inst: Air.Inst.Index) !void {
3313 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3313 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
33143314 const pt = func.pt;
33153315 const zcu = pt.zcu;
33163316 const err_union_ty = func.typeOf(ty_op.operand);
......@@ -3359,7 +3359,7 @@ fn airUnwrapErrErr(func: *Func, inst: Air.Inst.Index) !void {
33593359}
33603360
33613361fn airUnwrapErrPayload(func: *Func, inst: Air.Inst.Index) !void {
3362 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3362 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
33633363 const operand_ty = func.typeOf(ty_op.operand);
33643364 const operand = try func.resolveInst(ty_op.operand);
33653365 const result = try func.genUnwrapErrUnionPayloadMir(operand_ty, operand);
......@@ -3410,21 +3410,21 @@ fn genUnwrapErrUnionPayloadMir(
34103410
34113411// *(E!T) -> E
34123412fn airUnwrapErrErrPtr(func: *Func, inst: Air.Inst.Index) !void {
3413 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3413 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
34143414 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement unwrap error union error ptr for {}", .{func.target.cpu.arch});
34153415 return func.finishAir(inst, result, .{ ty_op.operand, .none, .none });
34163416}
34173417
34183418// *(E!T) -> *T
34193419fn airUnwrapErrPayloadPtr(func: *Func, inst: Air.Inst.Index) !void {
3420 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3420 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
34213421 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement unwrap error union payload ptr for {}", .{func.target.cpu.arch});
34223422 return func.finishAir(inst, result, .{ ty_op.operand, .none, .none });
34233423}
34243424
34253425// *(E!T) => *T
34263426fn airErrUnionPayloadPtrSet(func: *Func, inst: Air.Inst.Index) !void {
3427 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3427 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
34283428 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
34293429 const zcu = func.pt.zcu;
34303430 const src_ty = func.typeOf(ty_op.operand);
......@@ -3488,7 +3488,7 @@ fn airSaveErrReturnTraceIndex(func: *Func, inst: Air.Inst.Index) !void {
34883488fn airWrapOptional(func: *Func, inst: Air.Inst.Index) !void {
34893489 const pt = func.pt;
34903490 const zcu = pt.zcu;
3491 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3491 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
34923492 const result: MCValue = result: {
34933493 const pl_ty = func.typeOf(ty_op.operand);
34943494 if (!pl_ty.hasRuntimeBits(zcu)) break :result .{ .immediate = 1 };
......@@ -3531,7 +3531,7 @@ fn airWrapOptional(func: *Func, inst: Air.Inst.Index) !void {
35313531fn airWrapErrUnionPayload(func: *Func, inst: Air.Inst.Index) !void {
35323532 const pt = func.pt;
35333533 const zcu = pt.zcu;
3534 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3534 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
35353535
35363536 const eu_ty = ty_op.ty.toType();
35373537 const pl_ty = eu_ty.errorUnionPayload(zcu);
......@@ -3556,7 +3556,7 @@ fn airWrapErrUnionPayload(func: *Func, inst: Air.Inst.Index) !void {
35563556fn airWrapErrUnionErr(func: *Func, inst: Air.Inst.Index) !void {
35573557 const pt = func.pt;
35583558 const zcu = pt.zcu;
3559 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3559 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
35603560
35613561 const eu_ty = ty_op.ty.toType();
35623562 const pl_ty = eu_ty.errorUnionPayload(zcu);
......@@ -3579,7 +3579,7 @@ fn airWrapErrUnionErr(func: *Func, inst: Air.Inst.Index) !void {
35793579fn airRuntimeNavPtr(func: *Func, inst: Air.Inst.Index) !void {
35803580 const zcu = func.pt.zcu;
35813581 const ip = &zcu.intern_pool;
3582 const ty_nav = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_nav;
3582 const ty_nav = func.air.instructions.items(.data)[@backingInt(inst)].ty_nav;
35833583 const ptr_ty: Type = .fromInterned(ty_nav.ty);
35843584
35853585 const nav = ip.getNav(ty_nav.nav);
......@@ -3597,8 +3597,8 @@ fn airRuntimeNavPtr(func: *Func, inst: Air.Inst.Index) !void {
35973597 .tag = .pseudo_load_tlv,
35983598 .data = .{ .reloc = .{
35993599 .register = dest_mcv.getReg().?,
3600 .atom_index = @enumFromInt(try func.owner.getSymbolIndex(func)),
3601 .sym_index = @enumFromInt(tlv_sym_index),
3600 .atom_index = @fromBackingInt(@intCast(try func.owner.getSymbolIndex(func))),
3601 .sym_index = @fromBackingInt(@intCast(tlv_sym_index)),
36023602 } },
36033603 });
36043604 } else {
......@@ -3608,8 +3608,8 @@ fn airRuntimeNavPtr(func: *Func, inst: Air.Inst.Index) !void {
36083608 .tag = .pseudo_load_tlv,
36093609 .data = .{ .reloc = .{
36103610 .register = tmp_reg,
3611 .atom_index = @enumFromInt(try func.owner.getSymbolIndex(func)),
3612 .sym_index = @enumFromInt(tlv_sym_index),
3611 .atom_index = @fromBackingInt(@intCast(try func.owner.getSymbolIndex(func))),
3612 .sym_index = @fromBackingInt(@intCast(tlv_sym_index)),
36133613 } },
36143614 });
36153615 try func.genCopy(ptr_ty, dest_mcv, .{ .register = tmp_reg });
......@@ -3674,7 +3674,7 @@ fn genTry(
36743674}
36753675
36763676fn airSlicePtr(func: *Func, inst: Air.Inst.Index) !void {
3677 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3677 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
36783678 const result = result: {
36793679 const src_mcv = try func.resolveInst(ty_op.operand);
36803680 if (func.reuseOperand(inst, ty_op.operand, 0, src_mcv)) break :result src_mcv;
......@@ -3688,7 +3688,7 @@ fn airSlicePtr(func: *Func, inst: Air.Inst.Index) !void {
36883688}
36893689
36903690fn airSliceLen(func: *Func, inst: Air.Inst.Index) !void {
3691 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3691 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
36923692 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
36933693 const src_mcv = try func.resolveInst(ty_op.operand);
36943694 const ty = func.typeOfIndex(inst);
......@@ -3721,7 +3721,7 @@ fn airSliceLen(func: *Func, inst: Air.Inst.Index) !void {
37213721}
37223722
37233723fn airPtrSliceLenPtr(func: *Func, inst: Air.Inst.Index) !void {
3724 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3724 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
37253725 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
37263726 const src_mcv = try func.resolveInst(ty_op.operand);
37273727
......@@ -3736,7 +3736,7 @@ fn airPtrSliceLenPtr(func: *Func, inst: Air.Inst.Index) !void {
37363736}
37373737
37383738fn airPtrSlicePtrPtr(func: *Func, inst: Air.Inst.Index) !void {
3739 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
3739 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
37403740
37413741 const opt_mcv = try func.resolveInst(ty_op.operand);
37423742 const dst_mcv = if (func.reuseOperand(inst, ty_op.operand, 0, opt_mcv))
......@@ -3749,7 +3749,7 @@ fn airPtrSlicePtrPtr(func: *Func, inst: Air.Inst.Index) !void {
37493749fn airSliceElemVal(func: *Func, inst: Air.Inst.Index) !void {
37503750 const pt = func.pt;
37513751 const zcu = pt.zcu;
3752 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3752 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
37533753
37543754 const result: MCValue = result: {
37553755 const elem_ty = func.typeOfIndex(inst);
......@@ -3766,7 +3766,7 @@ fn airSliceElemVal(func: *Func, inst: Air.Inst.Index) !void {
37663766}
37673767
37683768fn airSliceElemPtr(func: *Func, inst: Air.Inst.Index) !void {
3769 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3769 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
37703770 const extra = func.air.extraData(Air.Bin, ty_pl.payload).data;
37713771 const dst_mcv = try func.genSliceElemPtr(extra.lhs, extra.rhs);
37723772 return func.finishAir(inst, dst_mcv, .{ extra.lhs, extra.rhs, .none });
......@@ -3817,7 +3817,7 @@ fn genSliceElemPtr(func: *Func, lhs: Air.Inst.Ref, rhs: Air.Inst.Ref) !MCValue {
38173817fn airArrayElemVal(func: *Func, inst: Air.Inst.Index) !void {
38183818 const pt = func.pt;
38193819 const zcu = pt.zcu;
3820 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3820 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
38213821 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
38223822 const result_ty = func.typeOfIndex(inst);
38233823
......@@ -3901,7 +3901,7 @@ fn airPtrElemVal(func: *Func, inst: Air.Inst.Index) !void {
39013901 const is_volatile = false; // TODO
39023902 const pt = func.pt;
39033903 const zcu = pt.zcu;
3904 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
3904 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
39053905 const base_ptr_ty = func.typeOf(bin_op.lhs);
39063906
39073907 const result: MCValue = if (!is_volatile and func.liveness.isUnused(inst)) .unreach else result: {
......@@ -3956,7 +3956,7 @@ fn airPtrElemVal(func: *Func, inst: Air.Inst.Index) !void {
39563956fn airPtrElemPtr(func: *Func, inst: Air.Inst.Index) !void {
39573957 const pt = func.pt;
39583958 const zcu = pt.zcu;
3959 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
3959 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
39603960 const extra = func.air.extraData(Air.Bin, ty_pl.payload).data;
39613961
39623962 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
......@@ -3998,7 +3998,7 @@ fn airPtrElemPtr(func: *Func, inst: Air.Inst.Index) !void {
39983998}
39993999
40004000fn airSetUnionTag(func: *Func, inst: Air.Inst.Index) !void {
4001 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4001 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
40024002 _ = bin_op;
40034003 return func.fail("TODO implement airSetUnionTag for {}", .{func.target.cpu.arch});
40044004 // return func.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
......@@ -4007,7 +4007,7 @@ fn airSetUnionTag(func: *Func, inst: Air.Inst.Index) !void {
40074007fn airGetUnionTag(func: *Func, inst: Air.Inst.Index) !void {
40084008 const pt = func.pt;
40094009 const zcu = pt.zcu;
4010 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4010 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
40114011
40124012 const tag_ty = func.typeOfIndex(inst);
40134013 const union_ty = func.typeOf(ty_op.operand);
......@@ -4053,7 +4053,7 @@ fn airGetUnionTag(func: *Func, inst: Air.Inst.Index) !void {
40534053}
40544054
40554055fn airClz(func: *Func, inst: Air.Inst.Index) !void {
4056 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4056 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
40574057 const operand = try func.resolveInst(ty_op.operand);
40584058 const ty = func.typeOf(ty_op.operand);
40594059
......@@ -4109,13 +4109,13 @@ fn airClz(func: *Func, inst: Air.Inst.Index) !void {
41094109}
41104110
41114111fn airCtz(func: *Func, inst: Air.Inst.Index) !void {
4112 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4112 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
41134113 _ = ty_op;
41144114 return func.fail("TODO: finish ctz", .{});
41154115}
41164116
41174117fn airPopcount(func: *Func, inst: Air.Inst.Index) !void {
4118 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4118 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
41194119 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
41204120 const pt = func.pt;
41214121 const zcu = pt.zcu;
......@@ -4141,7 +4141,7 @@ fn airPopcount(func: *Func, inst: Air.Inst.Index) !void {
41414141 .r_type = .{
41424142 .rd = dst_reg,
41434143 .rs1 = operand_reg,
4144 .rs2 = @enumFromInt(0b00010), // this is the cpop funct5
4144 .rs2 = @fromBackingInt(@intCast(0b00010)), // this is the cpop funct5
41454145 },
41464146 },
41474147 });
......@@ -4154,7 +4154,7 @@ fn airPopcount(func: *Func, inst: Air.Inst.Index) !void {
41544154fn airAbs(func: *Func, inst: Air.Inst.Index) !void {
41554155 const pt = func.pt;
41564156 const zcu = pt.zcu;
4157 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4157 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
41584158 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
41594159 const ty = func.typeOf(ty_op.operand);
41604160 const scalar_ty = ty.scalarType(zcu);
......@@ -4252,7 +4252,7 @@ fn airAbs(func: *Func, inst: Air.Inst.Index) !void {
42524252}
42534253
42544254fn airByteSwap(func: *Func, inst: Air.Inst.Index) !void {
4255 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4255 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
42564256 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
42574257 const pt = func.pt;
42584258 const zcu = pt.zcu;
......@@ -4314,7 +4314,7 @@ fn airByteSwap(func: *Func, inst: Air.Inst.Index) !void {
43144314}
43154315
43164316fn airBitReverse(func: *Func, inst: Air.Inst.Index) !void {
4317 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4317 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
43184318 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement airBitReverse for {}", .{func.target.cpu.arch});
43194319 return func.finishAir(inst, result, .{ ty_op.operand, .none, .none });
43204320}
......@@ -4322,7 +4322,7 @@ fn airBitReverse(func: *Func, inst: Air.Inst.Index) !void {
43224322fn airUnaryMath(func: *Func, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
43234323 const pt = func.pt;
43244324 const zcu = pt.zcu;
4325 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
4325 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
43264326 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
43274327 const ty = func.typeOf(un_op);
43284328
......@@ -4432,7 +4432,7 @@ fn reuseOperandAdvanced(
44324432fn airLoad(func: *Func, inst: Air.Inst.Index) !void {
44334433 const pt = func.pt;
44344434 const zcu = pt.zcu;
4435 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4435 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
44364436 const elem_ty = func.typeOfIndex(inst);
44374437
44384438 const result: MCValue = result: {
......@@ -4512,7 +4512,7 @@ fn airStore(func: *Func, inst: Air.Inst.Index, safety: bool) !void {
45124512 } else {
45134513 // TODO if the value is undef, don't lower this instruction
45144514 }
4515 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4515 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
45164516 const ptr = try func.resolveInst(bin_op.lhs);
45174517 const value = try func.resolveInst(bin_op.rhs);
45184518 const ptr_ty = func.typeOf(bin_op.lhs);
......@@ -4559,14 +4559,14 @@ fn store(func: *Func, ptr_mcv: MCValue, src_mcv: MCValue, ptr_ty: Type) !void {
45594559}
45604560
45614561fn airStructFieldPtr(func: *Func, inst: Air.Inst.Index) !void {
4562 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
4562 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
45634563 const extra = func.air.extraData(Air.StructField, ty_pl.payload).data;
45644564 const result = try func.structFieldPtr(inst, extra.struct_operand, extra.field_index);
45654565 return func.finishAir(inst, result, .{ extra.struct_operand, .none, .none });
45664566}
45674567
45684568fn airStructFieldPtrIndex(func: *Func, inst: Air.Inst.Index, index: u8) !void {
4569 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4569 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
45704570 const result = try func.structFieldPtr(inst, ty_op.operand, index);
45714571 return func.finishAir(inst, result, .{ ty_op.operand, .none, .none });
45724572}
......@@ -4598,7 +4598,7 @@ fn airAggFieldVal(func: *Func, inst: Air.Inst.Index) !void {
45984598 const pt = func.pt;
45994599 const zcu = pt.zcu;
46004600
4601 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
4601 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
46024602 const extra = func.air.extraData(Air.StructField, ty_pl.payload).data;
46034603 const operand = extra.struct_operand;
46044604 const index = extra.field_index;
......@@ -4746,7 +4746,7 @@ fn airArg(func: *Func, inst: Air.Inst.Index) InnerError!void {
47464746
47474747 try func.genCopy(arg_ty, dst_mcv, src_mcv);
47484748
4749 const arg = func.air.instructions.items(.data)[@intFromEnum(inst)].arg;
4749 const arg = func.air.instructions.items(.data)[@backingInt(inst)].arg;
47504750 // can delete `func.func_index` if this logic is moved to emit
47514751 const func_zir = zcu.funcInfo(func.func_index).zir_body_inst.resolveFull(&zcu.intern_pool).?;
47524752 const file = zcu.fileByIndex(func_zir.file);
......@@ -4871,10 +4871,10 @@ fn genCall(
48714871 });
48724872 const frame_allocs_slice = func.frame_allocs.slice();
48734873 const stack_frame_size =
4874 &frame_allocs_slice.items(.abi_size)[@intFromEnum(FrameIndex.call_frame)];
4874 &frame_allocs_slice.items(.abi_size)[@backingInt(FrameIndex.call_frame)];
48754875 stack_frame_size.* = @max(stack_frame_size.*, needed_call_frame.abi_size);
48764876 const stack_frame_align =
4877 &frame_allocs_slice.items(.abi_align)[@intFromEnum(FrameIndex.call_frame)];
4877 &frame_allocs_slice.items(.abi_align)[@backingInt(FrameIndex.call_frame)];
48784878 stack_frame_align.* = stack_frame_align.max(needed_call_frame.abi_align);
48794879 }
48804880
......@@ -4958,7 +4958,7 @@ fn genCall(
49584958 .func => |func_val| {
49594959 if (func.bin_file.cast(.elf)) |elf_file| {
49604960 const zo = elf_file.zigObjectPtr().?;
4961 const sym_index: link.File.SymbolId = @enumFromInt(try zo.getOrCreateMetadataForNav(zcu, func_val.owner_nav));
4961 const sym_index: link.File.SymbolId = @fromBackingInt(@intCast(try zo.getOrCreateMetadataForNav(zcu, func_val.owner_nav)));
49624962
49634963 if (func.mod.pic) {
49644964 return func.fail("TODO: genCall pic", .{});
......@@ -4978,7 +4978,7 @@ fn genCall(
49784978 .@"extern" => |@"extern"| {
49794979 const lib_name = @"extern".lib_name.toSlice(&zcu.intern_pool);
49804980 const name = @"extern".name.toSlice(&zcu.intern_pool);
4981 const atom_index: link.File.AtomId = @enumFromInt(try func.owner.getSymbolIndex(func));
4981 const atom_index: link.File.AtomId = @fromBackingInt(@intCast(try func.owner.getSymbolIndex(func)));
49824982
49834983 const elf_file = func.bin_file.cast(.elf).?;
49844984 _ = try func.addInst(.{
......@@ -4986,7 +4986,7 @@ fn genCall(
49864986 .data = .{ .reloc = .{
49874987 .register = .ra,
49884988 .atom_index = atom_index,
4989 .sym_index = @enumFromInt(try elf_file.getGlobalSymbol(name, lib_name)),
4989 .sym_index = @fromBackingInt(@intCast(try elf_file.getGlobalSymbol(name, lib_name))),
49904990 } },
49914991 });
49924992 },
......@@ -5021,7 +5021,7 @@ fn genCall(
50215021fn airRet(func: *Func, inst: Air.Inst.Index, safety: bool) !void {
50225022 const pt = func.pt;
50235023 const zcu = pt.zcu;
5024 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5024 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
50255025
50265026 if (safety) {
50275027 // safe
......@@ -5087,7 +5087,7 @@ fn airRet(func: *Func, inst: Air.Inst.Index, safety: bool) !void {
50875087}
50885088
50895089fn airRetLoad(func: *Func, inst: Air.Inst.Index) !void {
5090 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5090 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
50915091 const ptr = try func.resolveInst(un_op);
50925092
50935093 const ptr_ty = func.typeOf(un_op);
......@@ -5113,7 +5113,7 @@ fn airRetLoad(func: *Func, inst: Air.Inst.Index) !void {
51135113}
51145114
51155115fn airCmp(func: *Func, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
5116 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
5116 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
51175117 const pt = func.pt;
51185118 const zcu = pt.zcu;
51195119
......@@ -5176,7 +5176,7 @@ fn airCmpVector(func: *Func, inst: Air.Inst.Index) !void {
51765176}
51775177
51785178fn airCmpLteErrorsLen(func: *Func, inst: Air.Inst.Index) !void {
5179 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5179 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
51805180 const operand = try func.resolveInst(un_op);
51815181 _ = operand;
51825182 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement airCmpLteErrorsLen for {}", .{func.target.cpu.arch});
......@@ -5184,7 +5184,7 @@ fn airCmpLteErrorsLen(func: *Func, inst: Air.Inst.Index) !void {
51845184}
51855185
51865186fn airDbgStmt(func: *Func, inst: Air.Inst.Index) !void {
5187 const dbg_stmt = func.air.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt;
5187 const dbg_stmt = func.air.instructions.items(.data)[@backingInt(inst)].dbg_stmt;
51885188
51895189 _ = try func.addInst(.{
51905190 .tag = .pseudo_dbg_line_column,
......@@ -5203,13 +5203,13 @@ fn airDbgInlineBlock(func: *Func, inst: Air.Inst.Index) !void {
52035203}
52045204
52055205fn airDbgVar(func: *Func, inst: Air.Inst.Index) InnerError!void {
5206 const pl_op = func.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
5206 const pl_op = func.air.instructions.items(.data)[@backingInt(inst)].pl_op;
52075207 const operand = pl_op.operand;
52085208 const ty = func.typeOf(operand);
52095209 const mcv = try func.resolveInst(operand);
5210 const name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
5210 const name: Air.NullTerminatedString = @fromBackingInt(@intCast(pl_op.payload));
52115211
5212 const tag = func.air.instructions.items(.tag)[@intFromEnum(inst)];
5212 const tag = func.air.instructions.items(.tag)[@backingInt(inst)];
52135213 func.genVarDbgInfo(tag, ty, mcv, name.toSlice(func.air)) catch |err|
52145214 return func.fail("failed to generate variable debug info: {s}", .{@errorName(err)});
52155215
......@@ -5409,7 +5409,7 @@ fn isNull(func: *Func, inst: Air.Inst.Index, opt_ty: Type, opt_mcv: MCValue) !MC
54095409}
54105410
54115411fn airIsNull(func: *Func, inst: Air.Inst.Index) !void {
5412 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5412 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
54135413 const operand = try func.resolveInst(un_op);
54145414 const ty = func.typeOf(un_op);
54155415 const result = try func.isNull(inst, ty, operand);
......@@ -5417,7 +5417,7 @@ fn airIsNull(func: *Func, inst: Air.Inst.Index) !void {
54175417}
54185418
54195419fn airIsNullPtr(func: *Func, inst: Air.Inst.Index) !void {
5420 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5420 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
54215421 const operand = try func.resolveInst(un_op);
54225422 _ = operand;
54235423 const ty = func.typeOf(un_op);
......@@ -5429,7 +5429,7 @@ fn airIsNullPtr(func: *Func, inst: Air.Inst.Index) !void {
54295429}
54305430
54315431fn airIsNonNull(func: *Func, inst: Air.Inst.Index) !void {
5432 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5432 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
54335433 const operand = try func.resolveInst(un_op);
54345434 const ty = func.typeOf(un_op);
54355435 const result = try func.isNull(inst, ty, operand);
......@@ -5449,7 +5449,7 @@ fn airIsNonNull(func: *Func, inst: Air.Inst.Index) !void {
54495449}
54505450
54515451fn airIsNonNullPtr(func: *Func, inst: Air.Inst.Index) !void {
5452 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5452 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
54535453 const operand = try func.resolveInst(un_op);
54545454 _ = operand;
54555455 const ty = func.typeOf(un_op);
......@@ -5461,7 +5461,7 @@ fn airIsNonNullPtr(func: *Func, inst: Air.Inst.Index) !void {
54615461}
54625462
54635463fn airIsErr(func: *Func, inst: Air.Inst.Index) !void {
5464 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5464 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
54655465 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
54665466 const operand = try func.resolveInst(un_op);
54675467 const operand_ty = func.typeOf(un_op);
......@@ -5473,7 +5473,7 @@ fn airIsErr(func: *Func, inst: Air.Inst.Index) !void {
54735473fn airIsErrPtr(func: *Func, inst: Air.Inst.Index) !void {
54745474 const pt = func.pt;
54755475 const zcu = pt.zcu;
5476 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5476 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
54775477 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
54785478 const operand_ptr = try func.resolveInst(un_op);
54795479 const operand: MCValue = blk: {
......@@ -5553,7 +5553,7 @@ fn isErr(func: *Func, maybe_inst: ?Air.Inst.Index, eu_ty: Type, eu_mcv: MCValue)
55535553}
55545554
55555555fn airIsNonErr(func: *Func, inst: Air.Inst.Index) !void {
5556 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5556 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
55575557 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
55585558 const operand = try func.resolveInst(un_op);
55595559 const ty = func.typeOf(un_op);
......@@ -5589,7 +5589,7 @@ fn isNonErr(func: *Func, inst: Air.Inst.Index, eu_ty: Type, eu_mcv: MCValue) !MC
55895589fn airIsNonErrPtr(func: *Func, inst: Air.Inst.Index) !void {
55905590 const pt = func.pt;
55915591 const zcu = pt.zcu;
5592 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5592 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
55935593 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
55945594 const operand_ptr = try func.resolveInst(un_op);
55955595 const operand: MCValue = blk: {
......@@ -5843,7 +5843,7 @@ fn airLoopSwitchBr(func: *Func, inst: Air.Inst.Index) !void {
58435843}
58445844
58455845fn airSwitchDispatch(func: *Func, inst: Air.Inst.Index) !void {
5846 const br = func.air.instructions.items(.data)[@intFromEnum(inst)].br;
5846 const br = func.air.instructions.items(.data)[@backingInt(inst)].br;
58475847
58485848 const block_ty = func.typeOfIndex(br.block_inst);
58495849 const block_tracking = func.inst_tracking.getPtr(br.block_inst).?;
......@@ -5905,7 +5905,7 @@ fn performReloc(func: *Func, inst: Mir.Inst.Index) void {
59055905
59065906fn airBr(func: *Func, inst: Air.Inst.Index) !void {
59075907 const zcu = func.pt.zcu;
5908 const br = func.air.instructions.items(.data)[@intFromEnum(inst)].br;
5908 const br = func.air.instructions.items(.data)[@backingInt(inst)].br;
59095909
59105910 const block_ty = func.typeOfIndex(br.block_inst);
59115911 const block_unused = !block_ty.hasRuntimeBits(zcu) or func.liveness.isUnused(br.block_inst);
......@@ -5968,7 +5968,7 @@ fn airBr(func: *Func, inst: Air.Inst.Index) !void {
59685968}
59695969
59705970fn airRepeat(func: *Func, inst: Air.Inst.Index) !void {
5971 const loop_inst = func.air.instructions.items(.data)[@intFromEnum(inst)].repeat.loop_inst;
5971 const loop_inst = func.air.instructions.items(.data)[@backingInt(inst)].repeat.loop_inst;
59725972 const repeat_info = func.loops.get(loop_inst).?;
59735973 try func.restoreState(repeat_info.state, &.{}, .{
59745974 .emit_instructions = true,
......@@ -5981,8 +5981,8 @@ fn airRepeat(func: *Func, inst: Air.Inst.Index) !void {
59815981}
59825982
59835983fn airBoolOp(func: *Func, inst: Air.Inst.Index) !void {
5984 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
5985 const tag: Air.Inst.Tag = func.air.instructions.items(.tag)[@intFromEnum(inst)];
5984 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
5985 const tag: Air.Inst.Tag = func.air.instructions.items(.tag)[@backingInt(inst)];
59865986
59875987 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
59885988 const lhs = try func.resolveInst(bin_op.lhs);
......@@ -6404,7 +6404,7 @@ fn airAsm(func: *Func, inst: Air.Inst.Index) !void {
64046404 .tag = .pseudo_extern_fn_reloc,
64056405 .data = .{ .reloc = .{
64066406 .register = random_link_reg,
6407 .atom_index = @enumFromInt(try func.owner.getSymbolIndex(func)),
6407 .atom_index = @fromBackingInt(@intCast(try func.owner.getSymbolIndex(func))),
64086408 .sym_index = sym_offset.sym,
64096409 } },
64106410 });
......@@ -7035,7 +7035,7 @@ fn genSetReg(func: *Func, ty: Type, reg: Register, src_mcv: MCValue) InnerError!
70357035 },
70367036 .lea_symbol => |sym_off| {
70377037 assert(sym_off.off == 0);
7038 const atom_index: link.File.AtomId = @enumFromInt(try func.owner.getSymbolIndex(func));
7038 const atom_index: link.File.AtomId = @fromBackingInt(@intCast(try func.owner.getSymbolIndex(func)));
70397039
70407040 _ = try func.addInst(.{
70417041 .tag = .pseudo_load_symbol,
......@@ -7154,8 +7154,8 @@ fn genSetMem(
71547154 const mem_size = switch (base) {
71557155 .frame => |base_fi| mem_size: {
71567156 assert(disp >= 0);
7157 const frame_abi_size = func.frame_allocs.items(.abi_size)[@intFromEnum(base_fi)];
7158 const frame_spill_pad = func.frame_allocs.items(.spill_pad)[@intFromEnum(base_fi)];
7157 const frame_abi_size = func.frame_allocs.items(.abi_size)[@backingInt(base_fi)];
7158 const frame_spill_pad = func.frame_allocs.items(.spill_pad)[@backingInt(base_fi)];
71597159 assert(frame_abi_size - frame_spill_pad - disp >= abi_size);
71607160 break :mem_size if (frame_abi_size - frame_spill_pad - disp == abi_size)
71617161 frame_abi_size
......@@ -7225,7 +7225,7 @@ fn airBitCast(func: *Func, inst: Air.Inst.Index) !void {
72257225 const pt = func.pt;
72267226 const zcu = pt.zcu;
72277227
7228 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7228 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
72297229 const result = if (func.liveness.isUnused(inst)) .unreach else result: {
72307230 const src_mcv = try func.resolveInst(ty_op.operand);
72317231
......@@ -7262,7 +7262,7 @@ fn airBitCast(func: *Func, inst: Air.Inst.Index) !void {
72627262fn airArrayToSlice(func: *Func, inst: Air.Inst.Index) !void {
72637263 const pt = func.pt;
72647264 const zcu = pt.zcu;
7265 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7265 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
72667266
72677267 const slice_ty = func.typeOfIndex(inst);
72687268 const ptr_ty = func.typeOf(ty_op.operand);
......@@ -7284,7 +7284,7 @@ fn airArrayToSlice(func: *Func, inst: Air.Inst.Index) !void {
72847284}
72857285
72867286fn airFloatFromInt(func: *Func, inst: Air.Inst.Index) !void {
7287 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7287 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
72887288 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
72897289 const pt = func.pt;
72907290 const zcu = pt.zcu;
......@@ -7348,7 +7348,7 @@ fn airFloatFromInt(func: *Func, inst: Air.Inst.Index) !void {
73487348}
73497349
73507350fn airIntFromFloat(func: *Func, inst: Air.Inst.Index) !void {
7351 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7351 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
73527352 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
73537353 const pt = func.pt;
73547354 const zcu = pt.zcu;
......@@ -7410,7 +7410,7 @@ fn airCmpxchg(func: *Func, inst: Air.Inst.Index, strength: enum { weak, strong }
74107410
74117411 const pt = func.pt;
74127412 const zcu = pt.zcu;
7413 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
7413 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
74147414 const extra = func.air.extraData(Air.Cmpxchg, ty_pl.payload).data;
74157415
74167416 const ptr_ty = func.typeOf(extra.ptr);
......@@ -7547,7 +7547,7 @@ fn airCmpxchg(func: *Func, inst: Air.Inst.Index, strength: enum { weak, strong }
75477547fn airAtomicRmw(func: *Func, inst: Air.Inst.Index) !void {
75487548 const pt = func.pt;
75497549 const zcu = pt.zcu;
7550 const pl_op = func.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
7550 const pl_op = func.air.instructions.items(.data)[@backingInt(inst)].pl_op;
75517551 const extra = func.air.extraData(Air.AtomicRmw, pl_op.payload).data;
75527552
75537553 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
......@@ -7689,7 +7689,7 @@ fn airAtomicRmw(func: *Func, inst: Air.Inst.Index) !void {
76897689fn airAtomicLoad(func: *Func, inst: Air.Inst.Index) !void {
76907690 const pt = func.pt;
76917691 const zcu = pt.zcu;
7692 const atomic_load = func.air.instructions.items(.data)[@intFromEnum(inst)].atomic_load;
7692 const atomic_load = func.air.instructions.items(.data)[@backingInt(inst)].atomic_load;
76937693 const order: std.lang.AtomicOrder = atomic_load.order;
76947694
76957695 const ptr_ty = func.typeOf(atomic_load.ptr);
......@@ -7737,7 +7737,7 @@ fn airAtomicLoad(func: *Func, inst: Air.Inst.Index) !void {
77377737}
77387738
77397739fn airAtomicStore(func: *Func, inst: Air.Inst.Index, order: std.lang.AtomicOrder) !void {
7740 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
7740 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
77417741
77427742 const ptr_ty = func.typeOf(bin_op.lhs);
77437743 const ptr_mcv = try func.resolveInst(bin_op.lhs);
......@@ -7780,7 +7780,7 @@ fn airAtomicStore(func: *Func, inst: Air.Inst.Index, order: std.lang.AtomicOrder
77807780fn airMemset(func: *Func, inst: Air.Inst.Index, safety: bool) !void {
77817781 const pt = func.pt;
77827782 const zcu = pt.zcu;
7783 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
7783 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
77847784
77857785 result: {
77867786 if (!safety and (try func.resolveInst(bin_op.rhs)) == .undef) break :result;
......@@ -7861,7 +7861,7 @@ fn airMemset(func: *Func, inst: Air.Inst.Index, safety: bool) !void {
78617861fn airMemcpy(func: *Func, inst: Air.Inst.Index) !void {
78627862 const pt = func.pt;
78637863 const zcu = pt.zcu;
7864 const bin_op = func.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
7864 const bin_op = func.air.instructions.items(.data)[@backingInt(inst)].bin_op;
78657865
78667866 const dst_ptr = try func.resolveInst(bin_op.lhs);
78677867 const src_ptr = try func.resolveInst(bin_op.rhs);
......@@ -7909,7 +7909,7 @@ fn airMemmove(func: *Func, inst: Air.Inst.Index) !void {
79097909fn airTagName(func: *Func, inst: Air.Inst.Index) !void {
79107910 const pt = func.pt;
79117911
7912 const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
7912 const un_op = func.air.instructions.items(.data)[@backingInt(inst)].un_op;
79137913 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: {
79147914 const enum_ty = func.typeOf(un_op);
79157915
......@@ -7954,13 +7954,13 @@ fn airErrorName(func: *Func, inst: Air.Inst.Index) !void {
79547954}
79557955
79567956fn airSplat(func: *Func, inst: Air.Inst.Index) !void {
7957 const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7957 const ty_op = func.air.instructions.items(.data)[@backingInt(inst)].ty_op;
79587958 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement airSplat for riscv64", .{});
79597959 return func.finishAir(inst, result, .{ ty_op.operand, .none, .none });
79607960}
79617961
79627962fn airSelect(func: *Func, inst: Air.Inst.Index) !void {
7963 const pl_op = func.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
7963 const pl_op = func.air.instructions.items(.data)[@backingInt(inst)].pl_op;
79647964 const extra = func.air.extraData(Air.Bin, pl_op.payload).data;
79657965 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement airSelect for riscv64", .{});
79667966 return func.finishAir(inst, result, .{ pl_op.operand, extra.lhs, extra.rhs });
......@@ -7977,7 +7977,7 @@ fn airShuffleTwo(func: *Func, inst: Air.Inst.Index) !void {
79777977}
79787978
79797979fn airReduce(func: *Func, inst: Air.Inst.Index) !void {
7980 const reduce = func.air.instructions.items(.data)[@intFromEnum(inst)].reduce;
7980 const reduce = func.air.instructions.items(.data)[@backingInt(inst)].reduce;
79817981 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement airReduce for riscv64", .{});
79827982 return func.finishAir(inst, result, .{ reduce.operand, .none, .none });
79837983}
......@@ -7987,7 +7987,7 @@ fn airAggregateInit(func: *Func, inst: Air.Inst.Index) !void {
79877987 const zcu = pt.zcu;
79887988 const result_ty = func.typeOfIndex(inst);
79897989 const len: usize = @intCast(result_ty.arrayLen(zcu));
7990 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
7990 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
79917991 const elements: []const Air.Inst.Ref = @ptrCast(func.air.extra.items[ty_pl.payload..][0..len]);
79927992
79937993 const result: MCValue = result: {
......@@ -8085,7 +8085,7 @@ fn airAggregateInit(func: *Func, inst: Air.Inst.Index) !void {
80858085}
80868086
80878087fn airUnionInit(func: *Func, inst: Air.Inst.Index) !void {
8088 const ty_pl = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
8088 const ty_pl = func.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
80898089 const extra = func.air.extraData(Air.UnionInit, ty_pl.payload).data;
80908090 _ = extra;
80918091 return func.fail("TODO implement airUnionInit for riscv64", .{});
......@@ -8093,14 +8093,14 @@ fn airUnionInit(func: *Func, inst: Air.Inst.Index) !void {
80938093}
80948094
80958095fn airPrefetch(func: *Func, inst: Air.Inst.Index) !void {
8096 const prefetch = func.air.instructions.items(.data)[@intFromEnum(inst)].prefetch;
8096 const prefetch = func.air.instructions.items(.data)[@backingInt(inst)].prefetch;
80978097 // TODO: RISC-V does have prefetch instruction variants.
80988098 // see here: https://raw.githubusercontent.com/riscv/riscv-CMOs/master/specifications/cmobase-v1.0.1.pdf
80998099 return func.finishAir(inst, .unreach, .{ prefetch.ptr, .none, .none });
81008100}
81018101
81028102fn airMulAdd(func: *Func, inst: Air.Inst.Index) !void {
8103 const pl_op = func.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
8103 const pl_op = func.air.instructions.items(.data)[@backingInt(inst)].pl_op;
81048104 const extra = func.air.extraData(Air.Bin, pl_op.payload).data;
81058105 const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else {
81068106 return func.fail("TODO implement airMulAdd for riscv64", .{});
......@@ -8379,7 +8379,7 @@ fn typeOf(func: *Func, inst: Air.Inst.Ref) Type {
83798379
83808380fn typeOfIndex(func: *Func, inst: Air.Inst.Index) Type {
83818381 const zcu = func.pt.zcu;
8382 return switch (func.air.instructions.items(.tag)[@intFromEnum(inst)]) {
8382 return switch (func.air.instructions.items(.tag)[@backingInt(inst)]) {
83838383 .loop_switch_br => func.typeOf(func.air.unwrapSwitch(inst).operand),
83848384 else => func.air.typeOfIndex(inst, &zcu.intern_pool),
83858385 };
src/codegen/riscv64/Emit.zig+13-13
......@@ -47,25 +47,25 @@ pub fn emitMir(emit: *Emit) Error!void {
4747 const elf_file = emit.bin_file.cast(.elf).?;
4848 const zo = elf_file.zigObjectPtr().?;
4949
50 const atom_ptr = zo.symbol(@intFromEnum(symbol.atom_index)).atom(elf_file).?;
51 const sym = zo.symbol(@intFromEnum(symbol.sym_index));
50 const atom_ptr = zo.symbol(@backingInt(symbol.atom_index)).atom(elf_file).?;
51 const sym = zo.symbol(@backingInt(symbol.sym_index));
5252
5353 if (emit.lower.pic) {
5454 return emit.fail("know when to emit GOT relocation for symbol '{s}'", .{sym.name(elf_file)});
5555 }
5656
57 const hi_r_type: u32 = @intFromEnum(std.elf.R_RISCV.HI20);
58 const lo_r_type: u32 = @intFromEnum(std.elf.R_RISCV.LO12_I);
57 const hi_r_type: u32 = @backingInt(std.elf.R_RISCV.HI20);
58 const lo_r_type: u32 = @backingInt(std.elf.R_RISCV.LO12_I);
5959
6060 try atom_ptr.addReloc(gpa, .{
6161 .r_offset = start_offset,
62 .r_info = (@as(u64, @intFromEnum(symbol.sym_index)) << 32) | hi_r_type,
62 .r_info = (@as(u64, @backingInt(symbol.sym_index)) << 32) | hi_r_type,
6363 .r_addend = 0,
6464 }, zo);
6565
6666 try atom_ptr.addReloc(gpa, .{
6767 .r_offset = start_offset + 4,
68 .r_info = (@as(u64, @intFromEnum(symbol.sym_index)) << 32) | lo_r_type,
68 .r_info = (@as(u64, @backingInt(symbol.sym_index)) << 32) | lo_r_type,
6969 .r_addend = 0,
7070 }, zo);
7171 },
......@@ -73,38 +73,38 @@ pub fn emitMir(emit: *Emit) Error!void {
7373 const elf_file = emit.bin_file.cast(.elf).?;
7474 const zo = elf_file.zigObjectPtr().?;
7575
76 const atom_ptr = zo.symbol(@intFromEnum(symbol.atom_index)).atom(elf_file).?;
76 const atom_ptr = zo.symbol(@backingInt(symbol.atom_index)).atom(elf_file).?;
7777
7878 const R_RISCV = std.elf.R_RISCV;
7979
8080 try atom_ptr.addReloc(gpa, .{
8181 .r_offset = start_offset,
82 .r_info = (@as(u64, @intFromEnum(symbol.sym_index)) << 32) | @intFromEnum(R_RISCV.TPREL_HI20),
82 .r_info = (@as(u64, @backingInt(symbol.sym_index)) << 32) | @backingInt(R_RISCV.TPREL_HI20),
8383 .r_addend = 0,
8484 }, zo);
8585
8686 try atom_ptr.addReloc(gpa, .{
8787 .r_offset = start_offset + 4,
88 .r_info = (@as(u64, @intFromEnum(symbol.sym_index)) << 32) | @intFromEnum(R_RISCV.TPREL_ADD),
88 .r_info = (@as(u64, @backingInt(symbol.sym_index)) << 32) | @backingInt(R_RISCV.TPREL_ADD),
8989 .r_addend = 0,
9090 }, zo);
9191
9292 try atom_ptr.addReloc(gpa, .{
9393 .r_offset = start_offset + 8,
94 .r_info = (@as(u64, @intFromEnum(symbol.sym_index)) << 32) | @intFromEnum(R_RISCV.TPREL_LO12_I),
94 .r_info = (@as(u64, @backingInt(symbol.sym_index)) << 32) | @backingInt(R_RISCV.TPREL_LO12_I),
9595 .r_addend = 0,
9696 }, zo);
9797 },
9898 .call_extern_fn_reloc => |symbol| {
9999 const elf_file = emit.bin_file.cast(.elf).?;
100100 const zo = elf_file.zigObjectPtr().?;
101 const atom_ptr = zo.symbol(@intFromEnum(symbol.atom_index)).atom(elf_file).?;
101 const atom_ptr = zo.symbol(@backingInt(symbol.atom_index)).atom(elf_file).?;
102102
103 const r_type: u32 = @intFromEnum(std.elf.R_RISCV.CALL_PLT);
103 const r_type: u32 = @backingInt(std.elf.R_RISCV.CALL_PLT);
104104
105105 try atom_ptr.addReloc(gpa, .{
106106 .r_offset = start_offset,
107 .r_info = (@as(u64, @intFromEnum(symbol.sym_index)) << 32) | r_type,
107 .r_info = (@as(u64, @backingInt(symbol.sym_index)) << 32) | r_type,
108108 .r_addend = 0,
109109 }, zo);
110110 },
src/codegen/riscv64/Lower.zig+1-1
......@@ -554,7 +554,7 @@ fn pushPopRegList(lower: *Lower, comptime spilling: bool, reg_list: Mir.Register
554554
555555 var reg_i: u31 = 0;
556556 while (it.next()) |i| {
557 const frame = lower.mir.frame_locs.get(@intFromEnum(bits.FrameIndex.spill_frame));
557 const frame = lower.mir.frame_locs.get(@backingInt(bits.FrameIndex.spill_frame));
558558 const reg = abi.Registers.all_preserved[i];
559559
560560 const reg_class = reg.class();
src/codegen/riscv64/bits.zig+6-6
......@@ -75,7 +75,7 @@ pub const Memory = struct {
7575 };
7676 },
7777 .frame => |index| {
78 const base_loc = mir.frame_locs.get(@intFromEnum(index));
78 const base_loc = mir.frame_locs.get(@backingInt(index));
7979 return .{
8080 .base = base_loc.base,
8181 .disp = base_loc.disp + offset,
......@@ -191,7 +191,7 @@ pub const Register = enum(u8) {
191191 /// seperate IDs for `x0` and `f0`. We will assume that each register set has 32 registers
192192 /// and is repeated twice, once for the named version, once for the number version.
193193 pub fn id(reg: Register) std.math.IntFittingRange(0, @typeInfo(Register).@"enum".field_names.len) {
194 const base = switch (@intFromEnum(reg)) {
194 const base = switch (@backingInt(reg)) {
195195 // zig fmt: off
196196 @intFromEnum(Register.zero) ... @intFromEnum(Register.x31) => @intFromEnum(Register.zero),
197197 @intFromEnum(Register.ft0) ... @intFromEnum(Register.f31) => @intFromEnum(Register.ft0),
......@@ -204,7 +204,7 @@ pub const Register = enum(u8) {
204204 }
205205
206206 pub fn encodeId(reg: Register) u5 {
207 return @truncate(@intFromEnum(reg));
207 return @truncate(@backingInt(reg));
208208 }
209209
210210 pub fn dwarfNum(reg: Register) u8 {
......@@ -212,7 +212,7 @@ pub const Register = enum(u8) {
212212 }
213213
214214 pub fn bitSize(reg: Register, zcu: *const Zcu) u32 {
215 return switch (@intFromEnum(reg)) {
215 return switch (@backingInt(reg)) {
216216 // zig fmt: off
217217 @intFromEnum(Register.zero) ... @intFromEnum(Register.x31) => 64,
218218 @intFromEnum(Register.ft0) ... @intFromEnum(Register.f31) => if (zcu.getTarget().cpu.has(.riscv, .d)) 64 else 32,
......@@ -223,7 +223,7 @@ pub const Register = enum(u8) {
223223 }
224224
225225 pub fn class(reg: Register) abi.RegisterClass {
226 return switch (@intFromEnum(reg)) {
226 return switch (@backingInt(reg)) {
227227 // zig fmt: off
228228 @intFromEnum(Register.zero) ... @intFromEnum(Register.x31) => .int,
229229 @intFromEnum(Register.ft0) ... @intFromEnum(Register.f31) => .float,
......@@ -254,7 +254,7 @@ pub const FrameIndex = enum(u32) {
254254 pub const named_count = @typeInfo(FrameIndex).@"enum".field_names.len;
255255
256256 pub fn isNamed(fi: FrameIndex) bool {
257 return @intFromEnum(fi) < named_count;
257 return @backingInt(fi) < named_count;
258258 }
259259};
260260
src/codegen/riscv64/encoding.zig+12-12
......@@ -523,7 +523,7 @@ pub const Instruction = union(Lir.Format) {
523523 }
524524
525525 pub fn fromLir(lir: Lir, ops: []const Operand) Instruction {
526 const opcode: u7 = @intFromEnum(lir.opcode);
526 const opcode: u7 = @backingInt(lir.opcode);
527527
528528 switch (lir.format) {
529529 .R => {
......@@ -545,26 +545,26 @@ pub const Instruction = union(Lir.Format) {
545545
546546 .opcode = opcode,
547547 .funct3 = fmt.rm,
548 .funct7 = (@as(u7, fmt.funct5) << 2) | @intFromEnum(fmt.fmt),
548 .funct7 = (@as(u7, fmt.funct5) << 2) | @backingInt(fmt.fmt),
549549 },
550550 .fcvt => |fcvt| .{
551551 .rd = ops[0].reg.encodeId(),
552552 .rs1 = ops[1].reg.encodeId(),
553 .rs2 = @intFromEnum(fcvt.width),
553 .rs2 = @backingInt(fcvt.width),
554554
555555 .opcode = opcode,
556556 .funct3 = fcvt.rm,
557 .funct7 = (@as(u7, fcvt.funct5) << 2) | @intFromEnum(fcvt.fmt),
557 .funct7 = (@as(u7, fcvt.funct5) << 2) | @backingInt(fcvt.fmt),
558558 },
559559 .vecls => |vec| .{
560560 .rd = ops[0].reg.encodeId(),
561561 .rs1 = ops[1].reg.encodeId(),
562562
563 .rs2 = @intFromEnum(vec.umop),
563 .rs2 = @backingInt(vec.umop),
564564
565565 .opcode = opcode,
566 .funct3 = @intFromEnum(vec.width),
567 .funct7 = (@as(u7, vec.nf) << 4) | (@as(u7, @intFromBool(vec.mew)) << 3) | (@as(u7, @intFromEnum(vec.mop)) << 1) | @intFromBool(vec.vm),
566 .funct3 = @backingInt(vec.width),
567 .funct7 = (@as(u7, vec.nf) << 4) | (@as(u7, @intFromBool(vec.mew)) << 3) | (@as(u7, @backingInt(vec.mop)) << 1) | @intFromBool(vec.vm),
568568 },
569569 .vecmath => |vec| .{
570570 .rd = ops[0].reg.encodeId(),
......@@ -572,7 +572,7 @@ pub const Instruction = union(Lir.Format) {
572572 .rs2 = ops[2].reg.encodeId(),
573573
574574 .opcode = opcode,
575 .funct3 = @intFromEnum(vec.funct3),
575 .funct3 = @backingInt(vec.funct3),
576576 .funct7 = (@as(u7, vec.funct6) << 1) | @intFromBool(vec.vm),
577577 },
578578 .amo => |amo| .{
......@@ -581,7 +581,7 @@ pub const Instruction = union(Lir.Format) {
581581 .rs2 = ops[2].reg.encodeId(),
582582
583583 .opcode = opcode,
584 .funct3 = @intFromEnum(amo.width),
584 .funct3 = @backingInt(amo.width),
585585 .funct7 = @as(u7, amo.funct5) << 2 |
586586 @as(u7, @intFromBool(ops[3].barrier == .rl)) << 1 |
587587 @as(u7, @intFromBool(ops[4].barrier == .aq)),
......@@ -629,9 +629,9 @@ pub const Instruction = union(Lir.Format) {
629629 .rd = 0,
630630 .rs1 = 0,
631631 .funct3 = 0,
632 .imm0_11 = (@as(u12, @intFromEnum(fence.fm)) << 8) |
633 (@as(u12, @intFromEnum(ops[1].barrier)) << 4) |
634 @as(u12, @intFromEnum(ops[0].barrier)),
632 .imm0_11 = (@as(u12, @backingInt(fence.fm)) << 8) |
633 (@as(u12, @backingInt(ops[1].barrier)) << 4) |
634 @as(u12, @backingInt(ops[0].barrier)),
635635 .opcode = opcode,
636636 },
637637 else => unreachable,
src/codegen/sparc64/CodeGen.zig+78-78
......@@ -466,7 +466,7 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {
466466 try self.ensureProcessDeathCapacity(Air.Liveness.bpi);
467467
468468 self.reused_operands = @TypeOf(self.reused_operands).empty;
469 switch (air_tags[@intFromEnum(inst)]) {
469 switch (air_tags[@backingInt(inst)]) {
470470 // zig fmt: off
471471
472472 // No "scalarize" legalizations are enabled, so these instructions never appear.
......@@ -726,21 +726,21 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void {
726726
727727 if (std.debug.runtime_safety) {
728728 if (self.air_bookkeeping < old_air_bookkeeping + 1) {
729 std.debug.panic("in codegen.zig, handling of AIR instruction %{d} ('{t}') did not do proper bookkeeping. Look for a missing call to finishAir.", .{ inst, air_tags[@intFromEnum(inst)] });
729 std.debug.panic("in codegen.zig, handling of AIR instruction %{d} ('{t}') did not do proper bookkeeping. Look for a missing call to finishAir.", .{ inst, air_tags[@backingInt(inst)] });
730730 }
731731 }
732732 }
733733}
734734
735735fn airAddSat(self: *Self, inst: Air.Inst.Index) !void {
736 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
736 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
737737 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement add_sat for {}", .{self.target.cpu.arch});
738738 return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
739739}
740740
741741fn airAddSubWithOverflow(self: *Self, inst: Air.Inst.Index) !void {
742 const tag = self.air.instructions.items(.tag)[@intFromEnum(inst)];
743 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
742 const tag = self.air.instructions.items(.tag)[@backingInt(inst)];
743 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
744744 const extra = self.air.extraData(Air.Bin, ty_pl.payload).data;
745745 const pt = self.pt;
746746 const zcu = pt.zcu;
......@@ -825,7 +825,7 @@ fn airAggregateInit(self: *Self, inst: Air.Inst.Index) !void {
825825 const zcu = pt.zcu;
826826 const vector_ty = self.typeOfIndex(inst);
827827 const len = vector_ty.vectorLen(zcu);
828 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
828 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
829829 const elements: []const Air.Inst.Ref = @ptrCast(self.air.extra.items[ty_pl.payload..][0..len]);
830830 const result: MCValue = res: {
831831 if (self.liveness.isUnused(inst)) break :res MCValue.dead;
......@@ -850,7 +850,7 @@ fn airAlloc(self: *Self, inst: Air.Inst.Index) !void {
850850}
851851
852852fn airArrayElemVal(self: *Self, inst: Air.Inst.Index) !void {
853 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
853 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
854854 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement array_elem_val for {}", .{self.target.cpu.arch});
855855 return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
856856}
......@@ -858,7 +858,7 @@ fn airArrayElemVal(self: *Self, inst: Air.Inst.Index) !void {
858858fn airArrayToSlice(self: *Self, inst: Air.Inst.Index) !void {
859859 const pt = self.pt;
860860 const zcu = pt.zcu;
861 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
861 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
862862 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
863863 const ptr_ty = self.typeOf(ty_op.operand);
864864 const ptr = try self.resolveInst(ty_op.operand);
......@@ -993,7 +993,7 @@ fn airArg(self: *Self, inst: Air.Inst.Index) InnerError!void {
993993 const func_zir = zcu.funcInfo(self.func_index).zir_body_inst.resolveFull(&zcu.intern_pool).?;
994994 const file = zcu.fileByIndex(func_zir.file);
995995 if (!file.mod.?.strip) {
996 const arg = self.air.instructions.items(.data)[@intFromEnum(inst)].arg;
996 const arg = self.air.instructions.items(.data)[@backingInt(inst)].arg;
997997 const zir = &file.zir.?;
998998 const name = zir.nullTerminatedString(zir.getParamName(zir.getParamBody(func_zir.inst)[arg.zir_param_index]).?);
999999
......@@ -1015,7 +1015,7 @@ fn airArg(self: *Self, inst: Air.Inst.Index) InnerError!void {
10151015}
10161016
10171017fn airAtomicLoad(self: *Self, inst: Air.Inst.Index) !void {
1018 _ = self.air.instructions.items(.data)[@intFromEnum(inst)].atomic_load;
1018 _ = self.air.instructions.items(.data)[@backingInt(inst)].atomic_load;
10191019
10201020 return self.fail("TODO implement airAtomicLoad for {}", .{
10211021 self.target.cpu.arch,
......@@ -1023,7 +1023,7 @@ fn airAtomicLoad(self: *Self, inst: Air.Inst.Index) !void {
10231023}
10241024
10251025fn airAtomicRmw(self: *Self, inst: Air.Inst.Index) !void {
1026 _ = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
1026 _ = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
10271027
10281028 return self.fail("TODO implement airAtomicRmw for {}", .{
10291029 self.target.cpu.arch,
......@@ -1031,7 +1031,7 @@ fn airAtomicRmw(self: *Self, inst: Air.Inst.Index) !void {
10311031}
10321032
10331033fn airBinOp(self: *Self, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
1034 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1034 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
10351035 const lhs = try self.resolveInst(bin_op.lhs);
10361036 const rhs = try self.resolveInst(bin_op.rhs);
10371037 const lhs_ty = self.typeOf(bin_op.lhs);
......@@ -1048,7 +1048,7 @@ fn airBinOp(self: *Self, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
10481048}
10491049
10501050fn airPtrArithmetic(self: *Self, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
1051 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
1051 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
10521052 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;
10531053 const lhs = try self.resolveInst(bin_op.lhs);
10541054 const rhs = try self.resolveInst(bin_op.rhs);
......@@ -1066,7 +1066,7 @@ fn airPtrArithmetic(self: *Self, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void
10661066}
10671067
10681068fn airBitCast(self: *Self, inst: Air.Inst.Index) !void {
1069 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1069 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
10701070 const result = if (self.liveness.isUnused(inst)) .dead else result: {
10711071 const operand = try self.resolveInst(ty_op.operand);
10721072 if (self.reuseOperand(inst, ty_op.operand, 0, operand)) break :result operand;
......@@ -1086,7 +1086,7 @@ fn airBitCast(self: *Self, inst: Air.Inst.Index) !void {
10861086}
10871087
10881088fn airBitReverse(self: *Self, inst: Air.Inst.Index) !void {
1089 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1089 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
10901090 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airBitReverse for {}", .{self.target.cpu.arch});
10911091 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
10921092}
......@@ -1134,7 +1134,7 @@ fn lowerBlock(self: *Self, inst: Air.Inst.Index, body: []const Air.Inst.Index) !
11341134}
11351135
11361136fn airBr(self: *Self, inst: Air.Inst.Index) !void {
1137 const branch = self.air.instructions.items(.data)[@intFromEnum(inst)].br;
1137 const branch = self.air.instructions.items(.data)[@backingInt(inst)].br;
11381138 try self.br(branch.block_inst, branch.operand);
11391139 return self.finishAir(inst, .dead, .{ branch.operand, .none, .none });
11401140}
......@@ -1172,7 +1172,7 @@ fn airBreakpoint(self: *Self) !void {
11721172fn airByteSwap(self: *Self, inst: Air.Inst.Index) !void {
11731173 const pt = self.pt;
11741174 const zcu = pt.zcu;
1175 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1175 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
11761176
11771177 // We have hardware byteswapper in SPARCv9, don't let mainstream compilers mislead you.
11781178 // That being said, the strategy to lower this is:
......@@ -1359,13 +1359,13 @@ fn airCall(self: *Self, inst: Air.Inst.Index, modifier: std.lang.CallModifier) !
13591359}
13601360
13611361fn airClz(self: *Self, inst: Air.Inst.Index) !void {
1362 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1362 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
13631363 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airClz for {}", .{self.target.cpu.arch});
13641364 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
13651365}
13661366
13671367fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void {
1368 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1368 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
13691369 const pt = self.pt;
13701370 const zcu = pt.zcu;
13711371 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
......@@ -1423,7 +1423,7 @@ fn airCmp(self: *Self, inst: Air.Inst.Index, op: math.CompareOperator) !void {
14231423}
14241424
14251425fn airCmpLteErrorsLen(self: *Self, inst: Air.Inst.Index) !void {
1426 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1426 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
14271427 const operand = try self.resolveInst(un_op);
14281428 _ = operand;
14291429 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airCmpLteErrorsLen for {}", .{self.target.cpu.arch});
......@@ -1584,7 +1584,7 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void {
15841584}
15851585
15861586fn airCtz(self: *Self, inst: Air.Inst.Index) !void {
1587 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1587 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
15881588 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airCtz for {}", .{self.target.cpu.arch});
15891589 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
15901590}
......@@ -1596,7 +1596,7 @@ fn airDbgInlineBlock(self: *Self, inst: Air.Inst.Index) !void {
15961596}
15971597
15981598fn airDbgStmt(self: *Self, inst: Air.Inst.Index) !void {
1599 const dbg_stmt = self.air.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt;
1599 const dbg_stmt = self.air.instructions.items(.data)[@backingInt(inst)].dbg_stmt;
16001600
16011601 _ = try self.addInst(.{
16021602 .tag = .dbg_line,
......@@ -1612,8 +1612,8 @@ fn airDbgStmt(self: *Self, inst: Air.Inst.Index) !void {
16121612}
16131613
16141614fn airDbgVar(self: *Self, inst: Air.Inst.Index) !void {
1615 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
1616 const name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
1615 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
1616 const name: Air.NullTerminatedString = @fromBackingInt(@intCast(pl_op.payload));
16171617 const operand = pl_op.operand;
16181618 // TODO emit debug info for this variable
16191619 _ = name;
......@@ -1621,13 +1621,13 @@ fn airDbgVar(self: *Self, inst: Air.Inst.Index) !void {
16211621}
16221622
16231623fn airDiv(self: *Self, inst: Air.Inst.Index) !void {
1624 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1624 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
16251625 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement div for {}", .{self.target.cpu.arch});
16261626 return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
16271627}
16281628
16291629fn airErrorName(self: *Self, inst: Air.Inst.Index) !void {
1630 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1630 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
16311631 const operand = try self.resolveInst(un_op);
16321632 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else {
16331633 _ = operand;
......@@ -1637,13 +1637,13 @@ fn airErrorName(self: *Self, inst: Air.Inst.Index) !void {
16371637}
16381638
16391639fn airErrUnionPayloadPtrSet(self: *Self, inst: Air.Inst.Index) !void {
1640 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1640 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
16411641 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement .errunion_payload_ptr_set for {}", .{self.target.cpu.arch});
16421642 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
16431643}
16441644
16451645fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void {
1646 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1646 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
16471647 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airIntFromFloat for {}", .{
16481648 self.target.cpu.arch,
16491649 });
......@@ -1651,13 +1651,13 @@ fn airIntFromFloat(self: *Self, inst: Air.Inst.Index) !void {
16511651}
16521652
16531653fn airGetUnionTag(self: *Self, inst: Air.Inst.Index) !void {
1654 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1654 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
16551655 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airGetUnionTag for {}", .{self.target.cpu.arch});
16561656 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
16571657}
16581658
16591659fn airIntCast(self: *Self, inst: Air.Inst.Index) !void {
1660 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1660 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
16611661 if (self.liveness.isUnused(inst))
16621662 return self.finishAir(inst, .dead, .{ ty_op.operand, .none, .none });
16631663
......@@ -1677,7 +1677,7 @@ fn airIntCast(self: *Self, inst: Air.Inst.Index) !void {
16771677}
16781678
16791679fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void {
1680 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1680 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
16811681 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airFloatFromInt for {}", .{
16821682 self.target.cpu.arch,
16831683 });
......@@ -1685,7 +1685,7 @@ fn airFloatFromInt(self: *Self, inst: Air.Inst.Index) !void {
16851685}
16861686
16871687fn airIsErr(self: *Self, inst: Air.Inst.Index) !void {
1688 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1688 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
16891689 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
16901690 const operand = try self.resolveInst(un_op);
16911691 const ty = self.typeOf(un_op);
......@@ -1695,7 +1695,7 @@ fn airIsErr(self: *Self, inst: Air.Inst.Index) !void {
16951695}
16961696
16971697fn airIsNonErr(self: *Self, inst: Air.Inst.Index) !void {
1698 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1698 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
16991699 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
17001700 const operand = try self.resolveInst(un_op);
17011701 const ty = self.typeOf(un_op);
......@@ -1705,7 +1705,7 @@ fn airIsNonErr(self: *Self, inst: Air.Inst.Index) !void {
17051705}
17061706
17071707fn airIsNull(self: *Self, inst: Air.Inst.Index) !void {
1708 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1708 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
17091709 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
17101710 const operand = try self.resolveInst(un_op);
17111711 break :result try self.isNull(operand);
......@@ -1714,7 +1714,7 @@ fn airIsNull(self: *Self, inst: Air.Inst.Index) !void {
17141714}
17151715
17161716fn airIsNonNull(self: *Self, inst: Air.Inst.Index) !void {
1717 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1717 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
17181718 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
17191719 const operand = try self.resolveInst(un_op);
17201720 break :result try self.isNonNull(operand);
......@@ -1725,7 +1725,7 @@ fn airIsNonNull(self: *Self, inst: Air.Inst.Index) !void {
17251725fn airLoad(self: *Self, inst: Air.Inst.Index) !void {
17261726 const pt = self.pt;
17271727 const zcu = pt.zcu;
1728 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1728 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
17291729 const elem_ty = self.typeOfIndex(inst);
17301730 const elem_size = elem_ty.abiSize(zcu);
17311731 const result: MCValue = result: {
......@@ -1771,7 +1771,7 @@ fn airMemset(self: *Self, inst: Air.Inst.Index, safety: bool) !void {
17711771 } else {
17721772 // TODO if the value is undef, don't lower this instruction
17731773 }
1774 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
1774 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
17751775 const extra = self.air.extraData(Air.Bin, pl_op.payload);
17761776
17771777 const operand = pl_op.operand;
......@@ -1785,8 +1785,8 @@ fn airMemset(self: *Self, inst: Air.Inst.Index, safety: bool) !void {
17851785}
17861786
17871787fn airMinMax(self: *Self, inst: Air.Inst.Index) !void {
1788 const tag = self.air.instructions.items(.tag)[@intFromEnum(inst)];
1789 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1788 const tag = self.air.instructions.items(.tag)[@backingInt(inst)];
1789 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
17901790 const lhs = try self.resolveInst(bin_op.lhs);
17911791 const rhs = try self.resolveInst(bin_op.rhs);
17921792 const lhs_ty = self.typeOf(bin_op.lhs);
......@@ -1801,7 +1801,7 @@ fn airMinMax(self: *Self, inst: Air.Inst.Index) !void {
18011801}
18021802
18031803fn airMod(self: *Self, inst: Air.Inst.Index) !void {
1804 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1804 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
18051805 const lhs = try self.resolveInst(bin_op.lhs);
18061806 const rhs = try self.resolveInst(bin_op.rhs);
18071807 const lhs_ty = self.typeOf(bin_op.lhs);
......@@ -1939,14 +1939,14 @@ fn airMod(self: *Self, inst: Air.Inst.Index) !void {
19391939}
19401940
19411941fn airMulSat(self: *Self, inst: Air.Inst.Index) !void {
1942 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1942 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
19431943 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement mul_sat for {}", .{self.target.cpu.arch});
19441944 return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
19451945}
19461946
19471947fn airMulWithOverflow(self: *Self, inst: Air.Inst.Index) !void {
19481948 //const tag = self.air.instructions.items(.tag)[@intFromEnum(inst)];
1949 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
1949 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
19501950 const extra = self.air.extraData(Air.Bin, ty_pl.payload).data;
19511951 const pt = self.pt;
19521952 const zcu = pt.zcu;
......@@ -2012,7 +2012,7 @@ fn airMulWithOverflow(self: *Self, inst: Air.Inst.Index) !void {
20122012}
20132013
20142014fn airNot(self: *Self, inst: Air.Inst.Index) !void {
2015 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2015 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
20162016 const pt = self.pt;
20172017 const zcu = pt.zcu;
20182018 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
......@@ -2109,51 +2109,51 @@ fn airNot(self: *Self, inst: Air.Inst.Index) !void {
21092109}
21102110
21112111fn airOptionalPayload(self: *Self, inst: Air.Inst.Index) !void {
2112 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2112 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21132113 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement .optional_payload for {}", .{self.target.cpu.arch});
21142114 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
21152115}
21162116
21172117fn airOptionalPayloadPtr(self: *Self, inst: Air.Inst.Index) !void {
2118 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2118 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21192119 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement .optional_payload_ptr for {}", .{self.target.cpu.arch});
21202120 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
21212121}
21222122
21232123fn airOptionalPayloadPtrSet(self: *Self, inst: Air.Inst.Index) !void {
2124 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2124 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21252125 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement .optional_payload_ptr_set for {}", .{self.target.cpu.arch});
21262126 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
21272127}
21282128
21292129fn airPopcount(self: *Self, inst: Air.Inst.Index) !void {
2130 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2130 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21312131 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airPopcount for {}", .{self.target.cpu.arch});
21322132 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
21332133}
21342134
21352135fn airPrefetch(self: *Self, inst: Air.Inst.Index) !void {
2136 const prefetch = self.air.instructions.items(.data)[@intFromEnum(inst)].prefetch;
2136 const prefetch = self.air.instructions.items(.data)[@backingInt(inst)].prefetch;
21372137 // TODO Emit a PREFETCH/IPREFETCH as necessary, see A.7 and A.42
21382138 return self.finishAir(inst, MCValue.dead, .{ prefetch.ptr, .none, .none });
21392139}
21402140
21412141fn airPtrElemVal(self: *Self, inst: Air.Inst.Index) !void {
21422142 const is_volatile = false; // TODO
2143 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2143 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
21442144 const result: MCValue = if (!is_volatile and self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement ptr_elem_val for {}", .{self.target.cpu.arch});
21452145 return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
21462146}
21472147
21482148fn airPtrElemPtr(self: *Self, inst: Air.Inst.Index) !void {
2149 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2149 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
21502150 const extra = self.air.extraData(Air.Bin, ty_pl.payload).data;
21512151 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement ptr_elem_ptr for {}", .{self.target.cpu.arch});
21522152 return self.finishAir(inst, result, .{ extra.lhs, extra.rhs, .none });
21532153}
21542154
21552155fn airPtrSliceLenPtr(self: *Self, inst: Air.Inst.Index) !void {
2156 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2156 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21572157 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
21582158 const ptr_bits = self.target.ptrBitWidth();
21592159 const ptr_bytes = @divExact(ptr_bits, 8);
......@@ -2170,7 +2170,7 @@ fn airPtrSliceLenPtr(self: *Self, inst: Air.Inst.Index) !void {
21702170}
21712171
21722172fn airPtrSlicePtrPtr(self: *Self, inst: Air.Inst.Index) !void {
2173 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2173 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21742174 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
21752175 const mcv = try self.resolveInst(ty_op.operand);
21762176 switch (mcv) {
......@@ -2185,7 +2185,7 @@ fn airPtrSlicePtrPtr(self: *Self, inst: Air.Inst.Index) !void {
21852185}
21862186
21872187fn airRem(self: *Self, inst: Air.Inst.Index) !void {
2188 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2188 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
21892189 const lhs = try self.resolveInst(bin_op.lhs);
21902190 const rhs = try self.resolveInst(bin_op.rhs);
21912191 const lhs_ty = self.typeOf(bin_op.lhs);
......@@ -2206,14 +2206,14 @@ fn airRem(self: *Self, inst: Air.Inst.Index) !void {
22062206}
22072207
22082208fn airRet(self: *Self, inst: Air.Inst.Index) !void {
2209 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
2209 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
22102210 const operand = try self.resolveInst(un_op);
22112211 try self.ret(operand);
22122212 return self.finishAir(inst, .dead, .{ un_op, .none, .none });
22132213}
22142214
22152215fn airRetLoad(self: *Self, inst: Air.Inst.Index) !void {
2216 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
2216 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
22172217 const ptr = try self.resolveInst(un_op);
22182218 _ = ptr;
22192219 return self.fail("TODO implement airRetLoad for {}", .{self.target.cpu.arch});
......@@ -2226,14 +2226,14 @@ fn airRetPtr(self: *Self, inst: Air.Inst.Index) !void {
22262226}
22272227
22282228fn airSetUnionTag(self: *Self, inst: Air.Inst.Index) !void {
2229 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2229 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
22302230 _ = bin_op;
22312231 return self.fail("TODO implement airSetUnionTag for {}", .{self.target.cpu.arch});
22322232}
22332233
22342234fn airShlSat(self: *Self, inst: Air.Inst.Index) !void {
22352235 const zcu = self.pt.zcu;
2236 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2236 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
22372237 const result: MCValue = if (self.liveness.isUnused(inst))
22382238 .dead
22392239 else if (self.typeOf(bin_op.lhs).isVector(zcu) and !self.typeOf(bin_op.rhs).isVector(zcu))
......@@ -2244,7 +2244,7 @@ fn airShlSat(self: *Self, inst: Air.Inst.Index) !void {
22442244}
22452245
22462246fn airShlWithOverflow(self: *Self, inst: Air.Inst.Index) !void {
2247 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2247 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
22482248 const extra = self.air.extraData(Air.Bin, ty_pl.payload).data;
22492249 const pt = self.pt;
22502250 const zcu = pt.zcu;
......@@ -2338,7 +2338,7 @@ fn airShlWithOverflow(self: *Self, inst: Air.Inst.Index) !void {
23382338}
23392339
23402340fn airSlice(self: *Self, inst: Air.Inst.Index) !void {
2341 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2341 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
23422342 const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data;
23432343 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
23442344 const ptr = try self.resolveInst(bin_op.lhs);
......@@ -2358,7 +2358,7 @@ fn airSliceElemVal(self: *Self, inst: Air.Inst.Index) !void {
23582358 const pt = self.pt;
23592359 const zcu = pt.zcu;
23602360 const is_volatile = false; // TODO
2361 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2361 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
23622362
23632363 if (!is_volatile and self.liveness.isUnused(inst)) return self.finishAir(inst, .dead, .{ bin_op.lhs, bin_op.rhs, .none });
23642364 const result: MCValue = result: {
......@@ -2400,7 +2400,7 @@ fn airSliceElemVal(self: *Self, inst: Air.Inst.Index) !void {
24002400}
24012401
24022402fn airSliceLen(self: *Self, inst: Air.Inst.Index) !void {
2403 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2403 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
24042404 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
24052405 const ptr_bits = self.target.ptrBitWidth();
24062406 const ptr_bytes = @divExact(ptr_bits, 8);
......@@ -2421,7 +2421,7 @@ fn airSliceLen(self: *Self, inst: Air.Inst.Index) !void {
24212421}
24222422
24232423fn airSlicePtr(self: *Self, inst: Air.Inst.Index) !void {
2424 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2424 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
24252425 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
24262426 const mcv = try self.resolveInst(ty_op.operand);
24272427 switch (mcv) {
......@@ -2440,7 +2440,7 @@ fn airSlicePtr(self: *Self, inst: Air.Inst.Index) !void {
24402440}
24412441
24422442fn airSplat(self: *Self, inst: Air.Inst.Index) !void {
2443 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2443 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
24442444 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement airSplat for {}", .{self.target.cpu.arch});
24452445 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
24462446}
......@@ -2451,7 +2451,7 @@ fn airStore(self: *Self, inst: Air.Inst.Index, safety: bool) !void {
24512451 } else {
24522452 // TODO if the value is undef, don't lower this instruction
24532453 }
2454 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2454 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
24552455 const ptr = try self.resolveInst(bin_op.lhs);
24562456 const value = try self.resolveInst(bin_op.rhs);
24572457 const ptr_ty = self.typeOf(bin_op.lhs);
......@@ -2463,20 +2463,20 @@ fn airStore(self: *Self, inst: Air.Inst.Index, safety: bool) !void {
24632463}
24642464
24652465fn airStructFieldPtr(self: *Self, inst: Air.Inst.Index) !void {
2466 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2466 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
24672467 const extra = self.air.extraData(Air.StructField, ty_pl.payload).data;
24682468 const result = try self.structFieldPtr(inst, extra.struct_operand, extra.field_index);
24692469 return self.finishAir(inst, result, .{ extra.struct_operand, .none, .none });
24702470}
24712471
24722472fn airStructFieldPtrIndex(self: *Self, inst: Air.Inst.Index, index: u8) !void {
2473 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2473 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
24742474 const result = try self.structFieldPtr(inst, ty_op.operand, index);
24752475 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
24762476}
24772477
24782478fn airAggFieldVal(self: *Self, inst: Air.Inst.Index) !void {
2479 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2479 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
24802480 const extra = self.air.extraData(Air.StructField, ty_pl.payload).data;
24812481 const operand = extra.struct_operand;
24822482 const index = extra.field_index;
......@@ -2546,7 +2546,7 @@ fn airAggFieldVal(self: *Self, inst: Air.Inst.Index) !void {
25462546}
25472547
25482548fn airSubSat(self: *Self, inst: Air.Inst.Index) !void {
2549 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2549 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
25502550 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement sub_sat for {}", .{self.target.cpu.arch});
25512551 return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none });
25522552}
......@@ -2557,7 +2557,7 @@ fn airSwitch(self: *Self, inst: Air.Inst.Index) !void {
25572557}
25582558
25592559fn airTagName(self: *Self, inst: Air.Inst.Index) !void {
2560 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
2560 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
25612561 const operand = try self.resolveInst(un_op);
25622562 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else {
25632563 _ = operand;
......@@ -2567,7 +2567,7 @@ fn airTagName(self: *Self, inst: Air.Inst.Index) !void {
25672567}
25682568
25692569fn airTrunc(self: *Self, inst: Air.Inst.Index) !void {
2570 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2570 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
25712571 const operand = try self.resolveInst(ty_op.operand);
25722572 const operand_ty = self.typeOf(ty_op.operand);
25732573 const dest_ty = self.typeOfIndex(inst);
......@@ -2597,7 +2597,7 @@ fn airTry(self: *Self, inst: Air.Inst.Index) !void {
25972597}
25982598
25992599fn airUnaryMath(self: *Self, inst: Air.Inst.Index) !void {
2600 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
2600 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
26012601 const result: MCValue = if (self.liveness.isUnused(inst))
26022602 .dead
26032603 else
......@@ -2606,7 +2606,7 @@ fn airUnaryMath(self: *Self, inst: Air.Inst.Index) !void {
26062606}
26072607
26082608fn airUnionInit(self: *Self, inst: Air.Inst.Index) !void {
2609 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
2609 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
26102610 const extra = self.air.extraData(Air.UnionInit, ty_pl.payload).data;
26112611 _ = extra;
26122612 return self.fail("TODO implement airUnionInit for {}", .{self.target.cpu.arch});
......@@ -2615,7 +2615,7 @@ fn airUnionInit(self: *Self, inst: Air.Inst.Index) !void {
26152615fn airUnwrapErrErr(self: *Self, inst: Air.Inst.Index) !void {
26162616 const pt = self.pt;
26172617 const zcu = pt.zcu;
2618 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2618 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
26192619 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
26202620 const error_union_ty = self.typeOf(ty_op.operand);
26212621 const payload_ty = error_union_ty.errorUnionPayload(zcu);
......@@ -2630,7 +2630,7 @@ fn airUnwrapErrErr(self: *Self, inst: Air.Inst.Index) !void {
26302630fn airUnwrapErrPayload(self: *Self, inst: Air.Inst.Index) !void {
26312631 const pt = self.pt;
26322632 const zcu = pt.zcu;
2633 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2633 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
26342634 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
26352635 const error_union_ty = self.typeOf(ty_op.operand);
26362636 const payload_ty = error_union_ty.errorUnionPayload(zcu);
......@@ -2645,7 +2645,7 @@ fn airUnwrapErrPayload(self: *Self, inst: Air.Inst.Index) !void {
26452645fn airWrapErrUnionErr(self: *Self, inst: Air.Inst.Index) !void {
26462646 const pt = self.pt;
26472647 const zcu = pt.zcu;
2648 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2648 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
26492649 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
26502650 const error_union_ty = ty_op.ty.toType();
26512651 const payload_ty = error_union_ty.errorUnionPayload(zcu);
......@@ -2659,14 +2659,14 @@ fn airWrapErrUnionErr(self: *Self, inst: Air.Inst.Index) !void {
26592659
26602660/// T to E!T
26612661fn airWrapErrUnionPayload(self: *Self, inst: Air.Inst.Index) !void {
2662 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2662 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
26632663 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else return self.fail("TODO implement wrap errunion payload for {}", .{self.target.cpu.arch});
26642664 return self.finishAir(inst, result, .{ ty_op.operand, .none, .none });
26652665}
26662666
26672667fn airWrapOptional(self: *Self, inst: Air.Inst.Index) !void {
26682668 const pt = self.pt;
2669 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2669 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
26702670 const result: MCValue = if (self.liveness.isUnused(inst)) .dead else result: {
26712671 const optional_ty = self.typeOfIndex(inst);
26722672
......@@ -4670,7 +4670,7 @@ fn trunc(
46704670 defer if (lock) |reg| self.register_manager.unlockReg(reg);
46714671
46724672 const dest_reg = if (maybe_inst) |inst| blk: {
4673 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4673 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
46744674
46754675 if (operand == .register and self.reuseOperand(inst, ty_op.operand, 0, operand)) {
46764676 break :blk operand_reg;
src/codegen/sparc64/bits.zig+31-31
......@@ -15,7 +15,7 @@ pub const Register = enum(u6) {
1515 // zig fmt: on
1616
1717 pub fn id(reg: Register) u5 {
18 return @truncate(@intFromEnum(reg));
18 return @truncate(@backingInt(reg));
1919 }
2020
2121 pub fn enc(reg: Register) u5 {
......@@ -95,9 +95,9 @@ pub const FloatingPointRegister = enum(u7) {
9595
9696 pub fn id(self: FloatingPointRegister) u6 {
9797 return switch (self.size()) {
98 32 => @as(u6, @truncate(@intFromEnum(self))),
99 64 => @as(u6, @truncate((@intFromEnum(self) - 32) * 2)),
100 128 => @as(u6, @truncate((@intFromEnum(self) - 64) * 4)),
98 32 => @as(u6, @truncate(@backingInt(self))),
99 64 => @as(u6, @truncate((@backingInt(self) - 32) * 2)),
100 128 => @as(u6, @truncate((@backingInt(self) - 64) * 4)),
101101 else => unreachable,
102102 };
103103 }
......@@ -113,7 +113,7 @@ pub const FloatingPointRegister = enum(u7) {
113113
114114 /// Returns the bit-width of the register.
115115 pub fn size(self: FloatingPointRegister) u8 {
116 return switch (@intFromEnum(self)) {
116 return switch (@backingInt(self)) {
117117 0...31 => 32,
118118 32...63 => 64,
119119 64...79 => 128,
......@@ -695,8 +695,8 @@ pub const Instruction = union(enum) {
695695 /// Encodes the condition into the instruction bit pattern.
696696 pub fn enc(cond: Condition) u4 {
697697 return switch (cond) {
698 .icond => |c| @intFromEnum(c),
699 .fcond => |c| @intFromEnum(c),
698 .icond => |c| @backingInt(c),
699 .fcond => |c| @backingInt(c),
700700 };
701701 }
702702
......@@ -802,8 +802,8 @@ pub const Instruction = union(enum) {
802802 // Discard the last two bits since those are implicitly zero.
803803 const udisp_truncated = @as(u19, @truncate(udisp >> 2));
804804
805 const ccr_cc1 = @as(u1, @truncate(@intFromEnum(ccr) >> 1));
806 const ccr_cc0 = @as(u1, @truncate(@intFromEnum(ccr)));
805 const ccr_cc1 = @as(u1, @truncate(@backingInt(ccr) >> 1));
806 const ccr_cc0 = @as(u1, @truncate(@backingInt(ccr)));
807807 return Instruction{
808808 .format_2c = .{
809809 .a = @intFromBool(annul),
......@@ -831,7 +831,7 @@ pub const Instruction = union(enum) {
831831 return Instruction{
832832 .format_2d = .{
833833 .a = @intFromBool(annul),
834 .rcond = @intFromEnum(rcond),
834 .rcond = @backingInt(rcond),
835835 .op2 = op2,
836836 .p = @intFromBool(pt),
837837 .rs1 = rs1.enc(),
......@@ -890,7 +890,7 @@ pub const Instruction = union(enum) {
890890 .rd = rd.enc(),
891891 .op3 = op3,
892892 .rs1 = rs1.enc(),
893 .rcond = @intFromEnum(rcond),
893 .rcond = @backingInt(rcond),
894894 .rs2 = rs2.enc(),
895895 },
896896 };
......@@ -902,7 +902,7 @@ pub const Instruction = union(enum) {
902902 .rd = rd.enc(),
903903 .op3 = op3,
904904 .rs1 = rs1.enc(),
905 .rcond = @intFromEnum(rcond),
905 .rcond = @backingInt(rcond),
906906 .simm10 = @as(u10, @bitCast(imm)),
907907 },
908908 };
......@@ -933,7 +933,7 @@ pub const Instruction = union(enum) {
933933 .rd = rd.enc(),
934934 .op3 = op3,
935935 .rs1 = rs1.enc(),
936 .imm_asi = @intFromEnum(asi),
936 .imm_asi = @backingInt(asi),
937937 .rs2 = rs2.enc(),
938938 },
939939 };
......@@ -955,7 +955,7 @@ pub const Instruction = union(enum) {
955955 .rd = rd.enc(),
956956 .op3 = op3,
957957 .rs1 = rs1.enc(),
958 .x = @intFromEnum(sw),
958 .x = @backingInt(sw),
959959 .rs2 = rs2.enc(),
960960 },
961961 };
......@@ -994,8 +994,8 @@ pub const Instruction = union(enum) {
994994 };
995995 }
996996 fn format3o(op: u2, op3: u6, opf: u9, ccr: CCR, rs1: Register, rs2: Register) Instruction {
997 const ccr_cc1 = @as(u1, @truncate(@intFromEnum(ccr) >> 1));
998 const ccr_cc0 = @as(u1, @truncate(@intFromEnum(ccr)));
997 const ccr_cc1 = @as(u1, @truncate(@backingInt(ccr) >> 1));
998 const ccr_cc0 = @as(u1, @truncate(@backingInt(ccr)));
999999 return Instruction{
10001000 .format_3o = .{
10011001 .op = op,
......@@ -1050,8 +1050,8 @@ pub const Instruction = union(enum) {
10501050 }
10511051
10521052 fn format4a(op3: u6, ccr: CCR, rs1: Register, rs2: Register, rd: Register) Instruction {
1053 const ccr_cc1 = @as(u1, @truncate(@intFromEnum(ccr) >> 1));
1054 const ccr_cc0 = @as(u1, @truncate(@intFromEnum(ccr)));
1053 const ccr_cc1 = @as(u1, @truncate(@backingInt(ccr) >> 1));
1054 const ccr_cc0 = @as(u1, @truncate(@backingInt(ccr)));
10551055 return Instruction{
10561056 .format_4a = .{
10571057 .rd = rd.enc(),
......@@ -1065,8 +1065,8 @@ pub const Instruction = union(enum) {
10651065 }
10661066
10671067 fn format4b(op3: u6, ccr: CCR, rs1: Register, imm: i11, rd: Register) Instruction {
1068 const ccr_cc1 = @as(u1, @truncate(@intFromEnum(ccr) >> 1));
1069 const ccr_cc0 = @as(u1, @truncate(@intFromEnum(ccr)));
1068 const ccr_cc1 = @as(u1, @truncate(@backingInt(ccr) >> 1));
1069 const ccr_cc0 = @as(u1, @truncate(@backingInt(ccr)));
10701070 return Instruction{
10711071 .format_4b = .{
10721072 .rd = rd.enc(),
......@@ -1080,9 +1080,9 @@ pub const Instruction = union(enum) {
10801080 }
10811081
10821082 fn format4c(op3: u6, cond: Condition, ccr: CCR, rs2: Register, rd: Register) Instruction {
1083 const ccr_cc2 = @as(u1, @truncate(@intFromEnum(ccr) >> 2));
1084 const ccr_cc1 = @as(u1, @truncate(@intFromEnum(ccr) >> 1));
1085 const ccr_cc0 = @as(u1, @truncate(@intFromEnum(ccr)));
1083 const ccr_cc2 = @as(u1, @truncate(@backingInt(ccr) >> 2));
1084 const ccr_cc1 = @as(u1, @truncate(@backingInt(ccr) >> 1));
1085 const ccr_cc0 = @as(u1, @truncate(@backingInt(ccr)));
10861086 return Instruction{
10871087 .format_4c = .{
10881088 .rd = rd.enc(),
......@@ -1097,9 +1097,9 @@ pub const Instruction = union(enum) {
10971097 }
10981098
10991099 fn format4d(op3: u6, cond: Condition, ccr: CCR, imm: i11, rd: Register) Instruction {
1100 const ccr_cc2 = @as(u1, @truncate(@intFromEnum(ccr) >> 2));
1101 const ccr_cc1 = @as(u1, @truncate(@intFromEnum(ccr) >> 1));
1102 const ccr_cc0 = @as(u1, @truncate(@intFromEnum(ccr)));
1100 const ccr_cc2 = @as(u1, @truncate(@backingInt(ccr) >> 2));
1101 const ccr_cc1 = @as(u1, @truncate(@backingInt(ccr) >> 1));
1102 const ccr_cc0 = @as(u1, @truncate(@backingInt(ccr)));
11031103 return Instruction{
11041104 .format_4d = .{
11051105 .rd = rd.enc(),
......@@ -1114,8 +1114,8 @@ pub const Instruction = union(enum) {
11141114 }
11151115
11161116 fn format4e(op3: u6, ccr: CCR, rs1: Register, rd: Register, sw_trap: u7) Instruction {
1117 const ccr_cc1 = @as(u1, @truncate(@intFromEnum(ccr) >> 1));
1118 const ccr_cc0 = @as(u1, @truncate(@intFromEnum(ccr)));
1117 const ccr_cc1 = @as(u1, @truncate(@backingInt(ccr) >> 1));
1118 const ccr_cc0 = @as(u1, @truncate(@backingInt(ccr)));
11191119 return Instruction{
11201120 .format_4e = .{
11211121 .rd = rd.enc(),
......@@ -1141,7 +1141,7 @@ pub const Instruction = union(enum) {
11411141 .rd = rd.enc(),
11421142 .op3 = op3,
11431143 .rs1 = rs1.enc(),
1144 .rcond = @intFromEnum(rcond),
1144 .rcond = @backingInt(rcond),
11451145 .opf_low = opf_low,
11461146 .rs2 = rs2.enc(),
11471147 },
......@@ -1467,8 +1467,8 @@ pub const Instruction = union(enum) {
14671467 pub fn trap(comptime s2: type, cond: ICondition, ccr: CCR, rs1: Register, rs2: s2) Instruction {
14681468 // Tcc instructions abuse the rd field to store the conditionals.
14691469 return switch (s2) {
1470 Register => format4a(0b11_1010, ccr, rs1, rs2, @as(Register, @enumFromInt(@intFromEnum(cond)))),
1471 u7 => format4e(0b11_1010, ccr, rs1, @as(Register, @enumFromInt(@intFromEnum(cond))), rs2),
1470 Register => format4a(0b11_1010, ccr, rs1, rs2, @as(Register, @fromBackingInt(@intCast(@backingInt(cond))))),
1471 u7 => format4e(0b11_1010, ccr, rs1, @as(Register, @fromBackingInt(@intCast(@backingInt(cond)))), rs2),
14721472 else => unreachable,
14731473 };
14741474 }
src/codegen/spirv/Assembler.zig+10-10
......@@ -267,7 +267,7 @@ fn processTypeInstruction(ass: *Assembler) !AsmValue {
267267 break :blk result_id;
268268 },
269269 .OpTypePointer => blk: {
270 const storage_class: StorageClass = @enumFromInt(operands[1].value);
270 const storage_class: StorageClass = @fromBackingInt(@intCast(operands[1].value));
271271 const child_type = try ass.resolveRefId(operands[2].ref_id);
272272 const result_id = cg.allocId();
273273 try section.emit(cg.gpa, .OpTypePointer, .{
......@@ -290,12 +290,12 @@ fn processTypeInstruction(ass: *Assembler) !AsmValue {
290290 try section.emit(gpa, .OpTypeImage, .{
291291 .id_result = result_id,
292292 .sampled_type = sampled_type,
293 .dim = @enumFromInt(operands[2].value),
293 .dim = @fromBackingInt(@intCast(operands[2].value)),
294294 .depth = operands[3].literal32,
295295 .arrayed = operands[4].literal32,
296296 .ms = operands[5].literal32,
297297 .sampled = operands[6].literal32,
298 .image_format = @enumFromInt(operands[7].value),
298 .image_format = @fromBackingInt(@intCast(operands[7].value)),
299299 });
300300 break :blk result_id;
301301 },
......@@ -350,7 +350,7 @@ fn processGenericInstruction(ass: *Assembler) !?AsmValue {
350350 .OpEntryPoint => unreachable,
351351 .OpExecutionMode, .OpExecutionModeId => &cg.sections.execution_modes,
352352 .OpVariable => section: {
353 const storage_class: spec.StorageClass = @enumFromInt(operands[2].value);
353 const storage_class: spec.StorageClass = @fromBackingInt(@intCast(operands[2].value));
354354 if (storage_class == .function) break :section &ass.cg.prologue;
355355 maybe_spv_decl_index = try cg.allocDecl(.global);
356356 if (!target.cpu.has(.spirv, .v1_4) and storage_class != .input and storage_class != .output) {
......@@ -404,7 +404,7 @@ fn processGenericInstruction(ass: *Assembler) !?AsmValue {
404404 }
405405
406406 const actual_word_count = section.instructions.items.len - first_word;
407 section.instructions.items[first_word] |= @as(u32, @as(u16, @intCast(actual_word_count))) << 16 | @intFromEnum(ass.inst.opcode);
407 section.instructions.items[first_word] |= @as(u32, @as(u16, @intCast(actual_word_count))) << 16 | @backingInt(ass.inst.opcode);
408408
409409 switch (ass.inst.opcode) {
410410 .OpKill,
......@@ -487,7 +487,7 @@ fn processSpecConstVector(ass: *Assembler) !?AsmValue {
487487 };
488488 try annotations.emitRaw(gpa, .OpDecorate, 3);
489489 annotations.writeOperand(Id, elem_id);
490 annotations.writeWord(@intFromEnum(spec.Decoration.spec_id));
490 annotations.writeWord(@backingInt(spec.Decoration.spec_id));
491491 annotations.writeWord(spec_id_word);
492492 }
493493
......@@ -561,7 +561,7 @@ fn parseInstruction(ass: *Assembler) !void {
561561 };
562562
563563 const inst = spec.InstructionSet.core.instructions()[index];
564 ass.inst.opcode = @enumFromInt(inst.opcode);
564 ass.inst.opcode = @fromBackingInt(@intCast(inst.opcode));
565565
566566 const expected_operands = inst.operands;
567567 // This is a loop because the result-id is not always the first operand.
......@@ -855,16 +855,16 @@ fn parseContextDependentNumber(ass: *Assembler) !void {
855855 var offset: usize = 0;
856856 while (offset < words.len) {
857857 const word_count = words[offset] >> 16;
858 const opcode: Opcode = @enumFromInt(words[offset] & 0xFFFF);
858 const opcode: Opcode = @fromBackingInt(@intCast(words[offset] & 0xFFFF));
859859 defer offset += word_count;
860860 if (word_count == 0) break;
861861 switch (opcode) {
862 .OpTypeInt => if (word_count >= 4 and @as(Id, @enumFromInt(words[offset + 1])) == result_id) {
862 .OpTypeInt => if (word_count >= 4 and @as(Id, @fromBackingInt(@intCast(words[offset + 1]))) == result_id) {
863863 const width: u16 = @intCast(words[offset + 2]);
864864 const signedness: std.lang.Signedness = if (words[offset + 3] == 0) .unsigned else .signed;
865865 return ass.parseContextDependentInt(signedness, width);
866866 },
867 .OpTypeFloat => if (word_count >= 3 and @as(Id, @enumFromInt(words[offset + 1])) == result_id) {
867 .OpTypeFloat => if (word_count >= 3 and @as(Id, @fromBackingInt(@intCast(words[offset + 1]))) == result_id) {
868868 const bits = words[offset + 2];
869869 return switch (bits) {
870870 16 => ass.parseContextDependentFloat(16),
src/codegen/spirv/CodeGen.zig+89-89
......@@ -432,11 +432,11 @@ pub fn addEntryPointDeps(
432432 const decl = cg.declPtr(decl_index);
433433 const deps = cg.decl_deps.items[decl.begin_dep..decl.end_dep];
434434
435 if (seen.isSet(@intFromEnum(decl_index))) {
435 if (seen.isSet(@backingInt(decl_index))) {
436436 return;
437437 }
438438
439 seen.set(@intFromEnum(decl_index));
439 seen.set(@backingInt(decl_index));
440440
441441 if (decl.kind == .global) {
442442 try interface.append(cg.gpa, decl.result_id);
......@@ -778,11 +778,11 @@ pub fn allocDecl(cg: *CodeGen, kind: Decl.Kind) !Decl.Index {
778778 .result_id = cg.allocId(),
779779 });
780780
781 return @as(Decl.Index, @enumFromInt(@as(u32, @intCast(cg.decls.items.len - 1))));
781 return @as(Decl.Index, @fromBackingInt(@intCast(@as(u32, @intCast(cg.decls.items.len - 1)))));
782782}
783783
784784pub fn declPtr(cg: *CodeGen, index: Decl.Index) *Decl {
785 return &cg.decls.items[@intFromEnum(index)];
785 return &cg.decls.items[@backingInt(index)];
786786}
787787
788788pub fn debugName(cg: *CodeGen, target: Id, name: []const u8) !void {
......@@ -1054,7 +1054,7 @@ pub fn genNav(cg: *CodeGen, do_codegen: bool) Error!void {
10541054 .id_result_type = ptr_ty_id,
10551055 .id_result = result_id,
10561056 .set = try cg.importInstructionSet(.zig),
1057 .instruction = .{ .inst = @intFromEnum(spec.Zig.InvocationGlobal) },
1057 .instruction = .{ .inst = @backingInt(spec.Zig.InvocationGlobal) },
10581058 .id_ref_4 = &.{initializer_id},
10591059 });
10601060 },
......@@ -1269,14 +1269,14 @@ fn resolveUav(cg: *CodeGen, val: InternPool.Index) !Id {
12691269 try cg.sections.functions.append(gpa, cg.prologue);
12701270 try cg.sections.functions.append(gpa, cg.body);
12711271
1272 try cg.debugNameFmt(initializer_id, "initializer of __anon_{d}", .{@intFromEnum(val)});
1272 try cg.debugNameFmt(initializer_id, "initializer of __anon_{d}", .{@backingInt(val)});
12731273
12741274 const fn_decl_ptr_ty_id = try cg.ptrType(ty_id, .function);
12751275 try cg.sections.globals.emit(gpa, .OpExtInst, .{
12761276 .id_result_type = fn_decl_ptr_ty_id,
12771277 .id_result = result_id,
12781278 .set = try cg.importInstructionSet(.zig),
1279 .instruction = .{ .inst = @intFromEnum(spec.Zig.InvocationGlobal) },
1279 .instruction = .{ .inst = @backingInt(spec.Zig.InvocationGlobal) },
12801280 .id_ref_4 = &.{initializer_id},
12811281 });
12821282 }
......@@ -2760,7 +2760,7 @@ const Temporary = struct {
27602760 // If the value is a scalar, then this is a no-op.
27612761 if (!temp.ty.isVector(zcu)) {
27622762 return switch (temp.value) {
2763 .singleton => |id| .{ .base = @intFromEnum(id), .len = 1 },
2763 .singleton => |id| .{ .base = @backingInt(id), .len = 1 },
27642764 .exploded_vector => |range| range,
27652765 };
27662766 }
......@@ -3367,7 +3367,7 @@ const CompositeInt = struct {
33673367 .id_result_type = limb_ty_id,
33683368 .id_result = hi,
33693369 .set = set,
3370 .instruction = .{ .inst = @intFromEnum(spec.OpenClOpcode.u_mul_hi) },
3370 .instruction = .{ .inst = @backingInt(spec.OpenClOpcode.u_mul_hi) },
33713371 .id_ref_4 = &.{ ci.limbs[i], other.limbs[j] },
33723372 });
33733373 },
......@@ -3805,7 +3805,7 @@ const UnaryOp = enum {
38053805
38063806 pub fn extInstOpcode(op: UnaryOp, target: *const std.Target) ?u32 {
38073807 return switch (target.os.tag) {
3808 .opencl => @intFromEnum(@as(spec.OpenClOpcode, switch (op) {
3808 .opencl => @backingInt(@as(spec.OpenClOpcode, switch (op) {
38093809 .i_abs => .s_abs,
38103810 .f_abs => .fabs,
38113811 .clz => .clz,
......@@ -3828,7 +3828,7 @@ const UnaryOp = enum {
38283828 // Note: We'll need to check these for floating point accuracy
38293829 // Vulkan does not put tight requirements on these, for correction
38303830 // we might want to emulate them at some point.
3831 .vulkan, .opengl => @intFromEnum(@as(spec.GlslOpcode, switch (op) {
3831 .vulkan, .opengl => @backingInt(@as(spec.GlslOpcode, switch (op) {
38323832 .i_abs => .SAbs,
38333833 .f_abs => .FAbs,
38343834 .floor => .Floor,
......@@ -3970,7 +3970,7 @@ fn buildWideMul(
39703970 .id_result_type = arith_op_ty_id,
39713971 .id_result = overflow_results.at(i),
39723972 .set = set,
3973 .instruction = .{ .inst = @intFromEnum(overflow_inst) },
3973 .instruction = .{ .inst = @backingInt(overflow_inst) },
39743974 .id_ref_4 = &.{ lhs_op.at(i), rhs_op.at(i) },
39753975 });
39763976 }
......@@ -4355,7 +4355,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) Error!void {
43554355 return;
43564356
43574357 const air_tags = cg.air.instructions.items(.tag);
4358 const maybe_result_id: ?Id = switch (air_tags[@intFromEnum(inst)]) {
4358 const maybe_result_id: ?Id = switch (air_tags[@backingInt(inst)]) {
43594359 // zig fmt: off
43604360 .add, .add_wrap, .add_optimized => try cg.airArithOp(inst, .OpFAdd, .OpIAdd, .OpIAdd),
43614361 .sub, .sub_wrap, .sub_optimized => try cg.airArithOp(inst, .OpFSub, .OpISub, .OpISub),
......@@ -4535,7 +4535,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) Error!void {
45354535}
45364536
45374537fn airBinOpSimple(cg: *CodeGen, inst: Air.Inst.Index, op: Opcode) !?Id {
4538 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4538 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
45394539 const lhs = try cg.temporary(bin_op.lhs);
45404540 const rhs = try cg.temporary(bin_op.rhs);
45414541
......@@ -4546,7 +4546,7 @@ fn airBinOpSimple(cg: *CodeGen, inst: Air.Inst.Index, op: Opcode) !?Id {
45464546const BitwiseOp = enum { bit_and, bit_or, xor };
45474547
45484548fn airBitwiseOp(cg: *CodeGen, inst: Air.Inst.Index, op: BitwiseOp) !?Id {
4549 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4549 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
45504550 const lhs = try cg.temporary(bin_op.lhs);
45514551 const rhs = try cg.temporary(bin_op.rhs);
45524552 const info = cg.arithmeticTypeInfo(lhs.ty);
......@@ -4587,7 +4587,7 @@ fn airBitwiseOp(cg: *CodeGen, inst: Air.Inst.Index, op: BitwiseOp) !?Id {
45874587
45884588fn airShift(cg: *CodeGen, inst: Air.Inst.Index, unsigned: Opcode, signed: Opcode) !?Id {
45894589 const zcu = cg.zcu;
4590 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4590 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
45914591
45924592 const base = try cg.temporary(bin_op.lhs);
45934593 const shift = try cg.temporary(bin_op.rhs);
......@@ -4661,7 +4661,7 @@ const MinMax = enum {
46614661 info: ArithmeticTypeInfo,
46624662 ) u32 {
46634663 return switch (target.os.tag) {
4664 .opencl => @intFromEnum(@as(spec.OpenClOpcode, switch (info.class) {
4664 .opencl => @backingInt(@as(spec.OpenClOpcode, switch (info.class) {
46654665 .float => switch (op) {
46664666 .min => .fmin,
46674667 .max => .fmax,
......@@ -4678,7 +4678,7 @@ const MinMax = enum {
46784678 },
46794679 .bool => unreachable,
46804680 })),
4681 .vulkan, .opengl => @intFromEnum(@as(spec.GlslOpcode, switch (info.class) {
4681 .vulkan, .opengl => @backingInt(@as(spec.GlslOpcode, switch (info.class) {
46824682 .float => switch (op) {
46834683 .min => .FMin,
46844684 .max => .FMax,
......@@ -4701,7 +4701,7 @@ const MinMax = enum {
47014701};
47024702
47034703fn airMinMax(cg: *CodeGen, inst: Air.Inst.Index, op: MinMax) !?Id {
4704 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4704 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
47054705
47064706 const lhs = try cg.temporary(bin_op.lhs);
47074707 const rhs = try cg.temporary(bin_op.rhs);
......@@ -4781,7 +4781,7 @@ fn normalize(cg: *CodeGen, value: Temporary, info: ArithmeticTypeInfo) !Temporar
47814781}
47824782
47834783fn airDivFloor(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
4784 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4784 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
47854785
47864786 const lhs = try cg.temporary(bin_op.lhs);
47874787 const rhs = try cg.temporary(bin_op.rhs);
......@@ -4822,7 +4822,7 @@ fn airDivFloor(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
48224822}
48234823
48244824fn airDivTrunc(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
4825 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4825 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
48264826 const lhs = try cg.temporary(bin_op.lhs);
48274827 const rhs = try cg.temporary(bin_op.rhs);
48284828 const info = cg.arithmeticTypeInfo(lhs.ty);
......@@ -4848,7 +4848,7 @@ fn airDivTrunc(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
48484848}
48494849
48504850fn airUnOpSimple(cg: *CodeGen, inst: Air.Inst.Index, op: UnaryOp) !?Id {
4851 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
4851 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
48524852 const operand = try cg.temporary(un_op);
48534853 const result = try cg.buildUnary(op, operand);
48544854 return try result.materialize(cg);
......@@ -4861,7 +4861,7 @@ fn airArithOp(
48614861 comptime sop: Opcode,
48624862 comptime uop: Opcode,
48634863) !?Id {
4864 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
4864 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
48654865 const lhs = try cg.temporary(bin_op.lhs);
48664866 const rhs = try cg.temporary(bin_op.rhs);
48674867 const info = cg.arithmeticTypeInfo(lhs.ty);
......@@ -4898,7 +4898,7 @@ fn airArithOp(
48984898fn airAbs(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
48994899 const zcu = cg.zcu;
49004900 const target = zcu.getTarget();
4901 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
4901 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
49024902 const value = try cg.temporary(ty_op.operand);
49034903 // Note: operand_ty may be signed, while ty is always unsigned.
49044904 const result_ty = cg.typeOfIndex(inst);
......@@ -4970,7 +4970,7 @@ fn airAddSubOverflow(
49704970
49714971 _ = s_opcode;
49724972
4973 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
4973 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
49744974 const extra = cg.air.extraData(Air.Bin, ty_pl.payload).data;
49754975 const lhs = try cg.temporary(extra.lhs);
49764976 const rhs = try cg.temporary(extra.rhs);
......@@ -5087,7 +5087,7 @@ fn airAddSubOverflow(
50875087fn airMulOverflow(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
50885088 const pt = cg.pt;
50895089 const gpa = cg.gpa;
5090 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5090 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
50915091 const extra = cg.air.extraData(Air.Bin, ty_pl.payload).data;
50925092 const lhs = try cg.temporary(extra.lhs);
50935093 const rhs = try cg.temporary(extra.rhs);
......@@ -5416,7 +5416,7 @@ fn airMulOverflow(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
54165416fn airShlOverflow(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
54175417 const zcu = cg.zcu;
54185418
5419 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5419 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
54205420 const extra = cg.air.extraData(Air.Bin, ty_pl.payload).data;
54215421
54225422 const base = try cg.temporary(extra.lhs);
......@@ -5451,7 +5451,7 @@ fn airShlOverflow(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
54515451}
54525452
54535453fn airMulAdd(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
5454 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
5454 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
54555455 const extra = cg.air.extraData(Air.Bin, pl_op.payload).data;
54565456
54575457 const a = try cg.temporary(extra.lhs);
......@@ -5479,10 +5479,10 @@ fn airMulAdd(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
54795479
54805480 const set = try cg.importExtendedSet();
54815481 const opcode: u32 = switch (target.os.tag) {
5482 .opencl => @intFromEnum(spec.OpenClOpcode.fma),
5482 .opencl => @backingInt(spec.OpenClOpcode.fma),
54835483 // NOTE: Vulkan's FMA does not meet Zig's nor OpenCL's precision guarantees and needs
54845484 // to be emulated.
5485 .vulkan, .opengl => @intFromEnum(spec.GlslOpcode.Fma),
5485 .vulkan, .opengl => @backingInt(spec.GlslOpcode.Fma),
54865486 else => unreachable,
54875487 };
54885488
......@@ -5504,7 +5504,7 @@ fn airClzCtz(cg: *CodeGen, inst: Air.Inst.Index, op: UnaryOp) !?Id {
55045504 if (cg.liveness.isUnused(inst)) return null;
55055505
55065506 const zcu = cg.zcu;
5507 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5507 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
55085508 const operand = try cg.temporary(ty_op.operand);
55095509
55105510 const scalar_result_ty = cg.typeOfIndex(inst).scalarType(zcu);
......@@ -5526,7 +5526,7 @@ fn airClzCtz(cg: *CodeGen, inst: Air.Inst.Index, op: UnaryOp) !?Id {
55265526}
55275527
55285528fn airSelect(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
5529 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
5529 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
55305530 const extra = cg.air.extraData(Air.Bin, pl_op.payload).data;
55315531 const pred = try cg.temporary(pl_op.operand);
55325532 const a = try cg.temporary(extra.lhs);
......@@ -5537,7 +5537,7 @@ fn airSelect(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
55375537}
55385538
55395539fn airSplat(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
5540 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5540 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
55415541
55425542 const operand_id = try cg.resolve(ty_op.operand);
55435543 const result_ty = cg.typeOfIndex(inst);
......@@ -5547,7 +5547,7 @@ fn airSplat(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
55475547
55485548fn airReduce(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
55495549 const zcu = cg.zcu;
5550 const reduce = cg.air.instructions.items(.data)[@intFromEnum(inst)].reduce;
5550 const reduce = cg.air.instructions.items(.data)[@backingInt(inst)].reduce;
55515551 const operand = try cg.resolve(reduce.operand);
55525552 const operand_ty = cg.typeOf(reduce.operand);
55535553 const scalar_ty = operand_ty.scalarType(zcu);
......@@ -5763,7 +5763,7 @@ fn ptrAdd(cg: *CodeGen, result_ty: Type, ptr_ty: Type, ptr_id: Id, offset_id: Id
57635763}
57645764
57655765fn airPtrAdd(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
5766 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5766 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
57675767 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
57685768 const ptr_id = try cg.resolve(bin_op.lhs);
57695769 const offset_id = try cg.resolve(bin_op.rhs);
......@@ -5774,7 +5774,7 @@ fn airPtrAdd(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
57745774}
57755775
57765776fn airPtrSub(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
5777 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5777 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
57785778 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
57795779 const ptr_id = try cg.resolve(bin_op.lhs);
57805780 const ptr_ty = cg.typeOf(bin_op.lhs);
......@@ -5979,7 +5979,7 @@ fn airCmp(
59795979 inst: Air.Inst.Index,
59805980 comptime op: std.math.CompareOperator,
59815981) !?Id {
5982 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
5982 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
59835983 const lhs = try cg.temporary(bin_op.lhs);
59845984 const rhs = try cg.temporary(bin_op.rhs);
59855985
......@@ -5988,7 +5988,7 @@ fn airCmp(
59885988}
59895989
59905990fn airVectorCmp(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
5991 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5991 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
59925992 const vec_cmp = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data;
59935993 const lhs = try cg.temporary(vec_cmp.lhs);
59945994 const rhs = try cg.temporary(vec_cmp.rhs);
......@@ -6126,7 +6126,7 @@ fn bitCast(
61266126}
61276127
61286128fn airBitCast(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
6129 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6129 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
61306130 const operand_ty = cg.typeOf(ty_op.operand);
61316131 const result_ty = cg.typeOfIndex(inst);
61326132 if (operand_ty.toIntern() == .bool_type) {
......@@ -6145,7 +6145,7 @@ fn airBitCast(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
61456145}
61466146
61476147fn airIntCast(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
6148 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6148 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
61496149 const src = try cg.temporary(ty_op.operand);
61506150 const dst_ty = cg.typeOfIndex(inst);
61516151
......@@ -6391,7 +6391,7 @@ fn intFromPtr(cg: *CodeGen, operand_id: Id) !Id {
63916391
63926392fn airFloatFromInt(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
63936393 const gpa = cg.gpa;
6394 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6394 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
63956395 const operand_ty = cg.typeOf(ty_op.operand);
63966396 const operand_id = try cg.resolve(ty_op.operand);
63976397 const result_ty = cg.typeOfIndex(inst);
......@@ -6415,7 +6415,7 @@ fn airFloatFromInt(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
64156415
64166416fn airIntFromFloat(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
64176417 const gpa = cg.gpa;
6418 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6418 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
64196419 const operand_id = try cg.resolve(ty_op.operand);
64206420 const result_ty = cg.typeOfIndex(inst);
64216421 const result_info = cg.arithmeticTypeInfo(result_ty);
......@@ -6437,7 +6437,7 @@ fn airIntFromFloat(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
64376437}
64386438
64396439fn airFloatCast(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
6440 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6440 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
64416441 const operand = try cg.temporary(ty_op.operand);
64426442 const dest_ty = cg.typeOfIndex(inst);
64436443 const result = try cg.buildConvert(dest_ty, operand);
......@@ -6445,7 +6445,7 @@ fn airFloatCast(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
64456445}
64466446
64476447fn airNot(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
6448 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6448 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
64496449 const operand = try cg.temporary(ty_op.operand);
64506450 const result_ty = cg.typeOfIndex(inst);
64516451 const info = cg.arithmeticTypeInfo(result_ty);
......@@ -6473,7 +6473,7 @@ fn airNot(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
64736473
64746474fn airArrayToSlice(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
64756475 const zcu = cg.zcu;
6476 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6476 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
64776477 const array_ptr_ty = cg.typeOf(ty_op.operand);
64786478 const array_ty = array_ptr_ty.childType(zcu);
64796479 const slice_ty = cg.typeOfIndex(inst);
......@@ -6496,7 +6496,7 @@ fn airArrayToSlice(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
64966496}
64976497
64986498fn airSlice(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
6499 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6499 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
65006500 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
65016501 const ptr_id = try cg.resolve(bin_op.lhs);
65026502 const len_id = try cg.resolve(bin_op.rhs);
......@@ -6511,7 +6511,7 @@ fn airAggregateInit(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
65116511 const zcu = cg.zcu;
65126512 const ip = &zcu.intern_pool;
65136513 const target = cg.zcu.getTarget();
6514 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6514 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
65156515 const result_ty = cg.typeOfIndex(inst);
65166516 const len: usize = @intCast(result_ty.arrayLen(zcu));
65176517 const elements: []const Air.Inst.Ref = @ptrCast(cg.air.extra.items[ty_pl.payload..][0..len]);
......@@ -6645,7 +6645,7 @@ fn sliceOrArrayPtr(cg: *CodeGen, operand_id: Id, ty: Type) !Id {
66456645}
66466646
66476647fn airMemcpy(cg: *CodeGen, inst: Air.Inst.Index) !void {
6648 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6648 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
66496649 const dest_slice = try cg.resolve(bin_op.lhs);
66506650 const src_slice = try cg.resolve(bin_op.rhs);
66516651 const dest_ty = cg.typeOf(bin_op.lhs);
......@@ -6675,7 +6675,7 @@ fn airMemmove(cg: *CodeGen, inst: Air.Inst.Index) !void {
66756675}
66766676
66776677fn airSliceField(cg: *CodeGen, inst: Air.Inst.Index, field: u32) !?Id {
6678 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6678 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
66796679 const field_ty = cg.typeOfIndex(inst);
66806680 const operand_id = try cg.resolve(ty_op.operand);
66816681 return try cg.extractField(field_ty, operand_id, field);
......@@ -6683,7 +6683,7 @@ fn airSliceField(cg: *CodeGen, inst: Air.Inst.Index, field: u32) !?Id {
66836683
66846684fn airSpirvRuntimeArrayLen(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
66856685 const gpa = cg.gpa;
6686 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6686 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
66876687 const extra = cg.air.extraData(Air.StructField, ty_pl.payload).data;
66886688 const struct_ptr_id = try cg.resolve(extra.struct_operand);
66896689 const u32_ty_id = try cg.intType(.unsigned, 32);
......@@ -6699,7 +6699,7 @@ fn airSpirvRuntimeArrayLen(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
66996699
67006700fn airSliceElemPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
67016701 const zcu = cg.zcu;
6702 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6702 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
67036703 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
67046704 const slice_ty = cg.typeOf(bin_op.lhs);
67056705 if (!slice_ty.isVolatilePtr(zcu) and cg.liveness.isUnused(inst)) return null;
......@@ -6716,7 +6716,7 @@ fn airSliceElemPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
67166716
67176717fn airSliceElemVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
67186718 const zcu = cg.zcu;
6719 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6719 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
67206720 const slice_ty = cg.typeOf(bin_op.lhs);
67216721 if (!slice_ty.isVolatilePtr(zcu) and cg.liveness.isUnused(inst)) return null;
67226722
......@@ -6749,7 +6749,7 @@ fn ptrElemPtr(cg: *CodeGen, ptr_ty: Type, ptr_id: Id, index_id: Id) !Id {
67496749
67506750fn airPtrElemPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
67516751 const zcu = cg.zcu;
6752 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6752 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
67536753 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
67546754 const src_ptr_ty = cg.typeOf(bin_op.lhs);
67556755 const elem_ty = src_ptr_ty.childType(zcu);
......@@ -6764,7 +6764,7 @@ fn airPtrElemPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
67646764fn airArrayElemVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
67656765 const gpa = cg.gpa;
67666766 const zcu = cg.zcu;
6767 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6767 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
67686768 const array_ty = cg.typeOf(bin_op.lhs);
67696769 const elem_ty = array_ty.childType(zcu);
67706770 const array_id = try cg.resolve(bin_op.lhs);
......@@ -6815,7 +6815,7 @@ fn airArrayElemVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
68156815
68166816fn airPtrElemVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
68176817 const zcu = cg.zcu;
6818 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6818 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
68196819 const ptr_ty = cg.typeOf(bin_op.lhs);
68206820 const elem_ty = cg.typeOfIndex(inst);
68216821 const ptr_id = try cg.resolve(bin_op.lhs);
......@@ -6826,7 +6826,7 @@ fn airPtrElemVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
68266826
68276827fn airSetUnionTag(cg: *CodeGen, inst: Air.Inst.Index) !void {
68286828 const zcu = cg.zcu;
6829 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6829 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
68306830 const un_ptr_ty = cg.typeOf(bin_op.lhs);
68316831 const un_ty = un_ptr_ty.childType(zcu);
68326832 const layout = cg.unionLayout(un_ty);
......@@ -6849,7 +6849,7 @@ fn airSetUnionTag(cg: *CodeGen, inst: Air.Inst.Index) !void {
68496849}
68506850
68516851fn airGetUnionTag(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
6852 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6852 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
68536853 const un_ty = cg.typeOf(ty_op.operand);
68546854
68556855 const zcu = cg.zcu;
......@@ -6937,7 +6937,7 @@ fn unionInit(
69376937fn airUnionInit(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
69386938 const zcu = cg.zcu;
69396939 const ip = &zcu.intern_pool;
6940 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6940 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
69416941 const extra = cg.air.extraData(Air.UnionInit, ty_pl.payload).data;
69426942 const ty = cg.typeOfIndex(inst);
69436943
......@@ -6953,7 +6953,7 @@ fn airUnionInit(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
69536953fn airAggFieldVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
69546954 const pt = cg.pt;
69556955 const zcu = cg.zcu;
6956 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6956 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
69576957 const struct_field = cg.air.extraData(Air.StructField, ty_pl.payload).data;
69586958
69596959 const object_ty = cg.typeOf(struct_field.struct_operand);
......@@ -7058,7 +7058,7 @@ fn airAggFieldVal(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
70587058fn airFieldParentPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
70597059 const zcu = cg.zcu;
70607060 const target = zcu.getTarget();
7061 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
7061 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
70627062 const extra = cg.air.extraData(Air.FieldParentPtr, ty_pl.payload).data;
70637063
70647064 const parent_ptr_ty = ty_pl.ty.toType();
......@@ -7190,7 +7190,7 @@ fn structFieldPtr(
71907190}
71917191
71927192fn airStructFieldPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
7193 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
7193 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
71947194 const struct_field = cg.air.extraData(Air.StructField, ty_pl.payload).data;
71957195 const struct_ptr = try cg.resolve(struct_field.struct_operand);
71967196 const struct_ptr_ty = cg.typeOf(struct_field.struct_operand);
......@@ -7199,7 +7199,7 @@ fn airStructFieldPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
71997199}
72007200
72017201fn airStructFieldPtrIndex(cg: *CodeGen, inst: Air.Inst.Index, field_index: u32) !?Id {
7202 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7202 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
72037203 const struct_ptr = try cg.resolve(ty_op.operand);
72047204 const struct_ptr_ty = cg.typeOf(ty_op.operand);
72057205 const result_ptr_ty = cg.typeOfIndex(inst);
......@@ -7437,7 +7437,7 @@ fn lowerBlock(cg: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index)
74377437 assert(cg.block_stack.items.len > 0);
74387438
74397439 // Check if the target of the branch was this current block.
7440 const this_block = try cg.constInt(.u32, @intFromEnum(inst));
7440 const this_block = try cg.constInt(.u32, @backingInt(inst));
74417441 const jump_to_this_block_id = cg.allocId();
74427442 const bool_ty_id = try cg.resolveType(.bool, .direct);
74437443 try cg.body.emit(gpa, .OpIEqual, .{
......@@ -7506,7 +7506,7 @@ fn lowerBlock(cg: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index)
75067506
75077507fn airBr(cg: *CodeGen, inst: Air.Inst.Index) !void {
75087508 const zcu = cg.zcu;
7509 const br = cg.air.instructions.items(.data)[@intFromEnum(inst)].br;
7509 const br = cg.air.instructions.items(.data)[@backingInt(inst)].br;
75107510 const operand_ty = cg.typeOf(br.operand);
75117511
75127512 if (operand_ty.hasRuntimeBits(zcu)) {
......@@ -7515,7 +7515,7 @@ fn airBr(cg: *CodeGen, inst: Air.Inst.Index) !void {
75157515 try cg.store(operand_ty, block_result_var_id, operand_id, .{});
75167516 }
75177517
7518 const next_block = try cg.constInt(.u32, @intFromEnum(br.block_inst));
7518 const next_block = try cg.constInt(.u32, @backingInt(br.block_inst));
75197519 try cg.structuredBreak(next_block);
75207520}
75217521
......@@ -7611,7 +7611,7 @@ fn airLoop(cg: *CodeGen, inst: Air.Inst.Index) !void {
76117611fn airLoad(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
76127612 const zcu = cg.zcu;
76137613 const pt = cg.pt;
7614 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7614 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
76157615 const ptr_ty = cg.typeOf(ty_op.operand);
76167616 const ptr_info = ptr_ty.ptrInfo(zcu);
76177617 const elem_ty = cg.typeOfIndex(inst);
......@@ -7655,7 +7655,7 @@ fn airLoad(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
76557655 try cg.resolveType(elem_ty, .indirect),
76567656 cg.storageClass(ptr_info.flags.address_space),
76577657 );
7658 break :ptr_id try cg.accessChain(elem_ptr_ty_id, operand_ptr_id, &.{@intFromEnum(index)});
7658 break :ptr_id try cg.accessChain(elem_ptr_ty_id, operand_ptr_id, &.{@backingInt(index)});
76597659 },
76607660 };
76617661 return try cg.load(elem_ty, ptr_id, .{
......@@ -7667,7 +7667,7 @@ fn airLoad(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
76677667fn airStore(cg: *CodeGen, inst: Air.Inst.Index) !void {
76687668 const zcu = cg.zcu;
76697669 const pt = cg.pt;
7670 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
7670 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
76717671 const ptr_ty = cg.typeOf(bin_op.lhs);
76727672 const ptr_info = ptr_ty.ptrInfo(zcu);
76737673 const elem_ty: Type = .fromInterned(ptr_info.child);
......@@ -7729,7 +7729,7 @@ fn airStore(cg: *CodeGen, inst: Air.Inst.Index) !void {
77297729 try cg.resolveType(elem_ty, .indirect),
77307730 cg.storageClass(ptr_info.flags.address_space),
77317731 );
7732 break :ptr_id try cg.accessChain(elem_ptr_ty_id, operand_ptr_id, &.{@intFromEnum(index)});
7732 break :ptr_id try cg.accessChain(elem_ptr_ty_id, operand_ptr_id, &.{@backingInt(index)});
77337733 },
77347734 };
77357735
......@@ -7742,7 +7742,7 @@ fn airStore(cg: *CodeGen, inst: Air.Inst.Index) !void {
77427742fn airRet(cg: *CodeGen, inst: Air.Inst.Index) !void {
77437743 const gpa = cg.gpa;
77447744 const zcu = cg.zcu;
7745 const operand = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
7745 const operand = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
77467746 const ret_ty = cg.typeOf(operand);
77477747 if (!ret_ty.hasRuntimeBits(zcu)) {
77487748 const fn_info = zcu.typeToFunc(zcu.navValue(cg.owner_nav).typeOf(zcu)).?;
......@@ -7764,7 +7764,7 @@ fn airRet(cg: *CodeGen, inst: Air.Inst.Index) !void {
77647764fn airRetLoad(cg: *CodeGen, inst: Air.Inst.Index) !void {
77657765 const gpa = cg.gpa;
77667766 const zcu = cg.zcu;
7767 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
7767 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
77687768 const ptr_ty = cg.typeOf(un_op);
77697769 const ret_ty = ptr_ty.childType(zcu);
77707770
......@@ -7856,7 +7856,7 @@ fn airTry(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
78567856
78577857fn airErrUnionErr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
78587858 const zcu = cg.zcu;
7859 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7859 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
78607860 const operand_id = try cg.resolve(ty_op.operand);
78617861 const err_union_ty = cg.typeOf(ty_op.operand);
78627862 const err_ty_id = try cg.resolveType(.anyerror, .direct);
......@@ -7878,7 +7878,7 @@ fn airErrUnionErr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
78787878}
78797879
78807880fn airErrUnionPayload(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
7881 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7881 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
78827882 const operand_id = try cg.resolve(ty_op.operand);
78837883 const payload_ty = cg.typeOfIndex(inst);
78847884 const eu_layout = cg.errorUnionLayout(payload_ty);
......@@ -7892,7 +7892,7 @@ fn airErrUnionPayload(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
78927892
78937893fn airWrapErrUnionErr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
78947894 const zcu = cg.zcu;
7895 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7895 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
78967896 const err_union_ty = cg.typeOfIndex(inst);
78977897 const payload_ty = err_union_ty.errorUnionPayload(zcu);
78987898 const operand_id = try cg.resolve(ty_op.operand);
......@@ -7917,7 +7917,7 @@ fn airWrapErrUnionErr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
79177917}
79187918
79197919fn airWrapErrUnionPayload(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
7920 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7920 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
79217921 const err_union_ty = cg.typeOfIndex(inst);
79227922 const operand_id = try cg.resolve(ty_op.operand);
79237923 const payload_ty = cg.typeOf(ty_op.operand);
......@@ -7941,7 +7941,7 @@ fn airWrapErrUnionPayload(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
79417941
79427942fn airIsNull(cg: *CodeGen, inst: Air.Inst.Index, is_pointer: bool, pred: enum { is_null, is_non_null }) !?Id {
79437943 const zcu = cg.zcu;
7944 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
7944 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
79457945 const operand_id = try cg.resolve(un_op);
79467946 const operand_ty = cg.typeOf(un_op);
79477947 const optional_ty = if (is_pointer) operand_ty.childType(zcu) else operand_ty;
......@@ -8018,7 +8018,7 @@ fn airIsNull(cg: *CodeGen, inst: Air.Inst.Index, is_pointer: bool, pred: enum {
80188018
80198019fn airIsErr(cg: *CodeGen, inst: Air.Inst.Index, pred: enum { is_err, is_non_err }) !?Id {
80208020 const zcu = cg.zcu;
8021 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
8021 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
80228022 const operand_id = try cg.resolve(un_op);
80238023 const err_union_ty = cg.typeOf(un_op);
80248024
......@@ -8056,7 +8056,7 @@ fn airIsErr(cg: *CodeGen, inst: Air.Inst.Index, pred: enum { is_err, is_non_err
80568056
80578057fn airUnwrapOptional(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
80588058 const zcu = cg.zcu;
8059 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
8059 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
80608060 const operand_id = try cg.resolve(ty_op.operand);
80618061 const optional_ty = cg.typeOf(ty_op.operand);
80628062 const payload_ty = cg.typeOfIndex(inst);
......@@ -8072,7 +8072,7 @@ fn airUnwrapOptional(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
80728072
80738073fn airUnwrapOptionalPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
80748074 const zcu = cg.zcu;
8075 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
8075 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
80768076 const operand_id = try cg.resolve(ty_op.operand);
80778077 const operand_ty = cg.typeOf(ty_op.operand);
80788078 const optional_ty = operand_ty.childType(zcu);
......@@ -8096,7 +8096,7 @@ fn airUnwrapOptionalPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
80968096
80978097fn airSetOptionalPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
80988098 const zcu = cg.zcu;
8099 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
8099 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
81008100
81018101 const ptr_ty = cg.typeOf(ty_op.operand);
81028102 const ptr_id = try cg.resolve(ty_op.operand);
......@@ -8129,7 +8129,7 @@ fn airSetOptionalPtr(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
81298129
81308130fn airWrapOptional(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
81318131 const zcu = cg.zcu;
8132 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
8132 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
81338133 const payload_ty = cg.typeOf(ty_op.operand);
81348134
81358135 assert(payload_ty.hasRuntimeBits(zcu));
......@@ -8424,7 +8424,7 @@ fn airLoopSwitchBr(cg: *CodeGen, inst: Air.Inst.Index) !void {
84248424 // switch_dispatch signals "continue the loop" by using this sentinel as the
84258425 // next_block in structuredBreak. at switch_merge, a phi + comparison distinguishes
84268426 // dispatch (continue) from break (exit)
8427 const dispatch_sentinel = try cg.constInt(.u32, @intFromEnum(inst));
8427 const dispatch_sentinel = try cg.constInt(.u32, @backingInt(inst));
84288428
84298429 try cg.loop_switches.putNoClobber(gpa, inst, .{
84308430 .cond_var = cond_var,
......@@ -8627,7 +8627,7 @@ fn airLoopSwitchBr(cg: *CodeGen, inst: Air.Inst.Index) !void {
86278627}
86288628
86298629fn airSwitchDispatch(cg: *CodeGen, inst: Air.Inst.Index) !void {
8630 const br = cg.air.instructions.items(.data)[@intFromEnum(inst)].br;
8630 const br = cg.air.instructions.items(.data)[@backingInt(inst)].br;
86318631 const loop_switch = cg.loop_switches.get(br.block_inst).?;
86328632 const cond_ty = cg.typeOf(br.operand);
86338633 const operand = try cg.resolve(br.operand);
......@@ -8643,7 +8643,7 @@ fn airUnreach(cg: *CodeGen) !void {
86438643
86448644fn airDbgStmt(cg: *CodeGen, inst: Air.Inst.Index) !void {
86458645 const zcu = cg.zcu;
8646 const dbg_stmt = cg.air.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt;
8646 const dbg_stmt = cg.air.instructions.items(.data)[@backingInt(inst)].dbg_stmt;
86478647 const path = zcu.navFileScope(cg.owner_nav).sub_file_path;
86488648
86498649 if (zcu.comp.config.root_strip) return;
......@@ -8670,12 +8670,12 @@ fn airDbgInlineBlock(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
86708670}
86718671
86728672fn airDbgVar(cg: *CodeGen, inst: Air.Inst.Index) !void {
8673 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
8673 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
86748674 const target_id = switch (try cg.resolvePtr(pl_op.operand)) {
86758675 .tracked => return,
86768676 .id => |id| id,
86778677 };
8678 const name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
8678 const name: Air.NullTerminatedString = @fromBackingInt(@intCast(pl_op.payload));
86798679 try cg.debugName(target_id, name.toSlice(cg.air));
86808680}
86818681
......@@ -8944,7 +8944,7 @@ fn builtin3D(
89448944
89458945fn airWorkItemId(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
89468946 if (cg.liveness.isUnused(inst)) return null;
8947 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
8947 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
89488948 const dimension = pl_op.payload;
89498949 return try cg.builtin3D(.u32, .local_invocation_id, dimension, 0);
89508950}
......@@ -8952,14 +8952,14 @@ fn airWorkItemId(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
89528952// TODO: this must be an OpConstant/OpSpec but even then the driver crashes.
89538953fn airWorkGroupSize(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
89548954 if (cg.liveness.isUnused(inst)) return null;
8955 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
8955 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
89568956 const dimension = pl_op.payload;
89578957 return try cg.builtin3D(.u32, .workgroup_size, dimension, 0);
89588958}
89598959
89608960fn airWorkGroupId(cg: *CodeGen, inst: Air.Inst.Index) !?Id {
89618961 if (cg.liveness.isUnused(inst)) return null;
8962 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
8962 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
89638963 const dimension = pl_op.payload;
89648964 return try cg.builtin3D(.u32, .workgroup_id, dimension, 0);
89658965}
src/codegen/spirv/Section.zig+9-9
......@@ -50,7 +50,7 @@ pub fn emitRaw(
5050) !void {
5151 const word_count = 1 + operand_words;
5252 try section.instructions.ensureUnusedCapacity(allocator, word_count);
53 section.writeWord((@as(Word, @intCast(word_count << 16))) | @intFromEnum(opcode));
53 section.writeWord((@as(Word, @intCast(word_count << 16))) | @backingInt(opcode));
5454}
5555
5656/// Write an entire instruction, including all operands
......@@ -70,7 +70,7 @@ pub fn emitAssumeCapacity(
7070 operands: opcode.Operands(),
7171) !void {
7272 const word_count = instructionSize(opcode, operands);
73 section.writeWord(@as(Word, @intCast(word_count << 16)) | @intFromEnum(opcode));
73 section.writeWord(@as(Word, @intCast(word_count << 16)) | @backingInt(opcode));
7474 section.writeOperands(opcode.Operands(), operands);
7575}
7676
......@@ -82,7 +82,7 @@ pub fn emit(
8282) !void {
8383 const word_count = instructionSize(opcode, operands);
8484 try section.instructions.ensureUnusedCapacity(allocator, word_count);
85 section.writeWord(@as(Word, @intCast(word_count << 16)) | @intFromEnum(opcode));
85 section.writeWord(@as(Word, @intCast(word_count << 16)) | @backingInt(opcode));
8686 section.writeOperands(opcode.Operands(), operands);
8787}
8888
......@@ -115,16 +115,16 @@ fn writeOperands(section: *Section, comptime Operands: type, operands: Operands)
115115pub fn writeOperand(section: *Section, comptime Operand: type, operand: Operand) void {
116116 switch (Operand) {
117117 spec.LiteralSpecConstantOpInteger => unreachable,
118 spec.Id => section.writeWord(@intFromEnum(operand)),
118 spec.Id => section.writeWord(@backingInt(operand)),
119119 spec.LiteralInteger => section.writeWord(operand),
120120 spec.LiteralString => section.writeString(operand),
121121 spec.LiteralContextDependentNumber => section.writeContextDependentNumber(operand),
122122 spec.LiteralExtInstInteger => section.writeWord(operand.inst),
123 spec.PairLiteralIntegerIdRef => section.writeWords(&.{ operand.value, @enumFromInt(operand.label) }),
124 spec.PairIdRefLiteralInteger => section.writeWords(&.{ @intFromEnum(operand.target), operand.member }),
125 spec.PairIdRefIdRef => section.writeWords(&.{ @intFromEnum(operand[0]), @intFromEnum(operand[1]) }),
123 spec.PairLiteralIntegerIdRef => section.writeWords(&.{ operand.value, @fromBackingInt(@intCast(operand.label)) }),
124 spec.PairIdRefLiteralInteger => section.writeWords(&.{ @backingInt(operand.target), operand.member }),
125 spec.PairIdRefIdRef => section.writeWords(&.{ @backingInt(operand[0]), @backingInt(operand[1]) }),
126126 else => switch (@typeInfo(Operand)) {
127 .@"enum" => section.writeWord(@intFromEnum(operand)),
127 .@"enum" => section.writeWord(@backingInt(operand)),
128128 .optional => |info| if (operand) |child| section.writeOperand(info.child, child),
129129 .pointer => |info| {
130130 std.debug.assert(info.size == .slice); // Should be no other pointer types in the spec.
......@@ -200,7 +200,7 @@ fn writeExtendedMask(section: *Section, comptime Operand: type, operand: Operand
200200fn writeExtendedUnion(section: *Section, comptime Operand: type, operand: Operand) void {
201201 return switch (operand) {
202202 inline else => |op, tag| {
203 section.writeWord(@intFromEnum(tag));
203 section.writeWord(@backingInt(tag));
204204 section.writeOperands(
205205 @FieldType(Operand, @tagName(tag)),
206206 op,
src/codegen/spirv/spec.zig+2-2
......@@ -21,7 +21,7 @@ pub const Id = enum(Word) {
2121 pub fn format(self: Id, writer: *std.Io.Writer) std.Io.Writer.Error!void {
2222 switch (self) {
2323 .none => try writer.writeAll("(none)"),
24 else => try writer.print("%{d}", .{@intFromEnum(self)}),
24 else => try writer.print("%{d}", .{@backingInt(self)}),
2525 }
2626 }
2727};
......@@ -32,7 +32,7 @@ pub const IdRange = struct {
3232
3333 pub fn at(range: IdRange, i: usize) Id {
3434 std.debug.assert(i < range.len);
35 return @enumFromInt(range.base + i);
35 return @fromBackingInt(@intCast(range.base + i));
3636 }
3737};
3838
src/codegen/wasm/CodeGen.zig+104-104
......@@ -482,7 +482,7 @@ fn processDeath(cg: *CodeGen, ref: Air.Inst.Ref) void {
482482 if (value.local.value < reserved_indexes) {
483483 return; // function arguments can never be re-used
484484 }
485 log.debug("Decreasing reference for ref: %{d}, using local '{d}'", .{ @intFromEnum(ref.toIndex().?), value.local.value });
485 log.debug("Decreasing reference for ref: %{d}, using local '{d}'", .{ @backingInt(ref.toIndex().?), value.local.value });
486486 value.local.references -= 1; // if this panics, a call to `reuseOperand` was forgotten by the developer
487487 if (value.local.references == 0) {
488488 value.free(cg);
......@@ -499,7 +499,7 @@ pub fn addTag(cg: *CodeGen, tag: Mir.Inst.Tag) error{OutOfMemory}!void {
499499
500500pub fn addExtended(cg: *CodeGen, opcode: std.wasm.MiscOpcode) error{OutOfMemory}!void {
501501 const extra_index: u32 = @intCast(cg.mir_extra.items.len);
502 try cg.mir_extra.append(cg.gpa, @intFromEnum(opcode));
502 try cg.mir_extra.append(cg.gpa, @backingInt(opcode));
503503 try cg.addInst(.{ .tag = .misc_prefix, .data = .{ .payload = extra_index } });
504504}
505505
......@@ -532,7 +532,7 @@ pub fn addImm128(cg: *CodeGen, index: u32) error{OutOfMemory}!void {
532532 const extra_index: u32 = @intCast(cg.mir_extra.items.len);
533533 // tag + 128bit value
534534 try cg.mir_extra.ensureUnusedCapacity(cg.gpa, 5);
535 cg.mir_extra.appendAssumeCapacity(@intFromEnum(std.wasm.SimdOpcode.v128_const));
535 cg.mir_extra.appendAssumeCapacity(@backingInt(std.wasm.SimdOpcode.v128_const));
536536 cg.mir_extra.appendSliceAssumeCapacity(@alignCast(mem.bytesAsSlice(u32, &simd_values)));
537537 try cg.addInst(.{ .tag = .simd_prefix, .data = .{ .payload = extra_index } });
538538}
......@@ -555,14 +555,14 @@ pub fn addMemArg(cg: *CodeGen, tag: Mir.Inst.Tag, mem_arg: Mir.MemArg) error{Out
555555/// Inserts an instruction from the 'atomics' feature which accesses wasm's linear memory dependent on the
556556/// given `tag`.
557557pub fn addAtomicMemArg(cg: *CodeGen, tag: std.wasm.AtomicsOpcode, mem_arg: Mir.MemArg) error{OutOfMemory}!void {
558 const extra_index = try cg.addExtra(@as(struct { val: u32 }, .{ .val = @intFromEnum(tag) }));
558 const extra_index = try cg.addExtra(@as(struct { val: u32 }, .{ .val = @backingInt(tag) }));
559559 _ = try cg.addExtra(mem_arg);
560560 try cg.addInst(.{ .tag = .atomics_prefix, .data = .{ .payload = extra_index } });
561561}
562562
563563/// Helper function to emit atomic mir opcodes.
564564pub fn addAtomicTag(cg: *CodeGen, tag: std.wasm.AtomicsOpcode) error{OutOfMemory}!void {
565 const extra_index = try cg.addExtra(@as(struct { val: u32 }, .{ .val = @intFromEnum(tag) }));
565 const extra_index = try cg.addExtra(@as(struct { val: u32 }, .{ .val = @backingInt(tag) }));
566566 try cg.addInst(.{ .tag = .atomics_prefix, .data = .{ .payload = extra_index } });
567567}
568568
......@@ -589,7 +589,7 @@ fn addExtraAssumeCapacity(cg: *CodeGen, extra: anytype) error{OutOfMemory}!u32 {
589589 i32 => @bitCast(@field(extra, field_name)),
590590 InternPool.Index,
591591 InternPool.Nav.Index,
592 => @intFromEnum(@field(extra, field_name)),
592 => @backingInt(@field(extra, field_name)),
593593 else => @compileError("Unsupported field type " ++ @typeName(field_type)),
594594 });
595595 }
......@@ -1304,7 +1304,7 @@ fn buildPointerOffset(cg: *CodeGen, ptr_value: WValue, offset: u64, action: enum
13041304fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
13051305 const zcu = cg.pt.zcu;
13061306 const air_tags = cg.air.instructions.items(.tag);
1307 return switch (air_tags[@intFromEnum(inst)]) {
1307 return switch (air_tags[@backingInt(inst)]) {
13081308 // No soft float legalizations are enabled.
13091309 .legalize_compiler_rt_call => unreachable,
13101310
......@@ -1312,7 +1312,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
13121312
13131313 .legalize_vec_elem_val => cg.airArrayElemVal(inst),
13141314 .legalize_vec_store_elem => {
1315 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
1315 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
13161316 const bin_op = cg.air.extraData(Air.Bin, pl_op.payload).data;
13171317 const vec_ptr = try cg.resolveInst(pl_op.operand);
13181318 const elem_idx = try cg.resolveInst(bin_op.lhs);
......@@ -1345,7 +1345,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
13451345 .div_floor,
13461346 .div_ceil,
13471347 => |tag| {
1348 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1348 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
13491349 const lhs = try cg.resolveInst(bin_op.lhs);
13501350 const rhs = try cg.resolveInst(bin_op.rhs);
13511351
......@@ -1399,7 +1399,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
13991399 }
14001400 },
14011401 .div_float => {
1402 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1402 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
14031403 const lhs = try cg.resolveInst(bin_op.lhs);
14041404 const rhs = try cg.resolveInst(bin_op.rhs);
14051405 const ty = cg.typeOfIndex(inst);
......@@ -1412,7 +1412,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
14121412 try cg.finishAir(inst, result, &.{ bin_op.lhs, bin_op.rhs });
14131413 },
14141414 .abs => {
1415 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1415 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
14161416 const operand = try cg.resolveInst(ty_op.operand);
14171417
14181418 const ty = cg.typeOf(ty_op.operand);
......@@ -1433,7 +1433,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
14331433 }
14341434 },
14351435 .mul_add => {
1436 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
1436 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
14371437 const bin_op = cg.air.extraData(Air.Bin, pl_op.payload).data;
14381438 const addend = try cg.resolveInst(pl_op.operand);
14391439 const lhs = try cg.resolveInst(bin_op.lhs);
......@@ -1453,7 +1453,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
14531453 .mul_sat,
14541454 .shl_sat,
14551455 => |tag| {
1456 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1456 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
14571457 const lhs = try cg.resolveInst(bin_op.lhs);
14581458 const rhs = try cg.resolveInst(bin_op.rhs);
14591459 const ty = cg.typeOfIndex(inst);
......@@ -1479,7 +1479,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
14791479 .mul_with_overflow,
14801480 .shl_with_overflow,
14811481 => |tag| {
1482 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
1482 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
14831483 const extra = cg.air.extraData(Air.Bin, ty_pl.payload).data;
14841484
14851485 const lhs = try cg.resolveInst(extra.lhs);
......@@ -1512,7 +1512,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
15121512 },
15131513
15141514 .add_wrap, .sub_wrap, .mul_wrap, .shl => |tag| {
1515 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1515 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
15161516 const lhs = try cg.resolveInst(bin_op.lhs);
15171517 const rhs = try cg.resolveInst(bin_op.rhs);
15181518 const ty = cg.typeOfIndex(inst);
......@@ -1535,7 +1535,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
15351535 },
15361536
15371537 .bit_and, .bit_or, .xor, .shl_exact, .shr, .shr_exact => |tag| {
1538 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1538 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
15391539 const lhs = try cg.resolveInst(bin_op.lhs);
15401540 const rhs = try cg.resolveInst(bin_op.rhs);
15411541 const ty = cg.typeOfIndex(inst);
......@@ -1558,7 +1558,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
15581558 },
15591559
15601560 .not => {
1561 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1561 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
15621562 const operand = try cg.resolveInst(ty_op.operand);
15631563 const ty = cg.typeOf(ty_op.operand);
15641564
......@@ -1581,7 +1581,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
15811581 .union_from_enum => cg.airUnionFromEnum(inst),
15821582
15831583 .int_cast => {
1584 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1584 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
15851585
15861586 const dest_ty = ty_op.ty.toType();
15871587 const operand = try cg.resolveInst(ty_op.operand);
......@@ -1609,7 +1609,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
16091609 try cg.finishAir(inst, result, &.{ty_op.operand});
16101610 },
16111611 .trunc => {
1612 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1612 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
16131613
16141614 const operand = try cg.resolveInst(ty_op.operand);
16151615 const dest_ty = ty_op.ty.toType();
......@@ -1632,7 +1632,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
16321632 },
16331633
16341634 .fptrunc, .fpext => |tag| {
1635 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1635 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
16361636
16371637 const operand = try cg.resolveInst(ty_op.operand);
16381638 const src_ty = cg.typeOf(ty_op.operand);
......@@ -1655,7 +1655,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
16551655 },
16561656
16571657 .int_from_float => {
1658 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1658 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
16591659 const operand = try cg.resolveInst(ty_op.operand);
16601660 const src_ty = cg.typeOf(ty_op.operand);
16611661 const dest_ty = cg.typeOfIndex(inst);
......@@ -1668,7 +1668,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
16681668 try cg.finishAir(inst, result, &.{ty_op.operand});
16691669 },
16701670 .float_from_int => {
1671 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1671 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
16721672 const operand = try cg.resolveInst(ty_op.operand);
16731673 const src_ty = cg.typeOf(ty_op.operand);
16741674 const dest_ty = cg.typeOfIndex(inst);
......@@ -1682,7 +1682,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
16821682 },
16831683
16841684 .clz, .ctz, .popcount, .byte_swap, .bit_reverse => |tag| {
1685 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
1685 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
16861686 const operand = try cg.resolveInst(ty_op.operand);
16871687
16881688 const ty = cg.typeOf(ty_op.operand);
......@@ -1704,7 +1704,7 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
17041704 },
17051705
17061706 .sqrt, .sin, .cos, .tan, .exp, .exp2, .log, .log2, .log10, .floor, .ceil, .round, .trunc_float, .neg => |tag| {
1707 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1707 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
17081708 const operand = try cg.resolveInst(un_op);
17091709 const ty = cg.typeOfIndex(inst);
17101710
......@@ -1935,7 +1935,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
19351935 if (std.debug.runtime_safety and cg.air_bookkeeping < old_bookkeeping_value + 1) {
19361936 std.debug.panic("Missing call to `finishAir` in AIR instruction %{d} ('{t}')", .{
19371937 inst,
1938 cg.air.instructions.items(.tag)[@intFromEnum(inst)],
1938 cg.air.instructions.items(.tag)[@backingInt(inst)],
19391939 });
19401940 }
19411941 }
......@@ -1943,7 +1943,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
19431943
19441944fn airRet(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
19451945 const zcu = cg.pt.zcu;
1946 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1946 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
19471947 const operand = try cg.resolveInst(un_op);
19481948 const fn_info = zcu.typeToFunc(zcu.navValue(cg.owner_nav).typeOf(zcu)).?;
19491949 const ret_ty = Type.fromInterned(fn_info.return_type);
......@@ -1999,7 +1999,7 @@ fn airRetPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
19991999
20002000fn airRetLoad(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
20012001 const zcu = cg.pt.zcu;
2002 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
2002 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
20032003 const operand = try cg.resolveInst(un_op);
20042004 const ret_ty = cg.typeOf(un_op).childType(zcu);
20052005
......@@ -2174,12 +2174,12 @@ fn airVaStart(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
21742174}
21752175
21762176fn airVaEnd(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
2177 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
2177 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
21782178 return cg.finishAir(inst, .none, &.{un_op});
21792179}
21802180
21812181fn airVaCopy(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
2182 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2182 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21832183 const operand = try cg.resolveInst(ty_op.operand);
21842184
21852185 const result = try cg.load(operand, .usize, 0);
......@@ -2189,7 +2189,7 @@ fn airVaCopy(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
21892189
21902190fn airVaArg(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
21912191 const zcu = cg.pt.zcu;
2192 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2192 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
21932193 const operand = try cg.resolveInst(ty_op.operand);
21942194
21952195 const ty = cg.typeOfIndex(inst);
......@@ -2261,7 +2261,7 @@ fn airAlloc(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
22612261fn airStore(cg: *CodeGen, inst: Air.Inst.Index, safety: bool) InnerError!void {
22622262 const pt = cg.pt;
22632263 const zcu = pt.zcu;
2264 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
2264 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
22652265
22662266 const lhs = try cg.resolveInst(bin_op.lhs);
22672267 const rhs = try cg.resolveInst(bin_op.rhs);
......@@ -2278,7 +2278,7 @@ fn airStore(cg: *CodeGen, inst: Air.Inst.Index, safety: bool) InnerError!void {
22782278 assert(ptr_info.packed_offset.host_size == 0); // legalize .expand_packed_store
22792279 break :offset 0;
22802280 },
2281 else => |index| @intCast(@intFromEnum(index) * elem_ty.abiSize(zcu)),
2281 else => |index| @intCast(@backingInt(index) * elem_ty.abiSize(zcu)),
22822282 };
22832283 try cg.store(lhs, rhs, elem_ty, offset);
22842284 return cg.finishAir(inst, .none, &.{ bin_op.lhs, bin_op.rhs });
......@@ -2312,7 +2312,7 @@ fn store(cg: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, offset: u32) InnerErr
23122312 const extra_index: u32 = @intCast(cg.mir_extra.items.len);
23132313 // stores as := opcode, offset, alignment (opcode::memarg)
23142314 try cg.mir_extra.appendSlice(cg.gpa, &[_]u32{
2315 @intFromEnum(std.wasm.SimdOpcode.v128_store),
2315 @backingInt(std.wasm.SimdOpcode.v128_store),
23162316 offset + lhs.offset(),
23172317 @intCast(ty.abiAlignment(zcu).toByteUnits().?),
23182318 });
......@@ -2353,7 +2353,7 @@ fn store(cg: *CodeGen, lhs: WValue, rhs: WValue, ty: Type, offset: u32) InnerErr
23532353fn airLoad(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
23542354 const pt = cg.pt;
23552355 const zcu = pt.zcu;
2356 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
2356 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
23572357 const operand = try cg.resolveInst(ty_op.operand);
23582358 const elem_ty = ty_op.ty.toType();
23592359 const ptr_ty = cg.typeOf(ty_op.operand);
......@@ -2366,7 +2366,7 @@ fn airLoad(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
23662366 assert(ptr_info.packed_offset.host_size == 0); // legalize .expand_packed_load
23672367 break :offset 0;
23682368 },
2369 else => |index| @intCast(@intFromEnum(index) * elem_ty.abiSize(zcu)),
2369 else => |index| @intCast(@backingInt(index) * elem_ty.abiSize(zcu)),
23702370 };
23712371 const result = try cg.load(operand, elem_ty, offset);
23722372 return cg.finishAir(inst, result, &.{ty_op.operand});
......@@ -2400,7 +2400,7 @@ fn load(cg: *CodeGen, operand: WValue, ty: Type, offset: u32) InnerError!WValue
24002400 const extra_index: u32 = @intCast(cg.mir_extra.items.len);
24012401 // stores as := opcode, offset, alignment (opcode::memarg)
24022402 try cg.mir_extra.appendSlice(cg.gpa, &[_]u32{
2403 @intFromEnum(std.wasm.SimdOpcode.v128_load),
2403 @backingInt(std.wasm.SimdOpcode.v128_load),
24042404 offset + operand.offset(),
24052405 @intCast(ty.abiAlignment(zcu).toByteUnits().?),
24062406 });
......@@ -5241,7 +5241,7 @@ fn airCondBr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
52415241}
52425242
52435243fn airCmp(cg: *CodeGen, inst: Air.Inst.Index, op: std.math.CompareOperator) InnerError!void {
5244 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
5244 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
52455245 const lhs = try cg.resolveInst(bin_op.lhs);
52465246 const rhs = try cg.resolveInst(bin_op.rhs);
52475247 const operand_ty = cg.typeOf(bin_op.lhs);
......@@ -5473,7 +5473,7 @@ fn airCmpVector(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
54735473}
54745474
54755475fn airCmpLteErrorsLen(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
5476 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
5476 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
54775477 const operand = try cg.resolveInst(un_op);
54785478
54795479 try cg.emitWValue(operand);
......@@ -5486,7 +5486,7 @@ fn airCmpLteErrorsLen(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
54865486}
54875487
54885488fn airBr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
5489 const br = cg.air.instructions.items(.data)[@intFromEnum(inst)].br;
5489 const br = cg.air.instructions.items(.data)[@backingInt(inst)].br;
54905490 const block = cg.blocks.get(br.block_inst).?;
54915491
54925492 // if operand has codegen bits we should break with a value
......@@ -5505,7 +5505,7 @@ fn airBr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
55055505}
55065506
55075507fn airRepeat(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
5508 const repeat = cg.air.instructions.items(.data)[@intFromEnum(inst)].repeat;
5508 const repeat = cg.air.instructions.items(.data)[@backingInt(inst)].repeat;
55095509 const loop_label = cg.loops.get(repeat.loop_inst).?;
55105510
55115511 const idx: u32 = cg.block_depth - loop_label;
......@@ -5533,7 +5533,7 @@ fn airUnreachable(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
55335533
55345534fn airNopCast(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
55355535 const zcu = cg.pt.zcu;
5536 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5536 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
55375537
55385538 const operand_ty = cg.typeOf(ty_op.operand);
55395539 const dest_ty = cg.typeOfIndex(inst);
......@@ -5548,7 +5548,7 @@ fn airNopCast(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
55485548
55495549fn airIntFromPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
55505550 const zcu = cg.pt.zcu;
5551 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5551 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
55525552
55535553 const operand_ty = cg.typeOf(ty_op.operand);
55545554 const dest_ty = cg.typeOfIndex(inst);
......@@ -5566,7 +5566,7 @@ fn airIntFromPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
55665566
55675567fn airUnionFromEnum(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
55685568 const zcu = cg.pt.zcu;
5569 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5569 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
55705570
55715571 const union_ty = cg.typeOfIndex(inst);
55725572 const enum_ty = cg.typeOf(ty_op.operand);
......@@ -5580,7 +5580,7 @@ fn airUnionFromEnum(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
55805580}
55815581
55825582fn airBitcast(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
5583 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5583 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
55845584 const operand = try cg.resolveInst(ty_op.operand);
55855585 const dest_ty = cg.typeOfIndex(inst);
55865586 const src_ty = cg.typeOf(ty_op.operand);
......@@ -5690,7 +5690,7 @@ fn bitcast(cg: *CodeGen, dest_ty: Type, src_ty: Type, operand: WValue) InnerErro
56905690
56915691fn airStructFieldPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
56925692 const zcu = cg.pt.zcu;
5693 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5693 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
56945694 const extra = cg.air.extraData(Air.StructField, ty_pl.payload);
56955695
56965696 const struct_ptr = try cg.resolveInst(extra.data.struct_operand);
......@@ -5702,7 +5702,7 @@ fn airStructFieldPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
57025702
57035703fn airStructFieldPtrIndex(cg: *CodeGen, inst: Air.Inst.Index, index: u32) InnerError!void {
57045704 const zcu = cg.pt.zcu;
5705 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
5705 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
57065706 const struct_ptr = try cg.resolveInst(ty_op.operand);
57075707 const struct_ptr_ty = cg.typeOf(ty_op.operand);
57085708 const struct_ty = struct_ptr_ty.childType(zcu);
......@@ -5754,7 +5754,7 @@ fn structFieldPtr(
57545754fn airAggFieldVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
57555755 const pt = cg.pt;
57565756 const zcu = pt.zcu;
5757 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
5757 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
57585758 const struct_field = cg.air.extraData(Air.StructField, ty_pl.payload).data;
57595759
57605760 const struct_ty = cg.typeOf(struct_field.struct_operand);
......@@ -5986,7 +5986,7 @@ fn airSwitchBr(cg: *CodeGen, inst: Air.Inst.Index, is_dispatch_loop: bool) Inner
59865986}
59875987
59885988fn airSwitchDispatch(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
5989 const br = cg.air.instructions.items(.data)[@intFromEnum(inst)].br;
5989 const br = cg.air.instructions.items(.data)[@backingInt(inst)].br;
59905990 const switch_loop = cg.blocks.get(br.block_inst).?;
59915991
59925992 const operand = try cg.resolveInst(br.operand);
......@@ -6001,7 +6001,7 @@ fn airSwitchDispatch(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
60016001
60026002fn airIsErr(cg: *CodeGen, inst: Air.Inst.Index, opcode: std.wasm.Opcode, op_kind: enum { value, ptr }) InnerError!void {
60036003 const zcu = cg.pt.zcu;
6004 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
6004 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
60056005 const operand = try cg.resolveInst(un_op);
60066006 const err_union_ty = switch (op_kind) {
60076007 .value => cg.typeOf(un_op),
......@@ -6038,7 +6038,7 @@ fn airIsErr(cg: *CodeGen, inst: Air.Inst.Index, opcode: std.wasm.Opcode, op_kind
60386038/// *(E!T) -> *T op_is_prt == true
60396039fn airUnwrapErrUnionPayload(cg: *CodeGen, inst: Air.Inst.Index, op_is_ptr: bool) InnerError!void {
60406040 const zcu = cg.pt.zcu;
6041 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6041 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
60426042
60436043 const operand = try cg.resolveInst(ty_op.operand);
60446044 const op_ty = cg.typeOf(ty_op.operand);
......@@ -6070,7 +6070,7 @@ fn airUnwrapErrUnionPayload(cg: *CodeGen, inst: Air.Inst.Index, op_is_ptr: bool)
60706070/// NOTE: op_is_ptr will not change return type
60716071fn airUnwrapErrUnionError(cg: *CodeGen, inst: Air.Inst.Index, op_is_ptr: bool) InnerError!void {
60726072 const zcu = cg.pt.zcu;
6073 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6073 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
60746074
60756075 const operand = try cg.resolveInst(ty_op.operand);
60766076 const op_ty = cg.typeOf(ty_op.operand);
......@@ -6095,7 +6095,7 @@ fn airUnwrapErrUnionError(cg: *CodeGen, inst: Air.Inst.Index, op_is_ptr: bool) I
60956095
60966096fn airWrapErrUnionPayload(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
60976097 const zcu = cg.pt.zcu;
6098 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6098 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
60996099
61006100 const operand = try cg.resolveInst(ty_op.operand);
61016101 const err_ty = cg.typeOfIndex(inst);
......@@ -6125,7 +6125,7 @@ fn airWrapErrUnionPayload(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
61256125
61266126fn airWrapErrUnionErr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
61276127 const zcu = cg.pt.zcu;
6128 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6128 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
61296129
61306130 const operand = try cg.resolveInst(ty_op.operand);
61316131 const err_ty = ty_op.ty.toType();
......@@ -6153,7 +6153,7 @@ fn airWrapErrUnionErr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
61536153const OpKind = enum { value, ptr };
61546154
61556155fn airIsNull(cg: *CodeGen, inst: Air.Inst.Index, opcode: std.wasm.Opcode, op_kind: OpKind) InnerError!void {
6156 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
6156 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
61576157 const operand = try cg.resolveInst(un_op);
61586158
61596159 const op_ty = cg.typeOf(un_op);
......@@ -6204,7 +6204,7 @@ fn isNull(cg: *CodeGen, operand: WValue, op_ty: Type, opcode: std.wasm.Opcode, o
62046204
62056205fn airOptionalPayload(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
62066206 const zcu = cg.pt.zcu;
6207 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6207 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
62086208 const opt_ty = cg.typeOf(ty_op.operand);
62096209 const payload_ty = cg.typeOfIndex(inst);
62106210 if (!payload_ty.hasRuntimeBits(zcu)) {
......@@ -6226,7 +6226,7 @@ fn airOptionalPayload(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
62266226
62276227fn airOptionalPayloadPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
62286228 const zcu = cg.pt.zcu;
6229 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6229 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
62306230 const operand = try cg.resolveInst(ty_op.operand);
62316231 const opt_ty = cg.typeOf(ty_op.operand).childType(zcu);
62326232
......@@ -6244,7 +6244,7 @@ fn airOptionalPayloadPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
62446244fn airOptionalPayloadPtrSet(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
62456245 const pt = cg.pt;
62466246 const zcu = pt.zcu;
6247 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6247 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
62486248 const operand = try cg.resolveInst(ty_op.operand);
62496249 const opt_ty = cg.typeOf(ty_op.operand).childType(zcu);
62506250 const payload_ty = opt_ty.optionalChild(zcu);
......@@ -6266,7 +6266,7 @@ fn airOptionalPayloadPtrSet(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void
62666266}
62676267
62686268fn airWrapOptional(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6269 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6269 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
62706270 const payload_ty = cg.typeOf(ty_op.operand);
62716271 const pt = cg.pt;
62726272 const zcu = pt.zcu;
......@@ -6304,7 +6304,7 @@ fn airWrapOptional(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
63046304}
63056305
63066306fn airSlice(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6307 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6307 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
63086308 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
63096309
63106310 const lhs = try cg.resolveInst(bin_op.lhs);
......@@ -6319,7 +6319,7 @@ fn airSlice(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
63196319}
63206320
63216321fn airSliceLen(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6322 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6322 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
63236323
63246324 const operand = try cg.resolveInst(ty_op.operand);
63256325 return cg.finishAir(inst, try cg.sliceLen(operand), &.{ty_op.operand});
......@@ -6327,7 +6327,7 @@ fn airSliceLen(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
63276327
63286328fn airSliceElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
63296329 const zcu = cg.pt.zcu;
6330 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6330 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
63316331
63326332 const slice_ty = cg.typeOf(bin_op.lhs);
63336333 const slice = try cg.resolveInst(bin_op.lhs);
......@@ -6351,7 +6351,7 @@ fn airSliceElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
63516351
63526352fn airSliceElemPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
63536353 const zcu = cg.pt.zcu;
6354 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6354 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
63556355 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
63566356
63576357 const elem_ty = ty_pl.ty.toType().childType(zcu);
......@@ -6372,7 +6372,7 @@ fn airSliceElemPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
63726372}
63736373
63746374fn airSlicePtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6375 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6375 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
63766376 const operand = try cg.resolveInst(ty_op.operand);
63776377 return cg.finishAir(inst, try cg.slicePtr(operand), &.{ty_op.operand});
63786378}
......@@ -6389,7 +6389,7 @@ fn sliceLen(cg: *CodeGen, operand: WValue) InnerError!WValue {
63896389
63906390fn airArrayToSlice(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
63916391 const zcu = cg.pt.zcu;
6392 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6392 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
63936393
63946394 const operand = try cg.resolveInst(ty_op.operand);
63956395 const array_ty = cg.typeOf(ty_op.operand).childType(zcu);
......@@ -6409,7 +6409,7 @@ fn airArrayToSlice(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
64096409
64106410fn airPtrElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
64116411 const zcu = cg.pt.zcu;
6412 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6412 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
64136413
64146414 const ptr_ty = cg.typeOf(bin_op.lhs);
64156415 const ptr = try cg.resolveInst(bin_op.lhs);
......@@ -6437,7 +6437,7 @@ fn airPtrElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
64376437
64386438fn airPtrElemPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
64396439 const zcu = cg.pt.zcu;
6440 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6440 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
64416441 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
64426442
64436443 const ptr_ty = cg.typeOf(bin_op.lhs);
......@@ -6465,7 +6465,7 @@ fn airPtrElemPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
64656465
64666466fn airPtrBinOp(cg: *CodeGen, inst: Air.Inst.Index, op: enum { add, sub }) InnerError!void {
64676467 const zcu = cg.pt.zcu;
6468 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6468 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
64696469 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
64706470
64716471 const ptr = try cg.resolveInst(bin_op.lhs);
......@@ -6503,7 +6503,7 @@ fn airPtrBinOp(cg: *CodeGen, inst: Air.Inst.Index, op: enum { add, sub }) InnerE
65036503
65046504fn airMemset(cg: *CodeGen, inst: Air.Inst.Index, safety: bool) InnerError!void {
65056505 const zcu = cg.pt.zcu;
6506 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6506 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
65076507
65086508 const ptr = try cg.resolveInst(bin_op.lhs);
65096509 const ptr_ty = cg.typeOf(bin_op.lhs);
......@@ -6643,7 +6643,7 @@ fn memset(cg: *CodeGen, elem_ty: Type, ptr: WValue, len: WValue, value: WValue)
66436643
66446644fn airArrayElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
66456645 const zcu = cg.pt.zcu;
6646 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
6646 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
66476647
66486648 const array_ty = cg.typeOf(bin_op.lhs);
66496649 const array = try cg.resolveInst(bin_op.lhs);
......@@ -6670,7 +6670,7 @@ fn airArrayElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
66706670 else => unreachable,
66716671 };
66726672
6673 var operands = [_]u32{ @intFromEnum(opcode), @as(u8, @intCast(lane)) };
6673 var operands = [_]u32{ @backingInt(opcode), @as(u8, @intCast(lane)) };
66746674
66756675 try cg.emitWValue(array);
66766676
......@@ -6703,7 +6703,7 @@ fn airArrayElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
67036703
67046704fn airSplat(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
67056705 const zcu = cg.pt.zcu;
6706 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
6706 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
67076707 const operand = try cg.resolveInst(ty_op.operand);
67086708 const ty = cg.typeOfIndex(inst);
67096709 const elem_ty = ty.childType(zcu);
......@@ -6715,10 +6715,10 @@ fn airSplat(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
67156715 // the scalar value onto the stack.
67166716 .stack_offset, .nav_ref, .uav_ref => {
67176717 const opcode = switch (elem_ty.bitSize(zcu)) {
6718 8 => @intFromEnum(std.wasm.SimdOpcode.v128_load8_splat),
6719 16 => @intFromEnum(std.wasm.SimdOpcode.v128_load16_splat),
6720 32 => @intFromEnum(std.wasm.SimdOpcode.v128_load32_splat),
6721 64 => @intFromEnum(std.wasm.SimdOpcode.v128_load64_splat),
6718 8 => @backingInt(std.wasm.SimdOpcode.v128_load8_splat),
6719 16 => @backingInt(std.wasm.SimdOpcode.v128_load16_splat),
6720 32 => @backingInt(std.wasm.SimdOpcode.v128_load32_splat),
6721 64 => @backingInt(std.wasm.SimdOpcode.v128_load64_splat),
67226722 else => break :blk, // Cannot make use of simd-instructions
67236723 };
67246724 try cg.emitWValue(operand);
......@@ -6734,10 +6734,10 @@ fn airSplat(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
67346734 },
67356735 .local => {
67366736 const opcode = switch (elem_ty.bitSize(zcu)) {
6737 8 => @intFromEnum(std.wasm.SimdOpcode.i8x16_splat),
6738 16 => @intFromEnum(std.wasm.SimdOpcode.i16x8_splat),
6739 32 => if (elem_ty.isInt(zcu)) @intFromEnum(std.wasm.SimdOpcode.i32x4_splat) else @intFromEnum(std.wasm.SimdOpcode.f32x4_splat),
6740 64 => if (elem_ty.isInt(zcu)) @intFromEnum(std.wasm.SimdOpcode.i64x2_splat) else @intFromEnum(std.wasm.SimdOpcode.f64x2_splat),
6737 8 => @backingInt(std.wasm.SimdOpcode.i8x16_splat),
6738 16 => @backingInt(std.wasm.SimdOpcode.i16x8_splat),
6739 32 => if (elem_ty.isInt(zcu)) @backingInt(std.wasm.SimdOpcode.i32x4_splat) else @backingInt(std.wasm.SimdOpcode.f32x4_splat),
6740 64 => if (elem_ty.isInt(zcu)) @backingInt(std.wasm.SimdOpcode.i64x2_splat) else @backingInt(std.wasm.SimdOpcode.f64x2_splat),
67416741 else => break :blk, // Cannot make use of simd-instructions
67426742 };
67436743 try cg.emitWValue(operand);
......@@ -6764,7 +6764,7 @@ fn airSplat(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
67646764}
67656765
67666766fn airSelect(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6767 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
6767 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
67686768 const operand = try cg.resolveInst(pl_op.operand);
67696769
67706770 _ = operand;
......@@ -6843,7 +6843,7 @@ fn airShuffleTwo(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
68436843 try cg.emitWValue(operand_b);
68446844 const extra_index: u32 = @intCast(cg.mir_extra.items.len);
68456845 try cg.mir_extra.appendSlice(cg.gpa, &.{
6846 @intFromEnum(std.wasm.SimdOpcode.i8x16_shuffle),
6846 @backingInt(std.wasm.SimdOpcode.i8x16_shuffle),
68476847 @bitCast(lane_map[0..4].*),
68486848 @bitCast(lane_map[4..8].*),
68496849 @bitCast(lane_map[8..12].*),
......@@ -6873,7 +6873,7 @@ fn airShuffleTwo(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
68736873}
68746874
68756875fn airReduce(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
6876 const reduce = cg.air.instructions.items(.data)[@intFromEnum(inst)].reduce;
6876 const reduce = cg.air.instructions.items(.data)[@backingInt(inst)].reduce;
68776877 const operand = try cg.resolveInst(reduce.operand);
68786878
68796879 _ = operand;
......@@ -6883,7 +6883,7 @@ fn airReduce(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
68836883fn airAggregateInit(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
68846884 const pt = cg.pt;
68856885 const zcu = pt.zcu;
6886 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6886 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
68876887 const result_ty = cg.typeOfIndex(inst);
68886888 const len = @as(usize, @intCast(result_ty.arrayLen(zcu)));
68896889 const elements: []const Air.Inst.Ref = @ptrCast(cg.air.extra.items[ty_pl.payload..][0..len]);
......@@ -6960,7 +6960,7 @@ fn airUnionInit(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
69606960 const pt = cg.pt;
69616961 const zcu = pt.zcu;
69626962 const ip = &zcu.intern_pool;
6963 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
6963 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
69646964 const extra = cg.air.extraData(Air.UnionInit, ty_pl.payload).data;
69656965
69666966 const result = result: {
......@@ -7019,19 +7019,19 @@ fn airUnionInit(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
70197019}
70207020
70217021fn airPrefetch(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
7022 const prefetch = cg.air.instructions.items(.data)[@intFromEnum(inst)].prefetch;
7022 const prefetch = cg.air.instructions.items(.data)[@backingInt(inst)].prefetch;
70237023 return cg.finishAir(inst, .none, &.{prefetch.ptr});
70247024}
70257025
70267026fn airWasmMemorySize(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
7027 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
7027 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
70287028
70297029 try cg.addLabel(.memory_size, pl_op.payload);
70307030 return cg.finishAir(inst, .stack, &.{pl_op.operand});
70317031}
70327032
70337033fn airWasmMemoryGrow(cg: *CodeGen, inst: Air.Inst.Index) !void {
7034 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
7034 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
70357035
70367036 const operand = try cg.resolveInst(pl_op.operand);
70377037 try cg.emitWValue(operand);
......@@ -7042,7 +7042,7 @@ fn airWasmMemoryGrow(cg: *CodeGen, inst: Air.Inst.Index) !void {
70427042fn airSetUnionTag(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
70437043 const pt = cg.pt;
70447044 const zcu = pt.zcu;
7045 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
7045 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
70467046 const un_ty = cg.typeOf(bin_op.lhs).childType(zcu);
70477047 const tag_ty = cg.typeOf(bin_op.rhs);
70487048 const layout = un_ty.unionGetLayout(zcu);
......@@ -7066,7 +7066,7 @@ fn airSetUnionTag(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
70667066
70677067fn airGetUnionTag(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
70687068 const zcu = cg.pt.zcu;
7069 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7069 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
70707070
70717071 const un_ty = cg.typeOf(ty_op.operand);
70727072 const tag_ty = cg.typeOfIndex(inst);
......@@ -7086,7 +7086,7 @@ fn airGetUnionTag(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
70867086
70877087fn airErrUnionPayloadPtrSet(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
70887088 const zcu = cg.pt.zcu;
7089 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7089 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
70907090
70917091 const err_set_ty = cg.typeOf(ty_op.operand).childType(zcu);
70927092 const payload_ty = err_set_ty.errorUnionPayload(zcu);
......@@ -7113,7 +7113,7 @@ fn airErrUnionPayloadPtrSet(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void
71137113fn airFieldParentPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
71147114 const pt = cg.pt;
71157115 const zcu = pt.zcu;
7116 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
7116 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
71177117 const extra = cg.air.extraData(Air.FieldParentPtr, ty_pl.payload).data;
71187118
71197119 const field_ptr = try cg.resolveInst(extra.field_ptr);
......@@ -7154,7 +7154,7 @@ fn sliceOrArrayPtr(cg: *CodeGen, ptr: WValue, ptr_ty: Type) InnerError!WValue {
71547154
71557155fn airMemcpy(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
71567156 const zcu = cg.pt.zcu;
7157 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
7157 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
71587158 const dst = try cg.resolveInst(bin_op.lhs);
71597159 const dst_ty = cg.typeOf(bin_op.lhs);
71607160 const ptr_elem_ty = dst_ty.childType(zcu);
......@@ -7185,7 +7185,7 @@ fn airMemcpy(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
71857185
71867186fn airMemmove(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
71877187 const zcu = cg.pt.zcu;
7188 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
7188 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
71897189 const dst = try cg.resolveInst(bin_op.lhs);
71907190 const dst_ty = cg.typeOf(bin_op.lhs);
71917191 const ptr_elem_ty = dst_ty.childType(zcu);
......@@ -7223,7 +7223,7 @@ fn airRetAddr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
72237223}
72247224
72257225fn airErrorName(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
7226 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
7226 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
72277227 const operand = try cg.resolveInst(un_op);
72287228 // Each entry to this table is a slice (ptr+len).
72297229 // The operand in this instruction represents the index within this table.
......@@ -7257,14 +7257,14 @@ fn airErrorName(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
72577257}
72587258
72597259fn airPtrSliceFieldPtr(cg: *CodeGen, inst: Air.Inst.Index, offset: u32) InnerError!void {
7260 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7260 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
72617261 const slice_ptr = try cg.resolveInst(ty_op.operand);
72627262 const result = try cg.buildPointerOffset(slice_ptr, offset, .new);
72637263 return cg.finishAir(inst, result, &.{ty_op.operand});
72647264}
72657265
72667266fn airDbgStmt(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
7267 const dbg_stmt = cg.air.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt;
7267 const dbg_stmt = cg.air.instructions.items(.data)[@backingInt(inst)].dbg_stmt;
72687268 try cg.addInst(.{ .tag = .dbg_line, .data = .{
72697269 .payload = try cg.addExtra(Mir.DbgLineColumn{
72707270 .line = dbg_stmt.line,
......@@ -7408,7 +7408,7 @@ fn callIntrinsic(
74087408}
74097409
74107410fn airTagName(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
7411 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
7411 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
74127412 const operand = try cg.resolveInst(un_op);
74137413 const enum_ty = cg.typeOf(un_op);
74147414
......@@ -7433,7 +7433,7 @@ fn airTagName(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
74337433}
74347434
74357435fn airIsNamedEnumValue(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
7436 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
7436 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
74377437 const operand = try cg.resolveInst(un_op);
74387438 const enum_ty = cg.typeOf(un_op);
74397439
......@@ -7448,7 +7448,7 @@ fn airIsNamedEnumValue(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
74487448fn airErrorSetHasValue(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
74497449 const zcu = cg.pt.zcu;
74507450 const ip = &zcu.intern_pool;
7451 const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
7451 const ty_op = cg.air.instructions.items(.data)[@backingInt(inst)].ty_op;
74527452
74537453 const operand = try cg.resolveInst(ty_op.operand);
74547454 const error_set_ty = ty_op.ty.toType();
......@@ -7534,7 +7534,7 @@ inline fn useAtomicFeature(cg: *const CodeGen) bool {
75347534
75357535fn airCmpxchg(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
75367536 const zcu = cg.pt.zcu;
7537 const ty_pl = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
7537 const ty_pl = cg.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
75387538 const extra = cg.air.extraData(Air.Cmpxchg, ty_pl.payload).data;
75397539
75407540 const ptr_ty = cg.typeOf(extra.ptr);
......@@ -7609,7 +7609,7 @@ fn airCmpxchg(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
76097609
76107610fn airAtomicLoad(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
76117611 const zcu = cg.pt.zcu;
7612 const atomic_load = cg.air.instructions.items(.data)[@intFromEnum(inst)].atomic_load;
7612 const atomic_load = cg.air.instructions.items(.data)[@backingInt(inst)].atomic_load;
76137613 const ptr = try cg.resolveInst(atomic_load.ptr);
76147614 const ty = cg.typeOfIndex(inst);
76157615
......@@ -7635,7 +7635,7 @@ fn airAtomicLoad(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
76357635
76367636fn airAtomicRmw(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
76377637 const zcu = cg.pt.zcu;
7638 const pl_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
7638 const pl_op = cg.air.instructions.items(.data)[@backingInt(inst)].pl_op;
76397639 const extra = cg.air.extraData(Air.AtomicRmw, pl_op.payload).data;
76407640
76417641 const ptr = try cg.resolveInst(pl_op.operand);
......@@ -7838,7 +7838,7 @@ fn airAtomicRmw(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
78387838
78397839fn airAtomicStore(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
78407840 const zcu = cg.pt.zcu;
7841 const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
7841 const bin_op = cg.air.instructions.items(.data)[@backingInt(inst)].bin_op;
78427842
78437843 const ptr = try cg.resolveInst(bin_op.lhs);
78447844 const operand = try cg.resolveInst(bin_op.rhs);
......@@ -7875,7 +7875,7 @@ fn airFrameAddress(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
78757875}
78767876
78777877fn airRuntimeNavPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void {
7878 const ty_nav = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_nav;
7878 const ty_nav = cg.air.instructions.items(.data)[@backingInt(inst)].ty_nav;
78797879 const mod = cg.pt.zcu.navFileScope(cg.owner_nav).mod.?;
78807880 if (mod.single_threaded) {
78817881 const result: WValue = .{ .nav_ref = .{
src/codegen/wasm/Emit.zig+39-39
......@@ -42,8 +42,8 @@ pub fn lowerToCode(emit: *Emit) Error!void {
4242 .block, .loop => {
4343 const block_type = datas[inst].block_type;
4444 try code.ensureUnusedCapacity(gpa, 2);
45 code.appendAssumeCapacity(@intFromEnum(tags[inst]));
46 code.appendAssumeCapacity(@intFromEnum(block_type));
45 code.appendAssumeCapacity(@backingInt(tags[inst]));
46 code.appendAssumeCapacity(@backingInt(block_type));
4747
4848 inst += 1;
4949 continue :loop tags[inst];
......@@ -78,14 +78,14 @@ pub fn lowerToCode(emit: *Emit) Error!void {
7878 continue :loop tags[inst];
7979 },
8080 .func_ref => {
81 const indirect_func_idx: Wasm.ZcuIndirectFunctionSetIndex = @enumFromInt(
81 const indirect_func_idx: Wasm.ZcuIndirectFunctionSetIndex = @fromBackingInt(@intCast(
8282 wasm.zcu_indirect_function_set.getIndex(datas[inst].nav_index).?,
83 );
84 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_const));
83 ));
84 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i32_const));
8585 if (is_obj) {
8686 @panic("TODO");
8787 } else {
88 writeSleb128(code, 1 + @intFromEnum(indirect_func_idx));
88 writeSleb128(code, 1 + @backingInt(indirect_func_idx));
8989 }
9090 inst += 1;
9191 continue :loop tags[inst];
......@@ -96,7 +96,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
9696 },
9797 .errors_len => {
9898 try code.ensureUnusedCapacity(gpa, 6);
99 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_const));
99 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i32_const));
100100 // MIR is lowered during flush, so there is indeed only one thread at this time.
101101 const errors_len = 1 + comp.zcu.?.intern_pool.global_error_set.getNamesFromMainThread().len;
102102 writeSleb128(code, errors_len);
......@@ -108,7 +108,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
108108 wasm.error_name_table_ref_count += 1;
109109 try code.ensureUnusedCapacity(gpa, 11);
110110 const opcode: std.wasm.Opcode = if (is_wasm32) .i32_const else .i64_const;
111 code.appendAssumeCapacity(@intFromEnum(opcode));
111 code.appendAssumeCapacity(@backingInt(opcode));
112112 if (is_obj) {
113113 try wasm.out_relocs.append(gpa, .{
114114 .offset = @intCast(code.items.len),
......@@ -130,7 +130,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
130130 },
131131 .br_if, .br, .memory_grow, .memory_size => {
132132 try code.ensureUnusedCapacity(gpa, 11);
133 code.appendAssumeCapacity(@intFromEnum(tags[inst]));
133 code.appendAssumeCapacity(@backingInt(tags[inst]));
134134 writeUleb128(code, datas[inst].label);
135135
136136 inst += 1;
......@@ -139,7 +139,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
139139
140140 .local_get, .local_set, .local_tee => {
141141 try code.ensureUnusedCapacity(gpa, 11);
142 code.appendAssumeCapacity(@intFromEnum(tags[inst]));
142 code.appendAssumeCapacity(@backingInt(tags[inst]));
143143 writeUleb128(code, datas[inst].local);
144144
145145 inst += 1;
......@@ -151,7 +151,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
151151 const extra = mir.extraData(Mir.JumpTable, extra_index);
152152 const labels = mir.extra[extra.end..][0..extra.data.length];
153153 try code.ensureUnusedCapacity(gpa, 11 + 10 * labels.len);
154 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.br_table));
154 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.br_table));
155155 // -1 because default label is not part of length/depth.
156156 writeUleb128(code, extra.data.length - 1);
157157 for (labels) |label| writeUleb128(code, label);
......@@ -162,7 +162,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
162162
163163 .call_nav => {
164164 try code.ensureUnusedCapacity(gpa, 6);
165 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.call));
165 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.call));
166166 if (is_obj) {
167167 try wasm.out_relocs.append(gpa, .{
168168 .offset = @intCast(code.items.len),
......@@ -190,7 +190,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
190190 target,
191191 ).?;
192192 if (is_obj) {
193 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.call_indirect));
193 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.call_indirect));
194194 try wasm.out_relocs.append(gpa, .{
195195 .offset = @intCast(code.items.len),
196196 .pointee = .{ .type_index = func_ty_index },
......@@ -199,7 +199,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
199199 });
200200 code.appendNTimesAssumeCapacity(0, 5);
201201 } else {
202 const index: Wasm.Flush.FuncTypeIndex = @enumFromInt(wasm.flush_buffer.func_types.getIndex(func_ty_index) orelse {
202 const index: Wasm.Flush.FuncTypeIndex = @fromBackingInt(@intCast(wasm.flush_buffer.func_types.getIndex(func_ty_index) orelse {
203203 // In this case we tried to call a function pointer for
204204 // which the type signature does not match any function
205205 // body or function import in the entire wasm executable.
......@@ -207,12 +207,12 @@ pub fn lowerToCode(emit: *Emit) Error!void {
207207 // Since there is no way to create a reference to a
208208 // function without it being in the function table or
209209 // import table, this instruction is unreachable.
210 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.@"unreachable"));
210 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.@"unreachable"));
211211 inst += 1;
212212 continue :loop tags[inst];
213 });
214 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.call_indirect));
215 writeUleb128(code, @intFromEnum(index));
213 }));
214 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.call_indirect));
215 writeUleb128(code, @backingInt(index));
216216 }
217217 writeUleb128(code, @as(u32, 0)); // table index
218218
......@@ -222,7 +222,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
222222
223223 .call_tag_index => {
224224 try code.ensureUnusedCapacity(gpa, 6);
225 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.call));
225 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.call));
226226 if (is_obj) {
227227 try wasm.out_relocs.append(gpa, .{
228228 .offset = @intCast(code.items.len),
......@@ -242,7 +242,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
242242 .enum_tag_name_table_ref => {
243243 try code.ensureUnusedCapacity(gpa, 11);
244244 const opcode: std.wasm.Opcode = if (is_wasm32) .i32_const else .i64_const;
245 code.appendAssumeCapacity(@intFromEnum(opcode));
245 code.appendAssumeCapacity(@backingInt(opcode));
246246 if (is_obj) {
247247 @panic("TODO");
248248 } else {
......@@ -261,7 +261,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
261261 const symbol_name = try wasm.internString(@tagName(datas[inst].intrinsic));
262262
263263 try code.ensureUnusedCapacity(gpa, 6);
264 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.call));
264 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.call));
265265 if (is_obj) {
266266 try wasm.out_relocs.append(gpa, .{
267267 .offset = @intCast(code.items.len),
......@@ -280,7 +280,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
280280
281281 .global_set_sp => {
282282 try code.ensureUnusedCapacity(gpa, 6);
283 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.global_set));
283 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.global_set));
284284 if (is_obj) {
285285 try wasm.out_relocs.append(gpa, .{
286286 .offset = @intCast(code.items.len),
......@@ -291,7 +291,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
291291 code.appendNTimesAssumeCapacity(0, 5);
292292 } else {
293293 const sp_global: Wasm.GlobalIndex = .stack_pointer;
294 writeUleb128(code, @intFromEnum(sp_global));
294 writeUleb128(code, @backingInt(sp_global));
295295 }
296296
297297 inst += 1;
......@@ -300,7 +300,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
300300
301301 .f32_const => {
302302 try code.ensureUnusedCapacity(gpa, 5);
303 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.f32_const));
303 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.f32_const));
304304 std.mem.writeInt(u32, code.addManyAsArrayAssumeCapacity(4), @bitCast(datas[inst].float32), .little);
305305
306306 inst += 1;
......@@ -309,7 +309,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
309309
310310 .f64_const => {
311311 try code.ensureUnusedCapacity(gpa, 9);
312 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.f64_const));
312 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.f64_const));
313313 const float64 = mir.extraData(Mir.Float64, datas[inst].payload).data;
314314 std.mem.writeInt(u64, code.addManyAsArrayAssumeCapacity(8), float64.toInt(), .little);
315315
......@@ -318,7 +318,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
318318 },
319319 .i32_const => {
320320 try code.ensureUnusedCapacity(gpa, 6);
321 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_const));
321 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i32_const));
322322 writeSleb128(code, datas[inst].imm32);
323323
324324 inst += 1;
......@@ -326,7 +326,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
326326 },
327327 .i64_const => {
328328 try code.ensureUnusedCapacity(gpa, 11);
329 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_const));
329 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i64_const));
330330 const int64: i64 = @bitCast(mir.extraData(Mir.Imm64, datas[inst].payload).data.toInt());
331331 writeSleb128(code, int64);
332332
......@@ -359,7 +359,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
359359 .i64_store32,
360360 => {
361361 try code.ensureUnusedCapacity(gpa, 1 + 20);
362 code.appendAssumeCapacity(@intFromEnum(tags[inst]));
362 code.appendAssumeCapacity(@backingInt(tags[inst]));
363363 encodeMemArg(code, mir.extraData(Mir.MemArg, datas[inst].payload).data);
364364 inst += 1;
365365 continue :loop tags[inst];
......@@ -495,7 +495,7 @@ pub fn lowerToCode(emit: *Emit) Error!void {
495495 .i64_clz,
496496 .i64_ctz,
497497 => {
498 try code.append(gpa, @intFromEnum(tags[inst]));
498 try code.append(gpa, @backingInt(tags[inst]));
499499 inst += 1;
500500 continue :loop tags[inst];
501501 },
......@@ -504,9 +504,9 @@ pub fn lowerToCode(emit: *Emit) Error!void {
504504 try code.ensureUnusedCapacity(gpa, 6 + 6);
505505 const extra_index = datas[inst].payload;
506506 const opcode = mir.extra[extra_index];
507 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.misc_prefix));
507 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.misc_prefix));
508508 writeUleb128(code, opcode);
509 switch (@as(std.wasm.MiscOpcode, @enumFromInt(opcode))) {
509 switch (@as(std.wasm.MiscOpcode, @fromBackingInt(@intCast(opcode)))) {
510510 // bulk-memory opcodes
511511 .data_drop => {
512512 const segment = mir.extra[extra_index + 1];
......@@ -566,9 +566,9 @@ pub fn lowerToCode(emit: *Emit) Error!void {
566566 try code.ensureUnusedCapacity(gpa, 6 + 20);
567567 const extra_index = datas[inst].payload;
568568 const opcode = mir.extra[extra_index];
569 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.simd_prefix));
569 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.simd_prefix));
570570 writeUleb128(code, opcode);
571 switch (@as(std.wasm.SimdOpcode, @enumFromInt(opcode))) {
571 switch (@as(std.wasm.SimdOpcode, @fromBackingInt(@intCast(opcode)))) {
572572 .v128_store,
573573 .v128_load,
574574 .v128_load8_splat,
......@@ -852,9 +852,9 @@ pub fn lowerToCode(emit: *Emit) Error!void {
852852
853853 const extra_index = datas[inst].payload;
854854 const opcode = mir.extra[extra_index];
855 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.atomics_prefix));
855 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.atomics_prefix));
856856 writeUleb128(code, opcode);
857 switch (@as(std.wasm.AtomicsOpcode, @enumFromInt(opcode))) {
857 switch (@as(std.wasm.AtomicsOpcode, @fromBackingInt(@intCast(opcode)))) {
858858 .i32_atomic_load,
859859 .i64_atomic_load,
860860 .i32_atomic_load8_u,
......@@ -958,7 +958,7 @@ fn uavRefObj(wasm: *Wasm, code: *ArrayList(u8), value: InternPool.Index, offset:
958958 const opcode: std.wasm.Opcode = if (is_wasm32) .i32_const else .i64_const;
959959
960960 try code.ensureUnusedCapacity(gpa, 11);
961 code.appendAssumeCapacity(@intFromEnum(opcode));
961 code.appendAssumeCapacity(@backingInt(opcode));
962962
963963 try wasm.out_relocs.append(gpa, .{
964964 .offset = @intCast(code.items.len),
......@@ -975,7 +975,7 @@ fn uavRefExe(wasm: *Wasm, code: *ArrayList(u8), value: InternPool.Index, offset:
975975 const opcode: std.wasm.Opcode = if (is_wasm32) .i32_const else .i64_const;
976976
977977 try code.ensureUnusedCapacity(gpa, 11);
978 code.appendAssumeCapacity(@intFromEnum(opcode));
978 code.appendAssumeCapacity(@backingInt(opcode));
979979
980980 const addr = wasm.uavAddr(value);
981981 writeUleb128(code, @as(u32, @intCast(@as(i64, addr) + offset)));
......@@ -993,7 +993,7 @@ fn navRefOff(wasm: *Wasm, code: *ArrayList(u8), data: Mir.NavRefOff, is_wasm32:
993993 try code.ensureUnusedCapacity(gpa, 11);
994994
995995 const opcode: std.wasm.Opcode = if (is_wasm32) .i32_const else .i64_const;
996 code.appendAssumeCapacity(@intFromEnum(opcode));
996 code.appendAssumeCapacity(@backingInt(opcode));
997997 if (is_obj) {
998998 try wasm.out_relocs.append(gpa, .{
999999 .offset = @intCast(code.items.len),
......@@ -1009,7 +1009,7 @@ fn navRefOff(wasm: *Wasm, code: *ArrayList(u8), data: Mir.NavRefOff, is_wasm32:
10091009}
10101010
10111011fn appendOutputFunctionIndex(code: *ArrayList(u8), i: Wasm.OutputFunctionIndex) void {
1012 writeUleb128(code, @intFromEnum(i));
1012 writeUleb128(code, @backingInt(i));
10131013}
10141014
10151015fn writeUleb128(code: *ArrayList(u8), arg: anytype) void {
src/codegen/wasm/Mir.zig+14-14
......@@ -618,12 +618,12 @@ pub const Inst = struct {
618618
619619 /// From a given wasm opcode, returns a MIR tag.
620620 pub fn fromOpcode(opcode: std.wasm.Opcode) Tag {
621 return @as(Tag, @enumFromInt(@intFromEnum(opcode))); // Given `Opcode` is not present as a tag for MIR yet
621 return @as(Tag, @fromBackingInt(@intCast(@backingInt(opcode)))); // Given `Opcode` is not present as a tag for MIR yet
622622 }
623623
624624 /// Returns a wasm opcode from a given MIR tag.
625625 pub fn toOpcode(self: Tag) std.wasm.Opcode {
626 return @as(std.wasm.Opcode, @enumFromInt(@intFromEnum(self)));
626 return @as(std.wasm.Opcode, @fromBackingInt(@intCast(@backingInt(self))));
627627 }
628628 };
629629
......@@ -690,7 +690,7 @@ pub fn lower(mir: *const Mir, wasm: *Wasm, code: *std.ArrayList(u8)) std.mem.All
690690
691691 for (mir.locals) |local| {
692692 w.writeLeb128(@as(u32, 1)) catch unreachable;
693 w.writeByte(@intFromEnum(local)) catch unreachable;
693 w.writeByte(@backingInt(local)) catch unreachable;
694694 }
695695
696696 // Stack management section of function prologue.
......@@ -698,31 +698,31 @@ pub fn lower(mir: *const Mir, wasm: *Wasm, code: *std.ArrayList(u8)) std.mem.All
698698 if (stack_alignment.toByteUnits()) |align_bytes| {
699699 const sp_global: Wasm.GlobalIndex = .stack_pointer;
700700 // load stack pointer
701 w.writeByte(@intFromEnum(std.wasm.Opcode.global_get)) catch unreachable;
702 w.writeUleb128(@intFromEnum(sp_global)) catch unreachable;
701 w.writeByte(@backingInt(std.wasm.Opcode.global_get)) catch unreachable;
702 w.writeUleb128(@backingInt(sp_global)) catch unreachable;
703703 // store stack pointer so we can restore it when we return from the function
704 w.writeByte(@intFromEnum(std.wasm.Opcode.local_tee)) catch unreachable;
704 w.writeByte(@backingInt(std.wasm.Opcode.local_tee)) catch unreachable;
705705 w.writeUleb128(mir.prologue.sp_local) catch unreachable;
706706 // get the total stack size
707707 const aligned_stack: i32 = @intCast(stack_alignment.forward(mir.prologue.stack_size));
708 w.writeByte(@intFromEnum(std.wasm.Opcode.i32_const)) catch unreachable;
708 w.writeByte(@backingInt(std.wasm.Opcode.i32_const)) catch unreachable;
709709 w.writeSleb128(aligned_stack) catch unreachable;
710710 // subtract it from the current stack pointer
711 w.writeByte(@intFromEnum(std.wasm.Opcode.i32_sub)) catch unreachable;
711 w.writeByte(@backingInt(std.wasm.Opcode.i32_sub)) catch unreachable;
712712 // Get negative stack alignment
713713 const neg_stack_align = @as(i32, @intCast(align_bytes)) * -1;
714 w.writeByte(@intFromEnum(std.wasm.Opcode.i32_const)) catch unreachable;
714 w.writeByte(@backingInt(std.wasm.Opcode.i32_const)) catch unreachable;
715715 w.writeSleb128(neg_stack_align) catch unreachable;
716716 // Bitwise-and the value to get the new stack pointer to ensure the
717717 // pointers are aligned with the abi alignment.
718 w.writeByte(@intFromEnum(std.wasm.Opcode.i32_and)) catch unreachable;
718 w.writeByte(@backingInt(std.wasm.Opcode.i32_and)) catch unreachable;
719719 // The bottom will be used to calculate all stack pointer offsets.
720 w.writeByte(@intFromEnum(std.wasm.Opcode.local_tee)) catch unreachable;
720 w.writeByte(@backingInt(std.wasm.Opcode.local_tee)) catch unreachable;
721721 w.writeUleb128(mir.prologue.bottom_stack_local) catch unreachable;
722722 // Store the current stack pointer value into the global stack pointer so other function calls will
723723 // start from this value instead and not overwrite the current stack.
724 w.writeByte(@intFromEnum(std.wasm.Opcode.global_set)) catch unreachable;
725 w.writeUleb128(@intFromEnum(sp_global)) catch unreachable;
724 w.writeByte(@backingInt(std.wasm.Opcode.global_set)) catch unreachable;
725 w.writeUleb128(@backingInt(sp_global)) catch unreachable;
726726 }
727727
728728 code.items.len += w.end;
......@@ -747,7 +747,7 @@ pub fn extraData(self: *const Mir, comptime T: type, index: usize) struct { data
747747 Wasm.UavsExeIndex,
748748 InternPool.Nav.Index,
749749 InternPool.Index,
750 => @enumFromInt(self.extra[i]),
750 => @fromBackingInt(@intCast(self.extra[i])),
751751 else => @compileError("Unsupported field type " ++ @typeName(field_type)),
752752 };
753753 i += 1;
src/codegen/x86_64/CodeGen.zig+250-250
......@@ -85,7 +85,7 @@ pub fn legalizeFeatures(_: *const std.Target) *const Air.Legalize.Features {
8585/// https://github.com/ziglang/zig/issues/22419
8686const hack_around_sema_opv_bugs = true;
8787
88const err_ret_trace_index: Air.Inst.Index = @enumFromInt(std.math.maxInt(u32));
88const err_ret_trace_index: Air.Inst.Index = @fromBackingInt(@intCast(std.math.maxInt(u32)));
8989
9090gpa: Allocator,
9191pt: Zcu.PerThread,
......@@ -165,7 +165,7 @@ loop_switches: std.AutoHashMapUnmanaged(Air.Inst.Index, struct {
165165 },
166166}) = .empty,
167167
168next_temp_index: Temp.Index = @enumFromInt(0),
168next_temp_index: Temp.Index = @fromBackingInt(@intCast(0)),
169169temp_type: [Temp.Index.max]Type = undefined,
170170
171171const MaskInfo = packed struct {
......@@ -616,14 +616,14 @@ pub const MCValue = union(enum) {
616616 }),
617617 .load_frame => |pl| try w.print("[{f} + 0x{x}]", .{ pl.index, pl.off }),
618618 .lea_frame => |pl| try w.print("{f} + 0x{x}", .{ pl.index, pl.off }),
619 .load_nav => |pl| try w.print("[nav:{d}]", .{@intFromEnum(pl)}),
620 .lea_nav => |pl| try w.print("nav:{d}", .{@intFromEnum(pl)}),
621 .load_uav => |pl| try w.print("[uav:{d}]", .{@intFromEnum(pl.val)}),
622 .lea_uav => |pl| try w.print("uav:{d}", .{@intFromEnum(pl.val)}),
623 .load_lazy_sym => |pl| try w.print("[lazy:{s}:{d}]", .{ @tagName(pl.kind), @intFromEnum(pl.ty) }),
624 .lea_lazy_sym => |pl| try w.print("lazy:{s}:{d}", .{ @tagName(pl.kind), @intFromEnum(pl.ty) }),
625 .load_extern_func => |pl| try w.print("[extern:{d}]", .{@intFromEnum(pl)}),
626 .lea_extern_func => |pl| try w.print("extern:{d}", .{@intFromEnum(pl)}),
619 .load_nav => |pl| try w.print("[nav:{d}]", .{@backingInt(pl)}),
620 .lea_nav => |pl| try w.print("nav:{d}", .{@backingInt(pl)}),
621 .load_uav => |pl| try w.print("[uav:{d}]", .{@backingInt(pl.val)}),
622 .lea_uav => |pl| try w.print("uav:{d}", .{@backingInt(pl.val)}),
623 .load_lazy_sym => |pl| try w.print("[lazy:{s}:{d}]", .{ @tagName(pl.kind), @backingInt(pl.ty) }),
624 .lea_lazy_sym => |pl| try w.print("lazy:{s}:{d}", .{ @tagName(pl.kind), @backingInt(pl.ty) }),
625 .load_extern_func => |pl| try w.print("[extern:{d}]", .{@backingInt(pl)}),
626 .lea_extern_func => |pl| try w.print("extern:{d}", .{@backingInt(pl)}),
627627 .register_tee => |pl| try w.print("tee:{s}:{s}", .{ @tagName(pl[1]), @tagName(pl[0]) }),
628628 .elementwise_gpr => |pl| try w.print("elementwise:gpr{d}:[{f} + 0x{x}]", .{
629629 pl.info.reg_index, pl.frame_index, pl.info.frame_off,
......@@ -641,7 +641,7 @@ pub const MCValue = union(enum) {
641641 pl.info.reg_index, pl.frame_index, pl.info.frame_off,
642642 }),
643643 .reserved_frame => |pl| try w.print("(dead:{f})", .{pl}),
644 .air_ref => |pl| try w.print("(air:0x{x})", .{@intFromEnum(pl)}),
644 .air_ref => |pl| try w.print("(air:0x{x})", .{@backingInt(pl)}),
645645 }
646646 }
647647};
......@@ -1011,7 +1011,7 @@ pub fn generate(
10111011 }
10121012 try function.inst_tracking.ensureTotalCapacity(gpa, Temp.Index.max);
10131013 for (0..Temp.Index.max) |temp_index| {
1014 const temp: Temp.Index = @enumFromInt(temp_index);
1014 const temp: Temp.Index = @fromBackingInt(@intCast(temp_index));
10151015 function.inst_tracking.putAssumeCapacityNoClobber(temp.toIndex(), .init(.none));
10161016 }
10171017
......@@ -1019,11 +1019,11 @@ pub fn generate(
10191019
10201020 try function.frame_allocs.resize(gpa, FrameIndex.named_count);
10211021 function.frame_allocs.set(
1022 @intFromEnum(FrameIndex.stack_frame),
1022 @backingInt(FrameIndex.stack_frame),
10231023 .init(.{ .size = 0, .alignment = .@"1" }),
10241024 );
10251025 function.frame_allocs.set(
1026 @intFromEnum(FrameIndex.call_frame),
1026 @backingInt(FrameIndex.call_frame),
10271027 .init(.{ .size = 0, .alignment = .@"1" }),
10281028 );
10291029
......@@ -1034,18 +1034,18 @@ pub fn generate(
10341034 function.args = call_info.args;
10351035 function.ret_mcv = call_info.return_value;
10361036 function.err_ret_trace_reg = call_info.err_ret_trace_reg;
1037 function.frame_allocs.set(@intFromEnum(FrameIndex.ret_addr), .init(.{
1037 function.frame_allocs.set(@backingInt(FrameIndex.ret_addr), .init(.{
10381038 .size = Type.usize.abiSize(zcu),
10391039 .alignment = Type.usize.abiAlignment(zcu).min(call_info.stack_align),
10401040 }));
1041 function.frame_allocs.set(@intFromEnum(FrameIndex.base_ptr), .init(.{
1041 function.frame_allocs.set(@backingInt(FrameIndex.base_ptr), .init(.{
10421042 .size = Type.usize.abiSize(zcu),
10431043 .alignment = call_info.stack_align.min(
10441044 .fromNonzeroByteUnits(function.target.stackAlignment()),
10451045 ),
10461046 }));
10471047 function.frame_allocs.set(
1048 @intFromEnum(FrameIndex.args_frame),
1048 @backingInt(FrameIndex.args_frame),
10491049 .init(.{
10501050 .size = call_info.stack_byte_count,
10511051 .alignment = call_info.stack_align,
......@@ -1148,7 +1148,7 @@ pub fn generateLazy(
11481148 }
11491149 try function.inst_tracking.ensureTotalCapacity(gpa, Temp.Index.max);
11501150 for (0..Temp.Index.max) |temp_index| {
1151 const temp: Temp.Index = @enumFromInt(temp_index);
1151 const temp: Temp.Index = @fromBackingInt(@intCast(temp_index));
11521152 function.inst_tracking.putAssumeCapacityNoClobber(temp.toIndex(), .init(.none));
11531153 }
11541154
......@@ -1313,7 +1313,7 @@ fn addExtraAssumeCapacity(self: *CodeGen, extra: anytype) u32 {
13131313 self.mir_extra.appendAssumeCapacity(switch (field_type) {
13141314 u32 => @field(extra, field_name),
13151315 i32, Mir.Memory.Info => @bitCast(@field(extra, field_name)),
1316 FrameIndex => @intFromEnum(@field(extra, field_name)),
1316 FrameIndex => @backingInt(@field(extra, field_name)),
13171317 else => @compileError("bad field type: " ++ field_name ++ ": " ++ @typeName(field_type)),
13181318 });
13191319 }
......@@ -1333,7 +1333,7 @@ fn addString(cg: *CodeGen, string: []const u8) Allocator.Error!Mir.NullTerminate
13331333 cg.mir_string_bytes.appendSliceAssumeCapacity(string);
13341334 cg.mir_string_bytes.appendAssumeCapacity(0);
13351335 }
1336 return @enumFromInt(mir_string_gop.key_ptr.*);
1336 return @fromBackingInt(@intCast(mir_string_gop.key_ptr.*));
13371337}
13381338
13391339fn asmOps(self: *CodeGen, tag: Mir.Inst.FixedTag, ops: [4]Operand) !void {
......@@ -2392,13 +2392,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
23922392
23932393 cg.reused_operands = .empty;
23942394 try cg.inst_tracking.ensureUnusedCapacity(cg.gpa, 1);
2395 switch (air_tags[@intFromEnum(inst)]) {
2395 switch (air_tags[@backingInt(inst)]) {
23962396 .select => try cg.airSelect(inst),
23972397 .shuffle_one, .shuffle_two => @panic("x86_64 TODO: shuffle_one/shuffle_two"),
23982398
23992399 .arg => try cg.airArg(inst),
24002400 .add, .add_optimized, .add_wrap => |air_tag| {
2401 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
2401 const bin_op = air_datas[@backingInt(inst)].bin_op;
24022402 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
24032403 var res: [1]Temp = undefined;
24042404 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -4560,7 +4560,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
45604560 },
45614561 .add_safe => unreachable,
45624562 .add_sat => |air_tag| {
4563 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
4563 const bin_op = air_datas[@backingInt(inst)].bin_op;
45644564 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
45654565 var res: [1]Temp = undefined;
45664566 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -13124,7 +13124,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1312413124 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
1312513125 },
1312613126 .sub, .sub_optimized, .sub_wrap => |air_tag| {
13127 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
13127 const bin_op = air_datas[@backingInt(inst)].bin_op;
1312813128 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
1312913129 var res: [1]Temp = undefined;
1313013130 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -15311,7 +15311,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1531115311 },
1531215312 .sub_safe => unreachable,
1531315313 .sub_sat => |air_tag| {
15314 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
15314 const bin_op = air_datas[@backingInt(inst)].bin_op;
1531515315 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
1531615316 var res: [1]Temp = undefined;
1531715317 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -22145,7 +22145,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2214522145 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
2214622146 },
2214722147 .mul, .mul_optimized => |air_tag| {
22148 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
22148 const bin_op = air_datas[@backingInt(inst)].bin_op;
2214922149 const ty = cg.typeOf(bin_op.lhs);
2215022150 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
2215122151 var res: [1]Temp = undefined;
......@@ -25083,7 +25083,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2508325083 },
2508425084 .mul_safe => unreachable,
2508525085 .mul_wrap => |air_tag| {
25086 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
25086 const bin_op = air_datas[@backingInt(inst)].bin_op;
2508725087 const ty = cg.typeOf(bin_op.lhs);
2508825088 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
2508925089 var res: [1]Temp = undefined;
......@@ -26888,7 +26888,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2688826888 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
2688926889 },
2689026890 .mul_sat => |air_tag| {
26891 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
26891 const bin_op = air_datas[@backingInt(inst)].bin_op;
2689226892 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
2689326893 var res: [1]Temp = undefined;
2689426894 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -32105,7 +32105,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3210532105 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
3210632106 },
3210732107 .div_float, .div_float_optimized, .div_exact, .div_exact_optimized => |air_tag| {
32108 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
32108 const bin_op = air_datas[@backingInt(inst)].bin_op;
3210932109 const ty = cg.typeOf(bin_op.lhs);
3211032110 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
3211132111 var res: [1]Temp = undefined;
......@@ -33343,7 +33343,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3334333343 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
3334433344 },
3334533345 .div_trunc => |air_tag| {
33346 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
33346 const bin_op = air_datas[@backingInt(inst)].bin_op;
3334733347 const ty = cg.typeOf(bin_op.lhs);
3334833348 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
3334933349 var res: [1]Temp = undefined;
......@@ -34800,7 +34800,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3480034800 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
3480134801 },
3480234802 .div_trunc_optimized, .div_floor_optimized => |air_tag| {
34803 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
34803 const bin_op = air_datas[@backingInt(inst)].bin_op;
3480434804 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
3480534805 var res: [1]Temp = undefined;
3480634806 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, switch (@as(bits.RoundMode.Direction, switch (air_tag) {
......@@ -36361,7 +36361,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3636136361 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
3636236362 },
3636336363 .div_floor => |air_tag| {
36364 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
36364 const bin_op = air_datas[@backingInt(inst)].bin_op;
3636536365 const ty = cg.typeOf(bin_op.lhs);
3636636366 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
3636736367 var res: [1]Temp = undefined;
......@@ -38053,7 +38053,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3805338053 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
3805438054 },
3805538055 .rem, .rem_optimized => |air_tag| {
38056 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
38056 const bin_op = air_datas[@backingInt(inst)].bin_op;
3805738057 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
3805838058 var res: [1]Temp = undefined;
3805938059 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -39835,7 +39835,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
3983539835 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
3983639836 },
3983739837 .mod, .mod_optimized => |air_tag| {
39838 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
39838 const bin_op = air_datas[@backingInt(inst)].bin_op;
3983939839 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
3984039840 var res: [1]Temp = undefined;
3984139841 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -43348,7 +43348,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4334843348 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
4334943349 },
4335043350 .ptr_add => |air_tag| {
43351 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
43351 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
4335243352 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
4335343353 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
4335443354 try ops[0].toSlicePtr(cg);
......@@ -43462,7 +43462,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4346243462 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
4346343463 },
4346443464 .ptr_sub => |air_tag| {
43465 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
43465 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
4346643466 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
4346743467 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
4346843468 try ops[0].toSlicePtr(cg);
......@@ -43591,7 +43591,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4359143591 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
4359243592 },
4359343593 .max => |air_tag| {
43594 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
43594 const bin_op = air_datas[@backingInt(inst)].bin_op;
4359543595 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
4359643596 var res: [1]Temp = undefined;
4359743597 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -47900,7 +47900,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4790047900 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
4790147901 },
4790247902 .min => |air_tag| {
47903 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
47903 const bin_op = air_datas[@backingInt(inst)].bin_op;
4790447904 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
4790547905 var res: [1]Temp = undefined;
4790647906 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -52203,7 +52203,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5220352203 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
5220452204 },
5220552205 .add_with_overflow => |air_tag| {
52206 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
52206 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
5220752207 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
5220852208 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
5220952209 var res: [2]Temp = undefined;
......@@ -53053,7 +53053,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5305353053 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
5305453054 },
5305553055 .sub_with_overflow => |air_tag| {
53056 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
53056 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
5305753057 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
5305853058 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
5305953059 var res: [2]Temp = undefined;
......@@ -53958,7 +53958,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5395853958 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
5395953959 },
5396053960 .mul_with_overflow => |air_tag| {
53961 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
53961 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
5396253962 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
5396353963 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
5396453964 var res: [2]Temp = undefined;
......@@ -57555,7 +57555,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5755557555 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
5755657556 },
5755757557 .shl_with_overflow => |air_tag| {
57558 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
57558 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
5755957559 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
5756057560 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
5756157561 var res: [2]Temp = undefined;
......@@ -60900,7 +60900,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6090060900 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
6090160901 },
6090260902 .alloc => {
60903 const ty = air_datas[@intFromEnum(inst)].ty;
60903 const ty = air_datas[@backingInt(inst)].ty;
6090460904 const slot = try cg.tempInit(ty, .{ .lea_frame = .{
6090560905 .index = try cg.allocMemPtr(inst),
6090660906 } });
......@@ -60908,7 +60908,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6090860908 },
6090960909 .inferred_alloc, .inferred_alloc_comptime => unreachable,
6091060910 .ret_ptr => {
60911 const ty = air_datas[@intFromEnum(inst)].ty;
60911 const ty = air_datas[@backingInt(inst)].ty;
6091260912 var slot = switch (cg.ret_mcv.long) {
6091360913 else => unreachable,
6091460914 .none => try cg.tempInit(ty, .{ .lea_frame = .{
......@@ -60924,7 +60924,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6092460924 },
6092560925 .assembly => try cg.airAsm(inst),
6092660926 .bit_and, .bit_or, .xor => |air_tag| {
60927 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
60927 const bin_op = air_datas[@backingInt(inst)].bin_op;
6092860928 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
6092960929 var res: [1]Temp = undefined;
6093060930 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, switch (@as(Mir.Inst.Tag, switch (air_tag) {
......@@ -61294,7 +61294,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6129461294 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
6129561295 },
6129661296 .shr, .shr_exact => |air_tag| {
61297 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
61297 const bin_op = air_datas[@backingInt(inst)].bin_op;
6129861298 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
6129961299 var res: [1]Temp = undefined;
6130061300 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -61858,7 +61858,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6185861858 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
6185961859 },
6186061860 .shl, .shl_exact => |air_tag| {
61861 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
61861 const bin_op = air_datas[@backingInt(inst)].bin_op;
6186261862 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
6186361863 var res: [1]Temp = undefined;
6186461864 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -62232,7 +62232,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6223262232 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
6223362233 },
6223462234 .shl_sat => |air_tag| {
62235 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
62235 const bin_op = air_datas[@backingInt(inst)].bin_op;
6223662236 const lhs_ty = cg.typeOf(bin_op.lhs);
6223762237 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
6223862238 var res: [1]Temp = undefined;
......@@ -65655,7 +65655,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6565565655 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
6565665656 },
6565765657 .not => |air_tag| {
65658 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
65658 const ty_op = air_datas[@backingInt(inst)].ty_op;
6565965659 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
6566065660 var res: [1]Temp = undefined;
6566165661 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -67464,7 +67464,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6746467464 try cg.genBodyBlock(block.body);
6746567465 },
6746667466 .repeat => {
67467 const repeat = air_datas[@intFromEnum(inst)].repeat;
67467 const repeat = air_datas[@backingInt(inst)].repeat;
6746867468 const loop = cg.loops.get(repeat.loop_inst).?;
6746967469 try cg.restoreState(loop.state, &.{}, .{
6747067470 .emit_instructions = true,
......@@ -67495,7 +67495,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6749567495 .call_never_tail => try cg.airCall(inst, .never_tail, .{ .safety = true }),
6749667496 .call_never_inline => try cg.airCall(inst, .never_inline, .{ .safety = true }),
6749767497 .clz => |air_tag| {
67498 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
67498 const ty_op = air_datas[@backingInt(inst)].ty_op;
6749967499 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
6750067500 var res: [1]Temp = undefined;
6750167501 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -70600,7 +70600,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7060070600 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
7060170601 },
7060270602 .ctz => |air_tag| {
70603 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
70603 const ty_op = air_datas[@backingInt(inst)].ty_op;
7060470604 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
7060570605 var res: [1]Temp = undefined;
7060670606 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -70997,7 +70997,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7099770997 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
7099870998 },
7099970999 .popcount => |air_tag| {
71000 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
71000 const ty_op = air_datas[@backingInt(inst)].ty_op;
7100171001 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
7100271002 var res: [1]Temp = undefined;
7100371003 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -71885,7 +71885,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7188571885 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
7188671886 },
7188771887 .byte_swap => |air_tag| {
71888 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
71888 const ty_op = air_datas[@backingInt(inst)].ty_op;
7188971889 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
7189071890 var res: [1]Temp = undefined;
7189171891 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -72534,7 +72534,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7253472534 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
7253572535 },
7253672536 .bit_reverse => |air_tag| {
72537 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
72537 const ty_op = air_datas[@backingInt(inst)].ty_op;
7253872538 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
7253972539 var res: [1]Temp = undefined;
7254072540 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -75636,7 +75636,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7563675636 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
7563775637 },
7563875638 .sqrt => |air_tag| {
75639 const un_op = air_datas[@intFromEnum(inst)].un_op;
75639 const un_op = air_datas[@backingInt(inst)].un_op;
7564075640 var ops = try cg.tempsFromOperands(inst, .{un_op});
7564175641 var res: [1]Temp = undefined;
7564275642 cg.select(&res, &.{cg.typeOf(un_op)}, &ops, comptime &.{ .{
......@@ -76698,7 +76698,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7669876698 try res[0].finish(inst, &.{un_op}, &ops, cg);
7669976699 },
7670076700 .sin, .cos, .tan, .exp, .exp2, .log, .log2, .log10, .round => |air_tag| {
76701 const un_op = air_datas[@intFromEnum(inst)].un_op;
76701 const un_op = air_datas[@backingInt(inst)].un_op;
7670276702 var ops = try cg.tempsFromOperands(inst, .{un_op});
7670376703 var res: [1]Temp = undefined;
7670476704 cg.select(&res, &.{cg.typeOf(un_op)}, &ops, switch (air_tag) {
......@@ -77548,7 +77548,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7754877548 try res[0].finish(inst, &.{un_op}, &ops, cg);
7754977549 },
7755077550 .abs => |air_tag| {
77551 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
77551 const ty_op = air_datas[@backingInt(inst)].ty_op;
7755277552 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
7755377553 var res: [1]Temp = undefined;
7755477554 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -79099,7 +79099,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7909979099 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
7910079100 },
7910179101 .floor, .ceil, .trunc_float => |air_tag| {
79102 const un_op = air_datas[@intFromEnum(inst)].un_op;
79102 const un_op = air_datas[@backingInt(inst)].un_op;
7910379103 var ops = try cg.tempsFromOperands(inst, .{un_op});
7910479104 var res: [1]Temp = undefined;
7910579105 cg.select(&res, &.{cg.typeOf(un_op)}, &ops, switch (@as(bits.RoundMode.Direction, switch (air_tag) {
......@@ -80435,7 +80435,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8043580435 try res[0].finish(inst, &.{un_op}, &ops, cg);
8043680436 },
8043780437 .neg, .neg_optimized => |air_tag| {
80438 const un_op = air_datas[@intFromEnum(inst)].un_op;
80438 const un_op = air_datas[@backingInt(inst)].un_op;
8043980439 var ops = try cg.tempsFromOperands(inst, .{un_op});
8044080440 var res: [1]Temp = undefined;
8044180441 cg.select(&res, &.{cg.typeOf(un_op)}, &ops, comptime &.{ .{
......@@ -80983,7 +80983,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8098380983 .cmp_gt,
8098480984 .cmp_gt_optimized,
8098580985 => |air_tag| {
80986 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
80986 const bin_op = air_datas[@backingInt(inst)].bin_op;
8098780987 const cmp_op = air_tag.toCmpOp().?;
8098880988 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
8098980989 var res: [1]Temp = undefined;
......@@ -81460,7 +81460,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8146081460 .cmp_neq,
8146181461 .cmp_neq_optimized,
8146281462 => |air_tag| {
81463 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
81463 const bin_op = air_datas[@backingInt(inst)].bin_op;
8146481464 const cmp_op = air_tag.toCmpOp().?;
8146581465 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
8146681466 const ty = cg.typeOf(bin_op.lhs);
......@@ -82059,7 +82059,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8205982059 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
8206082060 },
8206182061 .cmp_vector, .cmp_vector_optimized => |air_tag| {
82062 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
82062 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
8206382063 const vector_cmp = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data;
8206482064 var ops = try cg.tempsFromOperands(inst, .{ vector_cmp.lhs, vector_cmp.rhs });
8206582065 var res: [1]Temp = undefined;
......@@ -89128,7 +89128,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8912889128 .@"try", .try_cold => try cg.airTry(inst),
8912989129 .try_ptr, .try_ptr_cold => try cg.airTryPtr(inst),
8913089130 .dbg_stmt => if (!cg.mod.strip) {
89131 const dbg_stmt = air_datas[@intFromEnum(inst)].dbg_stmt;
89131 const dbg_stmt = air_datas[@backingInt(inst)].dbg_stmt;
8913289132 _ = try cg.addInst(.{
8913389133 .tag = .pseudo,
8913489134 .ops = .pseudo_dbg_line_stmt_line_column,
......@@ -89164,8 +89164,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8916489164 });
8916589165 },
8916689166 .dbg_var_ptr, .dbg_var_val, .dbg_arg_inline => |air_tag| if (!cg.mod.strip) {
89167 const pl_op = air_datas[@intFromEnum(inst)].pl_op;
89168 const air_name: Air.NullTerminatedString = @enumFromInt(pl_op.payload);
89167 const pl_op = air_datas[@backingInt(inst)].pl_op;
89168 const air_name: Air.NullTerminatedString = @fromBackingInt(@intCast(pl_op.payload));
8916989169 const op_ty = cg.typeOf(pl_op.operand);
8917089170 const local_ty = switch (air_tag) {
8917189171 else => unreachable,
......@@ -89202,7 +89202,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8920289202 try ops[0].die(cg);
8920389203 },
8920489204 .is_null => {
89205 const un_op = air_datas[@intFromEnum(inst)].un_op;
89205 const un_op = air_datas[@backingInt(inst)].un_op;
8920689206 const opt_ty = cg.typeOf(un_op);
8920789207 const opt_repr_is_pl = opt_ty.optionalReprIsPayload(zcu);
8920889208 const opt_child_ty = opt_ty.optionalChild(zcu);
......@@ -89227,7 +89227,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8922789227 try is_null.finish(inst, &.{un_op}, &ops, cg);
8922889228 },
8922989229 .is_non_null => {
89230 const un_op = air_datas[@intFromEnum(inst)].un_op;
89230 const un_op = air_datas[@backingInt(inst)].un_op;
8923189231 const opt_ty = cg.typeOf(un_op);
8923289232 const opt_repr_is_pl = opt_ty.optionalReprIsPayload(zcu);
8923389233 const opt_child_ty = opt_ty.optionalChild(zcu);
......@@ -89252,7 +89252,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8925289252 try is_non_null.finish(inst, &.{un_op}, &ops, cg);
8925389253 },
8925489254 .is_null_ptr => {
89255 const un_op = air_datas[@intFromEnum(inst)].un_op;
89255 const un_op = air_datas[@backingInt(inst)].un_op;
8925689256 const opt_ty = cg.typeOf(un_op).childType(zcu);
8925789257 const opt_repr_is_pl = opt_ty.optionalReprIsPayload(zcu);
8925889258 const opt_child_ty = opt_ty.optionalChild(zcu);
......@@ -89275,7 +89275,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8927589275 try is_null.finish(inst, &.{un_op}, &ops, cg);
8927689276 },
8927789277 .is_non_null_ptr => {
89278 const un_op = air_datas[@intFromEnum(inst)].un_op;
89278 const un_op = air_datas[@backingInt(inst)].un_op;
8927989279 const opt_ty = cg.typeOf(un_op).childType(zcu);
8928089280 const opt_repr_is_pl = opt_ty.optionalReprIsPayload(zcu);
8928189281 const opt_child_ty = opt_ty.optionalChild(zcu);
......@@ -89298,7 +89298,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8929889298 try is_non_null.finish(inst, &.{un_op}, &ops, cg);
8929989299 },
8930089300 .is_err => {
89301 const un_op = air_datas[@intFromEnum(inst)].un_op;
89301 const un_op = air_datas[@backingInt(inst)].un_op;
8930289302 const eu_ty = cg.typeOf(un_op);
8930389303 const eu_err_ty = eu_ty.errorUnionSet(zcu);
8930489304 const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
......@@ -89314,7 +89314,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8931489314 try is_err.finish(inst, &.{un_op}, &ops, cg);
8931589315 },
8931689316 .is_non_err => {
89317 const un_op = air_datas[@intFromEnum(inst)].un_op;
89317 const un_op = air_datas[@backingInt(inst)].un_op;
8931889318 const eu_ty = cg.typeOf(un_op);
8931989319 const eu_err_ty = eu_ty.errorUnionSet(zcu);
8932089320 const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
......@@ -89330,7 +89330,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8933089330 try is_non_err.finish(inst, &.{un_op}, &ops, cg);
8933189331 },
8933289332 .is_err_ptr => {
89333 const un_op = air_datas[@intFromEnum(inst)].un_op;
89333 const un_op = air_datas[@backingInt(inst)].un_op;
8933489334 const eu_ty = cg.typeOf(un_op).childType(zcu);
8933589335 const eu_err_ty = eu_ty.errorUnionSet(zcu);
8933689336 const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
......@@ -89346,7 +89346,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8934689346 try is_err.finish(inst, &.{un_op}, &ops, cg);
8934789347 },
8934889348 .is_non_err_ptr => {
89349 const un_op = air_datas[@intFromEnum(inst)].un_op;
89349 const un_op = air_datas[@backingInt(inst)].un_op;
8935089350 const eu_ty = cg.typeOf(un_op).childType(zcu);
8935189351 const eu_err_ty = eu_ty.errorUnionSet(zcu);
8935289352 const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
......@@ -89362,7 +89362,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8936289362 try is_non_err.finish(inst, &.{un_op}, &ops, cg);
8936389363 },
8936489364 .load => {
89365 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
89365 const ty_op = air_datas[@backingInt(inst)].ty_op;
8936689366 const val_ty = ty_op.ty.toType();
8936789367 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
8936889368 var res: [1]Temp = undefined;
......@@ -89414,7 +89414,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8941489414 error.SelectFailed => res[0] = try ops[0].load(val_ty, .{
8941589415 .disp = switch (cg.typeOf(ty_op.operand).ptrInfo(zcu).flags.vector_index) {
8941689416 .none => 0,
89417 else => |vector_index| @intCast(val_ty.abiSize(zcu) * @intFromEnum(vector_index)),
89417 else => |vector_index| @intCast(val_ty.abiSize(zcu) * @backingInt(vector_index)),
8941889418 },
8941989419 }, cg),
8942089420 else => |e| return e,
......@@ -89425,7 +89425,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8942589425 .ret_safe => try cg.airRet(inst, true),
8942689426 .ret_load => try cg.airRetLoad(inst),
8942789427 .store, .store_safe => |air_tag| {
89428 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
89428 const bin_op = air_datas[@backingInt(inst)].bin_op;
8942989429 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
8943089430 switch (ops[1].tracking(cg).short) {
8943189431 else => {},
......@@ -89675,7 +89675,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8967589675 error.SelectFailed => try ops[0].store(&ops[1], .{
8967689676 .disp = switch (cg.typeOf(bin_op.lhs).ptrInfo(zcu).flags.vector_index) {
8967789677 .none => 0,
89678 else => |vector_index| @intCast(cg.typeOf(bin_op.rhs).abiSize(zcu) * @intFromEnum(vector_index)),
89678 else => |vector_index| @intCast(cg.typeOf(bin_op.rhs).abiSize(zcu) * @backingInt(vector_index)),
8967989679 },
8968089680 .safe = switch (air_tag) {
8968189681 else => unreachable,
......@@ -89689,7 +89689,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8968989689 },
8969089690 .unreach => {},
8969189691 .fptrunc => |air_tag| {
89692 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
89692 const ty_op = air_datas[@backingInt(inst)].ty_op;
8969389693 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
8969489694 var res: [1]Temp = undefined;
8969589695 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -91714,7 +91714,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9171491714 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
9171591715 },
9171691716 .fpext => |air_tag| {
91717 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
91717 const ty_op = air_datas[@backingInt(inst)].ty_op;
9171891718 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
9171991719 var res: [1]Temp = undefined;
9172091720 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -93389,7 +93389,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9338993389 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
9339093390 },
9339193391 .int_cast => |air_tag| {
93392 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
93392 const ty_op = air_datas[@backingInt(inst)].ty_op;
9339393393 const dst_ty = ty_op.ty.toType();
9339493394 const src_ty = cg.typeOf(ty_op.operand);
9339593395 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
......@@ -98148,7 +98148,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9814898148 },
9814998149 .int_cast_safe => unreachable,
9815098150 .trunc => |air_tag| {
98151 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
98151 const ty_op = air_datas[@backingInt(inst)].ty_op;
9815298152 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
9815398153 var res: [1]Temp = undefined;
9815498154 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -103813,7 +103813,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103813103813 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
103814103814 },
103815103815 .optional_payload => {
103816 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103816 const ty_op = air_datas[@backingInt(inst)].ty_op;
103817103817 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
103818103818 const pl = if (!hack_around_sema_opv_bugs or ty_op.ty.toType().hasRuntimeBits(zcu))
103819103819 try ops[0].read(ty_op.ty.toType(), .{}, cg)
......@@ -103822,12 +103822,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103822103822 try pl.finish(inst, &.{ty_op.operand}, &ops, cg);
103823103823 },
103824103824 .optional_payload_ptr => {
103825 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103825 const ty_op = air_datas[@backingInt(inst)].ty_op;
103826103826 const ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
103827103827 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
103828103828 },
103829103829 .optional_payload_ptr_set => {
103830 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103830 const ty_op = air_datas[@backingInt(inst)].ty_op;
103831103831 const opt_ty = cg.typeOf(ty_op.operand).childType(zcu);
103832103832 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
103833103833 if (!opt_ty.optionalReprIsPayload(zcu)) {
......@@ -103842,7 +103842,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103842103842 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
103843103843 },
103844103844 .wrap_optional => {
103845 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103845 const ty_op = air_datas[@backingInt(inst)].ty_op;
103846103846 const opt_ty = ty_op.ty.toType();
103847103847 const opt_pl_ty = cg.typeOf(ty_op.operand);
103848103848 const opt_pl_abi_size: u31 = @intCast(opt_pl_ty.abiSize(zcu));
......@@ -103857,7 +103857,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103857103857 try opt.finish(inst, &.{ty_op.operand}, &ops, cg);
103858103858 },
103859103859 .unwrap_errunion_payload => {
103860 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103860 const ty_op = air_datas[@backingInt(inst)].ty_op;
103861103861 const eu_pl_ty = ty_op.ty.toType();
103862103862 const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
103863103863 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
......@@ -103868,7 +103868,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103868103868 try pl.finish(inst, &.{ty_op.operand}, &ops, cg);
103869103869 },
103870103870 .unwrap_errunion_err => {
103871 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103871 const ty_op = air_datas[@backingInt(inst)].ty_op;
103872103872 const eu_ty = cg.typeOf(ty_op.operand);
103873103873 const eu_err_ty = ty_op.ty.toType();
103874103874 const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
......@@ -103878,7 +103878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103878103878 try err.finish(inst, &.{ty_op.operand}, &ops, cg);
103879103879 },
103880103880 .unwrap_errunion_payload_ptr => {
103881 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103881 const ty_op = air_datas[@backingInt(inst)].ty_op;
103882103882 const eu_ty = cg.typeOf(ty_op.operand).childType(zcu);
103883103883 const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
103884103884 const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
......@@ -103887,7 +103887,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103887103887 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
103888103888 },
103889103889 .unwrap_errunion_err_ptr => {
103890 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103890 const ty_op = air_datas[@backingInt(inst)].ty_op;
103891103891 const eu_ty = cg.typeOf(ty_op.operand).childType(zcu);
103892103892 const eu_err_ty = ty_op.ty.toType();
103893103893 const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
......@@ -103898,7 +103898,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103898103898 try err.finish(inst, &.{ty_op.operand}, &ops, cg);
103899103899 },
103900103900 .errunion_payload_ptr_set => {
103901 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103901 const ty_op = air_datas[@backingInt(inst)].ty_op;
103902103902 const eu_ty = cg.typeOf(ty_op.operand).childType(zcu);
103903103903 const eu_err_ty = eu_ty.errorUnionSet(zcu);
103904103904 const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
......@@ -103913,7 +103913,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103913103913 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
103914103914 },
103915103915 .wrap_errunion_payload => {
103916 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103916 const ty_op = air_datas[@backingInt(inst)].ty_op;
103917103917 const eu_ty = ty_op.ty.toType();
103918103918 const eu_err_ty = eu_ty.errorUnionSet(zcu);
103919103919 const eu_pl_ty = cg.typeOf(ty_op.operand);
......@@ -103928,7 +103928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103928103928 try eu.finish(inst, &.{ty_op.operand}, &ops, cg);
103929103929 },
103930103930 .wrap_errunion_err => {
103931 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103931 const ty_op = air_datas[@backingInt(inst)].ty_op;
103932103932 const eu_ty = ty_op.ty.toType();
103933103933 const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
103934103934 const eu_err_off: u31 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
......@@ -103938,7 +103938,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103938103938 try eu.finish(inst, &.{ty_op.operand}, &ops, cg);
103939103939 },
103940103940 .struct_field_ptr => {
103941 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
103941 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
103942103942 const struct_field = cg.air.extraData(Air.StructField, ty_pl.payload).data;
103943103943 var ops = try cg.tempsFromOperands(inst, .{struct_field.struct_operand});
103944103944 try ops[0].toOffset(@intCast(codegen.fieldOffset(
......@@ -103954,7 +103954,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103954103954 .struct_field_ptr_index_2,
103955103955 .struct_field_ptr_index_3,
103956103956 => |air_tag| {
103957 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
103957 const ty_op = air_datas[@backingInt(inst)].ty_op;
103958103958 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
103959103959 try ops[0].toOffset(@intCast(codegen.fieldOffset(
103960103960 cg.typeOf(ty_op.operand),
......@@ -103971,7 +103971,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103971103971 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
103972103972 },
103973103973 .agg_field_val => {
103974 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
103974 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
103975103975 const struct_field = cg.air.extraData(Air.StructField, ty_pl.payload).data;
103976103976 const agg_ty = cg.typeOf(struct_field.struct_operand);
103977103977 const field_ty = ty_pl.ty.toType();
......@@ -103987,7 +103987,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103987103987 try res.finish(inst, &.{struct_field.struct_operand}, &ops, cg);
103988103988 },
103989103989 .set_union_tag => {
103990 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
103990 const bin_op = air_datas[@backingInt(inst)].bin_op;
103991103991 const union_ty = cg.typeOf(bin_op.lhs).childType(zcu);
103992103992 const union_layout = union_ty.unionGetLayout(zcu);
103993103993 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
......@@ -103998,7 +103998,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103998103998 try res.finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
103999103999 },
104000104000 .get_union_tag => {
104001 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
104001 const ty_op = air_datas[@backingInt(inst)].ty_op;
104002104002 const union_ty = cg.typeOf(ty_op.operand);
104003104003 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
104004104004 const union_layout = union_ty.unionGetLayout(zcu);
......@@ -104009,38 +104009,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104009104009 try res.finish(inst, &.{ty_op.operand}, &ops, cg);
104010104010 },
104011104011 .slice => {
104012 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
104012 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
104013104013 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
104014104014 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
104015104015 try ops[0].toPair(&ops[1], cg);
104016104016 try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
104017104017 },
104018104018 .slice_len => {
104019 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
104019 const ty_op = air_datas[@backingInt(inst)].ty_op;
104020104020 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
104021104021 try ops[0].toSliceLen(cg);
104022104022 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
104023104023 },
104024104024 .slice_ptr => {
104025 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
104025 const ty_op = air_datas[@backingInt(inst)].ty_op;
104026104026 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
104027104027 try ops[0].toSlicePtr(cg);
104028104028 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
104029104029 },
104030104030 .ptr_slice_len_ptr => {
104031 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
104031 const ty_op = air_datas[@backingInt(inst)].ty_op;
104032104032 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
104033104033 try ops[0].toOffset(8, cg);
104034104034 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
104035104035 },
104036104036 .ptr_slice_ptr_ptr => {
104037 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
104037 const ty_op = air_datas[@backingInt(inst)].ty_op;
104038104038 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
104039104039 try ops[0].toOffset(0, cg);
104040104040 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
104041104041 },
104042104042 .array_elem_val, .legalize_vec_elem_val => {
104043 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
104043 const bin_op = air_datas[@backingInt(inst)].bin_op;
104044104044 const array_ty = cg.typeOf(bin_op.lhs);
104045104045 const res_ty = array_ty.childType(zcu);
104046104046 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
......@@ -104236,7 +104236,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104236104236 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
104237104237 },
104238104238 .slice_elem_val, .ptr_elem_val => {
104239 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
104239 const bin_op = air_datas[@backingInt(inst)].bin_op;
104240104240 const res_ty = cg.typeOf(bin_op.lhs).indexableElem(zcu);
104241104241 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
104242104242 try ops[0].toSlicePtr(cg);
......@@ -104359,7 +104359,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104359104359 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
104360104360 },
104361104361 .slice_elem_ptr, .ptr_elem_ptr => {
104362 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
104362 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
104363104363 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
104364104364 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
104365104365 try ops[0].toSlicePtr(cg);
......@@ -104406,7 +104406,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104406104406 try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
104407104407 },
104408104408 .array_to_slice => {
104409 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
104409 const ty_op = air_datas[@backingInt(inst)].ty_op;
104410104410 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
104411104411 var len = try cg.tempInit(.usize, .{
104412104412 .immediate = cg.typeOf(ty_op.operand).childType(zcu).arrayLen(zcu),
......@@ -104415,7 +104415,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104415104415 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
104416104416 },
104417104417 .int_from_float, .int_from_float_optimized => |air_tag| {
104418 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
104418 const ty_op = air_datas[@backingInt(inst)].ty_op;
104419104419 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
104420104420 var res: [1]Temp = undefined;
104421104421 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -115184,7 +115184,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
115184115184 .int_from_float_safe => unreachable,
115185115185 .int_from_float_optimized_safe => unreachable,
115186115186 .float_from_int => |air_tag| {
115187 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
115187 const ty_op = air_datas[@backingInt(inst)].ty_op;
115188115188 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
115189115189 var res: [1]Temp = undefined;
115190115190 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -127202,7 +127202,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
127202127202 },
127203127203 .reduce => |air_tag| {
127204127204 const nan = std.math.nan(f16);
127205 const reduce = air_datas[@intFromEnum(inst)].reduce;
127205 const reduce = air_datas[@backingInt(inst)].reduce;
127206127206 const res_ty = cg.typeOfIndex(inst);
127207127207 var ops = try cg.tempsFromOperands(inst, .{reduce.operand});
127208127208 var res: [1]Temp = undefined;
......@@ -161404,7 +161404,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
161404161404 },
161405161405 .reduce_optimized => |air_tag| {
161406161406 const inf = std.math.inf(f16);
161407 const reduce = air_datas[@intFromEnum(inst)].reduce;
161407 const reduce = air_datas[@backingInt(inst)].reduce;
161408161408 var ops = try cg.tempsFromOperands(inst, .{reduce.operand});
161409161409 var res: [1]Temp = undefined;
161410161410 cg.select(&res, &.{cg.typeOfIndex(inst)}, &ops, switch (reduce.operation) {
......@@ -169105,7 +169105,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
169105169105 try res[0].finish(inst, &.{reduce.operand}, &ops, cg);
169106169106 },
169107169107 .splat => |air_tag| {
169108 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
169108 const ty_op = air_datas[@backingInt(inst)].ty_op;
169109169109 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
169110169110 var res: [1]Temp = undefined;
169111169111 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -170948,7 +170948,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
170948170948 .memset => try cg.airMemset(inst, false),
170949170949 .memset_safe => try cg.airMemset(inst, true),
170950170950 .memcpy, .memmove => |air_tag| {
170951 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
170951 const bin_op = air_datas[@backingInt(inst)].bin_op;
170952170952 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }) ++ .{undefined};
170953170953 ops[2] = ops[0].getByteLen(cg) catch |err| switch (err) {
170954170954 error.SelectFailed => return cg.fail("failed to select {s} {f} {f} {f} {f}", .{
......@@ -171012,7 +171012,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
171012171012 .atomic_store_seq_cst => try cg.airAtomicStore(inst, .seq_cst),
171013171013 .atomic_rmw => try cg.airAtomicRmw(inst),
171014171014 .is_named_enum_value => |air_tag| {
171015 const un_op = air_datas[@intFromEnum(inst)].un_op;
171015 const un_op = air_datas[@backingInt(inst)].un_op;
171016171016 var ops = try cg.tempsFromOperands(inst, .{un_op});
171017171017 var res: [1]Temp = undefined;
171018171018 cg.select(&res, &.{.bool}, &ops, comptime &.{ .{
......@@ -171183,7 +171183,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
171183171183 try res[0].finish(inst, &.{un_op}, &ops, cg);
171184171184 },
171185171185 .tag_name => |air_tag| {
171186 const un_op = air_datas[@intFromEnum(inst)].un_op;
171186 const un_op = air_datas[@backingInt(inst)].un_op;
171187171187 var ops = try cg.tempsFromOperands(inst, .{un_op});
171188171188 var res: [1]Temp = undefined;
171189171189 cg.select(&res, &.{.slice_const_u8_sentinel_0}, &ops, comptime &.{ .{
......@@ -171350,7 +171350,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
171350171350 try res[0].finish(inst, &.{un_op}, &ops, cg);
171351171351 },
171352171352 .error_name => |air_tag| {
171353 const un_op = air_datas[@intFromEnum(inst)].un_op;
171353 const un_op = air_datas[@backingInt(inst)].un_op;
171354171354 var ops = try cg.tempsFromOperands(inst, .{un_op});
171355171355 var res: [2]Temp = undefined;
171356171356 cg.select(&res, &.{ .slice_const_u8_sentinel_0, .usize }, &ops, comptime &.{ .{
......@@ -171458,7 +171458,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
171458171458 try res[0].finish(inst, &.{un_op}, &ops, cg);
171459171459 },
171460171460 .error_set_has_value => |air_tag| {
171461 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
171461 const ty_op = air_datas[@backingInt(inst)].ty_op;
171462171462 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}) ++ .{try cg.tempInit(ty_op.ty.toType(), .none)};
171463171463 var res: [1]Temp = undefined;
171464171464 cg.select(&res, &.{.bool}, &ops, comptime &.{ .{
......@@ -171550,7 +171550,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
171550171550 try res[0].finish(inst, &.{ty_op.operand}, ops[0..1], cg);
171551171551 },
171552171552 .aggregate_init => |air_tag| fallback: {
171553 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
171553 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
171554171554 const agg_ty = ty_pl.ty.toType();
171555171555 if (agg_ty.isVector(zcu) and agg_ty.childType(zcu).toIntern() == .bool_type) {
171556171556 break :fallback try cg.airAggregateInitBoolVec(inst);
......@@ -171620,7 +171620,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
171620171620 try res.finish(inst, &.{}, &.{}, cg);
171621171621 },
171622171622 .union_init => {
171623 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
171623 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
171624171624 const union_init = cg.air.extraData(Air.UnionInit, ty_pl.payload).data;
171625171625 const union_ty = ty_pl.ty.toType();
171626171626 var ops = try cg.tempsFromOperands(inst, .{union_init.init});
......@@ -171642,7 +171642,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
171642171642 try res.finish(inst, &.{union_init.init}, &ops, cg);
171643171643 },
171644171644 .prefetch => {
171645 const prefetch = air_datas[@intFromEnum(inst)].prefetch;
171645 const prefetch = air_datas[@backingInt(inst)].prefetch;
171646171646 var ops = try cg.tempsFromOperands(inst, .{prefetch.ptr});
171647171647 switch (prefetch.cache) {
171648171648 .instruction => {}, // prefetchi requires rip-relative addressing, which is currently non-trivial to emit from an arbitrary ptr value
......@@ -171669,7 +171669,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
171669171669 try res.finish(inst, &.{prefetch.ptr}, &ops, cg);
171670171670 },
171671171671 .mul_add => |air_tag| {
171672 const pl_op = air_datas[@intFromEnum(inst)].pl_op;
171672 const pl_op = air_datas[@backingInt(inst)].pl_op;
171673171673 const bin_op = cg.air.extraData(Air.Bin, pl_op.payload).data;
171674171674 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs, pl_op.operand });
171675171675 var res: [1]Temp = undefined;
......@@ -173070,7 +173070,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
173070173070 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs, pl_op.operand }, &ops, cg);
173071173071 },
173072173072 .field_parent_ptr => {
173073 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
173073 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
173074173074 const field_parent_ptr = cg.air.extraData(Air.FieldParentPtr, ty_pl.payload).data;
173075173075 var ops = try cg.tempsFromOperands(inst, .{field_parent_ptr.field_ptr});
173076173076 try ops[0].toOffset(-@as(i32, @intCast(codegen.fieldOffset(
......@@ -173083,7 +173083,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
173083173083 },
173084173084 .wasm_memory_size, .wasm_memory_grow => unreachable,
173085173085 .cmp_lte_errors_len => |air_tag| {
173086 const un_op = air_datas[@intFromEnum(inst)].un_op;
173086 const un_op = air_datas[@backingInt(inst)].un_op;
173087173087 var ops = try cg.tempsFromOperands(inst, .{un_op});
173088173088 var res: [1]Temp = undefined;
173089173089 cg.select(&res, &.{.bool}, &ops, comptime &.{ .{
......@@ -173172,7 +173172,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
173172173172 try ert.finish(inst, &.{}, &.{}, cg);
173173173173 },
173174173174 .set_err_return_trace => {
173175 const un_op = air_datas[@intFromEnum(inst)].un_op;
173175 const un_op = air_datas[@backingInt(inst)].un_op;
173176173176 var ops = try cg.tempsFromOperands(inst, .{un_op});
173177173177 switch (ops[0].unwrap(cg)) {
173178173178 .ref => {
......@@ -173191,12 +173191,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
173191173191 }
173192173192 },
173193173193 .addrspace_cast => {
173194 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
173194 const ty_op = air_datas[@backingInt(inst)].ty_op;
173195173195 const ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
173196173196 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
173197173197 },
173198173198 .save_err_return_trace_index => {
173199 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
173199 const ty_pl = air_datas[@backingInt(inst)].ty_pl;
173200173200 const agg_ty = ty_pl.ty.toType();
173201173201 assert(agg_ty.containerLayout(zcu) != .@"packed");
173202173202 var ert: Temp = .{ .index = err_ret_trace_index };
......@@ -173205,7 +173205,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
173205173205 try res.finish(inst, &.{}, &.{}, cg);
173206173206 },
173207173207 .runtime_nav_ptr => {
173208 const ty_nav = air_datas[@intFromEnum(inst)].ty_nav;
173208 const ty_nav = air_datas[@backingInt(inst)].ty_nav;
173209173209 const nav = ip.getNav(ty_nav.nav);
173210173210 const is_threadlocal = zcu.comp.config.any_non_single_threaded and nav.resolved.?.@"threadlocal";
173211173211
......@@ -173250,7 +173250,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
173250173250 .c_va_end => try cg.airVaEnd(inst),
173251173251 .c_va_start => try cg.airVaStart(inst),
173252173252 .legalize_vec_store_elem => {
173253 const pl_op = air_datas[@intFromEnum(inst)].pl_op;
173253 const pl_op = air_datas[@backingInt(inst)].pl_op;
173254173254 const bin = cg.air.extraData(Air.Bin, pl_op.payload).data;
173255173255 // vector_ptr, index, elem_val
173256173256 var ops = try cg.tempsFromOperands(inst, .{ pl_op.operand, bin.lhs, bin.rhs });
......@@ -173885,7 +173885,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
173885173885
173886173886 .work_item_id, .work_group_size, .work_group_id, .spirv_runtime_array_len => unreachable,
173887173887 }
173888 try cg.resetTemps(@enumFromInt(0));
173888 try cg.resetTemps(@fromBackingInt(@intCast(0)));
173889173889 cg.checkInvariantsAfterAirInst();
173890173890 }
173891173891 verbose_tracking_log.debug("{f}", .{cg.fmtTracking()});
......@@ -174007,7 +174007,7 @@ fn genLazy(cg: *CodeGen, lazy_sym: link.File.LazySymbol) InnerError!void {
174007174007 .{ @tagName(lazy_sym.kind), Type.fromInterned(lazy_sym.ty).fmt(pt) },
174008174008 ),
174009174009 }
174010 try cg.resetTemps(@enumFromInt(0));
174010 try cg.resetTemps(@fromBackingInt(@intCast(0)));
174011174011 cg.checkInvariantsAfterAirInst();
174012174012}
174013174013
......@@ -174059,7 +174059,7 @@ fn processDeath(self: *CodeGen, inst: Air.Inst.Index, comptime opts: FreeOptions
174059174059}
174060174060
174061174061fn finishAirResult(self: *CodeGen, inst: Air.Inst.Index, result: MCValue) void {
174062 if (self.liveness.isUnused(inst) and self.air.instructions.items(.tag)[@intFromEnum(inst)] != .arg) switch (result) {
174062 if (self.liveness.isUnused(inst) and self.air.instructions.items(.tag)[@backingInt(inst)] != .arg) switch (result) {
174063174063 .none, .dead, .unreach => {},
174064174064 else => unreachable, // Why didn't the result die?
174065174065 } else {
......@@ -174100,7 +174100,7 @@ fn setFrameLoc(
174100174100 offset: *i32,
174101174101 comptime aligned: bool,
174102174102) void {
174103 const frame_i = @intFromEnum(frame_index);
174103 const frame_i = @backingInt(frame_index);
174104174104 if (aligned) {
174105174105 const alignment = self.frame_allocs.items(.abi_align)[frame_i];
174106174106 offset.* = @intCast(alignment.forward(@intCast(offset.*)));
......@@ -174120,21 +174120,21 @@ fn computeFrameLayout(self: *CodeGen, cc: std.lang.CallingConvention.Tag) !Frame
174120174120 const frame_offset = self.frame_locs.items(.disp);
174121174121
174122174122 for (stack_frame_order, FrameIndex.named_count..) |*frame_order, frame_index|
174123 frame_order.* = @enumFromInt(frame_index);
174123 frame_order.* = @fromBackingInt(@intCast(frame_index));
174124174124 {
174125174125 const SortContext = struct {
174126174126 frame_align: @TypeOf(frame_align),
174127174127 pub fn lessThan(context: @This(), lhs: FrameIndex, rhs: FrameIndex) bool {
174128 return context.frame_align[@intFromEnum(lhs)].compare(.gt, context.frame_align[@intFromEnum(rhs)]);
174128 return context.frame_align[@backingInt(lhs)].compare(.gt, context.frame_align[@backingInt(rhs)]);
174129174129 }
174130174130 };
174131174131 const sort_context = SortContext{ .frame_align = frame_align };
174132174132 std.mem.sort(FrameIndex, stack_frame_order, sort_context, SortContext.lessThan);
174133174133 }
174134174134
174135 const call_frame_align = frame_align[@intFromEnum(FrameIndex.call_frame)];
174136 const stack_frame_align = frame_align[@intFromEnum(FrameIndex.stack_frame)];
174137 const args_frame_align = frame_align[@intFromEnum(FrameIndex.args_frame)];
174135 const call_frame_align = frame_align[@backingInt(FrameIndex.call_frame)];
174136 const stack_frame_align = frame_align[@backingInt(FrameIndex.stack_frame)];
174137 const args_frame_align = frame_align[@backingInt(FrameIndex.args_frame)];
174138174138 const needed_align = call_frame_align.max(stack_frame_align);
174139174139 const need_align_stack = needed_align.compare(.gt, args_frame_align);
174140174140
......@@ -174155,7 +174155,7 @@ fn computeFrameLayout(self: *CodeGen, cc: std.lang.CallingConvention.Tag) !Frame
174155174155 const stack_frame_align_offset = if (need_align_stack)
174156174156 0
174157174157 else
174158 save_reg_list.size(self.target) + frame_offset[@intFromEnum(FrameIndex.args_frame)];
174158 save_reg_list.size(self.target) + frame_offset[@backingInt(FrameIndex.args_frame)];
174159174159
174160174160 var rsp_offset: i32 = 0;
174161174161 self.setFrameLoc(.call_frame, .rsp, &rsp_offset, true);
......@@ -174164,23 +174164,23 @@ fn computeFrameLayout(self: *CodeGen, cc: std.lang.CallingConvention.Tag) !Frame
174164174164 rsp_offset += stack_frame_align_offset;
174165174165 rsp_offset = @intCast(needed_align.forward(@intCast(rsp_offset)));
174166174166 rsp_offset -= stack_frame_align_offset;
174167 frame_size[@intFromEnum(FrameIndex.call_frame)] =
174168 @intCast(rsp_offset - frame_offset[@intFromEnum(FrameIndex.stack_frame)]);
174167 frame_size[@backingInt(FrameIndex.call_frame)] =
174168 @intCast(rsp_offset - frame_offset[@backingInt(FrameIndex.stack_frame)]);
174169174169
174170174170 return .{
174171 .stack_mask = @as(u32, std.math.maxInt(u32)) << @intCast(if (need_align_stack) @intFromEnum(needed_align) else 0),
174172 .stack_adjust = @intCast(rsp_offset - frame_offset[@intFromEnum(FrameIndex.call_frame)]),
174171 .stack_mask = @as(u32, std.math.maxInt(u32)) << @intCast(if (need_align_stack) @backingInt(needed_align) else 0),
174172 .stack_adjust = @intCast(rsp_offset - frame_offset[@backingInt(FrameIndex.call_frame)]),
174173174173 .save_reg_list = save_reg_list,
174174174174 };
174175174175}
174176174176
174177174177fn getFrameAddrAlignment(self: *CodeGen, frame_addr: bits.FrameAddr) InternPool.Alignment {
174178 const alloc_align = self.frame_allocs.get(@intFromEnum(frame_addr.index)).abi_align;
174179 return @enumFromInt(@min(@intFromEnum(alloc_align), @ctz(frame_addr.off)));
174178 const alloc_align = self.frame_allocs.get(@backingInt(frame_addr.index)).abi_align;
174179 return @fromBackingInt(@intCast(@min(@backingInt(alloc_align), @ctz(frame_addr.off))));
174180174180}
174181174181
174182174182fn getFrameAddrSize(self: *CodeGen, frame_addr: bits.FrameAddr) u32 {
174183 return self.frame_allocs.get(@intFromEnum(frame_addr.index)).abi_size - @as(u31, @intCast(frame_addr.off));
174183 return self.frame_allocs.get(@backingInt(frame_addr.index)).abi_size - @as(u31, @intCast(frame_addr.off));
174184174184}
174185174185
174186174186fn allocFrameIndex(self: *CodeGen, alloc: FrameAlloc) !FrameIndex {
......@@ -174188,19 +174188,19 @@ fn allocFrameIndex(self: *CodeGen, alloc: FrameAlloc) !FrameIndex {
174188174188 const frame_size = frame_allocs_slice.items(.abi_size);
174189174189 const frame_align = frame_allocs_slice.items(.abi_align);
174190174190
174191 const stack_frame_align = &frame_align[@intFromEnum(FrameIndex.stack_frame)];
174191 const stack_frame_align = &frame_align[@backingInt(FrameIndex.stack_frame)];
174192174192 stack_frame_align.* = stack_frame_align.max(alloc.abi_align);
174193174193
174194174194 for (self.free_frame_indices.keys(), 0..) |frame_index, free_i| {
174195 const abi_size = frame_size[@intFromEnum(frame_index)];
174195 const abi_size = frame_size[@backingInt(frame_index)];
174196174196 if (abi_size != alloc.abi_size) continue;
174197 const abi_align = &frame_align[@intFromEnum(frame_index)];
174197 const abi_align = &frame_align[@backingInt(frame_index)];
174198174198 abi_align.* = abi_align.max(alloc.abi_align);
174199174199
174200174200 _ = self.free_frame_indices.swapRemoveAt(free_i);
174201174201 return frame_index;
174202174202 }
174203 const frame_index: FrameIndex = @enumFromInt(self.frame_allocs.len);
174203 const frame_index: FrameIndex = @fromBackingInt(@intCast(self.frame_allocs.len));
174204174204 try self.frame_allocs.append(self.gpa, alloc);
174205174205 return frame_index;
174206174206}
......@@ -174318,7 +174318,7 @@ fn initRetroactiveState(self: *CodeGen) State {
174318174318 self.scope_generation = scope_generation;
174319174319
174320174320 var state: State = undefined;
174321 state.next_temp_index = @enumFromInt(0);
174321 state.next_temp_index = @fromBackingInt(@intCast(0));
174322174322 state.inst_tracking_len = @intCast(self.inst_tracking.count());
174323174323 state.scope_generation = scope_generation;
174324174324 return state;
......@@ -174350,8 +174350,8 @@ fn restoreState(self: *CodeGen, state: State, deaths: []const Air.Inst.Index, co
174350174350}) !void {
174351174351 if (opts.close_scope) {
174352174352 for (
174353 self.inst_tracking.keys()[@intFromEnum(state.next_temp_index)..@intFromEnum(self.next_temp_index)],
174354 self.inst_tracking.values()[@intFromEnum(state.next_temp_index)..@intFromEnum(self.next_temp_index)],
174353 self.inst_tracking.keys()[@backingInt(state.next_temp_index)..@backingInt(self.next_temp_index)],
174354 self.inst_tracking.values()[@backingInt(state.next_temp_index)..@backingInt(self.next_temp_index)],
174355174355 ) |inst, *tracking| try tracking.die(self, inst, .{ .emit_instructions = opts.emit_instructions });
174356174356 self.next_temp_index = state.next_temp_index;
174357174357 for (
......@@ -174363,8 +174363,8 @@ fn restoreState(self: *CodeGen, state: State, deaths: []const Air.Inst.Index, co
174363174363
174364174364 if (opts.resurrect) {
174365174365 for (
174366 self.inst_tracking.keys()[0..@intFromEnum(state.next_temp_index)],
174367 self.inst_tracking.values()[0..@intFromEnum(state.next_temp_index)],
174366 self.inst_tracking.keys()[0..@backingInt(state.next_temp_index)],
174367 self.inst_tracking.values()[0..@backingInt(state.next_temp_index)],
174368174368 ) |inst, *tracking| try tracking.resurrect(self, inst, state.scope_generation);
174369174369 for (
174370174370 self.inst_tracking.keys()[Temp.Index.max..state.inst_tracking_len],
......@@ -176367,10 +176367,10 @@ fn genCall(cg: *CodeGen, info: union(enum) {
176367176367 });
176368176368 const frame_allocs_slice = cg.frame_allocs.slice();
176369176369 const stack_frame_size =
176370 &frame_allocs_slice.items(.abi_size)[@intFromEnum(FrameIndex.call_frame)];
176370 &frame_allocs_slice.items(.abi_size)[@backingInt(FrameIndex.call_frame)];
176371176371 stack_frame_size.* = @max(stack_frame_size.*, needed_call_frame.abi_size);
176372176372 const stack_frame_align =
176373 &frame_allocs_slice.items(.abi_align)[@intFromEnum(FrameIndex.call_frame)];
176373 &frame_allocs_slice.items(.abi_align)[@backingInt(FrameIndex.call_frame)];
176374176374 stack_frame_align.* = stack_frame_align.max(needed_call_frame.abi_align);
176375176375 }
176376176376
......@@ -176762,7 +176762,7 @@ fn genCall(cg: *CodeGen, info: union(enum) {
176762176762}
176763176763
176764176764fn airRet(cg: *CodeGen, inst: Air.Inst.Index, safety: bool) !void {
176765 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
176765 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
176766176766
176767176767 const ret_ty = cg.fn_type.fnReturnType(cg.pt.zcu);
176768176768 switch (cg.ret_mcv.short) {
......@@ -176828,7 +176828,7 @@ fn airRet(cg: *CodeGen, inst: Air.Inst.Index, safety: bool) !void {
176828176828}
176829176829
176830176830fn airRetLoad(cg: *CodeGen, inst: Air.Inst.Index) !void {
176831 const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
176831 const un_op = cg.air.instructions.items(.data)[@backingInt(inst)].un_op;
176832176832 switch (cg.ret_mcv.short) {
176833176833 .none => {},
176834176834 .register,
......@@ -177341,7 +177341,7 @@ fn lowerSwitchBr(
177341177341 const cc = cc_temp.tracking(cg).short.eflags;
177342177342 try cc_temp.die(cg);
177343177343 try cond_temp.die(cg);
177344 try cg.resetTemps(@enumFromInt(0));
177344 try cg.resetTemps(@fromBackingInt(@intCast(0)));
177345177345 break :cc cc;
177346177346 },
177347177347 };
......@@ -177394,7 +177394,7 @@ fn lowerSwitchBr(
177394177394 },
177395177395 };
177396177396 try cond_temp.die(cg);
177397 try cg.resetTemps(@enumFromInt(0));
177397 try cg.resetTemps(@fromBackingInt(@intCast(0)));
177398177398 // "Success" case is in `reloc`....
177399177399 if (lte_max) |cc| {
177400177400 reloc.* = try cg.asmJccReloc(cc, undefined);
......@@ -177498,7 +177498,7 @@ fn airLoopSwitchBr(self: *CodeGen, inst: Air.Inst.Index) !void {
177498177498}
177499177499
177500177500fn airSwitchDispatch(self: *CodeGen, inst: Air.Inst.Index) !void {
177501 const br = self.air.instructions.items(.data)[@intFromEnum(inst)].br;
177501 const br = self.air.instructions.items(.data)[@backingInt(inst)].br;
177502177502
177503177503 const block_ty = self.typeOfIndex(br.block_inst);
177504177504 const loop_data = self.loops.getPtr(br.block_inst).?;
......@@ -177630,7 +177630,7 @@ fn performReloc(self: *CodeGen, reloc: Mir.Inst.Index) void {
177630177630
177631177631fn airBr(self: *CodeGen, inst: Air.Inst.Index) !void {
177632177632 const zcu = self.pt.zcu;
177633 const br = self.air.instructions.items(.data)[@intFromEnum(inst)].br;
177633 const br = self.air.instructions.items(.data)[@backingInt(inst)].br;
177634177634
177635177635 const block_ty = self.typeOfIndex(br.block_inst);
177636177636 const block_unused = !block_ty.hasRuntimeBits(zcu) or self.liveness.isUnused(br.block_inst);
......@@ -178498,7 +178498,7 @@ const MoveStrategy = union(enum) {
178498178498 .load_store_x87 => if (dst_reg != .st0 and cg.register_manager.isKnownRegFree(.st7)) {
178499178499 try cg.asmMemory(.{ .f_, .ld }, src_mem);
178500178500 switch (dst_reg) {
178501 .st1, .st2, .st3, .st4, .st5, .st6 => try cg.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1)),
178501 .st1, .st2, .st3, .st4, .st5, .st6 => try cg.asmRegister(.{ .f_p, .st }, @fromBackingInt(@intCast(@backingInt(dst_reg) + 1))),
178502178502 .st7 => try cg.asmOpOnly(.{ .f_cstp, .in }),
178503178503 else => unreachable,
178504178504 }
......@@ -179239,11 +179239,11 @@ fn genSetReg(
179239179239 .st1, .st2, .st3, .st4, .st5, .st6 => switch (dst_reg) {
179240179240 .st0 => {
179241179241 try cg.asmRegister(.{ .f_p, .st }, .st0);
179242 try cg.asmRegister(.{ .f_, .ld }, @enumFromInt(@intFromEnum(src_reg) - 1));
179242 try cg.asmRegister(.{ .f_, .ld }, @fromBackingInt(@intCast(@backingInt(src_reg) - 1)));
179243179243 },
179244179244 .st2, .st3, .st4, .st5, .st6 => if (cg.register_manager.isKnownRegFree(.st7)) {
179245179245 try cg.asmRegister(.{ .f_, .ld }, src_reg);
179246 try cg.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1));
179246 try cg.asmRegister(.{ .f_p, .st }, @fromBackingInt(@intCast(@backingInt(dst_reg) + 1)));
179247179247 } else {
179248179248 try cg.asmRegister(.{ .f_, .xch }, src_reg);
179249179249 try cg.asmRegister(.{ .f_, .xch }, dst_reg);
......@@ -179802,8 +179802,8 @@ fn genSetMem(
179802179802 const mem_size = switch (base) {
179803179803 .frame => |base_fi| mem_size: {
179804179804 assert(disp >= 0);
179805 const frame_abi_size = cg.frame_allocs.items(.abi_size)[@intFromEnum(base_fi)];
179806 const frame_spill_pad = cg.frame_allocs.items(.spill_pad)[@intFromEnum(base_fi)];
179805 const frame_abi_size = cg.frame_allocs.items(.abi_size)[@backingInt(base_fi)];
179806 const frame_spill_pad = cg.frame_allocs.items(.spill_pad)[@backingInt(base_fi)];
179807179807 assert(frame_abi_size - frame_spill_pad - disp >= abi_size);
179808179808 break :mem_size if (frame_abi_size - frame_spill_pad - disp == abi_size) frame_abi_size else abi_size;
179809179809 },
......@@ -180097,7 +180097,7 @@ fn genInlineMemset(
180097180097fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void {
180098180098 const pt = self.pt;
180099180099 const zcu = pt.zcu;
180100 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
180100 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
180101180101 const dst_ty = self.typeOfIndex(inst);
180102180102 const src_ty = self.typeOf(ty_op.operand);
180103180103
......@@ -180218,7 +180218,7 @@ fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void {
180218180218fn airCmpxchg(self: *CodeGen, inst: Air.Inst.Index) !void {
180219180219 const pt = self.pt;
180220180220 const zcu = pt.zcu;
180221 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
180221 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
180222180222 const extra = self.air.extraData(Air.Cmpxchg, ty_pl.payload).data;
180223180223
180224180224 const dst_ty = self.typeOfIndex(inst);
......@@ -180673,7 +180673,7 @@ fn atomicOp(
180673180673}
180674180674
180675180675fn airAtomicRmw(self: *CodeGen, inst: Air.Inst.Index) !void {
180676 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
180676 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
180677180677 const extra = self.air.extraData(Air.AtomicRmw, pl_op.payload).data;
180678180678
180679180679 try self.spillRegisters(&.{ .rax, .rdx, .rbx, .rcx });
......@@ -180694,7 +180694,7 @@ fn airAtomicRmw(self: *CodeGen, inst: Air.Inst.Index) !void {
180694180694}
180695180695
180696180696fn airAtomicLoad(self: *CodeGen, inst: Air.Inst.Index) !void {
180697 const atomic_load = self.air.instructions.items(.data)[@intFromEnum(inst)].atomic_load;
180697 const atomic_load = self.air.instructions.items(.data)[@backingInt(inst)].atomic_load;
180698180698 const result: MCValue = result: {
180699180699 const ptr_ty = self.typeOf(atomic_load.ptr);
180700180700 const ptr_mcv = try self.resolveInst(atomic_load.ptr);
......@@ -180721,7 +180721,7 @@ fn airAtomicLoad(self: *CodeGen, inst: Air.Inst.Index) !void {
180721180721}
180722180722
180723180723fn airAtomicStore(self: *CodeGen, inst: Air.Inst.Index, order: std.lang.AtomicOrder) !void {
180724 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
180724 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
180725180725
180726180726 const ptr_ty = self.typeOf(bin_op.lhs);
180727180727 const ptr_mcv = try self.resolveInst(bin_op.lhs);
......@@ -180736,7 +180736,7 @@ fn airAtomicStore(self: *CodeGen, inst: Air.Inst.Index, order: std.lang.AtomicOr
180736180736fn airMemset(self: *CodeGen, inst: Air.Inst.Index, safety: bool) !void {
180737180737 const pt = self.pt;
180738180738 const zcu = pt.zcu;
180739 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
180739 const bin_op = self.air.instructions.items(.data)[@backingInt(inst)].bin_op;
180740180740
180741180741 result: {
180742180742 if (!safety and (try self.resolveInst(bin_op.rhs)) == .undef) break :result;
......@@ -180879,7 +180879,7 @@ fn airSelect(self: *CodeGen, inst: Air.Inst.Index) !void {
180879180879 const pt = self.pt;
180880180880 const zcu = pt.zcu;
180881180881 const io = zcu.comp.io;
180882 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
180882 const pl_op = self.air.instructions.items(.data)[@backingInt(inst)].pl_op;
180883180883 const extra = self.air.extraData(Air.Bin, pl_op.payload).data;
180884180884 const ty = self.typeOfIndex(inst);
180885180885 const vec_len = ty.vectorLen(zcu);
......@@ -181351,7 +181351,7 @@ fn airAggregateInitBoolVec(self: *CodeGen, inst: Air.Inst.Index) !void {
181351181351 const zcu = pt.zcu;
181352181352 const result_ty = self.typeOfIndex(inst);
181353181353 const len: usize = @intCast(result_ty.arrayLen(zcu));
181354 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
181354 const ty_pl = self.air.instructions.items(.data)[@backingInt(inst)].ty_pl;
181355181355 const elements: []const Air.Inst.Ref = @ptrCast(self.air.extra.items[ty_pl.payload..][0..len]);
181356181356
181357181357 assert(result_ty.zigTypeTag(zcu) == .vector);
......@@ -181411,7 +181411,7 @@ fn airAggregateInitBoolVec(self: *CodeGen, inst: Air.Inst.Index) !void {
181411181411fn airVaStart(self: *CodeGen, inst: Air.Inst.Index) !void {
181412181412 const pt = self.pt;
181413181413 const zcu = pt.zcu;
181414 const va_list_ty = self.air.instructions.items(.data)[@intFromEnum(inst)].ty;
181414 const va_list_ty = self.air.instructions.items(.data)[@backingInt(inst)].ty;
181415181415 const ptr_anyopaque_ty = try pt.singleMutPtrType(.anyopaque);
181416181416
181417181417 const result: MCValue = switch (self.fn_type.fnCallingConvention(zcu)) {
......@@ -181477,7 +181477,7 @@ fn airVaStart(self: *CodeGen, inst: Air.Inst.Index) !void {
181477181477fn airVaArg(self: *CodeGen, inst: Air.Inst.Index) !void {
181478181478 const pt = self.pt;
181479181479 const zcu = pt.zcu;
181480 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
181480 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
181481181481 const ty = self.typeOfIndex(inst);
181482181482 const promote_ty = self.promoteVarArg(ty);
181483181483 const ptr_anyopaque_ty = try pt.singleMutPtrType(.anyopaque);
......@@ -181705,7 +181705,7 @@ fn convertFloatVarArg(
181705181705}
181706181706
181707181707fn airVaCopy(self: *CodeGen, inst: Air.Inst.Index) !void {
181708 const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op;
181708 const ty_op = self.air.instructions.items(.data)[@backingInt(inst)].ty_op;
181709181709 const ptr_va_list_ty = self.typeOf(ty_op.operand);
181710181710
181711181711 const dst_mcv = try self.allocRegOrMem(inst, true);
......@@ -181714,7 +181714,7 @@ fn airVaCopy(self: *CodeGen, inst: Air.Inst.Index) !void {
181714181714}
181715181715
181716181716fn airVaEnd(self: *CodeGen, inst: Air.Inst.Index) !void {
181717 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
181717 const un_op = self.air.instructions.items(.data)[@backingInt(inst)].un_op;
181718181718 return self.finishAir(inst, .unreach, .{ un_op, .none, .none });
181719181719}
181720181720
......@@ -182302,9 +182302,9 @@ fn fail(cg: *CodeGen, comptime format: []const u8, args: anytype) error{ OutOfMe
182302182302}
182303182303
182304182304fn parseRegName(name: []const u8) ?Register {
182305 if (std.mem.startsWith(u8, name, "db")) return @enumFromInt(
182306 @intFromEnum(Register.dr0) + (std.fmt.parseInt(u4, name["db".len..], 0) catch return null),
182307 );
182305 if (std.mem.startsWith(u8, name, "db")) return @fromBackingInt(@intCast(
182306 @backingInt(Register.dr0) + (std.fmt.parseInt(u4, name["db".len..], 0) catch return null),
182307 ));
182308182308 return std.meta.stringToEnum(Register, name);
182309182309}
182310182310
......@@ -182685,7 +182685,7 @@ const Temp = struct {
182685182685 .ref => |ref| return .{ .ref = ref },
182686182686 .target => |target_index| {
182687182687 if (temp.index == err_ret_trace_index) return .err_ret_trace;
182688 const temp_index: Index = @enumFromInt(target_index);
182688 const temp_index: Index = @fromBackingInt(@intCast(target_index));
182689182689 assert(temp_index.isValid(cg));
182690182690 return .{ .temp = temp_index };
182691182691 },
......@@ -182694,7 +182694,7 @@ const Temp = struct {
182694182694
182695182695 fn typeOf(temp: Temp, cg: *CodeGen) Type {
182696182696 return switch (temp.unwrap(cg)) {
182697 .ref => switch (cg.air.instructions.items(.tag)[@intFromEnum(temp.index)]) {
182697 .ref => switch (cg.air.instructions.items(.tag)[@backingInt(temp.index)]) {
182698182698 .loop_switch_br => cg.typeOf(cg.air.unwrapSwitch(temp.index).operand),
182699182699 else => cg.air.typeOfIndex(temp.index, &cg.pt.zcu.intern_pool),
182700182700 },
......@@ -182754,8 +182754,8 @@ const Temp = struct {
182754182754
182755182755 fn getOffset(temp: Temp, off: i32, cg: *CodeGen) InnerError!Temp {
182756182756 const new_temp_index = cg.next_temp_index;
182757 cg.temp_type[@intFromEnum(new_temp_index)] = .usize;
182758 cg.next_temp_index = @enumFromInt(@intFromEnum(new_temp_index) + 1);
182757 cg.temp_type[@backingInt(new_temp_index)] = .usize;
182758 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(new_temp_index) + 1));
182759182759 const mcv = temp.tracking(cg).short;
182760182760 switch (mcv) {
182761182761 else => std.debug.panic("{s}: {f}\n", .{ @src().fn_name, mcv }),
......@@ -182830,7 +182830,7 @@ const Temp = struct {
182830182830
182831182831 fn getLimb(temp: Temp, limb_ty: Type, limb_index: u28, cg: *CodeGen) InnerError!Temp {
182832182832 const new_temp_index = cg.next_temp_index;
182833 cg.temp_type[@intFromEnum(new_temp_index)] = limb_ty;
182833 cg.temp_type[@backingInt(new_temp_index)] = limb_ty;
182834182834 switch (temp.tracking(cg).short) {
182835182835 else => |mcv| std.debug.panic("{s}: {f}\n", .{ @src().fn_name, mcv }),
182836182836 .immediate => |imm| {
......@@ -182941,7 +182941,7 @@ const Temp = struct {
182941182941 new_temp_index.tracking(cg).* = .init(.{ .lea_extern_func = extern_func });
182942182942 },
182943182943 }
182944 cg.next_temp_index = @enumFromInt(@intFromEnum(new_temp_index) + 1);
182944 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(new_temp_index) + 1));
182945182945 return .{ .index = new_temp_index.toIndex() };
182946182946 }
182947182947
......@@ -182997,7 +182997,7 @@ const Temp = struct {
182997182997 else => {},
182998182998 .register, .lea_frame, .lea_nav, .lea_uav, .lea_lazy_sym => {
182999182999 assert(limb_index == 0);
183000 cg.temp_type[@intFromEnum(temp_index)] = limb_ty;
183000 cg.temp_type[@backingInt(temp_index)] = limb_ty;
183001183001 return;
183002183002 },
183003183003 .register_pair => |regs| {
......@@ -183009,7 +183009,7 @@ const Temp = struct {
183009183009 for (regs, 0..) |reg, reg_index| if (reg_index != limb_index)
183010183010 cg.register_manager.freeReg(reg);
183011183011 temp_tracking.* = .init(.{ .register = regs[limb_index] });
183012 cg.temp_type[@intFromEnum(temp_index)] = limb_ty;
183012 cg.temp_type[@backingInt(temp_index)] = limb_ty;
183013183013 return;
183014183014 },
183015183015 .load_frame => |frame_addr| if (!frame_addr.index.isNamed()) {
......@@ -183018,7 +183018,7 @@ const Temp = struct {
183018183018 .index = frame_addr.index,
183019183019 .off = frame_addr.off + @as(u31, limb_index) * 8,
183020183020 } });
183021 cg.temp_type[@intFromEnum(temp_index)] = limb_ty;
183021 cg.temp_type[@backingInt(temp_index)] = limb_ty;
183022183022 return;
183023183023 },
183024183024 }
......@@ -183051,9 +183051,9 @@ const Temp = struct {
183051183051 .err_ret_trace => .usize,
183052183052 };
183053183053 const new_temp_index = cg.next_temp_index;
183054 cg.next_temp_index = @enumFromInt(@intFromEnum(new_temp_index) + 1);
183054 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(new_temp_index) + 1));
183055183055 try cg.register_manager.getReg(new_reg, new_temp_index.toIndex());
183056 cg.temp_type[@intFromEnum(new_temp_index)] = ty;
183056 cg.temp_type[@backingInt(new_temp_index)] = ty;
183057183057 new_temp_index.tracking(cg).* = .init(.{ .register = new_reg });
183058183058 while (try temp.toBase(false, cg)) {}
183059183059 try temp.readTo(ty, .{ .register = new_reg }, .{}, cg);
......@@ -183074,9 +183074,9 @@ const Temp = struct {
183074183074 .err_ret_trace => .usize,
183075183075 };
183076183076 const new_temp_index = cg.next_temp_index;
183077 cg.next_temp_index = @enumFromInt(@intFromEnum(new_temp_index) + 1);
183077 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(new_temp_index) + 1));
183078183078 for (new_regs) |new_reg| try cg.register_manager.getReg(new_reg, new_temp_index.toIndex());
183079 cg.temp_type[@intFromEnum(new_temp_index)] = ty;
183079 cg.temp_type[@backingInt(new_temp_index)] = ty;
183080183080 new_temp_index.tracking(cg).* = .init(.{ .register_pair = new_regs });
183081183081 while (try temp.toBase(false, cg)) {}
183082183082 for (new_regs, 0..) |new_reg, reg_index| try temp.readTo(
......@@ -183099,12 +183099,12 @@ const Temp = struct {
183099183099 };
183100183100 const ty = temp.typeOf(cg);
183101183101 const new_temp_index = cg.next_temp_index;
183102 cg.temp_type[@intFromEnum(new_temp_index)] = ty;
183102 cg.temp_type[@backingInt(new_temp_index)] = ty;
183103183103 const new_reg = try cg.register_manager.allocReg(new_temp_index.toIndex(), regSetForRegClass(rc));
183104183104 try cg.genSetReg(new_reg, ty, val, .{});
183105183105 new_temp_index.tracking(cg).* = .init(.{ .register = new_reg });
183106183106 try temp.die(cg);
183107 cg.next_temp_index = @enumFromInt(@intFromEnum(new_temp_index) + 1);
183107 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(new_temp_index) + 1));
183108183108 temp.* = .{ .index = new_temp_index.toIndex() };
183109183109 return true;
183110183110 }
......@@ -183124,8 +183124,8 @@ const Temp = struct {
183124183124 assert(cg.reuseTemp(result_temp.index, first_temp.index, first_temp_tracking));
183125183125 assert(cg.reuseTemp(result_temp.index, second_temp.index, second_temp_tracking));
183126183126 result_temp_index.tracking(cg).* = .init(result);
183127 cg.temp_type[@intFromEnum(result_temp_index)] = .slice_const_u8;
183128 cg.next_temp_index = @enumFromInt(@intFromEnum(result_temp_index) + 1);
183127 cg.temp_type[@backingInt(result_temp_index)] = .slice_const_u8;
183128 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(result_temp_index) + 1));
183129183129 first_temp.* = result_temp;
183130183130 second_temp.* = result_temp;
183131183131 }
......@@ -183142,8 +183142,8 @@ const Temp = struct {
183142183142 assert(cg.reuseTemp(result_temp.index, temp.index, temp_tracking));
183143183143 assert(cg.reuseTemp(result_temp.index, overflow_temp.index, overflow_temp_tracking));
183144183144 result_temp_index.tracking(cg).* = .init(.{ .register_overflow = .{ .reg = reg, .eflags = overflow_cc } });
183145 cg.temp_type[@intFromEnum(result_temp_index)] = .slice_const_u8;
183146 cg.next_temp_index = @enumFromInt(@intFromEnum(result_temp_index) + 1);
183145 cg.temp_type[@backingInt(result_temp_index)] = .slice_const_u8;
183146 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(result_temp_index) + 1));
183147183147 temp.* = result_temp;
183148183148 overflow_temp.* = result_temp;
183149183149 return;
......@@ -183154,8 +183154,8 @@ const Temp = struct {
183154183154 assert(cg.reuseTemp(result_temp.index, temp.index, temp_tracking));
183155183155 assert(cg.reuseTemp(result_temp.index, overflow_temp.index, overflow_temp_tracking));
183156183156 result_temp_index.tracking(cg).* = .init(.{ .register_pair = .{ reg, overflow_reg } });
183157 cg.temp_type[@intFromEnum(result_temp_index)] = .slice_const_u8;
183158 cg.next_temp_index = @enumFromInt(@intFromEnum(result_temp_index) + 1);
183157 cg.temp_type[@backingInt(result_temp_index)] = .slice_const_u8;
183158 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(result_temp_index) + 1));
183159183159 temp.* = result_temp;
183160183160 overflow_temp.* = result_temp;
183161183161 return;
......@@ -183231,12 +183231,12 @@ const Temp = struct {
183231183231 if ((!mut or temp.isMut(cg)) and temp_tracking.short.isMemory()) return false;
183232183232 const new_temp_index = cg.next_temp_index;
183233183233 const ty = temp.typeOf(cg);
183234 cg.temp_type[@intFromEnum(new_temp_index)] = ty;
183234 cg.temp_type[@backingInt(new_temp_index)] = ty;
183235183235 const new_frame_index = try cg.allocFrameIndex(.initSpill(ty, cg.pt.zcu));
183236183236 try cg.genSetMem(.{ .frame = new_frame_index }, 0, ty, temp_tracking.short, .{});
183237183237 new_temp_index.tracking(cg).* = .init(.{ .load_frame = .{ .index = new_frame_index } });
183238183238 try temp.die(cg);
183239 cg.next_temp_index = @enumFromInt(@intFromEnum(new_temp_index) + 1);
183239 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(new_temp_index) + 1));
183240183240 temp.* = .{ .index = new_temp_index.toIndex() };
183241183241 return true;
183242183242 }
......@@ -183247,13 +183247,13 @@ const Temp = struct {
183247183247 if ((!mut or temp.isMut(cg)) and temp_tracking.short.isBase()) return false;
183248183248 if (try temp.toMemory(mut, cg)) return true;
183249183249 const new_temp_index = cg.next_temp_index;
183250 cg.temp_type[@intFromEnum(new_temp_index)] = temp.typeOf(cg);
183250 cg.temp_type[@backingInt(new_temp_index)] = temp.typeOf(cg);
183251183251 const new_reg =
183252183252 try cg.register_manager.allocReg(new_temp_index.toIndex(), abi.RegisterClass.gp);
183253183253 try cg.genSetReg(new_reg, .usize, temp_tracking.short.address(), .{});
183254183254 new_temp_index.tracking(cg).* = .init(.{ .indirect = .{ .reg = new_reg } });
183255183255 try temp.die(cg);
183256 cg.next_temp_index = @enumFromInt(@intFromEnum(new_temp_index) + 1);
183256 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(new_temp_index) + 1));
183257183257 temp.* = .{ .index = new_temp_index.toIndex() };
183258183258 return true;
183259183259 }
......@@ -189703,25 +189703,25 @@ const Temp = struct {
189703189703 _,
189704189704
189705189705 fn toIndex(index: Index) Air.Inst.Index {
189706 return .fromTargetIndex(@intFromEnum(index));
189706 return .fromTargetIndex(@backingInt(index));
189707189707 }
189708189708
189709189709 fn fromIndex(index: Air.Inst.Index) Index {
189710 return @enumFromInt(index.toTargetIndex());
189710 return @fromBackingInt(@intCast(index.toTargetIndex()));
189711189711 }
189712189712
189713189713 fn tracking(index: Index, cg: *CodeGen) *InstTracking {
189714 return &cg.inst_tracking.values()[@intFromEnum(index)];
189714 return &cg.inst_tracking.values()[@backingInt(index)];
189715189715 }
189716189716
189717189717 fn isValid(index: Index, cg: *CodeGen) bool {
189718 return @intFromEnum(index) < @intFromEnum(cg.next_temp_index) and
189718 return @backingInt(index) < @backingInt(cg.next_temp_index) and
189719189719 index.tracking(cg).short != .dead;
189720189720 }
189721189721
189722189722 fn typeOf(index: Index, cg: *CodeGen) Type {
189723189723 assert(index.isValid(cg));
189724 return cg.temp_type[@intFromEnum(index)];
189724 return cg.temp_type[@backingInt(index)];
189725189725 }
189726189726
189727189727 const max = std.math.maxInt(@typeInfo(Index).@"enum".tag_type);
......@@ -189747,8 +189747,8 @@ const Temp = struct {
189747189747
189748189748fn resetTemps(cg: *CodeGen, from_index: Temp.Index) InnerError!void {
189749189749 var any_valid = false;
189750 for (@intFromEnum(from_index)..@intFromEnum(cg.next_temp_index)) |temp_index| {
189751 const temp: Temp.Index = @enumFromInt(temp_index);
189750 for (@backingInt(from_index)..@backingInt(cg.next_temp_index)) |temp_index| {
189751 const temp: Temp.Index = @fromBackingInt(@intCast(temp_index));
189752189752 if (temp.isValid(cg)) {
189753189753 any_valid = true;
189754189754 tracking_log.err("failed to kill {f}: {f}", .{
......@@ -189796,8 +189796,8 @@ fn tempAlloc(cg: *CodeGen, ty: Type) InnerError!Temp {
189796189796 temp_index.tracking(cg).* = .init(
189797189797 try cg.allocRegOrMemAdvanced(ty, temp_index.toIndex(), true),
189798189798 );
189799 cg.temp_type[@intFromEnum(temp_index)] = ty;
189800 cg.next_temp_index = @enumFromInt(@intFromEnum(temp_index) + 1);
189799 cg.temp_type[@backingInt(temp_index)] = ty;
189800 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(temp_index) + 1));
189801189801 return .{ .index = temp_index.toIndex() };
189802189802}
189803189803
......@@ -189806,8 +189806,8 @@ fn tempAllocReg(cg: *CodeGen, ty: Type, rs: RegisterManager.RegisterBitSet) Inne
189806189806 temp_index.tracking(cg).* = .init(
189807189807 .{ .register = try cg.register_manager.allocReg(temp_index.toIndex(), rs) },
189808189808 );
189809 cg.temp_type[@intFromEnum(temp_index)] = ty;
189810 cg.next_temp_index = @enumFromInt(@intFromEnum(temp_index) + 1);
189809 cg.temp_type[@backingInt(temp_index)] = ty;
189810 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(temp_index) + 1));
189811189811 return .{ .index = temp_index.toIndex() };
189812189812}
189813189813
......@@ -189816,8 +189816,8 @@ fn tempAllocRegPair(cg: *CodeGen, ty: Type, rs: RegisterManager.RegisterBitSet)
189816189816 temp_index.tracking(cg).* = .init(
189817189817 .{ .register_pair = try cg.register_manager.allocRegs(2, @splat(temp_index.toIndex()), rs) },
189818189818 );
189819 cg.temp_type[@intFromEnum(temp_index)] = ty;
189820 cg.next_temp_index = @enumFromInt(@intFromEnum(temp_index) + 1);
189819 cg.temp_type[@backingInt(temp_index)] = ty;
189820 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(temp_index) + 1));
189821189821 return .{ .index = temp_index.toIndex() };
189822189822}
189823189823
......@@ -189826,17 +189826,17 @@ fn tempAllocMem(cg: *CodeGen, ty: Type) InnerError!Temp {
189826189826 temp_index.tracking(cg).* = .init(
189827189827 try cg.allocRegOrMemAdvanced(ty, temp_index.toIndex(), false),
189828189828 );
189829 cg.temp_type[@intFromEnum(temp_index)] = ty;
189830 cg.next_temp_index = @enumFromInt(@intFromEnum(temp_index) + 1);
189829 cg.temp_type[@backingInt(temp_index)] = ty;
189830 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(temp_index) + 1));
189831189831 return .{ .index = temp_index.toIndex() };
189832189832}
189833189833
189834189834fn tempInit(cg: *CodeGen, ty: Type, value: MCValue) InnerError!Temp {
189835189835 const temp_index = cg.next_temp_index;
189836189836 temp_index.tracking(cg).* = .init(value);
189837 cg.temp_type[@intFromEnum(temp_index)] = ty;
189837 cg.temp_type[@backingInt(temp_index)] = ty;
189838189838 try cg.getValue(value, temp_index.toIndex());
189839 cg.next_temp_index = @enumFromInt(@intFromEnum(temp_index) + 1);
189839 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(temp_index) + 1));
189840189840 return .{ .index = temp_index.toIndex() };
189841189841}
189842189842
......@@ -189870,8 +189870,8 @@ fn tempFromOperand(cg: *CodeGen, op_ref: Air.Inst.Ref, op_dies: bool) InnerError
189870189870 const tracking = cg.getResolvedInstValue(op_inst);
189871189871 temp_index.tracking(cg).* = tracking.*;
189872189872 if (!cg.reuseTemp(temp.index, op_inst, tracking)) return .{ .index = op_ref.toIndex().? };
189873 cg.temp_type[@intFromEnum(temp_index)] = cg.typeOf(op_ref);
189874 cg.next_temp_index = @enumFromInt(@intFromEnum(temp_index) + 1);
189873 cg.temp_type[@backingInt(temp_index)] = cg.typeOf(op_ref);
189874 cg.next_temp_index = @fromBackingInt(@intCast(@backingInt(temp_index) + 1));
189875189875 return temp;
189876189876 }
189877189877
......@@ -189910,9 +189910,9 @@ const Operand = union(enum) {
189910189910
189911189911const Select = struct {
189912189912 cg: *CodeGen,
189913 types: [@intFromEnum(Select.Operand.Ref.none)]Type,
189914 temps: [@intFromEnum(Select.Operand.Ref.none)]Temp,
189915 labels: [@intFromEnum(Label._)]struct {
189913 types: [@backingInt(Select.Operand.Ref.none)]Type,
189914 temps: [@backingInt(Select.Operand.Ref.none)]Temp,
189915 labels: [@backingInt(Label._)]struct {
189916189916 backward: ?Mir.Inst.Index,
189917189917 forward: [3]?Mir.Inst.Index,
189918189918 },
......@@ -189921,8 +189921,8 @@ const Select = struct {
189921189921 const Error = InnerError || error{SelectFailed};
189922189922
189923189923 fn emitLabel(s: *Select, label_index: Label) void {
189924 assert(@intFromEnum(label_index) < @intFromEnum(Label._));
189925 const label = &s.labels[@intFromEnum(label_index)];
189924 assert(@backingInt(label_index) < @backingInt(Label._));
189925 const label = &s.labels[@backingInt(label_index)];
189926189926 for (&label.forward) |*reloc| {
189927189927 if (reloc.*) |r| s.cg.performReloc(r);
189928189928 reloc.* = null;
......@@ -190072,19 +190072,19 @@ const Select = struct {
190072190072 }
190073190073
190074190074 fn lowerReg(s: *const Select, reg: Register) Register {
190075 return if (reg.isClass(.x87)) @enumFromInt(@intFromEnum(Register.st0) + (@as(u3, @intCast(reg.enc())) -% s.top)) else reg;
190075 return if (reg.isClass(.x87)) @fromBackingInt(@intCast(@backingInt(Register.st0) + (@as(u3, @intCast(reg.enc())) -% s.top))) else reg;
190076190076 }
190077190077
190078190078 const Case = struct {
190079190079 required_abi: enum { any, gnu, msvc } = .any,
190080190080 required_cc_abi: enum { any, sysv64, win64 } = .any,
190081190081 required_features: [4]?std.Target.x86.Feature = @splat(null),
190082 src_constraints: [@intFromEnum(Select.Operand.Ref.none) - @intFromEnum(Select.Operand.Ref.src0)]Constraint = @splat(.any),
190083 dst_constraints: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]Constraint = @splat(.any),
190082 src_constraints: [@backingInt(Select.Operand.Ref.none) - @backingInt(Select.Operand.Ref.src0)]Constraint = @splat(.any),
190083 dst_constraints: [@backingInt(Select.Operand.Ref.src0) - @backingInt(Select.Operand.Ref.dst0)]Constraint = @splat(.any),
190084190084 patterns: []const Select.Pattern,
190085190085 call_frame: packed struct(u16) { size: u10 = 0, alignment: InternPool.Alignment } = .{ .size = 0, .alignment = .none },
190086 extra_temps: [@intFromEnum(Select.Operand.Ref.dst0) - @intFromEnum(Select.Operand.Ref.tmp0)]TempSpec = @splat(.unused),
190087 dst_temps: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused),
190086 extra_temps: [@backingInt(Select.Operand.Ref.dst0) - @backingInt(Select.Operand.Ref.tmp0)]TempSpec = @splat(.unused),
190087 dst_temps: [@backingInt(Select.Operand.Ref.src0) - @backingInt(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused),
190088190088 clobbers: packed struct {
190089190089 eflags: bool = false,
190090190090 caller_preserved: CallConv = .none,
......@@ -190452,7 +190452,7 @@ const Select = struct {
190452190452 };
190453190453
190454190454 const Pattern = struct {
190455 src: [@intFromEnum(Select.Operand.Ref.none) - @intFromEnum(Select.Operand.Ref.src0)]Src,
190455 src: [@backingInt(Select.Operand.Ref.none) - @backingInt(Select.Operand.Ref.src0)]Src,
190456190456 commute: struct { u8, u8 } = .{ 0, 0 },
190457190457
190458190458 const Src = union(enum) {
......@@ -191203,7 +191203,7 @@ const Select = struct {
191203191203 else => {},
191204191204 inline .rc_mask, .mut_rc_mask, .ref_mask => |mask| temp.asMask(mask.info, cg),
191205191205 }
191206 cg.temp_type[@intFromEnum(temp.unwrap(cg).temp)] = spec.type;
191206 cg.temp_type[@backingInt(temp.unwrap(cg).temp)] = spec.type;
191207191207 }
191208191208 };
191209191209
......@@ -191602,17 +191602,17 @@ const Select = struct {
191602191602 };
191603191603
191604191604 fn typeOf(ref: Ref, s: *const Select) Type {
191605 return s.types[@intFromEnum(ref)];
191605 return s.types[@backingInt(ref)];
191606191606 }
191607191607
191608191608 fn tempOf(ref: Ref, s: *const Select) Temp {
191609 return s.temps[@intFromEnum(ref)];
191609 return s.temps[@backingInt(ref)];
191610191610 }
191611191611
191612191612 fn valueOf(ref: Ref, s: *const Select) MCValue {
191613191613 return switch (ref) {
191614191614 .none => .none,
191615 else => s.temps[@intFromEnum(ref)].tracking(s.cg).short,
191615 else => s.temps[@backingInt(ref)].tracking(s.cg).short,
191616191616 };
191617191617 }
191618191618 };
......@@ -192281,7 +192281,7 @@ const Select = struct {
192281192281 Select.Operand.Ref.src1.valueOf(s).immediate),
192282192282 .vector_index => switch (op.flags.base.ref.typeOf(s).ptrInfo(s.cg.pt.zcu).flags.vector_index) {
192283192283 .none => unreachable,
192284 else => |vector_index| @intFromEnum(vector_index),
192284 else => |vector_index| @backingInt(vector_index),
192285192285 },
192286192286 .src1 => @intCast(Select.Operand.Ref.src1.valueOf(s).immediate),
192287192287 .src1_sub_bit_size => @as(SignedImm, @intCast(Select.Operand.Ref.src1.valueOf(s).immediate)) -
......@@ -192465,14 +192465,14 @@ fn select(
192465192465 if (case.call_frame.alignment != .none) {
192466192466 const frame_allocs_slice = cg.frame_allocs.slice();
192467192467 const stack_frame_size =
192468 &frame_allocs_slice.items(.abi_size)[@intFromEnum(FrameIndex.call_frame)];
192468 &frame_allocs_slice.items(.abi_size)[@backingInt(FrameIndex.call_frame)];
192469192469 stack_frame_size.* = @max(stack_frame_size.*, switch (cg.target.cCallingConvention().?) {
192470192470 .x86_64_sysv => case.call_frame.size,
192471192471 .x86_64_win => win64_shadow_space + case.call_frame.size,
192472192472 else => unreachable,
192473192473 });
192474192474 const stack_frame_align =
192475 &frame_allocs_slice.items(.abi_align)[@intFromEnum(FrameIndex.call_frame)];
192475 &frame_allocs_slice.items(.abi_align)[@backingInt(FrameIndex.call_frame)];
192476192476 stack_frame_align.* = stack_frame_align.max(case.call_frame.alignment);
192477192477 }
192478192478
......@@ -192483,12 +192483,12 @@ fn select(
192483192483 .labels = @splat(.{ .forward = @splat(null), .backward = null }),
192484192484 .top = 0,
192485192485 };
192486 const s_tmp_types = s.types[@intFromEnum(Select.Operand.Ref.tmp0)..@intFromEnum(Select.Operand.Ref.dst0)];
192487 const s_tmp_temps = s.temps[@intFromEnum(Select.Operand.Ref.tmp0)..@intFromEnum(Select.Operand.Ref.dst0)];
192488 const s_dst_types = s.types[@intFromEnum(Select.Operand.Ref.dst0)..@intFromEnum(Select.Operand.Ref.src0)];
192489 const s_dst_temps = s.temps[@intFromEnum(Select.Operand.Ref.dst0)..@intFromEnum(Select.Operand.Ref.src0)];
192490 const s_src_types = s.types[@intFromEnum(Select.Operand.Ref.src0)..@intFromEnum(Select.Operand.Ref.none)];
192491 const s_src_temps = s.temps[@intFromEnum(Select.Operand.Ref.src0)..@intFromEnum(Select.Operand.Ref.none)];
192486 const s_tmp_types = s.types[@backingInt(Select.Operand.Ref.tmp0)..@backingInt(Select.Operand.Ref.dst0)];
192487 const s_tmp_temps = s.temps[@backingInt(Select.Operand.Ref.tmp0)..@backingInt(Select.Operand.Ref.dst0)];
192488 const s_dst_types = s.types[@backingInt(Select.Operand.Ref.dst0)..@backingInt(Select.Operand.Ref.src0)];
192489 const s_dst_temps = s.temps[@backingInt(Select.Operand.Ref.dst0)..@backingInt(Select.Operand.Ref.src0)];
192490 const s_src_types = s.types[@backingInt(Select.Operand.Ref.src0)..@backingInt(Select.Operand.Ref.none)];
192491 const s_src_temps = s.temps[@backingInt(Select.Operand.Ref.src0)..@backingInt(Select.Operand.Ref.none)];
192492192492
192493192493 for (s_tmp_types, case.extra_temps) |*ty, spec| ty.* = spec.type;
192494192494 @memcpy(s_dst_types[0..dst_tys.len], dst_tys);
src/codegen/x86_64/Disassembler.zig+1-1
......@@ -379,7 +379,7 @@ fn parseEncoding(dis: *Disassembler, prefixes: Prefixes) !?Encoding {
379379
380380fn parseGpRegister(low_enc: u3, is_extended: bool, rex: Rex, bit_size: u64) Register {
381381 const reg_id: u4 = @as(u4, @intCast(@intFromBool(is_extended))) << 3 | low_enc;
382 const reg = @as(Register, @enumFromInt(reg_id)).toBitSize(bit_size);
382 const reg = @as(Register, @fromBackingInt(@intCast(reg_id))).toBitSize(bit_size);
383383 return switch (reg) {
384384 .spl => if (rex.present or rex.isSet()) .spl else .ah,
385385 .dil => if (rex.present or rex.isSet()) .dil else .bh,
src/codegen/x86_64/Emit.zig+41-41
......@@ -135,33 +135,33 @@ pub fn emitMir(emit: *Emit) Error!void {
135135 } },
136136 .lazy_sym => |lazy_sym| .{ .symbol = .{
137137 .symbol = if (emit.bin_file.cast(.elf)) |elf_file|
138 @enumFromInt(
138 @fromBackingInt(@intCast(
139139 elf_file.zigObjectPtr().?.getOrCreateMetadataForLazySymbol(elf_file, emit.pt, lazy_sym) catch |err|
140140 return emit.fail("{s} creating lazy symbol", .{@errorName(err)}),
141 )
141 ))
142142 else if (emit.bin_file.cast(.elf2)) |elf|
143143 try elf.lazySymbol(lazy_sym)
144144 else if (emit.bin_file.cast(.macho)) |macho_file|
145 @enumFromInt(macho_file.getZigObject().?.getOrCreateMetadataForLazySymbol(macho_file, emit.pt, lazy_sym) catch |err|
146 return emit.fail("{s} creating lazy symbol", .{@errorName(err)}))
145 @fromBackingInt(@intCast(macho_file.getZigObject().?.getOrCreateMetadataForLazySymbol(macho_file, emit.pt, lazy_sym) catch |err|
146 return emit.fail("{s} creating lazy symbol", .{@errorName(err)})))
147147 else if (emit.bin_file.cast(.coff2)) |coff|
148 @enumFromInt(@intFromEnum(try coff.lazySymbol(lazy_sym)))
148 @fromBackingInt(@intCast(@backingInt(try coff.lazySymbol(lazy_sym))))
149149 else
150150 return emit.fail("lazy symbols unimplemented for {s}", .{@tagName(emit.bin_file.tag)}),
151151 .is_extern = false,
152152 } },
153153 .extern_func => |extern_func| .{ .symbol = .{
154154 .symbol = if (emit.bin_file.cast(.elf)) |elf_file|
155 @enumFromInt(try elf_file.getGlobalSymbol(extern_func.toSlice(&emit.lower.mir).?, null))
155 @fromBackingInt(@intCast(try elf_file.getGlobalSymbol(extern_func.toSlice(&emit.lower.mir).?, null)))
156156 else if (emit.bin_file.cast(.elf2)) |elf| try elf.externSymbol(.{
157157 .name = extern_func.toSlice(&emit.lower.mir).?,
158158 .lib_name = null,
159159 .type = .FUNC,
160160 }) else if (emit.bin_file.cast(.macho)) |macho_file|
161 @enumFromInt(try macho_file.getGlobalSymbol(extern_func.toSlice(&emit.lower.mir).?, null))
162 else if (emit.bin_file.cast(.coff2)) |coff| @enumFromInt(@intFromEnum(try coff.globalSymbol(.{
161 @fromBackingInt(@intCast(try macho_file.getGlobalSymbol(extern_func.toSlice(&emit.lower.mir).?, null)))
162 else if (emit.bin_file.cast(.coff2)) |coff| @fromBackingInt(@intCast(@backingInt(try coff.globalSymbol(.{
163163 .name = extern_func.toSlice(&emit.lower.mir).?,
164 }))) else return emit.fail("external symbol unimplemented for {s}", .{@tagName(emit.bin_file.tag)}),
164 })))) else return emit.fail("external symbol unimplemented for {s}", .{@tagName(emit.bin_file.tag)}),
165165 .is_extern = true,
166166 } },
167167 },
......@@ -309,10 +309,10 @@ pub fn emitMir(emit: *Emit) Error!void {
309309 }, emit.lower.target), &.{.{
310310 .op_index = 0,
311311 .target = .{ .branch = .{
312 .symbol = if (emit.bin_file.cast(.elf)) |elf_file| @enumFromInt(try elf_file.getGlobalSymbol(
312 .symbol = if (emit.bin_file.cast(.elf)) |elf_file| @fromBackingInt(@intCast(try elf_file.getGlobalSymbol(
313313 "__tls_get_addr",
314314 if (comp.config.link_libc) "c" else null,
315 )) else if (emit.bin_file.cast(.elf2)) |elf| try elf.externSymbol(.{
315 ))) else if (emit.bin_file.cast(.elf2)) |elf| try elf.externSymbol(.{
316316 .name = "__tls_get_addr",
317317 .lib_name = if (comp.config.link_libc) "c" else null,
318318 .type = .FUNC,
......@@ -391,9 +391,9 @@ pub fn emitMir(emit: *Emit) Error!void {
391391 }, emit.lower.target), &.{.{
392392 .op_index = 1,
393393 .target = .{ .symbol = .{
394 .symbol = @enumFromInt(@intFromEnum(
394 .symbol = @fromBackingInt(@intCast(@backingInt(
395395 try coff.globalSymbol(.{ .name = "__tls_index" }),
396 )),
396 ))),
397397 .is_extern = false,
398398 } },
399399 }});
......@@ -426,9 +426,9 @@ pub fn emitMir(emit: *Emit) Error!void {
426426 }, emit.lower.target), &.{.{
427427 .op_index = 1,
428428 .target = .{ .symbol = .{
429 .symbol = @enumFromInt(@intFromEnum(
429 .symbol = @fromBackingInt(@intCast(@backingInt(
430430 try coff.globalSymbol(.{ .name = "_tls_index" }),
431 )),
431 ))),
432432 .is_extern = false,
433433 } },
434434 }});
......@@ -680,17 +680,17 @@ pub fn emitMir(emit: *Emit) Error!void {
680680 var table_offset = std.mem.alignForward(u32, @intCast(emit.w.end), ptr_size);
681681 if (emit.bin_file.cast(.elf)) |elf_file| {
682682 const zo = elf_file.zigObjectPtr().?;
683 const atom = zo.symbol(@intFromEnum(emit.atom_id)).atom(elf_file).?;
683 const atom = zo.symbol(@backingInt(emit.atom_id)).atom(elf_file).?;
684684
685685 for (emit.table_relocs.items) |table_reloc| try atom.addReloc(gpa, .{
686686 .r_offset = table_reloc.source_offset,
687 .r_info = @as(u64, @intFromEnum(emit.atom_id)) << 32 | @intFromEnum(std.elf.R_X86_64.@"32S"),
687 .r_info = @as(u64, @backingInt(emit.atom_id)) << 32 | @backingInt(std.elf.R_X86_64.@"32S"),
688688 .r_addend = @as(i64, table_offset) + table_reloc.target_offset,
689689 }, zo);
690690 for (emit.lower.mir.table) |entry| {
691691 try atom.addReloc(gpa, .{
692692 .r_offset = table_offset,
693 .r_info = @as(u64, @intFromEnum(emit.atom_id)) << 32 | @intFromEnum(std.elf.R_X86_64.@"64"),
693 .r_info = @as(u64, @backingInt(emit.atom_id)) << 32 | @backingInt(std.elf.R_X86_64.@"64"),
694694 .r_addend = emit.code_offset_mapping.items[entry],
695695 }, zo);
696696 table_offset += ptr_size;
......@@ -793,7 +793,7 @@ fn encodeInst(emit: *Emit, lowered_inst: Instruction, reloc_info: []const RelocI
793793 }),
794794 .symbol => |target| if (emit.bin_file.cast(.elf)) |elf_file| {
795795 const zo = elf_file.zigObjectPtr().?;
796 const atom = zo.symbol(@intFromEnum(emit.atom_id)).atom(elf_file).?;
796 const atom = zo.symbol(@backingInt(emit.atom_id)).atom(elf_file).?;
797797 const r_type: std.elf.R_X86_64 = if (!emit.pic)
798798 .@"32S"
799799 else if (target.is_extern and !target.force_pcrel_direct)
......@@ -802,23 +802,23 @@ fn encodeInst(emit: *Emit, lowered_inst: Instruction, reloc_info: []const RelocI
802802 .PC32;
803803 try atom.addReloc(gpa, .{
804804 .r_offset = end_offset - 4,
805 .r_info = @as(u64, @intFromEnum(target.symbol)) << 32 | @intFromEnum(r_type),
805 .r_info = @as(u64, @backingInt(target.symbol)) << 32 | @backingInt(r_type),
806806 .r_addend = if (emit.pic) reloc.off - 4 else reloc.off,
807807 }, zo);
808808 } else if (emit.bin_file.cast(.macho)) |macho_file| {
809809 const zo = macho_file.getZigObject().?;
810 const atom = zo.symbols.items[@intFromEnum(emit.atom_id)].getAtom(macho_file).?;
810 const atom = zo.symbols.items[@backingInt(emit.atom_id)].getAtom(macho_file).?;
811811 try atom.addReloc(macho_file, .{
812812 .tag = .@"extern",
813813 .offset = end_offset - 4,
814 .target = @intFromEnum(target.symbol),
814 .target = @backingInt(target.symbol),
815815 .addend = reloc.off,
816816 .type = if (target.is_extern and !target.force_pcrel_direct) .got_load else .signed,
817817 .meta = .{
818818 .pcrel = true,
819819 .has_subtractor = false,
820820 .length = 2,
821 .symbolnum = @intCast(@intFromEnum(target.symbol)),
821 .symbolnum = @intCast(@backingInt(target.symbol)),
822822 },
823823 });
824824 } else if (emit.bin_file.cast(.elf2)) |elf| try elf.addReloc(
......@@ -832,19 +832,19 @@ fn encodeInst(emit: *Emit, lowered_inst: Instruction, reloc_info: []const RelocI
832832 break :rt .PC32;
833833 } },
834834 ) else if (emit.bin_file.cast(.coff2)) |coff| try coff.addReloc(
835 @enumFromInt(@intFromEnum(emit.atom_id)),
835 @fromBackingInt(@intCast(@backingInt(emit.atom_id))),
836836 end_offset - 4,
837 @enumFromInt(@intFromEnum(target.symbol)),
837 @fromBackingInt(@intCast(@backingInt(target.symbol))),
838838 .{ .known = reloc.off },
839839 .{ .AMD64 = .REL32 },
840840 ) else unreachable,
841841 .branch => |target| if (emit.bin_file.cast(.elf)) |elf_file| {
842842 const zo = elf_file.zigObjectPtr().?;
843 const atom = zo.symbol(@intFromEnum(emit.atom_id)).atom(elf_file).?;
843 const atom = zo.symbol(@backingInt(emit.atom_id)).atom(elf_file).?;
844844 const r_type: std.elf.R_X86_64 = .PLT32;
845845 try atom.addReloc(gpa, .{
846846 .r_offset = end_offset - 4,
847 .r_info = @as(u64, @intFromEnum(target.symbol)) << 32 | @intFromEnum(r_type),
847 .r_info = @as(u64, @backingInt(target.symbol)) << 32 | @backingInt(r_type),
848848 .r_addend = reloc.off - 4,
849849 }, zo);
850850 } else if (emit.bin_file.cast(.elf2)) |elf| try elf.addReloc(
......@@ -855,24 +855,24 @@ fn encodeInst(emit: *Emit, lowered_inst: Instruction, reloc_info: []const RelocI
855855 .{ .X86_64 = .PLT32 },
856856 ) else if (emit.bin_file.cast(.macho)) |macho_file| {
857857 const zo = macho_file.getZigObject().?;
858 const atom = zo.symbols.items[@intFromEnum(emit.atom_id)].getAtom(macho_file).?;
858 const atom = zo.symbols.items[@backingInt(emit.atom_id)].getAtom(macho_file).?;
859859 try atom.addReloc(macho_file, .{
860860 .tag = .@"extern",
861861 .offset = end_offset - 4,
862 .target = @intFromEnum(target.symbol),
862 .target = @backingInt(target.symbol),
863863 .addend = reloc.off,
864864 .type = .branch,
865865 .meta = .{
866866 .pcrel = true,
867867 .has_subtractor = false,
868868 .length = 2,
869 .symbolnum = @intCast(@intFromEnum(target.symbol)),
869 .symbolnum = @intCast(@backingInt(target.symbol)),
870870 },
871871 });
872872 } else if (emit.bin_file.cast(.coff2)) |coff| try coff.addReloc(
873 @enumFromInt(@intFromEnum(emit.atom_id)),
873 @fromBackingInt(@intCast(@backingInt(emit.atom_id))),
874874 end_offset - 4,
875 @enumFromInt(@intFromEnum(target.symbol)),
875 @fromBackingInt(@intCast(@backingInt(target.symbol))),
876876 .{ .known = reloc.off },
877877 .{ .AMD64 = .REL32 },
878878 ) else return emit.fail("TODO implement {s} reloc for {s}", .{
......@@ -880,11 +880,11 @@ fn encodeInst(emit: *Emit, lowered_inst: Instruction, reloc_info: []const RelocI
880880 }),
881881 .tls => |target_symbol| if (emit.bin_file.cast(.elf)) |elf_file| {
882882 const zo = elf_file.zigObjectPtr().?;
883 const atom = zo.symbol(@intFromEnum(emit.atom_id)).atom(elf_file).?;
883 const atom = zo.symbol(@backingInt(emit.atom_id)).atom(elf_file).?;
884884 const r_type: std.elf.R_X86_64 = if (emit.pic) .TLSLD else unreachable;
885885 try atom.addReloc(gpa, .{
886886 .r_offset = end_offset - 4,
887 .r_info = @as(u64, @intFromEnum(target_symbol)) << 32 | @intFromEnum(r_type),
887 .r_info = @as(u64, @backingInt(target_symbol)) << 32 | @backingInt(r_type),
888888 .r_addend = reloc.off - 4,
889889 }, zo);
890890 } else if (emit.bin_file.cast(.elf2)) |elf| try elf.addReloc(
......@@ -898,11 +898,11 @@ fn encodeInst(emit: *Emit, lowered_inst: Instruction, reloc_info: []const RelocI
898898 }),
899899 .tlv => |target| if (emit.bin_file.cast(.elf)) |elf_file| {
900900 const zo = elf_file.zigObjectPtr().?;
901 const atom = zo.symbol(@intFromEnum(emit.atom_id)).atom(elf_file).?;
901 const atom = zo.symbol(@backingInt(emit.atom_id)).atom(elf_file).?;
902902 const r_type: std.elf.R_X86_64 = if (emit.pic) .DTPOFF32 else .TPOFF32;
903903 try atom.addReloc(gpa, .{
904904 .r_offset = end_offset - 4,
905 .r_info = @as(u64, @intFromEnum(target.symbol)) << 32 | @intFromEnum(r_type),
905 .r_info = @as(u64, @backingInt(target.symbol)) << 32 | @backingInt(r_type),
906906 .r_addend = reloc.off,
907907 }, zo);
908908 } else if (emit.bin_file.cast(.elf2)) |elf| try elf.addReloc(
......@@ -913,24 +913,24 @@ fn encodeInst(emit: *Emit, lowered_inst: Instruction, reloc_info: []const RelocI
913913 .{ .X86_64 = if (emit.pic) .DTPOFF32 else .TPOFF32 },
914914 ) else if (emit.bin_file.cast(.macho)) |macho_file| {
915915 const zo = macho_file.getZigObject().?;
916 const atom = zo.symbols.items[@intFromEnum(emit.atom_id)].getAtom(macho_file).?;
916 const atom = zo.symbols.items[@backingInt(emit.atom_id)].getAtom(macho_file).?;
917917 try atom.addReloc(macho_file, .{
918918 .tag = .@"extern",
919919 .offset = end_offset - 4,
920 .target = @intFromEnum(target.symbol),
920 .target = @backingInt(target.symbol),
921921 .addend = reloc.off,
922922 .type = .tlv,
923923 .meta = .{
924924 .pcrel = true,
925925 .has_subtractor = false,
926926 .length = 2,
927 .symbolnum = @intCast(@intFromEnum(target.symbol)),
927 .symbolnum = @intCast(@backingInt(target.symbol)),
928928 },
929929 });
930930 } else if (emit.bin_file.cast(.coff2)) |coff| try coff.addReloc(
931 @enumFromInt(@intFromEnum(emit.atom_id)),
931 @fromBackingInt(@intCast(@backingInt(emit.atom_id))),
932932 end_offset - 4,
933 @enumFromInt(@intFromEnum(target.symbol)),
933 @fromBackingInt(@intCast(@backingInt(target.symbol))),
934934 .{ .known = reloc.off },
935935 .{ .AMD64 = .SECREL },
936936 ) else return emit.fail("TODO implement {s} reloc for {s}", .{
src/codegen/x86_64/Encoding.zig+5-5
......@@ -57,7 +57,7 @@ pub fn findByMnemonic(
5757
5858 var shortest_enc: ?Encoding = null;
5959 var shortest_len: ?usize = null;
60 next: for (mnemonic_to_encodings_map[@intFromEnum(mnemonic)]) |data| {
60 next: for (mnemonic_to_encodings_map[@backingInt(mnemonic)]) |data| {
6161 if (!switch (data.feature) {
6262 .none => true,
6363 .@"32bit" => switch (target.cpu.arch) {
......@@ -122,7 +122,7 @@ pub fn findByOpcode(opc: []const u8, prefixes: struct {
122122 rex: Rex,
123123}, modrm_ext: ?u3) ?Encoding {
124124 for (mnemonic_to_encodings_map, 0..) |encs, mnemonic_int| for (encs) |data| {
125 const enc = Encoding{ .mnemonic = @as(Mnemonic, @enumFromInt(mnemonic_int)), .data = data };
125 const enc = Encoding{ .mnemonic = @as(Mnemonic, @fromBackingInt(@intCast(mnemonic_int))), .data = data };
126126 if (modrm_ext) |ext| if (ext != data.modrm_ext) continue;
127127 if (!std.mem.eql(u8, opc, enc.opcode())) continue;
128128 if (prefixes.rex.w) {
......@@ -1030,7 +1030,7 @@ const mnemonic_to_encodings_map = init: {
10301030
10311031 const mnemonic_count = @typeInfo(Mnemonic).@"enum".field_names.len;
10321032 var mnemonic_map: [mnemonic_count][]Data = @splat(&.{});
1033 for (encodings) |entry| mnemonic_map[@intFromEnum(entry[0])].len += 1;
1033 for (encodings) |entry| mnemonic_map[@backingInt(entry[0])].len += 1;
10341034 var data_storage: [encodings.len]Data = undefined;
10351035 var storage_index: usize = 0;
10361036 for (&mnemonic_map) |*value| {
......@@ -1041,8 +1041,8 @@ const mnemonic_to_encodings_map = init: {
10411041 const ops_len = @typeInfo(@FieldType(Data, "ops")).array.len;
10421042 const opc_len = @typeInfo(@FieldType(Data, "opc")).array.len;
10431043 for (encodings) |entry| {
1044 const index = &mnemonic_index[@intFromEnum(entry[0])];
1045 mnemonic_map[@intFromEnum(entry[0])][index.*] = .{
1044 const index = &mnemonic_index[@backingInt(entry[0])];
1045 mnemonic_map[@backingInt(entry[0])][index.*] = .{
10461046 .op_en = entry[1],
10471047 .ops = ops: {
10481048 var ops: [ops_len]Op = @splat(.none);
src/codegen/x86_64/Lower.zig+3-3
......@@ -433,7 +433,7 @@ const mnemonic_table: [inst_tags_len * inst_fixes_len]?Mnemonic = table: {
433433 @setEvalBranchQuota(80_000);
434434 var table: [inst_tags_len * inst_fixes_len]?Mnemonic = undefined;
435435 for (0..inst_fixes_len) |fixes_i| {
436 const fixes: Mir.Inst.Fixes = @enumFromInt(fixes_i);
436 const fixes: Mir.Inst.Fixes = @fromBackingInt(@intCast(fixes_i));
437437 const prefix, const suffix = affix: {
438438 const pattern = if (std.mem.indexOfScalar(u8, @tagName(fixes), ' ')) |i|
439439 @tagName(fixes)[i + 1 ..]
......@@ -443,7 +443,7 @@ const mnemonic_table: [inst_tags_len * inst_fixes_len]?Mnemonic = table: {
443443 break :affix .{ pattern[0..wildcard_idx], pattern[wildcard_idx + 1 ..] };
444444 };
445445 for (0..inst_tags_len) |inst_tag_i| {
446 const inst_tag: Mir.Inst.Tag = @enumFromInt(inst_tag_i);
446 const inst_tag: Mir.Inst.Tag = @fromBackingInt(@intCast(inst_tag_i));
447447 const name = prefix ++ @tagName(inst_tag) ++ suffix;
448448 const idx = inst_tag_i * inst_fixes_len + fixes_i;
449449 table[idx] = if (@hasField(Mnemonic, name)) @field(Mnemonic, name) else null;
......@@ -482,7 +482,7 @@ fn generic(lower: *Lower, inst: Mir.Inst) Error!void {
482482 else
483483 .none,
484484 }, mnemonic: {
485 if (mnemonic_table[@intFromEnum(inst.tag) * inst_fixes_len + @intFromEnum(fixes)]) |mnemonic| {
485 if (mnemonic_table[@backingInt(inst.tag) * inst_fixes_len + @backingInt(fixes)]) |mnemonic| {
486486 break :mnemonic mnemonic;
487487 }
488488 // This combination is invalid; make the theoretical mnemonic name and emit an error with it.
src/codegen/x86_64/Mir.zig+20-20
......@@ -1822,7 +1822,7 @@ pub const NullTerminatedString = enum(u32) {
18221822
18231823 pub fn toSlice(nts: NullTerminatedString, mir: *const Mir) ?[:0]const u8 {
18241824 if (nts == .none) return null;
1825 const string_bytes = mir.string_bytes[@intFromEnum(nts)..];
1825 const string_bytes = mir.string_bytes[@backingInt(nts)..];
18261826 return string_bytes[0..std.mem.indexOfScalar(u8, string_bytes, 0).? :0];
18271827 }
18281828};
......@@ -1890,13 +1890,13 @@ pub const Memory = struct {
18901890 },
18911891 .base = switch (mem.base) {
18921892 .none, .table => undefined,
1893 .reg => |reg| @intFromEnum(reg),
1894 .frame => |frame_index| @intFromEnum(frame_index),
1893 .reg => |reg| @backingInt(reg),
1894 .frame => |frame_index| @backingInt(frame_index),
18951895 .rip_inst => |inst_index| inst_index,
1896 .nav => |nav| @intFromEnum(nav),
1897 .uav => |uav| @intFromEnum(uav.val),
1898 .lazy_sym => |lazy_sym| @intFromEnum(lazy_sym.ty),
1899 .extern_func => |extern_func| @intFromEnum(extern_func),
1896 .nav => |nav| @backingInt(nav),
1897 .uav => |uav| @backingInt(uav.val),
1898 .lazy_sym => |lazy_sym| @backingInt(lazy_sym.ty),
1899 .extern_func => |extern_func| @backingInt(extern_func),
19001900 },
19011901 .off = switch (mem.mod) {
19021902 .rm => |rm| @bitCast(rm.disp),
......@@ -1905,8 +1905,8 @@ pub const Memory = struct {
19051905 .extra = switch (mem.mod) {
19061906 .rm => switch (mem.base) {
19071907 else => undefined,
1908 .uav => |uav| @intFromEnum(uav.orig_ty),
1909 .lazy_sym => |lazy_sym| @intFromEnum(lazy_sym.kind),
1908 .uav => |uav| @backingInt(uav.orig_ty),
1909 .lazy_sym => |lazy_sym| @backingInt(lazy_sym.kind),
19101910 },
19111911 .off => switch (mem.base) {
19121912 .reg => @intCast(mem.mod.off >> 32),
......@@ -1919,7 +1919,7 @@ pub const Memory = struct {
19191919 pub fn decode(mem: Memory) encoder.Instruction.Memory {
19201920 switch (mem.info.mod) {
19211921 .rm => {
1922 if (mem.info.base == .reg and @as(Register, @enumFromInt(mem.base)) == .rip) {
1922 if (mem.info.base == .reg and @as(Register, @fromBackingInt(@intCast(mem.base))) == .rip) {
19231923 assert(mem.info.index == .none and mem.info.scale == .@"1");
19241924 return encoder.Instruction.Memory.initRip(mem.info.size, @bitCast(mem.off));
19251925 }
......@@ -1927,14 +1927,14 @@ pub const Memory = struct {
19271927 .disp = @bitCast(mem.off),
19281928 .base = switch (mem.info.base) {
19291929 .none => .none,
1930 .reg => .{ .reg = @enumFromInt(mem.base) },
1931 .frame => .{ .frame = @enumFromInt(mem.base) },
1930 .reg => .{ .reg = @fromBackingInt(@intCast(mem.base)) },
1931 .frame => .{ .frame = @fromBackingInt(@intCast(mem.base)) },
19321932 .table => .table,
19331933 .rip_inst => .{ .rip_inst = mem.base },
1934 .nav => .{ .nav = @enumFromInt(mem.base) },
1935 .uav => .{ .uav = .{ .val = @enumFromInt(mem.base), .orig_ty = @enumFromInt(mem.extra) } },
1936 .lazy_sym => .{ .lazy_sym = .{ .kind = @enumFromInt(mem.extra), .ty = @enumFromInt(mem.base) } },
1937 .extern_func => .{ .extern_func = @enumFromInt(mem.base) },
1934 .nav => .{ .nav = @fromBackingInt(@intCast(mem.base)) },
1935 .uav => .{ .uav = .{ .val = @fromBackingInt(@intCast(mem.base)), .orig_ty = @fromBackingInt(@intCast(mem.extra)) } },
1936 .lazy_sym => .{ .lazy_sym = .{ .kind = @fromBackingInt(@intCast(mem.extra)), .ty = @fromBackingInt(@intCast(mem.base)) } },
1937 .extern_func => .{ .extern_func = @fromBackingInt(@intCast(mem.base)) },
19381938 },
19391939 .scale_index = switch (mem.info.index) {
19401940 .none => null,
......@@ -1951,7 +1951,7 @@ pub const Memory = struct {
19511951 .off => {
19521952 assert(mem.info.base == .reg);
19531953 return encoder.Instruction.Memory.initMoffs(
1954 @enumFromInt(mem.base),
1954 @fromBackingInt(@intCast(mem.base)),
19551955 @as(u64, mem.extra) << 32 | mem.off,
19561956 );
19571957 },
......@@ -2074,7 +2074,7 @@ pub fn extraData(mir: Mir, comptime T: type, index: u32) struct { data: T, end:
20742074 @field(result, field_name) = switch (field_type) {
20752075 u32 => mir.extra[i],
20762076 i32, Memory.Info => @bitCast(mir.extra[i]),
2077 bits.FrameIndex => @enumFromInt(mir.extra[i]),
2077 bits.FrameIndex => @fromBackingInt(@intCast(mir.extra[i])),
20782078 else => @compileError("bad field type: " ++ field_name ++ ": " ++ @typeName(field_type)),
20792079 };
20802080 i += 1;
......@@ -2091,7 +2091,7 @@ pub const FrameLoc = struct {
20912091};
20922092
20932093pub fn resolveFrameAddr(mir: Mir, frame_addr: bits.FrameAddr) bits.RegisterOffset {
2094 const frame_loc = mir.frame_locs.get(@intFromEnum(frame_addr.index));
2094 const frame_loc = mir.frame_locs.get(@backingInt(frame_addr.index));
20952095 return .{ .reg = frame_loc.base, .off = frame_loc.disp + frame_addr.off };
20962096}
20972097
......@@ -2107,7 +2107,7 @@ pub fn resolveMemoryExtra(mir: Mir, payload: u32) Memory {
21072107 .index = mem.info.index,
21082108 .scale = mem.info.scale,
21092109 },
2110 .base = @intFromEnum(mir.frame_locs.items(.base)[mem.base]),
2110 .base = @backingInt(mir.frame_locs.items(.base)[mem.base]),
21112111 .off = @bitCast(mir.frame_locs.items(.disp)[mem.base] + @as(i32, @bitCast(mem.off))),
21122112 .extra = mem.extra,
21132113 } else mem,
src/codegen/x86_64/bits.zig+30-30
......@@ -241,7 +241,7 @@ pub const SseFloatPredicate = enum(u3) {
241241 pub const ord_q: SseFloatPredicate = .ord;
242242
243243 pub fn imm(pred: SseFloatPredicate) Immediate {
244 return .u(@intFromEnum(pred));
244 return .u(@backingInt(pred));
245245 }
246246};
247247
......@@ -342,7 +342,7 @@ pub const VexFloatPredicate = enum(u5) {
342342 pub const @"true": VexFloatPredicate = .true_uq;
343343
344344 pub fn imm(pred: VexFloatPredicate) Immediate {
345 return .u(@intFromEnum(pred));
345 return .u(@backingInt(pred));
346346 }
347347};
348348
......@@ -407,7 +407,7 @@ pub const Register = enum(u8) {
407407 };
408408
409409 pub fn class(reg: Register) Class {
410 return switch (@intFromEnum(reg)) {
410 return switch (@backingInt(reg)) {
411411 // zig fmt: off
412412 @intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => .general_purpose,
413413 @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => .general_purpose,
......@@ -442,7 +442,7 @@ pub const Register = enum(u8) {
442442 }
443443
444444 pub fn id(reg: Register) u7 {
445 const base = switch (@intFromEnum(reg)) {
445 const base = switch (@backingInt(reg)) {
446446 // zig fmt: off
447447 @intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => @intFromEnum(Register.rax),
448448 @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax),
......@@ -462,11 +462,11 @@ pub const Register = enum(u8) {
462462 else => unreachable,
463463 // zig fmt: on
464464 };
465 return @intCast(@intFromEnum(reg) - base);
465 return @intCast(@backingInt(reg) - base);
466466 }
467467
468468 pub fn size(reg: Register) Memory.Size {
469 return switch (@intFromEnum(reg)) {
469 return switch (@backingInt(reg)) {
470470 // zig fmt: off
471471 @intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => .qword,
472472 @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => .dword,
......@@ -491,7 +491,7 @@ pub const Register = enum(u8) {
491491 }
492492
493493 pub fn isExtended(reg: Register) bool {
494 return switch (@intFromEnum(reg)) {
494 return switch (@backingInt(reg)) {
495495 // zig fmt: off
496496 @intFromEnum(Register.r8) ... @intFromEnum(Register.r15) => true,
497497 @intFromEnum(Register.r8d) ... @intFromEnum(Register.r15d) => true,
......@@ -511,7 +511,7 @@ pub const Register = enum(u8) {
511511 }
512512
513513 pub fn enc(reg: Register) u5 {
514 const base = switch (@intFromEnum(reg)) {
514 const base = switch (@backingInt(reg)) {
515515 // zig fmt: off
516516 @intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => @intFromEnum(Register.rax),
517517 @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax),
......@@ -532,7 +532,7 @@ pub const Register = enum(u8) {
532532 else => unreachable,
533533 // zig fmt: on
534534 };
535 return @truncate(@intFromEnum(reg) - base);
535 return @truncate(@backingInt(reg) - base);
536536 }
537537
538538 pub fn toBitSize(reg: Register, bit_size: u64) Register {
......@@ -572,7 +572,7 @@ pub const Register = enum(u8) {
572572 }
573573
574574 fn gpBase(reg: Register) u7 {
575 return switch (@intFromEnum(reg)) {
575 return switch (@backingInt(reg)) {
576576 // zig fmt: off
577577 @intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => @intFromEnum(Register.rax),
578578 @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax),
......@@ -586,7 +586,7 @@ pub const Register = enum(u8) {
586586
587587 pub fn to64(reg: Register) Register {
588588 return switch (reg.class()) {
589 .general_purpose, .gphi => @enumFromInt(@intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.rax)),
589 .general_purpose, .gphi => @fromBackingInt(@intCast(@backingInt(reg) - reg.gpBase() + @backingInt(Register.rax))),
590590 .segment => unreachable,
591591 .x87, .mmx, .cr, .dr => reg,
592592 .sse => reg.to128(),
......@@ -596,7 +596,7 @@ pub const Register = enum(u8) {
596596
597597 pub fn to32(reg: Register) Register {
598598 return switch (reg.class()) {
599 .general_purpose, .gphi => @enumFromInt(@intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.eax)),
599 .general_purpose, .gphi => @fromBackingInt(@intCast(@backingInt(reg) - reg.gpBase() + @backingInt(Register.eax))),
600600 .segment => unreachable,
601601 .x87, .mmx, .cr, .dr => reg,
602602 .sse => reg.to128(),
......@@ -606,7 +606,7 @@ pub const Register = enum(u8) {
606606
607607 pub fn to16(reg: Register) Register {
608608 return switch (reg.class()) {
609 .general_purpose, .gphi => @enumFromInt(@intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.ax)),
609 .general_purpose, .gphi => @fromBackingInt(@intCast(@backingInt(reg) - reg.gpBase() + @backingInt(Register.ax))),
610610 .segment, .x87, .mmx, .cr, .dr => reg,
611611 .sse => reg.to128(),
612612 .ip => .ip,
......@@ -623,12 +623,12 @@ pub const Register = enum(u8) {
623623 }
624624
625625 pub fn toLo8(reg: Register) Register {
626 return @enumFromInt(@intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.al));
626 return @fromBackingInt(@intCast(@backingInt(reg) - reg.gpBase() + @backingInt(Register.al)));
627627 }
628628
629629 pub fn toHi8(reg: Register) Register {
630630 assert(reg.isClass(.gphi));
631 return @enumFromInt(@intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.ah));
631 return @fromBackingInt(@intCast(@backingInt(reg) - reg.gpBase() + @backingInt(Register.ah)));
632632 }
633633
634634 pub fn to80(reg: Register) Register {
......@@ -638,24 +638,24 @@ pub const Register = enum(u8) {
638638
639639 fn sseBase(reg: Register) u8 {
640640 assert(reg.isClass(.sse));
641 return switch (@intFromEnum(reg)) {
642 @intFromEnum(Register.zmm0)...@intFromEnum(Register.zmm31) => @intFromEnum(Register.zmm0),
643 @intFromEnum(Register.ymm0)...@intFromEnum(Register.ymm31) => @intFromEnum(Register.ymm0),
644 @intFromEnum(Register.xmm0)...@intFromEnum(Register.xmm31) => @intFromEnum(Register.xmm0),
641 return switch (@backingInt(reg)) {
642 @backingInt(Register.zmm0)...@backingInt(Register.zmm31) => @backingInt(Register.zmm0),
643 @backingInt(Register.ymm0)...@backingInt(Register.ymm31) => @backingInt(Register.ymm0),
644 @backingInt(Register.xmm0)...@backingInt(Register.xmm31) => @backingInt(Register.xmm0),
645645 else => unreachable,
646646 };
647647 }
648648
649649 pub fn to512(reg: Register) Register {
650 return @enumFromInt(@intFromEnum(reg) - reg.sseBase() + @intFromEnum(Register.zmm0));
650 return @fromBackingInt(@intCast(@backingInt(reg) - reg.sseBase() + @backingInt(Register.zmm0)));
651651 }
652652
653653 pub fn to256(reg: Register) Register {
654 return @enumFromInt(@intFromEnum(reg) - reg.sseBase() + @intFromEnum(Register.ymm0));
654 return @fromBackingInt(@intCast(@backingInt(reg) - reg.sseBase() + @backingInt(Register.ymm0)));
655655 }
656656
657657 pub fn to128(reg: Register) Register {
658 return @enumFromInt(@intFromEnum(reg) - reg.sseBase() + @intFromEnum(Register.xmm0));
658 return @fromBackingInt(@intCast(@backingInt(reg) - reg.sseBase() + @backingInt(Register.xmm0)));
659659 }
660660
661661 /// DWARF register encoding
......@@ -725,14 +725,14 @@ pub const FrameIndex = enum(u32) {
725725 pub const named_count = @typeInfo(FrameIndex).@"enum".field_names.len;
726726
727727 pub fn isNamed(fi: FrameIndex) bool {
728 return @intFromEnum(fi) < named_count;
728 return @backingInt(fi) < named_count;
729729 }
730730
731731 pub fn format(fi: FrameIndex, writer: *std.Io.Writer) std.Io.Writer.Error!void {
732732 if (fi.isNamed()) {
733733 try writer.print("FrameIndex.{t}", .{fi});
734734 } else {
735 try writer.print("FrameIndex({d})", .{@intFromEnum(fi)});
735 try writer.print("FrameIndex({d})", .{@backingInt(fi)});
736736 }
737737 }
738738};
......@@ -875,11 +875,11 @@ pub const Memory = struct {
875875 }
876876
877877 pub fn fromLog2(log2: u2) Scale {
878 return @enumFromInt(log2);
878 return @fromBackingInt(@intCast(log2));
879879 }
880880
881881 pub fn toLog2(scale: Scale) u2 {
882 return @intFromEnum(scale);
882 return @backingInt(scale);
883883 }
884884 };
885885};
......@@ -903,10 +903,10 @@ pub const Immediate = union(enum) {
903903 pub fn format(imm: Immediate, writer: *std.Io.Writer) std.Io.Writer.Error!void {
904904 switch (imm) {
905905 inline else => |int| try writer.print("{d}", .{int}),
906 .nav => |nav_off| try writer.print("Nav({d}) + {d}", .{ @intFromEnum(nav_off.nav), nav_off.off }),
907 .uav => |uav| try writer.print("Uav({d})", .{@intFromEnum(uav.val)}),
908 .lazy_sym => |lazy_sym| try writer.print("LazySym({s}, {d})", .{ @tagName(lazy_sym.kind), @intFromEnum(lazy_sym.ty) }),
909 .extern_func => |extern_func| try writer.print("ExternFunc({d})", .{@intFromEnum(extern_func)}),
906 .nav => |nav_off| try writer.print("Nav({d}) + {d}", .{ @backingInt(nav_off.nav), nav_off.off }),
907 .uav => |uav| try writer.print("Uav({d})", .{@backingInt(uav.val)}),
908 .lazy_sym => |lazy_sym| try writer.print("LazySym({s}, {d})", .{ @tagName(lazy_sym.kind), @backingInt(lazy_sym.ty) }),
909 .extern_func => |extern_func| try writer.print("ExternFunc({d})", .{@backingInt(extern_func)}),
910910 }
911911 }
912912};
src/codegen/x86_64/encoder.zig+7-7
......@@ -250,13 +250,13 @@ pub const Instruction = struct {
250250 .frame => |frame_index| try w.print("{f}", .{frame_index}),
251251 .table => try w.print("Table", .{}),
252252 .rip_inst => |inst_index| try w.print("RipInst({d})", .{inst_index}),
253 .nav => |nav| try w.print("Nav({d})", .{@intFromEnum(nav)}),
254 .uav => |uav| try w.print("Uav({d})", .{@intFromEnum(uav.val)}),
253 .nav => |nav| try w.print("Nav({d})", .{@backingInt(nav)}),
254 .uav => |uav| try w.print("Uav({d})", .{@backingInt(uav.val)}),
255255 .lazy_sym => |lazy_sym| try w.print("LazySym({s}, {d})", .{
256256 @tagName(lazy_sym.kind),
257 @intFromEnum(lazy_sym.ty),
257 @backingInt(lazy_sym.ty),
258258 }),
259 .extern_func => |extern_func| try w.print("ExternFunc({d})", .{@intFromEnum(extern_func)}),
259 .extern_func => |extern_func| try w.print("ExternFunc({d})", .{@backingInt(extern_func)}),
260260 }
261261 if (mem.scaleIndex()) |si| {
262262 if (any) try w.writeAll(" + ");
......@@ -845,14 +845,14 @@ fn Encoder(comptime opts: Options) type {
845845 @as(u8, ~@intFromBool(fields.r)) << 7 |
846846 @as(u8, ~@intFromBool(fields.x)) << 6 |
847847 @as(u8, ~@intFromBool(fields.b)) << 5 |
848 @as(u8, @intFromEnum(fields.m)) << 0,
848 @as(u8, @backingInt(fields.m)) << 0,
849849 );
850850
851851 try self.w.writeByte(
852852 @as(u8, @intFromBool(fields.w)) << 7 |
853853 @as(u8, ~@as(u4, @intCast(fields.v.enc()))) << 3 |
854854 @as(u8, @intFromBool(fields.l)) << 2 |
855 @as(u8, @intFromEnum(fields.p)) << 0,
855 @as(u8, @backingInt(fields.p)) << 0,
856856 );
857857 } else {
858858 try self.w.writeByte(0b1100_0101);
......@@ -860,7 +860,7 @@ fn Encoder(comptime opts: Options) type {
860860 @as(u8, ~@intFromBool(fields.r)) << 7 |
861861 @as(u8, ~@as(u4, @intCast(fields.v.enc()))) << 3 |
862862 @as(u8, @intFromBool(fields.l)) << 2 |
863 @as(u8, @intFromEnum(fields.p)) << 0,
863 @as(u8, @backingInt(fields.p)) << 0,
864864 );
865865 }
866866 }
src/libs/mingw/Preprocessor.zig+2-2
......@@ -63,11 +63,11 @@ const IfContext = struct {
6363 level: u8,
6464
6565 fn get(self: *const IfContext) Nesting {
66 return @enumFromInt(std.mem.readPackedInt(Backing, &self.kind, @as(usize, self.level) * 2, .native));
66 return @fromBackingInt(@intCast(std.mem.readPackedInt(Backing, &self.kind, @as(usize, self.level) * 2, .native)));
6767 }
6868
6969 fn set(self: *IfContext, context: Nesting) void {
70 std.mem.writePackedInt(Backing, &self.kind, @as(usize, self.level) * 2, @intFromEnum(context), .native);
70 std.mem.writePackedInt(Backing, &self.kind, @as(usize, self.level) * 2, @backingInt(context), .native);
7171 }
7272
7373 fn increment(self: *IfContext) void {
src/libs/mingw/implib.zig+17-17
......@@ -505,7 +505,7 @@ fn getImportDescriptor(
505505 writeSymbol(&writer, .{
506506 .name = first_string_table_entry,
507507 .value = 0,
508 .section_number = @enumFromInt(1),
508 .section_number = @fromBackingInt(@intCast(1)),
509509 .type = .{
510510 .base_type = .NULL,
511511 .complex_type = .NULL,
......@@ -517,7 +517,7 @@ fn getImportDescriptor(
517517 writeSymbol(&writer, .{
518518 .name = ".idata$2".*,
519519 .value = 0,
520 .section_number = @enumFromInt(1),
520 .section_number = @fromBackingInt(@intCast(1)),
521521 .type = .{
522522 .base_type = .NULL,
523523 .complex_type = .NULL,
......@@ -528,7 +528,7 @@ fn getImportDescriptor(
528528 writeSymbol(&writer, .{
529529 .name = ".idata$6".*,
530530 .value = 0,
531 .section_number = @enumFromInt(2),
531 .section_number = @fromBackingInt(@intCast(2)),
532532 .type = .{
533533 .base_type = .NULL,
534534 .complex_type = .NULL,
......@@ -668,7 +668,7 @@ fn getNullImportDescriptor(
668668 writeSymbol(&writer, .{
669669 .name = first_string_table_entry,
670670 .value = 0,
671 .section_number = @enumFromInt(1),
671 .section_number = @fromBackingInt(@intCast(1)),
672672 .type = .{
673673 .base_type = .NULL,
674674 .complex_type = .NULL,
......@@ -781,7 +781,7 @@ fn getNullThunk(
781781 writeSymbol(&writer, .{
782782 .name = first_string_table_entry,
783783 .value = 0,
784 .section_number = @enumFromInt(1),
784 .section_number = @fromBackingInt(@intCast(1)),
785785 .type = .{
786786 .base_type = .NULL,
787787 .complex_type = .NULL,
......@@ -903,7 +903,7 @@ fn getWeakExternal(
903903 writeSymbol(&writer, .{
904904 .name = first_string_table_entry,
905905 .value = 0,
906 .section_number = @enumFromInt(0),
906 .section_number = @fromBackingInt(@intCast(0)),
907907 .type = .{
908908 .base_type = .NULL,
909909 .complex_type = .NULL,
......@@ -915,7 +915,7 @@ fn getWeakExternal(
915915 writeSymbol(&writer, .{
916916 .name = getNameBytesForStringTableOffset(@intCast(string_table_offset)),
917917 .value = 0,
918 .section_number = @enumFromInt(0),
918 .section_number = @fromBackingInt(@intCast(0)),
919919 .type = .{
920920 .base_type = .NULL,
921921 .complex_type = .NULL,
......@@ -1012,16 +1012,16 @@ fn getShortImport(
10121012fn writeSymbol(writer: *std.Io.Writer, symbol: std.coff.Symbol) !void {
10131013 try writer.writeAll(&symbol.name);
10141014 try writer.writeInt(u32, symbol.value, .little);
1015 try writer.writeInt(i16, @intFromEnum(symbol.section_number), .little);
1016 try writer.writeInt(u8, @intFromEnum(symbol.type.base_type), .little);
1017 try writer.writeInt(u8, @intFromEnum(symbol.type.complex_type), .little);
1018 try writer.writeInt(u8, @intFromEnum(symbol.storage_class), .little);
1015 try writer.writeInt(i16, @backingInt(symbol.section_number), .little);
1016 try writer.writeInt(u8, @backingInt(symbol.type.base_type), .little);
1017 try writer.writeInt(u8, @backingInt(symbol.type.complex_type), .little);
1018 try writer.writeInt(u8, @backingInt(symbol.storage_class), .little);
10191019 try writer.writeInt(u8, symbol.number_of_aux_symbols, .little);
10201020}
10211021
10221022fn writeWeakExternalDefinition(writer: *std.Io.Writer, weak_external: std.coff.WeakExternalDefinition) !void {
10231023 try writer.writeInt(u32, weak_external.tag_index, .little);
1024 try writer.writeInt(u32, @intFromEnum(weak_external.flag), .little);
1024 try writer.writeInt(u32, @backingInt(weak_external.flag), .little);
10251025 try writer.writeAll(&weak_external.unused);
10261026}
10271027
......@@ -1034,11 +1034,11 @@ fn writeRelocation(writer: *std.Io.Writer, relocation: std.coff.Relocation) !voi
10341034// https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#type-indicators
10351035pub fn rvaRelocationTypeIndicator(target: std.coff.IMAGE.FILE.MACHINE) ?u16 {
10361036 return switch (target) {
1037 .AMD64 => @intFromEnum(std.coff.IMAGE.REL.AMD64.ADDR32NB),
1038 .I386 => @intFromEnum(std.coff.IMAGE.REL.I386.DIR32NB),
1039 .ARMNT => @intFromEnum(std.coff.IMAGE.REL.ARM.ADDR32NB),
1040 .ARM64, .ARM64EC, .ARM64X => @intFromEnum(std.coff.IMAGE.REL.ARM64.ADDR32NB),
1041 .IA64 => @intFromEnum(std.coff.IMAGE.REL.IA64.DIR32NB),
1037 .AMD64 => @backingInt(std.coff.IMAGE.REL.AMD64.ADDR32NB),
1038 .I386 => @backingInt(std.coff.IMAGE.REL.I386.DIR32NB),
1039 .ARMNT => @backingInt(std.coff.IMAGE.REL.ARM.ADDR32NB),
1040 .ARM64, .ARM64EC, .ARM64X => @backingInt(std.coff.IMAGE.REL.ARM64.ADDR32NB),
1041 .IA64 => @backingInt(std.coff.IMAGE.REL.IA64.DIR32NB),
10421042 else => null,
10431043 };
10441044}
src/link.zig+2-2
......@@ -386,7 +386,7 @@ pub const Diags = struct {
386386 });
387387 const notes_start = try bundle.reserveNotes(@intCast(link_err.notes.len));
388388 for (link_err.notes, 0..) |note, i| {
389 bundle.extra.items[notes_start + i] = @intFromEnum(try bundle.addErrorMessage(.{
389 bundle.extra.items[notes_start + i] = @backingInt(try bundle.addErrorMessage(.{
390390 .msg = try note.string(bundle, base),
391391 }));
392392 }
......@@ -860,7 +860,7 @@ pub const File = struct {
860860 {
861861 const ti = ti_id.resolveFull(&pt.zcu.intern_pool).?;
862862 const file = pt.zcu.fileByIndex(ti.file);
863 const inst = file.zir.?.instructions.get(@intFromEnum(ti.inst));
863 const inst = file.zir.?.instructions.get(@backingInt(ti.inst));
864864 assert(inst.tag == .declaration);
865865 }
866866
src/link/C.zig+14-14
......@@ -211,7 +211,7 @@ pub fn addConst(
211211 const zcu = pt.zcu;
212212 const gpa = zcu.comp.gpa;
213213 assert(zcu.intern_pool.typeOf(val) == .type_type);
214 assert(@intFromEnum(pool_index) == c.types.items.len);
214 assert(@backingInt(pool_index) == c.types.items.len);
215215
216216 const ty: Type = .fromInterned(val);
217217
......@@ -262,7 +262,7 @@ pub fn addConst(
262262 _ = try codegen.CType.lower(ty, &deps, arena.allocator(), zcu);
263263 // This call may add more items to `c.types`.
264264 const type_deps = try c.addCTypeDependencies(pt, &deps);
265 c.types.items[@intFromEnum(pool_index)].deps = type_deps;
265 c.types.items[@backingInt(pool_index)].deps = type_deps;
266266 }
267267}
268268
......@@ -279,7 +279,7 @@ pub fn updateConstIncomplete(
279279 assert(zcu.intern_pool.typeOf(val) == .type_type);
280280 const ty: Type = .fromInterned(val);
281281
282 const rendered: *RenderedType = &c.types.items[@intFromEnum(index)];
282 const rendered: *RenderedType = &c.types.items[@backingInt(index)];
283283
284284 rendered.errunion_definition = .empty;
285285 rendered.definition_deps = .empty;
......@@ -315,7 +315,7 @@ pub fn updateConst(
315315 assert(zcu.intern_pool.typeOf(val) == .type_type);
316316 const ty: Type = .fromInterned(val);
317317
318 const rendered: *RenderedType = &c.types.items[@intFromEnum(index)];
318 const rendered: *RenderedType = &c.types.items[@backingInt(index)];
319319
320320 var arena: std.heap.ArenaAllocator = .init(gpa);
321321 defer arena.deinit();
......@@ -371,7 +371,7 @@ pub fn updateConst(
371371 {
372372 // This call invalidates `rendered`.
373373 const definition_deps = try c.addCTypeDependencies(pt, &deps);
374 c.types.items[@intFromEnum(index)].definition_deps = definition_deps;
374 c.types.items[@backingInt(index)].definition_deps = definition_deps;
375375 }
376376}
377377
......@@ -858,7 +858,7 @@ pub fn flush(c: *C, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: std.Prog
858858 while (true) {
859859 if (index < need_types.count()) {
860860 const pool_index = need_types.keys()[index];
861 const rendered = &c.types.items[@intFromEnum(pool_index)];
861 const rendered = &c.types.items[@backingInt(pool_index)];
862862 try mergeNeededCTypes(
863863 c,
864864 &need_types,
......@@ -872,7 +872,7 @@ pub fn flush(c: *C, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: std.Prog
872872
873873 if (errunion_index < need_errunion_types.count()) {
874874 const payload_pool_index = need_errunion_types.keys()[errunion_index];
875 const rendered = &c.types.items[@intFromEnum(payload_pool_index)];
875 const rendered = &c.types.items[@backingInt(payload_pool_index)];
876876 try mergeNeededCTypes(
877877 c,
878878 &need_types,
......@@ -886,7 +886,7 @@ pub fn flush(c: *C, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: std.Prog
886886
887887 if (aligned_index < need_aligned_types.count()) {
888888 const pool_index = need_aligned_types.keys()[aligned_index];
889 const rendered = &c.types.items[@intFromEnum(pool_index)];
889 const rendered = &c.types.items[@backingInt(pool_index)];
890890 try mergeNeededCTypes(
891891 c,
892892 &need_types,
......@@ -916,7 +916,7 @@ pub fn flush(c: *C, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: std.Prog
916916 aligned_type_strings,
917917 ) |pool_index, align_mask, *str_out| {
918918 const ty: Type = .fromInterned(pool_index.val(&c.type_pool));
919 const has_layout = c.types.items[@intFromEnum(pool_index)].errunion_definition.len > 0;
919 const has_layout = c.types.items[@backingInt(pool_index)].errunion_definition.len > 0;
920920 for (0..@bitSizeOf(@TypeOf(align_mask))) |bit_index| {
921921 switch (@as(u1, @truncate(align_mask >> @intCast(bit_index)))) {
922922 0 => continue,
......@@ -1450,7 +1450,7 @@ const FlushTypes = struct {
14501450 const c = ft.c;
14511451 if (ft.aligned_status.contains(pool_index)) return;
14521452 if (ft.aligned_types.getIndex(pool_index)) |i| {
1453 const rendered = &c.types.items[@intFromEnum(pool_index)];
1453 const rendered = &c.types.items[@backingInt(pool_index)];
14541454 ft.processDepsAsFwd(&rendered.deps);
14551455 ft.f.appendBufAssumeCapacity(ft.aligned_type_strings[i]);
14561456 }
......@@ -1459,7 +1459,7 @@ const FlushTypes = struct {
14591459 fn doTypeFwd(ft: *FlushTypes, pool_index: link.ConstPool.Index) void {
14601460 const c = ft.c;
14611461 if (ft.status.contains(pool_index)) return;
1462 const rendered = &c.types.items[@intFromEnum(pool_index)];
1462 const rendered = &c.types.items[@backingInt(pool_index)];
14631463 if (rendered.fwd_decl.len > 0) {
14641464 ft.f.appendBufAssumeCapacity(rendered.fwd_decl.get(c));
14651465 ft.status.putAssumeCapacityNoClobber(pool_index, false);
......@@ -1477,7 +1477,7 @@ const FlushTypes = struct {
14771477 if (ft.status.get(pool_index)) |completed| {
14781478 if (completed) return;
14791479 }
1480 const rendered = &c.types.items[@intFromEnum(pool_index)];
1480 const rendered = &c.types.items[@backingInt(pool_index)];
14811481 ft.processDeps(&rendered.definition_deps);
14821482 if (rendered.fwd_decl.len == 0 and ft.status.contains(pool_index)) {
14831483 // `doTypeFwd` already rendered the defintion, we just had to complete the type by
......@@ -1495,7 +1495,7 @@ const FlushTypes = struct {
14951495 const c = ft.c;
14961496 const gop = ft.errunion_status.getOrPutAssumeCapacity(pool_index);
14971497 if (gop.found_existing) return;
1498 const rendered = &c.types.items[@intFromEnum(pool_index)];
1498 const rendered = &c.types.items[@backingInt(pool_index)];
14991499 ft.f.appendBufAssumeCapacity(rendered.errunion_fwd_decl.get(c));
15001500 gop.value_ptr.* = false;
15011501 }
......@@ -1504,7 +1504,7 @@ const FlushTypes = struct {
15041504 if (ft.errunion_status.get(pool_index)) |completed| {
15051505 if (completed) return;
15061506 }
1507 const rendered = &c.types.items[@intFromEnum(pool_index)];
1507 const rendered = &c.types.items[@backingInt(pool_index)];
15081508 ft.processDeps(&rendered.deps);
15091509 if (rendered.errunion_definition.len > 0) {
15101510 ft.f.appendBufAssumeCapacity(rendered.errunion_definition.get(c));
src/link/Coff.zig+148-148
......@@ -234,11 +234,11 @@ pub const Node = union(enum) {
234234 _,
235235
236236 pub fn name(psmi: PseudoSectionMapIndex, coff: *const Coff) String {
237 return coff.pseudo_section_table.keys()[@intFromEnum(psmi)];
237 return coff.pseudo_section_table.keys()[@backingInt(psmi)];
238238 }
239239
240240 pub fn symbol(psmi: PseudoSectionMapIndex, coff: *const Coff) Symbol.Index {
241 return coff.pseudo_section_table.values()[@intFromEnum(psmi)];
241 return coff.pseudo_section_table.values()[@backingInt(psmi)];
242242 }
243243 };
244244
......@@ -246,11 +246,11 @@ pub const Node = union(enum) {
246246 _,
247247
248248 pub fn name(osmi: ObjectSectionMapIndex, coff: *const Coff) String {
249 return coff.object_section_table.keys()[@intFromEnum(osmi)];
249 return coff.object_section_table.keys()[@backingInt(osmi)];
250250 }
251251
252252 pub fn symbol(osmi: ObjectSectionMapIndex, coff: *const Coff) Symbol.Index {
253 return coff.object_section_table.values()[@intFromEnum(osmi)];
253 return coff.object_section_table.values()[@backingInt(osmi)];
254254 }
255255 };
256256
......@@ -259,13 +259,13 @@ pub const Node = union(enum) {
259259 _,
260260
261261 pub fn wrap(i: ?u32) GlobalMapIndex {
262 return @enumFromInt((i orelse return .none) + 1);
262 return @fromBackingInt(@intCast((i orelse return .none) + 1));
263263 }
264264
265265 pub fn unwrap(gmi: GlobalMapIndex) ?u32 {
266266 return switch (gmi) {
267267 .none => null,
268 _ => @intFromEnum(gmi) - 1,
268 _ => @backingInt(gmi) - 1,
269269 };
270270 }
271271
......@@ -286,11 +286,11 @@ pub const Node = union(enum) {
286286 _,
287287
288288 pub fn navIndex(nmi: NavMapIndex, coff: *const Coff) InternPool.Nav.Index {
289 return coff.navs.keys()[@intFromEnum(nmi)];
289 return coff.navs.keys()[@backingInt(nmi)];
290290 }
291291
292292 pub fn symbol(nmi: NavMapIndex, coff: *const Coff) Symbol.Index {
293 return coff.navs.values()[@intFromEnum(nmi)];
293 return coff.navs.values()[@backingInt(nmi)];
294294 }
295295 };
296296
......@@ -298,11 +298,11 @@ pub const Node = union(enum) {
298298 _,
299299
300300 pub fn uavValue(umi: UavMapIndex, coff: *const Coff) InternPool.Index {
301 return coff.uavs.keys()[@intFromEnum(umi)];
301 return coff.uavs.keys()[@backingInt(umi)];
302302 }
303303
304304 pub fn symbol(umi: UavMapIndex, coff: *const Coff) Symbol.Index {
305 return coff.uavs.values()[@intFromEnum(umi)];
305 return coff.uavs.values()[@backingInt(umi)];
306306 }
307307 };
308308
......@@ -318,23 +318,23 @@ pub const Node = union(enum) {
318318 _,
319319
320320 pub fn inputSection(isi: Index, coff: *const Coff) *InputSection {
321 return &coff.input_sections.items[@intFromEnum(isi)];
321 return &coff.input_sections.items[@backingInt(isi)];
322322 }
323323
324324 pub fn input(isi: Index, coff: *const Coff) InputObject.Index {
325 return coff.input_sections.items[@intFromEnum(isi)].ioi;
325 return coff.input_sections.items[@backingInt(isi)].ioi;
326326 }
327327
328328 pub fn fileLocation(isi: Index, coff: *const Coff) MappedFile.Node.FileLocation {
329 return coff.input_sections.items[@intFromEnum(isi)].file_location;
329 return coff.input_sections.items[@backingInt(isi)].file_location;
330330 }
331331
332332 pub fn symbol(isi: Index, coff: *const Coff) Symbol.Index {
333 return coff.input_sections.items[@intFromEnum(isi)].si;
333 return coff.input_sections.items[@backingInt(isi)].si;
334334 }
335335
336336 pub fn firstSymbol(isi: Index, coff: *const Coff) LocalIndex {
337 return coff.input_sections.items[@intFromEnum(isi)].first_li;
337 return coff.input_sections.items[@backingInt(isi)].first_li;
338338 }
339339 };
340340
......@@ -342,7 +342,7 @@ pub const Node = union(enum) {
342342 _,
343343
344344 pub fn name(isli: LocalIndex, coff: *const Coff) String {
345 return coff.input_symbols.items[@intFromEnum(isli)].name;
345 return coff.input_symbols.items[@backingInt(isli)].name;
346346 }
347347 };
348348 };
......@@ -356,7 +356,7 @@ pub const Node = union(enum) {
356356 _,
357357
358358 pub fn ref(lmi: @This()) LazyMapRef {
359 return .{ .kind = kind, .index = @intFromEnum(lmi) };
359 return .{ .kind = kind, .index = @backingInt(lmi) };
360360 }
361361
362362 pub fn lazySymbol(lmi: @This(), coff: *const Coff) link.File.LazySymbol {
......@@ -402,7 +402,7 @@ pub const Node = union(enum) {
402402 var mut_known: std.enums.EnumFieldStruct(Known, MappedFile.Node.Index, null) = undefined;
403403 const info = @typeInfo(Known).@"enum";
404404 for (info.field_names, info.field_values) |field_name, field_value|
405 @field(mut_known, field_name) = @enumFromInt(field_value);
405 @field(mut_known, field_name) = @fromBackingInt(@intCast(field_value));
406406 break :known mut_known;
407407 };
408408
......@@ -418,7 +418,7 @@ pub const InputArchive = struct {
418418 _,
419419
420420 pub fn path(iai: InputArchive.Index, coff: *Coff) std.Build.Cache.Path {
421 return coff.input_archives.items[@intFromEnum(iai)].path;
421 return coff.input_archives.items[@backingInt(iai)].path;
422422 }
423423 };
424424
......@@ -446,7 +446,7 @@ pub const InputArchive = struct {
446446 _,
447447
448448 pub fn member(iami: InputArchive.Member.Index, coff: *Coff) *InputArchive.Member {
449 return &coff.input_archive_members.items[@intFromEnum(iami)];
449 return &coff.input_archive_members.items[@backingInt(iami)];
450450 }
451451 };
452452
......@@ -476,11 +476,11 @@ pub const InputObject = struct {
476476 _,
477477
478478 pub fn path(ioi: Index, coff: *const Coff) std.Build.Cache.Path {
479 return coff.input_objects.items[@intFromEnum(ioi)].path;
479 return coff.input_objects.items[@backingInt(ioi)].path;
480480 }
481481
482482 pub fn memberName(ioi: Index, coff: *const Coff) ?[]const u8 {
483 return coff.input_objects.items[@intFromEnum(ioi)].member_name;
483 return coff.input_objects.items[@backingInt(ioi)].member_name;
484484 }
485485 };
486486};
......@@ -503,7 +503,7 @@ pub const Member = struct {
503503 const known_count = @typeInfo(Index).@"enum".field_names.len;
504504
505505 pub fn get(member_index: Member.Index, coff: *Coff) *Member {
506 return &coff.members.items[@intFromEnum(member_index)];
506 return &coff.members.items[@backingInt(member_index)];
507507 }
508508 };
509509
......@@ -657,7 +657,7 @@ pub const SymbolTable = struct {
657657 },
658658 .long => |l| {
659659 @memset(field[0..4], 0);
660 std.mem.writePackedInt(u32, field[4..], 0, @intFromEnum(l), coff.targetEndian());
660 std.mem.writePackedInt(u32, field[4..], 0, @backingInt(l), coff.targetEndian());
661661 },
662662 }
663663 }
......@@ -671,13 +671,13 @@ pub const SymbolTable = struct {
671671 _,
672672
673673 pub fn wrap(i: u32) Index {
674 return @enumFromInt(i + 1);
674 return @fromBackingInt(@intCast(i + 1));
675675 }
676676
677677 pub fn unwrap(sti: Index) ?u32 {
678678 return switch (sti) {
679679 .none => null,
680 _ => @intFromEnum(sti) - 1,
680 _ => @backingInt(sti) - 1,
681681 };
682682 }
683683 };
......@@ -720,7 +720,7 @@ pub const ExportTable = struct {
720720 _,
721721
722722 pub fn get(export_index: ExportTable.Ordinal, coff: *Coff) *Entry {
723 return &coff.export_table.entries.values()[@intFromEnum(export_index)];
723 return &coff.export_table.entries.values()[@backingInt(export_index)];
724724 }
725725 };
726726};
......@@ -768,7 +768,7 @@ pub const ImportTable = struct {
768768 _,
769769
770770 pub fn get(import_index: ImportTable.Index, coff: *Coff) *Entry {
771 return &coff.import_table.entries.values()[@intFromEnum(import_index)];
771 return &coff.import_table.entries.values()[@backingInt(import_index)];
772772 }
773773 };
774774};
......@@ -791,26 +791,26 @@ pub const String = enum(u32) {
791791 _,
792792
793793 pub const Optional = enum(u32) {
794 @".data" = @intFromEnum(String.@".data"),
795 @".idata" = @intFromEnum(String.@".idata"),
796 @".rdata" = @intFromEnum(String.@".rdata"),
797 @".text" = @intFromEnum(String.@".text"),
798 @".tls$" = @intFromEnum(String.@".tls$"),
799 @".edata" = @intFromEnum(String.@".edata"),
800 @".ctors" = @intFromEnum(String.@".ctors"),
801 @".ctors$ZZZ" = @intFromEnum(String.@".ctors$ZZZ"),
802 @".dtors" = @intFromEnum(String.@".dtors"),
803 @".dtors$ZZZ" = @intFromEnum(String.@".dtors$ZZZ"),
804 @".bss" = @intFromEnum(String.@".bss"),
805 @".fptable" = @intFromEnum(String.@".fptable"),
806 @".tls" = @intFromEnum(String.@".tls"),
807 @".thunks" = @intFromEnum(String.@".thunks"),
794 @".data" = @backingInt(String.@".data"),
795 @".idata" = @backingInt(String.@".idata"),
796 @".rdata" = @backingInt(String.@".rdata"),
797 @".text" = @backingInt(String.@".text"),
798 @".tls$" = @backingInt(String.@".tls$"),
799 @".edata" = @backingInt(String.@".edata"),
800 @".ctors" = @backingInt(String.@".ctors"),
801 @".ctors$ZZZ" = @backingInt(String.@".ctors$ZZZ"),
802 @".dtors" = @backingInt(String.@".dtors"),
803 @".dtors$ZZZ" = @backingInt(String.@".dtors$ZZZ"),
804 @".bss" = @backingInt(String.@".bss"),
805 @".fptable" = @backingInt(String.@".fptable"),
806 @".tls" = @backingInt(String.@".tls"),
807 @".thunks" = @backingInt(String.@".thunks"),
808808 none = std.math.maxInt(u32),
809809 _,
810810
811811 pub fn unwrap(os: String.Optional) ?String {
812812 return switch (os) {
813 else => |s| @enumFromInt(@intFromEnum(s)),
813 else => |s| @fromBackingInt(@intCast(@backingInt(s))),
814814 .none => null,
815815 };
816816 }
......@@ -821,12 +821,12 @@ pub const String = enum(u32) {
821821 };
822822
823823 pub fn toSlice(s: String, coff: *Coff) [:0]const u8 {
824 const slice = coff.string_bytes.items[@intFromEnum(s)..];
824 const slice = coff.string_bytes.items[@backingInt(s)..];
825825 return slice[0..std.mem.indexOfScalar(u8, slice, 0).? :0];
826826 }
827827
828828 pub fn toOptional(s: String) String.Optional {
829 return @enumFromInt(@intFromEnum(s));
829 return @fromBackingInt(@intCast(@backingInt(s)));
830830 }
831831};
832832
......@@ -839,13 +839,13 @@ pub const Section = struct {
839839 _,
840840
841841 pub fn wrap(i: ?u16) RelocationIndex {
842 return @enumFromInt((i orelse return .none) + 1);
842 return @fromBackingInt(@intCast((i orelse return .none) + 1));
843843 }
844844
845845 pub fn unwrap(sri: RelocationIndex) ?u16 {
846846 return switch (sri) {
847847 .none => null,
848 _ => @intFromEnum(sri) - 1,
848 _ => @backingInt(sri) - 1,
849849 };
850850 }
851851
......@@ -1008,11 +1008,11 @@ pub const Symbol = struct {
10081008 _,
10091009
10101010 fn toIndex(sn: SectionNumber) u15 {
1011 return @intCast(@intFromEnum(sn) - 1);
1011 return @intCast(@backingInt(sn) - 1);
10121012 }
10131013
10141014 fn hasIndex(sn: SectionNumber) bool {
1015 return @intFromEnum(sn) > 0;
1015 return @backingInt(sn) > 0;
10161016 }
10171017
10181018 pub fn symbol(sn: SectionNumber, coff: *const Coff) Symbol.Index {
......@@ -1043,7 +1043,7 @@ pub const Symbol = struct {
10431043 const known_count = @typeInfo(Index).@"enum".field_names.len;
10441044
10451045 pub fn get(si: Symbol.Index, coff: *Coff) *Symbol {
1046 return &coff.symbols.items[@intFromEnum(si)];
1046 return &coff.symbols.items[@backingInt(si)];
10471047 }
10481048
10491049 pub fn unwrap(si: Symbol.Index) ?Symbol.Index {
......@@ -1063,7 +1063,7 @@ pub const Symbol = struct {
10631063 }
10641064
10651065 pub fn next(si: Symbol.Index) Symbol.Index {
1066 return @enumFromInt(@intFromEnum(si) + 1);
1066 return @fromBackingInt(@intCast(@backingInt(si) + 1));
10671067 }
10681068
10691069 pub fn knownString(si: Symbol.Index) String.Optional {
......@@ -1107,7 +1107,7 @@ pub const Symbol = struct {
11071107 switch (sym.loc_relocs) {
11081108 .none => {},
11091109 else => |loc_relocs| {
1110 for (coff.relocs.items[@intFromEnum(loc_relocs)..]) |*reloc| {
1110 for (coff.relocs.items[@backingInt(loc_relocs)..]) |*reloc| {
11111111 if (reloc.loc != si) break;
11121112 if (reloc.sri.entry(coff, sym.section_number)) |entry| coff.targetStore(
11131113 &entry.virtual_address,
......@@ -1136,7 +1136,7 @@ pub const Symbol = struct {
11361136 switch (sym.loc_relocs) {
11371137 .none => {},
11381138 else => |loc_relocs| {
1139 for (coff.relocs.items[@intFromEnum(loc_relocs)..]) |*reloc| {
1139 for (coff.relocs.items[@backingInt(loc_relocs)..]) |*reloc| {
11401140 if (reloc.loc != si) break;
11411141 reloc.delete(coff);
11421142 }
......@@ -1189,11 +1189,11 @@ pub const Reloc = extern struct {
11891189 _,
11901190
11911191 pub fn wrap(i: ?u32) Reloc.Index {
1192 return @enumFromInt((i orelse return .none) + 1);
1192 return @fromBackingInt(@intCast((i orelse return .none) + 1));
11931193 }
11941194
11951195 pub fn get(ri: Reloc.Index, coff: *Coff) *Reloc {
1196 return &coff.relocs.items[@intFromEnum(ri)];
1196 return &coff.relocs.items[@backingInt(ri)];
11971197 }
11981198 };
11991199
......@@ -1574,13 +1574,13 @@ fn create(
15741574 else => return error.UnsupportedCOFFArchitecture,
15751575 };
15761576 const section_align: std.mem.Alignment = switch (machine) {
1577 .AMD64, .I386 => @enumFromInt(12),
1578 .SH3, .SH3DSP, .SH4, .SH5 => @enumFromInt(12),
1579 .MIPS16, .MIPSFPU, .MIPSFPU16, .WCEMIPSV2 => @enumFromInt(12),
1580 .POWERPC, .POWERPCFP => @enumFromInt(12),
1581 .ALPHA, .ALPHA64 => @enumFromInt(13),
1582 .IA64 => @enumFromInt(13),
1583 .ARM => @enumFromInt(12),
1577 .AMD64, .I386 => @fromBackingInt(@intCast(12)),
1578 .SH3, .SH3DSP, .SH4, .SH5 => @fromBackingInt(@intCast(12)),
1579 .MIPS16, .MIPSFPU, .MIPSFPU16, .WCEMIPSV2 => @fromBackingInt(@intCast(12)),
1580 .POWERPC, .POWERPCFP => @fromBackingInt(@intCast(12)),
1581 .ALPHA, .ALPHA64 => @fromBackingInt(@intCast(13)),
1582 .IA64 => @fromBackingInt(@intCast(13)),
1583 .ARM => @fromBackingInt(@intCast(12)),
15841584 else => return error.UnsupportedCOFFArchitecture,
15851585 };
15861586
......@@ -2193,7 +2193,7 @@ fn initHeaders(
21932193 const export_address_table_sym = coff.export_table.export_address_table_si.get(coff);
21942194 export_address_table_sym.ni = export_address_table_ni;
21952195 assert(export_address_table_sym.loc_relocs == .none);
2196 export_address_table_sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
2196 export_address_table_sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
21972197 export_address_table_sym.section_number =
21982198 coff.getNode(coff.export_table.ni).pseudo_section.symbol(coff).get(coff).section_number;
21992199
......@@ -2383,7 +2383,7 @@ pub fn endProgress(coff: *Coff) void {
23832383}
23842384
23852385fn getNode(coff: *const Coff, ni: MappedFile.Node.Index) Node {
2386 return coff.nodes.get(@intFromEnum(ni));
2386 return coff.nodes.get(@backingInt(ni));
23872387}
23882388fn computeNodeRva(coff: *Coff, ni: MappedFile.Node.Index) u32 {
23892389 const parent_rva = parent_rva: {
......@@ -2499,7 +2499,7 @@ fn targetLoad(coff: *const Coff, ptr: anytype) @typeInfo(@TypeOf(ptr)).pointer.c
24992499 return switch (@typeInfo(Child)) {
25002500 else => @compileError(@typeName(Child)),
25012501 .int => std.mem.toNative(Child, ptr.*, coff.targetEndian()),
2502 .@"enum" => |@"enum"| @enumFromInt(coff.targetLoad(@as(*@"enum".tag_type, @ptrCast(ptr)))),
2502 .@"enum" => |@"enum"| @fromBackingInt(@intCast(coff.targetLoad(@as(*@"enum".tag_type, @ptrCast(ptr))))),
25032503 .@"struct" => |@"struct"| @bitCast(
25042504 coff.targetLoad(@as(*@"struct".backing_integer.?, @ptrCast(ptr))),
25052505 ),
......@@ -2512,7 +2512,7 @@ fn targetStore(coff: *const Coff, ptr: anytype, val: @typeInfo(@TypeOf(ptr)).poi
25122512 .int => ptr.* = std.mem.nativeTo(Child, val, coff.targetEndian()),
25132513 .@"enum" => |@"enum"| coff.targetStore(
25142514 @as(*@"enum".tag_type, @ptrCast(ptr)),
2515 @intFromEnum(val),
2515 @backingInt(val),
25162516 ),
25172517 .@"struct" => |@"struct"| coff.targetStore(
25182518 @as(*@"struct".backing_integer.?, @ptrCast(ptr)),
......@@ -2613,7 +2613,7 @@ pub fn dataDirectoryPtr(
26132613 coff: *Coff,
26142614 entry: std.coff.IMAGE.DIRECTORY_ENTRY,
26152615) *std.coff.ImageDataDirectory {
2616 return &coff.dataDirectorySlice()[@intFromEnum(entry)];
2616 return &coff.dataDirectorySlice()[@backingInt(entry)];
26172617}
26182618
26192619pub fn sectionTableSlice(coff: *Coff) []std.coff.SectionHeader {
......@@ -2665,7 +2665,7 @@ pub fn importDirectoryEntryPtr(
26652665 coff: *Coff,
26662666 import_index: ImportTable.Index,
26672667) *std.coff.ImportDirectoryEntry {
2668 return &coff.importDirectoryTableSlice()[@intFromEnum(import_index)];
2668 return &coff.importDirectoryTableSlice()[@backingInt(import_index)];
26692669}
26702670
26712671pub fn exportDirectoryTable(coff: *Coff) *std.coff.ExportDirectoryTable {
......@@ -2701,7 +2701,7 @@ fn addSymbolAssumeCapacity(coff: *Coff) Symbol.Index {
27012701 .section_number = .UNDEFINED,
27022702 .gmi = .none,
27032703 };
2704 return @enumFromInt(coff.symbols.items.len);
2704 return @fromBackingInt(@intCast(coff.symbols.items.len));
27052705}
27062706
27072707fn initSymbolAssumeCapacity(coff: *Coff) !Symbol.Index {
......@@ -2721,7 +2721,7 @@ fn getString(coff: *Coff, string: []const u8) String.Optional {
27212721 string,
27222722 std.hash_map.StringIndexAdapter{ .bytes = &coff.string_bytes },
27232723 )) |key|
2724 return @as(String, @enumFromInt(key)).toOptional()
2724 return @as(String, @fromBackingInt(@intCast(key))).toOptional()
27252725 else
27262726 return .none;
27272727}
......@@ -2739,7 +2739,7 @@ fn getOrPutSymbolName(coff: *Coff, name: []const u8, opt_string: ?String) !Symbo
27392739 const string_gop = try coff.symbol_table.strings.getOrPut(gpa, string);
27402740 if (!string_gop.found_existing) {
27412741 const string_index = coff.symbol_table.strings_ni.location(&coff.mf).resolve(&coff.mf)[1];
2742 string_gop.value_ptr.* = @enumFromInt(string_index);
2742 string_gop.value_ptr.* = @fromBackingInt(@intCast(string_index));
27432743
27442744 try coff.symbol_table.strings_ni.resize(&coff.mf, gpa, string_index + name.len + 1);
27452745 const slice = coff.symbol_table.strings_ni.slice(&coff.mf);
......@@ -2776,7 +2776,7 @@ fn getOrPutStringAssumeCapacity(coff: *Coff, string: []const u8) String {
27762776 coff.string_bytes.appendSliceAssumeCapacity(string);
27772777 coff.string_bytes.appendAssumeCapacity(0);
27782778 }
2779 return @enumFromInt(gop.key_ptr.*);
2779 return @fromBackingInt(@intCast(gop.key_ptr.*));
27802780}
27812781
27822782const GlobalOptions = struct {
......@@ -2887,7 +2887,7 @@ fn navMapIndex(coff: *Coff, zcu: *Zcu, nav_index: InternPool.Nav.Index) !Node.Na
28872887 try coff.symbols.ensureUnusedCapacity(gpa, 1);
28882888 const sym_gop = try coff.navs.getOrPut(gpa, nav_index);
28892889 if (!sym_gop.found_existing) sym_gop.value_ptr.* = coff.addSymbolAssumeCapacity();
2890 return @enumFromInt(sym_gop.index);
2890 return @fromBackingInt(@intCast(sym_gop.index));
28912891}
28922892pub fn navSymbol(coff: *Coff, zcu: *Zcu, nav_index: InternPool.Nav.Index) !Symbol.Index {
28932893 const ip = &zcu.intern_pool;
......@@ -2908,7 +2908,7 @@ fn uavMapIndex(coff: *Coff, uav_val: InternPool.Index) !Node.UavMapIndex {
29082908 try coff.symbols.ensureUnusedCapacity(gpa, 1);
29092909 const sym_gop = try coff.uavs.getOrPut(gpa, uav_val);
29102910 if (!sym_gop.found_existing) sym_gop.value_ptr.* = coff.addSymbolAssumeCapacity();
2911 return @enumFromInt(sym_gop.index);
2911 return @fromBackingInt(@intCast(sym_gop.index));
29122912}
29132913pub fn uavSymbol(coff: *Coff, uav_val: InternPool.Index) !Symbol.Index {
29142914 const umi = try coff.uavMapIndex(uav_val);
......@@ -2945,7 +2945,7 @@ pub fn getUavVAddr(
29452945
29462946pub fn getVAddr(coff: *Coff, reloc_info: link.File.RelocInfo, target_si: Symbol.Index) link.Error!u64 {
29472947 try coff.addReloc(
2948 @enumFromInt(@intFromEnum(reloc_info.parent.atom_index)),
2948 @fromBackingInt(@intCast(@backingInt(reloc_info.parent.atom_index))),
29492949 reloc_info.offset,
29502950 target_si,
29512951 .{ .known = reloc_info.addend },
......@@ -2986,7 +2986,7 @@ fn addMemberAssumeCapacity(coff: *Coff, kind: std.coff.ArchiveMemberHeader.Kind,
29862986 .fixed = true,
29872987 });
29882988
2989 const mi: Member.Index = @enumFromInt(coff.members.items.len);
2989 const mi: Member.Index = @fromBackingInt(@intCast(coff.members.items.len));
29902990 coff.members.appendAssumeCapacity(.{
29912991 .kind = kind,
29922992 .header_ni = header_ni,
......@@ -3065,7 +3065,7 @@ fn ensureMemberSymbol(coff: *Coff, mi: Member.Index, name: String) !void {
30653065 const num_symbols_ptr = coff.firstLinkerMemberNumSymbolsPtr();
30663066 const num_symbols = std.mem.toNative(u32, num_symbols_ptr.*, .big);
30673067 num_symbols_ptr.* = std.mem.nativeTo(u32, num_symbols + 1, .big);
3068 break :blk @enumFromInt(num_symbols);
3068 break :blk @fromBackingInt(@intCast(num_symbols));
30693069 };
30703070
30713071 gop.value_ptr.* = mfli;
......@@ -3078,7 +3078,7 @@ fn ensureMemberSymbol(coff: *Coff, mi: Member.Index, name: String) !void {
30783078 defer coff.lib_string_len = new_string_table_size;
30793079
30803080 {
3081 const old_header_size: usize = @intCast(@sizeOf(u32) + @intFromEnum(mfli) * @sizeOf(u32));
3081 const old_header_size: usize = @intCast(@sizeOf(u32) + @backingInt(mfli) * @sizeOf(u32));
30823082 const new_header_size: usize = @intCast(old_header_size + @sizeOf(u32));
30833083 try Node.known.first_linker_member.resize(&coff.mf, gpa, new_header_size + new_string_table_size);
30843084
......@@ -3092,7 +3092,7 @@ fn ensureMemberSymbol(coff: *Coff, mi: Member.Index, name: String) !void {
30923092
30933093 {
30943094 const num_members = coff.targetLoad(coff.secondLinkerMemberNumMembersPtr());
3095 const old_header_size = 2 * @sizeOf(u32) + num_members * @sizeOf(u32) + @intFromEnum(mfli) * @sizeOf(u16);
3095 const old_header_size = 2 * @sizeOf(u32) + num_members * @sizeOf(u32) + @backingInt(mfli) * @sizeOf(u16);
30963096 const new_header_size = old_header_size + @sizeOf(u16);
30973097 try Node.known.second_linker_member.resize(&coff.mf, gpa, new_header_size + new_string_table_size);
30983098
......@@ -3109,7 +3109,7 @@ fn ensureMemberSymbol(coff: *Coff, mi: Member.Index, name: String) !void {
31093109 try coff.lib_string_table.append(gpa, name);
31103110
31113111 const slice = Node.known.second_linker_member.slice(&coff.mf);
3112 coff.targetStore(coff.secondLinkerMemberNumSymbolsPtr(), @intFromEnum(mfli) + 1);
3112 coff.targetStore(coff.secondLinkerMemberNumSymbolsPtr(), @backingInt(mfli) + 1);
31133113 if (!needs_sort) {
31143114 @memmove(slice[new_header_size..][0..coff.lib_string_len], slice[old_header_size..][0..coff.lib_string_len]);
31153115 @memcpy(slice[new_header_size + coff.lib_string_len ..][0..name_slice.len], name_slice[0..name_slice.len]);
......@@ -3121,7 +3121,7 @@ fn ensureMemberSymbol(coff: *Coff, mi: Member.Index, name: String) !void {
31213121
31223122 // Indices in this table are 1-based
31233123 const index_ptr: *u16 = @ptrCast(@alignCast(slice[old_header_size..]));
3124 coff.targetStore(index_ptr, @intCast(@intFromEnum(mi) - Member.Index.known_count + 1));
3124 coff.targetStore(index_ptr, @intCast(@backingInt(mi) - Member.Index.known_count + 1));
31253125 }
31263126
31273127 coff.pending_members.putAssumeCapacity(mi, {});
......@@ -3209,7 +3209,7 @@ fn flushSymbolTableEntry(coff: *Coff, index: u32, pt: Zcu.PerThread) !void {
32093209 const entry = coff.symbolTableEntryPtr(sti.*).?;
32103210 symbol_name.store(coff, &entry.name);
32113211
3212 entry.section_number = @enumFromInt(@intFromEnum(sym.section_number));
3212 entry.section_number = @fromBackingInt(@intCast(@backingInt(sym.section_number)));
32133213 entry.type = .{
32143214 .complex_type = complex_type,
32153215 .base_type = .NULL,
......@@ -3399,7 +3399,7 @@ fn addSection(coff: *Coff, name: String, flags: std.coff.SectionHeader.Flags) !S
33993399 const sym = si.get(coff);
34003400 sym.ni = ni;
34013401 sym.rva = rva;
3402 sym.section_number = @enumFromInt(section_table_len);
3402 sym.section_number = @fromBackingInt(@intCast(section_table_len));
34033403 }
34043404 const section = &section_table[section_index];
34053405 section.* = .{
......@@ -3486,7 +3486,7 @@ fn pseudoSectionMapIndex(
34863486) !Node.PseudoSectionMapIndex {
34873487 const gpa = coff.base.comp.gpa;
34883488 const pseudo_section_gop = try coff.pseudo_section_table.getOrPut(gpa, name);
3489 const psmi: Node.PseudoSectionMapIndex = @enumFromInt(pseudo_section_gop.index);
3489 const psmi: Node.PseudoSectionMapIndex = @fromBackingInt(@intCast(pseudo_section_gop.index));
34903490 const parent_sn = if (!pseudo_section_gop.found_existing) sn: {
34913491 const effective_name = coff.section_merges.get(name) orelse name;
34923492 const parent = if (coff.section_table.get(effective_name)) |existing_sec|
......@@ -3514,7 +3514,7 @@ fn pseudoSectionMapIndex(
35143514 sym.rva = coff.computeNodeRva(ni);
35153515 sym.section_number = parent.get(coff).section_number;
35163516 assert(sym.loc_relocs == .none);
3517 sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
3517 sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
35183518 coff.nodes.appendAssumeCapacity(.{ .pseudo_section = psmi });
35193519 break :sn sym.section_number;
35203520 } else pseudo_section_gop.value_ptr.get(coff).section_number;
......@@ -3557,7 +3557,7 @@ fn objectSectionMapIndex(
35573557 } else attributes;
35583558
35593559 const object_section_gop = try coff.object_section_table.getOrPut(gpa, name);
3560 const osmi: Node.ObjectSectionMapIndex = @enumFromInt(object_section_gop.index);
3560 const osmi: Node.ObjectSectionMapIndex = @fromBackingInt(@intCast(object_section_gop.index));
35613561 const sym = if (!object_section_gop.found_existing) sym: {
35623562 try coff.ensureUnusedStringCapacity(name_slice.len);
35633563 const parent_name = coff.getOrPutStringAssumeCapacity(coff.objectSectionParentName(name_slice));
......@@ -3593,7 +3593,7 @@ fn objectSectionMapIndex(
35933593 sym.rva = coff.computeNodeRva(ni);
35943594 sym.section_number = parent.get(coff).section_number;
35953595 assert(sym.loc_relocs == .none);
3596 sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
3596 sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
35973597 coff.nodes.appendAssumeCapacity(.{ .object_section = osmi });
35983598 break :sym sym;
35993599 } else object_section_gop.value_ptr.get(coff);
......@@ -3723,7 +3723,7 @@ fn addRelocAssumeCapacity(
37233723 const gpa = coff.base.comp.gpa;
37243724 const target = target_si.get(coff);
37253725
3726 const ri: Reloc.Index = @enumFromInt(coff.relocs.items.len);
3726 const ri: Reloc.Index = @fromBackingInt(@intCast(coff.relocs.items.len));
37273727 log.debug("addReloc({d}@{d}+0x{x} -> {d}@{d}+0x{x}{s}) = {d}", .{
37283728 loc_si,
37293729 loc_si.get(coff).section_number,
......@@ -3984,7 +3984,7 @@ fn loadObject(
39843984 symbol_table_end + string_table_len > fl.size)
39853985 return diags.failParse(path, "bad string table length: 0x{x}", .{string_table_len});
39863986
3987 const ioi: InputObject.Index = @enumFromInt(coff.input_objects.items.len);
3987 const ioi: InputObject.Index = @fromBackingInt(@intCast(coff.input_objects.items.len));
39883988 try coff.input_objects.ensureUnusedCapacity(gpa, 1);
39893989 const input = coff.input_objects.addOneAssumeCapacity();
39903990 input.* = .{
......@@ -4013,13 +4013,13 @@ fn loadObject(
40134013 _,
40144014
40154015 pub fn wrap(i: ?u32) @This() {
4016 return @enumFromInt((i orelse return .none) + 1);
4016 return @fromBackingInt(@intCast((i orelse return .none) + 1));
40174017 }
40184018
40194019 pub fn unwrap(i: @This()) ?u32 {
40204020 return switch (i) {
40214021 .none => null,
4022 _ => @intFromEnum(i) - 1,
4022 _ => @backingInt(i) - 1,
40234023 };
40244024 }
40254025 };
......@@ -4208,12 +4208,12 @@ fn loadObject(
42084208
42094209 switch (symbol.section_number) {
42104210 .UNDEFINED, .DEBUG, .ABSOLUTE => {},
4211 else => |sn| if (@intFromEnum(sn) > sections.len)
4211 else => |sn| if (@backingInt(sn) > sections.len)
42124212 return diags.failParse(path, "out-of-bounds section number {d} in symbol 0x{x}", .{ sn, symbol_i }),
42134213 }
42144214
42154215 const psi: PendingSymbolIndex = .wrap(@intCast(pending_symbols.count()));
4216 const section_number: Symbol.SectionNumber = @enumFromInt(@intFromEnum(symbol.section_number));
4216 const section_number: Symbol.SectionNumber = @fromBackingInt(@intCast(@backingInt(symbol.section_number)));
42174217
42184218 const values: []const @FieldType(PendingSymbol, "value") = pending_symbols: switch (symbol.storage_class) {
42194219 .STATIC, .LABEL => |storage_class| switch (section_number) {
......@@ -4270,7 +4270,7 @@ fn loadObject(
42704270 .{ symbol_i + 1, name, section_def.number },
42714271 );
42724272
4273 section.comdat_association = @enumFromInt(section_def.number);
4273 section.comdat_association = @fromBackingInt(@intCast(section_def.number));
42744274 }
42754275
42764276 section.comdat = section_def.selection;
......@@ -4684,7 +4684,7 @@ fn loadObject(
46844684 .alignment = section.header.flags.ALIGN.alignment() orelse .@"1",
46854685 .moved = true,
46864686 });
4687 coff.nodes.appendAssumeCapacity(.{ .input_section = @enumFromInt(coff.input_sections.items.len) });
4687 coff.nodes.appendAssumeCapacity(.{ .input_section = @fromBackingInt(@intCast(coff.input_sections.items.len)) });
46884688
46894689 section.si = coff.addSymbolAssumeCapacity();
46904690 if (section.psi.unwrap()) |psi|
......@@ -4701,7 +4701,7 @@ fn loadObject(
47014701 .offset = fl.offset + section.header.pointer_to_raw_data,
47024702 .size = section.header.size_of_raw_data,
47034703 },
4704 .first_li = @enumFromInt(coff.input_symbols.items.len),
4704 .first_li = @fromBackingInt(@intCast(coff.input_symbols.items.len)),
47054705 .crc = section.comdat_crc,
47064706 .comdat_si = if (section.comdat_psi.unwrap()) |psi|
47074707 pending_symbols.values()[psi].si
......@@ -4888,7 +4888,7 @@ fn loadObject(
48884888
48894889 const loc_sym = section.si.get(coff);
48904890 assert(loc_sym.loc_relocs == .none);
4891 loc_sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
4891 loc_sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
48924892
48934893 if (section.header.number_of_relocations == 0) continue;
48944894
......@@ -4947,8 +4947,8 @@ fn loadObject(
49474947 const lhs = &ctx.v[a_index];
49484948 const rhs = &ctx.v[b_index];
49494949 if (lhs.section_number == rhs.section_number)
4950 return @intFromEnum(lhs.si) < @intFromEnum(rhs.si);
4951 return @intFromEnum(lhs.section_number) < @intFromEnum(rhs.section_number);
4950 return @backingInt(lhs.si) < @backingInt(rhs.si);
4951 return @backingInt(lhs.section_number) < @backingInt(rhs.section_number);
49524952 }
49534953 };
49544954
......@@ -4968,14 +4968,14 @@ fn loadObject(
49684968 include_section = section.comdat_result == .include;
49694969 if (include_section) {
49704970 const isi = coff.getNode(section.si.get(coff).ni).input_section;
4971 isi.inputSection(coff).first_li = @enumFromInt(coff.input_symbols.items.len);
4971 isi.inputSection(coff).first_li = @fromBackingInt(@intCast(coff.input_symbols.items.len));
49724972 }
49734973 }
49744974 }
49754975
49764976 if (include_section) {
49774977 assert(coff.getNode(symbol.si.get(coff).ni) == .input_section);
4978 symbol.si.get(coff).setExtra(.{ .isli = @enumFromInt(coff.input_symbols.items.len) });
4978 symbol.si.get(coff).setExtra(.{ .isli = @fromBackingInt(@intCast(coff.input_symbols.items.len)) });
49794979 coff.input_symbols.addOneAssumeCapacity().* = .{
49804980 .si = symbol.si,
49814981 .name = symbol.name,
......@@ -5092,7 +5092,7 @@ fn loadArchive(coff: *Coff, path: std.Build.Cache.Path, fr: *Io.File.Reader) Loa
50925092 }) = .empty;
50935093 var symbol_member_indices: std.ArrayList(u32) = .empty;
50945094
5095 const iai: InputArchive.Index = @enumFromInt(coff.input_archives.items.len);
5095 const iai: InputArchive.Index = @fromBackingInt(@intCast(coff.input_archives.items.len));
50965096 (try coff.input_archives.addOne(gpa)).* = .{
50975097 .path = path,
50985098 };
......@@ -5103,13 +5103,13 @@ fn loadArchive(coff: *Coff, path: std.Build.Cache.Path, fr: *Io.File.Reader) Loa
51035103
51045104 errdefer {
51055105 for (coff.input_archive_symbol_indices.values()) |*v| {
5106 if (@intFromEnum(v.last) < first_iamsi) continue;
5107 if (@intFromEnum(v.first) >= first_iamsi) continue;
5106 if (@backingInt(v.last) < first_iamsi) continue;
5107 if (@backingInt(v.first) >= first_iamsi) continue;
51085108
51095109 var iter = v.first;
51105110 v.last = while (iter != v.last) {
5111 const sym = &coff.input_archive_symbols.items[@intFromEnum(iter)];
5112 if (@intFromEnum(sym.next) >= first_iamsi) {
5111 const sym = &coff.input_archive_symbols.items[@backingInt(iter)];
5112 if (@backingInt(sym.next) >= first_iamsi) {
51135113 sym.next = iter;
51145114 break iter;
51155115 }
......@@ -5189,7 +5189,7 @@ fn loadArchive(coff: *Coff, path: std.Build.Cache.Path, fr: *Io.File.Reader) Loa
51895189 }) |n| n else return diags.failParse(path, "unterminated string found in second linker member", .{});
51905190
51915191 const string = coff.getOrPutStringAssumeCapacity(name);
5192 const iamsi: InputArchive.Member.Symbol.Index = @enumFromInt(coff.input_archive_symbols.items.len);
5192 const iamsi: InputArchive.Member.Symbol.Index = @fromBackingInt(@intCast(coff.input_archive_symbols.items.len));
51935193 const symbol_gop = coff.input_archive_symbol_indices.getOrPutAssumeCapacity(string);
51945194 if (!symbol_gop.found_existing) {
51955195 symbol_gop.value_ptr.* = .{
......@@ -5197,12 +5197,12 @@ fn loadArchive(coff: *Coff, path: std.Build.Cache.Path, fr: *Io.File.Reader) Loa
51975197 .last = iamsi,
51985198 };
51995199 } else {
5200 coff.input_archive_symbols.items[@intFromEnum(symbol_gop.value_ptr.last)].next = iamsi;
5200 coff.input_archive_symbols.items[@backingInt(symbol_gop.value_ptr.last)].next = iamsi;
52015201 symbol_gop.value_ptr.last = iamsi;
52025202 }
52035203
52045204 const iami = members.items[symbol_member_indices.items[symbol_i]].iami orelse iami: {
5205 const iami: InputArchive.Member.Index = @enumFromInt(coff.input_archive_members.items.len);
5205 const iami: InputArchive.Member.Index = @fromBackingInt(@intCast(coff.input_archive_members.items.len));
52065206 const member_offset = members.items[symbol_member_indices.items[symbol_i]].offset;
52075207 coff.input_archive_members.addOneAssumeCapacity().* = .{
52085208 .iai = iai,
......@@ -5271,7 +5271,7 @@ fn loadArchive(coff: *Coff, path: std.Build.Cache.Path, fr: *Io.File.Reader) Loa
52715271
52725272 const member_sig = try r.peek(4);
52735273 const machine: std.coff.IMAGE.FILE.MACHINE =
5274 @enumFromInt(std.mem.readInt(u16, member_sig[0..2], target_endian));
5274 @fromBackingInt(@intCast(std.mem.readInt(u16, member_sig[0..2], target_endian)));
52755275 const sig = std.mem.readInt(u16, member_sig[2..4], target_endian);
52765276
52775277 log.debug("verifyArchiveMember({s}) = 0x{x}+{x}", .{
......@@ -5484,7 +5484,7 @@ fn updateNavInner(coff: *Coff, pt: Zcu.PerThread, nav_index: InternPool.Nav.Inde
54845484 }
54855485 const sym = si.get(coff);
54865486 assert(sym.loc_relocs == .none);
5487 sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
5487 sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
54885488 if (!isImage(coff) and sym.target_relocs != .none)
54895489 try coff.pendingSymbolTableEntry(si);
54905490
......@@ -5500,7 +5500,7 @@ fn updateNavInner(coff: *Coff, pt: Zcu.PerThread, nav_index: InternPool.Nav.Inde
55005500 pt,
55015501 .fromInterned(nav.resolved.?.value),
55025502 &nw.interface,
5503 .{ .atom_index = @enumFromInt(@intFromEnum(si)) },
5503 .{ .atom_index = @fromBackingInt(@intCast(@backingInt(si))) },
55045504 ) catch |err| switch (err) {
55055505 error.WriteFailed => return nw.err.?,
55065506 else => |e| return e,
......@@ -5554,7 +5554,7 @@ pub fn lowerUav(
55545554 coff.const_prog_node.increaseEstimatedTotalItems(1);
55555555 }
55565556 }
5557 return @enumFromInt(@intFromEnum(si));
5557 return @fromBackingInt(@intCast(@backingInt(si)));
55585558}
55595559
55605560pub fn updateFunc(
......@@ -5617,7 +5617,7 @@ fn updateFuncInner(
56175617 }
56185618 const sym = si.get(coff);
56195619 assert(sym.loc_relocs == .none);
5620 sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
5620 sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
56215621 if (!isImage(coff) and sym.target_relocs != .none)
56225622 try coff.pendingSymbolTableEntry(si);
56235623 break :ni sym.ni;
......@@ -5630,7 +5630,7 @@ fn updateFuncInner(
56305630 &coff.base,
56315631 pt,
56325632 func_index,
5633 @enumFromInt(@intFromEnum(si)),
5633 @fromBackingInt(@intCast(@backingInt(si))),
56345634 mir,
56355635 &nw.interface,
56365636 .none,
......@@ -5756,9 +5756,9 @@ fn reportUndefs(coff: *Coff, tid: Zcu.PerThread.Id) !void {
57565756 const reloc_l = &ctx.relocs.items[lhs];
57575757 const reloc_r = &ctx.relocs.items[rhs];
57585758 if (reloc_l.target == reloc_r.target)
5759 return @intFromEnum(reloc_l.loc) < @intFromEnum(reloc_r.loc)
5759 return @backingInt(reloc_l.loc) < @backingInt(reloc_r.loc)
57605760 else
5761 return @intFromEnum(reloc_l.target) < @intFromEnum(reloc_r.target);
5761 return @backingInt(reloc_l.target) < @backingInt(reloc_r.target);
57625762 }
57635763 }.lessThan;
57645764
......@@ -5798,7 +5798,7 @@ fn reportUndefs(coff: *Coff, tid: Zcu.PerThread.Id) !void {
57985798 switch (coff.getNode(loc_sym.ni)) {
57995799 .data_directories => {
58005800 const dir: std.coff.IMAGE.DIRECTORY_ENTRY =
5801 @enumFromInt(reloc.offset / @sizeOf(std.coff.ImageDataDirectory));
5801 @fromBackingInt(@intCast(reloc.offset / @sizeOf(std.coff.ImageDataDirectory)));
58025802 err.addNote("referenced by data directory entry: {t}", .{dir});
58035803 },
58045804 .optional_header => err.addNote("referenced by optional header field", .{}),
......@@ -6095,7 +6095,7 @@ pub fn idle(coff: *Coff, tid: Zcu.PerThread.Id) !bool {
60956095 task: {
60966096 // TODO: Idle task for flushing obj into lib
60976097 if (coff.input_section_pending_index < coff.input_sections.items.len) {
6098 const isi: Node.InputSection.Index = @enumFromInt(coff.input_section_pending_index);
6098 const isi: Node.InputSection.Index = @fromBackingInt(@intCast(coff.input_section_pending_index));
60996099 coff.input_section_pending_index += 1;
61006100 const sub_prog_node = coff.idleProgNode(tid, coff.input_prog_node, coff.getNode(isi.symbol(coff).node(coff)));
61016101 defer sub_prog_node.end();
......@@ -6229,7 +6229,7 @@ fn flushUav(
62296229 }
62306230 const sym = si.get(coff);
62316231 assert(sym.loc_relocs == .none);
6232 sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
6232 sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
62336233 if (!isImage(coff) and sym.target_relocs != .none)
62346234 try coff.pendingSymbolTableEntry(si);
62356235
......@@ -6244,7 +6244,7 @@ fn flushUav(
62446244 pt,
62456245 .fromInterned(uav_val),
62466246 &nw.interface,
6247 .{ .atom_index = @enumFromInt(@intFromEnum(si)) },
6247 .{ .atom_index = @fromBackingInt(@intCast(@backingInt(si))) },
62486248 ) catch |err| switch (err) {
62496249 error.WriteFailed => return nw.err.?,
62506250 else => |e| return e,
......@@ -6375,8 +6375,8 @@ fn flushGlobal(coff: *Coff, gmi: Node.GlobalMapIndex) !bool {
63756375 const indices_list = opt_indices_list orelse continue;
63766376 var iter: InputArchive.Member.Symbol.Index = indices_list.first;
63776377 while (true) {
6378 const archive_sym = &coff.input_archive_symbols.items[@intFromEnum(iter)];
6379 const member = &coff.input_archive_members.items[@intFromEnum(archive_sym.iami)];
6378 const archive_sym = &coff.input_archive_symbols.items[@backingInt(iter)];
6379 const member = &coff.input_archive_members.items[@backingInt(archive_sym.iami)];
63806380 member: switch (member.content) {
63816381 .object => if (!member.flags.is_loaded) {
63826382 if (gmi.libName(coff).unwrap()) |lib_name|
......@@ -6523,7 +6523,7 @@ fn flushGlobal(coff: *Coff, gmi: Node.GlobalMapIndex) !bool {
65236523 const import_address_table_sym = import_address_table_si.get(coff);
65246524 import_address_table_sym.ni = import_address_table_ni;
65256525 assert(import_address_table_sym.loc_relocs == .none);
6526 import_address_table_sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
6526 import_address_table_sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
65276527 import_address_table_sym.section_number =
65286528 coff.getNode(idata_section_ni).object_section.symbol(coff).get(coff).section_number;
65296529 }
......@@ -6544,9 +6544,9 @@ fn flushGlobal(coff: *Coff, gmi: Node.GlobalMapIndex) !bool {
65446544 @memcpy(import_hint_name_slice[0..lib_name.len], lib_name);
65456545 @memcpy(import_hint_name_slice[lib_name.len..][0..".dll".len], ".dll");
65466546 @memset(import_hint_name_slice[lib_name.len + ".dll".len ..], 0);
6547 coff.nodes.appendAssumeCapacity(.{ .import_lookup_table = @enumFromInt(gop.index) });
6548 coff.nodes.appendAssumeCapacity(.{ .import_address_table = @enumFromInt(gop.index) });
6549 coff.nodes.appendAssumeCapacity(.{ .import_hint_name_table = @enumFromInt(gop.index) });
6547 coff.nodes.appendAssumeCapacity(.{ .import_lookup_table = @fromBackingInt(@intCast(gop.index)) });
6548 coff.nodes.appendAssumeCapacity(.{ .import_address_table = @fromBackingInt(@intCast(gop.index)) });
6549 coff.nodes.appendAssumeCapacity(.{ .import_hint_name_table = @fromBackingInt(@intCast(gop.index)) });
65506550
65516551 const import_directory_entries = coff.importDirectoryTableSlice()[gop.index..][0..2];
65526552 import_directory_entries.* = .{ .{
......@@ -6572,7 +6572,7 @@ fn flushGlobal(coff: *Coff, gmi: Node.GlobalMapIndex) !bool {
65726572 );
65736573
65746574 const iat_symbol_gop = try coff.import_table.iat_symbol_indices.getOrPut(gpa, .{
6575 .iti = @enumFromInt(gop.index),
6575 .iti = @fromBackingInt(@intCast(gop.index)),
65766576 .name = import.name,
65776577 .ordinal_hint = import.ordinal_hint,
65786578 });
......@@ -6645,7 +6645,7 @@ fn flushGlobal(coff: *Coff, gmi: Node.GlobalMapIndex) !bool {
66456645 (try gop.value_ptr.import_address_table_symbols.addOne(gpa)).* = si;
66466646 },
66476647 .thunk => {
6648 sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
6648 sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
66496649
66506650 const target = &comp.root_mod.resolved_target.result;
66516651 const alignment = switch (comp.root_mod.optimize_mode) {
......@@ -6738,7 +6738,7 @@ fn flushSpecialSymbol(coff: *Coff, pending: SpecialSymbol) !SpecialSymbol {
67386738 const optional_hdr_sym = optional_hdr_si.get(coff);
67396739 optional_hdr_sym.ni = Node.known.optional_header;
67406740 assert(optional_hdr_sym.loc_relocs == .none);
6741 optional_hdr_sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
6741 optional_hdr_sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
67426742
67436743 const optional_hdr = coff.optionalHeaderStandardPtr();
67446744 optional_hdr.address_of_entry_point = std.mem.nativeTo(
......@@ -6785,7 +6785,7 @@ fn flushSpecialSymbol(coff: *Coff, pending: SpecialSymbol) !SpecialSymbol {
67856785 const data_dir_sym = data_dir_si.get(coff);
67866786 data_dir_sym.ni = Node.known.data_directories;
67876787 assert(data_dir_sym.loc_relocs == .none);
6788 data_dir_sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
6788 data_dir_sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
67896789
67906790 try coff.addReloc(
67916791 data_dir_si,
......@@ -6823,8 +6823,8 @@ fn flushLazy(coff: *Coff, pt: Zcu.PerThread, lmr: Node.LazyMapRef) !void {
68236823 };
68246824 const ni = try coff.mf.addLastChildNode(gpa, sec_si.node(coff), .{ .moved = true });
68256825 coff.nodes.appendAssumeCapacity(switch (lazy.kind) {
6826 .code => .{ .lazy_code = @enumFromInt(lmr.index) },
6827 .const_data => .{ .lazy_const_data = @enumFromInt(lmr.index) },
6826 .code => .{ .lazy_code = @fromBackingInt(@intCast(lmr.index)) },
6827 .const_data => .{ .lazy_const_data = @fromBackingInt(@intCast(lmr.index)) },
68286828 });
68296829 sym.ni = ni;
68306830 sym.section_number = sec_si.get(coff).section_number;
......@@ -6832,7 +6832,7 @@ fn flushLazy(coff: *Coff, pt: Zcu.PerThread, lmr: Node.LazyMapRef) !void {
68326832 else => si.deleteLocationRelocs(coff),
68336833 }
68346834 assert(sym.loc_relocs == .none);
6835 sym.loc_relocs = @enumFromInt(coff.relocs.items.len);
6835 sym.loc_relocs = @fromBackingInt(@intCast(coff.relocs.items.len));
68366836 if (!isImage(coff) and sym.target_relocs != .none)
68376837 try coff.pendingSymbolTableEntry(si);
68386838
......@@ -6850,7 +6850,7 @@ fn flushLazy(coff: *Coff, pt: Zcu.PerThread, lmr: Node.LazyMapRef) !void {
68506850 &required_alignment,
68516851 &nw.interface,
68526852 .none,
6853 .{ .atom_index = @enumFromInt(@intFromEnum(si)) },
6853 .{ .atom_index = @fromBackingInt(@intCast(@backingInt(si))) },
68546854 ) catch |err| switch (err) {
68556855 error.WriteFailed => return nw.err.?,
68566856 else => |e| return e,
......@@ -6899,7 +6899,7 @@ fn flushMoved(coff: *Coff, ni: MappedFile.Node.Index) !void {
68996899 switch (member.kind) {
69006900 .first_linker, .second_linker, .longnames => {},
69016901 else => coff.targetStore(
6902 &coff.secondLinkerMemberOffsetsSlice()[@intFromEnum(mi) - Member.Index.known_count],
6902 &coff.secondLinkerMemberOffsetsSlice()[@backingInt(mi) - Member.Index.known_count],
69036903 @intCast(ni.fileLocation(&coff.mf, false).offset),
69046904 ),
69056905 }
......@@ -6926,7 +6926,7 @@ fn flushMoved(coff: *Coff, ni: MappedFile.Node.Index) !void {
69266926 },
69276927 .input_section => |isi| {
69286928 try isi.symbol(coff).flushMoved(coff);
6929 for (coff.input_symbols.items[@intFromEnum(isi.firstSymbol(coff))..]) |input_symbol| {
6929 for (coff.input_symbols.items[@backingInt(isi.firstSymbol(coff))..]) |input_symbol| {
69306930 if (input_symbol.si.get(coff).ni != ni) break;
69316931 try input_symbol.si.flushMoved(coff);
69326932 }
......@@ -7032,7 +7032,7 @@ fn flushMoved(coff: *Coff, ni: MappedFile.Node.Index) !void {
70327032 coff.exportNamePointerTableSlice(),
70337033 coff.exportOrdinalTableSlice(),
70347034 ) |*np, target_ord| {
7035 const ord: ExportTable.Ordinal = @enumFromInt(coff.targetLoad(&target_ord.unbiased_ordinal));
7035 const ord: ExportTable.Ordinal = @fromBackingInt(@intCast(coff.targetLoad(&target_ord.unbiased_ordinal)));
70367036 const entry = ord.get(coff);
70377037 coff.targetStore(
70387038 &np.name_rva,
......@@ -7243,7 +7243,7 @@ fn flushMember(coff: *Coff, mi: Member.Index) !void {
72437243 const file_offset: u32 = @intCast(member.header_ni.fileLocation(&coff.mf, false).offset);
72447244 const first_linker_offsets = coff.firstLinkerMemberOffsetsSlice();
72457245 for (member.first_linker_indices.values()) |mfli|
7246 first_linker_offsets[@intFromEnum(mfli)] = std.mem.nativeTo(u32, file_offset, .big);
7246 first_linker_offsets[@backingInt(mfli)] = std.mem.nativeTo(u32, file_offset, .big);
72477247 },
72487248 }
72497249}
......@@ -7323,7 +7323,7 @@ fn flushSectionMerge(coff: *Coff, index: u32) !void {
73237323 @memcpy(from_name[0..to_slice.len], to_slice);
73247324 @memset(from_name[to_slice.len..], 0);
73257325 } else if (coff.pseudo_section_table.getIndex(from)) |from_index| {
7326 const from_psmi: Node.PseudoSectionMapIndex = @enumFromInt(from_index);
7326 const from_psmi: Node.PseudoSectionMapIndex = @fromBackingInt(@intCast(from_index));
73277327 const from_sym = from_psmi.symbol(coff).get(coff);
73287328 if (opt_to_sec) |to_sec| {
73297329 const to_sym = to_sec.si.get(coff);
......@@ -7395,11 +7395,11 @@ fn updateExportsInner(
73957395 try coff.symbols.ensureUnusedCapacity(gpa, export_indices.len);
73967396 const exported_si: Symbol.Index = switch (exported) {
73977397 .nav => |nav| try coff.navSymbol(zcu, nav),
7398 .uav => |uav| @enumFromInt(@intFromEnum(try coff.lowerUav(
7398 .uav => |uav| @fromBackingInt(@intCast(@backingInt(try coff.lowerUav(
73997399 pt,
74007400 uav,
74017401 Type.fromInterned(ip.typeOf(uav)).abiAlignment(zcu),
7402 ))),
7402 )))),
74037403 };
74047404 switch (exported) {
74057405 .nav => |nav| log.debug("updateExports({f}) = {d}", .{ ip.getNav(nav).fqn.fmt(ip), exported_si }),
......@@ -7479,7 +7479,7 @@ fn updateExportsInner(
74797479 const ordinal_table_slice = coff.exportOrdinalTableSlice();
74807480 if (ordinal_table_slice.len > 0 and !coff.export_table.pending_sort) {
74817481 const tail_index: ExportTable.Ordinal =
7482 @enumFromInt(ordinal_table_slice[ordinal_table_slice.len - 1].unbiased_ordinal);
7482 @fromBackingInt(@intCast(ordinal_table_slice[ordinal_table_slice.len - 1].unbiased_ordinal));
74837483 const tail_entry = tail_index.get(coff);
74847484 const tail_name = name_table_slice[tail_entry.name_index..][0..tail_entry.name_len];
74857485 coff.export_table.pending_sort = std.mem.lessThan(u8, name, tail_name);
......@@ -7523,7 +7523,7 @@ fn updateExportsInner(
75237523 .si = export_si,
75247524 .name_index = @intCast(name_index),
75257525 .name_len = @intCast(name.len),
7526 .export_address_table_ri = @enumFromInt(coff.relocs.items.len),
7526 .export_address_table_ri = @fromBackingInt(@intCast(coff.relocs.items.len)),
75277527 };
75287528
75297529 try coff.addReloc(
......@@ -7583,7 +7583,7 @@ pub fn dump(coff: *Coff, w: *Io.Writer, tid: Zcu.PerThread.Id) !link.File.DumpRe
75837583 try coff.printSection(w, name, sec.si);
75847584 try w.writeAll("Symbol table:\n");
75857585 for (1..coff.symbols.items.len) |si|
7586 try coff.printSymbol(w, tid, @enumFromInt(si));
7586 try coff.printSymbol(w, tid, @fromBackingInt(@intCast(si)));
75877587
75887588 return .enabled;
75897589 }
......@@ -7688,7 +7688,7 @@ fn printNodeName(
76887688 const comdat_name = if (comdat_sym.gmi != .none)
76897689 comdat_sym.gmi.name(coff).toSlice(coff)
76907690 else
7691 coff.input_symbols.items[@intFromEnum(comdat_sym.extra.isli)].name.toSlice(coff);
7691 coff.input_symbols.items[@backingInt(comdat_sym.extra.isli)].name.toSlice(coff);
76927692
76937693 try w.print("={s}", .{comdat_name});
76947694 }
......@@ -7755,10 +7755,10 @@ pub fn printNode(
77557755 try w.writeAll(@tagName(node));
77567756 try coff.printNodeName(w, tid, node);
77577757 {
7758 const mf_node = &coff.mf.nodes.items[@intFromEnum(ni)];
7758 const mf_node = &coff.mf.nodes.items[@backingInt(ni)];
77597759 const off, const size = mf_node.location().resolve(&coff.mf);
77607760 try w.print(" index={d} offset=0x{x} size=0x{x} align=0x{x}{s}{s}{s}{s}\n", .{
7761 @intFromEnum(ni),
7761 @backingInt(ni),
77627762 off,
77637763 size,
77647764 mf_node.flags.alignment.toByteUnits(),
src/link/ConstPool.zig+6-6
......@@ -40,7 +40,7 @@ pub fn deinit(pool: *ConstPool, gpa: Allocator) void {
4040pub const Index = enum(u32) {
4141 _,
4242 pub fn val(i: Index, pool: *const ConstPool) InternPool.Index {
43 return pool.values.keys()[@intFromEnum(i)];
43 return pool.values.keys()[@backingInt(i)];
4444 }
4545};
4646
......@@ -107,15 +107,15 @@ const ContainerDepEntry = extern struct {
107107 fn unwrap(o: Optional) ?ContainerDepEntry.Index {
108108 return switch (o) {
109109 .none => null,
110 else => @enumFromInt(@intFromEnum(o)),
110 else => @fromBackingInt(@intCast(@backingInt(o))),
111111 };
112112 }
113113 };
114114 fn toOptional(i: ContainerDepEntry.Index) Optional {
115 return @enumFromInt(@intFromEnum(i));
115 return @fromBackingInt(@intCast(@backingInt(i)));
116116 }
117117 fn ptr(i: ContainerDepEntry.Index, pool: *ConstPool) *ContainerDepEntry {
118 return &pool.container_dep_entries.items[@intFromEnum(i)];
118 return &pool.container_dep_entries.items[@backingInt(i)];
119119 }
120120 };
121121};
......@@ -148,7 +148,7 @@ pub fn get(pool: *ConstPool, pt: Zcu.PerThread, user: User, val: InternPool.Inde
148148 const ip = &zcu.intern_pool;
149149 const gpa = zcu.comp.gpa;
150150 const gop = try pool.values.getOrPut(gpa, val);
151 const index: ConstPool.Index = @enumFromInt(gop.index);
151 const index: ConstPool.Index = @fromBackingInt(@intCast(gop.index));
152152 if (!gop.found_existing) {
153153 const ty: Type = switch (ip.typeOf(val)) {
154154 .type_type => if (ip.isUndef(val)) .type else .fromInterned(val),
......@@ -272,7 +272,7 @@ fn registerTypeDeps(pool: *ConstPool, root: Index, ty: Type, zcu: *const Zcu) Al
272272 errdefer comptime unreachable;
273273
274274 const gop = pool.container_deps.getOrPutAssumeCapacity(ty.toIntern());
275 const entry: ContainerDepEntry.Index = @enumFromInt(pool.container_dep_entries.items.len);
275 const entry: ContainerDepEntry.Index = @fromBackingInt(@intCast(pool.container_dep_entries.items.len));
276276 pool.container_dep_entries.appendAssumeCapacity(.{
277277 .next = if (gop.found_existing) gop.value_ptr.toOptional() else .none,
278278 .depender = root,
src/link/Dwarf.zig+129-129
......@@ -81,11 +81,11 @@ const ModInfo = struct {
8181
8282const DebugAbbrev = struct {
8383 section: Section,
84 const unit: Unit.Index = @enumFromInt(0);
84 const unit: Unit.Index = @fromBackingInt(@intCast(0));
8585
8686 const header_bytes = 0;
8787
88 const trailer_bytes = uleb128Bytes(@intFromEnum(AbbrevCode.null));
88 const trailer_bytes = uleb128Bytes(@backingInt(AbbrevCode.null));
8989};
9090
9191const DebugAranges = struct {
......@@ -96,7 +96,7 @@ const DebugAranges = struct {
9696 }
9797
9898 fn trailerBytes(dwarf: *Dwarf) u32 {
99 return @intFromEnum(dwarf.address_size) * 2;
99 return @backingInt(dwarf.address_size) * 2;
100100 }
101101};
102102
......@@ -146,8 +146,8 @@ const DebugInfo = struct {
146146
147147 fn headerBytes(dwarf: *Dwarf) u32 {
148148 return dwarf.unitLengthBytes() + 2 + 1 + 1 + dwarf.sectionOffsetBytes() +
149 uleb128Bytes(@intFromEnum(AbbrevCode.compile_unit)) + 1 + dwarf.sectionOffsetBytes() * 6 + uleb128Bytes(0) +
150 uleb128Bytes(@intFromEnum(AbbrevCode.module)) + dwarf.sectionOffsetBytes() + uleb128Bytes(0);
149 uleb128Bytes(@backingInt(AbbrevCode.compile_unit)) + 1 + dwarf.sectionOffsetBytes() * 6 + uleb128Bytes(0) +
150 uleb128Bytes(@backingInt(AbbrevCode.module)) + dwarf.sectionOffsetBytes() + uleb128Bytes(0);
151151 }
152152
153153 fn declEntryLineOff(dwarf: *Dwarf) u32 {
......@@ -168,9 +168,9 @@ const DebugInfo = struct {
168168 debug_info.section.off(dwarf) + unit_ptr.off + unit_ptr.header_len + entry_ptr.off,
169169 ) != abbrev_code_buf.len) return error.InputOutput;
170170 var abbrev_code_reader: std.Io.Reader = .fixed(&abbrev_code_buf);
171 return @enumFromInt(
171 return @fromBackingInt(@intCast(
172172 abbrev_code_reader.takeLeb128(@typeInfo(AbbrevCode).@"enum".tag_type) catch unreachable,
173 );
173 ));
174174 }
175175
176176 const trailer_bytes = 1 + 1;
......@@ -202,7 +202,7 @@ const DebugLine = struct {
202202 const dir_index_info = dirIndexInfo(dir_count);
203203 return dwarf.unitLengthBytes() + 2 + 1 + 1 + dwarf.sectionOffsetBytes() + 1 + 1 + 1 + 1 + 1 + 1 + 1 * (dwarf.debug_line.header.opcode_base - 1) +
204204 1 + uleb128Bytes(DW.LNCT.path) + uleb128Bytes(DW.FORM.line_strp) + uleb128Bytes(dir_count) + (dwarf.sectionOffsetBytes()) * dir_count +
205 1 + uleb128Bytes(DW.LNCT.path) + uleb128Bytes(DW.FORM.line_strp) + uleb128Bytes(DW.LNCT.directory_index) + uleb128Bytes(@intFromEnum(dir_index_info.form)) + uleb128Bytes(DW.LNCT.LLVM_source) + uleb128Bytes(DW.FORM.line_strp) + uleb128Bytes(file_count) + (dwarf.sectionOffsetBytes() + dir_index_info.bytes + dwarf.sectionOffsetBytes()) * file_count;
205 1 + uleb128Bytes(DW.LNCT.path) + uleb128Bytes(DW.FORM.line_strp) + uleb128Bytes(DW.LNCT.directory_index) + uleb128Bytes(@backingInt(dir_index_info.form)) + uleb128Bytes(DW.LNCT.LLVM_source) + uleb128Bytes(DW.FORM.line_strp) + uleb128Bytes(file_count) + (dwarf.sectionOffsetBytes() + dir_index_info.bytes + dwarf.sectionOffsetBytes()) * file_count;
206206 }
207207
208208 const trailer_bytes = 1 + uleb128Bytes(1) + 1;
......@@ -239,7 +239,7 @@ const StringSection = struct {
239239 map: std.array_hash_map.Auto(void, void),
240240 section: Section,
241241
242 const unit: Unit.Index = @enumFromInt(0);
242 const unit: Unit.Index = @fromBackingInt(@intCast(0));
243243
244244 const init: StringSection = .{
245245 .contents = .empty,
......@@ -255,7 +255,7 @@ const StringSection = struct {
255255
256256 fn addString(str_sec: *StringSection, dwarf: *Dwarf, str: []const u8) UpdateError!Entry.Index {
257257 const gop = try str_sec.map.getOrPutAdapted(dwarf.gpa, str, Adapter{ .str_sec = str_sec });
258 const entry: Entry.Index = @enumFromInt(gop.index);
258 const entry: Entry.Index = @fromBackingInt(@intCast(gop.index));
259259 if (!gop.found_existing) {
260260 errdefer _ = str_sec.map.pop();
261261 const unit_ptr = str_sec.section.getUnit(unit);
......@@ -284,7 +284,7 @@ const StringSection = struct {
284284 }
285285
286286 pub fn eql(adapter: Adapter, key: []const u8, _: void, rhs_index: usize) bool {
287 const entry = adapter.str_sec.section.getUnit(unit).getEntry(@enumFromInt(rhs_index));
287 const entry = adapter.str_sec.section.getUnit(unit).getEntry(@fromBackingInt(@intCast(rhs_index)));
288288 return std.mem.eql(u8, key, adapter.str_sec.contents.items[entry.off..][0 .. entry.len - 1 :0]);
289289 }
290290 };
......@@ -345,7 +345,7 @@ pub const Section = struct {
345345 }
346346
347347 fn addUnit(sec: *Section, header_len: u32, trailer_len: u32, dwarf: *Dwarf) UpdateError!Unit.Index {
348 const unit: Unit.Index = @enumFromInt(sec.units.items.len);
348 const unit: Unit.Index = @fromBackingInt(@intCast(sec.units.items.len));
349349 const unit_ptr = try sec.units.addOne(dwarf.gpa);
350350 errdefer sec.popUnit(dwarf.gpa);
351351 const aligned_header_len: u32 = @intCast(sec.alignment.forward(header_len));
......@@ -385,14 +385,14 @@ pub const Section = struct {
385385 }
386386
387387 fn popUnit(sec: *Section, gpa: Allocator) void {
388 const unit_index: Unit.Index = @enumFromInt(sec.units.items.len - 1);
388 const unit_index: Unit.Index = @fromBackingInt(@intCast(sec.units.items.len - 1));
389389 sec.unlinkUnit(unit_index);
390390 var unit = sec.units.pop().?;
391391 unit.deinit(gpa);
392392 }
393393
394394 pub fn getUnit(sec: *Section, unit: Unit.Index) *Unit {
395 return &sec.units.items[@intFromEnum(unit)];
395 return &sec.units.items[@backingInt(unit)];
396396 }
397397
398398 fn resizeEntry(
......@@ -548,12 +548,12 @@ const Unit = struct {
548548 _,
549549
550550 pub fn unwrap(uio: Optional) ?Index {
551 return if (uio != .none) @enumFromInt(@intFromEnum(uio)) else null;
551 return if (uio != .none) @fromBackingInt(@intCast(@backingInt(uio))) else null;
552552 }
553553 };
554554
555555 fn toOptional(ui: Index) Optional {
556 return @enumFromInt(@intFromEnum(ui));
556 return @fromBackingInt(@intCast(@backingInt(ui)));
557557 }
558558 };
559559
......@@ -577,7 +577,7 @@ const Unit = struct {
577577 entry_ptr.next = .none;
578578 return entry;
579579 }
580 const entry: Entry.Index = @enumFromInt(unit.entries.items.len);
580 const entry: Entry.Index = @fromBackingInt(@intCast(unit.entries.items.len));
581581 const entry_ptr = try unit.entries.addOne(gpa);
582582 entry_ptr.* = .{
583583 .prev = .none,
......@@ -593,7 +593,7 @@ const Unit = struct {
593593 }
594594
595595 pub fn getEntry(unit: *Unit, entry: Entry.Index) *Entry {
596 return &unit.entries.items[@intFromEnum(entry)];
596 return &unit.entries.items[@backingInt(entry)];
597597 }
598598
599599 fn resize(unit_ptr: *Unit, sec: *Section, dwarf: *Dwarf, extra_header_len: u32, len: u32) UpdateError!void {
......@@ -719,11 +719,11 @@ const Unit = struct {
719719 defer trailer_aw.deinit();
720720 const tw = &trailer_aw.writer;
721721 const fill_byte: u8 = if (sec == &dwarf.debug_abbrev.section) fill: {
722 tw.writeUleb128(@intFromEnum(AbbrevCode.null)) catch unreachable;
723 assert(uleb128Bytes(@intFromEnum(AbbrevCode.null)) == 1);
724 break :fill @intFromEnum(AbbrevCode.null);
722 tw.writeUleb128(@backingInt(AbbrevCode.null)) catch unreachable;
723 assert(uleb128Bytes(@backingInt(AbbrevCode.null)) == 1);
724 break :fill @backingInt(AbbrevCode.null);
725725 } else if (sec == &dwarf.debug_aranges.section) fill: {
726 tw.splatByteAll(0, @intFromEnum(dwarf.address_size) * 2) catch unreachable;
726 tw.splatByteAll(0, @backingInt(dwarf.address_size) * 2) catch unreachable;
727727 break :fill 0;
728728 } else if (sec == &dwarf.debug_frame.section) fill: {
729729 switch (dwarf.debug_frame.header.format) {
......@@ -746,7 +746,7 @@ const Unit = struct {
746746 }
747747 tw.writeByte(4) catch unreachable;
748748 tw.writeAll("\x00") catch unreachable;
749 tw.writeByte(@intFromEnum(dwarf.address_size)) catch unreachable;
749 tw.writeByte(@backingInt(dwarf.address_size)) catch unreachable;
750750 tw.writeByte(0) catch unreachable;
751751 },
752752 .eh_frame => {
......@@ -763,9 +763,9 @@ const Unit = struct {
763763 tw.splatByteAll(DW.CFA.nop, unit.trailer_len - tw.end) catch unreachable;
764764 break :fill DW.CFA.nop;
765765 } else if (sec == &dwarf.debug_info.section) fill: {
766 for (0..2) |_| tw.writeUleb128(@intFromEnum(AbbrevCode.null)) catch unreachable;
767 assert(uleb128Bytes(@intFromEnum(AbbrevCode.null)) == 1);
768 break :fill @intFromEnum(AbbrevCode.null);
766 for (0..2) |_| tw.writeUleb128(@backingInt(AbbrevCode.null)) catch unreachable;
767 assert(uleb128Bytes(@backingInt(AbbrevCode.null)) == 1);
768 break :fill @backingInt(AbbrevCode.null);
769769 } else if (sec == &dwarf.debug_rnglists.section) fill: {
770770 tw.writeByte(DW.RLE.end_of_list) catch unreachable;
771771 break :fill DW.RLE.end_of_list;
......@@ -843,12 +843,12 @@ const Entry = struct {
843843 _,
844844
845845 pub fn unwrap(eio: Optional) ?Index {
846 return if (eio != .none) @enumFromInt(@intFromEnum(eio)) else null;
846 return if (eio != .none) @fromBackingInt(@intCast(@backingInt(eio))) else null;
847847 }
848848 };
849849
850850 fn toOptional(ei: Index) Optional {
851 return @enumFromInt(@intFromEnum(ei));
851 return @fromBackingInt(@intCast(@backingInt(ei)));
852852 }
853853 };
854854
......@@ -880,8 +880,8 @@ const Entry = struct {
880880 const len = unit.getEntry(entry.next.unwrap() orelse return).off - start;
881881 var buf: [
882882 @max(
883 uleb128Bytes(@intFromEnum(AbbrevCode.pad_1)),
884 uleb128Bytes(@intFromEnum(AbbrevCode.pad_n)) + uleb128Bytes(std.math.maxInt(u32)),
883 uleb128Bytes(@backingInt(AbbrevCode.pad_1)),
884 uleb128Bytes(@backingInt(AbbrevCode.pad_n)) + uleb128Bytes(std.math.maxInt(u32)),
885885 1 + uleb128Bytes(std.math.maxInt(u32)) + 1,
886886 )
887887 ]u8 = undefined;
......@@ -984,17 +984,17 @@ const Entry = struct {
984984 defer dwarf.gpa.free(buf);
985985 _ = try dwarf.getFile().?.readPositionalAll(io, buf, sec.off(dwarf));
986986 log.info("Section{{ .first = {}, .last = {}, .off = 0x{x}, .len = 0x{x} }}", .{
987 @intFromEnum(sec.first),
988 @intFromEnum(sec.last),
987 @backingInt(sec.first),
988 @backingInt(sec.last),
989989 sec.off(dwarf),
990990 sec.len,
991991 });
992992 for (sec.units.items) |*unit_ptr| {
993993 log.info(" Unit{{ .prev = {}, .next = {}, .first = {}, .last = {}, .off = 0x{x}, .header_len = 0x{x}, .trailer_len = 0x{x}, .len = 0x{x} }}", .{
994 @intFromEnum(unit_ptr.prev),
995 @intFromEnum(unit_ptr.next),
996 @intFromEnum(unit_ptr.first),
997 @intFromEnum(unit_ptr.last),
994 @backingInt(unit_ptr.prev),
995 @backingInt(unit_ptr.next),
996 @backingInt(unit_ptr.first),
997 @backingInt(unit_ptr.last),
998998 unit_ptr.off,
999999 unit_ptr.header_len,
10001000 unit_ptr.trailer_len,
......@@ -1002,8 +1002,8 @@ const Entry = struct {
10021002 });
10031003 for (unit_ptr.entries.items) |*entry| {
10041004 log.info(" Entry{{ .prev = {}, .next = {}, .off = 0x{x}, .len = 0x{x} }}", .{
1005 @intFromEnum(entry.prev),
1006 @intFromEnum(entry.next),
1005 @backingInt(entry.prev),
1006 @backingInt(entry.next),
10071007 entry.off,
10081008 entry.len,
10091009 });
......@@ -1017,7 +1017,7 @@ const Entry = struct {
10171017 if (entry.len > 0) return entry;
10181018 if (std.debug.runtime_safety) {
10191019 log.err("missing {} from {s}", .{
1020 @as(Entry.Index, @enumFromInt(entry - unit.entries.items.ptr)),
1020 @as(Entry.Index, @fromBackingInt(@intCast(entry - unit.entries.items.ptr))),
10211021 std.mem.sliceTo(if (dwarf.bin_file.cast(.elf)) |elf_file|
10221022 elf_file.zigObjectPtr().?.symbol(sec.index).name(elf_file)
10231023 else if (dwarf.bin_file.cast(.macho)) |macho_file|
......@@ -1031,19 +1031,19 @@ const Entry = struct {
10311031 const zcu = dwarf.bin_file.comp.zcu.?;
10321032 const ip = &zcu.intern_pool;
10331033 for (0.., dwarf.values.items) |raw_index, unit_and_entry| {
1034 const index: link.ConstPool.Index = @enumFromInt(raw_index);
1034 const index: link.ConstPool.Index = @fromBackingInt(@intCast(raw_index));
10351035 const val = index.val(&dwarf.const_pool);
10361036 const val_unit, const val_entry = unit_and_entry;
10371037 if (sec.getUnit(val_unit) == unit and unit.getEntry(val_entry) == entry)
10381038 log.err("missing Value({f}({d}))", .{
10391039 Value.fromInterned(val).fmtValue(.{ .tid = .main, .zcu = zcu }),
1040 @intFromEnum(val),
1040 @backingInt(val),
10411041 });
10421042 }
10431043 for (dwarf.navs.keys(), dwarf.navs.values()) |nav, other_entry| {
10441044 const nav_unit = dwarf.getUnit(zcu.fileByIndex(ip.getNav(nav).srcInst(ip).resolveFile(ip)).mod.?) catch unreachable;
10451045 if (sec.getUnit(nav_unit) == unit and unit.getEntry(other_entry) == entry)
1046 log.err("missing Nav({f}({d}))", .{ ip.getNav(nav).fqn.fmt(ip), @intFromEnum(nav) });
1046 log.err("missing Nav({f}({d}))", .{ ip.getNav(nav).fqn.fmt(ip), @backingInt(nav) });
10471047 }
10481048 }
10491049 @panic("missing dwarf relocation target");
......@@ -1108,7 +1108,7 @@ const Entry = struct {
11081108 entry_off + reloc.source_off,
11091109 @bitCast(symbol.address(.{}, elf_file) + @as(i64, @intCast(reloc.target_off)) -
11101110 if (symbol.flags.is_tls) elf_file.dtpAddress() else 0),
1111 @intFromEnum(dwarf.address_size),
1111 @backingInt(dwarf.address_size),
11121112 );
11131113 }
11141114 } else if (dwarf.bin_file.cast(.macho)) |macho_file| {
......@@ -1118,7 +1118,7 @@ const Entry = struct {
11181118 try dwarf.resolveReloc(
11191119 entry_off + reloc.source_off,
11201120 ref.getSymbol(macho_file).?.getAddress(.{}, macho_file) + @as(i64, @intCast(reloc.target_off)),
1121 @intFromEnum(dwarf.address_size),
1121 @backingInt(dwarf.address_size),
11221122 );
11231123 }
11241124 }
......@@ -1735,10 +1735,10 @@ pub const WipNav = struct {
17351735 };
17361736 }
17371737 fn leaveBlockWriterError(wip_nav: *WipNav, code_off: u64) (UpdateError || Writer.Error)!void {
1738 const block_bytes = comptime uleb128Bytes(@intFromEnum(AbbrevCode.block));
1738 const block_bytes = comptime uleb128Bytes(@backingInt(AbbrevCode.block));
17391739 const block = wip_nav.blocks.pop().?;
17401740 if (wip_nav.any_children)
1741 try wip_nav.debug_info.writer.writeUleb128(@intFromEnum(AbbrevCode.null))
1741 try wip_nav.debug_info.writer.writeUleb128(@backingInt(AbbrevCode.null))
17421742 else
17431743 std.leb.writeUnsignedFixed(
17441744 block_bytes,
......@@ -1797,10 +1797,10 @@ pub const WipNav = struct {
17971797 func: InternPool.Index,
17981798 code_off: u64,
17991799 ) (UpdateError || Writer.Error)!void {
1800 const inlined_func_bytes = comptime uleb128Bytes(@intFromEnum(AbbrevCode.inlined_func));
1800 const inlined_func_bytes = comptime uleb128Bytes(@backingInt(AbbrevCode.inlined_func));
18011801 const block = wip_nav.blocks.pop().?;
18021802 if (wip_nav.any_children)
1803 try wip_nav.debug_info.writer.writeUleb128(@intFromEnum(AbbrevCode.null))
1803 try wip_nav.debug_info.writer.writeUleb128(@backingInt(AbbrevCode.null))
18041804 else
18051805 std.leb.writeUnsignedFixed(
18061806 inlined_func_bytes,
......@@ -1959,7 +1959,7 @@ pub const WipNav = struct {
19591959 return @import("builtin").cpu.arch.endian();
19601960 }
19611961 fn addrSym(counter: *ExprLocCounter, _: link.File.SymbolId) Writer.Error!void {
1962 try counter.dw.writer.splatByteAll(undefined, @intFromEnum(counter.address_size));
1962 try counter.dw.writer.splatByteAll(undefined, @backingInt(counter.address_size));
19631963 }
19641964 fn infoEntry(counter: *ExprLocCounter, _: Unit.Index, _: Entry.Index) Writer.Error!void {
19651965 try counter.dw.writer.splatByteAll(undefined, counter.section_offset_bytes);
......@@ -2005,7 +2005,7 @@ pub const WipNav = struct {
20052005 .target_sym = sym_index,
20062006 .target_off = sym_off,
20072007 });
2008 try diw.splatByteAll(0, @intFromEnum(wip_nav.dwarf.address_size));
2008 try diw.splatByteAll(0, @backingInt(wip_nav.dwarf.address_size));
20092009 }
20102010
20112011 fn frameExprLoc(wip_nav: *WipNav, loc: Loc) (UpdateError || Writer.Error)!void {
......@@ -2047,7 +2047,7 @@ pub const WipNav = struct {
20472047 .target_sym = sym_index,
20482048 .target_off = sym_off,
20492049 });
2050 try dfw.splatByteAll(0, @intFromEnum(wip_nav.dwarf.address_size));
2050 try dfw.splatByteAll(0, @backingInt(wip_nav.dwarf.address_size));
20512051 }
20522052
20532053 fn refNav(
......@@ -2073,7 +2073,7 @@ pub const WipNav = struct {
20732073 }
20742074 const dwarf = wip_nav.dwarf;
20752075 const index = try dwarf.const_pool.get(wip_nav.pt, .{ .dwarf = dwarf }, value.toIntern());
2076 return dwarf.values.items[@intFromEnum(index)];
2076 return dwarf.values.items[@backingInt(index)];
20772077 }
20782078
20792079 fn refForward(wip_nav: *WipNav) (Allocator.Error || Writer.Error)!u32 {
......@@ -2438,14 +2438,14 @@ pub fn initMetadata(dwarf: *Dwarf) UpdateError!void {
24382438 assert(try dwarf.debug_abbrev.section.addUnit(DebugAbbrev.header_bytes, DebugAbbrev.trailer_bytes, dwarf) == DebugAbbrev.unit);
24392439 errdefer dwarf.debug_abbrev.section.popUnit(dwarf.gpa);
24402440 for (std.enums.values(AbbrevCode)) |abbrev_code|
2441 assert(@intFromEnum(try dwarf.debug_abbrev.section.getUnit(DebugAbbrev.unit).addEntry(dwarf.gpa)) == @intFromEnum(abbrev_code));
2441 assert(@backingInt(try dwarf.debug_abbrev.section.getUnit(DebugAbbrev.unit).addEntry(dwarf.gpa)) == @backingInt(abbrev_code));
24422442
24432443 dwarf.debug_aranges.section.pad_entries_to_ideal = false;
2444 dwarf.debug_aranges.section.alignment = InternPool.Alignment.fromNonzeroByteUnits(@intFromEnum(dwarf.address_size) * 2);
2444 dwarf.debug_aranges.section.alignment = InternPool.Alignment.fromNonzeroByteUnits(@backingInt(dwarf.address_size) * 2);
24452445
24462446 dwarf.debug_frame.section.alignment = switch (dwarf.debug_frame.header.format) {
24472447 .none => .@"1",
2448 .debug_frame => InternPool.Alignment.fromNonzeroByteUnits(@intFromEnum(dwarf.address_size)),
2448 .debug_frame => InternPool.Alignment.fromNonzeroByteUnits(@backingInt(dwarf.address_size)),
24492449 .eh_frame => .@"4",
24502450 };
24512451
......@@ -2499,7 +2499,7 @@ fn getNavEntry(
24992499
25002500fn getUnit(dwarf: *Dwarf, mod: *Module) !Unit.Index {
25012501 const mod_gop = try dwarf.mods.getOrPut(dwarf.gpa, mod);
2502 const unit: Unit.Index = @enumFromInt(mod_gop.index);
2502 const unit: Unit.Index = @fromBackingInt(@intCast(mod_gop.index));
25032503 if (!mod_gop.found_existing) {
25042504 errdefer _ = dwarf.mods.pop();
25052505 mod_gop.value_ptr.* = .{
......@@ -2550,15 +2550,15 @@ fn getUnit(dwarf: *Dwarf, mod: *Module) !Unit.Index {
25502550}
25512551
25522552fn getUnitIfExists(dwarf: *const Dwarf, mod: *Module) ?Unit.Index {
2553 return @enumFromInt(dwarf.mods.getIndex(mod) orelse return null);
2553 return @fromBackingInt(@intCast(dwarf.mods.getIndex(mod) orelse return null));
25542554}
25552555
25562556fn getModInfo(dwarf: *Dwarf, unit: Unit.Index) *ModInfo {
2557 return &dwarf.mods.values()[@intFromEnum(unit)];
2557 return &dwarf.mods.values()[@backingInt(unit)];
25582558}
25592559
25602560fn getUnitModule(dwarf: *Dwarf, unit: Unit.Index) *Module {
2561 return dwarf.mods.keys()[@intFromEnum(unit)];
2561 return dwarf.mods.keys()[@backingInt(unit)];
25622562}
25632563
25642564pub fn initWipNav(
......@@ -2590,7 +2590,7 @@ fn initWipNavInner(
25902590 file.sub_file_path,
25912591 decl.src_line + 1,
25922592 decl.src_column + 1,
2593 @intFromEnum(inst_info.inst),
2593 @backingInt(inst_info.inst),
25942594 nav.fqn.fmt(ip),
25952595 });
25962596
......@@ -2650,7 +2650,7 @@ fn initWipNavInner(
26502650 try wip_nav.refType(.fromInterned(param_type));
26512651 }
26522652 if (func_type.is_var_args) try wip_nav.abbrevCode(.is_var_args);
2653 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
2653 try diw.writeUleb128(@backingInt(AbbrevCode.null));
26542654 }
26552655 } else try wip_nav.infoExprLoc(.{ .addr_reloc = sym_index });
26562656 },
......@@ -2678,7 +2678,7 @@ fn initWipNavInner(
26782678 try wip_nav.refType(.fromInterned(param_type));
26792679 }
26802680 if (func_type.is_var_args) try wip_nav.abbrevCode(.is_var_args);
2681 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
2681 try diw.writeUleb128(@backingInt(AbbrevCode.null));
26822682 }
26832683 },
26842684 },
......@@ -2720,7 +2720,7 @@ fn initWipNavInner(
27202720 });
27212721 try dfw.splatByteAll(0, dwarf.sectionOffsetBytes());
27222722 try wip_nav.frameAddrSym(sym_index, 0);
2723 try dfw.splatByteAll(undefined, @intFromEnum(dwarf.address_size));
2723 try dfw.splatByteAll(undefined, @backingInt(dwarf.address_size));
27242724 },
27252725 .eh_frame => {
27262726 try dfw.writeInt(u32, undefined, dwarf.endian);
......@@ -2776,13 +2776,13 @@ fn initWipNavInner(
27762776
27772777 try wip_nav.advancePCAndLine(func.lbrace_line, 0);
27782778 } else {
2779 try dlw.writeUleb128(1 + @intFromEnum(dwarf.address_size));
2779 try dlw.writeUleb128(1 + @backingInt(dwarf.address_size));
27802780 try dlw.writeByte(DW.LNE.set_address);
27812781 try dwarf.debug_line.section.getUnit(wip_nav.unit).getEntry(wip_nav.entry).external_relocs.append(dwarf.gpa, .{
27822782 .source_off = @intCast(dlw.end),
27832783 .target_sym = sym_index,
27842784 });
2785 try dlw.splatByteAll(0, @intFromEnum(dwarf.address_size));
2785 try dlw.splatByteAll(0, @backingInt(dwarf.address_size));
27862786
27872787 const file_gop = try dwarf.getModInfo(unit).files.getOrPut(dwarf.gpa, inst_info.file);
27882788 try dlw.writeByte(DW.LNS.set_file);
......@@ -2872,13 +2872,13 @@ fn finishWipNavFuncWriterError(
28722872 const external_relocs = &dwarf.debug_aranges.section.getUnit(wip_nav.unit).getEntry(wip_nav.entry).external_relocs;
28732873 try external_relocs.append(dwarf.gpa, .{ .target_sym = wip_nav.func_sym_index });
28742874 var entry: [8 + 8]u8 = undefined;
2875 @memset(entry[0..@intFromEnum(dwarf.address_size)], 0);
2876 dwarf.writeInt(entry[@intFromEnum(dwarf.address_size)..][0..@intFromEnum(dwarf.address_size)], code_size);
2875 @memset(entry[0..@backingInt(dwarf.address_size)], 0);
2876 dwarf.writeInt(entry[@backingInt(dwarf.address_size)..][0..@backingInt(dwarf.address_size)], code_size);
28772877 try dwarf.debug_aranges.section.replaceEntry(
28782878 wip_nav.unit,
28792879 wip_nav.entry,
28802880 dwarf,
2881 entry[0 .. @intFromEnum(dwarf.address_size) * 2],
2881 entry[0 .. @backingInt(dwarf.address_size) * 2],
28822882 );
28832883 }
28842884 switch (dwarf.debug_frame.header.format) {
......@@ -2901,7 +2901,7 @@ fn finishWipNavFuncWriterError(
29012901 switch (format) {
29022902 .none => unreachable,
29032903 .debug_frame => dwarf.writeInt(contents[dwarf.unitLengthBytes() + dwarf.sectionOffsetBytes() +
2904 @intFromEnum(dwarf.address_size) ..][0..@intFromEnum(dwarf.address_size)], code_size),
2904 @backingInt(dwarf.address_size) ..][0..@backingInt(dwarf.address_size)], code_size),
29052905 .eh_frame => {
29062906 std.mem.writeInt(
29072907 u32,
......@@ -2919,13 +2919,13 @@ fn finishWipNavFuncWriterError(
29192919 std.mem.writeInt(u32, wip_nav.debug_info.written()[wip_nav.func_high_pc..][0..4], @intCast(code_size), dwarf.endian);
29202920 if (wip_nav.any_children) {
29212921 const diw = &wip_nav.debug_info.writer;
2922 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
2922 try diw.writeUleb128(@backingInt(AbbrevCode.null));
29232923 } else {
29242924 const abbrev_code_buf = wip_nav.debug_info.written()[0..AbbrevCode.decl_bytes];
29252925 var abbrev_code_fr: std.Io.Reader = .fixed(abbrev_code_buf);
2926 const abbrev_code: AbbrevCode = @enumFromInt(
2926 const abbrev_code: AbbrevCode = @fromBackingInt(@intCast(
29272927 abbrev_code_fr.takeLeb128(@typeInfo(AbbrevCode).@"enum".tag_type) catch unreachable,
2928 );
2928 ));
29292929 std.leb.writeUnsignedFixed(
29302930 AbbrevCode.decl_bytes,
29312931 abbrev_code_buf,
......@@ -2944,7 +2944,7 @@ fn finishWipNavFuncWriterError(
29442944 .target_sym = wip_nav.func_sym_index,
29452945 },
29462946 .{
2947 .source_off = 1 + @intFromEnum(dwarf.address_size),
2947 .source_off = 1 + @backingInt(dwarf.address_size),
29482948 .target_sym = wip_nav.func_sym_index,
29492949 .target_off = code_size,
29502950 },
......@@ -2953,7 +2953,7 @@ fn finishWipNavFuncWriterError(
29532953 wip_nav.unit,
29542954 wip_nav.entry,
29552955 dwarf,
2956 ([1]u8{DW.RLE.start_end} ++ @as([8 + 8]u8, @splat(0)))[0 .. 1 + @intFromEnum(dwarf.address_size) + @intFromEnum(dwarf.address_size)],
2956 ([1]u8{DW.RLE.start_end} ++ @as([8 + 8]u8, @splat(0)))[0 .. 1 + @backingInt(dwarf.address_size) + @backingInt(dwarf.address_size)],
29572957 );
29582958 }
29592959
......@@ -3015,7 +3015,7 @@ fn updateComptimeNavInner(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPoo
30153015 file.sub_file_path,
30163016 decl.src_line + 1,
30173017 decl.src_column + 1,
3018 @intFromEnum(inst_info.inst),
3018 @backingInt(inst_info.inst),
30193019 nav.fqn.fmt(ip),
30203020 });
30213021
......@@ -3248,7 +3248,7 @@ fn updateComptimeNavInner(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPoo
32483248 try wip_nav.refType(.fromInterned(func_type.param_types.get(ip)[param_index]));
32493249 }
32503250 if (func_type.is_var_args) try wip_nav.abbrevCode(.is_var_args);
3251 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3251 try diw.writeUleb128(@backingInt(AbbrevCode.null));
32523252 }
32533253 },
32543254 .func_alias => |owner_nav| {
......@@ -3305,7 +3305,7 @@ fn addConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, index: link.ConstPool.Index,
33053305 },
33063306 };
33073307
3308 assert(@intFromEnum(index) == dwarf.values.items.len);
3308 assert(@backingInt(index) == dwarf.values.items.len);
33093309 try dwarf.values.append(dwarf.gpa, .{ unit, entry });
33103310}
33113311/// Should only be called by the `link.ConstPool` implementation.
......@@ -3332,7 +3332,7 @@ fn updateConstIncompleteInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_inde
33323332 }),
33333333 }
33343334
3335 const unit, const entry = dwarf.values.items[@intFromEnum(debug_const_index)];
3335 const unit, const entry = dwarf.values.items[@backingInt(debug_const_index)];
33363336
33373337 for ([_]*Section{
33383338 &dwarf.debug_aranges.section,
......@@ -3501,7 +3501,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
35013501 }),
35023502 }
35033503
3504 const unit, const entry = dwarf.values.items[@intFromEnum(debug_const_index)];
3504 const unit, const entry = dwarf.values.items[@backingInt(debug_const_index)];
35053505
35063506 for ([_]*Section{
35073507 &dwarf.debug_aranges.section,
......@@ -3556,7 +3556,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
35563556 try wip_nav.strpFmt("{f}", .{val.toType().fmt(pt)});
35573557 if (ptr_type.sentinel != .none) try wip_nav.blockValue(.fromInterned(ptr_type.sentinel));
35583558 if (ptr_type.flags.alignment.toByteUnits()) |a| try diw.writeUleb128(a);
3559 try diw.writeByte(@intFromEnum(ptr_type.flags.address_space));
3559 try diw.writeByte(@backingInt(ptr_type.flags.address_space));
35603560 if (ptr_type.flags.is_const or ptr_type.flags.is_volatile) try wip_nav.infoSectionOffset(
35613561 .debug_info,
35623562 wip_nav.unit,
......@@ -3592,7 +3592,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
35923592 const len_field_type: Type = .usize;
35933593 try wip_nav.refType(len_field_type);
35943594 try diw.writeUleb128(len_field_type.abiAlignment(zcu).forward(ptr_field_type.abiSize(zcu)));
3595 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3595 try diw.writeUleb128(@backingInt(AbbrevCode.null));
35963596 },
35973597 },
35983598 .array_type => |array_type| {
......@@ -3604,7 +3604,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
36043604 try wip_nav.abbrevCode(.array_len);
36053605 try wip_nav.refType(.usize);
36063606 try diw.writeUleb128(array_type.len);
3607 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3607 try diw.writeUleb128(@backingInt(AbbrevCode.null));
36083608 },
36093609 .vector_type => |vector_type| {
36103610 try wip_nav.abbrevCode(.vector_type);
......@@ -3613,7 +3613,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
36133613 try wip_nav.abbrevCode(.array_len);
36143614 try wip_nav.refType(.usize);
36153615 try diw.writeUleb128(vector_type.len);
3616 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3616 try diw.writeUleb128(@backingInt(AbbrevCode.null));
36173617 },
36183618 .opt_type => |opt_child_type_index| {
36193619 const opt_child_type: Type = .fromInterned(opt_child_type_index);
......@@ -3671,7 +3671,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
36713671 try wip_nav.refType(.null);
36723672 try diw.writeUleb128(0);
36733673 }
3674 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3674 try diw.writeUleb128(@backingInt(AbbrevCode.null));
36753675
36763676 try wip_nav.abbrevCode(.tagged_union_default_field);
36773677 {
......@@ -3680,12 +3680,12 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
36803680 try wip_nav.refType(opt_child_type);
36813681 try diw.writeUleb128(0);
36823682 }
3683 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3683 try diw.writeUleb128(@backingInt(AbbrevCode.null));
36843684 }
3685 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3685 try diw.writeUleb128(@backingInt(AbbrevCode.null));
36863686 },
36873687 }
3688 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3688 try diw.writeUleb128(@backingInt(AbbrevCode.null));
36893689 },
36903690 .anyframe_type => unreachable,
36913691 .error_union_type => |error_union_type| {
......@@ -3736,7 +3736,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
37363736 try wip_nav.refType(error_union_payload_type);
37373737 try diw.writeUleb128(error_union_payload_offset);
37383738 }
3739 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3739 try diw.writeUleb128(@backingInt(AbbrevCode.null));
37403740
37413741 try wip_nav.abbrevCode(.tagged_union_default_field);
37423742 {
......@@ -3745,11 +3745,11 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
37453745 try wip_nav.refType(error_union_error_set_type);
37463746 try diw.writeUleb128(error_union_error_set_offset);
37473747 }
3748 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3748 try diw.writeUleb128(@backingInt(AbbrevCode.null));
37493749 }
3750 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3750 try diw.writeUleb128(@backingInt(AbbrevCode.null));
37513751 }
3752 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3752 try diw.writeUleb128(@backingInt(AbbrevCode.null));
37533753 },
37543754 .simple_type => |simple_type| switch (simple_type) {
37553755 .f16,
......@@ -3850,7 +3850,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
38503850 else if (has_runtime_bits)
38513851 try wip_nav.blockValue(.fromInterned(comptime_value));
38523852 }
3853 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3853 try diw.writeUleb128(@backingInt(AbbrevCode.null));
38543854 },
38553855 .struct_type => {
38563856 const loaded_struct = ip.loadStructType(value_index);
......@@ -3937,7 +3937,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
39373937 else if (has_runtime_bits)
39383938 try wip_nav.blockValue(.fromInterned(field_init));
39393939 }
3940 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3940 try diw.writeUleb128(@backingInt(AbbrevCode.null));
39413941 }
39423942 },
39433943 .@"packed" => {
......@@ -3968,7 +3968,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
39683968 try diw.writeUleb128(field_bit_offset);
39693969 field_bit_offset += @intCast(field_type.bitSize(zcu));
39703970 }
3971 if (need_terminator) try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
3971 if (need_terminator) try diw.writeUleb128(@backingInt(AbbrevCode.null));
39723972 },
39733973 }
39743974 },
......@@ -4024,10 +4024,10 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
40244024 try diw.writeUleb128(loaded_union.field_aligns.getOrNone(ip, field_index).toByteUnits() orelse
40254025 if (field_type.isNoReturn(zcu)) 1 else field_type.abiAlignment(zcu).toByteUnits().?);
40264026 }
4027 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4027 try diw.writeUleb128(@backingInt(AbbrevCode.null));
40284028 }
40294029 }
4030 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4030 try diw.writeUleb128(@backingInt(AbbrevCode.null));
40314031 } else for (0..loaded_union.field_types.len) |field_index| {
40324032 try wip_nav.abbrevCode(.field);
40334033 try wip_nav.strp(loaded_tag.field_names.get(ip)[field_index].toSlice(ip));
......@@ -4037,7 +4037,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
40374037 try diw.writeUleb128(loaded_union.field_aligns.getOrNone(ip, field_index).toByteUnits() orelse
40384038 if (field_type.isNoReturn(zcu)) 1 else field_type.abiAlignment(zcu).toByteUnits().?);
40394039 }
4040 if (need_terminator) try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4040 if (need_terminator) try diw.writeUleb128(@backingInt(AbbrevCode.null));
40414041 },
40424042 .@"packed" => {
40434043 const need_terminator: bool = if (loaded_union.name_nav.unwrap()) |nav_index| t: {
......@@ -4064,7 +4064,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
40644064 try wip_nav.refType(.fromInterned(loaded_union.field_types.get(ip)[field_index]));
40654065 try diw.writeUleb128(0);
40664066 }
4067 if (need_terminator) try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4067 if (need_terminator) try diw.writeUleb128(@backingInt(AbbrevCode.null));
40684068 },
40694069 }
40704070 },
......@@ -4098,7 +4098,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
40984098 try wip_nav.enumConstValue(loaded_enum, field_index);
40994099 try wip_nav.strp(loaded_enum.field_names.get(ip)[field_index].toSlice(ip));
41004100 }
4101 if (loaded_enum.field_names.len > 0) try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4101 if (loaded_enum.field_names.len > 0) try diw.writeUleb128(@backingInt(AbbrevCode.null));
41024102 } else {
41034103 assert(loaded_enum.owner_union != .none);
41044104 try wip_nav.abbrevCode(if (loaded_enum.field_names.len == 0) .generated_empty_enum_type else .generated_enum_type);
......@@ -4109,7 +4109,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
41094109 try wip_nav.enumConstValue(loaded_enum, field_index);
41104110 try wip_nav.strp(loaded_enum.field_names.get(ip)[field_index].toSlice(ip));
41114111 }
4112 if (loaded_enum.field_names.len > 0) try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4112 if (loaded_enum.field_names.len > 0) try diw.writeUleb128(@backingInt(AbbrevCode.null));
41134113 }
41144114 },
41154115 .opaque_type => {
......@@ -4204,7 +4204,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
42044204 else => .nocall,
42054205 };
42064206 };
4207 try diw.writeByte(@intFromEnum(cc));
4207 try diw.writeByte(@backingInt(cc));
42084208 try wip_nav.refType(.fromInterned(func_type.return_type));
42094209 if (!is_nullary) {
42104210 for (0..func_type.param_types.len) |param_index| {
......@@ -4212,7 +4212,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
42124212 try wip_nav.refType(.fromInterned(func_type.param_types.get(ip)[param_index]));
42134213 }
42144214 if (func_type.is_var_args) try wip_nav.abbrevCode(.is_var_args);
4215 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4215 try diw.writeUleb128(@backingInt(AbbrevCode.null));
42164216 }
42174217 },
42184218 .error_set_type => |error_set_type| {
......@@ -4229,7 +4229,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
42294229 try diw.writeUleb128(ip.getErrorValueIfExists(field_name).?);
42304230 try wip_nav.strp(field_name.toSlice(ip));
42314231 }
4232 if (error_set_type.names.len > 0) try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4232 if (error_set_type.names.len > 0) try diw.writeUleb128(@backingInt(AbbrevCode.null));
42334233 },
42344234 .inferred_error_set_type => |func| {
42354235 try wip_nav.abbrevCode(.inferred_error_set_type);
......@@ -4311,7 +4311,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
43114311 try diw.writeUleb128(err_bytes.len);
43124312 try diw.writeAll(err_bytes);
43134313 }
4314 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4314 try diw.writeUleb128(@backingInt(AbbrevCode.null));
43154315 },
43164316 .enum_literal => |enum_literal| {
43174317 try wip_nav.abbrevCode(.comptime_value);
......@@ -4459,7 +4459,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
44594459 try wip_nav.strp(field_name);
44604460 },
44614461 };
4462 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4462 try diw.writeUleb128(@backingInt(AbbrevCode.null));
44634463 }
44644464 },
44654465 .slice => |slice| {
......@@ -4475,7 +4475,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
44754475 try wip_nav.strp("len");
44764476 try wip_nav.blockValue(.fromInterned(slice.len));
44774477 }
4478 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4478 try diw.writeUleb128(@backingInt(AbbrevCode.null));
44794479 },
44804480 .opt => |opt| {
44814481 const opt_child_type: Type = .fromInterned(ip.indexToKey(opt.ty).opt_type);
......@@ -4505,7 +4505,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
45054505 else
45064506 try wip_nav.blockValue(.fromInterned(opt.val));
45074507 }
4508 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4508 try diw.writeUleb128(@backingInt(AbbrevCode.null));
45094509 },
45104510 .aggregate => |aggregate| {
45114511 try wip_nav.abbrevCode(.aggregate_undefined_comptime_value);
......@@ -4586,7 +4586,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
45864586 },
45874587 else => unreachable,
45884588 }
4589 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4589 try diw.writeUleb128(@backingInt(AbbrevCode.null));
45904590 },
45914591 .un => |un| {
45924592 try wip_nav.abbrevCode(.aggregate_undefined_comptime_value);
......@@ -4611,7 +4611,7 @@ fn updateConstInner(dwarf: *Dwarf, pt: Zcu.PerThread, debug_const_index: link.Co
46114611 else if (has_runtime_bits)
46124612 try wip_nav.blockValue(.fromInterned(un.val));
46134613 }
4614 try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4614 try diw.writeUleb128(@backingInt(AbbrevCode.null));
46154615 },
46164616 .memoized_call => unreachable, // not a value
46174617 }
......@@ -4644,7 +4644,7 @@ pub fn updateLineNumber(dwarf: *Dwarf, zcu: *Zcu, zir_index: InternPool.TrackedI
46444644 file.sub_file_path,
46454645 decl.src_line + 1,
46464646 decl.src_column + 1,
4647 @intFromEnum(inst_info.inst),
4647 @backingInt(inst_info.inst),
46484648 file.zir.?.nullTerminatedString(decl.name),
46494649 });
46504650
......@@ -4666,19 +4666,19 @@ fn refAbbrevCode(
46664666 abbrev_code: AbbrevCode,
46674667) (UpdateError || Writer.Error)!@typeInfo(AbbrevCode).@"enum".tag_type {
46684668 assert(abbrev_code != .null);
4669 const entry: Entry.Index = @enumFromInt(@intFromEnum(abbrev_code));
4670 if (dwarf.debug_abbrev.section.getUnit(DebugAbbrev.unit).getEntry(entry).len > 0) return @intFromEnum(abbrev_code);
4669 const entry: Entry.Index = @fromBackingInt(@intCast(@backingInt(abbrev_code)));
4670 if (dwarf.debug_abbrev.section.getUnit(DebugAbbrev.unit).getEntry(entry).len > 0) return @backingInt(abbrev_code);
46714671 var debug_abbrev_aw: Writer.Allocating = .init(dwarf.gpa);
46724672 defer debug_abbrev_aw.deinit();
46734673 const daw = &debug_abbrev_aw.writer;
46744674 const abbrev = AbbrevCode.abbrevs.get(abbrev_code);
4675 try daw.writeUleb128(@intFromEnum(abbrev_code));
4676 try daw.writeUleb128(@intFromEnum(abbrev.tag));
4675 try daw.writeUleb128(@backingInt(abbrev_code));
4676 try daw.writeUleb128(@backingInt(abbrev.tag));
46774677 try daw.writeByte(if (abbrev.children) DW.CHILDREN.yes else DW.CHILDREN.no);
4678 for (abbrev.attrs) |*attr| inline for (attr) |info| try daw.writeUleb128(@intFromEnum(info));
4678 for (abbrev.attrs) |*attr| inline for (attr) |info| try daw.writeUleb128(@backingInt(info));
46794679 for (0..2) |_| try daw.writeUleb128(0);
46804680 try dwarf.debug_abbrev.section.replaceEntry(DebugAbbrev.unit, entry, dwarf, debug_abbrev_aw.written());
4681 return @intFromEnum(abbrev_code);
4681 return @backingInt(abbrev_code);
46824682}
46834683
46844684pub fn flush(dwarf: *Dwarf, pt: Zcu.PerThread) UpdateError!void {
......@@ -4696,7 +4696,7 @@ fn flushWriterError(dwarf: *Dwarf, pt: Zcu.PerThread) (UpdateError || Writer.Err
46964696 // Update `anyerror` based on the finished global error set.
46974697 {
46984698 const index = try dwarf.const_pool.get(pt, .{ .dwarf = dwarf }, .anyerror_type);
4699 const unit, const entry = dwarf.values.items[@intFromEnum(index)];
4699 const unit, const entry = dwarf.values.items[@backingInt(index)];
47004700 var wip_nav: WipNav = .{
47014701 .dwarf = dwarf,
47024702 .pt = pt,
......@@ -4728,7 +4728,7 @@ fn flushWriterError(dwarf: *Dwarf, pt: Zcu.PerThread) (UpdateError || Writer.Err
47284728 try diw.writeUleb128(value);
47294729 try wip_nav.strp(name.toSlice(ip));
47304730 }
4731 if (global_error_set_names.len > 0) try diw.writeUleb128(@intFromEnum(AbbrevCode.null));
4731 if (global_error_set_names.len > 0) try diw.writeUleb128(@backingInt(AbbrevCode.null));
47324732 try dwarf.debug_info.section.replaceEntry(wip_nav.unit, wip_nav.entry, dwarf, wip_nav.debug_info.written());
47334733 try dwarf.const_pool.flushPending(pt, .{ .dwarf = dwarf });
47344734 }
......@@ -4744,7 +4744,7 @@ fn flushWriterError(dwarf: *Dwarf, pt: Zcu.PerThread) (UpdateError || Writer.Err
47444744 const hw = &header_aw.writer;
47454745 if (dwarf.debug_aranges.section.dirty) {
47464746 for (dwarf.debug_aranges.section.units.items, 0..) |*unit_ptr, unit_index| {
4747 const unit: Unit.Index = @enumFromInt(unit_index);
4747 const unit: Unit.Index = @fromBackingInt(@intCast(unit_index));
47484748 unit_ptr.clear();
47494749 try unit_ptr.cross_section_relocs.ensureTotalCapacity(dwarf.gpa, 1);
47504750 header_aw.clearRetainingCapacity();
......@@ -4767,7 +4767,7 @@ fn flushWriterError(dwarf: *Dwarf, pt: Zcu.PerThread) (UpdateError || Writer.Err
47674767 .target_unit = unit,
47684768 });
47694769 hw.splatByteAll(0, dwarf.sectionOffsetBytes()) catch unreachable;
4770 hw.writeByte(@intFromEnum(dwarf.address_size)) catch unreachable;
4770 hw.writeByte(@backingInt(dwarf.address_size)) catch unreachable;
47714771 hw.writeByte(0) catch unreachable;
47724772 hw.splatByteAll(0, unit_ptr.header_len - hw.end) catch unreachable;
47734773 try unit_ptr.replaceHeader(&dwarf.debug_aranges.section, dwarf, header_aw.written());
......@@ -4820,7 +4820,7 @@ fn flushWriterError(dwarf: *Dwarf, pt: Zcu.PerThread) (UpdateError || Writer.Err
48204820 }
48214821 if (dwarf.debug_info.section.dirty) {
48224822 for (dwarf.mods.keys(), dwarf.mods.values(), dwarf.debug_info.section.units.items, 0..) |mod, mod_info, *unit_ptr, unit_index| {
4823 const unit: Unit.Index = @enumFromInt(unit_index);
4823 const unit: Unit.Index = @fromBackingInt(@intCast(unit_index));
48244824 unit_ptr.clear();
48254825 try unit_ptr.cross_unit_relocs.ensureTotalCapacity(dwarf.gpa, 1);
48264826 try unit_ptr.cross_section_relocs.ensureTotalCapacity(dwarf.gpa, 7);
......@@ -4839,7 +4839,7 @@ fn flushWriterError(dwarf: *Dwarf, pt: Zcu.PerThread) (UpdateError || Writer.Err
48394839 }
48404840 hw.writeInt(u16, 5, dwarf.endian) catch unreachable;
48414841 hw.writeByte(DW.UT.compile) catch unreachable;
4842 hw.writeByte(@intFromEnum(dwarf.address_size)) catch unreachable;
4842 hw.writeByte(@backingInt(dwarf.address_size)) catch unreachable;
48434843 unit_ptr.cross_section_relocs.appendAssumeCapacity(.{
48444844 .source_off = @intCast(hw.end),
48454845 .target_sec = .debug_abbrev,
......@@ -4938,7 +4938,7 @@ fn flushWriterError(dwarf: *Dwarf, pt: Zcu.PerThread) (UpdateError || Writer.Err
49384938 },
49394939 }
49404940 hw.writeInt(u16, 5, dwarf.endian) catch unreachable;
4941 hw.writeByte(@intFromEnum(dwarf.address_size)) catch unreachable;
4941 hw.writeByte(@backingInt(dwarf.address_size)) catch unreachable;
49424942 hw.writeByte(0) catch unreachable;
49434943 switch (dwarf.format) {
49444944 .@"32" => hw.writeInt(u32, @intCast(unit.header_len - hw.end - 4), dwarf.endian) catch unreachable,
......@@ -4986,7 +4986,7 @@ fn flushWriterError(dwarf: *Dwarf, pt: Zcu.PerThread) (UpdateError || Writer.Err
49864986 hw.writeUleb128(DW.LNCT.path) catch unreachable;
49874987 hw.writeUleb128(DW.FORM.line_strp) catch unreachable;
49884988 hw.writeUleb128(DW.LNCT.directory_index) catch unreachable;
4989 hw.writeUleb128(@intFromEnum(dir_index_info.form)) catch unreachable;
4989 hw.writeUleb128(@backingInt(dir_index_info.form)) catch unreachable;
49904990 hw.writeUleb128(DW.LNCT.LLVM_source) catch unreachable;
49914991 hw.writeUleb128(DW.FORM.line_strp) catch unreachable;
49924992 hw.writeUleb128(mod_info.files.count()) catch unreachable;
......@@ -5046,7 +5046,7 @@ fn flushWriterError(dwarf: *Dwarf, pt: Zcu.PerThread) (UpdateError || Writer.Err
50465046 },
50475047 }
50485048 hw.writeInt(u16, 5, dwarf.endian) catch unreachable;
5049 hw.writeByte(@intFromEnum(dwarf.address_size)) catch unreachable;
5049 hw.writeByte(@backingInt(dwarf.address_size)) catch unreachable;
50505050 hw.writeByte(0) catch unreachable;
50515051 hw.writeInt(u32, 1, dwarf.endian) catch unreachable;
50525052 switch (dwarf.format) {
......@@ -5238,11 +5238,11 @@ const AbbrevCode = enum {
52385238 comptime_value_elem_runtime_bits,
52395239 comptime_value_elem_comptime_state,
52405240
5241 const decl_bytes = uleb128Bytes(@intFromEnum(AbbrevCode.decl_instance_extern_func));
5241 const decl_bytes = uleb128Bytes(@backingInt(AbbrevCode.decl_instance_extern_func));
52425242 comptime {
5243 assert(uleb128Bytes(@intFromEnum(AbbrevCode.pad_1)) == 1);
5244 assert(uleb128Bytes(@intFromEnum(AbbrevCode.pad_n)) == 1);
5245 assert(uleb128Bytes(@intFromEnum(AbbrevCode.decl_alias)) == decl_bytes);
5243 assert(uleb128Bytes(@backingInt(AbbrevCode.pad_1)) == 1);
5244 assert(uleb128Bytes(@backingInt(AbbrevCode.pad_n)) == 1);
5245 assert(uleb128Bytes(@backingInt(AbbrevCode.decl_alias)) == decl_bytes);
52465246 }
52475247
52485248 const Attr = struct {
src/link/Elf.zig+12-12
......@@ -135,12 +135,12 @@ const OptionalProgramHeaderIndex = enum(u16) {
135135
136136 fn unwrap(i: OptionalProgramHeaderIndex) ?ProgramHeaderIndex {
137137 if (i == .none) return null;
138 return @enumFromInt(@intFromEnum(i));
138 return @fromBackingInt(@intCast(@backingInt(i)));
139139 }
140140
141141 fn int(i: OptionalProgramHeaderIndex) ?u16 {
142142 if (i == .none) return null;
143 return @intFromEnum(i);
143 return @backingInt(i);
144144 }
145145};
146146
......@@ -148,13 +148,13 @@ const ProgramHeaderIndex = enum(u16) {
148148 _,
149149
150150 fn toOptional(i: ProgramHeaderIndex) OptionalProgramHeaderIndex {
151 const result: OptionalProgramHeaderIndex = @enumFromInt(@intFromEnum(i));
151 const result: OptionalProgramHeaderIndex = @fromBackingInt(@intCast(@backingInt(i)));
152152 assert(result != .none);
153153 return result;
154154 }
155155
156156 fn int(i: ProgramHeaderIndex) u16 {
157 return @intFromEnum(i);
157 return @backingInt(i);
158158 }
159159};
160160
......@@ -1531,7 +1531,7 @@ pub fn writeElfHeader(self: *Elf) !void {
15311531 hdr_buf[index] = 1; // ELF version
15321532 index += 1;
15331533
1534 hdr_buf[index] = @intFromEnum(@as(elf.OSABI, switch (target.cpu.arch) {
1534 hdr_buf[index] = @backingInt(@as(elf.OSABI, switch (target.cpu.arch) {
15351535 .amdgcn => switch (target.os.tag) {
15361536 .amdhsa => .AMDGPU_HSA,
15371537 .amdpal => .AMDGPU_PAL,
......@@ -1566,11 +1566,11 @@ pub fn writeElfHeader(self: *Elf) !void {
15661566 .dynamic => .DYN,
15671567 },
15681568 };
1569 mem.writeInt(u16, hdr_buf[index..][0..2], @intFromEnum(elf_type), endian);
1569 mem.writeInt(u16, hdr_buf[index..][0..2], @backingInt(elf_type), endian);
15701570 index += 2;
15711571
15721572 const machine = target.toElfMachine();
1573 mem.writeInt(u16, hdr_buf[index..][0..2], @intFromEnum(machine), endian);
1573 mem.writeInt(u16, hdr_buf[index..][0..2], @backingInt(machine), endian);
15741574 index += 2;
15751575
15761576 // ELF Version, again
......@@ -2314,13 +2314,13 @@ fn sortPhdrs(
23142314
23152315 inline for (@typeInfo(ProgramHeaderIndexes).@"struct".field_names) |field_name| {
23162316 if (@field(special_indexes, field_name).int()) |special_index| {
2317 @field(special_indexes, field_name) = @enumFromInt(backlinks[special_index]);
2317 @field(special_indexes, field_name) = @fromBackingInt(@intCast(backlinks[special_index]));
23182318 }
23192319 }
23202320
23212321 for (section_indexes) |*opt_phndx| {
23222322 if (opt_phndx.int()) |index| {
2323 opt_phndx.* = @enumFromInt(backlinks[index]);
2323 opt_phndx.* = @fromBackingInt(@intCast(backlinks[index]));
23242324 }
23252325 }
23262326}
......@@ -3398,7 +3398,7 @@ fn getPhdr(self: *Elf, opts: struct {
33983398 if (phndx == index) continue;
33993399 }
34003400 if (phdr.p_type == opts.type and phdr.p_flags == opts.flags)
3401 return @enumFromInt(phndx);
3401 return @fromBackingInt(@intCast(phndx));
34023402 }
34033403 return .none;
34043404}
......@@ -3413,7 +3413,7 @@ fn addPhdr(self: *Elf, opts: struct {
34133413 memsz: u64 = 0,
34143414}) error{OutOfMemory}!ProgramHeaderIndex {
34153415 const gpa = self.base.comp.gpa;
3416 const index: ProgramHeaderIndex = @enumFromInt(self.phdrs.items.len);
3416 const index: ProgramHeaderIndex = @fromBackingInt(@intCast(self.phdrs.items.len));
34173417 try self.phdrs.append(gpa, .{
34183418 .p_type = opts.type,
34193419 .p_flags = opts.flags,
......@@ -4345,7 +4345,7 @@ fn createThunks(elf_file: *Elf, atom_list: *AtomList) !void {
43454345 for (atom_ptr.relocs(elf_file)) |rel| {
43464346 const is_reachable = switch (cpu_arch) {
43474347 .aarch64, .aarch64_be => r: {
4348 const r_type: elf.R_AARCH64 = @enumFromInt(rel.r_type());
4348 const r_type: elf.R_AARCH64 = @fromBackingInt(@intCast(rel.r_type()));
43494349 if (r_type != .CALL26 and r_type != .JUMP26) break :r true;
43504350 const target_ref = file_ptr.resolveSymbol(rel.r_sym(), elf_file);
43514351 const target = elf_file.symbol(target_ref).?;
src/link/Elf/Atom.zig+14-14
......@@ -288,7 +288,7 @@ pub fn scanRelocsRequiresCode(self: Atom, elf_file: *Elf) bool {
288288 for (self.relocs(elf_file)) |rel| {
289289 switch (cpu_arch) {
290290 .x86_64 => {
291 const r_type: elf.R_X86_64 = @enumFromInt(rel.r_type());
291 const r_type: elf.R_X86_64 = @fromBackingInt(@intCast(rel.r_type()));
292292 if (r_type == .GOTTPOFF) return true;
293293 },
294294 else => {},
......@@ -950,7 +950,7 @@ const x86_64 = struct {
950950 const is_static = elf_file.base.isStatic();
951951 const is_dyn_lib = elf_file.isEffectivelyDynLib();
952952
953 const r_type: elf.R_X86_64 = @enumFromInt(rel.r_type());
953 const r_type: elf.R_X86_64 = @fromBackingInt(@intCast(rel.r_type()));
954954 const r_offset = std.math.cast(usize, rel.r_offset) orelse return error.Overflow;
955955
956956 switch (r_type) {
......@@ -1062,7 +1062,7 @@ const x86_64 = struct {
10621062 dev.check(.x86_64_backend);
10631063 const t = &elf_file.base.comp.root_mod.resolved_target.result;
10641064 const diags = &elf_file.base.comp.link_diags;
1065 const r_type: elf.R_X86_64 = @enumFromInt(rel.r_type());
1065 const r_type: elf.R_X86_64 = @fromBackingInt(@intCast(rel.r_type()));
10661066 const r_offset = std.math.cast(usize, rel.r_offset) orelse return error.Overflow;
10671067
10681068 const P, const A, const S, const GOT, const G, const TP, const DTP = args;
......@@ -1201,7 +1201,7 @@ const x86_64 = struct {
12011201 code: []u8,
12021202 ) !void {
12031203 dev.check(.x86_64_backend);
1204 const r_type: elf.R_X86_64 = @enumFromInt(rel.r_type());
1204 const r_type: elf.R_X86_64 = @fromBackingInt(@intCast(rel.r_type()));
12051205
12061206 _, const A, const S, const GOT, _, _, const DTP = args;
12071207
......@@ -1282,7 +1282,7 @@ const x86_64 = struct {
12821282 dev.check(.x86_64_backend);
12831283 assert(rels.len == 2);
12841284 const diags = &elf_file.base.comp.link_diags;
1285 const rel: elf.R_X86_64 = @enumFromInt(rels[1].r_type());
1285 const rel: elf.R_X86_64 = @fromBackingInt(@intCast(rels[1].r_type()));
12861286 switch (rel) {
12871287 .PC32,
12881288 .PLT32,
......@@ -1322,7 +1322,7 @@ const x86_64 = struct {
13221322 dev.check(.x86_64_backend);
13231323 assert(rels.len == 2);
13241324 const diags = &elf_file.base.comp.link_diags;
1325 const rel: elf.R_X86_64 = @enumFromInt(rels[1].r_type());
1325 const rel: elf.R_X86_64 = @fromBackingInt(@intCast(rels[1].r_type()));
13261326 switch (rel) {
13271327 .PC32,
13281328 .PLT32,
......@@ -1428,7 +1428,7 @@ const x86_64 = struct {
14281428 dev.check(.x86_64_backend);
14291429 assert(rels.len == 2);
14301430 const diags = &elf_file.base.comp.link_diags;
1431 const rel: elf.R_X86_64 = @enumFromInt(rels[1].r_type());
1431 const rel: elf.R_X86_64 = @fromBackingInt(@intCast(rels[1].r_type()));
14321432 switch (rel) {
14331433 .PC32,
14341434 .PLT32,
......@@ -1493,7 +1493,7 @@ const aarch64 = struct {
14931493 _ = code;
14941494 _ = it;
14951495
1496 const r_type: elf.R_AARCH64 = @enumFromInt(rel.r_type());
1496 const r_type: elf.R_AARCH64 = @fromBackingInt(@intCast(rel.r_type()));
14971497 const is_dyn_lib = elf_file.isEffectivelyDynLib();
14981498
14991499 switch (r_type) {
......@@ -1571,7 +1571,7 @@ const aarch64 = struct {
15711571 _ = it;
15721572
15731573 const diags = &elf_file.base.comp.link_diags;
1574 const r_type: elf.R_AARCH64 = @enumFromInt(rel.r_type());
1574 const r_type: elf.R_AARCH64 = @fromBackingInt(@intCast(rel.r_type()));
15751575 const r_offset = std.math.cast(usize, rel.r_offset) orelse return error.Overflow;
15761576 const code = code_buffer[r_offset..][0..4];
15771577 const file_ptr = atom.file(elf_file).?;
......@@ -1742,7 +1742,7 @@ const aarch64 = struct {
17421742 args: ResolveArgs,
17431743 code: []u8,
17441744 ) !void {
1745 const r_type: elf.R_AARCH64 = @enumFromInt(rel.r_type());
1745 const r_type: elf.R_AARCH64 = @fromBackingInt(@intCast(rel.r_type()));
17461746
17471747 _, const A, const S, _, _, _, _ = args;
17481748
......@@ -1773,7 +1773,7 @@ const riscv = struct {
17731773 _ = code;
17741774 _ = it;
17751775
1776 const r_type: elf.R_RISCV = @enumFromInt(rel.r_type());
1776 const r_type: elf.R_RISCV = @fromBackingInt(@intCast(rel.r_type()));
17771777
17781778 switch (r_type) {
17791779 .@"32" => try atom.scanReloc(symbol, rel, absRelocAction(symbol, elf_file), elf_file),
......@@ -1816,7 +1816,7 @@ const riscv = struct {
18161816 code: []u8,
18171817 ) !void {
18181818 const diags = &elf_file.base.comp.link_diags;
1819 const r_type: elf.R_RISCV = @enumFromInt(rel.r_type());
1819 const r_type: elf.R_RISCV = @fromBackingInt(@intCast(rel.r_type()));
18201820 const r_offset = std.math.cast(usize, rel.r_offset) orelse return error.Overflow;
18211821
18221822 const P, const A, const S, const GOT, const G, const TP, const DTP = args;
......@@ -1893,7 +1893,7 @@ const riscv = struct {
18931893 const A_ = pair.r_addend;
18941894 const P_ = atom_addr + @as(i64, @intCast(pair.r_offset));
18951895 const G_ = target_.gotAddress(elf_file) - GOT;
1896 const disp = switch (@as(elf.R_RISCV, @enumFromInt(pair.r_type()))) {
1896 const disp = switch (@as(elf.R_RISCV, @fromBackingInt(@intCast(pair.r_type())))) {
18971897 .PCREL_HI20 => math.cast(i32, S_ + A_ - P_) orelse return error.Overflow,
18981898 .GOT_HI20 => math.cast(i32, G_ + GOT + A_ - P_) orelse return error.Overflow,
18991899 else => unreachable,
......@@ -1951,7 +1951,7 @@ const riscv = struct {
19511951 args: ResolveArgs,
19521952 code: []u8,
19531953 ) !void {
1954 const r_type: elf.R_RISCV = @enumFromInt(rel.r_type());
1954 const r_type: elf.R_RISCV = @fromBackingInt(@intCast(rel.r_type()));
19551955
19561956 _, const A, const S, const GOT, _, _, const DTP = args;
19571957 _ = GOT;
src/link/Elf/LinkerDefined.zig+1-1
......@@ -48,7 +48,7 @@ fn newSymbolAssumeCapacity(self: *LinkerDefined, name_off: u32, elf_file: *Elf)
4848 esym.* = .{
4949 .st_name = name_off,
5050 .st_info = @as(u8, elf.STB_WEAK) << 4,
51 .st_other = @intFromEnum(elf.STV.HIDDEN),
51 .st_other = @backingInt(elf.STV.HIDDEN),
5252 .st_shndx = elf.SHN_ABS,
5353 .st_value = 0,
5454 .st_size = 0,
src/link/Elf/Object.zig+2-2
......@@ -665,7 +665,7 @@ pub fn claimUnresolved(self: *Object, elf_file: *Elf) void {
665665
666666 const is_import = blk: {
667667 if (!elf_file.isEffectivelyDynLib()) break :blk false;
668 const vis: elf.STV = @enumFromInt(@as(u3, @truncate(esym.st_other)));
668 const vis: elf.STV = @fromBackingInt(@intCast(@as(u3, @truncate(esym.st_other))));
669669 if (vis == .HIDDEN) break :blk false;
670670 break :blk true;
671671 };
......@@ -737,7 +737,7 @@ pub fn markImportsExports(self: *Object, elf_file: *Elf) void {
737737 const sym = elf_file.symbol(ref) orelse continue;
738738 const file = sym.file(elf_file).?;
739739 if (sym.version_index == elf.Versym.LOCAL) continue;
740 const vis: elf.STV = @enumFromInt(@as(u3, @truncate(sym.elfSym(elf_file).st_other)));
740 const vis: elf.STV = @fromBackingInt(@intCast(@as(u3, @truncate(sym.elfSym(elf_file).st_other))));
741741 if (vis == .HIDDEN) continue;
742742 if (file == .shared_object and !sym.isAbs(elf_file)) {
743743 sym.flags.import = true;
src/link/Elf/SharedObject.zig+4-4
......@@ -238,11 +238,11 @@ pub fn parse(
238238 const verdef = mem.bytesAsValue(elf.Verdef, verdefs[offset..][0..@sizeOf(elf.Verdef)]);
239239 if (verdef.ndx == .UNSPECIFIED) return error.VerDefSymbolTooLarge;
240240
241 if (verstrings.items.len <= @intFromEnum(verdef.ndx))
242 try verstrings.appendNTimes(gpa, 0, @intFromEnum(verdef.ndx) + 1 - verstrings.items.len);
241 if (verstrings.items.len <= @backingInt(verdef.ndx))
242 try verstrings.appendNTimes(gpa, 0, @backingInt(verdef.ndx) + 1 - verstrings.items.len);
243243
244244 const aux = mem.bytesAsValue(elf.Verdaux, verdefs[offset + verdef.aux ..][0..@sizeOf(elf.Verdaux)]);
245 verstrings.items[@intFromEnum(verdef.ndx)] = aux.name;
245 verstrings.items[@backingInt(verdef.ndx)] = aux.name;
246246
247247 if (verdef.next == 0) break;
248248 offset += verdef.next;
......@@ -380,7 +380,7 @@ pub fn markImportExports(self: *SharedObject, elf_file: *Elf) void {
380380 const ref = self.resolveSymbol(@intCast(i), elf_file);
381381 const ref_sym = elf_file.symbol(ref) orelse continue;
382382 const ref_file = ref_sym.file(elf_file).?;
383 const vis: elf.STV = @enumFromInt(@as(u3, @truncate(ref_sym.elfSym(elf_file).st_other)));
383 const vis: elf.STV = @fromBackingInt(@intCast(@as(u3, @truncate(ref_sym.elfSym(elf_file).st_other))));
384384 if (ref_file != .shared_object and vis != .HIDDEN) ref_sym.flags.@"export" = true;
385385 }
386386}
src/link/Elf/Symbol.zig+2-2
......@@ -310,7 +310,7 @@ pub fn setOutputSym(symbol: Symbol, elf_file: *Elf, out: *elf.Elf64_Sym) void {
310310 break :blk symbol.address(.{ .plt = false, .trampoline = false }, elf_file);
311311 };
312312 const st_other = blk: {
313 const vis = @as(elf.STV, @enumFromInt(@as(u3, @truncate(esym.st_other))));
313 const vis = @as(elf.STV, @fromBackingInt(@intCast(@as(u3, @truncate(esym.st_other)))));
314314 if (file_ptr != .shared_object or vis != elf.STV.PROTECTED) break :blk esym.st_other;
315315 // Reset protected visibility to default for symbols originating in shared objects
316316 break :blk esym.st_other & 0b11111000;
......@@ -332,7 +332,7 @@ const Format = struct {
332332 const symbol = f.symbol;
333333 try writer.writeAll(symbol.name(elf_file));
334334 switch (symbol.version_index.VERSION) {
335 @intFromEnum(elf.VER_NDX.LOCAL), @intFromEnum(elf.VER_NDX.GLOBAL) => {},
335 @backingInt(elf.VER_NDX.LOCAL), @backingInt(elf.VER_NDX.GLOBAL) => {},
336336 else => {
337337 const file_ptr = symbol.file(elf_file).?;
338338 assert(file_ptr == .shared_object);
src/link/Elf/ZigObject.zig+19-19
......@@ -458,14 +458,14 @@ pub fn flush(self: *ZigObject, elf_file: *Elf, tid: Zcu.PerThread.Id) !void {
458458 }, self);
459459 }
460460 for (entry.external_relocs.items) |reloc| {
461 const target_sym = self.symbol(@intFromEnum(reloc.target_sym));
461 const target_sym = self.symbol(@backingInt(reloc.target_sym));
462462 const r_offset = entry_off + reloc.source_off;
463463 const r_addend: i64 = @intCast(reloc.target_off);
464464 const r_type = relocation.dwarf.externalRelocType(target_sym.*, sect_index, dwarf.address_size, cpu_arch);
465465 atom_ptr.addRelocAssumeCapacity(.{
466466 .r_offset = r_offset,
467467 .r_addend = r_addend,
468 .r_info = (@as(u64, @intCast(@intFromEnum(reloc.target_sym))) << 32) | r_type,
468 .r_info = (@as(u64, @intCast(@backingInt(reloc.target_sym))) << 32) | r_type,
469469 }, self);
470470 }
471471 }
......@@ -614,7 +614,7 @@ pub fn claimUnresolved(self: *ZigObject, elf_file: *Elf) void {
614614
615615 const is_import = blk: {
616616 if (!elf_file.isEffectivelyDynLib()) break :blk false;
617 const vis: elf.STV = @enumFromInt(@as(u3, @truncate(esym.st_other)));
617 const vis: elf.STV = @fromBackingInt(@intCast(@as(u3, @truncate(esym.st_other))));
618618 if (vis == .HIDDEN) break :blk false;
619619 break :blk true;
620620 };
......@@ -691,7 +691,7 @@ pub fn markImportsExports(self: *ZigObject, elf_file: *Elf) void {
691691 const sym = elf_file.symbol(ref) orelse continue;
692692 const file = sym.file(elf_file).?;
693693 if (sym.version_index == elf.Versym.LOCAL) continue;
694 const vis: elf.STV = @enumFromInt(@as(u3, @truncate(sym.elfSym(elf_file).st_other)));
694 const vis: elf.STV = @fromBackingInt(@intCast(@as(u3, @truncate(sym.elfSym(elf_file).st_other))));
695695 if (vis == .HIDDEN) continue;
696696 if (file == .shared_object and !sym.isAbs(elf_file)) {
697697 sym.flags.import = true;
......@@ -938,7 +938,7 @@ pub fn getNavVAddr(
938938 switch (reloc_info.parent) {
939939 .none => unreachable,
940940 .atom_index => |atom_index| {
941 const parent_atom = self.symbol(@intFromEnum(atom_index)).atom(elf_file).?;
941 const parent_atom = self.symbol(@backingInt(atom_index)).atom(elf_file).?;
942942 const r_type = relocation.encode(.abs, elf_file.getTarget().cpu.arch);
943943 try parent_atom.addReloc(elf_file.base.comp.gpa, .{
944944 .r_offset = reloc_info.offset,
......@@ -949,7 +949,7 @@ pub fn getNavVAddr(
949949 .debug_output => |debug_output| switch (debug_output) {
950950 .dwarf => |wip_nav| try wip_nav.infoExternalReloc(.{
951951 .source_off = @intCast(reloc_info.offset),
952 .target_sym = @enumFromInt(this_sym_index),
952 .target_sym = @fromBackingInt(@intCast(this_sym_index)),
953953 .target_off = reloc_info.addend,
954954 }),
955955 .none => unreachable,
......@@ -970,7 +970,7 @@ pub fn getUavVAddr(
970970 switch (reloc_info.parent) {
971971 .none => unreachable,
972972 .atom_index => |atom_index| {
973 const parent_atom = self.symbol(@intFromEnum(atom_index)).atom(elf_file).?;
973 const parent_atom = self.symbol(@backingInt(atom_index)).atom(elf_file).?;
974974 const r_type = relocation.encode(.abs, elf_file.getTarget().cpu.arch);
975975 try parent_atom.addReloc(elf_file.base.comp.gpa, .{
976976 .r_offset = reloc_info.offset,
......@@ -981,7 +981,7 @@ pub fn getUavVAddr(
981981 .debug_output => |debug_output| switch (debug_output) {
982982 .dwarf => |wip_nav| try wip_nav.infoExternalReloc(.{
983983 .source_off = @intCast(reloc_info.offset),
984 .target_sym = @enumFromInt(sym_index),
984 .target_sym = @fromBackingInt(@intCast(sym_index)),
985985 .target_off = reloc_info.addend,
986986 }),
987987 .none => unreachable,
......@@ -1009,7 +1009,7 @@ pub fn lowerUav(
10091009 const sym = self.symbol(metadata.symbol_index);
10101010 const existing_alignment = sym.atom(elf_file).?.alignment;
10111011 if (uav_alignment.order(existing_alignment).compare(.lte))
1012 return @enumFromInt(metadata.symbol_index);
1012 return @fromBackingInt(@intCast(metadata.symbol_index));
10131013 }
10141014
10151015 const osec = if (self.data_relro_index) |sym_index|
......@@ -1027,7 +1027,7 @@ pub fn lowerUav(
10271027
10281028 var name_buf: [32]u8 = undefined;
10291029 const name = std.fmt.bufPrint(&name_buf, "__anon_{d}", .{
1030 @intFromEnum(uav),
1030 @backingInt(uav),
10311031 }) catch unreachable;
10321032 const sym_index = self.lowerConst(
10331033 elf_file,
......@@ -1044,7 +1044,7 @@ pub fn lowerUav(
10441044 ),
10451045 };
10461046 try self.uavs.put(gpa, uav, .{
1047 .symbol_index = @intFromEnum(sym_index),
1047 .symbol_index = @backingInt(sym_index),
10481048 .allocated = true,
10491049 });
10501050 return sym_index;
......@@ -1541,7 +1541,7 @@ pub fn updateFunc(
15411541 var debug_wip_nav = if (self.dwarf) |*dwarf| try dwarf.initWipNav(
15421542 pt,
15431543 func.owner_nav,
1544 @enumFromInt(sym_index),
1544 @fromBackingInt(@intCast(sym_index)),
15451545 ) else null;
15461546 defer if (debug_wip_nav) |*wip_nav| wip_nav.deinit();
15471547
......@@ -1549,7 +1549,7 @@ pub fn updateFunc(
15491549 &elf_file.base,
15501550 pt,
15511551 func_index,
1552 @enumFromInt(sym_index),
1552 @fromBackingInt(@intCast(sym_index)),
15531553 mir,
15541554 &aw.writer,
15551555 if (debug_wip_nav) |*dn| .{ .dwarf = dn } else .none,
......@@ -1656,7 +1656,7 @@ pub fn updateNav(
16561656 self.symbol(sym_index).flags.is_tls = true;
16571657 }
16581658 if (self.dwarf) |*dwarf| {
1659 var debug_wip_nav = try dwarf.initWipNav(pt, nav_index, @enumFromInt(sym_index));
1659 var debug_wip_nav = try dwarf.initWipNav(pt, nav_index, @fromBackingInt(@intCast(sym_index)));
16601660 defer debug_wip_nav.deinit();
16611661 dwarf.finishWipNav(pt, nav_index, &debug_wip_nav) catch |err| switch (err) {
16621662 error.OutOfMemory, error.Canceled, error.AlreadyReported => |e| return e,
......@@ -1674,7 +1674,7 @@ pub fn updateNav(
16741674 var aw: std.Io.Writer.Allocating = .init(zcu.gpa);
16751675 defer aw.deinit();
16761676
1677 var debug_wip_nav = if (self.dwarf) |*dwarf| try dwarf.initWipNav(pt, nav_index, @enumFromInt(sym_index)) else null;
1677 var debug_wip_nav = if (self.dwarf) |*dwarf| try dwarf.initWipNav(pt, nav_index, @fromBackingInt(@intCast(sym_index))) else null;
16781678 defer if (debug_wip_nav) |*wip_nav| wip_nav.deinit();
16791679
16801680 codegen.generateSymbol(
......@@ -1682,7 +1682,7 @@ pub fn updateNav(
16821682 pt,
16831683 .fromInterned(nav.resolved.?.value),
16841684 &aw.writer,
1685 .{ .atom_index = @enumFromInt(sym_index) },
1685 .{ .atom_index = @fromBackingInt(@intCast(sym_index)) },
16861686 ) catch |err| switch (err) {
16871687 error.WriteFailed => return error.OutOfMemory,
16881688 else => |e| return e,
......@@ -1751,7 +1751,7 @@ fn updateLazySymbol(
17511751 &required_alignment,
17521752 &aw.writer,
17531753 .none,
1754 .{ .atom_index = @enumFromInt(symbol_index) },
1754 .{ .atom_index = @fromBackingInt(@intCast(symbol_index)) },
17551755 ) catch |err| switch (err) {
17561756 error.WriteFailed => return error.OutOfMemory,
17571757 else => |e| return e,
......@@ -1828,7 +1828,7 @@ fn lowerConst(
18281828 pt,
18291829 val,
18301830 &aw.writer,
1831 .{ .atom_index = @enumFromInt(sym_index) },
1831 .{ .atom_index = @fromBackingInt(@intCast(sym_index)) },
18321832 ) catch |err| switch (err) {
18331833 error.WriteFailed => return error.OutOfMemory,
18341834 else => |e| return e,
......@@ -1850,7 +1850,7 @@ fn lowerConst(
18501850
18511851 try elf_file.pwriteAll(code, atom_ptr.offset(elf_file));
18521852
1853 return @enumFromInt(sym_index);
1853 return @fromBackingInt(@intCast(sym_index));
18541854}
18551855
18561856pub fn updateExports(
src/link/Elf/eh_frame.zig+3-3
......@@ -535,7 +535,7 @@ pub fn writeEhFrameHdr(elf_file: *Elf, writer: anytype) !void {
535535
536536const x86_64 = struct {
537537 fn resolveReloc(rec: anytype, elf_file: *Elf, rel: elf.Elf64_Rela, source: i64, target: i64, data: []u8) !void {
538 const r_type: elf.R_X86_64 = @enumFromInt(rel.r_type());
538 const r_type: elf.R_X86_64 = @fromBackingInt(@intCast(rel.r_type()));
539539 switch (r_type) {
540540 .NONE => {},
541541 .@"32" => std.mem.writeInt(i32, data[0..4], @as(i32, @truncate(target)), .little),
......@@ -549,7 +549,7 @@ const x86_64 = struct {
549549
550550const aarch64 = struct {
551551 fn resolveReloc(rec: anytype, elf_file: *Elf, rel: elf.Elf64_Rela, source: i64, target: i64, data: []u8) !void {
552 const r_type: elf.R_AARCH64 = @enumFromInt(rel.r_type());
552 const r_type: elf.R_AARCH64 = @fromBackingInt(@intCast(rel.r_type()));
553553 switch (r_type) {
554554 .NONE => {},
555555 .ABS64 => std.mem.writeInt(i64, data[0..8], target, .little),
......@@ -562,7 +562,7 @@ const aarch64 = struct {
562562
563563const riscv = struct {
564564 fn resolveReloc(rec: anytype, elf_file: *Elf, rel: elf.Elf64_Rela, source: i64, target: i64, data: []u8) !void {
565 const r_type: elf.R_RISCV = @enumFromInt(rel.r_type());
565 const r_type: elf.R_RISCV = @fromBackingInt(@intCast(rel.r_type()));
566566 switch (r_type) {
567567 .NONE => {},
568568 .@"32_PCREL" => std.mem.writeInt(i32, data[0..4], @as(i32, @intCast(target - source)), .little),
src/link/Elf/relocation.zig+11-11
......@@ -17,14 +17,14 @@ fn Table(comptime len: comptime_int, comptime RelType: type, comptime mapping: [
1717 return struct {
1818 fn decode(r_type: u32) Kind {
1919 inline for (mapping) |entry| {
20 if (@intFromEnum(entry[1]) == r_type) return entry[0];
20 if (@backingInt(entry[1]) == r_type) return entry[0];
2121 }
2222 return .other;
2323 }
2424
2525 fn encode(comptime kind: Kind) u32 {
2626 inline for (mapping) |entry| {
27 if (entry[0] == kind) return @intFromEnum(entry[1]);
27 if (entry[0] == kind) return @backingInt(entry[1]);
2828 }
2929 @panic("encoding .other is ambiguous");
3030 }
......@@ -94,15 +94,15 @@ pub fn encode(comptime kind: Kind, cpu_arch: std.Target.Cpu.Arch) u32 {
9494pub const dwarf = struct {
9595 pub fn crossSectionRelocType(format: DW.Format, cpu_arch: std.Target.Cpu.Arch) u32 {
9696 return switch (cpu_arch) {
97 .x86_64 => @intFromEnum(@as(elf.R_X86_64, switch (format) {
97 .x86_64 => @backingInt(@as(elf.R_X86_64, switch (format) {
9898 .@"32" => .@"32",
9999 .@"64" => .@"64",
100100 })),
101 .aarch64, .aarch64_be => @intFromEnum(@as(elf.R_AARCH64, switch (format) {
101 .aarch64, .aarch64_be => @backingInt(@as(elf.R_AARCH64, switch (format) {
102102 .@"32" => .ABS32,
103103 .@"64" => .ABS64,
104104 })),
105 .riscv64, .riscv64be => @intFromEnum(@as(elf.R_RISCV, switch (format) {
105 .riscv64, .riscv64be => @backingInt(@as(elf.R_RISCV, switch (format) {
106106 .@"32" => .@"32",
107107 .@"64" => .@"64",
108108 })),
......@@ -117,7 +117,7 @@ pub const dwarf = struct {
117117 cpu_arch: std.Target.Cpu.Arch,
118118 ) u32 {
119119 return switch (cpu_arch) {
120 .x86_64 => @intFromEnum(@as(elf.R_X86_64, switch (source_section) {
120 .x86_64 => @backingInt(@as(elf.R_X86_64, switch (source_section) {
121121 else => switch (address_size) {
122122 .@"32" => if (target.flags.is_tls) .DTPOFF32 else .@"32",
123123 .@"64" => if (target.flags.is_tls) .DTPOFF64 else .@"64",
......@@ -125,7 +125,7 @@ pub const dwarf = struct {
125125 },
126126 .debug_frame => .PC32,
127127 })),
128 .aarch64, .aarch64_be => @intFromEnum(@as(elf.R_AARCH64, switch (source_section) {
128 .aarch64, .aarch64_be => @backingInt(@as(elf.R_AARCH64, switch (source_section) {
129129 else => switch (address_size) {
130130 .@"32" => .ABS32,
131131 .@"64" => .ABS64,
......@@ -133,7 +133,7 @@ pub const dwarf = struct {
133133 },
134134 .debug_frame => .PREL32,
135135 })),
136 .riscv64, .riscv64be => @intFromEnum(@as(elf.R_RISCV, switch (source_section) {
136 .riscv64, .riscv64be => @backingInt(@as(elf.R_RISCV, switch (source_section) {
137137 else => switch (address_size) {
138138 .@"32" => .@"32",
139139 .@"64" => .@"64",
......@@ -163,9 +163,9 @@ pub fn fmtRelocType(r_type: u32, cpu_arch: std.Target.Cpu.Arch) std.fmt.Alt(Form
163163fn formatRelocType(ctx: FormatRelocTypeCtx, writer: *std.Io.Writer) std.Io.Writer.Error!void {
164164 const r_type = ctx.r_type;
165165 switch (ctx.cpu_arch) {
166 .x86_64 => try writer.print("R_X86_64_{s}", .{@tagName(@as(elf.R_X86_64, @enumFromInt(r_type)))}),
167 .aarch64, .aarch64_be => try writer.print("R_AARCH64_{s}", .{@tagName(@as(elf.R_AARCH64, @enumFromInt(r_type)))}),
168 .riscv64, .riscv64be => try writer.print("R_RISCV_{s}", .{@tagName(@as(elf.R_RISCV, @enumFromInt(r_type)))}),
166 .x86_64 => try writer.print("R_X86_64_{s}", .{@tagName(@as(elf.R_X86_64, @fromBackingInt(@intCast(r_type))))}),
167 .aarch64, .aarch64_be => try writer.print("R_AARCH64_{s}", .{@tagName(@as(elf.R_AARCH64, @fromBackingInt(@intCast(r_type))))}),
168 .riscv64, .riscv64be => try writer.print("R_RISCV_{s}", .{@tagName(@as(elf.R_RISCV, @fromBackingInt(@intCast(r_type))))}),
169169 else => unreachable,
170170 }
171171}
src/link/Elf2.zig+172-172
......@@ -212,26 +212,26 @@ const Node = union(enum) {
212212 _,
213213
214214 pub fn path(ii: InputIndex, elf: *const Elf) std.Build.Cache.Path {
215 return elf.inputs.items[@intFromEnum(ii)].path;
215 return elf.inputs.items[@backingInt(ii)].path;
216216 }
217217
218218 pub fn member(ii: InputIndex, elf: *const Elf) ?[]const u8 {
219 return elf.inputs.items[@intFromEnum(ii)].member;
219 return elf.inputs.items[@backingInt(ii)].member;
220220 }
221221
222222 pub fn fileSymbol(ii: InputIndex, elf: *const Elf) Symbol.LocalIndex {
223 return elf.inputs.items[@intFromEnum(ii)].file_symbol;
223 return elf.inputs.items[@backingInt(ii)].file_symbol;
224224 }
225225
226226 pub fn localSymbolRange(ii: InputIndex, elf: *Elf) [2]Symbol.LocalIndex {
227 if (@intFromEnum(ii) + 1 < elf.inputs.items.len) {
228 const next_ii: InputIndex = @enumFromInt(@intFromEnum(ii) + 1);
227 if (@backingInt(ii) + 1 < elf.inputs.items.len) {
228 const next_ii: InputIndex = @fromBackingInt(@intCast(@backingInt(ii) + 1));
229229 return .{ ii.fileSymbol(elf), next_ii.fileSymbol(elf) };
230230 } else {
231231 const local_symbols_len = switch (elf.shdrPtr(.symtab)) {
232232 inline else => |shdr| elf.targetLoad(&shdr.info),
233233 };
234 return .{ ii.fileSymbol(elf), @enumFromInt(local_symbols_len) };
234 return .{ ii.fileSymbol(elf), @fromBackingInt(@intCast(local_symbols_len)) };
235235 }
236236 }
237237 };
......@@ -240,18 +240,18 @@ const Node = union(enum) {
240240 _,
241241
242242 pub fn navIndex(nmi: NavMapIndex, elf: *const Elf) InternPool.Nav.Index {
243 return elf.navs.keys()[@intFromEnum(nmi)];
243 return elf.navs.keys()[@backingInt(nmi)];
244244 }
245245
246246 pub fn symbol(nmi: NavMapIndex, elf: *const Elf) Symbol.LocalIndex {
247 return elf.navs.values()[@intFromEnum(nmi)].lsi;
247 return elf.navs.values()[@backingInt(nmi)].lsi;
248248 }
249249
250250 fn firstSymbolReloc(nmi: NavMapIndex, elf: *const Elf) SymbolReloc.Index {
251 return elf.navs.values()[@intFromEnum(nmi)].first_symbol_reloc;
251 return elf.navs.values()[@backingInt(nmi)].first_symbol_reloc;
252252 }
253253 fn firstGotReloc(nmi: NavMapIndex, elf: *const Elf) GotReloc.Index {
254 return elf.navs.values()[@intFromEnum(nmi)].first_got_reloc;
254 return elf.navs.values()[@backingInt(nmi)].first_got_reloc;
255255 }
256256 };
257257
......@@ -259,15 +259,15 @@ const Node = union(enum) {
259259 _,
260260
261261 pub fn uavValue(umi: UavMapIndex, elf: *const Elf) InternPool.Index {
262 return elf.uavs.keys()[@intFromEnum(umi)];
262 return elf.uavs.keys()[@backingInt(umi)];
263263 }
264264
265265 pub fn symbol(umi: UavMapIndex, elf: *const Elf) Symbol.LocalIndex {
266 return elf.uavs.values()[@intFromEnum(umi)].lsi;
266 return elf.uavs.values()[@backingInt(umi)].lsi;
267267 }
268268
269269 fn firstSymbolReloc(umi: UavMapIndex, elf: *const Elf) SymbolReloc.Index {
270 return elf.uavs.values()[@intFromEnum(umi)].first_symbol_reloc;
270 return elf.uavs.values()[@backingInt(umi)].first_symbol_reloc;
271271 }
272272 fn firstGotReloc(umi: UavMapIndex, elf: *const Elf) GotReloc.Index {
273273 _ = umi;
......@@ -285,7 +285,7 @@ const Node = union(enum) {
285285 _,
286286
287287 pub fn ref(lmi: @This()) LazyMapRef {
288 return .{ .kind = kind, .index = @intFromEnum(lmi) };
288 return .{ .kind = kind, .index = @backingInt(lmi) };
289289 }
290290
291291 pub fn lazySymbol(lmi: @This(), elf: *const Elf) link.File.LazySymbol {
......@@ -297,10 +297,10 @@ const Node = union(enum) {
297297 }
298298
299299 fn firstSymbolReloc(lmi: @This(), elf: *const Elf) SymbolReloc.Index {
300 return elf.lazy.getPtrConst(kind).map.values()[@intFromEnum(lmi)].first_symbol_reloc;
300 return elf.lazy.getPtrConst(kind).map.values()[@backingInt(lmi)].first_symbol_reloc;
301301 }
302302 fn firstGotReloc(lmi: @This(), elf: *const Elf) GotReloc.Index {
303 return elf.lazy.getPtrConst(kind).map.values()[@intFromEnum(lmi)].first_got_reloc;
303 return elf.lazy.getPtrConst(kind).map.values()[@backingInt(lmi)].first_got_reloc;
304304 }
305305 };
306306 }
......@@ -316,13 +316,13 @@ const Node = union(enum) {
316316
317317 pub const Known = struct {
318318 comptime file: MappedFile.Node.Index = .root,
319 comptime ehdr: MappedFile.Node.Index = @enumFromInt(1),
320 comptime shdr: MappedFile.Node.Index = @enumFromInt(2),
321 comptime rodata: MappedFile.Node.Index = @enumFromInt(3),
322 comptime phdr: MappedFile.Node.Index = @enumFromInt(4),
323 comptime text: MappedFile.Node.Index = @enumFromInt(5),
324 comptime data: MappedFile.Node.Index = @enumFromInt(6),
325 comptime data_rel_ro: MappedFile.Node.Index = @enumFromInt(7),
319 comptime ehdr: MappedFile.Node.Index = @fromBackingInt(@intCast(1)),
320 comptime shdr: MappedFile.Node.Index = @fromBackingInt(@intCast(2)),
321 comptime rodata: MappedFile.Node.Index = @fromBackingInt(@intCast(3)),
322 comptime phdr: MappedFile.Node.Index = @fromBackingInt(@intCast(4)),
323 comptime text: MappedFile.Node.Index = @fromBackingInt(@intCast(5)),
324 comptime data: MappedFile.Node.Index = @fromBackingInt(@intCast(6)),
325 comptime data_rel_ro: MappedFile.Node.Index = @fromBackingInt(@intCast(7)),
326326
327327 tls: MappedFile.Node.Index,
328328 };
......@@ -333,11 +333,11 @@ const Node = union(enum) {
333333
334334 /// In this linker implementation, `link.File.AtomId` is a type-erased `MappedFile.Node.Index`.
335335 fn toAtom(ni: MappedFile.Node.Index) link.File.AtomId {
336 return @enumFromInt(@intFromEnum(ni));
336 return @fromBackingInt(@intCast(@backingInt(ni)));
337337 }
338338 /// In this linker implementation, `link.File.AtomId` is a type-erased `MappedFile.Node.Index`.
339339 fn fromAtom(atom: link.File.AtomId) MappedFile.Node.Index {
340 return @enumFromInt(@intFromEnum(atom));
340 return @fromBackingInt(@intCast(@backingInt(atom)));
341341 }
342342};
343343
......@@ -356,11 +356,11 @@ const InputSection = struct {
356356 _,
357357
358358 fn ptr(isi: InputSection.Index, elf: *Elf) *InputSection {
359 return &elf.input_sections.items[@intFromEnum(isi)];
359 return &elf.input_sections.items[@backingInt(isi)];
360360 }
361361
362362 fn ptrConst(isi: InputSection.Index, elf: *const Elf) *const InputSection {
363 return &elf.input_sections.items[@intFromEnum(isi)];
363 return &elf.input_sections.items[@backingInt(isi)];
364364 }
365365
366366 fn input(isi: InputSection.Index, elf: *const Elf) Node.InputIndex {
......@@ -424,13 +424,13 @@ const Section = struct {
424424 fn unwrap(opt: RelaIndex.Optional) ?RelaIndex {
425425 return switch (opt) {
426426 .none => null,
427 _ => @enumFromInt(@intFromEnum(opt)),
427 _ => @fromBackingInt(@intCast(@backingInt(opt))),
428428 };
429429 }
430430 };
431431
432432 fn toOptional(i: RelaIndex) RelaIndex.Optional {
433 return @enumFromInt(@intFromEnum(i));
433 return @fromBackingInt(@intCast(@backingInt(i)));
434434 }
435435 };
436436
......@@ -455,7 +455,7 @@ const Section = struct {
455455 pub const LORESERVE: Index = .fromSection(std.elf.SHN_LORESERVE);
456456 pub const HIRESERVE: Index = .fromSection(std.elf.SHN_HIRESERVE);
457457 comptime {
458 assert(@intFromEnum(HIRESERVE) == std.math.maxInt(Tag));
458 assert(@backingInt(HIRESERVE) == std.math.maxInt(Tag));
459459 }
460460
461461 fn reserve(sec: std.elf.Section) Tag {
......@@ -465,12 +465,12 @@ const Section = struct {
465465
466466 pub fn fromSection(sec: std.elf.Section) Index {
467467 return switch (sec) {
468 std.elf.SHN_UNDEF...std.elf.SHN_LORESERVE - 1 => @enumFromInt(sec),
469 std.elf.SHN_LORESERVE...std.elf.SHN_HIRESERVE => @enumFromInt(reserve(sec)),
468 std.elf.SHN_UNDEF...std.elf.SHN_LORESERVE - 1 => @fromBackingInt(@intCast(sec)),
469 std.elf.SHN_LORESERVE...std.elf.SHN_HIRESERVE => @fromBackingInt(@intCast(reserve(sec))),
470470 };
471471 }
472472 pub fn toSection(s: Index) ?std.elf.Section {
473 return switch (@intFromEnum(s)) {
473 return switch (@backingInt(s)) {
474474 std.elf.SHN_UNDEF...std.elf.SHN_LORESERVE - 1 => |sec| @intCast(sec),
475475 std.elf.SHN_LORESERVE...reserve(std.elf.SHN_LORESERVE) - 1 => null,
476476 reserve(std.elf.SHN_LORESERVE)...reserve(std.elf.SHN_HIRESERVE) => |sec| @intCast(
......@@ -480,12 +480,12 @@ const Section = struct {
480480 }
481481
482482 fn get(s: Index, elf: *Elf) *Section {
483 return &elf.shdrs.items[@intFromEnum(s)];
483 return &elf.shdrs.items[@backingInt(s)];
484484 }
485485
486486 fn name(s: Index, elf: *Elf) String(.shstrtab) {
487487 return switch (elf.shdrPtr(s)) {
488 inline else => |shdr| @enumFromInt(elf.targetLoad(&shdr.name)),
488 inline else => |shdr| @fromBackingInt(@intCast(elf.targetLoad(&shdr.name))),
489489 };
490490 }
491491
......@@ -510,7 +510,7 @@ const Section = struct {
510510 fn rename(shndx: Index, elf: *Elf, new_name: []const u8) Error!void {
511511 const shstrtab_entry = try elf.string(.shstrtab, new_name);
512512 switch (elf.shdrPtr(shndx)) {
513 inline else => |shdr| elf.targetStore(&shdr.name, @intFromEnum(shstrtab_entry)),
513 inline else => |shdr| elf.targetStore(&shdr.name, @backingInt(shstrtab_entry)),
514514 }
515515 }
516516
......@@ -530,7 +530,7 @@ const Section = struct {
530530 const relas: []const class.ElfN().Rela = @ptrCast(@alignCast(
531531 node.slice(&elf.mf)[0..@intCast(cur_size)],
532532 ));
533 const free_len = elf.targetLoad(&relas[@intFromEnum(free_head)].addend);
533 const free_len = elf.targetLoad(&relas[@backingInt(free_head)].addend);
534534 assert(free_len > 0);
535535 break :free_len @intCast(free_len);
536536 };
......@@ -555,17 +555,17 @@ const Section = struct {
555555 const opt_free_head = rela_shndx.get(elf).rela.free_head;
556556 const old_free_len: u32 = free_len: {
557557 const free_head = opt_free_head.unwrap() orelse break :free_len 0;
558 const free_len = elf.targetLoad(&relas[@intFromEnum(free_head)].addend);
558 const free_len = elf.targetLoad(&relas[@backingInt(free_head)].addend);
559559 assert(free_len > 0);
560560 break :free_len @intCast(free_len);
561561 };
562562 const none_reloc_type = MachineRelocType.none(elf).unwrap(elf);
563563 {
564 const old_type = elf.targetLoad(&relas[@intFromEnum(index)].info).type;
564 const old_type = elf.targetLoad(&relas[@backingInt(index)].info).type;
565565 assert(old_type != none_reloc_type); // bug: `index` is already in the free-list
566566 }
567 relas[@intFromEnum(index)] = .{
568 .offset = @intFromEnum(opt_free_head), // next
567 relas[@backingInt(index)] = .{
568 .offset = @backingInt(opt_free_head), // next
569569 .info = .{
570570 .type = @intCast(none_reloc_type),
571571 .sym = 0,
......@@ -573,7 +573,7 @@ const Section = struct {
573573 .addend = @intCast(old_free_len + 1), // list length
574574 };
575575 if (elf.targetEndian() != native_endian) {
576 std.mem.byteSwapAllFields(class.ElfN().Rela, &relas[@intFromEnum(index)]);
576 std.mem.byteSwapAllFields(class.ElfN().Rela, &relas[@backingInt(index)]);
577577 }
578578 },
579579 }
......@@ -600,16 +600,16 @@ const Section = struct {
600600 const relas: []class.ElfN().Rela = @ptrCast(@alignCast(
601601 rela_shndx.get(elf).ni.slice(&elf.mf)[0..@intCast(elf.targetLoad(&shdr.size))],
602602 ));
603 const next: RelaIndex.Optional = @enumFromInt(elf.targetLoad(
604 &relas[@intFromEnum(free_head)].offset,
605 ));
603 const next: RelaIndex.Optional = @fromBackingInt(@intCast(elf.targetLoad(
604 &relas[@backingInt(free_head)].offset,
605 )));
606606 rela_shndx.get(elf).rela.free_head = next;
607607
608608 const old_free_len: u32 = @intCast(
609 elf.targetLoad(&relas[@intFromEnum(free_head)].addend),
609 elf.targetLoad(&relas[@backingInt(free_head)].addend),
610610 );
611611 const new_free_len: u32 = if (next.unwrap()) |i| @intCast(
612 elf.targetLoad(&relas[@intFromEnum(i)].addend),
612 elf.targetLoad(&relas[@backingInt(i)].addend),
613613 ) else 0;
614614 assert(new_free_len == old_free_len - 1);
615615
......@@ -623,12 +623,12 @@ const Section = struct {
623623 } else if (rela_shndx == elf.shndx.rela_plt) {
624624 elf.updateDynamicEntry(std.elf.DT_PLTRELSZ, new_size);
625625 }
626 break :new_index @enumFromInt(@divExact(old_size, ent_size));
626 break :new_index @fromBackingInt(@intCast(@divExact(old_size, ent_size)));
627627 };
628628 const relas: []class.ElfN().Rela = @ptrCast(@alignCast(
629629 rela_shndx.get(elf).ni.slice(&elf.mf)[0..@intCast(elf.targetLoad(&shdr.size))],
630630 ));
631 relas[@intFromEnum(new_index)] = .{
631 relas[@backingInt(new_index)] = .{
632632 .offset = @intCast(opts.offset),
633633 .info = .{
634634 .type = @intCast(opts.type.unwrap(elf)),
......@@ -637,7 +637,7 @@ const Section = struct {
637637 .addend = @intCast(opts.addend),
638638 };
639639 if (elf.targetEndian() != native_endian) {
640 std.mem.byteSwapAllFields(class.ElfN().Rela, &relas[@intFromEnum(new_index)]);
640 std.mem.byteSwapAllFields(class.ElfN().Rela, &relas[@backingInt(new_index)]);
641641 }
642642 return new_index;
643643 },
......@@ -656,12 +656,12 @@ const Section = struct {
656656 const relas: []class.ElfN().Rela = @ptrCast(@alignCast(
657657 rela_shndx.get(elf).ni.slice(&elf.mf)[0..@intCast(elf.targetLoad(&shdr.size))],
658658 ));
659 const rela_info = elf.targetLoad(&relas[@intFromEnum(index)].info);
659 const rela_info = elf.targetLoad(&relas[@backingInt(index)].info);
660660 {
661661 const none_reloc_type = MachineRelocType.none(elf).unwrap(elf);
662662 assert(rela_info.type != none_reloc_type); // bug: `index` is in the free-list
663663 }
664 elf.targetStore(&relas[@intFromEnum(index)].info, .{
664 elf.targetStore(&relas[@backingInt(index)].info, .{
665665 .type = rela_info.type,
666666 .sym = @intCast(raw_sym_index),
667667 });
......@@ -681,11 +681,11 @@ const Section = struct {
681681 rela_shndx.get(elf).ni.slice(&elf.mf)[0..@intCast(elf.targetLoad(&shdr.size))],
682682 ));
683683 {
684 const rela_info = elf.targetLoad(&relas[@intFromEnum(index)].info);
684 const rela_info = elf.targetLoad(&relas[@backingInt(index)].info);
685685 const none_reloc_type = MachineRelocType.none(elf).unwrap(elf);
686686 assert(rela_info.type != none_reloc_type); // bug: `index` is in the free-list
687687 }
688 elf.targetStore(&relas[@intFromEnum(index)].offset, @intCast(new_offset));
688 elf.targetStore(&relas[@backingInt(index)].offset, @intCast(new_offset));
689689 },
690690 }
691691 }
......@@ -702,12 +702,12 @@ const Section = struct {
702702 rela_shndx.get(elf).ni.slice(&elf.mf)[0..@intCast(elf.targetLoad(&shdr.size))],
703703 ));
704704 {
705 const rela_info = elf.targetLoad(&relas[@intFromEnum(index)].info);
705 const rela_info = elf.targetLoad(&relas[@backingInt(index)].info);
706706 const none_reloc_type = MachineRelocType.none(elf).unwrap(elf);
707707 assert(rela_info.type != none_reloc_type); // bug: `index` is in the free-list
708708 }
709 const old_offset = elf.targetLoad(&relas[@intFromEnum(index)].offset);
710 elf.targetStore(&relas[@intFromEnum(index)].offset, @intCast(
709 const old_offset = elf.targetLoad(&relas[@backingInt(index)].offset);
710 elf.targetStore(&relas[@backingInt(index)].offset, @intCast(
711711 old_offset - old_base + new_base,
712712 ));
713713 },
......@@ -726,12 +726,12 @@ const Section = struct {
726726 rela_shndx.get(elf).ni.slice(&elf.mf)[0..@intCast(elf.targetLoad(&shdr.size))],
727727 ));
728728 {
729 const rela_info = elf.targetLoad(&relas[@intFromEnum(index)].info);
729 const rela_info = elf.targetLoad(&relas[@backingInt(index)].info);
730730 const none_reloc_type = MachineRelocType.none(elf).unwrap(elf);
731731 assert(rela_info.type != none_reloc_type); // bug: `index` is in the free-list
732732 }
733733 const unsigned: class.ElfN().Addr = @intCast(new_addend);
734 elf.targetStore(&relas[@intFromEnum(index)].addend, @bitCast(unsigned));
734 elf.targetStore(&relas[@backingInt(index)].addend, @bitCast(unsigned));
735735 },
736736 }
737737 }
......@@ -896,7 +896,7 @@ const GotReloc = struct {
896896 _,
897897
898898 fn get(index: GotReloc.Index, elf: *Elf) *GotReloc {
899 return &elf.got_relocs.items[@intFromEnum(index)];
899 return &elf.got_relocs.items[@backingInt(index)];
900900 }
901901 };
902902
......@@ -1131,22 +1131,22 @@ pub const MachineRelocType = union {
11311131
11321132 pub fn wrap(int: u32, elf: *const Elf) MachineRelocType {
11331133 return switch (elf.ehdrMachine()) {
1134 .AARCH64 => .{ .AARCH64 = @enumFromInt(int) },
1135 .LOONGARCH => .{ .LARCH = @enumFromInt(int) },
1136 .PPC64 => .{ .PPC64 = @enumFromInt(int) },
1137 .RISCV => .{ .RISCV = @enumFromInt(int) },
1138 .SPARCV9 => .{ .SPARC = @enumFromInt(int) },
1139 .X86_64 => .{ .X86_64 = @enumFromInt(int) },
1134 .AARCH64 => .{ .AARCH64 = @fromBackingInt(@intCast(int)) },
1135 .LOONGARCH => .{ .LARCH = @fromBackingInt(@intCast(int)) },
1136 .PPC64 => .{ .PPC64 = @fromBackingInt(@intCast(int)) },
1137 .RISCV => .{ .RISCV = @fromBackingInt(@intCast(int)) },
1138 .SPARCV9 => .{ .SPARC = @fromBackingInt(@intCast(int)) },
1139 .X86_64 => .{ .X86_64 = @fromBackingInt(@intCast(int)) },
11401140 };
11411141 }
11421142 pub fn unwrap(rt: MachineRelocType, elf: *const Elf) u32 {
11431143 return switch (elf.ehdrMachine()) {
1144 .AARCH64 => @intFromEnum(rt.AARCH64),
1145 .LOONGARCH => @intFromEnum(rt.LARCH),
1146 .PPC64 => @intFromEnum(rt.PPC64),
1147 .RISCV => @intFromEnum(rt.RISCV),
1148 .SPARCV9 => @intFromEnum(rt.SPARC),
1149 .X86_64 => @intFromEnum(rt.X86_64),
1144 .AARCH64 => @backingInt(rt.AARCH64),
1145 .LOONGARCH => @backingInt(rt.LARCH),
1146 .PPC64 => @backingInt(rt.PPC64),
1147 .RISCV => @backingInt(rt.RISCV),
1148 .SPARCV9 => @backingInt(rt.SPARC),
1149 .X86_64 => @backingInt(rt.X86_64),
11501150 };
11511151 }
11521152};
......@@ -1209,7 +1209,7 @@ const SymbolReloc = struct {
12091209 _,
12101210
12111211 fn get(index: SymbolReloc.Index, elf: *Elf) *SymbolReloc {
1212 return &elf.symbol_relocs.items[@intFromEnum(index)];
1212 return &elf.symbol_relocs.items[@backingInt(index)];
12131213 }
12141214 };
12151215
......@@ -1875,17 +1875,17 @@ fn addLocalSymbolAssumeCapacity(elf: *Elf, opts: AddLocalSymbolOptions) Symbol.L
18751875
18761876 // `shdr.info` stores the index of the first global symbol. We will replace it with our
18771877 // new local symbol, and move the global symbol to a new index at the end of the symtab.
1878 const target_index: Symbol.Index = @enumFromInt(elf.targetLoad(&shdr.info));
1878 const target_index: Symbol.Index = @fromBackingInt(@intCast(elf.targetLoad(&shdr.info)));
18791879
18801880 const old_size = elf.targetLoad(&shdr.size);
18811881 const new_size = old_size + ent_size;
18821882
18831883 assert(elf.symtab.items.len == @divExact(old_size, ent_size));
18841884
1885 elf.targetStore(&shdr.info, @intFromEnum(target_index) + 1);
1885 elf.targetStore(&shdr.info, @backingInt(target_index) + 1);
18861886 elf.targetStore(&shdr.size, new_size);
18871887
1888 const new_index: Symbol.Index = @enumFromInt(elf.symtab.items.len);
1888 const new_index: Symbol.Index = @fromBackingInt(@intCast(elf.symtab.items.len));
18891889 elf.symtab.appendAssumeCapacity(undefined);
18901890
18911891 const target_sym = @field(elf.symPtr(target_index), @tagName(class));
......@@ -1897,7 +1897,7 @@ fn addLocalSymbolAssumeCapacity(elf: *Elf, opts: AddLocalSymbolOptions) Symbol.L
18971897 // ...then the `elf.symtab` metadata...
18981898 new_index.ptr(elf).* = target_index.ptr(elf).*;
18991899 // ...then update the `elf.globals` tracking.
1900 const global_name: String(.strtab) = @enumFromInt(elf.targetLoad(&new_sym.name));
1900 const global_name: String(.strtab) = @fromBackingInt(@intCast(elf.targetLoad(&new_sym.name)));
19011901 elf.globalByName(global_name).?.symtab_index = new_index;
19021902
19031903 if (elf.ehdrType() == .REL and target_index.ptr(elf).first_target_reloc != .none) {
......@@ -1912,7 +1912,7 @@ fn addLocalSymbolAssumeCapacity(elf: *Elf, opts: AddLocalSymbolOptions) Symbol.L
19121912 };
19131913
19141914 target_sym.* = .{
1915 .name = @intFromEnum(opts.name),
1915 .name = @backingInt(opts.name),
19161916 .value = @intCast(opts.value),
19171917 .size = @intCast(opts.size),
19181918 .info = .{ .type = opts.type, .bind = .LOCAL },
......@@ -1923,7 +1923,7 @@ fn addLocalSymbolAssumeCapacity(elf: *Elf, opts: AddLocalSymbolOptions) Symbol.L
19231923 std.mem.byteSwapAllFields(class.ElfN().Sym, target_sym);
19241924 }
19251925
1926 return @enumFromInt(@intFromEnum(target_index));
1926 return @fromBackingInt(@intCast(@backingInt(target_index)));
19271927 },
19281928 }
19291929}
......@@ -2082,7 +2082,7 @@ fn addGlobalSymbolAssumeCapacity(elf: *Elf, opts: AddGlobalSymbolOptions) error{
20822082 else => |t| t,
20832083 };
20842084
2085 const sym_index: Symbol.Index = @enumFromInt(elf.symtab.items.len);
2085 const sym_index: Symbol.Index = @fromBackingInt(@intCast(elf.symtab.items.len));
20862086 elf.symtab.appendAssumeCapacity(.{
20872087 .node = opts.node,
20882088 .first_target_reloc = .none,
......@@ -2092,12 +2092,12 @@ fn addGlobalSymbolAssumeCapacity(elf: *Elf, opts: AddGlobalSymbolOptions) error{
20922092 const Sym = class.ElfN().Sym;
20932093 // Increase the symtab size...
20942094 const old_size = elf.targetLoad(&shdr.size);
2095 assert(old_size == @intFromEnum(sym_index) * @sizeOf(Sym));
2095 assert(old_size == @backingInt(sym_index) * @sizeOf(Sym));
20962096 elf.targetStore(&shdr.size, old_size + @sizeOf(Sym));
20972097 // ...then populate the newly-valid symbol pointer
20982098 const sym = @field(elf.symPtr(sym_index), @tagName(class));
20992099 sym.* = .{
2100 .name = @intFromEnum(opts.name.strtab),
2100 .name = @backingInt(opts.name.strtab),
21012101 .value = @intCast(opts.value),
21022102 .size = @intCast(opts.size),
21032103 .info = .{ .type = @"type", .bind = bind },
......@@ -2133,7 +2133,7 @@ fn addGlobalSymbolAssumeCapacity(elf: *Elf, opts: AddGlobalSymbolOptions) error{
21332133 // ...then populate the newly-valid symbol pointer
21342134 const sym = @field(elf.dynsymPtr(dynsym_index), @tagName(class));
21352135 sym.* = .{
2136 .name = @intFromEnum(opts.name.dynstr),
2136 .name = @backingInt(opts.name.dynstr),
21372137 .value = @intCast(opts.value),
21382138 .size = @intCast(opts.size),
21392139 .info = .{ .type = @"type", .bind = bind },
......@@ -2285,7 +2285,7 @@ fn setGlobalSymbolValue(
22852285 if (!elf.pltEntryIsDead(plt_index) and
22862286 elf.classifySymbolValue(.global(global_name)) != .dynamic)
22872287 {
2288 elf.shndx.rela_plt.relaDeleteOne(elf, @enumFromInt(plt_index));
2288 elf.shndx.rela_plt.relaDeleteOne(elf, @fromBackingInt(@intCast(plt_index)));
22892289 assert(elf.pltEntryIsDead(plt_index));
22902290 }
22912291 }
......@@ -2371,14 +2371,14 @@ fn moveDemotedGlobal(elf: *Elf, global_ptr: *Symbol.Global) void {
23712371 inline else => |shdr, class| {
23722372 // `shdr.info` stores the index of the first global symbol. We are going to swap the
23732373 // demoted symbol with that first global symbol, then increment that start index.
2374 const dest_index: Symbol.Index = @enumFromInt(elf.targetLoad(&shdr.info));
2374 const dest_index: Symbol.Index = @fromBackingInt(@intCast(elf.targetLoad(&shdr.info)));
23752375 const src_index = global_ptr.symtab_index;
23762376
23772377 // This global should currently be in the "global symbols" part of the symtab, since our
23782378 // job is to move it *out* of that part:
2379 assert(@intFromEnum(src_index) >= @intFromEnum(dest_index));
2379 assert(@backingInt(src_index) >= @backingInt(dest_index));
23802380
2381 elf.targetStore(&shdr.info, @intFromEnum(dest_index) + 1);
2381 elf.targetStore(&shdr.info, @backingInt(dest_index) + 1);
23822382
23832383 if (src_index != dest_index) {
23842384 // The demoted global was not the first global in the symtab, so we need to swap it
......@@ -2387,10 +2387,10 @@ fn moveDemotedGlobal(elf: *Elf, global_ptr: *Symbol.Global) void {
23872387 const src_sym_ptr = @field(elf.symPtr(src_index), @tagName(class));
23882388 const dest_sym_ptr = @field(elf.symPtr(dest_index), @tagName(class));
23892389
2390 const this_name: String(.strtab) = @enumFromInt(elf.targetLoad(&src_sym_ptr.name));
2390 const this_name: String(.strtab) = @fromBackingInt(@intCast(elf.targetLoad(&src_sym_ptr.name)));
23912391 assert(elf.globalByName(this_name).? == global_ptr);
23922392
2393 const other_name: String(.strtab) = @enumFromInt(elf.targetLoad(&dest_sym_ptr.name));
2393 const other_name: String(.strtab) = @fromBackingInt(@intCast(elf.targetLoad(&dest_sym_ptr.name)));
23942394 const other_global_ptr = elf.globalByName(other_name).?;
23952395 assert(other_global_ptr.symtab_index == dest_index);
23962396
......@@ -2426,7 +2426,7 @@ fn moveDemotedGlobal(elf: *Elf, global_ptr: *Symbol.Global) void {
24262426 const src_dynsym_ptr = @field(elf.dynsymPtr(remove_dynsym_index), @tagName(class));
24272427 const dest_dynsym_ptr = @field(elf.dynsymPtr(free_dynsym_index), @tagName(class));
24282428
2429 const moved_name_dynstr: String(.dynstr) = @enumFromInt(elf.targetLoad(&src_dynsym_ptr.name));
2429 const moved_name_dynstr: String(.dynstr) = @fromBackingInt(@intCast(elf.targetLoad(&src_dynsym_ptr.name)));
24302430 const moved_name = elf.stringExisting(.strtab, moved_name_dynstr.slice(elf));
24312431 const moved_global_ptr = elf.globalByName(moved_name).?;
24322432
......@@ -2486,7 +2486,7 @@ const Symbol = struct {
24862486 _,
24872487
24882488 fn ptr(si: Symbol.Index, elf: *Elf) *Symbol {
2489 return &elf.symtab.items[@intFromEnum(si)];
2489 return &elf.symtab.items[@backingInt(si)];
24902490 }
24912491 };
24922492
......@@ -2505,7 +2505,7 @@ const Symbol = struct {
25052505 _,
25062506
25072507 fn index(li: LocalIndex) Index {
2508 return @enumFromInt(@intFromEnum(li));
2508 return @fromBackingInt(@intCast(@backingInt(li)));
25092509 }
25102510 };
25112511
......@@ -2517,26 +2517,26 @@ const Symbol = struct {
25172517 const @"null": Symbol.Id = .local(.null);
25182518
25192519 fn local(lsi: Symbol.LocalIndex) Symbol.Id {
2520 return .{ .kind = .local, .raw = @intCast(@intFromEnum(lsi)) };
2520 return .{ .kind = .local, .raw = @intCast(@backingInt(lsi)) };
25212521 }
25222522 fn global(name: String(.strtab)) Symbol.Id {
2523 return .{ .kind = .global, .raw = @intCast(@intFromEnum(name)) };
2523 return .{ .kind = .global, .raw = @intCast(@backingInt(name)) };
25242524 }
25252525 fn unwrap(s: Symbol.Id) union(enum) {
25262526 local: Symbol.LocalIndex,
25272527 global: String(.strtab),
25282528 } {
25292529 return switch (s.kind) {
2530 .local => .{ .local = @enumFromInt(s.raw) },
2531 .global => .{ .global = @enumFromInt(s.raw) },
2530 .local => .{ .local = @fromBackingInt(@intCast(s.raw)) },
2531 .global => .{ .global = @fromBackingInt(@intCast(s.raw)) },
25322532 };
25332533 }
25342534
25352535 fn toTypeErased(s: Symbol.Id) link.File.SymbolId {
2536 return @enumFromInt(@as(u32, @bitCast(s)));
2536 return @fromBackingInt(@intCast(@as(u32, @bitCast(s))));
25372537 }
25382538 fn fromTypeErased(s: link.File.SymbolId) Symbol.Id {
2539 return @bitCast(@intFromEnum(s));
2539 return @bitCast(@backingInt(s));
25402540 }
25412541
25422542 fn index(s: Symbol.Id, elf: *const Elf) Symbol.Index {
......@@ -2814,7 +2814,7 @@ fn lazySymbolInner(elf: *Elf, lazy: link.File.LazySymbol) Error!link.File.Symbol
28142814 const name = std.fmt.bufPrint(
28152815 &name_buf,
28162816 "__lazy_{t}_{d}",
2817 .{ lazy.kind, @intFromEnum(lazy.ty) },
2817 .{ lazy.kind, @backingInt(lazy.ty) },
28182818 ) catch unreachable;
28192819 gop.value_ptr.* = .{
28202820 .lsi = elf.addLocalSymbolAssumeCapacity(.{
......@@ -2829,8 +2829,8 @@ fn lazySymbolInner(elf: *Elf, lazy: link.File.LazySymbol) Error!link.File.Symbol
28292829 .first_got_reloc = .none,
28302830 };
28312831 elf.nodes.appendAssumeCapacity(switch (lazy.kind) {
2832 .code => .{ .lazy_code = @enumFromInt(gop.index) },
2833 .const_data => .{ .lazy_const_data = @enumFromInt(gop.index) },
2832 .code => .{ .lazy_code = @fromBackingInt(@intCast(gop.index)) },
2833 .const_data => .{ .lazy_const_data = @fromBackingInt(@intCast(gop.index)) },
28342834 });
28352835 elf.synth_prog_node.increaseEstimatedTotalItems(1);
28362836 }
......@@ -2994,19 +2994,19 @@ fn String(section: StringSection) type {
29942994
29952995 fn slice(str: @This(), elf: *Elf) [:0]const u8 {
29962996 const section_node = section.shndx(elf).get(elf).ni;
2997 const overlong = section_node.sliceConst(&elf.mf)[@intFromEnum(str)..];
2997 const overlong = section_node.sliceConst(&elf.mf)[@backingInt(str)..];
29982998 return overlong[0..std.mem.findScalar(u8, overlong, 0).? :0];
29992999 }
30003000 };
30013001}
30023002fn string(elf: *Elf, comptime section: StringSection, key: []const u8) Error!String(section) {
30033003 const st: *StringTable = &@field(elf, @tagName(section));
3004 return @enumFromInt(try st.get(elf, section.shndx(elf), key));
3004 return @fromBackingInt(@intCast(try st.get(elf, section.shndx(elf), key)));
30053005}
30063006/// Like `string`, but asserts that the string is already in `section`.
30073007fn stringExisting(elf: *Elf, comptime section: StringSection, key: []const u8) String(section) {
30083008 const st: *StringTable = &@field(elf, @tagName(section));
3009 return @enumFromInt(st.getExisting(elf, section.shndx(elf), key));
3009 return @fromBackingInt(@intCast(st.getExisting(elf, section.shndx(elf), key)));
30103010}
30113011
30123012const StringTable = struct {
......@@ -3688,7 +3688,7 @@ fn initHeaders(
36883688
36893689 const sh_undef: *ElfN.Shdr = @ptrCast(@alignCast(elf.ni.shdr.slice(&elf.mf)));
36903690 sh_undef.* = .{
3691 .name = @intFromEnum(String(.shstrtab).empty),
3691 .name = @backingInt(String(.shstrtab).empty),
36923692 .type = .NULL,
36933693 .flags = .{ .shf = .{} },
36943694 .addr = 0,
......@@ -3716,7 +3716,7 @@ fn initHeaders(
37163716 }));
37173717 const symtab_null = @field(elf.symPtr(.null), @tagName(ct_class));
37183718 symtab_null.* = .{
3719 .name = @intFromEnum(String(.strtab).empty),
3719 .name = @backingInt(String(.strtab).empty),
37203720 .value = 0,
37213721 .size = 0,
37223722 .info = .{ .type = .NOTYPE, .bind = .LOCAL },
......@@ -3749,7 +3749,7 @@ fn initHeaders(
37493749 }));
37503750 Section.Index.get(.strtab, elf).ni.slice(&elf.mf)[0] = 0;
37513751 switch (elf.shdrPtr(.symtab)) {
3752 inline else => |shdr| elf.targetStore(&shdr.link, @intFromEnum(Section.Index.strtab)),
3752 inline else => |shdr| elf.targetStore(&shdr.link, @backingInt(Section.Index.strtab)),
37533753 }
37543754
37553755 assert(.rodata == try elf.addSection(elf.ni.rodata, .{
......@@ -3872,7 +3872,7 @@ fn initHeaders(
38723872 });
38733873 const dynsym_null = @field(elf.dynsymPtr(0), @tagName(ct_class));
38743874 dynsym_null.* = .{
3875 .name = @intFromEnum(String(.dynstr).empty),
3875 .name = @backingInt(String(.dynstr).empty),
38763876 .value = 0,
38773877 .size = 0,
38783878 .info = .{ .type = .NOTYPE, .bind = .LOCAL },
......@@ -3926,7 +3926,7 @@ fn initHeaders(
39263926 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, // jmp *0x0(%rip)
39273927 0x0f, 0x1f, 0x40, 0x00, // nopl 0x0(%rax)
39283928 });
3929 elf.plt_first_symbol_reloc = @enumFromInt(elf.symbol_relocs.items.len);
3929 elf.plt_first_symbol_reloc = @fromBackingInt(@intCast(elf.symbol_relocs.items.len));
39303930 try elf.ensureUnusedRelocCapacity(plt_ni, 2);
39313931 try elf.addSymbolRelocAssumeCapacity(
39323932 plt_ni,
......@@ -3969,7 +3969,7 @@ fn initHeaders(
39693969 0x4c, 0x00, 0x01, 0xe0, // jr $t3
39703970 },
39713971 });
3972 elf.plt_first_symbol_reloc = @enumFromInt(elf.symbol_relocs.items.len);
3972 elf.plt_first_symbol_reloc = @fromBackingInt(@intCast(elf.symbol_relocs.items.len));
39733973 try elf.ensureUnusedRelocCapacity(plt_ni, 3);
39743974 elf.addRelocAssumeCapacity(plt_ni, 0, got_plt_sym, 0, .{ .LARCH = .PCALA_HI20 }) catch |err| switch (err) {
39753975 error.UnknownRelocation => unreachable,
......@@ -4184,7 +4184,7 @@ fn initHeaders(
41844184 assert(elf.shdrs.items.len == shnum);
41854185
41864186 for (0..shnum) |shndx_raw| {
4187 const shndx: Section.Index = @enumFromInt(shndx_raw);
4187 const shndx: Section.Index = @fromBackingInt(@intCast(shndx_raw));
41884188 elf.section_by_name.putAssumeCapacityNoClobber(shndx.name(elf), {});
41894189 }
41904190
......@@ -4239,7 +4239,7 @@ pub fn endProgress(elf: *Elf) void {
42394239}
42404240
42414241fn getNode(elf: *const Elf, ni: MappedFile.Node.Index) Node {
4242 return elf.nodes.get(@intFromEnum(ni));
4242 return elf.nodes.get(@backingInt(ni));
42434243}
42444244/// Asserts that `ni` is a section, input section, copied global, NAV, UAV, or lazy code/data.
42454245fn getNodeShndx(elf: *const Elf, ni: MappedFile.Node.Index) Section.Index {
......@@ -4290,15 +4290,15 @@ fn resetNodeRelocs(elf: *Elf, ni: MappedFile.Node.Index) void {
42904290 .section => unreachable, // cannot contain relocs (.plt and .dynamic unsupported)
42914291 .copied_global => unreachable, // cannot contain relocs
42924292 .input_section => |isi| .{
4293 &elf.input_sections.items[@intFromEnum(isi)].first_symbol_reloc,
4294 &elf.input_sections.items[@intFromEnum(isi)].first_got_reloc,
4293 &elf.input_sections.items[@backingInt(isi)].first_symbol_reloc,
4294 &elf.input_sections.items[@backingInt(isi)].first_got_reloc,
42954295 },
42964296 .nav => |nmi| .{
4297 &elf.navs.values()[@intFromEnum(nmi)].first_symbol_reloc,
4298 &elf.navs.values()[@intFromEnum(nmi)].first_got_reloc,
4297 &elf.navs.values()[@backingInt(nmi)].first_symbol_reloc,
4298 &elf.navs.values()[@backingInt(nmi)].first_got_reloc,
42994299 },
43004300 .uav => |umi| .{
4301 &elf.uavs.values()[@intFromEnum(umi)].first_symbol_reloc,
4301 &elf.uavs.values()[@backingInt(umi)].first_symbol_reloc,
43024302 null,
43034303 },
43044304 inline .lazy_code, .lazy_const_data => |lmi| .{
......@@ -4309,23 +4309,23 @@ fn resetNodeRelocs(elf: *Elf, ni: MappedFile.Node.Index) void {
43094309
43104310 if (symbol_relocs.* != .none) {
43114311 for (
4312 elf.symbol_relocs.items[@intFromEnum(symbol_relocs.*)..],
4313 @intFromEnum(symbol_relocs.*)..,
4312 elf.symbol_relocs.items[@backingInt(symbol_relocs.*)..],
4313 @backingInt(symbol_relocs.*)..,
43144314 ) |*reloc, index| {
43154315 if (reloc.node != ni) break;
4316 reloc.delete(elf, @enumFromInt(index));
4316 reloc.delete(elf, @fromBackingInt(@intCast(index)));
43174317 }
43184318 }
4319 symbol_relocs.* = @enumFromInt(elf.symbol_relocs.items.len);
4319 symbol_relocs.* = @fromBackingInt(@intCast(elf.symbol_relocs.items.len));
43204320
43214321 if (got_relocs) |ptr| {
43224322 if (ptr.* != .none) {
4323 for (elf.got_relocs.items[@intFromEnum(ptr.*)..]) |*reloc| {
4323 for (elf.got_relocs.items[@backingInt(ptr.*)..]) |*reloc| {
43244324 if (reloc.node != ni) break;
43254325 reloc.delete(elf);
43264326 }
43274327 }
4328 ptr.* = @enumFromInt(elf.got_relocs.items.len);
4328 ptr.* = @fromBackingInt(@intCast(elf.got_relocs.items.len));
43294329 }
43304330}
43314331
......@@ -4339,7 +4339,7 @@ fn flushMovedNodeRelocs(
43394339 first_got_reloc: GotReloc.Index,
43404340) void {
43414341 if (first_symbol_reloc != .none) {
4342 for (elf.symbol_relocs.items[@intFromEnum(first_symbol_reloc)..]) |*reloc| {
4342 for (elf.symbol_relocs.items[@backingInt(first_symbol_reloc)..]) |*reloc| {
43434343 if (reloc.node != node) break;
43444344 if (reloc.rela_index.unwrap()) |rela_index| {
43454345 // The node has moved, so the offset of the relocation within the section might have
......@@ -4351,7 +4351,7 @@ fn flushMovedNodeRelocs(
43514351 }
43524352
43534353 if (first_got_reloc != .none) {
4354 for (elf.got_relocs.items[@intFromEnum(first_got_reloc)..]) |*reloc| {
4354 for (elf.got_relocs.items[@backingInt(first_got_reloc)..]) |*reloc| {
43554355 if (reloc.node != node) break;
43564356 reloc.apply(elf);
43574357 }
......@@ -4359,33 +4359,33 @@ fn flushMovedNodeRelocs(
43594359}
43604360
43614361fn identClass(elf: *const Elf) std.elf.CLASS {
4362 return @enumFromInt(elf.mf.memory_map.memory[std.elf.EI.CLASS]);
4362 return @fromBackingInt(@intCast(elf.mf.memory_map.memory[std.elf.EI.CLASS]));
43634363}
43644364
43654365/// Like `std.elf.ET`, but only includes the ELF machine architectures we support, so that we can
43664366/// use exhaustive `switch` statements in the linker implementation.
43674367const EhdrMachine = enum(u16) {
4368 AARCH64 = @intFromEnum(std.elf.EM.AARCH64),
4369 LOONGARCH = @intFromEnum(std.elf.EM.LOONGARCH),
4370 PPC64 = @intFromEnum(std.elf.EM.PPC64),
4371 RISCV = @intFromEnum(std.elf.EM.RISCV),
4372 SPARCV9 = @intFromEnum(std.elf.EM.SPARCV9),
4373 X86_64 = @intFromEnum(std.elf.EM.X86_64),
4368 AARCH64 = @backingInt(std.elf.EM.AARCH64),
4369 LOONGARCH = @backingInt(std.elf.EM.LOONGARCH),
4370 PPC64 = @backingInt(std.elf.EM.PPC64),
4371 RISCV = @backingInt(std.elf.EM.RISCV),
4372 SPARCV9 = @backingInt(std.elf.EM.SPARCV9),
4373 X86_64 = @backingInt(std.elf.EM.X86_64),
43744374
43754375 fn toElf(m: EhdrMachine) std.elf.EM {
43764376 return @bitCast(m);
43774377 }
43784378 /// Returns `null` if `m` is not a supported ELF machine architecture.
43794379 fn fromElf(m: std.elf.EM) ?EhdrMachine {
4380 return std.enums.fromInt(EhdrMachine, @intFromEnum(m));
4380 return std.enums.fromInt(EhdrMachine, @backingInt(m));
43814381 }
43824382};
43834383/// Like `std.elf.ET`, but only includes the types of ELF file we can produce, so that we can use
43844384/// exhaustive `switch` statements in the linker implementation.
43854385const EhdrType = enum(u16) {
4386 REL = @intFromEnum(std.elf.ET.REL),
4387 EXEC = @intFromEnum(std.elf.ET.EXEC),
4388 DYN = @intFromEnum(std.elf.ET.DYN),
4386 REL = @backingInt(std.elf.ET.REL),
4387 EXEC = @backingInt(std.elf.ET.EXEC),
4388 DYN = @backingInt(std.elf.ET.DYN),
43894389 fn toElf(t: EhdrType) std.elf.ET {
43904390 return @bitCast(t);
43914391 }
......@@ -4415,7 +4415,7 @@ fn targetPtrSize(elf: *const Elf) u8 {
44154415 return elf.identClass().size();
44164416}
44174417fn targetEndian(elf: *const Elf) std.lang.Endian {
4418 const ident_data: std.elf.DATA = @enumFromInt(elf.mf.memory_map.memory[std.elf.EI.DATA]);
4418 const ident_data: std.elf.DATA = @fromBackingInt(@intCast(elf.mf.memory_map.memory[std.elf.EI.DATA]));
44194419 return ident_data.endian();
44204420}
44214421fn targetTlsVariant(elf: *const Elf) union(enum) {
......@@ -4487,7 +4487,7 @@ fn targetLoad(elf: *const Elf, ptr: anytype) @typeInfo(@TypeOf(ptr)).pointer.chi
44874487 return switch (@typeInfo(Child)) {
44884488 else => @compileError(@typeName(Child)),
44894489 .int => std.mem.toNative(Child, ptr.*, elf.targetEndian()),
4490 .@"enum" => |@"enum"| @enumFromInt(elf.targetLoad(@as(*align(alignment) const @"enum".tag_type, @ptrCast(ptr)))),
4490 .@"enum" => |@"enum"| @fromBackingInt(@intCast(elf.targetLoad(@as(*align(alignment) const @"enum".tag_type, @ptrCast(ptr))))),
44914491 .@"struct" => |@"struct"| @bitCast(
44924492 elf.targetLoad(@as(*align(alignment) @"struct".backing_integer.?, @ptrCast(ptr))),
44934493 ),
......@@ -4502,7 +4502,7 @@ fn targetStore(elf: *const Elf, ptr: anytype, val: @typeInfo(@TypeOf(ptr)).point
45024502 .int => ptr.* = std.mem.nativeTo(Child, val, elf.targetEndian()),
45034503 .@"enum" => |@"enum"| elf.targetStore(
45044504 @as(*align(alignment) @"enum".tag_type, @ptrCast(ptr)),
4505 @intFromEnum(val),
4505 @backingInt(val),
45064506 ),
45074507 .@"struct" => |@"struct"| elf.targetStore(
45084508 @as(*align(alignment) @"struct".backing_integer.?, @ptrCast(ptr)),
......@@ -4557,7 +4557,7 @@ fn shdrPtr(elf: *Elf, shndx: Section.Index) ShdrPtr {
45574557 .NONE, _ => unreachable,
45584558 inline else => |class| {
45594559 const shdr_slice: []class.ElfN().Shdr = @ptrCast(@alignCast(raw_slice));
4560 const shdr_ptr = &shdr_slice[@intFromEnum(shndx)];
4560 const shdr_ptr = &shdr_slice[@backingInt(shndx)];
45614561 return @unionInit(ShdrPtr, @tagName(class), shdr_ptr);
45624562 },
45634563 }
......@@ -4574,7 +4574,7 @@ fn symPtr(elf: *Elf, index: Symbol.Index) SymPtr {
45744574 inline else => |shdr, class| {
45754575 const size = elf.targetLoad(&shdr.size);
45764576 const slice: []class.ElfN().Sym = @ptrCast(@alignCast(raw_slice[0..@intCast(size)]));
4577 return @unionInit(SymPtr, @tagName(class), &slice[@intFromEnum(index)]);
4577 return @unionInit(SymPtr, @tagName(class), &slice[@backingInt(index)]);
45784578 },
45794579 }
45804580}
......@@ -4653,7 +4653,7 @@ fn mapInputSection(elf: *Elf, opts: struct {
46534653 const name_shstrtab = try elf.string(.shstrtab, name);
46544654 const gop = try elf.section_by_name.getOrPut(gpa, name_shstrtab);
46554655 if (gop.found_existing) {
4656 break :existing @enumFromInt(gop.index);
4656 break :existing @fromBackingInt(@intCast(gop.index));
46574657 }
46584658 errdefer assert(elf.section_by_name.pop().?.key == name_shstrtab);
46594659 const parent_node: MappedFile.Node.Index = parent: {
......@@ -4736,7 +4736,7 @@ fn navMapIndex(elf: *Elf, zcu: *Zcu, nav_index: InternPool.Nav.Index) Error!Node
47364736 try elf.navs.ensureUnusedCapacity(gpa, 1);
47374737
47384738 const nav_gop = elf.navs.getOrPutAssumeCapacity(nav_index);
4739 const nmi: Node.NavMapIndex = @enumFromInt(nav_gop.index);
4739 const nmi: Node.NavMapIndex = @fromBackingInt(@intCast(nav_gop.index));
47404740 if (!nav_gop.found_existing) {
47414741 const shndx: Section.Index = section: {
47424742 if (nav.resolved.?.@"linksection".toSlice(ip)) |@"linksection"| {
......@@ -4835,7 +4835,7 @@ fn uavMapIndex(
48354835 };
48364836
48374837 const uav_gop = elf.uavs.getOrPutAssumeCapacity(uav_val);
4838 const umi: Node.UavMapIndex = @enumFromInt(uav_gop.index);
4838 const umi: Node.UavMapIndex = @fromBackingInt(@intCast(uav_gop.index));
48394839 if (!uav_gop.found_existing) {
48404840 const shndx: Section.Index = .data_rel_ro; // TODO: it would be better to use `.rodata` if the UAV value doesn't have relocs
48414841 const node = try elf.mf.addLastChildNode(gpa, shndx.get(elf).ni, .{
......@@ -4846,7 +4846,7 @@ fn uavMapIndex(
48464846 const name = std.fmt.bufPrint(
48474847 &name_buf,
48484848 "__anon_{d}",
4849 .{@intFromEnum(uav_val)},
4849 .{@backingInt(uav_val)},
48504850 ) catch unreachable;
48514851 uav_gop.value_ptr.* = .{
48524852 .lsi = elf.addLocalSymbolAssumeCapacity(.{
......@@ -5061,7 +5061,7 @@ fn loadObject(
50615061 const diags = &comp.link_diags;
50625062 const r = &fr.interface;
50635063
5064 const input_index: Node.InputIndex = @enumFromInt(elf.inputs.items.len);
5064 const input_index: Node.InputIndex = @fromBackingInt(@intCast(elf.inputs.items.len));
50655065 log.debug("loadObject({f}{f})", .{ path.fmtEscapeString(), fmtMemberString(member) });
50665066 elf.checkInputIdent(path, r) catch |err| switch (err) {
50675067 else => |e| return e,
......@@ -5251,9 +5251,9 @@ fn loadObject(
52515251 .fixed = opts.node_fixed,
52525252 });
52535253 elf.nodes.appendAssumeCapacity(.{
5254 .input_section = @enumFromInt(elf.input_sections.items.len),
5254 .input_section = @fromBackingInt(@intCast(elf.input_sections.items.len)),
52555255 });
5256 section.isi = @enumFromInt(elf.input_sections.items.len);
5256 section.isi = @fromBackingInt(@intCast(elf.input_sections.items.len));
52575257 elf.input_sections.addOneAssumeCapacity().* = .{
52585258 .input = input_index,
52595259 .file_location = .{
......@@ -5598,7 +5598,7 @@ fn loadDso(elf: *Elf, path: std.Build.Cache.Path, fr: *Io.File.Reader) (LoadPars
55985598 // insane---refer to the doc comment on `alignment` in `Elf.dso_globals`.
55995599 const sym_align: std.mem.Alignment = switch (sym.value) {
56005600 0 => section_aligns[sym.shndx],
5601 else => section_aligns[sym.shndx].min(@enumFromInt(@ctz(sym.value))),
5601 else => section_aligns[sym.shndx].min(@fromBackingInt(@intCast(@ctz(sym.value)))),
56025602 };
56035603
56045604 const name = try elf.string(.strtab, std.mem.sliceTo(dynstr[sym.name..], 0));
......@@ -5900,16 +5900,16 @@ fn flushDynamic(elf: *Elf) void {
59005900 dynamic_entries[dynamic_index..][0..elf.needed.count()],
59015901 elf.needed.keys(),
59025902 ) |*dynamic_entry, needed| {
5903 dynamic_entry.* = .{ std.elf.DT_NEEDED, @intFromEnum(needed) };
5903 dynamic_entry.* = .{ std.elf.DT_NEEDED, @backingInt(needed) };
59045904 }
59055905 dynamic_index += elf.needed.count();
59065906
59075907 if (elf.dynamic.soname != .empty) {
5908 dynamic_entries[dynamic_index] = .{ std.elf.DT_SONAME, @intFromEnum(elf.dynamic.soname) };
5908 dynamic_entries[dynamic_index] = .{ std.elf.DT_SONAME, @backingInt(elf.dynamic.soname) };
59095909 dynamic_index += 1;
59105910 }
59115911 if (elf.dynamic.rpath != .empty) {
5912 dynamic_entries[dynamic_index] = .{ std.elf.DT_RUNPATH, @intFromEnum(elf.dynamic.rpath) };
5912 dynamic_entries[dynamic_index] = .{ std.elf.DT_RUNPATH, @backingInt(elf.dynamic.rpath) };
59135913 dynamic_index += 1;
59145914 }
59155915 if (elf.dynamic.flags != 0) {
......@@ -6033,8 +6033,8 @@ fn addSection(elf: *Elf, segment_ni: MappedFile.Node.Index, opts: struct {
60336033 break :alloc_shndx .{ shndx, shnum };
60346034 },
60356035 };
6036 assert(shndx < @intFromEnum(Section.Index.LORESERVE));
6037 break :shndx .{ @enumFromInt(shndx), @as(u64, elf.targetLoad(&ehdr.shentsize)) * @as(u64, shnum) };
6036 assert(shndx < @backingInt(Section.Index.LORESERVE));
6037 break :shndx .{ @fromBackingInt(@intCast(shndx)), @as(u64, elf.targetLoad(&ehdr.shentsize)) * @as(u64, shnum) };
60386038 },
60396039 };
60406040 try elf.ensureNodeSize(elf.ni.shdr, new_shdr_size);
......@@ -6066,7 +6066,7 @@ fn addSection(elf: *Elf, segment_ni: MappedFile.Node.Index, opts: struct {
60666066 switch (elf.shdrPtr(shndx)) {
60676067 inline else => |shdr, class| {
60686068 shdr.* = .{
6069 .name = @intFromEnum(shstrtab_entry),
6069 .name = @backingInt(shstrtab_entry),
60706070 .type = opts.type,
60716071 .flags = .{ .shf = opts.flags },
60726072 .addr = @intCast(addr),
......@@ -6105,7 +6105,7 @@ fn ensureUnusedRelocCapacity(elf: *Elf, node: MappedFile.Node.Index, len: usize)
61056105 const rela_shndx = try elf.addSection(.none, .{
61066106 .name = rela_name,
61076107 .type = .RELA,
6108 .link = @intFromEnum(Section.Index.symtab),
6108 .link = @backingInt(Section.Index.symtab),
61096109 .info = shndx.toSection().?,
61106110 .addralign = switch (class) {
61116111 .NONE, _ => unreachable,
......@@ -6160,10 +6160,10 @@ fn addRelocAssumeCapacity(
61606160 // the section offset now, but there's no point, because `flushMovedNodeRelocs` will
61616161 // eventually do it for us anyway, so just init to 0.
61626162 .offset = 0,
6163 .raw_sym_index = @intFromEnum(target.index(elf)),
6163 .raw_sym_index = @backingInt(target.index(elf)),
61646164 .addend = addend,
61656165 });
6166 const ri: SymbolReloc.Index = @enumFromInt(elf.symbol_relocs.items.len);
6166 const ri: SymbolReloc.Index = @fromBackingInt(@intCast(elf.symbol_relocs.items.len));
61676167 const next: SymbolReloc.Index = next: {
61686168 const target_ptr = target.index(elf).ptr(elf);
61696169 const next = target_ptr.first_target_reloc;
......@@ -6621,7 +6621,7 @@ fn addSymbolRelocAssumeCapacity(
66216621 }
66226622 };
66236623
6624 const ri: SymbolReloc.Index = @enumFromInt(elf.symbol_relocs.items.len);
6624 const ri: SymbolReloc.Index = @fromBackingInt(@intCast(elf.symbol_relocs.items.len));
66256625 const target_ptr = target.index(elf).ptr(elf);
66266626 const next = target_ptr.first_target_reloc;
66276627 target_ptr.first_target_reloc = ri;
......@@ -7125,7 +7125,7 @@ pub fn idle(elf: *Elf, tid: Zcu.PerThread.Id) link.Error!bool {
71257125
71267126 task: {
71277127 if (elf.input_section_pending_index < elf.input_sections.items.len) {
7128 const isi: InputSection.Index = @enumFromInt(elf.input_section_pending_index);
7128 const isi: InputSection.Index = @fromBackingInt(@intCast(elf.input_section_pending_index));
71297129 elf.input_section_pending_index += 1;
71307130 const sub_prog_node = elf.idleProgNode(tid, elf.input_prog_node, elf.getNode(isi.node(elf)));
71317131 defer sub_prog_node.end();
......@@ -7148,7 +7148,7 @@ pub fn idle(elf: *Elf, tid: Zcu.PerThread.Id) link.Error!bool {
71487148 .REL => {
71497149 // Index in `.symtab` has changed. Relocatables are easy, we just need to update
71507150 // all of the output relocations.
7151 const symtab_index = @intFromEnum(global.symtab_index);
7151 const symtab_index = @backingInt(global.symtab_index);
71527152 var ri = sym.first_target_reloc;
71537153 while (ri != .none) {
71547154 const reloc = ri.get(elf);
......@@ -7190,7 +7190,7 @@ pub fn idle(elf: *Elf, tid: Zcu.PerThread.Id) link.Error!bool {
71907190 // Update the PLT entry's reloc if there is one:
71917191 if (elf.plt.getIndex(global_name)) |plt_index| {
71927192 // PLT indices exactly match `.rela.plt` relocation indices.
7193 elf.shndx.rela_plt.relaUpdateSym(elf, @enumFromInt(plt_index), global.dynsym_index);
7193 elf.shndx.rela_plt.relaUpdateSym(elf, @fromBackingInt(@intCast(plt_index)), global.dynsym_index);
71947194 }
71957195
71967196 // Update relocs for any relevant GOT entries:
......@@ -7526,7 +7526,7 @@ fn flushMoved(elf: *Elf, ni: MappedFile.Node.Index) std.mem.Allocator.Error!void
75267526 // Update local symbols
75277527 const ii = isi.input(elf);
75287528 var lsi, const end_lsi = ii.localSymbolRange(elf);
7529 while (lsi != end_lsi) : (lsi = @enumFromInt(@intFromEnum(lsi) + 1)) {
7529 while (lsi != end_lsi) : (lsi = @fromBackingInt(@intCast(@backingInt(lsi) + 1))) {
75307530 if (lsi.index().ptr(elf).node != ni) continue;
75317531 const visibility: std.elf.STV = switch (elf.symPtr(lsi.index())) {
75327532 inline else => |sym| elf.targetLoad(&sym.other).visibility,
......@@ -7672,7 +7672,7 @@ fn flushResized(elf: *Elf, ni: MappedFile.Node.Index) std.mem.Allocator.Error!vo
76727672 std.mem.swap(@TypeOf(ph.*), &phdr[new_phndx], next_ph);
76737673 const next_ni = elf.phdrs.items[next_phndx];
76747674 elf.phdrs.items[new_phndx] = next_ni;
7675 elf.nodes.items(.data)[@intFromEnum(next_ni)] = .{ .segment = new_phndx };
7675 elf.nodes.items(.data)[@backingInt(next_ni)] = .{ .segment = new_phndx };
76767676 new_phndx = @intCast(next_phndx);
76777677 }
76787678 if (new_phndx != phndx) {
......@@ -7680,7 +7680,7 @@ fn flushResized(elf: *Elf, ni: MappedFile.Node.Index) std.mem.Allocator.Error!vo
76807680 elf.targetStore(&new_ph.vaddr, vaddr);
76817681 new_ph.paddr = new_ph.vaddr;
76827682 elf.phdrs.items[new_phndx] = ni;
7683 elf.nodes.items(.data)[@intFromEnum(ni)] = .{ .segment = new_phndx };
7683 elf.nodes.items(.data)[@backingInt(ni)] = .{ .segment = new_phndx };
76847684 try ni.childrenMoved(elf.base.comp.gpa, &elf.mf);
76857685 }
76867686 }
......@@ -7736,7 +7736,7 @@ fn addPltEntry(elf: *Elf, global_name: String(.strtab), dynsym_index: u32) void
77367736
77377737 // We use the existing free-list tracking of the `.rela.plt` section to also behave as a
77387738 // free-list for the PLT itself---see `pltEntryIsDead` for details.
7739 const plt_index: u32 = @intFromEnum(elf.shndx.rela_plt.relaAddOneAssumeCapacity(elf, .{
7739 const plt_index: u32 = @backingInt(elf.shndx.rela_plt.relaAddOneAssumeCapacity(elf, .{
77407740 .type = .jumpSlot(elf),
77417741 .offset = 0, // populated later
77427742 .raw_sym_index = dynsym_index,
......@@ -7756,7 +7756,7 @@ fn addPltEntry(elf: *Elf, global_name: String(.strtab), dynsym_index: u32) void
77567756 };
77577757
77587758 // Now that we know the index, we can set the relocation's offset.
7759 elf.shndx.rela_plt.relaSetOffset(elf, @enumFromInt(plt_index), got_plt_section.vaddr(elf) + got_plt_offset);
7759 elf.shndx.rela_plt.relaSetOffset(elf, @fromBackingInt(@intCast(plt_index)), got_plt_section.vaddr(elf) + got_plt_offset);
77607760
77617761 if (plt_index < elf.plt.count()) {
77627762 // We reused a free entry, so we're already done!
......@@ -7951,7 +7951,7 @@ fn flushMovedPltSection(elf: *Elf, which: enum { plt, plt_sec, got_plt }, old_ad
79517951 const rela_plt_shndx = elf.shndx.rela_plt;
79527952 for (0..elf.plt.count()) |plt_index| {
79537953 if (elf.pltEntryIsDead(plt_index)) continue;
7954 rela_plt_shndx.relaAdjustOffset(elf, @enumFromInt(plt_index), old_addr, addr);
7954 rela_plt_shndx.relaAdjustOffset(elf, @fromBackingInt(@intCast(plt_index)), old_addr, addr);
79557955 }
79567956 // We also need to update all of the references from `.plt.sec` to `.got.plt`.
79577957 // However, if there's also a flush pending for `.plt.sec`, don't bother doing
......@@ -8002,7 +8002,7 @@ fn flushMovedPltSection(elf: *Elf, which: enum { plt, plt_sec, got_plt }, old_ad
80028002 const rela_plt_shndx = elf.shndx.rela_plt;
80038003 for (0..elf.plt.count()) |plt_index| {
80048004 if (elf.pltEntryIsDead(plt_index)) continue;
8005 rela_plt_shndx.relaAdjustOffset(elf, @enumFromInt(plt_index), old_addr, addr);
8005 rela_plt_shndx.relaAdjustOffset(elf, @fromBackingInt(@intCast(plt_index)), old_addr, addr);
80068006 }
80078007 // We also need to update all of the references from `.plt` to `.got.plt`.
80088008 // However, if there's also a flush pending for `.plt`, don't bother doing
......@@ -8052,7 +8052,7 @@ fn flushMovedPltSection(elf: *Elf, which: enum { plt, plt_sec, got_plt }, old_ad
80528052 const rela_plt_shndx = elf.shndx.rela_plt;
80538053 for (0..elf.plt.count()) |plt_index| {
80548054 if (elf.pltEntryIsDead(plt_index)) continue;
8055 rela_plt_shndx.relaAdjustOffset(elf, @enumFromInt(plt_index), old_addr, addr);
8055 rela_plt_shndx.relaAdjustOffset(elf, @fromBackingInt(@intCast(plt_index)), old_addr, addr);
80568056 }
80578057 },
80588058 .plt_sec, .got_plt => unreachable,
......@@ -8225,10 +8225,10 @@ pub fn printNode(
82258225 }),
82268226 }
82278227 {
8228 const mf_node = &elf.mf.nodes.items[@intFromEnum(ni)];
8228 const mf_node = &elf.mf.nodes.items[@backingInt(ni)];
82298229 const off, const size = mf_node.location().resolve(&elf.mf);
82308230 try w.print(" index={d} offset=0x{x} size=0x{x} align=0x{x}{s}{s}{s}{s}\n", .{
8231 @intFromEnum(ni),
8231 @backingInt(ni),
82328232 off,
82338233 size,
82348234 mf_node.flags.alignment.toByteUnits(),
src/link/MachO.zig+4-4
......@@ -4676,7 +4676,7 @@ pub const MachTask = extern struct {
46764676 var out_port: std.c.mach_port_name_t = undefined;
46774677 switch (getKernError(std.c.mach_port_allocate(
46784678 self.port,
4679 @intFromEnum(right),
4679 @backingInt(right),
46804680 &out_port,
46814681 ))) {
46824682 .SUCCESS => return .{ .port = out_port },
......@@ -4694,7 +4694,7 @@ pub const MachTask = extern struct {
46944694 self.port,
46954695 port.port,
46964696 port.port,
4697 @intFromEnum(msg),
4697 @backingInt(msg),
46984698 ))) {
46994699 .SUCCESS => return,
47004700 .FAILURE => return error.PermissionDenied,
......@@ -5119,12 +5119,12 @@ pub fn machTaskForSelf() MachTask {
51195119}
51205120
51215121pub fn getKernError(err: std.c.kern_return_t) KernE {
5122 return @as(KernE, @enumFromInt(@as(u32, @truncate(@as(usize, @intCast(err))))));
5122 return @as(KernE, @fromBackingInt(@intCast(@as(u32, @truncate(@as(usize, @intCast(err)))))));
51235123}
51245124
51255125pub fn unexpectedKernError(err: KernE) std.posix.UnexpectedError {
51265126 if (std.options.unexpected_error_tracing) {
5127 std.debug.print("unexpected error: {d}\n", .{@intFromEnum(err)});
5127 std.debug.print("unexpected error: {d}\n", .{@backingInt(err)});
51285128 std.debug.dumpCurrentStackTrace(.{});
51295129 }
51305130 return error.Unexpected;
src/link/MachO/Atom.zig+5-5
......@@ -797,8 +797,8 @@ fn resolveRelocInner(
797797 .data_processing_immediate => aarch64.writeAddImmInst(@truncate(target), inst_code),
798798 .load_store => |load_store| {
799799 inst.load_store.register_unsigned_immediate.group.imm12 = switch (load_store.register_unsigned_immediate.decode()) {
800 .integer => |integer| try divExact(self, rel, @truncate(target), @as(u4, 1) << @intFromEnum(integer.group.size), macho_file),
801 .vector => |vector| try divExact(self, rel, @truncate(target), @as(u5, 1) << @intFromEnum(vector.group.opc1.decode(vector.group.size)), macho_file),
800 .integer => |integer| try divExact(self, rel, @truncate(target), @as(u4, 1) << @backingInt(integer.group.size), macho_file),
801 .vector => |vector| try divExact(self, rel, @truncate(target), @as(u5, 1) << @backingInt(vector.group.opc1.decode(vector.group.size)), macho_file),
802802 };
803803 try writer.writeInt(u32, @bitCast(inst), .little);
804804 },
......@@ -990,7 +990,7 @@ pub fn writeRelocs(self: Atom, macho_file: *MachO, code: []u8, buffer: []macho.r
990990 .r_pcrel = 0,
991991 .r_length = 2,
992992 .r_extern = 0,
993 .r_type = @intFromEnum(macho.reloc_type_arm64.ARM64_RELOC_ADDEND),
993 .r_type = @backingInt(macho.reloc_type_arm64.ARM64_RELOC_ADDEND),
994994 };
995995 i += 1;
996996 }
......@@ -1021,7 +1021,7 @@ pub fn writeRelocs(self: Atom, macho_file: *MachO, code: []u8, buffer: []macho.r
10211021 .r_pcrel = @intFromBool(rel.meta.pcrel),
10221022 .r_extern = @intFromBool(r_extern),
10231023 .r_length = rel.meta.length,
1024 .r_type = @intFromEnum(r_type),
1024 .r_type = @backingInt(r_type),
10251025 };
10261026 },
10271027 .x86_64 => {
......@@ -1064,7 +1064,7 @@ pub fn writeRelocs(self: Atom, macho_file: *MachO, code: []u8, buffer: []macho.r
10641064 .r_pcrel = @intFromBool(rel.meta.pcrel),
10651065 .r_extern = @intFromBool(r_extern),
10661066 .r_length = rel.meta.length,
1067 .r_type = @intFromEnum(r_type),
1067 .r_type = @backingInt(r_type),
10681068 };
10691069 },
10701070 else => unreachable,
src/link/MachO/Object.zig+11-11
......@@ -979,7 +979,7 @@ fn initSymbolStabs(self: *Object, allocator: Allocator, nlists: anytype, macho_f
979979 const open = syms[i];
980980 if (open.n_type.stab != .so) {
981981 try macho_file.reportParseError2(self.index, "unexpected symbol stab type 0x{x} as the first entry", .{
982 @intFromEnum(open.n_type.stab),
982 @backingInt(open.n_type.stab),
983983 });
984984 return error.MalformedObject;
985985 }
......@@ -1009,7 +1009,7 @@ fn initSymbolStabs(self: *Object, allocator: Allocator, nlists: anytype, macho_f
10091009 stab.index = sym_lookup.find(nlist.n_value);
10101010 },
10111011 _ => {
1012 try macho_file.reportParseError2(self.index, "unhandled symbol stab type 0x{x}", .{@intFromEnum(nlist.n_type.stab)});
1012 try macho_file.reportParseError2(self.index, "unhandled symbol stab type 0x{x}", .{@backingInt(nlist.n_type.stab)});
10131013 return error.MalformedObject;
10141014 },
10151015 else => {
......@@ -2032,8 +2032,8 @@ fn addReloc(offset: u32, arch: std.Target.Cpu.Arch) !macho.relocation_info {
20322032 .r_length = 3,
20332033 .r_extern = 0,
20342034 .r_type = switch (arch) {
2035 .aarch64 => @intFromEnum(macho.reloc_type_arm64.ARM64_RELOC_UNSIGNED),
2036 .x86_64 => @intFromEnum(macho.reloc_type_x86_64.X86_64_RELOC_UNSIGNED),
2035 .aarch64 => @backingInt(macho.reloc_type_arm64.ARM64_RELOC_UNSIGNED),
2036 .x86_64 => @backingInt(macho.reloc_type_x86_64.X86_64_RELOC_UNSIGNED),
20372037 else => unreachable,
20382038 },
20392039 };
......@@ -2844,7 +2844,7 @@ const x86_64 = struct {
28442844 var i: usize = 0;
28452845 while (i < relocs.len) : (i += 1) {
28462846 const rel = relocs[i];
2847 const rel_type: macho.reloc_type_x86_64 = @enumFromInt(rel.r_type);
2847 const rel_type: macho.reloc_type_x86_64 = @fromBackingInt(@intCast(rel.r_type));
28482848 const rel_offset = @as(u32, @intCast(rel.r_address));
28492849
28502850 var addend = switch (rel.r_length) {
......@@ -2853,7 +2853,7 @@ const x86_64 = struct {
28532853 2 => mem.readInt(i32, code[rel_offset..][0..4], .little),
28542854 3 => mem.readInt(i64, code[rel_offset..][0..8], .little),
28552855 };
2856 addend += switch (@as(macho.reloc_type_x86_64, @enumFromInt(rel.r_type))) {
2856 addend += switch (@as(macho.reloc_type_x86_64, @fromBackingInt(@intCast(rel.r_type)))) {
28572857 .X86_64_RELOC_SIGNED_1 => 1,
28582858 .X86_64_RELOC_SIGNED_2 => 2,
28592859 .X86_64_RELOC_SIGNED_4 => 4,
......@@ -2884,7 +2884,7 @@ const x86_64 = struct {
28842884 } else rel.r_symbolnum;
28852885
28862886 const has_subtractor = if (i > 0 and
2887 @as(macho.reloc_type_x86_64, @enumFromInt(relocs[i - 1].r_type)) == .X86_64_RELOC_SUBTRACTOR)
2887 @as(macho.reloc_type_x86_64, @fromBackingInt(@intCast(relocs[i - 1].r_type))) == .X86_64_RELOC_SUBTRACTOR)
28882888 blk: {
28892889 if (rel_type != .X86_64_RELOC_UNSIGNED) {
28902890 try macho_file.reportParseError2(self.index, "{s},{s}: 0x{x}: X86_64_RELOC_SUBTRACTOR followed by {s}", .{
......@@ -3017,7 +3017,7 @@ const aarch64 = struct {
30173017
30183018 var addend: i64 = 0;
30193019
3020 switch (@as(macho.reloc_type_arm64, @enumFromInt(rel.r_type))) {
3020 switch (@as(macho.reloc_type_arm64, @fromBackingInt(@intCast(rel.r_type)))) {
30213021 .ARM64_RELOC_ADDEND => {
30223022 addend = rel.r_symbolnum;
30233023 i += 1;
......@@ -3028,7 +3028,7 @@ const aarch64 = struct {
30283028 return error.MalformedObject;
30293029 }
30303030 rel = relocs[i];
3031 switch (@as(macho.reloc_type_arm64, @enumFromInt(rel.r_type))) {
3031 switch (@as(macho.reloc_type_arm64, @fromBackingInt(@intCast(rel.r_type)))) {
30323032 .ARM64_RELOC_PAGE21, .ARM64_RELOC_PAGEOFF12 => {},
30333033 else => |x| {
30343034 try macho_file.reportParseError2(
......@@ -3051,7 +3051,7 @@ const aarch64 = struct {
30513051 else => {},
30523052 }
30533053
3054 const rel_type: macho.reloc_type_arm64 = @enumFromInt(rel.r_type);
3054 const rel_type: macho.reloc_type_arm64 = @fromBackingInt(@intCast(rel.r_type));
30553055 var is_extern = rel.r_extern == 1;
30563056
30573057 const target = if (!is_extern) blk: {
......@@ -3077,7 +3077,7 @@ const aarch64 = struct {
30773077 } else rel.r_symbolnum;
30783078
30793079 const has_subtractor = if (i > 0 and
3080 @as(macho.reloc_type_arm64, @enumFromInt(relocs[i - 1].r_type)) == .ARM64_RELOC_SUBTRACTOR)
3080 @as(macho.reloc_type_arm64, @fromBackingInt(@intCast(relocs[i - 1].r_type))) == .ARM64_RELOC_SUBTRACTOR)
30813081 blk: {
30823082 if (rel_type != .ARM64_RELOC_UNSIGNED) {
30833083 try macho_file.reportParseError2(self.index, "{s},{s}: 0x{x}: ARM64_RELOC_SUBTRACTOR followed by {s}", .{
src/link/MachO/UnwindInfo.zig+5-5
......@@ -30,8 +30,8 @@ fn canFold(macho_file: *MachO, lhs_ref: Record.Ref, rhs_ref: Record.Ref) bool {
3030 const lhs = lhs_ref.getUnwindRecord(macho_file);
3131 const rhs = rhs_ref.getUnwindRecord(macho_file);
3232 if (cpu_arch == .x86_64) {
33 if (lhs.enc.getMode() == @intFromEnum(macho.UNWIND_X86_64_MODE.STACK_IND) or
34 rhs.enc.getMode() == @intFromEnum(macho.UNWIND_X86_64_MODE.STACK_IND)) return false;
33 if (lhs.enc.getMode() == @backingInt(macho.UNWIND_X86_64_MODE.STACK_IND) or
34 rhs.enc.getMode() == @backingInt(macho.UNWIND_X86_64_MODE.STACK_IND)) return false;
3535 }
3636 const lhs_per = lhs.personality orelse 0;
3737 const rhs_per = rhs.personality orelse 0;
......@@ -412,8 +412,8 @@ pub const Encoding = extern struct {
412412 pub fn isDwarf(enc: Encoding, macho_file: *MachO) bool {
413413 const mode = enc.getMode();
414414 return switch (macho_file.getTarget().cpu.arch) {
415 .aarch64 => @as(macho.UNWIND_ARM64_MODE, @enumFromInt(mode)) == .DWARF,
416 .x86_64 => @as(macho.UNWIND_X86_64_MODE, @enumFromInt(mode)) == .DWARF,
415 .aarch64 => @as(macho.UNWIND_ARM64_MODE, @fromBackingInt(@intCast(mode))) == .DWARF,
416 .x86_64 => @as(macho.UNWIND_X86_64_MODE, @fromBackingInt(@intCast(mode))) == .DWARF,
417417 else => unreachable,
418418 };
419419 }
......@@ -421,7 +421,7 @@ pub const Encoding = extern struct {
421421 pub fn setMode(enc: *Encoding, mode: anytype) void {
422422 comptime assert(macho.UNWIND_ARM64_MODE_MASK == macho.UNWIND_X86_64_MODE_MASK);
423423 const shift = comptime @ctz(macho.UNWIND_ARM64_MODE_MASK);
424 enc.enc |= @as(u32, @intCast(@intFromEnum(mode))) << shift;
424 enc.enc |= @as(u32, @intCast(@backingInt(mode))) << shift;
425425 }
426426
427427 pub fn hasLsda(enc: Encoding) bool {
src/link/MachO/ZigObject.zig+15-15
......@@ -632,7 +632,7 @@ pub fn getNavVAddr(
632632 switch (reloc_info.parent) {
633633 .none => unreachable,
634634 .atom_index => |atom_index| {
635 const parent_atom = self.symbols.items[@intFromEnum(atom_index)].getAtom(macho_file).?;
635 const parent_atom = self.symbols.items[@backingInt(atom_index)].getAtom(macho_file).?;
636636 try parent_atom.addReloc(macho_file, .{
637637 .tag = .@"extern",
638638 .offset = @intCast(reloc_info.offset),
......@@ -650,7 +650,7 @@ pub fn getNavVAddr(
650650 .debug_output => |debug_output| switch (debug_output) {
651651 .dwarf => |wip_nav| try wip_nav.infoExternalReloc(.{
652652 .source_off = @intCast(reloc_info.offset),
653 .target_sym = @enumFromInt(sym_index),
653 .target_sym = @fromBackingInt(@intCast(sym_index)),
654654 .target_off = reloc_info.addend,
655655 }),
656656 .none => unreachable,
......@@ -671,7 +671,7 @@ pub fn getUavVAddr(
671671 switch (reloc_info.parent) {
672672 .none => unreachable,
673673 .atom_index => |atom_index| {
674 const parent_atom = self.symbols.items[@intFromEnum(atom_index)].getAtom(macho_file).?;
674 const parent_atom = self.symbols.items[@backingInt(atom_index)].getAtom(macho_file).?;
675675 try parent_atom.addReloc(macho_file, .{
676676 .tag = .@"extern",
677677 .offset = @intCast(reloc_info.offset),
......@@ -689,7 +689,7 @@ pub fn getUavVAddr(
689689 .debug_output => |debug_output| switch (debug_output) {
690690 .dwarf => |wip_nav| try wip_nav.infoExternalReloc(.{
691691 .source_off = @intCast(reloc_info.offset),
692 .target_sym = @enumFromInt(sym_index),
692 .target_sym = @fromBackingInt(@intCast(sym_index)),
693693 .target_off = reloc_info.addend,
694694 }),
695695 .none => unreachable,
......@@ -716,12 +716,12 @@ pub fn lowerUav(
716716 const sym = self.symbols.items[metadata.symbol_index];
717717 const existing_alignment = sym.getAtom(macho_file).?.alignment;
718718 if (uav_alignment.order(existing_alignment).compare(.lte))
719 return @enumFromInt(metadata.symbol_index);
719 return @fromBackingInt(@intCast(metadata.symbol_index));
720720 }
721721
722722 var name_buf: [32]u8 = undefined;
723723 const name = std.fmt.bufPrint(&name_buf, "__anon_{d}", .{
724 @intFromEnum(uav),
724 @backingInt(uav),
725725 }) catch unreachable;
726726 const sym_index = self.lowerConst(
727727 macho_file,
......@@ -737,7 +737,7 @@ pub fn lowerUav(
737737 .{e},
738738 ),
739739 };
740 try self.uavs.put(gpa, uav, .{ .symbol_index = @intFromEnum(sym_index) });
740 try self.uavs.put(gpa, uav, .{ .symbol_index = @backingInt(sym_index) });
741741 return sym_index;
742742}
743743
......@@ -783,14 +783,14 @@ pub fn updateFunc(
783783 var aw: std.Io.Writer.Allocating = .init(gpa);
784784 defer aw.deinit();
785785
786 var debug_wip_nav = if (self.dwarf) |*dwarf| try dwarf.initWipNav(pt, func.owner_nav, @enumFromInt(sym_index)) else null;
786 var debug_wip_nav = if (self.dwarf) |*dwarf| try dwarf.initWipNav(pt, func.owner_nav, @fromBackingInt(@intCast(sym_index))) else null;
787787 defer if (debug_wip_nav) |*wip_nav| wip_nav.deinit();
788788
789789 codegen.emitFunction(
790790 &macho_file.base,
791791 pt,
792792 func_index,
793 @enumFromInt(sym_index),
793 @fromBackingInt(@intCast(sym_index)),
794794 mir,
795795 &aw.writer,
796796 if (debug_wip_nav) |*wip_nav| .{ .dwarf = wip_nav } else .none,
......@@ -876,7 +876,7 @@ pub fn updateNav(
876876 const sym_index = try self.getGlobalSymbol(macho_file, name, lib_name);
877877 if (nav.resolved.?.@"threadlocal" and macho_file.base.comp.config.any_non_single_threaded) self.symbols.items[sym_index].flags.tlv = true;
878878 if (self.dwarf) |*dwarf| {
879 var debug_wip_nav = try dwarf.initWipNav(pt, nav_index, @enumFromInt(sym_index));
879 var debug_wip_nav = try dwarf.initWipNav(pt, nav_index, @fromBackingInt(@intCast(sym_index)));
880880 defer debug_wip_nav.deinit();
881881 dwarf.finishWipNav(pt, nav_index, &debug_wip_nav) catch |err| switch (err) {
882882 error.OutOfMemory, error.Canceled, error.AlreadyReported => |e| return e,
......@@ -894,7 +894,7 @@ pub fn updateNav(
894894 var aw: std.Io.Writer.Allocating = .init(zcu.gpa);
895895 defer aw.deinit();
896896
897 var debug_wip_nav = if (self.dwarf) |*dwarf| try dwarf.initWipNav(pt, nav_index, @enumFromInt(sym_index)) else null;
897 var debug_wip_nav = if (self.dwarf) |*dwarf| try dwarf.initWipNav(pt, nav_index, @fromBackingInt(@intCast(sym_index))) else null;
898898 defer if (debug_wip_nav) |*wip_nav| wip_nav.deinit();
899899
900900 codegen.generateSymbol(
......@@ -902,7 +902,7 @@ pub fn updateNav(
902902 pt,
903903 .fromInterned(nav.resolved.?.value),
904904 &aw.writer,
905 .{ .atom_index = @enumFromInt(sym_index) },
905 .{ .atom_index = @fromBackingInt(@intCast(sym_index)) },
906906 ) catch |err| switch (err) {
907907 error.WriteFailed => return error.OutOfMemory,
908908 else => |e| return e,
......@@ -1203,7 +1203,7 @@ fn lowerConst(
12031203 pt,
12041204 val,
12051205 &aw.writer,
1206 .{ .atom_index = @enumFromInt(sym_index) },
1206 .{ .atom_index = @fromBackingInt(@intCast(sym_index)) },
12071207 ) catch |err| switch (err) {
12081208 error.WriteFailed => return error.OutOfMemory,
12091209 else => |e| return e,
......@@ -1231,7 +1231,7 @@ fn lowerConst(
12311231 const file_offset = sect.offset + atom.value;
12321232 try macho_file.pwriteAll(code, file_offset);
12331233
1234 return @enumFromInt(sym_index);
1234 return @fromBackingInt(@intCast(sym_index));
12351235}
12361236
12371237pub fn updateExports(
......@@ -1353,7 +1353,7 @@ fn updateLazySymbol(
13531353 &required_alignment,
13541354 &aw.writer,
13551355 .none,
1356 .{ .atom_index = @enumFromInt(symbol_index) },
1356 .{ .atom_index = @fromBackingInt(@intCast(symbol_index)) },
13571357 );
13581358 const code = aw.written();
13591359
src/link/MachO/eh_frame.zig+2-2
......@@ -464,8 +464,8 @@ pub fn writeRelocs(macho_file: *MachO, code: []u8, relocs: []macho.relocation_in
464464 .r_extern = 1,
465465 .r_pcrel = 1,
466466 .r_type = switch (cpu_arch) {
467 .aarch64 => @intFromEnum(macho.reloc_type_arm64.ARM64_RELOC_POINTER_TO_GOT),
468 .x86_64 => @intFromEnum(macho.reloc_type_x86_64.X86_64_RELOC_GOT),
467 .aarch64 => @backingInt(macho.reloc_type_arm64.ARM64_RELOC_POINTER_TO_GOT),
468 .x86_64 => @backingInt(macho.reloc_type_x86_64.X86_64_RELOC_GOT),
469469 else => unreachable,
470470 },
471471 };
src/link/MappedFile.zig+2-2
......@@ -181,7 +181,7 @@ pub const Node = extern struct {
181181 pub const root: Node.Index = .none;
182182
183183 fn get(ni: Node.Index, mf: *const MappedFile) *Node {
184 return &mf.nodes.items[@intFromEnum(ni)];
184 return &mf.nodes.items[@backingInt(ni)];
185185 }
186186
187187 pub fn parent(ni: Node.Index, mf: *const MappedFile) Node.Index {
......@@ -561,7 +561,7 @@ fn addNode(mf: *MappedFile, gpa: std.mem.Allocator, opts: struct {
561561 break :location .{ .large, .{ .large = .{ .index = mf.large.items.len } } };
562562 };
563563 const free_ni: Node.Index, const free_node = free: switch (mf.free_ni) {
564 .none => .{ @enumFromInt(mf.nodes.items.len), mf.nodes.addOneAssumeCapacity() },
564 .none => .{ @fromBackingInt(@intCast(mf.nodes.items.len)), mf.nodes.addOneAssumeCapacity() },
565565 else => |free_ni| {
566566 const free_node = free_ni.get(mf);
567567 mf.free_ni = free_node.next;
src/link/SpirV.zig+21-21
......@@ -153,7 +153,7 @@ pub fn loadInput(linker: *Linker, input: link.Input) !void {
153153 var it: BinaryModule.Instruction.Iterator = .init(instructions, 0);
154154 const has_linkage = while (it.next()) |inst| switch (inst.opcode) {
155155 .OpCapability => {
156 const cap: spec.Capability = @enumFromInt(inst.operands[0]);
156 const cap: spec.Capability = @fromBackingInt(@intCast(inst.operands[0]));
157157 if (cap == .linkage) break true;
158158 },
159159 else => break false,
......@@ -343,7 +343,7 @@ fn mergeFragments(linker: *Linker, gpa: Allocator, arena: Allocator) error{OutOf
343343 const id_offset = next_id - 1;
344344 frag_infos.appendAssumeCapacity(.{ .id_offset = id_offset });
345345 if (mir.decl_result_id != .none) {
346 try nav_final_ids.put(gpa, nav, @enumFromInt(@intFromEnum(mir.decl_result_id) + id_offset));
346 try nav_final_ids.put(gpa, nav, @fromBackingInt(@intCast(@backingInt(mir.decl_result_id) + id_offset)));
347347 }
348348 next_id += mir.id_bound - 1;
349349 }
......@@ -351,13 +351,13 @@ fn mergeFragments(linker: *Linker, gpa: Allocator, arena: Allocator) error{OutOf
351351 for (linker.fragments.values(), frag_infos.items) |*mir, frag_info| {
352352 for (mir.nav_refs) |ref| {
353353 if (!nav_final_ids.contains(ref.nav)) {
354 try nav_final_ids.put(gpa, ref.nav, @enumFromInt(@intFromEnum(ref.local_id) + frag_info.id_offset));
354 try nav_final_ids.put(gpa, ref.nav, @fromBackingInt(@intCast(@backingInt(ref.local_id) + frag_info.id_offset)));
355355 }
356356 }
357357 for (mir.uav_refs) |ref| {
358358 const key = .{ ref.val, ref.storage_class };
359359 if (!uav_final_ids.contains(key)) {
360 try uav_final_ids.put(gpa, key, @enumFromInt(@intFromEnum(ref.local_id) + frag_info.id_offset));
360 try uav_final_ids.put(gpa, key, @fromBackingInt(@intCast(@backingInt(ref.local_id) + frag_info.id_offset)));
361361 }
362362 }
363363 }
......@@ -391,10 +391,10 @@ fn mergeFragments(linker: *Linker, gpa: Allocator, arena: Allocator) error{OutOf
391391 while (it.next()) |inst| {
392392 const ld = LinkageDecoration.parse(inst) orelse continue;
393393 if (ld.linkage_type != .@"export") continue;
394 const remapped_id: Id = @enumFromInt(@intFromEnum(ld.target_id) + id_offset);
394 const remapped_id: Id = @fromBackingInt(@intCast(@backingInt(ld.target_id) + id_offset));
395395
396396 if (extern_name_map.get(ld.name)) |nav_index| {
397 log.debug("extern resolve: '{s}' -> ext_fn_id={d}", .{ ld.name, @intFromEnum(remapped_id) });
397 log.debug("extern resolve: '{s}' -> ext_fn_id={d}", .{ ld.name, @backingInt(remapped_id) });
398398 nav_final_ids.getPtr(nav_index).?.* = remapped_id;
399399 _ = extern_name_map.swapRemove(ld.name);
400400 try resolved_ids.put(gpa, remapped_id, {});
......@@ -579,7 +579,7 @@ fn remapFilteredInsts(
579579 switch (mode) {
580580 .skip_functions => {
581581 if (inst.opcode == .OpFunction) {
582 skip_function = skip_ids.contains(@enumFromInt(inst.operands[1]));
582 skip_function = skip_ids.contains(@fromBackingInt(@intCast(inst.operands[1])));
583583 }
584584 if (skip_function) {
585585 if (inst.opcode == .OpFunctionEnd) skip_function = false;
......@@ -593,7 +593,7 @@ fn remapFilteredInsts(
593593 },
594594 .skip_names => {
595595 if (inst.opcode == .OpName and inst.operands.len >= 1) {
596 if (skip_ids.contains(@enumFromInt(inst.operands[0]))) continue;
596 if (skip_ids.contains(@fromBackingInt(@intCast(inst.operands[0])))) continue;
597597 }
598598 },
599599 }
......@@ -817,11 +817,11 @@ const LinkageDecoration = struct {
817817 fn parse(inst: BinaryModule.Instruction) ?LinkageDecoration {
818818 if (inst.opcode != .OpDecorate) return null;
819819 if (inst.operands.len < 3) return null;
820 if (inst.operands[1] != @intFromEnum(spec.Decoration.linkage_attributes)) return null;
820 if (inst.operands[1] != @backingInt(spec.Decoration.linkage_attributes)) return null;
821821 return .{
822 .target_id = @enumFromInt(inst.operands[0]),
822 .target_id = @fromBackingInt(@intCast(inst.operands[0])),
823823 .name = std.mem.sliceTo(std.mem.sliceAsBytes(inst.operands[2 .. inst.operands.len - 1]), 0),
824 .linkage_type = @enumFromInt(inst.operands[inst.operands.len - 1]),
824 .linkage_type = @fromBackingInt(@intCast(inst.operands[inst.operands.len - 1])),
825825 };
826826 }
827827};
......@@ -897,7 +897,7 @@ fn appendExternalObjects(
897897 while (it.next()) |inst| {
898898 const ld = LinkageDecoration.parse(inst) orelse continue;
899899 if (ld.linkage_type != .@"export") continue;
900 try export_map.put(gpa, ld.name, @enumFromInt(@intFromEnum(ld.target_id) + id_offset));
900 try export_map.put(gpa, ld.name, @fromBackingInt(@intCast(@backingInt(ld.target_id) + id_offset)));
901901 }
902902 }
903903
......@@ -920,14 +920,14 @@ fn appendExternalObjects(
920920 while (it.next()) |inst| {
921921 const ld = LinkageDecoration.parse(inst) orelse continue;
922922 if (ld.linkage_type != .import) continue;
923 const remapped_import: Id = @enumFromInt(@intFromEnum(ld.target_id) + id_offset);
923 const remapped_import: Id = @fromBackingInt(@intCast(@backingInt(ld.target_id) + id_offset));
924924
925925 if (export_map.get(ld.name)) |export_id| {
926926 try per_obj_remaps[obj_idx].put(gpa, ld.target_id, export_id);
927927 try resolved_linkage_ids.put(gpa, remapped_import, {});
928928 try resolved_linkage_ids.put(gpa, export_id, {});
929929 log.debug("cross-object resolve: '{s}' import={d} -> export={d}", .{
930 ld.name, @intFromEnum(remapped_import), @intFromEnum(export_id),
930 ld.name, @backingInt(remapped_import), @backingInt(export_id),
931931 });
932932 } else {
933933 has_linkage.* = true;
......@@ -968,7 +968,7 @@ fn appendExternalObjects(
968968 }
969969
970970 if (LinkageDecoration.parse(inst)) |ld| {
971 const remapped: Id = @enumFromInt(@intFromEnum(ld.target_id) + id_offset);
971 const remapped: Id = @fromBackingInt(@intCast(@backingInt(ld.target_id) + id_offset));
972972 if (resolved_linkage_ids.contains(remapped)) {
973973 if (ld.linkage_type == .@"export" and is_obj) {
974974 has_linkage.* = true;
......@@ -979,7 +979,7 @@ fn appendExternalObjects(
979979 }
980980
981981 if (inst.opcode == .OpName and inst.operands.len >= 1) {
982 if (id_remap.contains(@enumFromInt(inst.operands[0]))) continue;
982 if (id_remap.contains(@fromBackingInt(@intCast(inst.operands[0])))) continue;
983983 }
984984
985985 const dest = sections.getSection(Sections.classifyPreambleInst(inst.opcode));
......@@ -990,7 +990,7 @@ fn appendExternalObjects(
990990 var skip_function = false;
991991 while (fn_it.next()) |inst| {
992992 if (inst.opcode == .OpFunction) {
993 skip_function = id_remap.contains(@enumFromInt(inst.operands[1]));
993 skip_function = id_remap.contains(@fromBackingInt(@intCast(inst.operands[1])));
994994 }
995995 if (!skip_function) {
996996 try remapAndAppendInst(gpa, &sections.functions, ext_obj.instructions, inst, id_offset, id_remap, parser);
......@@ -1034,7 +1034,7 @@ fn collectEntryPointInterface(
10341034 }
10351035
10361036 for (mir.internal_globals) |local_id| {
1037 const global_id: Id = @enumFromInt(@intFromEnum(local_id) + id_offset);
1037 const global_id: Id = @fromBackingInt(@intCast(@backingInt(local_id) + id_offset));
10381038 try interface.append(gpa, global_id);
10391039 }
10401040
......@@ -1206,11 +1206,11 @@ fn operandLiteralWordCount(kind: spec.OperandKind, inst: BinaryModule.Instructio
12061206}
12071207
12081208fn remapSingleId(word: *Word, id_offset: Word, id_remap: *const std.AutoHashMapUnmanaged(Id, Id)) void {
1209 const id: Id = @enumFromInt(word.*);
1209 const id: Id = @fromBackingInt(@intCast(word.*));
12101210 if (id == .none) return;
12111211 if (id_remap.get(id)) |final_id| {
1212 word.* = @intFromEnum(final_id);
1212 word.* = @backingInt(final_id);
12131213 } else {
1214 word.* = @intFromEnum(id) + id_offset;
1214 word.* = @backingInt(id) + id_offset;
12151215 }
12161216}
src/link/SpirV/BinaryModule.zig+12-12
......@@ -58,7 +58,7 @@ pub const Instruction = struct {
5858 assert(it.offset < it.words.len);
5959
6060 return Instruction{
61 .opcode = @enumFromInt(it.words[it.offset] & 0xFFFF),
61 .opcode = @fromBackingInt(@intCast(it.words[it.offset] & 0xFFFF)),
6262 .offset = it.offset,
6363 .operands = it.words[it.offset..][1..instruction_len],
6464 };
......@@ -97,11 +97,11 @@ pub const Parser = struct {
9797 }
9898
9999 fn mapSetAndOpcode(set: InstructionSet, opcode: u16) u32 {
100 return (@as(u32, @intFromEnum(set)) << 16) | opcode;
100 return (@as(u32, @backingInt(set)) << 16) | opcode;
101101 }
102102
103103 pub fn getInstSpec(parser: Parser, opcode: Opcode) ?spec.Instruction {
104 const index = parser.opcode_table.get(mapSetAndOpcode(.core, @intFromEnum(opcode))) orelse return null;
104 const index = parser.opcode_table.get(mapSetAndOpcode(.core, @backingInt(opcode))) orelse return null;
105105 return InstructionSet.core.instructions()[index];
106106 }
107107
......@@ -127,10 +127,10 @@ pub const Parser = struct {
127127 const set_name = std.mem.sliceTo(std.mem.sliceAsBytes(operands[1..]), 0);
128128 const set = std.meta.stringToEnum(InstructionSet, set_name) orelse continue;
129129 if (set == .core) continue;
130 try binary.ext_inst_map.put(parser.gpa, @enumFromInt(operands[0]), set);
130 try binary.ext_inst_map.put(parser.gpa, @fromBackingInt(@intCast(operands[0])), set);
131131 },
132132 .OpTypeInt, .OpTypeFloat => {
133 try binary.arith_type_width.put(parser.gpa, @enumFromInt(operands[0]), @intCast(operands[1]));
133 try binary.arith_type_width.put(parser.gpa, @fromBackingInt(@intCast(operands[0])), @intCast(operands[1]));
134134 },
135135 .OpFunction => if (maybe_function_section == null) {
136136 maybe_function_section = inst.offset;
......@@ -145,8 +145,8 @@ pub const Parser = struct {
145145 spec_operands[1].kind == .id_result)
146146 {
147147 if (operands.len >= 2) {
148 if (binary.arith_type_width.get(@enumFromInt(operands[0]))) |width| {
149 try binary.arith_type_width.put(parser.gpa, @enumFromInt(operands[1]), width);
148 if (binary.arith_type_width.get(@fromBackingInt(@intCast(operands[0])))) |width| {
149 try binary.arith_type_width.put(parser.gpa, @fromBackingInt(@intCast(operands[1])), width);
150150 }
151151 }
152152 }
......@@ -165,7 +165,7 @@ pub const Parser = struct {
165165 inst: Instruction,
166166 offsets: *std.ArrayList(u16),
167167 ) !void {
168 const index = parser.opcode_table.get(mapSetAndOpcode(.core, @intFromEnum(inst.opcode))).?;
168 const index = parser.opcode_table.get(mapSetAndOpcode(.core, @backingInt(inst.opcode))).?;
169169 const operands = InstructionSet.core.instructions()[index].operands;
170170
171171 var offset: usize = 0;
......@@ -190,10 +190,10 @@ pub const Parser = struct {
190190 offset = try parser.parseOperandsResultIds(binary, inst, operands[0..2], offset, offsets);
191191
192192 if (offset + 1 >= inst.operands.len) return error.InvalidPhysicalFormat;
193 const set_id: ResultId = @enumFromInt(inst.operands[offset]);
193 const set_id: ResultId = @fromBackingInt(@intCast(inst.operands[offset]));
194194 try offsets.append(parser.gpa, @intCast(offset));
195195 const set = binary.ext_inst_map.get(set_id) orelse {
196 log.err("invalid instruction set {}", .{@intFromEnum(set_id)});
196 log.err("invalid instruction set {}", .{@backingInt(set_id)});
197197 return error.InvalidId;
198198 };
199199 const ext_opcode = std.math.cast(u16, inst.operands[offset + 1]) orelse return error.InvalidPhysicalFormat;
......@@ -304,7 +304,7 @@ pub const Parser = struct {
304304 },
305305 .literal_context_dependent_number => {
306306 assert(inst.opcode == .OpConstant or inst.opcode == .OpSpecConstant);
307 const bit_width = binary.arith_type_width.get(@enumFromInt(inst.operands[0])) orelse {
307 const bit_width = binary.arith_type_width.get(@fromBackingInt(@intCast(inst.operands[0]))) orelse {
308308 log.err("invalid LiteralContextDependentNumber type {}", .{inst.operands[0]});
309309 return error.InvalidId;
310310 };
......@@ -318,7 +318,7 @@ pub const Parser = struct {
318318 .literal_spec_constant_op_integer => unreachable,
319319 .pair_literal_integer_id_ref => {
320320 assert(inst.opcode == .OpSwitch);
321 const bit_width = binary.arith_type_width.get(@enumFromInt(inst.operands[0])) orelse {
321 const bit_width = binary.arith_type_width.get(@fromBackingInt(@intCast(inst.operands[0]))) orelse {
322322 log.err("invalid OpSwitch type {}", .{inst.operands[0]});
323323 return error.InvalidId;
324324 };
src/link/SpirV/dedup_types.zig+10-10
......@@ -35,7 +35,7 @@ pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
3535 },
3636 }
3737 if (inst.operands.len == 0) continue;
38 const target_id: Id = @enumFromInt(inst.operands[0]);
38 const target_id: Id = @fromBackingInt(@intCast(inst.operands[0]));
3939
4040 const gop = try decorations_by_id.getOrPut(gpa, target_id);
4141 if (!gop.found_existing) gop.value_ptr.* = .empty;
......@@ -75,10 +75,10 @@ pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
7575 else => continue,
7676 };
7777 if (result_id_index >= inst.operands.len) continue;
78 const result_id: Id = @enumFromInt(inst.operands[result_id_index]);
78 const result_id: Id = @fromBackingInt(@intCast(inst.operands[result_id_index]));
7979
8080 key_words.items.len = 0;
81 try key_words.append(gpa, @intFromEnum(inst.opcode));
81 try key_words.append(gpa, @backingInt(inst.opcode));
8282
8383 id_offsets.items.len = 0;
8484 parser.parseInstructionResultIds(binary.*, inst, &id_offsets) catch continue;
......@@ -86,8 +86,8 @@ pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
8686 for (inst.operands, 0..) |word, i| {
8787 if (i == result_id_index) continue;
8888 if (std.mem.indexOfScalar(u16, id_offsets.items, @intCast(i)) != null) {
89 const canonical = id_remap.get(@enumFromInt(word)) orelse @as(Id, @enumFromInt(word));
90 try key_words.append(gpa, @intFromEnum(canonical));
89 const canonical = id_remap.get(@fromBackingInt(@intCast(word))) orelse @as(Id, @fromBackingInt(@intCast(word)));
90 try key_words.append(gpa, @backingInt(canonical));
9191 } else {
9292 try key_words.append(gpa, word);
9393 }
......@@ -100,7 +100,7 @@ pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
100100 var hasher = std.hash.Wyhash.init(0);
101101 hasher.update(std.mem.asBytes(&dec_words[0]));
102102 for (dec_words[2..]) |w| {
103 const w_val = if (id_remap.get(@enumFromInt(w))) |c| @intFromEnum(c) else w;
103 const w_val = if (id_remap.get(@fromBackingInt(@intCast(w)))) |c| @backingInt(c) else w;
104104 hasher.update(std.mem.asBytes(&w_val));
105105 }
106106 try dec_hashes.append(gpa, hasher.final());
......@@ -151,7 +151,7 @@ pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
151151 else => unreachable,
152152 };
153153 if (result_id_index < inst.operands.len) {
154 const result_id: Id = @enumFromInt(inst.operands[result_id_index]);
154 const result_id: Id = @fromBackingInt(@intCast(inst.operands[result_id_index]));
155155 if (id_remap.contains(result_id)) continue;
156156 }
157157 }
......@@ -159,7 +159,7 @@ pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
159159 switch (inst.opcode.class()) {
160160 .annotation, .debug => {
161161 if (inst.operands.len > 0) {
162 const target: Id = @enumFromInt(inst.operands[0]);
162 const target: Id = @fromBackingInt(@intCast(inst.operands[0]));
163163 if (id_remap.contains(target)) continue;
164164 }
165165 },
......@@ -186,8 +186,8 @@ pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
186186 max_id = @max(max_id, word.*);
187187 if (maybe_result_id_index != null and i == maybe_result_id_index.?) continue;
188188
189 if (id_remap.get(@enumFromInt(word.*))) |canonical| {
190 word.* = @intFromEnum(canonical);
189 if (id_remap.get(@fromBackingInt(@intCast(word.*)))) |canonical| {
190 word.* = @backingInt(canonical);
191191 max_id = @max(max_id, word.*);
192192 }
193193 }
src/link/SpirV/lower_invocation_globals.zig+33-33
......@@ -94,7 +94,7 @@ const ModuleInfo = struct {
9494
9595 switch (inst.opcode) {
9696 .OpEntryPoint => {
97 const entry_point: ResultId = @enumFromInt(inst.operands[1]);
97 const entry_point: ResultId = @fromBackingInt(@intCast(inst.operands[1]));
9898 const entry = try entry_points.getOrPut(arena, entry_point);
9999 if (entry.found_existing) {
100100 log.err("Entry point type {f} has duplicate definition", .{entry_point});
......@@ -102,8 +102,8 @@ const ModuleInfo = struct {
102102 }
103103 },
104104 .OpTypeFunction => {
105 const fn_type: ResultId = @enumFromInt(inst.operands[0]);
106 const return_type: ResultId = @enumFromInt(inst.operands[1]);
105 const fn_type: ResultId = @fromBackingInt(@intCast(inst.operands[0]));
106 const return_type: ResultId = @fromBackingInt(@intCast(inst.operands[1]));
107107 const param_types: []const ResultId = @ptrCast(inst.operands[2..]);
108108
109109 const entry = try fn_types.getOrPut(fn_type);
......@@ -119,15 +119,15 @@ const ModuleInfo = struct {
119119 },
120120 .OpExtInst => {
121121 // Note: format and set are already verified by parseInstructionResultIds().
122 const global_type: ResultId = @enumFromInt(inst.operands[0]);
123 const result_id: ResultId = @enumFromInt(inst.operands[1]);
124 const set_id: ResultId = @enumFromInt(inst.operands[2]);
122 const global_type: ResultId = @fromBackingInt(@intCast(inst.operands[0]));
123 const result_id: ResultId = @fromBackingInt(@intCast(inst.operands[1]));
124 const set_id: ResultId = @fromBackingInt(@intCast(inst.operands[2]));
125125 const set_inst = inst.operands[3];
126126
127127 const set = binary.ext_inst_map.get(set_id).?;
128128 if (set == .zig and set_inst == 0) {
129129 const initializer: ResultId = if (inst.operands.len >= 5)
130 @enumFromInt(inst.operands[4])
130 @fromBackingInt(@intCast(inst.operands[4]))
131131 else
132132 .none;
133133
......@@ -144,12 +144,12 @@ const ModuleInfo = struct {
144144 return error.InvalidPhysicalFormat;
145145 }
146146
147 maybe_current_function = @enumFromInt(inst.operands[1]);
148 fn_ty_id = @enumFromInt(inst.operands[3]);
147 maybe_current_function = @fromBackingInt(@intCast(inst.operands[1]));
148 fn_ty_id = @fromBackingInt(@intCast(inst.operands[3]));
149149 function_invocation_globals.clearRetainingCapacity();
150150 },
151151 .OpFunctionCall => {
152 const callee: ResultId = @enumFromInt(inst.operands[2]);
152 const callee: ResultId = @fromBackingInt(@intCast(inst.operands[2]));
153153 try calls.put(arena, callee, {});
154154 },
155155 .OpFunctionEnd => {
......@@ -184,7 +184,7 @@ const ModuleInfo = struct {
184184 }
185185
186186 for (result_id_offsets.items) |off| {
187 const result_id: ResultId = @enumFromInt(inst.operands[off]);
187 const result_id: ResultId = @fromBackingInt(@intCast(inst.operands[off]));
188188 if (invocation_globals.contains(result_id)) {
189189 try function_invocation_globals.put(arena, result_id, {});
190190 }
......@@ -355,7 +355,7 @@ const ModuleBuilder = struct {
355355 global_id_base: u32,
356356
357357 fn invocationGlobalId(self: FunctionNewInfo, index: usize) ResultId {
358 return @enumFromInt(self.global_id_base + @as(u32, @intCast(index)));
358 return @fromBackingInt(@intCast(self.global_id_base + @as(u32, @intCast(index))));
359359 }
360360 };
361361
......@@ -384,7 +384,7 @@ const ModuleBuilder = struct {
384384 .entry_point_new_id_base = undefined,
385385 .new_functions_section = null,
386386 };
387 self.entry_point_new_id_base = @intFromEnum(self.allocIds(@intCast(info.entry_points.count())));
387 self.entry_point_new_id_base = @backingInt(self.allocIds(@intCast(info.entry_points.count())));
388388 return self;
389389 }
390390
......@@ -394,7 +394,7 @@ const ModuleBuilder = struct {
394394
395395 fn allocIds(self: *ModuleBuilder, n: u32) ResultId {
396396 defer self.id_bound += n;
397 return @enumFromInt(self.id_bound);
397 return @fromBackingInt(@intCast(self.id_bound));
398398 }
399399
400400 fn finalize(self: *ModuleBuilder, arena: Allocator, binary: *BinaryModule) !void {
......@@ -435,7 +435,7 @@ const ModuleBuilder = struct {
435435
436436 switch (inst.opcode) {
437437 .OpName => {
438 const id: ResultId = @enumFromInt(inst.operands[0]);
438 const id: ResultId = @fromBackingInt(@intCast(inst.operands[0]));
439439 if (info.invocation_globals.contains(id)) {
440440 try self.global_names.put(self.arena, id, inst.operands[1..]);
441441 continue;
......@@ -443,12 +443,12 @@ const ModuleBuilder = struct {
443443 if (info.dead_initializers.contains(id)) continue;
444444 },
445445 .OpExtInstImport => {
446 const set_id: ResultId = @enumFromInt(inst.operands[0]);
446 const set_id: ResultId = @fromBackingInt(@intCast(inst.operands[0]));
447447 const set = binary.ext_inst_map.get(set_id).?;
448448 if (set == .zig) continue;
449449 },
450450 .OpExtInst => {
451 const set_id: ResultId = @enumFromInt(inst.operands[2]);
451 const set_id: ResultId = @fromBackingInt(@intCast(inst.operands[2]));
452452 const set_inst = inst.operands[3];
453453 const set = binary.ext_inst_map.get(set_id).?;
454454 if (set == .zig and set_inst == 0) {
......@@ -456,11 +456,11 @@ const ModuleBuilder = struct {
456456 }
457457 },
458458 .OpEntryPoint => {
459 const original_id: ResultId = @enumFromInt(inst.operands[1]);
459 const original_id: ResultId = @fromBackingInt(@intCast(inst.operands[1]));
460460 const fn_info = info.functions.get(original_id).?;
461461 if (fn_info.invocation_globals.count() > 0) {
462462 const new_id_index = info.entry_points.getIndex(original_id).?;
463 const new_id: ResultId = @enumFromInt(self.entry_point_new_id_base + new_id_index);
463 const new_id: ResultId = @fromBackingInt(@intCast(self.entry_point_new_id_base + new_id_index));
464464 try self.section.emitRaw(self.arena, .OpEntryPoint, inst.operands.len);
465465 self.section.writeWord(inst.operands[0]);
466466 self.section.writeOperand(ResultId, new_id);
......@@ -471,11 +471,11 @@ const ModuleBuilder = struct {
471471 continue;
472472 },
473473 .OpExecutionMode, .OpExecutionModeId => {
474 const original_id: ResultId = @enumFromInt(inst.operands[0]);
474 const original_id: ResultId = @fromBackingInt(@intCast(inst.operands[0]));
475475 const fn_info = info.functions.get(original_id).?;
476476 if (fn_info.invocation_globals.count() > 0) {
477477 const new_id_index = info.entry_points.getIndex(original_id).?;
478 const new_id: ResultId = @enumFromInt(self.entry_point_new_id_base + new_id_index);
478 const new_id: ResultId = @fromBackingInt(@intCast(self.entry_point_new_id_base + new_id_index));
479479 try self.section.emitRaw(self.arena, inst.opcode, inst.operands.len);
480480 self.section.writeOperand(ResultId, new_id);
481481 self.section.writeWords(inst.operands[1..]);
......@@ -512,7 +512,7 @@ const ModuleBuilder = struct {
512512 const new_type = try self.internFunctionType(fn_info.return_type, new_param_types);
513513 try self.function_new_info.put(self.arena, func, .{
514514 .new_function_type = new_type,
515 .global_id_base = @intFromEnum(self.allocIds(@intCast(invocation_global_count))),
515 .global_id_base = @backingInt(self.allocIds(@intCast(invocation_global_count))),
516516 });
517517 }
518518 }
......@@ -583,20 +583,20 @@ const ModuleBuilder = struct {
583583
584584 // Replace the result-ids with the global's new result-id if required.
585585 for (result_id_offsets.items) |off| {
586 const result_id: ResultId = @enumFromInt(operands.items[off]);
586 const result_id: ResultId = @fromBackingInt(@intCast(operands.items[off]));
587587 if (info.invocation_globals.contains(result_id)) {
588588 const func = maybe_current_function.?;
589589 const new_info = self.function_new_info.get(func).?;
590590 const fn_info = info.functions.get(func).?;
591591 const index = fn_info.invocation_globals.getIndex(result_id).?;
592 operands.items[off] = @intFromEnum(new_info.invocationGlobalId(index));
592 operands.items[off] = @backingInt(new_info.invocationGlobalId(index));
593593 }
594594 }
595595
596596 switch (inst.opcode) {
597597 .OpFunction => {
598598 // Re-declare the function with the new parameters.
599 const func: ResultId = @enumFromInt(operands.items[1]);
599 const func: ResultId = @fromBackingInt(@intCast(operands.items[1]));
600600 if (info.dead_initializers.contains(func)) {
601601 skip_until_end = true;
602602 continue;
......@@ -628,7 +628,7 @@ const ModuleBuilder = struct {
628628 .OpFunctionCall => {
629629 // Add the required invocation globals to the function's new parameter list.
630630 const caller = maybe_current_function.?;
631 const callee: ResultId = @enumFromInt(operands.items[2]);
631 const callee: ResultId = @fromBackingInt(@intCast(operands.items[2]));
632632 const caller_info = info.functions.get(caller).?;
633633 const callee_info = info.functions.get(callee).?;
634634 const caller_new_info = self.function_new_info.get(caller).?;
......@@ -663,7 +663,7 @@ const ModuleBuilder = struct {
663663 for (info.entry_points.keys(), 0..) |func, entry_point_index| {
664664 const fn_info = info.functions.get(func).?;
665665 if (fn_info.invocation_globals.count() == 0) continue;
666 const ep_id: ResultId = @enumFromInt(self.entry_point_new_id_base + @as(u32, @intCast(entry_point_index)));
666 const ep_id: ResultId = @fromBackingInt(@intCast(self.entry_point_new_id_base + @as(u32, @intCast(entry_point_index))));
667667 const fn_type = self.function_types.get(.{
668668 .return_type = fn_info.return_type,
669669 .param_types = fn_info.param_types,
......@@ -677,9 +677,9 @@ const ModuleBuilder = struct {
677677 });
678678
679679 // Emit OpFunctionParameter instructions for the original kernel's parameters.
680 const params_id_base: u32 = @intFromEnum(self.allocIds(@intCast(fn_info.param_types.len)));
680 const params_id_base: u32 = @backingInt(self.allocIds(@intCast(fn_info.param_types.len)));
681681 for (fn_info.param_types, 0..) |param_type, i| {
682 const id: ResultId = @enumFromInt(params_id_base + @as(u32, @intCast(i)));
682 const id: ResultId = @fromBackingInt(@intCast(params_id_base + @as(u32, @intCast(i))));
683683 try self.section.emit(arena, .OpFunctionParameter, .{
684684 .id_result_type = param_type,
685685 .id_result = id,
......@@ -703,11 +703,11 @@ const ModuleBuilder = struct {
703703 }
704704
705705 // Declare the IDs of the invocation globals.
706 const global_id_base: u32 = @intFromEnum(self.allocIds(@intCast(all_function_invocation_globals.count())));
706 const global_id_base: u32 = @backingInt(self.allocIds(@intCast(all_function_invocation_globals.count())));
707707 for (all_function_invocation_globals.keys(), 0..) |global, i| {
708708 const global_info = info.invocation_globals.get(global).?;
709709
710 const id: ResultId = @enumFromInt(global_id_base + @as(u32, @intCast(i)));
710 const id: ResultId = @fromBackingInt(@intCast(global_id_base + @as(u32, @intCast(i))));
711711 try self.section.emit(arena, .OpVariable, .{
712712 .id_result_type = global_info.ty,
713713 .id_result = id,
......@@ -764,13 +764,13 @@ const ModuleBuilder = struct {
764764 // Add the invocation globals
765765 for (callee_info.invocation_globals.keys()) |global| {
766766 const index = all_globals.getIndex(global).?;
767 const id: ResultId = @enumFromInt(global_id_base + @as(u32, @intCast(index)));
767 const id: ResultId = @fromBackingInt(@intCast(global_id_base + @as(u32, @intCast(index))));
768768 self.section.writeOperand(ResultId, id);
769769 }
770770
771771 // Add the arguments
772772 for (0..callee_info.param_types.len) |index| {
773 const id: ResultId = @enumFromInt(params_id_base + @as(u32, @intCast(index)));
773 const id: ResultId = @fromBackingInt(@intCast(params_id_base + @as(u32, @intCast(index))));
774774 self.section.writeOperand(ResultId, id);
775775 }
776776 }
src/link/SpirV/prune_unused.zig+7-7
......@@ -59,11 +59,11 @@ pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
5959 while (it.next()) |inst| {
6060 if (inst.offset >= binary.functions_start) break;
6161 if (inst.opcode == .OpDecorate and inst.operands.len >= 2 and
62 inst.operands[1] == @intFromEnum(spec.Decoration.linkage_attributes))
62 inst.operands[1] == @backingInt(spec.Decoration.linkage_attributes))
6363 {
6464 // Last word after the string is the linkage type; Export = 0.
65 if (inst.operands[inst.operands.len - 1] == @intFromEnum(spec.LinkageType.@"export")) {
66 const target: ResultId = @enumFromInt(inst.operands[0]);
65 if (inst.operands[inst.operands.len - 1] == @backingInt(spec.LinkageType.@"export")) {
66 const target: ResultId = @fromBackingInt(@intCast(inst.operands[0]));
6767 if (id_to_index.get(target)) |index| {
6868 alive.set(index);
6969 }
......@@ -133,7 +133,7 @@ pub fn run(parser: *BinaryModule.Parser, binary: *BinaryModule) !void {
133133 } else {
134134 // annotation-style: emit only if the target id is alive
135135 if (inst.operands.len > 0) {
136 const target: ResultId = @enumFromInt(inst.operands[0]);
136 const target: ResultId = @fromBackingInt(@intCast(inst.operands[0]));
137137 if (id_to_index.get(target)) |idx| {
138138 if (!alive.isSet(idx)) continue;
139139 } else continue;
......@@ -199,14 +199,14 @@ fn markAlive(
199199 var i = start;
200200 while (i < end) : (i += 1) {
201201 const off = id_offset_buf.items[i];
202 const id: ResultId = @enumFromInt(inst.operands[off]);
202 const id: ResultId = @fromBackingInt(@intCast(inst.operands[off]));
203203 const index = id_to_index.get(id) orelse continue;
204204 if (alive.isSet(index)) continue;
205205 alive.set(index);
206206
207207 const offset = code_offsets.items[index];
208208 const ref_inst = BinaryModule.Instruction{
209 .opcode = @enumFromInt(binary.instructions[offset] & 0xFFFF),
209 .opcode = @fromBackingInt(@intCast(binary.instructions[offset] & 0xFFFF)),
210210 .offset = offset,
211211 .operands = blk: {
212212 const l = binary.instructions[offset] >> 16;
......@@ -231,7 +231,7 @@ fn markAlive(
231231fn getResultId(inst: BinaryModule.Instruction, inst_spec: spec.Instruction) ?ResultId {
232232 for (0..@min(2, inst_spec.operands.len)) |i| {
233233 if (inst_spec.operands[i].kind == .id_result) {
234 if (i < inst.operands.len) return @enumFromInt(inst.operands[i]);
234 if (i < inst.operands.len) return @fromBackingInt(@intCast(inst.operands[i]));
235235 }
236236 }
237237 return null;
src/link/Wasm.zig+161-161
......@@ -332,7 +332,7 @@ pub const ObjectIndex = enum(u32) {
332332 _,
333333
334334 pub fn ptr(index: ObjectIndex, wasm: *const Wasm) *Object {
335 return &wasm.objects.items[@intFromEnum(index)];
335 return &wasm.objects.items[@backingInt(index)];
336336 }
337337};
338338
......@@ -341,7 +341,7 @@ pub const FunctionIndex = enum(u32) {
341341 _,
342342
343343 pub fn ptr(index: FunctionIndex, wasm: *const Wasm) *FunctionImport.Resolution {
344 return &wasm.functions.keys()[@intFromEnum(index)];
344 return &wasm.functions.keys()[@backingInt(index)];
345345 }
346346
347347 pub fn fromIpNav(wasm: *const Wasm, nav_index: InternPool.Nav.Index) ?FunctionIndex {
......@@ -349,7 +349,7 @@ pub const FunctionIndex = enum(u32) {
349349 }
350350
351351 pub fn fromTagIndexType(wasm: *const Wasm, tag_type: InternPool.Index) ?FunctionIndex {
352 const zcu_func: ZcuFunc.Index = @enumFromInt(wasm.zcu_funcs.getIndex(tag_type) orelse return null);
352 const zcu_func: ZcuFunc.Index = @fromBackingInt(@intCast(wasm.zcu_funcs.getIndex(tag_type) orelse return null));
353353 return fromResolution(wasm, .pack(wasm, .{ .zcu_func = zcu_func }));
354354 }
355355
......@@ -364,7 +364,7 @@ pub const FunctionIndex = enum(u32) {
364364
365365 pub fn fromResolution(wasm: *const Wasm, resolution: FunctionImport.Resolution) ?FunctionIndex {
366366 const i = wasm.functions.getIndex(resolution) orelse return null;
367 return @enumFromInt(i);
367 return @fromBackingInt(@intCast(i));
368368 }
369369};
370370
......@@ -386,7 +386,7 @@ pub const OutputFunctionIndex = enum(u32) {
386386 }
387387
388388 pub fn fromFunctionIndex(wasm: *const Wasm, index: FunctionIndex) OutputFunctionIndex {
389 return @enumFromInt(wasm.flush_buffer.function_imports.entries.len + @intFromEnum(index));
389 return @fromBackingInt(@intCast(wasm.flush_buffer.function_imports.entries.len + @backingInt(index)));
390390 }
391391
392392 pub fn fromObjectFunction(wasm: *const Wasm, index: ObjectFunctionIndex) OutputFunctionIndex {
......@@ -428,7 +428,7 @@ pub const OutputFunctionIndex = enum(u32) {
428428 }
429429
430430 pub fn fromSymbolName(wasm: *const Wasm, name: String) OutputFunctionIndex {
431 if (wasm.flush_buffer.function_imports.getIndex(name)) |i| return @enumFromInt(i);
431 if (wasm.flush_buffer.function_imports.getIndex(name)) |i| return @fromBackingInt(@intCast(i));
432432 return fromFunctionIndex(wasm, FunctionIndex.fromSymbolName(wasm, name) orelse {
433433 if (std.debug.runtime_safety) {
434434 std.debug.panic("function index for symbol not found: {s}", .{name.slice(wasm)});
......@@ -442,7 +442,7 @@ pub const GlobalIndex = enum(u32) {
442442 _,
443443
444444 /// This is only accurate when not emitting an object and there is a Zcu.
445 pub const stack_pointer: GlobalIndex = @enumFromInt(0);
445 pub const stack_pointer: GlobalIndex = @fromBackingInt(@intCast(0));
446446
447447 /// Same as `stack_pointer` but with a safety assertion.
448448 pub fn stackPointer(wasm: *const Wasm) ObjectGlobal.Index {
......@@ -453,16 +453,16 @@ pub const GlobalIndex = enum(u32) {
453453 }
454454
455455 pub fn ptr(index: GlobalIndex, f: *const Flush) *Wasm.GlobalImport.Resolution {
456 return &f.globals.items[@intFromEnum(index)];
456 return &f.globals.items[@backingInt(index)];
457457 }
458458
459459 pub fn fromIpNav(wasm: *const Wasm, nav_index: InternPool.Nav.Index) ?GlobalIndex {
460460 const i = wasm.globals.getIndex(.fromIpNav(wasm, nav_index)) orelse return null;
461 return @enumFromInt(i);
461 return @fromBackingInt(@intCast(i));
462462 }
463463
464464 pub fn fromObjectGlobal(wasm: *const Wasm, i: ObjectGlobalIndex) GlobalIndex {
465 return @enumFromInt(wasm.globals.getIndex(.fromObjectGlobal(wasm, i)).?);
465 return @fromBackingInt(@intCast(wasm.globals.getIndex(.fromObjectGlobal(wasm, i)).?));
466466 }
467467
468468 pub fn fromObjectGlobalHandlingWeak(wasm: *const Wasm, index: ObjectGlobalIndex) GlobalIndex {
......@@ -475,7 +475,7 @@ pub const GlobalIndex = enum(u32) {
475475
476476 pub fn fromSymbolName(wasm: *const Wasm, name: String) GlobalIndex {
477477 const import = wasm.object_global_imports.getPtr(name).?;
478 return @enumFromInt(wasm.globals.getIndex(import.resolution).?);
478 return @fromBackingInt(@intCast(wasm.globals.getIndex(import.resolution).?));
479479 }
480480};
481481
......@@ -484,16 +484,16 @@ pub const TableIndex = enum(u32) {
484484 _,
485485
486486 pub fn ptr(index: TableIndex, f: *const Flush) *Wasm.TableImport.Resolution {
487 return &f.tables.items[@intFromEnum(index)];
487 return &f.tables.items[@backingInt(index)];
488488 }
489489
490490 pub fn fromObjectTable(wasm: *const Wasm, i: ObjectTableIndex) TableIndex {
491 return @enumFromInt(wasm.tables.getIndex(.fromObjectTable(i)).?);
491 return @fromBackingInt(@intCast(wasm.tables.getIndex(.fromObjectTable(i)).?));
492492 }
493493
494494 pub fn fromSymbolName(wasm: *const Wasm, name: String) TableIndex {
495495 const import = wasm.object_table_imports.getPtr(name).?;
496 return @enumFromInt(wasm.tables.getIndex(import.resolution).?);
496 return @fromBackingInt(@intCast(wasm.tables.getIndex(import.resolution).?));
497497 }
498498};
499499
......@@ -524,7 +524,7 @@ pub const SourceLocation = enum(u32) {
524524 return switch (unpacked) {
525525 .zig_object_nofile => .zig_object_nofile,
526526 .none => .none,
527 .object_index => |object_index| @enumFromInt(@intFromEnum(object_index)),
527 .object_index => |object_index| @fromBackingInt(@intCast(@backingInt(object_index))),
528528 .source_location_index => @panic("TODO"),
529529 };
530530 }
......@@ -534,8 +534,8 @@ pub const SourceLocation = enum(u32) {
534534 .zig_object_nofile => .zig_object_nofile,
535535 .none => .none,
536536 _ => {
537 const i = @intFromEnum(sl);
538 if (i < wasm.objects.items.len) return .{ .object_index = @enumFromInt(i) };
537 const i = @backingInt(sl);
538 if (i < wasm.objects.items.len) return .{ .object_index = @fromBackingInt(@intCast(i)) };
539539 const sl_index = i - wasm.objects.items.len;
540540 _ = sl_index;
541541 @panic("TODO");
......@@ -748,11 +748,11 @@ pub const NavsObjIndex = enum(u32) {
748748 _,
749749
750750 pub fn key(i: @This(), wasm: *const Wasm) *InternPool.Nav.Index {
751 return &wasm.navs_obj.keys()[@intFromEnum(i)];
751 return &wasm.navs_obj.keys()[@backingInt(i)];
752752 }
753753
754754 pub fn value(i: @This(), wasm: *const Wasm) *ZcuDataObj {
755 return &wasm.navs_obj.values()[@intFromEnum(i)];
755 return &wasm.navs_obj.values()[@backingInt(i)];
756756 }
757757
758758 pub fn name(i: @This(), wasm: *const Wasm) [:0]const u8 {
......@@ -768,11 +768,11 @@ pub const NavsExeIndex = enum(u32) {
768768 _,
769769
770770 pub fn key(i: @This(), wasm: *const Wasm) *InternPool.Nav.Index {
771 return &wasm.navs_exe.keys()[@intFromEnum(i)];
771 return &wasm.navs_exe.keys()[@backingInt(i)];
772772 }
773773
774774 pub fn value(i: @This(), wasm: *const Wasm) *ZcuDataExe {
775 return &wasm.navs_exe.values()[@intFromEnum(i)];
775 return &wasm.navs_exe.values()[@backingInt(i)];
776776 }
777777
778778 pub fn name(i: @This(), wasm: *const Wasm) [:0]const u8 {
......@@ -788,11 +788,11 @@ pub const UavsObjIndex = enum(u32) {
788788 _,
789789
790790 pub fn key(i: @This(), wasm: *const Wasm) *InternPool.Index {
791 return &wasm.uavs_obj.keys()[@intFromEnum(i)];
791 return &wasm.uavs_obj.keys()[@backingInt(i)];
792792 }
793793
794794 pub fn value(i: @This(), wasm: *const Wasm) *ZcuDataObj {
795 return &wasm.uavs_obj.values()[@intFromEnum(i)];
795 return &wasm.uavs_obj.values()[@backingInt(i)];
796796 }
797797};
798798
......@@ -801,11 +801,11 @@ pub const UavsExeIndex = enum(u32) {
801801 _,
802802
803803 pub fn key(i: @This(), wasm: *const Wasm) *InternPool.Index {
804 return &wasm.uavs_exe.keys()[@intFromEnum(i)];
804 return &wasm.uavs_exe.keys()[@backingInt(i)];
805805 }
806806
807807 pub fn value(i: @This(), wasm: *const Wasm) *ZcuDataExe {
808 return &wasm.uavs_exe.values()[@intFromEnum(i)];
808 return &wasm.uavs_exe.values()[@backingInt(i)];
809809 }
810810};
811811
......@@ -899,11 +899,11 @@ pub const ZcuFunc = union {
899899 _,
900900
901901 pub fn key(i: @This(), wasm: *const Wasm) *InternPool.Index {
902 return &wasm.zcu_funcs.keys()[@intFromEnum(i)];
902 return &wasm.zcu_funcs.keys()[@backingInt(i)];
903903 }
904904
905905 pub fn value(i: @This(), wasm: *const Wasm) *ZcuFunc {
906 return &wasm.zcu_funcs.values()[@intFromEnum(i)];
906 return &wasm.zcu_funcs.values()[@backingInt(i)];
907907 }
908908
909909 pub fn name(i: @This(), wasm: *const Wasm) [:0]const u8 {
......@@ -972,7 +972,7 @@ pub const FunctionImport = extern struct {
972972 // Next, index into `zcu_funcs`.
973973 _,
974974
975 const first_object_function = @intFromEnum(Resolution.__wasm_init_tls) + 1;
975 const first_object_function = @backingInt(Resolution.__wasm_init_tls) + 1;
976976
977977 pub const Unpacked = union(enum) {
978978 unresolved,
......@@ -992,14 +992,14 @@ pub const FunctionImport = extern struct {
992992 .__wasm_init_memory => .__wasm_init_memory,
993993 .__wasm_init_tls => .__wasm_init_tls,
994994 _ => {
995 const object_function_index = @intFromEnum(r) - first_object_function;
995 const object_function_index = @backingInt(r) - first_object_function;
996996
997997 const zcu_func_index = if (object_function_index < wasm.object_functions.items.len)
998 return .{ .object_function = @enumFromInt(object_function_index) }
998 return .{ .object_function = @fromBackingInt(@intCast(object_function_index)) }
999999 else
10001000 object_function_index - wasm.object_functions.items.len;
10011001
1002 return .{ .zcu_func = @enumFromInt(zcu_func_index) };
1002 return .{ .zcu_func = @fromBackingInt(@intCast(zcu_func_index)) };
10031003 },
10041004 };
10051005 }
......@@ -1011,8 +1011,8 @@ pub const FunctionImport = extern struct {
10111011 .__wasm_call_ctors => .__wasm_call_ctors,
10121012 .__wasm_init_memory => .__wasm_init_memory,
10131013 .__wasm_init_tls => .__wasm_init_tls,
1014 .object_function => |i| @enumFromInt(first_object_function + @intFromEnum(i)),
1015 .zcu_func => |i| @enumFromInt(first_object_function + wasm.object_functions.items.len + @intFromEnum(i)),
1014 .object_function => |i| @fromBackingInt(@intCast(first_object_function + @backingInt(i))),
1015 .zcu_func => |i| @fromBackingInt(@intCast(first_object_function + wasm.object_functions.items.len + @backingInt(i))),
10161016 };
10171017 }
10181018
......@@ -1027,7 +1027,7 @@ pub const FunctionImport = extern struct {
10271027 }
10281028
10291029 pub fn fromIpIndex(wasm: *const Wasm, ip_index: InternPool.Index) Resolution {
1030 return fromZcuFunc(wasm, @enumFromInt(wasm.zcu_funcs.getIndex(ip_index).?));
1030 return fromZcuFunc(wasm, @fromBackingInt(@intCast(wasm.zcu_funcs.getIndex(ip_index).?)));
10311031 }
10321032
10331033 pub fn fromObjectFunction(wasm: *const Wasm, object_function: ObjectFunctionIndex) Resolution {
......@@ -1072,11 +1072,11 @@ pub const FunctionImport = extern struct {
10721072 _,
10731073
10741074 pub fn key(index: Index, wasm: *const Wasm) *String {
1075 return &wasm.object_function_imports.keys()[@intFromEnum(index)];
1075 return &wasm.object_function_imports.keys()[@backingInt(index)];
10761076 }
10771077
10781078 pub fn value(index: Index, wasm: *const Wasm) *FunctionImport {
1079 return &wasm.object_function_imports.values()[@intFromEnum(index)];
1079 return &wasm.object_function_imports.values()[@backingInt(index)];
10801080 }
10811081
10821082 pub fn symbolName(index: Index, wasm: *const Wasm) String {
......@@ -1139,7 +1139,7 @@ pub const GlobalImport = extern struct {
11391139 // Next, index into `navs_obj` or `navs_exe` depending on whether emitting an object.
11401140 _,
11411141
1142 const first_object_global = @intFromEnum(Resolution.__tls_size) + 1;
1142 const first_object_global = @backingInt(Resolution.__tls_size) + 1;
11431143
11441144 pub const Unpacked = union(enum) {
11451145 unresolved,
......@@ -1164,17 +1164,17 @@ pub const GlobalImport = extern struct {
11641164 .__tls_base => .__tls_base,
11651165 .__tls_size => .__tls_size,
11661166 _ => {
1167 const i: u32 = @intFromEnum(r);
1167 const i: u32 = @backingInt(r);
11681168 const object_global_index = i - first_object_global;
11691169 if (object_global_index < wasm.object_globals.items.len)
1170 return .{ .object_global = @enumFromInt(object_global_index) };
1170 return .{ .object_global = @fromBackingInt(@intCast(object_global_index)) };
11711171 const comp = wasm.base.comp;
11721172 const is_obj = comp.config.output_mode == .Obj;
11731173 const nav_index = object_global_index - wasm.object_globals.items.len;
11741174 return if (is_obj) .{
1175 .nav_obj = @enumFromInt(nav_index),
1175 .nav_obj = @fromBackingInt(@intCast(nav_index)),
11761176 } else .{
1177 .nav_exe = @enumFromInt(nav_index),
1177 .nav_exe = @fromBackingInt(@intCast(nav_index)),
11781178 };
11791179 },
11801180 };
......@@ -1189,9 +1189,9 @@ pub const GlobalImport = extern struct {
11891189 .__tls_align => .__tls_align,
11901190 .__tls_base => .__tls_base,
11911191 .__tls_size => .__tls_size,
1192 .object_global => |i| @enumFromInt(first_object_global + @intFromEnum(i)),
1193 .nav_obj => |i| @enumFromInt(first_object_global + wasm.object_globals.items.len + @intFromEnum(i)),
1194 .nav_exe => |i| @enumFromInt(first_object_global + wasm.object_globals.items.len + @intFromEnum(i)),
1192 .object_global => |i| @fromBackingInt(@intCast(first_object_global + @backingInt(i))),
1193 .nav_obj => |i| @fromBackingInt(@intCast(first_object_global + wasm.object_globals.items.len + @backingInt(i))),
1194 .nav_exe => |i| @fromBackingInt(@intCast(first_object_global + wasm.object_globals.items.len + @backingInt(i))),
11951195 };
11961196 }
11971197
......@@ -1199,9 +1199,9 @@ pub const GlobalImport = extern struct {
11991199 const comp = wasm.base.comp;
12001200 const is_obj = comp.config.output_mode == .Obj;
12011201 return pack(wasm, if (is_obj) .{
1202 .nav_obj = @enumFromInt(wasm.navs_obj.getIndex(ip_nav).?),
1202 .nav_obj = @fromBackingInt(@intCast(wasm.navs_obj.getIndex(ip_nav).?)),
12031203 } else .{
1204 .nav_exe = @enumFromInt(wasm.navs_exe.getIndex(ip_nav).?),
1204 .nav_exe = @fromBackingInt(@intCast(wasm.navs_exe.getIndex(ip_nav).?)),
12051205 });
12061206 }
12071207
......@@ -1230,11 +1230,11 @@ pub const GlobalImport = extern struct {
12301230 _,
12311231
12321232 pub fn key(index: Index, wasm: *const Wasm) *String {
1233 return &wasm.object_global_imports.keys()[@intFromEnum(index)];
1233 return &wasm.object_global_imports.keys()[@backingInt(index)];
12341234 }
12351235
12361236 pub fn value(index: Index, wasm: *const Wasm) *GlobalImport {
1237 return &wasm.object_global_imports.values()[@intFromEnum(index)];
1237 return &wasm.object_global_imports.values()[@backingInt(index)];
12381238 }
12391239
12401240 pub fn symbolName(index: Index, wasm: *const Wasm) String {
......@@ -1321,7 +1321,7 @@ pub const TableImport = extern struct {
13211321 // Next, index into `object_tables`.
13221322 _,
13231323
1324 const first_object_table = @intFromEnum(Resolution.__indirect_function_table) + 1;
1324 const first_object_table = @backingInt(Resolution.__indirect_function_table) + 1;
13251325
13261326 pub const Unpacked = union(enum) {
13271327 unresolved,
......@@ -1333,7 +1333,7 @@ pub const TableImport = extern struct {
13331333 return switch (r) {
13341334 .unresolved => .unresolved,
13351335 .__indirect_function_table => .__indirect_function_table,
1336 _ => .{ .object_table = @enumFromInt(@intFromEnum(r) - first_object_table) },
1336 _ => .{ .object_table = @fromBackingInt(@intCast(@backingInt(r) - first_object_table)) },
13371337 };
13381338 }
13391339
......@@ -1341,7 +1341,7 @@ pub const TableImport = extern struct {
13411341 return switch (unpacked) {
13421342 .unresolved => .unresolved,
13431343 .__indirect_function_table => .__indirect_function_table,
1344 .object_table => |i| @enumFromInt(first_object_table + @intFromEnum(i)),
1344 .object_table => |i| @fromBackingInt(@intCast(first_object_table + @backingInt(i))),
13451345 };
13461346 }
13471347
......@@ -1375,11 +1375,11 @@ pub const TableImport = extern struct {
13751375 _,
13761376
13771377 pub fn key(index: Index, wasm: *const Wasm) *String {
1378 return &wasm.object_table_imports.keys()[@intFromEnum(index)];
1378 return &wasm.object_table_imports.keys()[@backingInt(index)];
13791379 }
13801380
13811381 pub fn value(index: Index, wasm: *const Wasm) *TableImport {
1382 return &wasm.object_table_imports.values()[@intFromEnum(index)];
1382 return &wasm.object_table_imports.values()[@backingInt(index)];
13831383 }
13841384
13851385 pub fn name(index: Index, wasm: *const Wasm) String {
......@@ -1434,7 +1434,7 @@ pub const ObjectTableIndex = enum(u32) {
14341434 _,
14351435
14361436 pub fn ptr(index: ObjectTableIndex, wasm: *const Wasm) *Table {
1437 return &wasm.object_tables.items[@intFromEnum(index)];
1437 return &wasm.object_tables.items[@backingInt(index)];
14381438 }
14391439
14401440 pub fn chaseWeak(i: ObjectTableIndex, wasm: *const Wasm) ObjectTableIndex {
......@@ -1452,7 +1452,7 @@ pub const ObjectGlobalIndex = enum(u32) {
14521452 _,
14531453
14541454 pub fn ptr(index: ObjectGlobalIndex, wasm: *const Wasm) *ObjectGlobal {
1455 return &wasm.object_globals.items[@intFromEnum(index)];
1455 return &wasm.object_globals.items[@backingInt(index)];
14561456 }
14571457
14581458 pub fn name(index: ObjectGlobalIndex, wasm: *const Wasm) OptionalString {
......@@ -1480,7 +1480,7 @@ pub const ObjectMemory = extern struct {
14801480 _,
14811481
14821482 pub fn ptr(index: Index, wasm: *const Wasm) *ObjectMemory {
1483 return &wasm.object_memories.items[@intFromEnum(index)];
1483 return &wasm.object_memories.items[@backingInt(index)];
14841484 }
14851485 };
14861486
......@@ -1501,11 +1501,11 @@ pub const ObjectFunctionIndex = enum(u32) {
15011501 _,
15021502
15031503 pub fn ptr(index: ObjectFunctionIndex, wasm: *const Wasm) *ObjectFunction {
1504 return &wasm.object_functions.items[@intFromEnum(index)];
1504 return &wasm.object_functions.items[@backingInt(index)];
15051505 }
15061506
15071507 pub fn toOptional(i: ObjectFunctionIndex) OptionalObjectFunctionIndex {
1508 const result: OptionalObjectFunctionIndex = @enumFromInt(@intFromEnum(i));
1508 const result: OptionalObjectFunctionIndex = @fromBackingInt(@intCast(@backingInt(i)));
15091509 assert(result != .none);
15101510 return result;
15111511 }
......@@ -1527,7 +1527,7 @@ pub const OptionalObjectFunctionIndex = enum(u32) {
15271527
15281528 pub fn unwrap(i: OptionalObjectFunctionIndex) ?ObjectFunctionIndex {
15291529 if (i == .none) return null;
1530 return @enumFromInt(@intFromEnum(i));
1530 return @fromBackingInt(@intCast(@backingInt(i)));
15311531 }
15321532};
15331533
......@@ -1562,7 +1562,7 @@ pub const ObjectDataSegment = extern struct {
15621562 _,
15631563
15641564 pub fn ptr(i: Index, wasm: *const Wasm) *ObjectDataSegment {
1565 return &wasm.object_data_segments.items[@intFromEnum(i)];
1565 return &wasm.object_data_segments.items[@backingInt(i)];
15661566 }
15671567 };
15681568
......@@ -1588,7 +1588,7 @@ pub const ObjectData = extern struct {
15881588 _,
15891589
15901590 pub fn ptr(i: Index, wasm: *const Wasm) *ObjectData {
1591 return &wasm.object_datas.items[@intFromEnum(i)];
1591 return &wasm.object_datas.items[@backingInt(i)];
15921592 }
15931593 };
15941594};
......@@ -1609,7 +1609,7 @@ pub const ObjectDataImport = extern struct {
16091609 /// Next, index into `navs_obj` or `navs_exe` depending on whether emitting an object.
16101610 _,
16111611
1612 const first_object = @intFromEnum(Resolution.__heap_end) + 1;
1612 const first_object = @backingInt(Resolution.__heap_end) + 1;
16131613
16141614 pub const Unpacked = union(enum) {
16151615 unresolved,
......@@ -1632,10 +1632,10 @@ pub const ObjectDataImport = extern struct {
16321632 .__heap_base => .__heap_base,
16331633 .__heap_end => .__heap_end,
16341634 _ => {
1635 const object_index = @intFromEnum(r) - first_object;
1635 const object_index = @backingInt(r) - first_object;
16361636
16371637 const uav_index = if (object_index < wasm.object_datas.items.len)
1638 return .{ .object = @enumFromInt(object_index) }
1638 return .{ .object = @fromBackingInt(@intCast(object_index)) }
16391639 else
16401640 object_index - wasm.object_datas.items.len;
16411641
......@@ -1643,18 +1643,18 @@ pub const ObjectDataImport = extern struct {
16431643 const is_obj = comp.config.output_mode == .Obj;
16441644 if (is_obj) {
16451645 const nav_index = if (uav_index < wasm.uavs_obj.entries.len)
1646 return .{ .uav_obj = @enumFromInt(uav_index) }
1646 return .{ .uav_obj = @fromBackingInt(@intCast(uav_index)) }
16471647 else
16481648 uav_index - wasm.uavs_obj.entries.len;
16491649
1650 return .{ .nav_obj = @enumFromInt(nav_index) };
1650 return .{ .nav_obj = @fromBackingInt(@intCast(nav_index)) };
16511651 } else {
16521652 const nav_index = if (uav_index < wasm.uavs_exe.entries.len)
1653 return .{ .uav_exe = @enumFromInt(uav_index) }
1653 return .{ .uav_exe = @fromBackingInt(@intCast(uav_index)) }
16541654 else
16551655 uav_index - wasm.uavs_exe.entries.len;
16561656
1657 return .{ .nav_exe = @enumFromInt(nav_index) };
1657 return .{ .nav_exe = @fromBackingInt(@intCast(nav_index)) };
16581658 }
16591659 },
16601660 };
......@@ -1667,10 +1667,10 @@ pub const ObjectDataImport = extern struct {
16671667 .__zig_error_name_table => .__zig_error_name_table,
16681668 .__heap_base => .__heap_base,
16691669 .__heap_end => .__heap_end,
1670 .object => |i| @enumFromInt(first_object + @intFromEnum(i)),
1671 inline .uav_exe, .uav_obj => |i| @enumFromInt(first_object + wasm.object_datas.items.len + @intFromEnum(i)),
1672 .nav_exe => |i| @enumFromInt(first_object + wasm.object_datas.items.len + wasm.uavs_exe.entries.len + @intFromEnum(i)),
1673 .nav_obj => |i| @enumFromInt(first_object + wasm.object_datas.items.len + wasm.uavs_obj.entries.len + @intFromEnum(i)),
1670 .object => |i| @fromBackingInt(@intCast(first_object + @backingInt(i))),
1671 inline .uav_exe, .uav_obj => |i| @fromBackingInt(@intCast(first_object + wasm.object_datas.items.len + @backingInt(i))),
1672 .nav_exe => |i| @fromBackingInt(@intCast(first_object + wasm.object_datas.items.len + wasm.uavs_exe.entries.len + @backingInt(i))),
1673 .nav_obj => |i| @fromBackingInt(@intCast(first_object + wasm.object_datas.items.len + wasm.uavs_obj.entries.len + @backingInt(i))),
16741674 };
16751675 }
16761676
......@@ -1721,11 +1721,11 @@ pub const ObjectDataImport = extern struct {
17211721 _,
17221722
17231723 pub fn value(i: @This(), wasm: *const Wasm) *ObjectDataImport {
1724 return &wasm.object_data_imports.values()[@intFromEnum(i)];
1724 return &wasm.object_data_imports.values()[@backingInt(i)];
17251725 }
17261726
17271727 pub fn fromSymbolName(wasm: *const Wasm, name: String) ?Index {
1728 return @enumFromInt(wasm.object_data_imports.getIndex(name) orelse return null);
1728 return @fromBackingInt(@intCast(wasm.object_data_imports.getIndex(name) orelse return null));
17291729 }
17301730 };
17311731};
......@@ -1742,7 +1742,7 @@ pub const DataPayload = extern struct {
17421742 _,
17431743
17441744 pub fn unwrap(off: Off) ?u32 {
1745 return if (off == .none) null else @intFromEnum(off);
1745 return if (off == .none) null else @backingInt(off);
17461746 }
17471747 };
17481748
......@@ -1769,7 +1769,7 @@ pub const DataSegmentId = enum(u32) {
17691769 /// Next, index into `navs_obj` or `navs_exe` depending on whether emitting an object.
17701770 _,
17711771
1772 const first_object = @intFromEnum(DataSegmentId.__heap_end) + 1;
1772 const first_object = @backingInt(DataSegmentId.__heap_end) + 1;
17731773
17741774 pub const Category = enum {
17751775 /// Thread-local variables.
......@@ -1803,10 +1803,10 @@ pub const DataSegmentId = enum(u32) {
18031803 .__zig_tag_name_table => .__zig_tag_name_table,
18041804 .__heap_base => .__heap_base,
18051805 .__heap_end => .__heap_end,
1806 .object => |i| @enumFromInt(first_object + @intFromEnum(i)),
1807 inline .uav_exe, .uav_obj => |i| @enumFromInt(first_object + wasm.object_data_segments.items.len + @intFromEnum(i)),
1808 .nav_exe => |i| @enumFromInt(first_object + wasm.object_data_segments.items.len + wasm.uavs_exe.entries.len + @intFromEnum(i)),
1809 .nav_obj => |i| @enumFromInt(first_object + wasm.object_data_segments.items.len + wasm.uavs_obj.entries.len + @intFromEnum(i)),
1806 .object => |i| @fromBackingInt(@intCast(first_object + @backingInt(i))),
1807 inline .uav_exe, .uav_obj => |i| @fromBackingInt(@intCast(first_object + wasm.object_data_segments.items.len + @backingInt(i))),
1808 .nav_exe => |i| @fromBackingInt(@intCast(first_object + wasm.object_data_segments.items.len + wasm.uavs_exe.entries.len + @backingInt(i))),
1809 .nav_obj => |i| @fromBackingInt(@intCast(first_object + wasm.object_data_segments.items.len + wasm.uavs_obj.entries.len + @backingInt(i))),
18101810 };
18111811 }
18121812
......@@ -1819,10 +1819,10 @@ pub const DataSegmentId = enum(u32) {
18191819 .__heap_base => .__heap_base,
18201820 .__heap_end => .__heap_end,
18211821 _ => {
1822 const object_index = @intFromEnum(id) - first_object;
1822 const object_index = @backingInt(id) - first_object;
18231823
18241824 const uav_index = if (object_index < wasm.object_data_segments.items.len)
1825 return .{ .object = @enumFromInt(object_index) }
1825 return .{ .object = @fromBackingInt(@intCast(object_index)) }
18261826 else
18271827 object_index - wasm.object_data_segments.items.len;
18281828
......@@ -1830,18 +1830,18 @@ pub const DataSegmentId = enum(u32) {
18301830 const is_obj = comp.config.output_mode == .Obj;
18311831 if (is_obj) {
18321832 const nav_index = if (uav_index < wasm.uavs_obj.entries.len)
1833 return .{ .uav_obj = @enumFromInt(uav_index) }
1833 return .{ .uav_obj = @fromBackingInt(@intCast(uav_index)) }
18341834 else
18351835 uav_index - wasm.uavs_obj.entries.len;
18361836
1837 return .{ .nav_obj = @enumFromInt(nav_index) };
1837 return .{ .nav_obj = @fromBackingInt(@intCast(nav_index)) };
18381838 } else {
18391839 const nav_index = if (uav_index < wasm.uavs_exe.entries.len)
1840 return .{ .uav_exe = @enumFromInt(uav_index) }
1840 return .{ .uav_exe = @fromBackingInt(@intCast(uav_index)) }
18411841 else
18421842 uav_index - wasm.uavs_exe.entries.len;
18431843
1844 return .{ .nav_exe = @enumFromInt(nav_index) };
1844 return .{ .nav_exe = @fromBackingInt(@intCast(nav_index)) };
18451845 }
18461846 },
18471847 };
......@@ -1851,9 +1851,9 @@ pub const DataSegmentId = enum(u32) {
18511851 const comp = wasm.base.comp;
18521852 const is_obj = comp.config.output_mode == .Obj;
18531853 return pack(wasm, if (is_obj) .{
1854 .nav_obj = @enumFromInt(wasm.navs_obj.getIndex(nav_index).?),
1854 .nav_obj = @fromBackingInt(@intCast(wasm.navs_obj.getIndex(nav_index).?)),
18551855 } else .{
1856 .nav_exe = @enumFromInt(wasm.navs_exe.getIndex(nav_index).?),
1856 .nav_exe = @fromBackingInt(@intCast(wasm.navs_exe.getIndex(nav_index).?)),
18571857 });
18581858 }
18591859
......@@ -2086,10 +2086,10 @@ pub const CustomSegment = extern struct {
20862086pub const Expr = enum(u32) {
20872087 _,
20882088
2089 pub const end = @intFromEnum(std.wasm.Opcode.end);
2089 pub const end = @backingInt(std.wasm.Opcode.end);
20902090
20912091 pub fn slice(index: Expr, wasm: *const Wasm) [:end]const u8 {
2092 const start_slice = wasm.string_bytes.items[@intFromEnum(index)..];
2092 const start_slice = wasm.string_bytes.items[@backingInt(index)..];
20932093 const end_pos = Object.exprEndPos(start_slice, 0) catch |err| switch (err) {
20942094 error.InvalidInitOpcode => unreachable,
20952095 };
......@@ -2106,7 +2106,7 @@ pub const FunctionType = extern struct {
21062106 _,
21072107
21082108 pub fn ptr(i: Index, wasm: *const Wasm) *FunctionType {
2109 return &wasm.func_types.keys()[@intFromEnum(i)];
2109 return &wasm.func_types.keys()[@backingInt(i)];
21102110 }
21112111
21122112 pub fn fmt(i: Index, wasm: *const Wasm) Formatter {
......@@ -2197,7 +2197,7 @@ pub const String = enum(u32) {
21972197 }
21982198
21992199 pub fn hash(ctx: @This(), key: String) u64 {
2200 return std.hash_map.hashString(mem.sliceTo(ctx.bytes[@intFromEnum(key)..], 0));
2200 return std.hash_map.hashString(mem.sliceTo(ctx.bytes[@backingInt(key)..], 0));
22012201 }
22022202 };
22032203
......@@ -2205,7 +2205,7 @@ pub const String = enum(u32) {
22052205 bytes: []const u8,
22062206
22072207 pub fn eql(ctx: @This(), a: []const u8, b: String) bool {
2208 return mem.eql(u8, a, mem.sliceTo(ctx.bytes[@intFromEnum(b)..], 0));
2208 return mem.eql(u8, a, mem.sliceTo(ctx.bytes[@backingInt(b)..], 0));
22092209 }
22102210
22112211 pub fn hash(_: @This(), adapted_key: []const u8) u64 {
......@@ -2215,12 +2215,12 @@ pub const String = enum(u32) {
22152215 };
22162216
22172217 pub fn slice(index: String, wasm: *const Wasm) [:0]const u8 {
2218 const start_slice = wasm.string_bytes.items[@intFromEnum(index)..];
2218 const start_slice = wasm.string_bytes.items[@backingInt(index)..];
22192219 return start_slice[0..mem.indexOfScalar(u8, start_slice, 0).? :0];
22202220 }
22212221
22222222 pub fn toOptional(i: String) OptionalString {
2223 const result: OptionalString = @enumFromInt(@intFromEnum(i));
2223 const result: OptionalString = @fromBackingInt(@intCast(@backingInt(i)));
22242224 assert(result != .none);
22252225 return result;
22262226 }
......@@ -2232,7 +2232,7 @@ pub const OptionalString = enum(u32) {
22322232
22332233 pub fn unwrap(i: OptionalString) ?String {
22342234 if (i == .none) return null;
2235 return @enumFromInt(@intFromEnum(i));
2235 return @fromBackingInt(@intCast(@backingInt(i)));
22362236 }
22372237
22382238 pub fn slice(index: OptionalString, wasm: *const Wasm) ?[:0]const u8 {
......@@ -2246,11 +2246,11 @@ pub const ValtypeList = enum(u32) {
22462246 _,
22472247
22482248 pub fn fromString(s: String) ValtypeList {
2249 return @enumFromInt(@intFromEnum(s));
2249 return @fromBackingInt(@intCast(@backingInt(s)));
22502250 }
22512251
22522252 pub fn slice(index: ValtypeList, wasm: *const Wasm) []const std.wasm.Valtype {
2253 return @ptrCast(String.slice(@enumFromInt(@intFromEnum(index)), wasm));
2253 return @ptrCast(String.slice(@fromBackingInt(@intCast(@backingInt(index))), wasm));
22542254 }
22552255};
22562256
......@@ -2259,7 +2259,7 @@ pub const ZcuImportIndex = enum(u32) {
22592259 _,
22602260
22612261 pub fn ptr(index: ZcuImportIndex, wasm: *const Wasm) *InternPool.Nav.Index {
2262 return &wasm.imports.keys()[@intFromEnum(index)];
2262 return &wasm.imports.keys()[@backingInt(index)];
22632263 }
22642264
22652265 pub fn importName(index: ZcuImportIndex, wasm: *const Wasm) String {
......@@ -2310,16 +2310,16 @@ pub const FunctionImportId = enum(u32) {
23102310
23112311 pub fn pack(unpacked: Unpacked, wasm: *const Wasm) FunctionImportId {
23122312 return switch (unpacked) {
2313 .object_function_import => |i| @enumFromInt(@intFromEnum(i)),
2314 .zcu_import => |i| @enumFromInt(@intFromEnum(i) + wasm.object_function_imports.entries.len),
2313 .object_function_import => |i| @fromBackingInt(@intCast(@backingInt(i))),
2314 .zcu_import => |i| @fromBackingInt(@intCast(@backingInt(i) + wasm.object_function_imports.entries.len)),
23152315 };
23162316 }
23172317
23182318 pub fn unpack(id: FunctionImportId, wasm: *const Wasm) Unpacked {
2319 const i = @intFromEnum(id);
2320 if (i < wasm.object_function_imports.entries.len) return .{ .object_function_import = @enumFromInt(i) };
2319 const i = @backingInt(id);
2320 if (i < wasm.object_function_imports.entries.len) return .{ .object_function_import = @fromBackingInt(@intCast(i)) };
23212321 const zcu_import_i = i - wasm.object_function_imports.entries.len;
2322 return .{ .zcu_import = @enumFromInt(zcu_import_i) };
2322 return .{ .zcu_import = @fromBackingInt(@intCast(zcu_import_i)) };
23232323 }
23242324
23252325 pub fn fromObject(function_import_index: FunctionImport.Index, wasm: *const Wasm) FunctionImportId {
......@@ -2337,10 +2337,10 @@ pub const FunctionImportId = enum(u32) {
23372337 .object_function_import => |obj_func_index| {
23382338 // TODO binary search
23392339 for (wasm.objects.items, 0..) |o, i| {
2340 if (o.function_imports.off <= @intFromEnum(obj_func_index) and
2341 o.function_imports.off + o.function_imports.len > @intFromEnum(obj_func_index))
2340 if (o.function_imports.off <= @backingInt(obj_func_index) and
2341 o.function_imports.off + o.function_imports.len > @backingInt(obj_func_index))
23422342 {
2343 return .pack(.{ .object_index = @enumFromInt(i) }, wasm);
2343 return .pack(.{ .object_index = @fromBackingInt(@intCast(i)) }, wasm);
23442344 }
23452345 } else unreachable;
23462346 },
......@@ -2397,16 +2397,16 @@ pub const GlobalImportId = enum(u32) {
23972397
23982398 pub fn pack(unpacked: Unpacked, wasm: *const Wasm) GlobalImportId {
23992399 return switch (unpacked) {
2400 .object_global_import => |i| @enumFromInt(@intFromEnum(i)),
2401 .zcu_import => |i| @enumFromInt(@intFromEnum(i) + wasm.object_global_imports.entries.len),
2400 .object_global_import => |i| @fromBackingInt(@intCast(@backingInt(i))),
2401 .zcu_import => |i| @fromBackingInt(@intCast(@backingInt(i) + wasm.object_global_imports.entries.len)),
24022402 };
24032403 }
24042404
24052405 pub fn unpack(id: GlobalImportId, wasm: *const Wasm) Unpacked {
2406 const i = @intFromEnum(id);
2407 if (i < wasm.object_global_imports.entries.len) return .{ .object_global_import = @enumFromInt(i) };
2406 const i = @backingInt(id);
2407 if (i < wasm.object_global_imports.entries.len) return .{ .object_global_import = @fromBackingInt(@intCast(i)) };
24082408 const zcu_import_i = i - wasm.object_global_imports.entries.len;
2409 return .{ .zcu_import = @enumFromInt(zcu_import_i) };
2409 return .{ .zcu_import = @fromBackingInt(@intCast(zcu_import_i)) };
24102410 }
24112411
24122412 pub fn fromObject(object_global_import: GlobalImport.Index, wasm: *const Wasm) GlobalImportId {
......@@ -2420,10 +2420,10 @@ pub const GlobalImportId = enum(u32) {
24202420 .object_global_import => |obj_global_index| {
24212421 // TODO binary search
24222422 for (wasm.objects.items, 0..) |o, i| {
2423 if (o.global_imports.off <= @intFromEnum(obj_global_index) and
2424 o.global_imports.off + o.global_imports.len > @intFromEnum(obj_global_index))
2423 if (o.global_imports.off <= @backingInt(obj_global_index) and
2424 o.global_imports.off + o.global_imports.len > @backingInt(obj_global_index))
24252425 {
2426 return .pack(.{ .object_index = @enumFromInt(i) }, wasm);
2426 return .pack(.{ .object_index = @fromBackingInt(@intCast(i)) }, wasm);
24272427 }
24282428 } else unreachable;
24292429 },
......@@ -2462,16 +2462,16 @@ pub const DataImportId = enum(u32) {
24622462
24632463 pub fn pack(unpacked: Unpacked, wasm: *const Wasm) DataImportId {
24642464 return switch (unpacked) {
2465 .object_data_import => |i| @enumFromInt(@intFromEnum(i)),
2466 .zcu_import => |i| @enumFromInt(@intFromEnum(i) + wasm.object_data_imports.entries.len),
2465 .object_data_import => |i| @fromBackingInt(@intCast(@backingInt(i))),
2466 .zcu_import => |i| @fromBackingInt(@intCast(@backingInt(i) + wasm.object_data_imports.entries.len)),
24672467 };
24682468 }
24692469
24702470 pub fn unpack(id: DataImportId, wasm: *const Wasm) Unpacked {
2471 const i = @intFromEnum(id);
2472 if (i < wasm.object_data_imports.entries.len) return .{ .object_data_import = @enumFromInt(i) };
2471 const i = @backingInt(id);
2472 if (i < wasm.object_data_imports.entries.len) return .{ .object_data_import = @fromBackingInt(@intCast(i)) };
24732473 const zcu_import_i = i - wasm.object_data_imports.entries.len;
2474 return .{ .zcu_import = @enumFromInt(zcu_import_i) };
2474 return .{ .zcu_import = @fromBackingInt(@intCast(zcu_import_i)) };
24752475 }
24762476
24772477 pub fn fromZcuImport(zcu_import: ZcuImportIndex, wasm: *const Wasm) DataImportId {
......@@ -2487,10 +2487,10 @@ pub const DataImportId = enum(u32) {
24872487 .object_data_import => |obj_data_index| {
24882488 // TODO binary search
24892489 for (wasm.objects.items, 0..) |o, i| {
2490 if (o.data_imports.off <= @intFromEnum(obj_data_index) and
2491 o.data_imports.off + o.data_imports.len > @intFromEnum(obj_data_index))
2490 if (o.data_imports.off <= @backingInt(obj_data_index) and
2491 o.data_imports.off + o.data_imports.len > @backingInt(obj_data_index))
24922492 {
2493 return .pack(.{ .object_index = @enumFromInt(i) }, wasm);
2493 return .pack(.{ .object_index = @fromBackingInt(@intCast(i)) }, wasm);
24942494 }
24952495 } else unreachable;
24962496 },
......@@ -2504,7 +2504,7 @@ pub const SymbolTableIndex = enum(u32) {
25042504 _,
25052505
25062506 pub fn key(i: @This(), wasm: *const Wasm) *String {
2507 return &wasm.symbol_table.keys()[@intFromEnum(i)];
2507 return &wasm.symbol_table.keys()[@backingInt(i)];
25082508 }
25092509};
25102510
......@@ -2755,7 +2755,7 @@ pub const InitFunc = extern struct {
27552755 pub fn lessThan(ctx: void, lhs: InitFunc, rhs: InitFunc) bool {
27562756 _ = ctx;
27572757 if (lhs.priority == rhs.priority) {
2758 return @intFromEnum(lhs.function_index) < @intFromEnum(rhs.function_index);
2758 return @backingInt(lhs.function_index) < @backingInt(rhs.function_index);
27592759 } else {
27602760 return lhs.priority < rhs.priority;
27612761 }
......@@ -2805,11 +2805,11 @@ pub const Feature = packed struct(u8) {
28052805 _,
28062806
28072807 pub fn fromString(s: String) Set {
2808 return @enumFromInt(@intFromEnum(s));
2808 return @fromBackingInt(@intCast(@backingInt(s)));
28092809 }
28102810
28112811 pub fn string(s: Set) String {
2812 return @enumFromInt(@intFromEnum(s));
2812 return @fromBackingInt(@intCast(@backingInt(s)));
28132813 }
28142814
28152815 pub fn slice(s: Set, wasm: *const Wasm) [:sentinel]const Feature {
......@@ -3246,7 +3246,7 @@ pub fn updateFunc(
32463246 .locals_len = @intCast(mir.locals.len),
32473247 .prologue = mir.prologue,
32483248 } });
3249 wasm.functions.putAssumeCapacity(.pack(wasm, .{ .zcu_func = @enumFromInt(wasm.zcu_funcs.entries.len - 1) }), {});
3249 wasm.functions.putAssumeCapacity(.pack(wasm, .{ .zcu_func = @fromBackingInt(@intCast(wasm.zcu_funcs.entries.len - 1)) }), {});
32503250}
32513251
32523252// Generate code for the "Nav", storing it in memory to be later written to
......@@ -3335,7 +3335,7 @@ pub fn deleteExport(
33353335 const export_name = wasm.getExistingString(name_slice).?;
33363336 switch (exported) {
33373337 .nav => |nav_index| {
3338 log.debug("deleteExport '{s}' nav={d}", .{ name_slice, @intFromEnum(nav_index) });
3338 log.debug("deleteExport '{s}' nav={d}", .{ name_slice, @backingInt(nav_index) });
33393339 assert(wasm.nav_exports.swapRemove(.{ .nav_index = nav_index, .name = export_name }));
33403340 },
33413341 .uav => |uav_index| assert(wasm.uav_exports.swapRemove(.{ .uav_index = uav_index, .name = export_name })),
......@@ -3357,7 +3357,7 @@ pub fn updateExports(
33573357 const name = try wasm.internString(name_slice);
33583358 switch (exported) {
33593359 .nav => |nav_index| {
3360 log.debug("updateExports '{s}' nav={d}", .{ name_slice, @intFromEnum(nav_index) });
3360 log.debug("updateExports '{s}' nav={d}", .{ name_slice, @backingInt(nav_index) });
33613361 try wasm.nav_exports.put(gpa, .{ .nav_index = nav_index, .name = name }, export_idx);
33623362 },
33633363 .uav => |uav_index| try wasm.uav_exports.put(gpa, .{ .uav_index = uav_index, .name = name }, export_idx),
......@@ -3446,7 +3446,7 @@ pub fn prelink(wasm: *Wasm, prog_node: std.Progress.Node) link.Error!void {
34463446 @panic("TODO");
34473447 } else {
34483448 try wasm.globals.put(gpa, .__stack_pointer, {});
3449 assert(wasm.globals.entries.len - 1 == @intFromEnum(GlobalIndex.stack_pointer));
3449 assert(wasm.globals.entries.len - 1 == @backingInt(GlobalIndex.stack_pointer));
34503450 }
34513451 }
34523452
......@@ -3454,7 +3454,7 @@ pub fn prelink(wasm: *Wasm, prog_node: std.Progress.Node) link.Error!void {
34543454 // At the end, output functions and globals will be populated.
34553455 for (wasm.object_function_imports.keys(), wasm.object_function_imports.values(), 0..) |name, *import, i| {
34563456 if (import.flags.isIncluded(rdynamic)) {
3457 try markFunctionImport(wasm, name, import, @enumFromInt(i));
3457 try markFunctionImport(wasm, name, import, @fromBackingInt(@intCast(i)));
34583458 }
34593459 }
34603460 // Also treat init functions as roots.
......@@ -3468,7 +3468,7 @@ pub fn prelink(wasm: *Wasm, prog_node: std.Progress.Node) link.Error!void {
34683468
34693469 for (wasm.object_global_imports.keys(), wasm.object_global_imports.values(), 0..) |name, *import, i| {
34703470 if (import.flags.isIncluded(rdynamic)) {
3471 try markGlobalImport(wasm, name, import, @enumFromInt(i));
3471 try markGlobalImport(wasm, name, import, @fromBackingInt(@intCast(i)));
34723472 }
34733473 }
34743474 wasm.globals_end_prelink = @intCast(wasm.globals.entries.len);
......@@ -3476,13 +3476,13 @@ pub fn prelink(wasm: *Wasm, prog_node: std.Progress.Node) link.Error!void {
34763476
34773477 for (wasm.object_table_imports.keys(), wasm.object_table_imports.values(), 0..) |name, *import, i| {
34783478 if (import.flags.isIncluded(rdynamic)) {
3479 try markTableImport(wasm, name, import, @enumFromInt(i));
3479 try markTableImport(wasm, name, import, @fromBackingInt(@intCast(i)));
34803480 }
34813481 }
34823482
34833483 for (wasm.object_data_imports.keys(), wasm.object_data_imports.values(), 0..) |name, *import, i| {
34843484 if (import.flags.isIncluded(rdynamic)) {
3485 try markDataImport(wasm, name, import, @enumFromInt(i));
3485 try markDataImport(wasm, name, import, @fromBackingInt(@intCast(i)));
34863486 }
34873487 }
34883488
......@@ -3548,9 +3548,9 @@ fn markFunction(wasm: *Wasm, i: ObjectFunctionIndex, override_export: bool) link
35483548 if (!is_obj and (override_export or function.flags.isExported(rdynamic))) {
35493549 const symbol_name = function.name.unwrap().?;
35503550 if (!override_export and function.flags.visibility_hidden) {
3551 try wasm.hidden_function_exports.put(gpa, symbol_name, @enumFromInt(gop.index));
3551 try wasm.hidden_function_exports.put(gpa, symbol_name, @fromBackingInt(@intCast(gop.index)));
35523552 } else {
3553 try wasm.function_exports.put(gpa, symbol_name, @enumFromInt(gop.index));
3553 try wasm.function_exports.put(gpa, symbol_name, @fromBackingInt(@intCast(gop.index)));
35543554 }
35553555 }
35563556
......@@ -3619,7 +3619,7 @@ fn markGlobal(wasm: *Wasm, i: ObjectGlobalIndex, override_export: bool) link.Err
36193619
36203620 if (!is_obj and (override_export or global.flags.isExported(rdynamic))) try wasm.global_exports.append(gpa, .{
36213621 .name = global.name.unwrap().?,
3622 .global_index = @enumFromInt(gop.index),
3622 .global_index = @fromBackingInt(@intCast(gop.index)),
36233623 });
36243624
36253625 try wasm.markRelocations(global.relocations(wasm));
......@@ -3703,7 +3703,7 @@ fn markRelocations(wasm: *Wasm, relocs: ObjectRelocation.IterableSlice) link.Err
37033703 .function_import_offset_i64,
37043704 => {
37053705 const name = pointee.symbol_name;
3706 const i: FunctionImport.Index = @enumFromInt(wasm.object_function_imports.getIndex(name).?);
3706 const i: FunctionImport.Index = @fromBackingInt(@intCast(wasm.object_function_imports.getIndex(name).?));
37073707 try markFunctionImport(wasm, name, i.value(wasm), i);
37083708 },
37093709 .table_import_index_sleb,
......@@ -3715,17 +3715,17 @@ fn markRelocations(wasm: *Wasm, relocs: ObjectRelocation.IterableSlice) link.Err
37153715 => {
37163716 const name = pointee.symbol_name;
37173717 try wasm.object_indirect_function_import_set.put(gpa, name, {});
3718 const i: FunctionImport.Index = @enumFromInt(wasm.object_function_imports.getIndex(name).?);
3718 const i: FunctionImport.Index = @fromBackingInt(@intCast(wasm.object_function_imports.getIndex(name).?));
37193719 try markFunctionImport(wasm, name, i.value(wasm), i);
37203720 },
37213721 .global_import_index_leb, .global_import_index_i32 => {
37223722 const name = pointee.symbol_name;
3723 const i: GlobalImport.Index = @enumFromInt(wasm.object_global_imports.getIndex(name).?);
3723 const i: GlobalImport.Index = @fromBackingInt(@intCast(wasm.object_global_imports.getIndex(name).?));
37243724 try markGlobalImport(wasm, name, i.value(wasm), i);
37253725 },
37263726 .table_import_number_leb => {
37273727 const name = pointee.symbol_name;
3728 const i: TableImport.Index = @enumFromInt(wasm.object_table_imports.getIndex(name).?);
3728 const i: TableImport.Index = @fromBackingInt(@intCast(wasm.object_table_imports.getIndex(name).?));
37293729 try markTableImport(wasm, name, i.value(wasm), i);
37303730 },
37313731 .memory_addr_import_leb,
......@@ -3871,7 +3871,7 @@ pub fn internString(wasm: *Wasm, bytes: []const u8) Allocator.Error!String {
38713871 if (gop.found_existing) return gop.key_ptr.*;
38723872
38733873 try wasm.string_bytes.ensureUnusedCapacity(gpa, bytes.len + 1);
3874 const new_off: String = @enumFromInt(wasm.string_bytes.items.len);
3874 const new_off: String = @fromBackingInt(@intCast(wasm.string_bytes.items.len));
38753875
38763876 wasm.string_bytes.appendSliceAssumeCapacity(bytes);
38773877 wasm.string_bytes.appendAssumeCapacity(0);
......@@ -3906,12 +3906,12 @@ pub fn getExistingValtypeList(wasm: *const Wasm, valtype_list: []const std.wasm.
39063906pub fn addFuncType(wasm: *Wasm, ft: FunctionType) Allocator.Error!FunctionType.Index {
39073907 const gpa = wasm.base.comp.gpa;
39083908 const gop = try wasm.func_types.getOrPut(gpa, ft);
3909 return @enumFromInt(gop.index);
3909 return @fromBackingInt(@intCast(gop.index));
39103910}
39113911
39123912pub fn getExistingFuncType(wasm: *const Wasm, ft: FunctionType) ?FunctionType.Index {
39133913 const index = wasm.func_types.getIndex(ft) orelse return null;
3914 return @enumFromInt(index);
3914 return @fromBackingInt(@intCast(index));
39153915}
39163916
39173917pub fn getExistingFuncType2(wasm: *const Wasm, params: []const std.wasm.Valtype, returns: []const std.wasm.Valtype) FunctionType.Index {
......@@ -3960,14 +3960,14 @@ pub fn addExpr(wasm: *Wasm, bytes: []const u8) Allocator.Error!Expr {
39603960 // it is likely for globals to share initialization values. Then again
39613961 // there may not be very many globals in total.
39623962 try wasm.string_bytes.appendSlice(gpa, bytes);
3963 return @enumFromInt(wasm.string_bytes.items.len - bytes.len);
3963 return @fromBackingInt(@intCast(wasm.string_bytes.items.len - bytes.len));
39643964}
39653965
39663966pub fn addRelocatableDataPayload(wasm: *Wasm, bytes: []const u8) Allocator.Error!DataPayload {
39673967 const gpa = wasm.base.comp.gpa;
39683968 try wasm.string_bytes.appendSlice(gpa, bytes);
39693969 return .{
3970 .off = @enumFromInt(wasm.string_bytes.items.len - bytes.len),
3970 .off = @fromBackingInt(@intCast(wasm.string_bytes.items.len - bytes.len)),
39713971 .len = @intCast(bytes.len),
39723972 };
39733973}
......@@ -3976,10 +3976,10 @@ pub fn uavSymbolIndex(wasm: *Wasm, ip_index: InternPool.Index) Allocator.Error!S
39763976 const comp = wasm.base.comp;
39773977 assert(comp.config.output_mode == .Obj);
39783978 const gpa = comp.gpa;
3979 const name = try wasm.internStringFmt("__anon_{d}", .{@intFromEnum(ip_index)});
3979 const name = try wasm.internStringFmt("__anon_{d}", .{@backingInt(ip_index)});
39803980 const gop = try wasm.symbol_table.getOrPut(gpa, name);
39813981 gop.value_ptr.* = {};
3982 return @enumFromInt(gop.index);
3982 return @fromBackingInt(@intCast(gop.index));
39833983}
39843984
39853985pub fn navSymbolIndex(wasm: *Wasm, nav_index: InternPool.Nav.Index) Allocator.Error!SymbolTableIndex {
......@@ -3992,7 +3992,7 @@ pub fn navSymbolIndex(wasm: *Wasm, nav_index: InternPool.Nav.Index) Allocator.Er
39923992 const name = try wasm.internString(nav.fqn.toSlice(ip));
39933993 const gop = try wasm.symbol_table.getOrPut(gpa, name);
39943994 gop.value_ptr.* = {};
3995 return @enumFromInt(gop.index);
3995 return @fromBackingInt(@intCast(gop.index));
39963996}
39973997
39983998pub fn errorNameTableSymbolIndex(wasm: *Wasm) Allocator.Error!SymbolTableIndex {
......@@ -4001,7 +4001,7 @@ pub fn errorNameTableSymbolIndex(wasm: *Wasm) Allocator.Error!SymbolTableIndex {
40014001 const gpa = comp.gpa;
40024002 const gop = try wasm.symbol_table.getOrPut(gpa, wasm.preloaded_strings.__zig_error_name_table);
40034003 gop.value_ptr.* = {};
4004 return @enumFromInt(gop.index);
4004 return @fromBackingInt(@intCast(gop.index));
40054005}
40064006
40074007pub fn stackPointerSymbolIndex(wasm: *Wasm) Allocator.Error!SymbolTableIndex {
......@@ -4010,7 +4010,7 @@ pub fn stackPointerSymbolIndex(wasm: *Wasm) Allocator.Error!SymbolTableIndex {
40104010 const gpa = comp.gpa;
40114011 const gop = try wasm.symbol_table.getOrPut(gpa, wasm.preloaded_strings.__stack_pointer);
40124012 gop.value_ptr.* = {};
4013 return @enumFromInt(gop.index);
4013 return @fromBackingInt(@intCast(gop.index));
40144014}
40154015
40164016pub fn tagTableIndexSymbolIndex(wasm: *Wasm, ip_index: InternPool.Index) Allocator.Error!SymbolTableIndex {
......@@ -4020,7 +4020,7 @@ pub fn tagTableIndexSymbolIndex(wasm: *Wasm, ip_index: InternPool.Index) Allocat
40204020 const name = try wasm.internStringFmt("__zig_tag_name_{d}", .{ip_index});
40214021 const gop = try wasm.symbol_table.getOrPut(gpa, name);
40224022 gop.value_ptr.* = {};
4023 return @enumFromInt(gop.index);
4023 return @fromBackingInt(@intCast(gop.index));
40244024}
40254025
40264026pub fn symbolNameIndex(wasm: *Wasm, name: String) Allocator.Error!SymbolTableIndex {
......@@ -4029,7 +4029,7 @@ pub fn symbolNameIndex(wasm: *Wasm, name: String) Allocator.Error!SymbolTableInd
40294029 const gpa = comp.gpa;
40304030 const gop = try wasm.symbol_table.getOrPut(gpa, name);
40314031 gop.value_ptr.* = {};
4032 return @enumFromInt(gop.index);
4032 return @fromBackingInt(@intCast(gop.index));
40334033}
40344034
40354035pub fn addUavReloc(
......@@ -4075,7 +4075,7 @@ pub fn addUavReloc(
40754075 };
40764076 gop.value_ptr.count += 1;
40774077 try wasm.uav_fixups.append(gpa, .{
4078 .uavs_exe_index = @enumFromInt(gop.index),
4078 .uavs_exe_index = @fromBackingInt(@intCast(gop.index)),
40794079 .offset = @intCast(reloc_offset),
40804080 .addend = addend,
40814081 });
......@@ -4092,7 +4092,7 @@ pub fn refNavObj(wasm: *Wasm, nav_index: InternPool.Nav.Index) !NavsObjIndex {
40924092 .code = undefined,
40934093 .relocs = undefined,
40944094 };
4095 return @enumFromInt(gop.index);
4095 return @fromBackingInt(@intCast(gop.index));
40964096}
40974097
40984098pub fn refNavExe(wasm: *Wasm, nav_index: InternPool.Nav.Index) !NavsExeIndex {
......@@ -4109,7 +4109,7 @@ pub fn refNavExe(wasm: *Wasm, nav_index: InternPool.Nav.Index) !NavsExeIndex {
41094109 .count = 0,
41104110 };
41114111 }
4112 return @enumFromInt(gop.index);
4112 return @fromBackingInt(@intCast(gop.index));
41134113}
41144114
41154115/// Asserts it is called after `Flush.data_segments` is fully populated and sorted.
......@@ -4117,7 +4117,7 @@ pub fn uavAddr(wasm: *Wasm, ip_index: InternPool.Index) u32 {
41174117 assert(wasm.flush_buffer.memory_layout_finished);
41184118 const comp = wasm.base.comp;
41194119 assert(comp.config.output_mode != .Obj);
4120 const uav_index: UavsExeIndex = @enumFromInt(wasm.uavs_exe.getIndex(ip_index).?);
4120 const uav_index: UavsExeIndex = @fromBackingInt(@intCast(wasm.uavs_exe.getIndex(ip_index).?));
41214121 const ds_id: DataSegmentId = .pack(wasm, .{ .uav_exe = uav_index });
41224122 return wasm.flush_buffer.data_segments.get(ds_id).?;
41234123}
......@@ -4128,7 +4128,7 @@ pub fn navAddr(wasm: *Wasm, nav_index: InternPool.Nav.Index) u32 {
41284128 const comp = wasm.base.comp;
41294129 assert(comp.config.output_mode != .Obj);
41304130 if (wasm.navs_exe.getIndex(nav_index)) |i| {
4131 const navs_exe_index: NavsExeIndex = @enumFromInt(i);
4131 const navs_exe_index: NavsExeIndex = @fromBackingInt(@intCast(i));
41324132 log.debug("navAddr {s} {}", .{ navs_exe_index.name(wasm), nav_index });
41334133 const ds_id: DataSegmentId = .pack(wasm, .{ .nav_exe = navs_exe_index });
41344134 return wasm.flush_buffer.data_segments.get(ds_id).?;
......@@ -4279,7 +4279,7 @@ fn lowerZcuData(wasm: *Wasm, pt: Zcu.PerThread, ip_index: InternPool.Index) !Zcu
42794279 wasm.string_bytes_lock.unlock();
42804280
42814281 const naive_code: DataPayload = .{
4282 .off = @enumFromInt(code_start),
4282 .off = @fromBackingInt(@intCast(code_start)),
42834283 .len = code_len,
42844284 };
42854285
......@@ -4329,7 +4329,7 @@ fn pointerSize(wasm: *const Wasm) u32 {
43294329fn addZcuImportReserved(wasm: *Wasm, nav_index: InternPool.Nav.Index) ZcuImportIndex {
43304330 const gop = wasm.imports.getOrPutAssumeCapacity(nav_index);
43314331 gop.value_ptr.* = {};
4332 return @enumFromInt(gop.index);
4332 return @fromBackingInt(@intCast(gop.index));
43334333}
43344334
43354335fn resolveFunctionSynthetic(
src/link/Wasm/Flush.zig+131-131
......@@ -51,7 +51,7 @@ pub const FuncTypeIndex = enum(u32) {
5151 _,
5252
5353 pub fn fromTypeIndex(i: Wasm.FunctionType.Index, f: *const Flush) FuncTypeIndex {
54 return @enumFromInt(f.func_types.getIndex(i).?);
54 return @fromBackingInt(@intCast(f.func_types.getIndex(i).?));
5555 }
5656};
5757
......@@ -68,16 +68,16 @@ const IndirectFunctionTableIndex = enum(u32) {
6868 }
6969
7070 fn fromOutputFunctionIndex(f: *const Flush, i: Wasm.OutputFunctionIndex) IndirectFunctionTableIndex {
71 return @enumFromInt(f.indirect_function_table.getIndex(i).?);
71 return @fromBackingInt(@intCast(f.indirect_function_table.getIndex(i).?));
7272 }
7373
7474 fn fromZcuIndirectFunctionSetIndex(i: Wasm.ZcuIndirectFunctionSetIndex) IndirectFunctionTableIndex {
7575 // These are the same since those are added to the table first.
76 return @enumFromInt(@intFromEnum(i));
76 return @fromBackingInt(@intCast(@backingInt(i)));
7777 }
7878
7979 fn toAbi(i: IndirectFunctionTableIndex) u32 {
80 return @intFromEnum(i) + 1;
80 return @backingInt(i) + 1;
8181 }
8282};
8383
......@@ -139,11 +139,11 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
139139 for (wasm.mir_instructions.items(.tag), wasm.mir_instructions.items(.data)) |tag, *data| switch (tag) {
140140 .call_intrinsic => {
141141 const symbol_name = try wasm.internString(@tagName(data.intrinsic));
142 const i: Wasm.FunctionImport.Index = @enumFromInt(wasm.object_function_imports.getIndex(symbol_name) orelse {
142 const i: Wasm.FunctionImport.Index = @fromBackingInt(@intCast(wasm.object_function_imports.getIndex(symbol_name) orelse {
143143 return diags.fail("missing compiler runtime intrinsic '{t}' (undefined linker symbol)", .{
144144 data.intrinsic,
145145 });
146 });
146 }));
147147 try wasm.markFunctionImport(symbol_name, i.value(wasm), i);
148148 log.debug("markFunctionImport intrinsic {d}={t}", .{ i, data.intrinsic });
149149 },
......@@ -157,7 +157,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
157157 .type_index = try wasm.internFunctionType(.auto, &.{int_tag_ty.ip_index}, .u32, false, target),
158158 } };
159159 }
160 try wasm.functions.put(gpa, .fromZcuFunc(wasm, @enumFromInt(gop.index)), {});
160 try wasm.functions.put(gpa, .fromZcuFunc(wasm, @fromBackingInt(@intCast(gop.index))), {});
161161 },
162162 .enum_tag_name_table_ref => {
163163 assert(ip.indexToKey(data.ip_index) == .enum_type);
......@@ -181,7 +181,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
181181 while (i < f.function_imports.entries.len) {
182182 const symbol_name = f.function_imports.keys()[i];
183183 if (wasm.object_function_imports.getIndex(symbol_name)) |import_index_usize| {
184 const import_index: Wasm.FunctionImport.Index = @enumFromInt(import_index_usize);
184 const import_index: Wasm.FunctionImport.Index = @fromBackingInt(@intCast(import_index_usize));
185185 try wasm.markFunctionImport(symbol_name, import_index.value(wasm), import_index);
186186 f.function_imports.swapRemoveAt(i);
187187 continue;
......@@ -195,7 +195,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
195195 while (i < f.data_imports.entries.len) {
196196 const symbol_name = f.data_imports.keys()[i];
197197 if (wasm.object_data_imports.getIndex(symbol_name)) |import_index_usize| {
198 const import_index: Wasm.ObjectDataImport.Index = @enumFromInt(import_index_usize);
198 const import_index: Wasm.ObjectDataImport.Index = @fromBackingInt(@intCast(import_index_usize));
199199 try wasm.markDataImport(symbol_name, import_index.value(wasm), import_index);
200200 f.data_imports.swapRemoveAt(i);
201201 continue;
......@@ -313,16 +313,16 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
313313 if (!is_obj) assert(wasm.uavs_obj.entries.len == 0);
314314 if (!is_obj) assert(wasm.navs_obj.entries.len == 0);
315315 for (0..wasm.uavs_obj.entries.len) |uavs_index| f.data_segments.putAssumeCapacityNoClobber(.pack(wasm, .{
316 .uav_obj = @enumFromInt(uavs_index),
316 .uav_obj = @fromBackingInt(@intCast(uavs_index)),
317317 }), @as(u32, undefined));
318318 for (0..wasm.navs_obj.entries.len) |navs_index| f.data_segments.putAssumeCapacityNoClobber(.pack(wasm, .{
319 .nav_obj = @enumFromInt(navs_index),
319 .nav_obj = @fromBackingInt(@intCast(navs_index)),
320320 }), @as(u32, undefined));
321321 for (0..wasm.uavs_exe.entries.len) |uavs_index| f.data_segments.putAssumeCapacityNoClobber(.pack(wasm, .{
322 .uav_exe = @enumFromInt(uavs_index),
322 .uav_exe = @fromBackingInt(@intCast(uavs_index)),
323323 }), @as(u32, undefined));
324324 for (0..wasm.navs_exe.entries.len) |navs_index| f.data_segments.putAssumeCapacityNoClobber(.pack(wasm, .{
325 .nav_exe = @enumFromInt(navs_index),
325 .nav_exe = @fromBackingInt(@intCast(navs_index)),
326326 }), @as(u32, undefined));
327327 if (wasm.error_name_table_ref_count > 0) {
328328 f.data_segments.putAssumeCapacity(.__zig_error_names, @as(u32, undefined));
......@@ -371,8 +371,8 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
371371 pub fn lessThan(ctx: @This(), lhs: usize, rhs: usize) bool {
372372 const lhs_segment = ctx.segments[lhs];
373373 const rhs_segment = ctx.segments[rhs];
374 const lhs_category = @intFromEnum(lhs_segment.category(ctx.wasm));
375 const rhs_category = @intFromEnum(rhs_segment.category(ctx.wasm));
374 const lhs_category = @backingInt(lhs_segment.category(ctx.wasm));
375 const rhs_category = @backingInt(rhs_segment.category(ctx.wasm));
376376 switch (std.math.order(lhs_category, rhs_category)) {
377377 .lt => return true,
378378 .gt => return false,
......@@ -404,7 +404,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
404404 .gt => return false,
405405 .eq => {},
406406 }
407 return @intFromEnum(lhs_segment) < @intFromEnum(rhs_segment);
407 return @backingInt(lhs_segment) < @backingInt(rhs_segment);
408408 }
409409 };
410410 f.data_segments.sortUnstable(@as(Sort, .{
......@@ -486,7 +486,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
486486
487487 const size = segment_id.size(wasm);
488488 segment_vaddr.* = @intCast(start_addr);
489 log.debug("0x{x} {d} {s}", .{ start_addr, @intFromEnum(segment_id), segment_id.name(wasm) });
489 log.debug("0x{x} {d} {s}", .{ start_addr, @backingInt(segment_id), segment_id.name(wasm) });
490490 memory_ptr = start_addr + size;
491491 }
492492 if (category != .zero) try f.data_segment_groups.append(gpa, .{
......@@ -593,12 +593,12 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
593593 const params = func_type.params.slice(wasm);
594594 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(params.len)));
595595 for (params) |param_ty| {
596 try appendLeb128(gpa, binary_bytes, @intFromEnum(param_ty));
596 try appendLeb128(gpa, binary_bytes, @backingInt(param_ty));
597597 }
598598 const returns = func_type.returns.slice(wasm);
599599 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(returns.len)));
600600 for (returns) |ret_ty| {
601 try appendLeb128(gpa, binary_bytes, @intFromEnum(ret_ty));
601 try appendLeb128(gpa, binary_bytes, @backingInt(ret_ty));
602602 }
603603 }
604604 replaceVecSectionHeader(binary_bytes, header_offset, .type, @intCast(f.func_types.entries.len));
......@@ -625,9 +625,9 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
625625 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(name.len)));
626626 try binary_bytes.appendSlice(gpa, name);
627627
628 try binary_bytes.append(gpa, @intFromEnum(std.wasm.ExternalKind.function));
628 try binary_bytes.append(gpa, @backingInt(std.wasm.ExternalKind.function));
629629 const type_index: FuncTypeIndex = .fromTypeIndex(id.functionType(wasm), f);
630 try appendLeb128(gpa, binary_bytes, @intFromEnum(type_index));
630 try appendLeb128(gpa, binary_bytes, @backingInt(type_index));
631631 }
632632 total_imports += f.function_imports.entries.len;
633633
......@@ -641,8 +641,8 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
641641 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(name.len)));
642642 try binary_bytes.appendSlice(gpa, name);
643643
644 try binary_bytes.append(gpa, @intFromEnum(std.wasm.ExternalKind.table));
645 try appendLeb128(gpa, binary_bytes, @intFromEnum(@as(std.wasm.RefType, table_import.flags.ref_type.to())));
644 try binary_bytes.append(gpa, @backingInt(std.wasm.ExternalKind.table));
645 try appendLeb128(gpa, binary_bytes, @backingInt(@as(std.wasm.RefType, table_import.flags.ref_type.to())));
646646 try emitLimits(gpa, binary_bytes, table_import.limits());
647647 }
648648 total_imports += wasm.table_imports.entries.len;
......@@ -670,9 +670,9 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
670670 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(name.len)));
671671 try binary_bytes.appendSlice(gpa, name);
672672
673 try binary_bytes.append(gpa, @intFromEnum(std.wasm.ExternalKind.global));
673 try binary_bytes.append(gpa, @backingInt(std.wasm.ExternalKind.global));
674674 const global_type = id.globalType(wasm);
675 try appendLeb128(gpa, binary_bytes, @intFromEnum(@as(std.wasm.Valtype, global_type.valtype)));
675 try appendLeb128(gpa, binary_bytes, @backingInt(@as(std.wasm.Valtype, global_type.valtype)));
676676 try binary_bytes.append(gpa, @intFromBool(global_type.mutable));
677677 }
678678 total_imports += f.global_imports.entries.len;
......@@ -690,7 +690,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
690690 const header_offset = try reserveVecSectionHeader(gpa, binary_bytes);
691691 for (wasm.functions.keys()) |function| {
692692 const index: FuncTypeIndex = .fromTypeIndex(function.typeIndex(wasm), f);
693 try appendLeb128(gpa, binary_bytes, @intFromEnum(index));
693 try appendLeb128(gpa, binary_bytes, @backingInt(index));
694694 }
695695
696696 replaceVecSectionHeader(binary_bytes, header_offset, .function, @intCast(wasm.functions.count()));
......@@ -702,7 +702,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
702702 const header_offset = try reserveVecSectionHeader(gpa, binary_bytes);
703703
704704 for (wasm.tables.keys()) |table| {
705 try appendLeb128(gpa, binary_bytes, @intFromEnum(@as(std.wasm.RefType, table.refType(wasm))));
705 try appendLeb128(gpa, binary_bytes, @backingInt(@as(std.wasm.RefType, table.refType(wasm))));
706706 try emitLimits(gpa, binary_bytes, table.limits(wasm));
707707 }
708708
......@@ -735,7 +735,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
735735 .object_global => |i| {
736736 const global = i.ptr(wasm);
737737 try binary_bytes.appendSlice(gpa, &.{
738 @intFromEnum(@as(std.wasm.Valtype, global.flags.global_type.valtype.to())),
738 @backingInt(@as(std.wasm.Valtype, global.flags.global_type.valtype.to())),
739739 @intFromBool(global.flags.global_type.mutable),
740740 });
741741 try emitExpr(wasm, binary_bytes, global.expr);
......@@ -758,9 +758,9 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
758758 const name = exp_name.slice(wasm);
759759 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(name.len)));
760760 try binary_bytes.appendSlice(gpa, name);
761 try binary_bytes.append(gpa, @intFromEnum(std.wasm.ExternalKind.function));
761 try binary_bytes.append(gpa, @backingInt(std.wasm.ExternalKind.function));
762762 const func_index = Wasm.OutputFunctionIndex.fromFunctionIndex(wasm, function_index);
763 try appendLeb128(gpa, binary_bytes, @intFromEnum(func_index));
763 try appendLeb128(gpa, binary_bytes, @backingInt(func_index));
764764 }
765765 exports_len += wasm.function_exports.entries.len;
766766
......@@ -769,7 +769,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
769769 const index: u32 = @intCast(wasm.tables.getIndex(.__indirect_function_table).?);
770770 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(name.len)));
771771 try binary_bytes.appendSlice(gpa, name);
772 try binary_bytes.append(gpa, @intFromEnum(std.wasm.ExternalKind.table));
772 try binary_bytes.append(gpa, @backingInt(std.wasm.ExternalKind.table));
773773 try appendLeb128(gpa, binary_bytes, index);
774774 exports_len += 1;
775775 }
......@@ -778,7 +778,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
778778 const name = "memory";
779779 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(name.len)));
780780 try binary_bytes.appendSlice(gpa, name);
781 try binary_bytes.append(gpa, @intFromEnum(std.wasm.ExternalKind.memory));
781 try binary_bytes.append(gpa, @backingInt(std.wasm.ExternalKind.memory));
782782 try appendLeb128(gpa, binary_bytes, @as(u32, 0));
783783 exports_len += 1;
784784 }
......@@ -787,8 +787,8 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
787787 const name = exp.name.slice(wasm);
788788 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(name.len)));
789789 try binary_bytes.appendSlice(gpa, name);
790 try binary_bytes.append(gpa, @intFromEnum(std.wasm.ExternalKind.global));
791 try appendLeb128(gpa, binary_bytes, @intFromEnum(exp.global_index));
790 try binary_bytes.append(gpa, @backingInt(std.wasm.ExternalKind.global));
791 try appendLeb128(gpa, binary_bytes, @backingInt(exp.global_index));
792792 }
793793 exports_len += wasm.global_exports.items.len;
794794
......@@ -802,7 +802,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
802802
803803 // start section
804804 if (wasm.functions.getIndex(.__wasm_init_memory)) |func_index| {
805 try emitStartSection(gpa, binary_bytes, .fromFunctionIndex(wasm, @enumFromInt(func_index)));
805 try emitStartSection(gpa, binary_bytes, .fromFunctionIndex(wasm, @fromBackingInt(@intCast(func_index))));
806806 } else if (Wasm.OutputFunctionIndex.fromResolution(wasm, wasm.entry_resolution)) |func_index| {
807807 try emitStartSection(gpa, binary_bytes, func_index);
808808 }
......@@ -830,7 +830,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
830830 }
831831 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(f.indirect_function_table.entries.len)));
832832 for (f.indirect_function_table.keys()) |func_index| {
833 try appendLeb128(gpa, binary_bytes, @intFromEnum(func_index));
833 try appendLeb128(gpa, binary_bytes, @backingInt(func_index));
834834 }
835835
836836 replaceVecSectionHeader(binary_bytes, header_offset, .element, 1);
......@@ -966,7 +966,7 @@ pub fn finish(f: *Flush, wasm: *Wasm) !void {
966966 const group_size = group_end_addr - group_start_addr;
967967 log.debug("emit data section group, {d} bytes", .{group_size});
968968 const flags: Object.DataSegmentFlags = if (segment_id.isPassive(wasm)) .passive else .active;
969 try appendLeb128(gpa, binary_bytes, @intFromEnum(flags));
969 try appendLeb128(gpa, binary_bytes, @backingInt(flags));
970970 // Passive segments are initialized at runtime.
971971 if (flags != .passive) {
972972 var aw: std.Io.Writer.Allocating = .fromArrayList(gpa, binary_bytes);
......@@ -1119,7 +1119,7 @@ fn emitNameSection(
11191119
11201120 {
11211121 const sub_offset = try reserveCustomSectionHeader(gpa, binary_bytes);
1122 defer replaceHeader(binary_bytes, sub_offset, @intFromEnum(std.wasm.NameSubsection.function));
1122 defer replaceHeader(binary_bytes, sub_offset, @backingInt(std.wasm.NameSubsection.function));
11231123
11241124 const total_functions: u32 = @intCast(f.function_imports.entries.len + wasm.functions.entries.len);
11251125 try appendLeb128(gpa, binary_bytes, total_functions);
......@@ -1140,7 +1140,7 @@ fn emitNameSection(
11401140
11411141 {
11421142 const sub_offset = try reserveCustomSectionHeader(gpa, binary_bytes);
1143 defer replaceHeader(binary_bytes, sub_offset, @intFromEnum(std.wasm.NameSubsection.global));
1143 defer replaceHeader(binary_bytes, sub_offset, @backingInt(std.wasm.NameSubsection.global));
11441144
11451145 const total_globals: u32 = @intCast(f.global_imports.entries.len + wasm.globals.entries.len);
11461146 try appendLeb128(gpa, binary_bytes, total_globals);
......@@ -1161,7 +1161,7 @@ fn emitNameSection(
11611161
11621162 {
11631163 const sub_offset = try reserveCustomSectionHeader(gpa, binary_bytes);
1164 defer replaceHeader(binary_bytes, sub_offset, @intFromEnum(std.wasm.NameSubsection.data_segment));
1164 defer replaceHeader(binary_bytes, sub_offset, @backingInt(std.wasm.NameSubsection.data_segment));
11651165
11661166 const total_data_segments: u32 = @intCast(data_segment_groups.len);
11671167 try appendLeb128(gpa, binary_bytes, total_data_segments);
......@@ -1194,7 +1194,7 @@ fn emitFeaturesSection(
11941194
11951195 var safety_count = feature_count;
11961196 for (target.cpu.arch.allFeaturesList(), 0..) |*feature, i| {
1197 if (!target.cpu.has(.wasm, @as(std.Target.wasm.Feature, @enumFromInt(i)))) continue;
1197 if (!target.cpu.has(.wasm, @as(std.Target.wasm.Feature, @fromBackingInt(@intCast(i))))) continue;
11981198 safety_count -= 1;
11991199
12001200 try appendLeb128(gpa, binary_bytes, @as(u32, '+'));
......@@ -1318,7 +1318,7 @@ fn replaceVecSectionHeader(
13181318 const size: u32 = @intCast(bytes.items.len - offset - section_header_reserve_size + uleb128size(n_items));
13191319 var buf: [section_header_reserve_size]u8 = undefined;
13201320 var w: std.Io.Writer = .fixed(&buf);
1321 w.writeByte(@intFromEnum(section)) catch unreachable;
1321 w.writeByte(@backingInt(section)) catch unreachable;
13221322 w.writeUleb128(size) catch unreachable;
13231323 w.writeUleb128(n_items) catch unreachable;
13241324 bytes.replaceRangeAssumeCapacity(offset, section_header_reserve_size, w.buffered());
......@@ -1382,34 +1382,34 @@ fn emitMemoryImport(
13821382 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(name.len)));
13831383 try binary_bytes.appendSlice(gpa, name);
13841384
1385 try binary_bytes.append(gpa, @intFromEnum(std.wasm.ExternalKind.memory));
1385 try binary_bytes.append(gpa, @backingInt(std.wasm.ExternalKind.memory));
13861386 try emitLimits(gpa, binary_bytes, memory_import.limits());
13871387}
13881388
13891389fn emitInit(writer: *std.Io.Writer, init_expr: std.wasm.InitExpression) !void {
13901390 switch (init_expr) {
13911391 .i32_const => |val| {
1392 try writer.writeByte(@intFromEnum(std.wasm.Opcode.i32_const));
1392 try writer.writeByte(@backingInt(std.wasm.Opcode.i32_const));
13931393 try writer.writeSleb128(val);
13941394 },
13951395 .i64_const => |val| {
1396 try writer.writeByte(@intFromEnum(std.wasm.Opcode.i64_const));
1396 try writer.writeByte(@backingInt(std.wasm.Opcode.i64_const));
13971397 try writer.writeSleb128(val);
13981398 },
13991399 .f32_const => |val| {
1400 try writer.writeByte(@intFromEnum(std.wasm.Opcode.f32_const));
1400 try writer.writeByte(@backingInt(std.wasm.Opcode.f32_const));
14011401 try writer.writeInt(u32, @bitCast(val), .little);
14021402 },
14031403 .f64_const => |val| {
1404 try writer.writeByte(@intFromEnum(std.wasm.Opcode.f64_const));
1404 try writer.writeByte(@backingInt(std.wasm.Opcode.f64_const));
14051405 try writer.writeInt(u64, @bitCast(val), .little);
14061406 },
14071407 .global_get => |val| {
1408 try writer.writeByte(@intFromEnum(std.wasm.Opcode.global_get));
1408 try writer.writeByte(@backingInt(std.wasm.Opcode.global_get));
14091409 try writer.writeUleb128(val);
14101410 },
14111411 }
1412 try writer.writeByte(@intFromEnum(std.wasm.Opcode.end));
1412 try writer.writeByte(@backingInt(std.wasm.Opcode.end));
14131413}
14141414
14151415pub fn emitExpr(wasm: *const Wasm, binary_bytes: *ArrayList(u8), expr: Wasm.Expr) Allocator.Error!void {
......@@ -1420,7 +1420,7 @@ pub fn emitExpr(wasm: *const Wasm, binary_bytes: *ArrayList(u8), expr: Wasm.Expr
14201420
14211421fn emitSegmentInfo(wasm: *Wasm, binary_bytes: *std.array_list.Managed(u8)) !void {
14221422 const gpa = wasm.base.comp.gpa;
1423 try appendLeb128(gpa, binary_bytes, @intFromEnum(Wasm.SubsectionType.segment_info));
1423 try appendLeb128(gpa, binary_bytes, @backingInt(Wasm.SubsectionType.segment_info));
14241424 const segment_offset = binary_bytes.items.len;
14251425
14261426 try appendLeb128(gpa, binary_bytes, @as(u32, @intCast(wasm.segment_info.count())));
......@@ -1554,19 +1554,19 @@ fn reloc_sleb64_table_index(code: []u8, i: IndirectFunctionTableIndex) void {
15541554}
15551555
15561556fn reloc_u32_function(code: []u8, function: Wasm.OutputFunctionIndex) void {
1557 mem.writeInt(u32, code[0..4], @intFromEnum(function), .little);
1557 mem.writeInt(u32, code[0..4], @backingInt(function), .little);
15581558}
15591559
15601560fn reloc_leb_function(code: []u8, function: Wasm.OutputFunctionIndex) void {
1561 leb.writeUnsignedFixed(5, code[0..5], @intFromEnum(function));
1561 leb.writeUnsignedFixed(5, code[0..5], @backingInt(function));
15621562}
15631563
15641564fn reloc_u32_global(code: []u8, global: Wasm.GlobalIndex) void {
1565 mem.writeInt(u32, code[0..4], @intFromEnum(global), .little);
1565 mem.writeInt(u32, code[0..4], @backingInt(global), .little);
15661566}
15671567
15681568fn reloc_leb_global(code: []u8, global: Wasm.GlobalIndex) void {
1569 leb.writeUnsignedFixed(5, code[0..5], @intFromEnum(global));
1569 leb.writeUnsignedFixed(5, code[0..5], @backingInt(global));
15701570}
15711571
15721572const RelocAddr = struct {
......@@ -1618,11 +1618,11 @@ fn reloc_sleb64_addr(code: []u8, ra: RelocAddr) void {
16181618}
16191619
16201620fn reloc_leb_table(code: []u8, table: Wasm.TableIndex) void {
1621 leb.writeUnsignedFixed(5, code[0..5], @intFromEnum(table));
1621 leb.writeUnsignedFixed(5, code[0..5], @backingInt(table));
16221622}
16231623
16241624fn reloc_leb_type(code: []u8, index: FuncTypeIndex) void {
1625 leb.writeUnsignedFixed(5, code[0..5], @intFromEnum(index));
1625 leb.writeUnsignedFixed(5, code[0..5], @backingInt(index));
16261626}
16271627
16281628fn emitCallCtorsFunction(wasm: *const Wasm, binary_bytes: *ArrayList(u8)) Allocator.Error!void {
......@@ -1640,14 +1640,14 @@ fn emitCallCtorsFunction(wasm: *const Wasm, binary_bytes: *ArrayList(u8)) Alloca
16401640 // Call function by its function index
16411641 try binary_bytes.ensureUnusedCapacity(gpa, 1 + 5 + n_returns + 1);
16421642 const call_index: Wasm.OutputFunctionIndex = .fromObjectFunction(wasm, init_func.function_index);
1643 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.call));
1644 appendReservedUleb32(binary_bytes, @intFromEnum(call_index));
1643 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.call));
1644 appendReservedUleb32(binary_bytes, @backingInt(call_index));
16451645
16461646 // drop all returned values from the stack as __wasm_call_ctors has no return value
1647 binary_bytes.appendNTimesAssumeCapacity(@intFromEnum(std.wasm.Opcode.drop), n_returns);
1647 binary_bytes.appendNTimesAssumeCapacity(@backingInt(std.wasm.Opcode.drop), n_returns);
16481648 }
16491649
1650 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end)); // end function body
1650 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end)); // end function body
16511651}
16521652
16531653fn emitInitMemoryFunction(
......@@ -1674,31 +1674,31 @@ fn emitInitMemoryFunction(
16741674 try binary_bytes.ensureUnusedCapacity(gpa, 2 * 3 + 6 * 3 + 1 + 6 * 3 + 1 + 5 * 4 + 1 + 1);
16751675 // destination blocks
16761676 // based on values we jump to corresponding label
1677 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block)); // $drop
1678 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.BlockType.empty));
1677 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.block)); // $drop
1678 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.BlockType.empty));
16791679
1680 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block)); // $wait
1681 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.BlockType.empty));
1680 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.block)); // $wait
1681 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.BlockType.empty));
16821682
1683 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block)); // $init
1684 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.BlockType.empty));
1683 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.block)); // $init
1684 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.BlockType.empty));
16851685
16861686 // atomically check
16871687 appendReservedI32Const(binary_bytes, flag_address);
16881688 appendReservedI32Const(binary_bytes, 0);
16891689 appendReservedI32Const(binary_bytes, 1);
1690 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.atomics_prefix));
1691 appendReservedUleb32(binary_bytes, @intFromEnum(std.wasm.AtomicsOpcode.i32_atomic_rmw_cmpxchg));
1690 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.atomics_prefix));
1691 appendReservedUleb32(binary_bytes, @backingInt(std.wasm.AtomicsOpcode.i32_atomic_rmw_cmpxchg));
16921692 appendReservedUleb32(binary_bytes, 2); // alignment
16931693 appendReservedUleb32(binary_bytes, 0); // offset
16941694
16951695 // based on the value from the atomic check, jump to the label.
1696 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.br_table));
1696 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.br_table));
16971697 appendReservedUleb32(binary_bytes, 2); // length of the table (we have 3 blocks but because of the mandatory default the length is 2).
16981698 appendReservedUleb32(binary_bytes, 0); // $init
16991699 appendReservedUleb32(binary_bytes, 1); // $wait
17001700 appendReservedUleb32(binary_bytes, 2); // $drop
1701 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end));
1701 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end));
17021702 }
17031703
17041704 const segment_groups = wasm.flush_buffer.data_segment_groups.items;
......@@ -1723,19 +1723,19 @@ fn emitInitMemoryFunction(
17231723 // global. This allows the runtime to use this static copy of the
17241724 // TLS data for the first/main thread.
17251725 appendReservedI32Const(binary_bytes, start_addr);
1726 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.global_set));
1726 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.global_set));
17271727 appendReservedUleb32(binary_bytes, virtual_addrs.tls_base.?);
17281728 }
17291729
17301730 appendReservedI32Const(binary_bytes, 0);
17311731 appendReservedI32Const(binary_bytes, segment_size);
1732 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.misc_prefix));
1732 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.misc_prefix));
17331733 if (segment.isBss(wasm)) {
17341734 // fill bss segment with zeroes
1735 appendReservedUleb32(binary_bytes, @intFromEnum(std.wasm.MiscOpcode.memory_fill));
1735 appendReservedUleb32(binary_bytes, @backingInt(std.wasm.MiscOpcode.memory_fill));
17361736 } else {
17371737 // initialize the segment
1738 appendReservedUleb32(binary_bytes, @intFromEnum(std.wasm.MiscOpcode.memory_init));
1738 appendReservedUleb32(binary_bytes, @backingInt(std.wasm.MiscOpcode.memory_init));
17391739 appendReservedUleb32(binary_bytes, @intCast(segment_index));
17401740 }
17411741 binary_bytes.appendAssumeCapacity(0); // memory index immediate
......@@ -1747,38 +1747,38 @@ fn emitInitMemoryFunction(
17471747 // we set the init memory flag to value '2'
17481748 appendReservedI32Const(binary_bytes, flag_address);
17491749 appendReservedI32Const(binary_bytes, 2);
1750 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.atomics_prefix));
1751 appendReservedUleb32(binary_bytes, @intFromEnum(std.wasm.AtomicsOpcode.i32_atomic_store));
1750 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.atomics_prefix));
1751 appendReservedUleb32(binary_bytes, @backingInt(std.wasm.AtomicsOpcode.i32_atomic_store));
17521752 appendReservedUleb32(binary_bytes, @as(u32, 2)); // alignment
17531753 appendReservedUleb32(binary_bytes, @as(u32, 0)); // offset
17541754
17551755 // notify any waiters for segment initialization completion
17561756 appendReservedI32Const(binary_bytes, flag_address);
1757 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_const));
1757 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i32_const));
17581758 appendReservedLeb128(binary_bytes, @as(i32, -1)); // number of waiters
1759 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.atomics_prefix));
1760 appendReservedUleb32(binary_bytes, @intFromEnum(std.wasm.AtomicsOpcode.memory_atomic_notify));
1759 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.atomics_prefix));
1760 appendReservedUleb32(binary_bytes, @backingInt(std.wasm.AtomicsOpcode.memory_atomic_notify));
17611761 appendReservedUleb32(binary_bytes, @as(u32, 2)); // alignment
17621762 appendReservedUleb32(binary_bytes, @as(u32, 0)); // offset
1763 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.drop));
1763 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.drop));
17641764
17651765 // branch and drop segments
1766 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.br));
1766 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.br));
17671767 appendReservedUleb32(binary_bytes, @as(u32, 1));
17681768
17691769 // wait for thread to initialize memory segments
1770 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end)); // end $wait
1770 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end)); // end $wait
17711771 appendReservedI32Const(binary_bytes, flag_address);
17721772 appendReservedI32Const(binary_bytes, 1); // expected flag value
1773 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_const));
1773 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i64_const));
17741774 appendReservedLeb128(binary_bytes, @as(i64, -1)); // timeout
1775 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.atomics_prefix));
1776 appendReservedUleb32(binary_bytes, @intFromEnum(std.wasm.AtomicsOpcode.memory_atomic_wait32));
1775 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.atomics_prefix));
1776 appendReservedUleb32(binary_bytes, @backingInt(std.wasm.AtomicsOpcode.memory_atomic_wait32));
17771777 appendReservedUleb32(binary_bytes, @as(u32, 2)); // alignment
17781778 appendReservedUleb32(binary_bytes, @as(u32, 0)); // offset
1779 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.drop));
1779 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.drop));
17801780
1781 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end)); // end $drop
1781 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end)); // end $drop
17821782 }
17831783
17841784 for (segment_groups, 0..) |group, segment_index| {
......@@ -1791,13 +1791,13 @@ fn emitInitMemoryFunction(
17911791
17921792 try binary_bytes.ensureUnusedCapacity(gpa, 1 + 5 + 5 + 1);
17931793
1794 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.misc_prefix));
1795 appendReservedUleb32(binary_bytes, @intFromEnum(std.wasm.MiscOpcode.data_drop));
1794 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.misc_prefix));
1795 appendReservedUleb32(binary_bytes, @backingInt(std.wasm.MiscOpcode.data_drop));
17961796 appendReservedUleb32(binary_bytes, @intCast(segment_index));
17971797 }
17981798
17991799 // End of the function body
1800 binary_bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end));
1800 binary_bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end));
18011801}
18021802
18031803fn emitInitTlsFunction(wasm: *const Wasm, bytes: *ArrayList(u8)) Allocator.Error!void {
......@@ -1821,28 +1821,28 @@ fn emitInitTlsFunction(wasm: *const Wasm, bytes: *ArrayList(u8)) Allocator.Error
18211821
18221822 const param_local: u32 = 0;
18231823
1824 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.local_get));
1824 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.local_get));
18251825 appendReservedUleb32(bytes, param_local);
18261826
1827 const tls_base_global_index: Wasm.GlobalIndex = @enumFromInt(wasm.globals.getIndex(.__tls_base).?);
1828 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.global_set));
1829 appendReservedUleb32(bytes, @intFromEnum(tls_base_global_index));
1827 const tls_base_global_index: Wasm.GlobalIndex = @fromBackingInt(@intCast(wasm.globals.getIndex(.__tls_base).?));
1828 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.global_set));
1829 appendReservedUleb32(bytes, @backingInt(tls_base_global_index));
18301830
18311831 // load stack values for the bulk-memory operation
18321832 {
1833 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.local_get));
1833 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.local_get));
18341834 appendReservedUleb32(bytes, param_local);
18351835
1836 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_const));
1836 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i32_const));
18371837 appendReservedUleb32(bytes, 0); //segment offset
18381838
1839 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_const));
1839 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i32_const));
18401840 appendReservedUleb32(bytes, group_size); //segment offset
18411841 }
18421842
18431843 // perform the bulk-memory operation to initialize the data segment
1844 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.misc_prefix));
1845 appendReservedUleb32(bytes, @intFromEnum(std.wasm.MiscOpcode.memory_init));
1844 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.misc_prefix));
1845 appendReservedUleb32(bytes, @backingInt(std.wasm.MiscOpcode.memory_init));
18461846 // segment immediate
18471847 appendReservedUleb32(bytes, data_segment_index);
18481848 // memory index immediate (always 0)
......@@ -1853,17 +1853,17 @@ fn emitInitTlsFunction(wasm: *const Wasm, bytes: *ArrayList(u8)) Allocator.Error
18531853 // which performs all runtime TLS relocations. This is a synthetic function,
18541854 // generated by the linker.
18551855 if (wasm.functions.getIndex(.__wasm_apply_global_tls_relocs)) |function_index| {
1856 const output_function_index: Wasm.OutputFunctionIndex = .fromFunctionIndex(wasm, @enumFromInt(function_index));
1857 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.call));
1858 appendReservedUleb32(bytes, @intFromEnum(output_function_index));
1856 const output_function_index: Wasm.OutputFunctionIndex = .fromFunctionIndex(wasm, @fromBackingInt(@intCast(function_index)));
1857 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.call));
1858 appendReservedUleb32(bytes, @backingInt(output_function_index));
18591859 }
18601860
1861 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end));
1861 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end));
18621862}
18631863
18641864fn emitStartSection(gpa: Allocator, bytes: *ArrayList(u8), i: Wasm.OutputFunctionIndex) !void {
18651865 const header_offset = try reserveVecSectionHeader(gpa, bytes);
1866 replaceVecSectionHeader(bytes, header_offset, .start, @intFromEnum(i));
1866 replaceVecSectionHeader(bytes, header_offset, .start, @backingInt(i));
18671867}
18681868
18691869fn emitTagIndexFunction(
......@@ -1887,31 +1887,31 @@ fn emitTagIndexFunction(
18871887
18881888 appendReservedUleb32(code, 0); // no locals
18891889
1890 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block));
1891 code.appendAssumeCapacity(@intFromEnum(std.wasm.BlockType.empty));
1890 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.block));
1891 code.appendAssumeCapacity(@backingInt(std.wasm.BlockType.empty));
18921892
1893 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.local_get));
1893 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.local_get));
18941894 appendReservedUleb32(code, 0);
18951895
18961896 appendReservedI32Const(code, len);
18971897
18981898 // if < len -> break out of block
1899 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_lt_u));
1899 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i32_lt_u));
19001900
1901 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.br_if));
1901 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.br_if));
19021902 appendReservedUleb32(code, 0);
19031903
19041904 // invalid -> return -1
19051905 appendReservedI32Const(code, ~@as(u32, 0));
1906 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.@"return"));
1906 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.@"return"));
19071907
1908 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end));
1908 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end));
19091909
19101910 // valid -> return input
1911 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.local_get));
1911 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.local_get));
19121912 appendReservedUleb32(code, 0);
19131913
1914 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end));
1914 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end));
19151915
19161916 return;
19171917 }
......@@ -1931,8 +1931,8 @@ fn emitTagIndexFunction(
19311931
19321932 for (tag_values, 0..) |tag_value, tag_index| {
19331933 // block for this if case
1934 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.block));
1935 code.appendAssumeCapacity(@intFromEnum(std.wasm.BlockType.empty));
1934 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.block));
1935 code.appendAssumeCapacity(@backingInt(std.wasm.BlockType.empty));
19361936
19371937 const val: Zcu.Value = .fromInterned(tag_value);
19381938 if (is_big_int) {
......@@ -1947,21 +1947,21 @@ fn emitTagIndexFunction(
19471947 try code.ensureUnusedCapacity(gpa, 35 * num_limbs);
19481948
19491949 for (0..num_limbs) |limb_index| {
1950 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.local_get));
1950 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.local_get));
19511951 appendReservedUleb32(code, 0);
19521952
1953 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_load));
1953 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i64_load));
19541954 appendReservedUleb32(code, @ctz(@as(u32, 8)));
19551955 appendReservedUleb32(code, @intCast(limb_index * 8));
19561956
19571957 appendReservedI64Const(code, limbs[limb_index]);
1958 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_ne));
1958 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i64_ne));
19591959
1960 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.br_if));
1960 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.br_if));
19611961 appendReservedUleb32(code, 0);
19621962 }
19631963 } else {
1964 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.local_get));
1964 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.local_get));
19651965 appendReservedUleb32(code, 0);
19661966
19671967 switch (int_info.bits) {
......@@ -1971,7 +1971,7 @@ fn emitTagIndexFunction(
19711971 .unsigned => @intCast(val.toUnsignedInt(zcu)),
19721972 };
19731973 appendReservedI32Const(code, x);
1974 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_ne));
1974 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i32_ne));
19751975 },
19761976 33...64 => {
19771977 const x: u64 = switch (int_info.signedness) {
......@@ -1979,30 +1979,30 @@ fn emitTagIndexFunction(
19791979 .unsigned => val.toUnsignedInt(zcu),
19801980 };
19811981 appendReservedI64Const(code, x);
1982 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_ne));
1982 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i64_ne));
19831983 },
19841984 else => unreachable,
19851985 }
19861986
1987 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.br_if));
1987 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.br_if));
19881988 appendReservedUleb32(code, 0);
19891989 }
19901990
19911991 appendReservedI32Const(code, @intCast(tag_index));
19921992
1993 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.@"return"));
1993 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.@"return"));
19941994 // end the block for this case
1995 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end));
1995 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end));
19961996 }
19971997
19981998 appendReservedI32Const(code, ~@as(u32, 0));
19991999
2000 code.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end));
2000 code.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end));
20012001}
20022002
20032003/// Writes an unsigned 32-bit integer as a LEB128-encoded 'i32.const' value.
20042004fn appendReservedI32Const(bytes: *ArrayList(u8), val: u32) void {
2005 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_const));
2005 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i32_const));
20062006 var w: std.Io.Writer = .fromArrayList(bytes);
20072007 defer bytes.* = w.toArrayList();
20082008 return w.writeSleb128(@as(i32, @bitCast(val))) catch |err| switch (err) {
......@@ -2012,7 +2012,7 @@ fn appendReservedI32Const(bytes: *ArrayList(u8), val: u32) void {
20122012
20132013/// Writes an unsigned 64-bit integer as a LEB128-encoded 'i64.const' value.
20142014fn appendReservedI64Const(bytes: *ArrayList(u8), val: u64) void {
2015 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i64_const));
2015 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i64_const));
20162016 var w: std.Io.Writer = .fromArrayList(bytes);
20172017 defer bytes.* = w.toArrayList();
20182018 return w.writeSleb128(@as(i64, @bitCast(val))) catch |err| switch (err) {
......@@ -2030,11 +2030,11 @@ fn appendReservedUleb32(bytes: *ArrayList(u8), val: u32) void {
20302030
20312031fn appendGlobal(gpa: Allocator, bytes: *ArrayList(u8), mutable: u8, val: u32) Allocator.Error!void {
20322032 try bytes.ensureUnusedCapacity(gpa, 9);
2033 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Valtype.i32));
2033 bytes.appendAssumeCapacity(@backingInt(std.wasm.Valtype.i32));
20342034 bytes.appendAssumeCapacity(mutable);
2035 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.i32_const));
2035 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.i32_const));
20362036 appendReservedUleb32(bytes, val);
2037 bytes.appendAssumeCapacity(@intFromEnum(std.wasm.Opcode.end));
2037 bytes.appendAssumeCapacity(@backingInt(std.wasm.Opcode.end));
20382038}
20392039
20402040fn appendLeb128(gpa: Allocator, bytes: *ArrayList(u8), value: anytype) Allocator.Error!void {
src/link/Wasm/Object.zig+34-34
......@@ -195,7 +195,7 @@ pub const ScratchSpace = struct {
195195 _,
196196
197197 fn ptr(index: FuncImportIndex, ss: *const ScratchSpace) *FunctionImport {
198 return &ss.func_imports.items[@intFromEnum(index)];
198 return &ss.func_imports.items[@backingInt(index)];
199199 }
200200 };
201201
......@@ -204,7 +204,7 @@ pub const ScratchSpace = struct {
204204 _,
205205
206206 fn ptr(index: GlobalImportIndex, ss: *const ScratchSpace) *GlobalImport {
207 return &ss.global_imports.items[@intFromEnum(index)];
207 return &ss.global_imports.items[@backingInt(index)];
208208 }
209209 };
210210
......@@ -213,7 +213,7 @@ pub const ScratchSpace = struct {
213213 _,
214214
215215 fn ptr(index: TableImportIndex, ss: *const ScratchSpace) *TableImport {
216 return &ss.table_imports.items[@intFromEnum(index)];
216 return &ss.table_imports.items[@backingInt(index)];
217217 }
218218 };
219219
......@@ -222,7 +222,7 @@ pub const ScratchSpace = struct {
222222 _,
223223
224224 fn ptr(index: FuncTypeIndex, ss: *const ScratchSpace) *Wasm.FunctionType.Index {
225 return &ss.func_types.items[@intFromEnum(index)];
225 return &ss.func_types.items[@backingInt(index)];
226226 }
227227 };
228228
......@@ -285,7 +285,7 @@ pub fn parse(
285285 const table_imports_start: u32 = @intCast(wasm.object_table_imports.entries.len);
286286 const data_imports_start: u32 = @intCast(wasm.object_data_imports.entries.len);
287287 const local_section_index_base = wasm.object_total_sections;
288 const object_index: Wasm.ObjectIndex = @enumFromInt(wasm.objects.items.len);
288 const object_index: Wasm.ObjectIndex = @fromBackingInt(@intCast(wasm.objects.items.len));
289289 const source_location: Wasm.SourceLocation = .fromObject(object_index, wasm);
290290
291291 ss.clear();
......@@ -299,9 +299,9 @@ pub fn parse(
299299 var global_section_index: ?Wasm.ObjectSectionIndex = null;
300300 var data_section_index: ?Wasm.ObjectSectionIndex = null;
301301 while (pos < bytes.len) : (wasm.object_total_sections += 1) {
302 const section_index: Wasm.ObjectSectionIndex = @enumFromInt(wasm.object_total_sections);
302 const section_index: Wasm.ObjectSectionIndex = @fromBackingInt(@intCast(wasm.object_total_sections));
303303
304 const section_tag: std.wasm.Section = @enumFromInt(bytes[pos]);
304 const section_tag: std.wasm.Section = @fromBackingInt(@intCast(bytes[pos]));
305305 pos += 1;
306306
307307 const len, pos = readLeb(u32, bytes, pos);
......@@ -316,13 +316,13 @@ pub fn parse(
316316 if (section_version != 2) return error.UnsupportedVersion;
317317 while (pos < section_end) {
318318 const sub_type, pos = readLeb(u8, bytes, pos);
319 log.debug("found subsection: {s}", .{@tagName(@as(SubsectionType, @enumFromInt(sub_type)))});
319 log.debug("found subsection: {s}", .{@tagName(@as(SubsectionType, @fromBackingInt(@intCast(sub_type))))});
320320 const payload_len, pos = readLeb(u32, bytes, pos);
321321 if (payload_len == 0) break;
322322
323323 const count, pos = readLeb(u32, bytes, pos);
324324
325 switch (@as(SubsectionType, @enumFromInt(sub_type))) {
325 switch (@as(SubsectionType, @fromBackingInt(@intCast(sub_type)))) {
326326 .segment_info => {
327327 for (try ss.segment_info.addManyAsSlice(gpa, count)) |*segment| {
328328 const name, pos = readBytes(bytes, pos);
......@@ -340,7 +340,7 @@ pub fn parse(
340340 .flags = .{
341341 .strings = flags.strings,
342342 .tls = tls,
343 .alignment = @enumFromInt(alignment),
343 .alignment = @fromBackingInt(@intCast(alignment)),
344344 .retain = flags.retain,
345345 },
346346 };
......@@ -418,27 +418,27 @@ pub fn parse(
418418 const segment_offset, pos = readLeb(u32, bytes, pos);
419419 const size, pos = readLeb(u32, bytes, pos);
420420 try wasm.object_datas.append(gpa, .{
421 .segment = @enumFromInt(data_segment_start + segment_index),
421 .segment = @fromBackingInt(@intCast(data_segment_start + segment_index)),
422422 .offset = segment_offset,
423423 .size = size,
424424 .name = interned_name,
425425 .flags = symbol.flags,
426426 });
427427 symbol.pointee = .{
428 .data = @enumFromInt(wasm.object_datas.items.len - 1),
428 .data = @fromBackingInt(@intCast(wasm.object_datas.items.len - 1)),
429429 };
430430 }
431431 },
432432 .section => {
433433 const local_section, pos = readLeb(u32, bytes, pos);
434 const section: Wasm.ObjectSectionIndex = @enumFromInt(local_section_index_base + local_section);
434 const section: Wasm.ObjectSectionIndex = @fromBackingInt(@intCast(local_section_index_base + local_section));
435435 symbol.pointee = .{ .section = section };
436436 },
437437
438438 .function => {
439439 const local_index, pos = readLeb(u32, bytes, pos);
440440 if (symbol.flags.undefined) {
441 const function_import: ScratchSpace.FuncImportIndex = @enumFromInt(local_index);
441 const function_import: ScratchSpace.FuncImportIndex = @fromBackingInt(@intCast(local_index));
442442 symbol.pointee = .{ .function_import = function_import };
443443 if (symbol.flags.explicit_name) {
444444 const name, pos = readBytes(bytes, pos);
......@@ -447,7 +447,7 @@ pub fn parse(
447447 symbol.name = function_import.ptr(ss).name.toOptional();
448448 }
449449 } else {
450 symbol.pointee = .{ .function = @enumFromInt(functions_start + (local_index - ss.func_imports.items.len)) };
450 symbol.pointee = .{ .function = @fromBackingInt(@intCast(functions_start + (local_index - ss.func_imports.items.len))) };
451451 const name, pos = readBytes(bytes, pos);
452452 symbol.name = (try wasm.internString(name)).toOptional();
453453 }
......@@ -455,7 +455,7 @@ pub fn parse(
455455 .global => {
456456 const local_index, pos = readLeb(u32, bytes, pos);
457457 if (symbol.flags.undefined) {
458 const global_import: ScratchSpace.GlobalImportIndex = @enumFromInt(local_index);
458 const global_import: ScratchSpace.GlobalImportIndex = @fromBackingInt(@intCast(local_index));
459459 symbol.pointee = .{ .global_import = global_import };
460460 if (symbol.flags.explicit_name) {
461461 const name, pos = readBytes(bytes, pos);
......@@ -464,7 +464,7 @@ pub fn parse(
464464 symbol.name = global_import.ptr(ss).name.toOptional();
465465 }
466466 } else {
467 symbol.pointee = .{ .global = @enumFromInt(globals_start + (local_index - ss.global_imports.items.len)) };
467 symbol.pointee = .{ .global = @fromBackingInt(@intCast(globals_start + (local_index - ss.global_imports.items.len))) };
468468 const name, pos = readBytes(bytes, pos);
469469 symbol.name = (try wasm.internString(name)).toOptional();
470470 }
......@@ -473,7 +473,7 @@ pub fn parse(
473473 const local_index, pos = readLeb(u32, bytes, pos);
474474 if (symbol.flags.undefined) {
475475 table_import_symbol_count += 1;
476 const table_import: ScratchSpace.TableImportIndex = @enumFromInt(local_index);
476 const table_import: ScratchSpace.TableImportIndex = @fromBackingInt(@intCast(local_index));
477477 symbol.pointee = .{ .table_import = table_import };
478478 if (symbol.flags.explicit_name) {
479479 const name, pos = readBytes(bytes, pos);
......@@ -482,13 +482,13 @@ pub fn parse(
482482 symbol.name = table_import.ptr(ss).name.toOptional();
483483 }
484484 } else {
485 symbol.pointee = .{ .table = @enumFromInt(tables_start + (local_index - ss.table_imports.items.len)) };
485 symbol.pointee = .{ .table = @fromBackingInt(@intCast(tables_start + (local_index - ss.table_imports.items.len))) };
486486 const name, pos = readBytes(bytes, pos);
487487 symbol.name = (try wasm.internString(name)).toOptional();
488488 }
489489 },
490490 else => {
491 log.debug("unrecognized symbol type tag: {x}", .{@intFromEnum(tag)});
491 log.debug("unrecognized symbol type tag: {x}", .{@backingInt(tag)});
492492 return error.UnrecognizedSymbolType;
493493 },
494494 }
......@@ -506,14 +506,14 @@ pub fn parse(
506506 // "Relocation sections can only target code, data and custom sections."
507507 const local_section, pos = readLeb(u32, bytes, pos);
508508 const count, pos = readLeb(u32, bytes, pos);
509 const section: Wasm.ObjectSectionIndex = @enumFromInt(local_section_index_base + local_section);
509 const section: Wasm.ObjectSectionIndex = @fromBackingInt(@intCast(local_section_index_base + local_section));
510510
511511 log.debug("found {d} relocations for section={d}", .{ count, section });
512512
513513 var prev_offset: u32 = 0;
514514 try wasm.object_relocations.ensureUnusedCapacity(gpa, count);
515515 for (0..count) |_| {
516 const tag: RelocationType = @enumFromInt(bytes[pos]);
516 const tag: RelocationType = @fromBackingInt(@intCast(bytes[pos]));
517517 pos += 1;
518518 const offset, pos = readLeb(u32, bytes, pos);
519519 const index, pos = readLeb(u32, bytes, pos);
......@@ -668,7 +668,7 @@ pub fn parse(
668668
669669 try wasm.object_custom_segments.put(gpa, section_index, .{
670670 .payload = .{
671 .off = @enumFromInt(data_off),
671 .off = @fromBackingInt(@intCast(data_off)),
672672 .len = @intCast(debug_content.len),
673673 },
674674 .flags = .{},
......@@ -706,7 +706,7 @@ pub fn parse(
706706 try ss.func_imports.append(gpa, .{
707707 .module_name = interned_module_name,
708708 .name = interned_name,
709 .function_index = @enumFromInt(function),
709 .function_index = @fromBackingInt(@intCast(function)),
710710 });
711711 },
712712 .memory => {
......@@ -766,7 +766,7 @@ pub fn parse(
766766 const functions_len, pos = readLeb(u32, bytes, pos);
767767 for (try ss.func_type_indexes.addManyAsSlice(gpa, functions_len)) |*func_type_index| {
768768 const i, pos = readLeb(u32, bytes, pos);
769 func_type_index.* = @enumFromInt(i);
769 func_type_index.* = @fromBackingInt(@intCast(i));
770770 }
771771 },
772772 .table => {
......@@ -837,23 +837,23 @@ pub fn parse(
837837 // existing symbol table data if the name matches.
838838 for (try ss.exports.addManyAsSlice(gpa, exports_len)) |*exp| {
839839 const name, pos = readBytes(bytes, pos);
840 const kind: std.wasm.ExternalKind = @enumFromInt(bytes[pos]);
840 const kind: std.wasm.ExternalKind = @fromBackingInt(@intCast(bytes[pos]));
841841 pos += 1;
842842 const index, pos = readLeb(u32, bytes, pos);
843843 exp.* = .{
844844 .name = try wasm.internString(name),
845845 .pointee = switch (kind) {
846 .function => .{ .function = @enumFromInt(functions_start + (index - ss.func_imports.items.len)) },
847 .table => .{ .table = @enumFromInt(tables_start + (index - ss.table_imports.items.len)) },
848 .memory => .{ .memory = @enumFromInt(memories_start + index) },
849 .global => .{ .global = @enumFromInt(globals_start + (index - ss.global_imports.items.len)) },
846 .function => .{ .function = @fromBackingInt(@intCast(functions_start + (index - ss.func_imports.items.len))) },
847 .table => .{ .table = @fromBackingInt(@intCast(tables_start + (index - ss.table_imports.items.len))) },
848 .memory => .{ .memory = @fromBackingInt(@intCast(memories_start + index)) },
849 .global => .{ .global = @fromBackingInt(@intCast(globals_start + (index - ss.global_imports.items.len))) },
850850 },
851851 };
852852 }
853853 },
854854 .start => {
855855 const index, pos = readLeb(u32, bytes, pos);
856 start_function = @enumFromInt(functions_start + index);
856 start_function = @fromBackingInt(@intCast(functions_start + index));
857857 },
858858 .element => {
859859 log.warn("unimplemented: element section in {f} {?s}", .{ path, archive_member_name });
......@@ -1000,7 +1000,7 @@ pub fn parse(
10001000 .no_strip = true,
10011001 },
10021002 .name = table_import_name.toOptional(),
1003 .pointee = .{ .table_import = @enumFromInt(0) },
1003 .pointee = .{ .table_import = @fromBackingInt(@intCast(0)) },
10041004 });
10051005 }
10061006
......@@ -1482,7 +1482,7 @@ fn readBytes(bytes: []const u8, start_pos: usize) struct { []const u8, usize } {
14821482fn readEnum(comptime T: type, bytes: []const u8, pos: usize) struct { T, usize } {
14831483 const Tag = @typeInfo(T).@"enum".tag_type;
14841484 const int, const new_pos = readLeb(Tag, bytes, pos);
1485 return .{ @enumFromInt(int), new_pos };
1485 return .{ @fromBackingInt(@intCast(int)), new_pos };
14861486}
14871487
14881488fn readLimits(bytes: []const u8, start_pos: usize) struct { std.wasm.Limits, usize } {
......@@ -1503,7 +1503,7 @@ fn readInit(wasm: *Wasm, bytes: []const u8, pos: usize) !struct { Wasm.Expr, usi
15031503
15041504pub fn exprEndPos(bytes: []const u8, pos: usize) error{InvalidInitOpcode}!usize {
15051505 const opcode = bytes[pos];
1506 return switch (@as(std.wasm.Opcode, @enumFromInt(opcode))) {
1506 return switch (@as(std.wasm.Opcode, @fromBackingInt(@intCast(opcode)))) {
15071507 .i32_const => readLeb(i32, bytes, pos + 1)[1],
15081508 .i64_const => readLeb(i64, bytes, pos + 1)[1],
15091509 .f32_const => pos + 5,
src/main.zig+5-5
......@@ -140,8 +140,8 @@ pub fn log(
140140 // Hide debug messages unless:
141141 // * logging enabled with `-Dlog`.
142142 // * the --debug-log arg for the scope has been provided
143 if (@intFromEnum(level) > @intFromEnum(std.options.log_level) or
144 @intFromEnum(level) > @intFromEnum(std.log.Level.info))
143 if (@backingInt(level) > @backingInt(std.options.log_level) or
144 @backingInt(level) > @backingInt(std.log.Level.info))
145145 {
146146 if (!build_options.enable_logging) return;
147147
......@@ -4420,7 +4420,7 @@ fn serve(
44204420 }
44214421 },
44224422 else => {
4423 fatal("unrecognized message from client: 0x{x}", .{@intFromEnum(hdr.tag)});
4423 fatal("unrecognized message from client: 0x{x}", .{@backingInt(hdr.tag)});
44244424 },
44254425 }
44264426 }
......@@ -5732,8 +5732,8 @@ fn cmdChangelist(arena: Allocator, io: Io, args: []const []const u8, environ_map
57325732 var it = inst_map.iterator();
57335733 while (it.next()) |entry| {
57345734 try stdout_bw.print(" %{d} => %{d}\n", .{
5735 @intFromEnum(entry.key_ptr.*),
5736 @intFromEnum(entry.value_ptr.*),
5735 @backingInt(entry.key_ptr.*),
5736 @backingInt(entry.value_ptr.*),
57375737 });
57385738 }
57395739 }
src/print_zir.zig+99-99
......@@ -26,10 +26,10 @@ pub fn renderAsText(gpa: Allocator, tree: ?Ast, zir: Zir, bw: *std.Io.Writer) !v
2626 };
2727
2828 const main_struct_inst: Zir.Inst.Index = .main_struct_inst;
29 try bw.print("%{d} ", .{@intFromEnum(main_struct_inst)});
29 try bw.print("%{d} ", .{@backingInt(main_struct_inst)});
3030 try writer.writeInstToStream(bw, main_struct_inst);
3131 try bw.writeAll("\n");
32 const imports_index = zir.extra[@intFromEnum(Zir.ExtraIndex.imports)];
32 const imports_index = zir.extra[@backingInt(Zir.ExtraIndex.imports)];
3333 if (imports_index != 0) {
3434 try bw.writeAll("Imports:\n");
3535
......@@ -75,7 +75,7 @@ pub fn renderInstructionContext(
7575
7676 try writer.writeBody(bw, block[0..block_index]);
7777 try bw.splatByteAll(' ', writer.indent - 2);
78 try bw.print("> %{d} ", .{@intFromEnum(block[block_index])});
78 try bw.print("> %{d} ", .{@backingInt(block[block_index])});
7979 try writer.writeInstToStream(bw, block[block_index]);
8080 try bw.writeByte('\n');
8181 if (block_index + 1 < block.len) {
......@@ -105,7 +105,7 @@ pub fn renderSingleInstruction(
105105 .recurse_blocks = false,
106106 };
107107
108 try bw.print("%{d} ", .{@intFromEnum(inst)});
108 try bw.print("%{d} ", .{@backingInt(inst)});
109109 try writer.writeInstToStream(bw, inst);
110110}
111111
......@@ -184,8 +184,8 @@ const Writer = struct {
184184 inst: Zir.Inst.Index,
185185 ) Error!void {
186186 const tags = self.code.instructions.items(.tag);
187 const tag = tags[@intFromEnum(inst)];
188 try stream.print("= {s}(", .{@tagName(tags[@intFromEnum(inst)])});
187 const tag = tags[@backingInt(inst)];
188 try stream.print("= {s}(", .{@tagName(tags[@backingInt(inst)])});
189189 switch (tag) {
190190 .alloc,
191191 .alloc_mut,
......@@ -510,7 +510,7 @@ const Writer = struct {
510510 }
511511
512512 fn writeExtended(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
513 const extended = self.code.instructions.items(.data)[@intFromEnum(inst)].extended;
513 const extended = self.code.instructions.items(.data)[@backingInt(inst)].extended;
514514 try stream.print("{s}(", .{@tagName(extended.opcode)});
515515 switch (extended.opcode) {
516516 .this,
......@@ -593,7 +593,7 @@ const Writer = struct {
593593 },
594594
595595 .round_op => {
596 const round_op: Zir.Inst.RoundOp = @enumFromInt(extended.small);
596 const round_op: Zir.Inst.RoundOp = @fromBackingInt(@intCast(extended.small));
597597 const inst_data = self.code.extraData(Zir.Inst.BinNode, extended.operand).data;
598598 try stream.print("{s}, ", .{@tagName(round_op)});
599599 try self.writeInstRef(stream, inst_data.lhs);
......@@ -604,7 +604,7 @@ const Writer = struct {
604604 },
605605
606606 .reify_slice_arg_ty => {
607 const reify_slice_arg_info: Zir.Inst.ReifySliceArgInfo = @enumFromInt(extended.small);
607 const reify_slice_arg_info: Zir.Inst.ReifySliceArgInfo = @fromBackingInt(@intCast(extended.small));
608608 const extra = self.code.extraData(Zir.Inst.UnNode, extended.operand).data;
609609 try stream.print("{t}, ", .{reify_slice_arg_info});
610610 try self.writeInstRef(stream, extra.operand);
......@@ -638,7 +638,7 @@ const Writer = struct {
638638 },
639639 .reify_struct => {
640640 const extra = self.code.extraData(Zir.Inst.ReifyStruct, extended.operand).data;
641 const name_strat: Zir.Inst.NameStrategy = @enumFromInt(extended.small);
641 const name_strat: Zir.Inst.NameStrategy = @fromBackingInt(@intCast(extended.small));
642642 try stream.print("line({d}), {t}, ", .{ extra.src_line, name_strat });
643643 try self.writeInstRef(stream, extra.layout);
644644 try stream.writeAll(", ");
......@@ -657,7 +657,7 @@ const Writer = struct {
657657 },
658658 .reify_union => {
659659 const extra = self.code.extraData(Zir.Inst.ReifyUnion, extended.operand).data;
660 const name_strat: Zir.Inst.NameStrategy = @enumFromInt(extended.small);
660 const name_strat: Zir.Inst.NameStrategy = @fromBackingInt(@intCast(extended.small));
661661 try stream.print("line({d}), {t}, ", .{ extra.src_line, name_strat });
662662 try self.writeInstRef(stream, extra.layout);
663663 try stream.writeAll(", ");
......@@ -676,7 +676,7 @@ const Writer = struct {
676676 },
677677 .reify_enum => {
678678 const extra = self.code.extraData(Zir.Inst.ReifyEnum, extended.operand).data;
679 const name_strat: Zir.Inst.NameStrategy = @enumFromInt(extended.small);
679 const name_strat: Zir.Inst.NameStrategy = @fromBackingInt(@intCast(extended.small));
680680 try stream.print("line({d}), {t}, ", .{ extra.src_line, name_strat });
681681 try self.writeInstRef(stream, extra.tag_ty);
682682 try stream.writeAll(", ");
......@@ -719,14 +719,14 @@ const Writer = struct {
719719
720720 fn writeExtNode(self: *Writer, stream: *std.Io.Writer, extended: Zir.Inst.Extended.InstData) !void {
721721 try stream.writeAll(")) ");
722 const src_node: Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(extended.operand)));
722 const src_node: Ast.Node.Offset = @fromBackingInt(@intCast(@as(i32, @bitCast(extended.operand))));
723723 try self.writeSrcNode(stream, src_node);
724724 }
725725
726726 fn writeArrayInitElemType(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
727 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].bin;
727 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].bin;
728728 try self.writeInstRef(stream, inst_data.lhs);
729 try stream.print(", {d})", .{@intFromEnum(inst_data.rhs)});
729 try stream.print(", {d})", .{@backingInt(inst_data.rhs)});
730730 }
731731
732732 fn writeUnNode(
......@@ -734,7 +734,7 @@ const Writer = struct {
734734 stream: *std.Io.Writer,
735735 inst: Zir.Inst.Index,
736736 ) Error!void {
737 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
737 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].un_node;
738738 try self.writeInstRef(stream, inst_data.operand);
739739 try stream.writeAll(") ");
740740 try self.writeSrcNode(stream, inst_data.src_node);
......@@ -745,7 +745,7 @@ const Writer = struct {
745745 stream: *std.Io.Writer,
746746 inst: Zir.Inst.Index,
747747 ) Error!void {
748 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].un_tok;
748 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].un_tok;
749749 try self.writeInstRef(stream, inst_data.operand);
750750 try stream.writeAll(") ");
751751 try self.writeSrcTok(stream, inst_data.src_tok);
......@@ -756,7 +756,7 @@ const Writer = struct {
756756 stream: *std.Io.Writer,
757757 inst: Zir.Inst.Index,
758758 ) Error!void {
759 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
759 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
760760 const extra = self.code.extraData(Zir.Inst.ValidateDestructure, inst_data.payload_index).data;
761761 try self.writeInstRef(stream, extra.operand);
762762 try stream.print(", {d}) (destructure=", .{extra.expect_len});
......@@ -770,7 +770,7 @@ const Writer = struct {
770770 stream: *std.Io.Writer,
771771 inst: Zir.Inst.Index,
772772 ) Error!void {
773 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
773 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
774774 const extra = self.code.extraData(Zir.Inst.ArrayInit, inst_data.payload_index).data;
775775 try self.writeInstRef(stream, extra.ty);
776776 try stream.print(", {d}) ", .{extra.init_count});
......@@ -782,7 +782,7 @@ const Writer = struct {
782782 stream: *std.Io.Writer,
783783 inst: Zir.Inst.Index,
784784 ) Error!void {
785 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
785 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
786786 const extra = self.code.extraData(Zir.Inst.ArrayTypeSentinel, inst_data.payload_index).data;
787787 try self.writeInstRef(stream, extra.len);
788788 try stream.writeAll(", ");
......@@ -798,7 +798,7 @@ const Writer = struct {
798798 stream: *std.Io.Writer,
799799 inst: Zir.Inst.Index,
800800 ) Error!void {
801 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].ptr_type;
801 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].ptr_type;
802802 const str_allowzero = if (inst_data.flags.is_allowzero) "allowzero, " else "";
803803 const str_const = if (!inst_data.flags.is_mutable) "const, " else "";
804804 const str_volatile = if (inst_data.flags.is_volatile) "volatile, " else "";
......@@ -813,25 +813,25 @@ const Writer = struct {
813813 var extra_index = extra.end;
814814 if (inst_data.flags.has_sentinel) {
815815 try stream.writeAll(", ");
816 try self.writeInstRef(stream, @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[extra_index])));
816 try self.writeInstRef(stream, @as(Zir.Inst.Ref, @fromBackingInt(@intCast(self.code.extra[extra_index]))));
817817 extra_index += 1;
818818 }
819819 if (inst_data.flags.has_align) {
820820 try stream.writeAll(", align(");
821 try self.writeInstRef(stream, @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[extra_index])));
821 try self.writeInstRef(stream, @as(Zir.Inst.Ref, @fromBackingInt(@intCast(self.code.extra[extra_index]))));
822822 extra_index += 1;
823823 if (inst_data.flags.has_bit_range) {
824824 const bit_start = extra_index + @intFromBool(inst_data.flags.has_addrspace);
825825 try stream.writeAll(":");
826 try self.writeInstRef(stream, @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[bit_start])));
826 try self.writeInstRef(stream, @as(Zir.Inst.Ref, @fromBackingInt(@intCast(self.code.extra[bit_start]))));
827827 try stream.writeAll(":");
828 try self.writeInstRef(stream, @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[bit_start + 1])));
828 try self.writeInstRef(stream, @as(Zir.Inst.Ref, @fromBackingInt(@intCast(self.code.extra[bit_start + 1]))));
829829 }
830830 try stream.writeAll(")");
831831 }
832832 if (inst_data.flags.has_addrspace) {
833833 try stream.writeAll(", addrspace(");
834 try self.writeInstRef(stream, @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[extra_index])));
834 try self.writeInstRef(stream, @as(Zir.Inst.Ref, @fromBackingInt(@intCast(self.code.extra[extra_index]))));
835835 try stream.writeAll(")");
836836 }
837837 try stream.writeAll(") ");
......@@ -839,14 +839,14 @@ const Writer = struct {
839839 }
840840
841841 fn writeInt(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
842 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].int;
842 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].int;
843843 try stream.print("{d})", .{inst_data});
844844 }
845845
846846 fn writeIntBig(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
847 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].str;
847 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].str;
848848 const byte_count = inst_data.len * @sizeOf(std.math.big.Limb);
849 const limb_bytes = self.code.string_bytes[@intFromEnum(inst_data.start)..][0..byte_count];
849 const limb_bytes = self.code.string_bytes[@backingInt(inst_data.start)..][0..byte_count];
850850 // limb_bytes is not aligned properly; we must allocate and copy the bytes
851851 // in order to accomplish this.
852852 const limbs = try self.gpa.alloc(std.math.big.Limb, inst_data.len);
......@@ -863,12 +863,12 @@ const Writer = struct {
863863 }
864864
865865 fn writeFloat(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
866 const number = self.code.instructions.items(.data)[@intFromEnum(inst)].float;
866 const number = self.code.instructions.items(.data)[@backingInt(inst)].float;
867867 try stream.print("{d})", .{number});
868868 }
869869
870870 fn writeFloat128(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
871 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
871 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
872872 const extra = self.code.extraData(Zir.Inst.Float128, inst_data.payload_index).data;
873873 const number = extra.get();
874874 // TODO improve std.format to be able to print f128 values
......@@ -881,13 +881,13 @@ const Writer = struct {
881881 stream: *std.Io.Writer,
882882 inst: Zir.Inst.Index,
883883 ) Error!void {
884 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].str;
884 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].str;
885885 const str = inst_data.get(self.code);
886886 try stream.print("\"{f}\")", .{std.zig.fmtString(str)});
887887 }
888888
889889 fn writeSliceStart(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
890 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
890 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
891891 const extra = self.code.extraData(Zir.Inst.SliceStart, inst_data.payload_index).data;
892892 try self.writeInstRef(stream, extra.lhs);
893893 try stream.writeAll(", ");
......@@ -897,7 +897,7 @@ const Writer = struct {
897897 }
898898
899899 fn writeSliceEnd(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
900 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
900 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
901901 const extra = self.code.extraData(Zir.Inst.SliceEnd, inst_data.payload_index).data;
902902 try self.writeInstRef(stream, extra.lhs);
903903 try stream.writeAll(", ");
......@@ -909,7 +909,7 @@ const Writer = struct {
909909 }
910910
911911 fn writeSliceSentinel(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
912 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
912 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
913913 const extra = self.code.extraData(Zir.Inst.SliceSentinel, inst_data.payload_index).data;
914914 try self.writeInstRef(stream, extra.lhs);
915915 try stream.writeAll(", ");
......@@ -923,7 +923,7 @@ const Writer = struct {
923923 }
924924
925925 fn writeSliceLength(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
926 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
926 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
927927 const extra = self.code.extraData(Zir.Inst.SliceLength, inst_data.payload_index).data;
928928 try self.writeInstRef(stream, extra.lhs);
929929 try stream.writeAll(", ");
......@@ -939,7 +939,7 @@ const Writer = struct {
939939 }
940940
941941 fn writeUnionInit(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
942 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
942 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
943943 const extra = self.code.extraData(Zir.Inst.UnionInit, inst_data.payload_index).data;
944944 try self.writeInstRef(stream, extra.union_type);
945945 try stream.writeAll(", ");
......@@ -951,7 +951,7 @@ const Writer = struct {
951951 }
952952
953953 fn writeShuffle(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
954 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
954 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
955955 const extra = self.code.extraData(Zir.Inst.Shuffle, inst_data.payload_index).data;
956956 try self.writeInstRef(stream, extra.elem_type);
957957 try stream.writeAll(", ");
......@@ -978,7 +978,7 @@ const Writer = struct {
978978 }
979979
980980 fn writeMulAdd(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
981 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
981 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
982982 const extra = self.code.extraData(Zir.Inst.MulAdd, inst_data.payload_index).data;
983983 try self.writeInstRef(stream, extra.mulend1);
984984 try stream.writeAll(", ");
......@@ -990,7 +990,7 @@ const Writer = struct {
990990 }
991991
992992 fn writeFromBackingInt(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
993 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
993 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
994994 const extra = self.code.extraData(Zir.Inst.FromBackingInt, inst_data.payload_index);
995995 try self.writeInstRef(stream, extra.data.result_type);
996996 try stream.writeAll(", ");
......@@ -1000,7 +1000,7 @@ const Writer = struct {
10001000 }
10011001
10021002 fn writeBuiltinCall(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1003 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1003 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
10041004 const extra = self.code.extraData(Zir.Inst.BuiltinCall, inst_data.payload_index).data;
10051005
10061006 try self.writeFlag(stream, "nodiscard ", extra.flags.ensure_result_used);
......@@ -1033,7 +1033,7 @@ const Writer = struct {
10331033 }
10341034
10351035 fn writeParam(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1036 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_tok;
1036 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_tok;
10371037 const extra = self.code.extraData(Zir.Inst.Param, inst_data.payload_index);
10381038 const body = self.code.bodySlice(extra.end, extra.data.type.body_len);
10391039 try stream.print("\"{f}\", ", .{
......@@ -1048,7 +1048,7 @@ const Writer = struct {
10481048 }
10491049
10501050 fn writePlNodeBin(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1051 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1051 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
10521052 const extra = self.code.extraData(Zir.Inst.Bin, inst_data.payload_index).data;
10531053 try self.writeInstRef(stream, extra.lhs);
10541054 try stream.writeAll(", ");
......@@ -1058,7 +1058,7 @@ const Writer = struct {
10581058 }
10591059
10601060 fn writePlNodeMultiOp(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1061 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1061 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
10621062 const extra = self.code.extraData(Zir.Inst.MultiOp, inst_data.payload_index);
10631063 const args = self.code.refSlice(extra.end, extra.data.operands_len);
10641064 try stream.writeAll("{");
......@@ -1071,13 +1071,13 @@ const Writer = struct {
10711071 }
10721072
10731073 fn writeElemValImm(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1074 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].elem_val_imm;
1074 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].elem_val_imm;
10751075 try self.writeInstRef(stream, inst_data.operand);
10761076 try stream.print(", {d})", .{inst_data.idx});
10771077 }
10781078
10791079 fn writeArrayInitElemPtr(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1080 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1080 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
10811081 const extra = self.code.extraData(Zir.Inst.ElemPtrImm, inst_data.payload_index).data;
10821082
10831083 try self.writeInstRef(stream, extra.ptr);
......@@ -1086,7 +1086,7 @@ const Writer = struct {
10861086 }
10871087
10881088 fn writePlNodeExport(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1089 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1089 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
10901090 const extra = self.code.extraData(Zir.Inst.Export, inst_data.payload_index).data;
10911091
10921092 try self.writeInstRef(stream, extra.exported);
......@@ -1097,7 +1097,7 @@ const Writer = struct {
10971097 }
10981098
10991099 fn writeValidateArrayInitRefTy(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1100 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1100 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
11011101 const extra = self.code.extraData(Zir.Inst.ArrayInitRefTy, inst_data.payload_index).data;
11021102
11031103 try self.writeInstRef(stream, extra.ptr_ty);
......@@ -1107,7 +1107,7 @@ const Writer = struct {
11071107 }
11081108
11091109 fn writeStructInit(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1110 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1110 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
11111111 const extra = self.code.extraData(Zir.Inst.StructInit, inst_data.payload_index);
11121112 var field_i: u32 = 0;
11131113 var extra_index = extra.end;
......@@ -1174,7 +1174,7 @@ const Writer = struct {
11741174 }
11751175
11761176 fn writeAtomicLoad(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1177 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1177 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
11781178 const extra = self.code.extraData(Zir.Inst.AtomicLoad, inst_data.payload_index).data;
11791179
11801180 try self.writeInstRef(stream, extra.elem_type);
......@@ -1187,7 +1187,7 @@ const Writer = struct {
11871187 }
11881188
11891189 fn writeAtomicStore(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1190 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1190 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
11911191 const extra = self.code.extraData(Zir.Inst.AtomicStore, inst_data.payload_index).data;
11921192
11931193 try self.writeInstRef(stream, extra.ptr);
......@@ -1200,7 +1200,7 @@ const Writer = struct {
12001200 }
12011201
12021202 fn writeAtomicRmw(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1203 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1203 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
12041204 const extra = self.code.extraData(Zir.Inst.AtomicRmw, inst_data.payload_index).data;
12051205
12061206 try self.writeInstRef(stream, extra.ptr);
......@@ -1215,7 +1215,7 @@ const Writer = struct {
12151215 }
12161216
12171217 fn writeStructInitAnon(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1218 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1218 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
12191219 const extra = self.code.extraData(Zir.Inst.StructInitAnon, inst_data.payload_index);
12201220 var field_i: u32 = 0;
12211221 var extra_index = extra.end;
......@@ -1236,7 +1236,7 @@ const Writer = struct {
12361236 }
12371237
12381238 fn writeStructInitFieldType(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1239 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1239 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
12401240 const extra = self.code.extraData(Zir.Inst.FieldType, inst_data.payload_index).data;
12411241 try self.writeInstRef(stream, extra.container_type);
12421242 const field_name = self.code.nullTerminatedString(extra.name_start);
......@@ -1245,7 +1245,7 @@ const Writer = struct {
12451245 }
12461246
12471247 fn writeFieldTypeRef(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1248 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1248 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
12491249 const extra = self.code.extraData(Zir.Inst.FieldTypeRef, inst_data.payload_index).data;
12501250 try self.writeInstRef(stream, extra.container_type);
12511251 try stream.writeAll(", ");
......@@ -1271,7 +1271,7 @@ const Writer = struct {
12711271 stream: *std.Io.Writer,
12721272 inst: Zir.Inst.Index,
12731273 ) Error!void {
1274 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].inst_node;
1274 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].inst_node;
12751275 try self.writeInstIndex(stream, inst_data.inst);
12761276 try stream.writeAll(") ");
12771277 try self.writeSrcNode(stream, inst_data.src_node);
......@@ -1288,7 +1288,7 @@ const Writer = struct {
12881288
12891289 try self.writeFlag(stream, "volatile, ", small.is_volatile);
12901290 if (tmpl_is_expr) {
1291 try self.writeInstRef(stream, @enumFromInt(@intFromEnum(extra.data.asm_source)));
1291 try self.writeInstRef(stream, @fromBackingInt(@intCast(@backingInt(extra.data.asm_source))));
12921292 } else {
12931293 const asm_source = self.code.nullTerminatedString(extra.data.asm_source);
12941294 try stream.print("\"{f}\"", .{std.zig.fmtString(asm_source)});
......@@ -1354,7 +1354,7 @@ const Writer = struct {
13541354 inst: Zir.Inst.Index,
13551355 comptime kind: enum { direct, field },
13561356 ) !void {
1357 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1357 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
13581358 const ExtraType = switch (kind) {
13591359 .direct => Zir.Inst.Call,
13601360 .field => Zir.Inst.FieldCall,
......@@ -1366,7 +1366,7 @@ const Writer = struct {
13661366 if (extra.data.flags.ensure_result_used) {
13671367 try stream.writeAll("nodiscard ");
13681368 }
1369 try stream.print(".{s}, ", .{@tagName(@as(std.lang.CallModifier, @enumFromInt(extra.data.flags.packed_modifier)))});
1369 try stream.print(".{s}, ", .{@tagName(@as(std.lang.CallModifier, @fromBackingInt(@intCast(extra.data.flags.packed_modifier))))});
13701370 switch (kind) {
13711371 .direct => try self.writeInstRef(stream, extra.data.callee),
13721372 .field => {
......@@ -1402,7 +1402,7 @@ const Writer = struct {
14021402 }
14031403
14041404 fn writeBlock(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1405 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1405 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
14061406 const extra = self.code.extraData(Zir.Inst.Block, inst_data.payload_index);
14071407 const body = self.code.bodySlice(extra.end, extra.data.body_len);
14081408 try self.writeBracedBody(stream, body);
......@@ -1411,7 +1411,7 @@ const Writer = struct {
14111411 }
14121412
14131413 fn writeBlockComptime(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1414 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1414 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
14151415 const extra = self.code.extraData(Zir.Inst.BlockComptime, inst_data.payload_index);
14161416 const body = self.code.bodySlice(extra.end, extra.data.body_len);
14171417 try stream.print("reason={s}, ", .{@tagName(extra.data.reason)});
......@@ -1421,7 +1421,7 @@ const Writer = struct {
14211421 }
14221422
14231423 fn writeCondBr(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1424 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1424 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
14251425 const extra = self.code.extraData(Zir.Inst.CondBr, inst_data.payload_index);
14261426 const then_body = self.code.bodySlice(extra.end, extra.data.then_body_len);
14271427 const else_body = self.code.bodySlice(extra.end + then_body.len, extra.data.else_body_len);
......@@ -1435,7 +1435,7 @@ const Writer = struct {
14351435 }
14361436
14371437 fn writeTry(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1438 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1438 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
14391439 const extra = self.code.extraData(Zir.Inst.Try, inst_data.payload_index);
14401440 const body = self.code.bodySlice(extra.end, extra.data.body_len);
14411441 try self.writeInstRef(stream, extra.data.operand);
......@@ -1661,9 +1661,9 @@ const Writer = struct {
16611661 extra_index += 2;
16621662
16631663 try stream.print("@\"{d}\": ", .{field_idx});
1664 try self.writeInstRef(stream, @enumFromInt(field_ty));
1664 try self.writeInstRef(stream, @fromBackingInt(@intCast(field_ty)));
16651665 try stream.writeAll(" = ");
1666 try self.writeInstRef(stream, @enumFromInt(field_init));
1666 try self.writeInstRef(stream, @fromBackingInt(@intCast(field_init)));
16671667 }
16681668
16691669 try stream.writeAll(" }) ");
......@@ -1676,7 +1676,7 @@ const Writer = struct {
16761676 stream: *std.Io.Writer,
16771677 inst: Zir.Inst.Index,
16781678 ) !void {
1679 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1679 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
16801680 const extra = self.code.extraData(Zir.Inst.ErrorSetDecl, inst_data.payload_index);
16811681
16821682 try stream.writeAll("{\n");
......@@ -1685,7 +1685,7 @@ const Writer = struct {
16851685 var extra_index = @as(u32, @intCast(extra.end));
16861686 const extra_index_end = extra_index + extra.data.fields_len;
16871687 while (extra_index < extra_index_end) : (extra_index += 1) {
1688 const name_index: Zir.NullTerminatedString = @enumFromInt(self.code.extra[extra_index]);
1688 const name_index: Zir.NullTerminatedString = @fromBackingInt(@intCast(self.code.extra[extra_index]));
16891689 const name = self.code.nullTerminatedString(name_index);
16901690 try stream.splatByteAll(' ', self.indent);
16911691 try stream.print("{f},\n", .{std.zig.fmtIdP(name)});
......@@ -1835,7 +1835,7 @@ const Writer = struct {
18351835 }
18361836
18371837 fn writePlNodeField(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1838 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1838 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
18391839 const extra = self.code.extraData(Zir.Inst.Field, inst_data.payload_index).data;
18401840 const name = self.code.nullTerminatedString(extra.field_name_start);
18411841 try self.writeInstRef(stream, extra.lhs);
......@@ -1844,7 +1844,7 @@ const Writer = struct {
18441844 }
18451845
18461846 fn writePlNodeFieldNamed(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1847 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1847 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
18481848 const extra = self.code.extraData(Zir.Inst.FieldNamed, inst_data.payload_index).data;
18491849 try self.writeInstRef(stream, extra.lhs);
18501850 try stream.writeAll(", ");
......@@ -1854,7 +1854,7 @@ const Writer = struct {
18541854 }
18551855
18561856 fn writeAs(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1857 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1857 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
18581858 const extra = self.code.extraData(Zir.Inst.As, inst_data.payload_index).data;
18591859 try self.writeInstRef(stream, extra.dest_type);
18601860 try stream.writeAll(", ");
......@@ -1868,7 +1868,7 @@ const Writer = struct {
18681868 stream: *std.Io.Writer,
18691869 inst: Zir.Inst.Index,
18701870 ) Error!void {
1871 const src_node = self.code.instructions.items(.data)[@intFromEnum(inst)].node;
1871 const src_node = self.code.instructions.items(.data)[@backingInt(inst)].node;
18721872 try stream.writeAll(") ");
18731873 try self.writeSrcNode(stream, src_node);
18741874 }
......@@ -1878,14 +1878,14 @@ const Writer = struct {
18781878 stream: *std.Io.Writer,
18791879 inst: Zir.Inst.Index,
18801880 ) Error!void {
1881 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].str_tok;
1881 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].str_tok;
18821882 const str = inst_data.get(self.code);
18831883 try stream.print("\"{f}\") ", .{std.zig.fmtString(str)});
18841884 try self.writeSrcTok(stream, inst_data.src_tok);
18851885 }
18861886
18871887 fn writeStrOp(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1888 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].str_op;
1888 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].str_op;
18891889 const str = inst_data.getStr(self.code);
18901890 try self.writeInstRef(stream, inst_data.operand);
18911891 try stream.print(", \"{f}\")", .{std.zig.fmtString(str)});
......@@ -1897,7 +1897,7 @@ const Writer = struct {
18971897 inst: Zir.Inst.Index,
18981898 inferred_error_set: bool,
18991899 ) !void {
1900 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1900 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
19011901 const extra = self.code.extraData(Zir.Inst.Func, inst_data.payload_index);
19021902
19031903 var extra_index = extra.end;
......@@ -1909,7 +1909,7 @@ const Writer = struct {
19091909 ret_ty_ref = .void_type;
19101910 },
19111911 1 => {
1912 ret_ty_ref = @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[extra_index]));
1912 ret_ty_ref = @as(Zir.Inst.Ref, @fromBackingInt(@intCast(self.code.extra[extra_index])));
19131913 extra_index += 1;
19141914 },
19151915 else => {
......@@ -1945,7 +1945,7 @@ const Writer = struct {
19451945 }
19461946
19471947 fn writeFuncFancy(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
1948 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
1948 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
19491949 const extra = self.code.extraData(Zir.Inst.FuncFancy, inst_data.payload_index);
19501950
19511951 var extra_index: usize = extra.end;
......@@ -1960,7 +1960,7 @@ const Writer = struct {
19601960 cc_body = self.code.bodySlice(extra_index, body_len);
19611961 extra_index += cc_body.len;
19621962 } else if (extra.data.bits.has_cc_ref) {
1963 cc_ref = @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[extra_index]));
1963 cc_ref = @as(Zir.Inst.Ref, @fromBackingInt(@intCast(self.code.extra[extra_index])));
19641964 extra_index += 1;
19651965 }
19661966 if (extra.data.bits.has_ret_ty_body) {
......@@ -1969,7 +1969,7 @@ const Writer = struct {
19691969 ret_ty_body = self.code.bodySlice(extra_index, body_len);
19701970 extra_index += ret_ty_body.len;
19711971 } else if (extra.data.bits.has_ret_ty_ref) {
1972 ret_ty_ref = @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[extra_index]));
1972 ret_ty_ref = @as(Zir.Inst.Ref, @fromBackingInt(@intCast(self.code.extra[extra_index])));
19731973 extra_index += 1;
19741974 }
19751975
......@@ -2009,12 +2009,12 @@ const Writer = struct {
20092009
20102010 var extra_index: usize = extra.end;
20112011 const type_inst: Zir.Inst.Ref = if (!small.has_type) .none else blk: {
2012 const type_inst = @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[extra_index]));
2012 const type_inst = @as(Zir.Inst.Ref, @fromBackingInt(@intCast(self.code.extra[extra_index])));
20132013 extra_index += 1;
20142014 break :blk type_inst;
20152015 };
20162016 const align_inst: Zir.Inst.Ref = if (!small.has_align) .none else blk: {
2017 const align_inst = @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[extra_index]));
2017 const align_inst = @as(Zir.Inst.Ref, @fromBackingInt(@intCast(self.code.extra[extra_index])));
20182018 extra_index += 1;
20192019 break :blk align_inst;
20202020 };
......@@ -2040,7 +2040,7 @@ const Writer = struct {
20402040 }
20412041
20422042 fn writeBoolBr(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2043 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
2043 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
20442044 const extra = self.code.extraData(Zir.Inst.BoolBr, inst_data.payload_index);
20452045 const body = self.code.bodySlice(extra.end, extra.data.body_len);
20462046 try self.writeInstRef(stream, extra.data.lhs);
......@@ -2051,7 +2051,7 @@ const Writer = struct {
20512051 }
20522052
20532053 fn writeIntType(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2054 const int_type = self.code.instructions.items(.data)[@intFromEnum(inst)].int_type;
2054 const int_type = self.code.instructions.items(.data)[@backingInt(inst)].int_type;
20552055 const prefix: u8 = switch (int_type.signedness) {
20562056 .signed => 'i',
20572057 .unsigned => 'u',
......@@ -2061,7 +2061,7 @@ const Writer = struct {
20612061 }
20622062
20632063 fn writeSaveErrRetIndex(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2064 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].save_err_ret_index;
2064 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].save_err_ret_index;
20652065
20662066 try self.writeInstRef(stream, inst_data.operand);
20672067
......@@ -2079,7 +2079,7 @@ const Writer = struct {
20792079 }
20802080
20812081 fn writeBreak(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2082 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].@"break";
2082 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].@"break";
20832083 const extra = self.code.extraData(Zir.Inst.Break, inst_data.payload_index).data;
20842084
20852085 try self.writeInstIndex(stream, extra.block_inst);
......@@ -2089,7 +2089,7 @@ const Writer = struct {
20892089 }
20902090
20912091 fn writeArrayInit(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2092 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
2092 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
20932093
20942094 const extra = self.code.extraData(Zir.Inst.MultiOp, inst_data.payload_index);
20952095 const args = self.code.refSlice(extra.end, extra.data.operands_len);
......@@ -2105,7 +2105,7 @@ const Writer = struct {
21052105 }
21062106
21072107 fn writeArrayInitAnon(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2108 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
2108 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
21092109
21102110 const extra = self.code.extraData(Zir.Inst.MultiOp, inst_data.payload_index);
21112111 const args = self.code.refSlice(extra.end, extra.data.operands_len);
......@@ -2120,7 +2120,7 @@ const Writer = struct {
21202120 }
21212121
21222122 fn writeArrayInitSent(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2123 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_node;
2123 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_node;
21242124
21252125 const extra = self.code.extraData(Zir.Inst.MultiOp, inst_data.payload_index);
21262126 const args = self.code.refSlice(extra.end, extra.data.operands_len);
......@@ -2140,7 +2140,7 @@ const Writer = struct {
21402140 }
21412141
21422142 fn writeUnreachable(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2143 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].@"unreachable";
2143 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].@"unreachable";
21442144 try stream.writeAll(") ");
21452145 try self.writeSrcNode(stream, inst_data.src_node);
21462146 }
......@@ -2185,12 +2185,12 @@ const Writer = struct {
21852185 }
21862186
21872187 fn writeDbgStmt(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2188 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt;
2188 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].dbg_stmt;
21892189 try stream.print("{d}, {d})", .{ inst_data.line + 1, inst_data.column + 1 });
21902190 }
21912191
21922192 fn writeDefer(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2193 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].@"defer";
2193 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].@"defer";
21942194 const body = self.code.bodySlice(inst_data.index, inst_data.len);
21952195 try self.writeBracedBody(stream, body);
21962196 try stream.writeByte(')');
......@@ -2254,20 +2254,20 @@ const Writer = struct {
22542254
22552255 fn writeClosureGet(self: *Writer, stream: *std.Io.Writer, extended: Zir.Inst.Extended.InstData) !void {
22562256 try stream.print("{d})) ", .{extended.small});
2257 const src_node: Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(extended.operand)));
2257 const src_node: Ast.Node.Offset = @fromBackingInt(@intCast(@as(i32, @bitCast(extended.operand))));
22582258 try self.writeSrcNode(stream, src_node);
22592259 }
22602260
22612261 fn writeStdLangValue(self: *Writer, stream: *std.Io.Writer, extended: Zir.Inst.Extended.InstData) !void {
2262 const val: Zir.Inst.StdLangValue = @enumFromInt(extended.small);
2262 const val: Zir.Inst.StdLangValue = @fromBackingInt(@intCast(extended.small));
22632263 try stream.print("{s})) ", .{@tagName(val)});
2264 const src_node: Ast.Node.Offset = @enumFromInt(@as(i32, @bitCast(extended.operand)));
2264 const src_node: Ast.Node.Offset = @fromBackingInt(@intCast(@as(i32, @bitCast(extended.operand))));
22652265 try self.writeSrcNode(stream, src_node);
22662266 }
22672267
22682268 fn writeInplaceArithResultTy(self: *Writer, stream: *std.Io.Writer, extended: Zir.Inst.Extended.InstData) !void {
2269 const op: Zir.Inst.InplaceOp = @enumFromInt(extended.small);
2270 try self.writeInstRef(stream, @enumFromInt(extended.operand));
2269 const op: Zir.Inst.InplaceOp = @fromBackingInt(@intCast(extended.small));
2270 try self.writeInstRef(stream, @fromBackingInt(@intCast(extended.operand)));
22712271 try stream.print(", {s}))", .{@tagName(op)});
22722272 }
22732273
......@@ -2277,14 +2277,14 @@ const Writer = struct {
22772277 } else if (ref.toIndex()) |i| {
22782278 return self.writeInstIndex(stream, i);
22792279 } else {
2280 const val: InternPool.Index = @enumFromInt(@intFromEnum(ref));
2280 const val: InternPool.Index = @fromBackingInt(@intCast(@backingInt(ref)));
22812281 return stream.print("@{s}", .{@tagName(val)});
22822282 }
22832283 }
22842284
22852285 fn writeInstIndex(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
22862286 _ = self;
2287 return stream.print("%{d}", .{@intFromEnum(inst)});
2287 return stream.print("%{d}", .{@backingInt(inst)});
22882288 }
22892289
22902290 fn writeCaptures(self: *Writer, stream: *std.Io.Writer, captures: []const Zir.Inst.Capture, capture_names: []const Zir.NullTerminatedString) !void {
......@@ -2436,14 +2436,14 @@ const Writer = struct {
24362436 fn writeBody(self: *Writer, stream: *std.Io.Writer, body: []const Zir.Inst.Index) !void {
24372437 for (body) |inst| {
24382438 try stream.splatByteAll(' ', self.indent);
2439 try stream.print("%{d} ", .{@intFromEnum(inst)});
2439 try stream.print("%{d} ", .{@backingInt(inst)});
24402440 try self.writeInstToStream(stream, inst);
24412441 try stream.writeByte('\n');
24422442 }
24432443 }
24442444
24452445 fn writeImport(self: *Writer, stream: *std.Io.Writer, inst: Zir.Inst.Index) !void {
2446 const inst_data = self.code.instructions.items(.data)[@intFromEnum(inst)].pl_tok;
2446 const inst_data = self.code.instructions.items(.data)[@backingInt(inst)].pl_tok;
24472447 const extra = self.code.extraData(Zir.Inst.Import, inst_data.payload_index).data;
24482448 try self.writeInstRef(stream, extra.res_ty);
24492449 const import_path = self.code.nullTerminatedString(extra.path);
src/print_zoir.zig+1-1
......@@ -55,7 +55,7 @@ const PrintZon = struct {
5555
5656 fn renderNode(pz: *PrintZon, node: Zoir.Node.Index) Error!void {
5757 const zoir = pz.zoir;
58 try pz.w.print("%{d} = ", .{@intFromEnum(node)});
58 try pz.w.print("%{d} = ", .{@backingInt(node)});
5959 switch (node.get(zoir)) {
6060 .true => try pz.w.writeAll("true"),
6161 .false => try pz.w.writeAll("false"),
src/register_manager.zig+6-6
......@@ -381,7 +381,7 @@ const MockRegister1 = enum(u2) {
381381 r3,
382382
383383 pub fn id(reg: MockRegister1) u2 {
384 return @intFromEnum(reg);
384 return @backingInt(reg);
385385 }
386386
387387 const allocatable_registers = [_]MockRegister1{ .r2, .r3 };
......@@ -409,7 +409,7 @@ const MockRegister2 = enum(u2) {
409409 r3,
410410
411411 pub fn id(reg: MockRegister2) u2 {
412 return @intFromEnum(reg);
412 return @backingInt(reg);
413413 }
414414
415415 const allocatable_registers = [_]MockRegister2{ .r0, .r1, .r2, .r3 };
......@@ -441,14 +441,14 @@ const MockRegister3 = enum(u3) {
441441 x3,
442442
443443 pub fn id(reg: MockRegister3) u3 {
444 return switch (@intFromEnum(reg)) {
445 0...3 => @as(u3, @as(u2, @truncate(@intFromEnum(reg)))),
446 4...7 => @intFromEnum(reg),
444 return switch (@backingInt(reg)) {
445 0...3 => @as(u3, @as(u2, @truncate(@backingInt(reg)))),
446 4...7 => @backingInt(reg),
447447 };
448448 }
449449
450450 pub fn enc(reg: MockRegister3) u2 {
451 return @as(u2, @truncate(@intFromEnum(reg)));
451 return @as(u2, @truncate(@backingInt(reg)));
452452 }
453453
454454 const gp_regs = [_]MockRegister3{ .r0, .r1, .r2, .r3 };
src/target.zig+3-3
......@@ -636,8 +636,8 @@ pub fn shouldBlockPointerOps(target: *const std.Target, as: AddressSpace) bool {
636636 // Physical pointers always support operations
637637 .global, .physical_storage_buffer => false,
638638 // Logical pointers that support operations with VariablePointers capability
639 .shared => !target.cpu.features.isEnabled(@intFromEnum(std.Target.spirv.Feature.variable_pointers)),
640 .storage_buffer => !target.cpu.features.isEnabled(@intFromEnum(std.Target.spirv.Feature.variable_pointers)),
639 .shared => !target.cpu.features.isEnabled(@backingInt(std.Target.spirv.Feature.variable_pointers)),
640 .storage_buffer => !target.cpu.features.isEnabled(@backingInt(std.Target.spirv.Feature.variable_pointers)),
641641 // Logical pointers that never support operations
642642 .constant,
643643 .local,
......@@ -678,7 +678,7 @@ pub fn isDynamicAMDGCNFeature(target: *const std.Target, feature: std.Target.Cpu
678678 &std.Target.amdgcn.cpu.gfx1200,
679679 &std.Target.amdgcn.cpu.gfx1201,
680680 };
681 const feature_tag: std.Target.amdgcn.Feature = @enumFromInt(feature.index);
681 const feature_tag: std.Target.amdgcn.Feature = @fromBackingInt(@intCast(feature.index));
682682
683683 if (feature_tag == .sramecc) {
684684 if (std.mem.indexOfScalar(
test/behavior/call.zig+2-2
......@@ -372,11 +372,11 @@ test "Enum constructed by @Enum passed as generic argument" {
372372 alive: bool,
373373 });
374374 fn foo(comptime a: E, b: u32) !void {
375 try expect(@intFromEnum(a) == b);
375 try expect(@backingInt(a) == b);
376376 }
377377 };
378378 inline for (@typeInfo(S.E).@"enum".field_names, 0..) |_, i| {
379 try S.foo(@as(S.E, @enumFromInt(i)), i);
379 try S.foo(@as(S.E, @fromBackingInt(@intCast(i))), i);
380380 }
381381}
382382
test/behavior/cast.zig+7-7
......@@ -440,7 +440,7 @@ test "*usize to *void" {
440440
441441test "@enumFromInt passed a comptime_int to an enum with one item" {
442442 const E = enum { A };
443 const x = @as(E, @enumFromInt(0));
443 const x = @as(E, @fromBackingInt(@intCast(0)));
444444 try expect(x == E.A);
445445}
446446
......@@ -2709,7 +2709,7 @@ test "cast builtins can wrap result in optional" {
27092709 const S = struct {
27102710 const MyEnum = enum(u32) { _ };
27112711 fn a() ?MyEnum {
2712 return @enumFromInt(123);
2712 return @fromBackingInt(@intCast(123));
27132713 }
27142714 fn b() ?u32 {
27152715 return @intFromFloat(42.50);
......@@ -2728,7 +2728,7 @@ test "cast builtins can wrap result in optional" {
27282728 comptime assert(@TypeOf(rb) == u32);
27292729 comptime assert(@TypeOf(rc) == *const f32);
27302730
2731 try expect(@intFromEnum(ra) == 123);
2731 try expect(@backingInt(ra) == 123);
27322732 try expect(rb == 42);
27332733 try expect(@as(*const u32, @ptrCast(rc)).* == 1);
27342734 }
......@@ -2747,7 +2747,7 @@ test "cast builtins can wrap result in error union" {
27472747 const MyEnum = enum(u32) { _ };
27482748 const E = error{ImpossibleError};
27492749 fn a() E!MyEnum {
2750 return @enumFromInt(123);
2750 return @fromBackingInt(@intCast(123));
27512751 }
27522752 fn b() E!u32 {
27532753 return @intFromFloat(42.50);
......@@ -2766,7 +2766,7 @@ test "cast builtins can wrap result in error union" {
27662766 comptime assert(@TypeOf(rb) == u32);
27672767 comptime assert(@TypeOf(rc) == *const f32);
27682768
2769 try expect(@intFromEnum(ra) == 123);
2769 try expect(@backingInt(ra) == 123);
27702770 try expect(rb == 42);
27712771 try expect(@as(*const u32, @ptrCast(rc)).* == 1);
27722772 }
......@@ -2785,7 +2785,7 @@ test "cast builtins can wrap result in error union and optional" {
27852785 const MyEnum = enum(u32) { _ };
27862786 const E = error{ImpossibleError};
27872787 fn a() E!?MyEnum {
2788 return @enumFromInt(123);
2788 return @fromBackingInt(@intCast(123));
27892789 }
27902790 fn b() E!?u32 {
27912791 return @intFromFloat(42.50);
......@@ -2804,7 +2804,7 @@ test "cast builtins can wrap result in error union and optional" {
28042804 comptime assert(@TypeOf(rb) == u32);
28052805 comptime assert(@TypeOf(rc) == *const f32);
28062806
2807 try expect(@intFromEnum(ra) == 123);
2807 try expect(@backingInt(ra) == 123);
28082808 try expect(rb == 42);
28092809 try expect(@as(*const u32, @ptrCast(rc)).* == 1);
28102810 }
test/behavior/enum.zig+54-54
......@@ -8,7 +8,7 @@ const Tag = std.meta.Tag;
88const Number = enum { Zero, One, Two, Three, Four };
99
1010fn shouldEqual(n: Number, expected: u3) !void {
11 try expect(@intFromEnum(n) == expected);
11 try expect(@backingInt(n) == expected);
1212}
1313
1414test "enum to int" {
......@@ -20,7 +20,7 @@ test "enum to int" {
2020}
2121
2222fn testEnumFromIntEval(x: i32) !void {
23 try expect(@as(EnumFromIntNumber, @enumFromInt(x)) == EnumFromIntNumber.Three);
23 try expect(@as(EnumFromIntNumber, @fromBackingInt(@intCast(x))) == EnumFromIntNumber.Three);
2424}
2525const EnumFromIntNumber = enum { Zero, One, Two, Three, Four };
2626
......@@ -597,7 +597,7 @@ const MultipleChoice = enum(u32) {
597597};
598598
599599fn testEnumWithSpecifiedTagValues(x: MultipleChoice) !void {
600 try expect(@intFromEnum(x) == 60);
600 try expect(@backingInt(x) == 60);
601601 try expect(1234 == switch (x) {
602602 MultipleChoice.A => 1,
603603 MultipleChoice.B => 2,
......@@ -626,7 +626,7 @@ test "non-exhaustive enum" {
626626 .b => true,
627627 _ => false,
628628 });
629 e = @as(E, @enumFromInt(12));
629 e = @as(E, @fromBackingInt(@intCast(12)));
630630 try expect(switch (e) {
631631 .a => false,
632632 .b => false,
......@@ -645,10 +645,10 @@ test "non-exhaustive enum" {
645645 });
646646
647647 try expect(@typeInfo(E).@"enum".field_names.len == 2);
648 e = @as(E, @enumFromInt(12));
649 try expect(@intFromEnum(e) == 12);
650 e = @as(E, @enumFromInt(y));
651 try expect(@intFromEnum(e) == 52);
648 e = @as(E, @fromBackingInt(@intCast(12)));
649 try expect(@backingInt(e) == 12);
650 e = @as(E, @fromBackingInt(@intCast(y)));
651 try expect(@backingInt(e) == 52);
652652 try expect(@typeInfo(E).@"enum".mode == .nonexhaustive);
653653 }
654654 };
......@@ -661,12 +661,12 @@ test "empty non-exhaustive enum" {
661661 const E = enum(u8) { _ };
662662
663663 fn doTheTest(y: u8) !void {
664 var e: E = @enumFromInt(y);
664 var e: E = @fromBackingInt(@intCast(y));
665665 _ = &e;
666666 try expect(switch (e) {
667667 _ => true,
668668 });
669 try expect(@intFromEnum(e) == y);
669 try expect(@backingInt(e) == y);
670670
671671 try expect(@typeInfo(E).@"enum".field_names.len == 0);
672672 try expect(@typeInfo(E).@"enum".field_values.len == 0);
......@@ -688,7 +688,7 @@ test "single field non-exhaustive enum" {
688688 .a => true,
689689 _ => false,
690690 });
691 e = @as(E, @enumFromInt(12));
691 e = @as(E, @fromBackingInt(@intCast(12)));
692692 try expect(switch (e) {
693693 .a => false,
694694 _ => true,
......@@ -704,7 +704,7 @@ test "single field non-exhaustive enum" {
704704 else => false,
705705 });
706706
707 try expect(@intFromEnum(@as(E, @enumFromInt(y))) == y);
707 try expect(@backingInt(@as(E, @fromBackingInt(@intCast(y)))) == y);
708708 try expect(@typeInfo(E).@"enum".field_names.len == 1);
709709 try expect(@typeInfo(E).@"enum".field_values.len == 1);
710710 try expect(@typeInfo(E).@"enum".mode == .nonexhaustive);
......@@ -721,7 +721,7 @@ const EnumWithTagValues = enum(u4) {
721721 D = 1 << 3,
722722};
723723test "enum with tag values don't require parens" {
724 try expect(@intFromEnum(EnumWithTagValues.C) == 0b0100);
724 try expect(@backingInt(EnumWithTagValues.C) == 0b0100);
725725}
726726
727727const MultipleChoice2 = enum(u32) {
......@@ -737,8 +737,8 @@ const MultipleChoice2 = enum(u32) {
737737};
738738
739739test "cast integer literal to enum" {
740 try expect(@as(MultipleChoice2, @enumFromInt(0)) == MultipleChoice2.Unspecified1);
741 try expect(@as(MultipleChoice2, @enumFromInt(40)) == MultipleChoice2.B);
740 try expect(@as(MultipleChoice2, @fromBackingInt(@intCast(0))) == MultipleChoice2.Unspecified1);
741 try expect(@as(MultipleChoice2, @fromBackingInt(@intCast(40))) == MultipleChoice2.B);
742742}
743743
744744test "enum with specified and unspecified tag values" {
......@@ -749,7 +749,7 @@ test "enum with specified and unspecified tag values" {
749749}
750750
751751fn testEnumWithSpecifiedAndUnspecifiedTagValues(x: MultipleChoice2) !void {
752 try expect(@intFromEnum(x) == 1000);
752 try expect(@backingInt(x) == 1000);
753753 try expect(1234 == switch (x) {
754754 MultipleChoice2.A => 1,
755755 MultipleChoice2.B => 2,
......@@ -785,7 +785,7 @@ test "casting enum to its tag type" {
785785}
786786
787787fn testCastEnumTag(value: Small2) !void {
788 try expect(@intFromEnum(value) == 1);
788 try expect(@backingInt(value) == 1);
789789}
790790
791791test "enum with 1 field but explicit tag type should still have the tag type" {
......@@ -802,27 +802,27 @@ test "signed integer as enum tag" {
802802 A2 = 1,
803803 };
804804
805 try expect(@intFromEnum(SignedEnum.A0) == -1);
806 try expect(@intFromEnum(SignedEnum.A1) == 0);
807 try expect(@intFromEnum(SignedEnum.A2) == 1);
805 try expect(@backingInt(SignedEnum.A0) == -1);
806 try expect(@backingInt(SignedEnum.A1) == 0);
807 try expect(@backingInt(SignedEnum.A2) == 1);
808808}
809809
810810test "enum with one member and custom tag type" {
811811 const E = enum(u2) {
812812 One,
813813 };
814 try expect(@intFromEnum(E.One) == 0);
814 try expect(@backingInt(E.One) == 0);
815815 const E2 = enum(u2) {
816816 One = 2,
817817 };
818 try expect(@intFromEnum(E2.One) == 2);
818 try expect(@backingInt(E2.One) == 2);
819819}
820820
821821test "enum with one member and u1 tag type @intFromEnum" {
822822 const Enum = enum(u1) {
823823 Test,
824824 };
825 try expect(@intFromEnum(Enum.Test) == 0);
825 try expect(@backingInt(Enum.Test) == 0);
826826}
827827
828828test "enum with one member default to u0 tag type" {
......@@ -886,9 +886,9 @@ test "enum value allocation" {
886886 A2,
887887 };
888888
889 try expect(@intFromEnum(LargeEnum.A0) == 0x80000000);
890 try expect(@intFromEnum(LargeEnum.A1) == 0x80000001);
891 try expect(@intFromEnum(LargeEnum.A2) == 0x80000002);
889 try expect(@backingInt(LargeEnum.A0) == 0x80000000);
890 try expect(@backingInt(LargeEnum.A1) == 0x80000001);
891 try expect(@backingInt(LargeEnum.A2) == 0x80000002);
892892}
893893
894894test "enum literal casting to tagged union" {
......@@ -1068,8 +1068,8 @@ test "tag name with large enum values" {
10681068 var kdf: Kdf = .aes_kdf;
10691069 try expect(mem.eql(u8, @tagName(kdf), "aes_kdf"));
10701070 var argon2d_value: u128 = undefined;
1071 argon2d_value = @intFromEnum(Kdf.argon2d);
1072 kdf = @enumFromInt(argon2d_value);
1071 argon2d_value = @backingInt(Kdf.argon2d);
1072 kdf = @fromBackingInt(@intCast(argon2d_value));
10731073 try expect(mem.eql(u8, @tagName(kdf), "argon2d"));
10741074 kdf = .argon2id;
10751075 try expect(mem.eql(u8, @tagName(kdf), "argon2id"));
......@@ -1343,7 +1343,7 @@ test "runtime int to enum with one possible value" {
13431343 const E = enum { one };
13441344 var runtime: usize = 0;
13451345 _ = &runtime;
1346 if (@as(E, @enumFromInt(runtime)) != .one) {
1346 if (@as(E, @fromBackingInt(@intCast(runtime))) != .one) {
13471347 @compileError("test failed");
13481348 }
13491349}
......@@ -1354,8 +1354,8 @@ test "enum tag from a local variable" {
13541354 return enum(Inner) { _ };
13551355 }
13561356 };
1357 const i = @as(S.Int(u32), @enumFromInt(0));
1358 try std.testing.expect(@intFromEnum(i) == 0);
1357 const i = @as(S.Int(u32), @fromBackingInt(@intCast(0)));
1358 try std.testing.expect(@backingInt(i) == 0);
13591359}
13601360
13611361test "auto-numbered enum with signed tag type" {
......@@ -1363,14 +1363,14 @@ test "auto-numbered enum with signed tag type" {
13631363
13641364 const E = enum(i32) { a, b };
13651365
1366 try std.testing.expectEqual(@as(i32, 0), @intFromEnum(E.a));
1367 try std.testing.expectEqual(@as(i32, 1), @intFromEnum(E.b));
1368 try std.testing.expectEqual(E.a, @as(E, @enumFromInt(0)));
1369 try std.testing.expectEqual(E.b, @as(E, @enumFromInt(1)));
1370 try std.testing.expectEqual(E.a, @as(E, @enumFromInt(@as(i32, 0))));
1371 try std.testing.expectEqual(E.b, @as(E, @enumFromInt(@as(i32, 1))));
1372 try std.testing.expectEqual(E.a, @as(E, @enumFromInt(@as(u32, 0))));
1373 try std.testing.expectEqual(E.b, @as(E, @enumFromInt(@as(u32, 1))));
1366 try std.testing.expectEqual(@as(i32, 0), @backingInt(E.a));
1367 try std.testing.expectEqual(@as(i32, 1), @backingInt(E.b));
1368 try std.testing.expectEqual(E.a, @as(E, @fromBackingInt(@intCast(0))));
1369 try std.testing.expectEqual(E.b, @as(E, @fromBackingInt(@intCast(1))));
1370 try std.testing.expectEqual(E.a, @as(E, @fromBackingInt(@intCast(@as(i32, 0)))));
1371 try std.testing.expectEqual(E.b, @as(E, @fromBackingInt(@intCast(@as(i32, 1)))));
1372 try std.testing.expectEqual(E.a, @as(E, @fromBackingInt(@intCast(@as(u32, 0)))));
1373 try std.testing.expectEqual(E.b, @as(E, @fromBackingInt(@intCast(@as(u32, 1)))));
13741374 try std.testing.expectEqualStrings("a", @tagName(E.a));
13751375 try std.testing.expectEqualStrings("b", @tagName(E.b));
13761376}
......@@ -1382,7 +1382,7 @@ test "lazy initialized field" {
13821382fn getLazyInitialized(param: enum(u8) {
13831383 a = @bitCast(packed struct(u8) { a: u8 }{ .a = @alignOf(struct {}) }),
13841384}) u8 {
1385 return @intFromEnum(param);
1385 return @backingInt(param);
13861386}
13871387
13881388test "matching captures causes enum equivalence" {
......@@ -1397,10 +1397,10 @@ test "matching captures causes enum equivalence" {
13971397 comptime assert(S.Nonexhaustive(u16) == S.Nonexhaustive(i16));
13981398 comptime assert(S.Nonexhaustive(u8) != S.Nonexhaustive(u16));
13991399
1400 const a: S.Nonexhaustive(u8) = @enumFromInt(123);
1401 const b: S.Nonexhaustive(i8) = @enumFromInt(123);
1400 const a: S.Nonexhaustive(u8) = @fromBackingInt(@intCast(123));
1401 const b: S.Nonexhaustive(i8) = @fromBackingInt(@intCast(123));
14021402 comptime assert(@TypeOf(a) == @TypeOf(b));
1403 try expect(@intFromEnum(a) == @intFromEnum(b));
1403 try expect(@backingInt(a) == @backingInt(b));
14041404}
14051405
14061406test "large enum field values" {
......@@ -1410,45 +1410,45 @@ test "large enum field values" {
14101410 const E = enum(u64) { min = std.math.minInt(u64), max = std.math.maxInt(u64) };
14111411 var e: E = .min;
14121412 try expect(e == .min);
1413 try expect(@intFromEnum(e) == std.math.minInt(u64));
1413 try expect(@backingInt(e) == std.math.minInt(u64));
14141414 e = .max;
14151415 try expect(e == .max);
1416 try expect(@intFromEnum(e) == std.math.maxInt(u64));
1416 try expect(@backingInt(e) == std.math.maxInt(u64));
14171417 }
14181418 {
14191419 const E = enum(i64) { min = std.math.minInt(i64), max = std.math.maxInt(i64) };
14201420 var e: E = .min;
14211421 try expect(e == .min);
1422 try expect(@intFromEnum(e) == std.math.minInt(i64));
1422 try expect(@backingInt(e) == std.math.minInt(i64));
14231423 e = .max;
14241424 try expect(e == .max);
1425 try expect(@intFromEnum(e) == std.math.maxInt(i64));
1425 try expect(@backingInt(e) == std.math.maxInt(i64));
14261426 }
14271427 {
14281428 const E = enum(u128) { min = std.math.minInt(u128), max = std.math.maxInt(u128) };
14291429 var e: E = .min;
14301430 try expect(e == .min);
1431 try expect(@intFromEnum(e) == std.math.minInt(u128));
1431 try expect(@backingInt(e) == std.math.minInt(u128));
14321432 e = .max;
14331433 try expect(e == .max);
1434 try expect(@intFromEnum(e) == std.math.maxInt(u128));
1434 try expect(@backingInt(e) == std.math.maxInt(u128));
14351435 }
14361436 {
14371437 const E = enum(i128) { min = std.math.minInt(i128), max = std.math.maxInt(i128) };
14381438 var e: E = .min;
14391439 try expect(e == .min);
1440 try expect(@intFromEnum(e) == std.math.minInt(i128));
1440 try expect(@backingInt(e) == std.math.minInt(i128));
14411441 e = .max;
14421442 try expect(e == .max);
1443 try expect(@intFromEnum(e) == std.math.maxInt(i128));
1443 try expect(@backingInt(e) == std.math.maxInt(i128));
14441444 }
14451445}
14461446
14471447test "comptime @enumFromInt with signed arithmetic" {
14481448 const E = enum(i8) { foo = -1, bar = 0 };
1449 const x: E = @enumFromInt(@as(i8, -1) * 0);
1449 const x: E = @fromBackingInt(@intCast(@as(i8, -1) * 0));
14501450 comptime assert(x == .bar);
1451 comptime assert(@intFromEnum(x) == 0);
1451 comptime assert(@backingInt(x) == 0);
14521452}
14531453
14541454test "enum int tag type uses declaration inside the enum" {
......@@ -1463,7 +1463,7 @@ test "enum int tag type uses declaration inside the enum" {
14631463 try expect(@sizeOf(static.E) == @sizeOf(u8));
14641464 const val: static.E = .b;
14651465 try expect(val == .b);
1466 try expect(@intFromEnum(val) == 1);
1466 try expect(@backingInt(val) == 1);
14671467}
14681468
14691469test "convert from/to backing int" {
test/behavior/generics.zig+2-2
......@@ -259,8 +259,8 @@ test "generic function instantiation turns into comptime call" {
259259 else => void,
260260 } {
261261 return .{
262 .name = @typeInfo(T).@"enum".field_names[@intFromEnum(field)],
263 .value = @typeInfo(T).@"enum".field_values[@intFromEnum(field)],
262 .name = @typeInfo(T).@"enum".field_names[@backingInt(field)],
263 .value = @typeInfo(T).@"enum".field_values[@backingInt(field)],
264264 };
265265 }
266266
test/behavior/inline_switch.zig+1-1
......@@ -98,7 +98,7 @@ test "inline else enum" {
9898 _ = &a;
9999 switch (a) {
100100 .a, .b => {},
101 inline else => |val| comptime if (@intFromEnum(val) < 4) @compileError("bad"),
101 inline else => |val| comptime if (@backingInt(val) < 4) @compileError("bad"),
102102 }
103103}
104104
test/behavior/struct.zig+1-1
......@@ -1873,7 +1873,7 @@ test "runtime call in nested initializer" {
18731873 B,
18741874
18751875 fn letter(e: @This()) u8 {
1876 return @intFromEnum(e);
1876 return @backingInt(e);
18771877 }
18781878 };
18791879
test/behavior/switch.zig+8-8
......@@ -777,10 +777,10 @@ test "enum value without tag name used as switch item" {
777777 b = 2,
778778 _,
779779 };
780 var e: E = @enumFromInt(0);
780 var e: E = @fromBackingInt(@intCast(0));
781781 _ = &e;
782782 switch (e) {
783 @as(E, @enumFromInt(0)) => {},
783 @as(E, @fromBackingInt(@intCast(0))) => {},
784784 .a => return error.TestFailed,
785785 .b => return error.TestFailed,
786786 _ => return error.TestFailed,
......@@ -1117,7 +1117,7 @@ test "decl literals as switch cases" {
11171117 bar = 3,
11181118 _,
11191119
1120 const foo: @This() = @enumFromInt(0xa);
1120 const foo: @This() = @fromBackingInt(@intCast(0xa));
11211121
11221122 fn doTheTest(e: @This()) !void {
11231123 switch (e) {
......@@ -1185,7 +1185,7 @@ test "switch with tag capture" {
11851185 .a => |nothing, tag| {
11861186 comptime assert(nothing == {});
11871187 comptime assert(tag == .a);
1188 try expect(@intFromEnum(tag) == @intFromEnum(@This().a));
1188 try expect(@backingInt(tag) == @backingInt(@This().a));
11891189 },
11901190 .b, .d => |_, tag| {
11911191 try expect(tag == .b or tag == .d);
......@@ -1226,8 +1226,8 @@ test "switch with complex item expressions" {
12261226 try doTheSwitch(2000, 10);
12271227 try doTheSwitch(2000, 5);
12281228
1229 try doTheOtherSwitch(@enumFromInt(123));
1230 try doTheOtherSwitch(@enumFromInt(456));
1229 try doTheOtherSwitch(@fromBackingInt(@intCast(123)));
1230 try doTheOtherSwitch(@fromBackingInt(@intCast(456)));
12311231 }
12321232 fn doTheSwitch(x: u32, comptime factor: u32) !void {
12331233 const ok = switch (x) {
......@@ -1252,8 +1252,8 @@ test "switch with complex item expressions" {
12521252 const E = enum(u32) { _ };
12531253 fn doTheOtherSwitch(e: E) !void {
12541254 const ok = switch (e) {
1255 @enumFromInt(123) => true,
1256 @enumFromInt(456) => true,
1255 @fromBackingInt(@intCast(123)) => true,
1256 @fromBackingInt(@intCast(456)) => true,
12571257 else => false,
12581258 };
12591259 try expect(ok);
test/behavior/switch_loop.zig+3-3
......@@ -256,8 +256,8 @@ test "switch loop on non-exhaustive enum" {
256256 start = .a;
257257 const result: u32 = s: switch (start) {
258258 .a => continue :s .c,
259 else => continue :s @enumFromInt(123),
260 .b, _ => |x| break :s @intFromEnum(x),
259 else => continue :s @fromBackingInt(@intCast(123)),
260 .b, _ => |x| break :s @backingInt(x),
261261 };
262262 try expect(result == 123);
263263 }
......@@ -407,7 +407,7 @@ test "switch loop with tag capture" {
407407 .a => |nothing, tag| {
408408 comptime assert(nothing == {});
409409 comptime assert(tag == .a);
410 try expect(@intFromEnum(tag) == @intFromEnum(@This().a));
410 try expect(@backingInt(tag) == @backingInt(@This().a));
411411 continue :label .{ .d = 456 };
412412 },
413413 .b, .d => |_, tag| {
test/behavior/type.zig+5-5
......@@ -197,13 +197,13 @@ test "Type.Enum" {
197197
198198 const Foo = @Enum(u8, .exhaustive, &.{ "a", "b" }, &.{ 1, 5 });
199199 try testing.expectEqual(std.builtin.Type.Enum.Mode.exhaustive, @typeInfo(Foo).@"enum".mode);
200 try testing.expectEqual(@as(u8, 1), @intFromEnum(Foo.a));
201 try testing.expectEqual(@as(u8, 5), @intFromEnum(Foo.b));
200 try testing.expectEqual(@as(u8, 1), @backingInt(Foo.a));
201 try testing.expectEqual(@as(u8, 5), @backingInt(Foo.b));
202202 const Bar = @Enum(u32, .nonexhaustive, &.{ "a", "b" }, &.{ 1, 5 });
203203 try testing.expectEqual(std.builtin.Type.Enum.Mode.nonexhaustive, @typeInfo(Bar).@"enum".mode);
204 try testing.expectEqual(@as(u32, 1), @intFromEnum(Bar.a));
205 try testing.expectEqual(@as(u32, 5), @intFromEnum(Bar.b));
206 try testing.expectEqual(@as(u32, 6), @intFromEnum(@as(Bar, @enumFromInt(6))));
204 try testing.expectEqual(@as(u32, 1), @backingInt(Bar.a));
205 try testing.expectEqual(@as(u32, 5), @backingInt(Bar.b));
206 try testing.expectEqual(@as(u32, 6), @backingInt(@as(Bar, @fromBackingInt(@intCast(6)))));
207207
208208 { // from https://github.com/ziglang/zig/issues/19985
209209 { // enum with single field can be initialized.
test/behavior/union.zig+8-8
......@@ -337,7 +337,7 @@ test "simple union(enum(u32))" {
337337 var x = MultipleChoice.C;
338338 _ = &x;
339339 try expect(x == MultipleChoice.C);
340 try expect(@intFromEnum(@as(Tag(MultipleChoice), x)) == 60);
340 try expect(@backingInt(@as(Tag(MultipleChoice), x)) == 60);
341341}
342342
343343test "packed union size" {
......@@ -639,7 +639,7 @@ const MultipleChoice2 = union(enum(u32)) {
639639};
640640
641641fn testEnumWithSpecifiedAndUnspecifiedTagValues(x: MultipleChoice2) !void {
642 try expect(@intFromEnum(@as(Tag(MultipleChoice2), x)) == 60);
642 try expect(@backingInt(@as(Tag(MultipleChoice2), x)) == 60);
643643 try expect(1123 == switch (x) {
644644 MultipleChoice2.A => 1,
645645 MultipleChoice2.B => 2,
......@@ -701,9 +701,9 @@ test "union with only 1 field casted to its enum type which has enum value speci
701701
702702 const t: ExprTag = e;
703703 comptime assert(t == Expr.literal);
704 comptime assert(@intFromEnum(t) == 33);
704 comptime assert(@backingInt(t) == 33);
705705 try expect(t == Expr.literal);
706 try expect(@intFromEnum(t) == 33);
706 try expect(@backingInt(t) == 33);
707707}
708708
709709test "@intFromEnum works on unions" {
......@@ -721,9 +721,9 @@ test "@intFromEnum works on unions" {
721721 var b = Bar{ .B = undefined };
722722 var c = Bar.C;
723723 _ = .{ &b, &c };
724 try expect(@intFromEnum(a) == 0);
725 try expect(@intFromEnum(b) == 1);
726 try expect(@intFromEnum(c) == 2);
724 try expect(@backingInt(a) == 0);
725 try expect(@backingInt(b) == 1);
726 try expect(@backingInt(c) == 2);
727727}
728728
729729test "comptime union field value equality" {
......@@ -1278,7 +1278,7 @@ test "@unionInit uses tag value instead of field index" {
12781278 _ = &a;
12791279 try expect(a.* == i);
12801280 }
1281 try expect(@intFromEnum(u) == 255);
1281 try expect(@backingInt(u) == 255);
12821282}
12831283
12841284test "union field ptr - zero sized payload" {
test/c.zig+5-5
......@@ -15,14 +15,14 @@ test {
1515}
1616
1717pub fn expectErrno(expected_errno: c.E) !void {
18 try std.testing.expectEqual(expected_errno, @as(c.E, @enumFromInt(c._errno().*)));
19 c._errno().* = @intFromEnum(c.E.SUCCESS);
18 try std.testing.expectEqual(expected_errno, @as(c.E, @fromBackingInt(@intCast(c._errno().*))));
19 c._errno().* = @backingInt(c.E.SUCCESS);
2020}
2121
2222pub fn expectErrnoAny(expected_errnos: []const c.E) !void {
2323 const errno = c._errno().*;
2424 for (expected_errnos) |expected_errno| {
25 if (errno == @intFromEnum(expected_errno)) break;
25 if (errno == @backingInt(expected_errno)) break;
2626 } else {
2727 var buffer: [64]u8 = undefined;
2828 const stderr = std.debug.lockStderr(&buffer);
......@@ -31,8 +31,8 @@ pub fn expectErrnoAny(expected_errnos: []const c.E) !void {
3131 for (expected_errnos[1..]) |expected_errno| {
3232 try stderr.file_writer.interface.print(", {t}", .{expected_errno});
3333 }
34 try stderr.file_writer.interface.print(", found {t}\n", .{@as(c.E, @enumFromInt(errno))});
34 try stderr.file_writer.interface.print(", found {t}\n", .{@as(c.E, @fromBackingInt(@intCast(errno)))});
3535 return error.TestExpectedEqual;
3636 }
37 c._errno().* = @intFromEnum(c.E.SUCCESS);
37 c._errno().* = @backingInt(c.E.SUCCESS);
3838}
test/c/pthread.zig+4-4
......@@ -13,9 +13,9 @@ test "pthread_spinlock_t" {
1313 _ = c.pthread_spin_init(&spin, c.PTHREAD_PROCESS_PRIVATE);
1414 defer _ = c.pthread_spin_destroy(&spin);
1515
16 try std.testing.expectEqual(@intFromEnum(c.E.SUCCESS), c.pthread_spin_trylock(&spin));
17 try std.testing.expectEqual(@intFromEnum(c.E.SUCCESS), c.pthread_spin_unlock(&spin));
16 try std.testing.expectEqual(@backingInt(c.E.SUCCESS), c.pthread_spin_trylock(&spin));
17 try std.testing.expectEqual(@backingInt(c.E.SUCCESS), c.pthread_spin_unlock(&spin));
1818
19 try std.testing.expectEqual(@intFromEnum(c.E.SUCCESS), c.pthread_spin_lock(&spin));
20 try std.testing.expectEqual(@intFromEnum(c.E.SUCCESS), c.pthread_spin_unlock(&spin));
19 try std.testing.expectEqual(@backingInt(c.E.SUCCESS), c.pthread_spin_lock(&spin));
20 try std.testing.expectEqual(@backingInt(c.E.SUCCESS), c.pthread_spin_unlock(&spin));
2121}
test/c/stdlib.zig+6-6
......@@ -133,7 +133,7 @@ fn testStrToLLikeFunctionAnyErrno(
133133test "strtol" {
134134 if (builtin.target.cpu.arch.isX86() and builtin.target.os.tag == .windows and builtin.target.abi == .msvc) return error.SkipZigTest; // TODO
135135
136 c._errno().* = @intFromEnum(c.E.SUCCESS);
136 c._errno().* = @backingInt(c.E.SUCCESS);
137137 try testStrToLLikeFunctionAnyErrno(c.strtol, @ptrCast("stop42true"), 0, 0, 0, &.{ .SUCCESS, .INVAL });
138138 try testStrToLLikeFunction(c.strtol, @ptrCast("42true"), 0, 42, 2, .SUCCESS);
139139 try testStrToLLikeFunction(c.strtol, @ptrCast("-01"), 0, -1, 3, .SUCCESS);
......@@ -173,7 +173,7 @@ test "strtol" {
173173test "strtoll" {
174174 if (builtin.target.cpu.arch.isX86() and builtin.target.os.tag == .windows and builtin.target.abi == .msvc) return error.SkipZigTest; // TODO
175175
176 c._errno().* = @intFromEnum(c.E.SUCCESS);
176 c._errno().* = @backingInt(c.E.SUCCESS);
177177 try testStrToLLikeFunctionAnyErrno(c.strtoll, @ptrCast("stop42true"), 0, 0, 0, &.{ .SUCCESS, .INVAL });
178178 try testStrToLLikeFunction(c.strtoll, @ptrCast("42true"), 0, 42, 2, .SUCCESS);
179179 try testStrToLLikeFunction(c.strtoll, @ptrCast("-01"), 0, -1, 3, .SUCCESS);
......@@ -213,7 +213,7 @@ test "strtoll" {
213213test "strtoul" {
214214 if (builtin.target.cpu.arch.isX86() and builtin.target.os.tag == .windows and builtin.target.abi == .msvc) return error.SkipZigTest; // TODO
215215
216 c._errno().* = @intFromEnum(c.E.SUCCESS);
216 c._errno().* = @backingInt(c.E.SUCCESS);
217217 try testStrToLLikeFunctionAnyErrno(c.strtoul, @ptrCast("stop42true"), 0, 0, 0, &.{ .SUCCESS, .INVAL });
218218 try testStrToLLikeFunction(c.strtoul, @ptrCast("42true"), 0, 42, 2, .SUCCESS);
219219 try testStrToLLikeFunction(c.strtoul, @ptrCast("-01"), 0, math.maxInt(c_ulong), 3, .SUCCESS);
......@@ -251,7 +251,7 @@ test "strtoul" {
251251test "strtoull" {
252252 if (builtin.target.cpu.arch.isX86() and builtin.target.os.tag == .windows and builtin.target.abi == .msvc) return error.SkipZigTest; // TODO
253253
254 c._errno().* = @intFromEnum(c.E.SUCCESS);
254 c._errno().* = @backingInt(c.E.SUCCESS);
255255 try testStrToLLikeFunctionAnyErrno(c.strtoull, @ptrCast("stop42true"), 0, 0, 0, &.{ .SUCCESS, .INVAL });
256256 try testStrToLLikeFunction(c.strtoull, @ptrCast("42true"), 0, 42, 2, .SUCCESS);
257257 try testStrToLLikeFunction(c.strtoull, @ptrCast("-01"), 0, math.maxInt(c_ulonglong), 3, .SUCCESS);
......@@ -289,7 +289,7 @@ test "strtoull" {
289289test "strtoimax" {
290290 if (builtin.target.cpu.arch.isX86() and builtin.target.os.tag == .windows and builtin.target.abi == .msvc) return error.SkipZigTest; // TODO
291291
292 c._errno().* = @intFromEnum(c.E.SUCCESS);
292 c._errno().* = @backingInt(c.E.SUCCESS);
293293 try testStrToLLikeFunctionAnyErrno(c.strtoimax, @ptrCast("stop42true"), 0, 0, 0, &.{ .SUCCESS, .INVAL });
294294 try testStrToLLikeFunction(c.strtoimax, @ptrCast("42true"), 0, 42, 2, .SUCCESS);
295295 try testStrToLLikeFunction(c.strtoimax, @ptrCast("-01"), 0, -1, 3, .SUCCESS);
......@@ -329,7 +329,7 @@ test "strtoimax" {
329329test "strtoumax" {
330330 if (builtin.target.cpu.arch.isX86() and builtin.target.os.tag == .windows and builtin.target.abi == .msvc) return error.SkipZigTest; // TODO
331331
332 c._errno().* = @intFromEnum(c.E.SUCCESS);
332 c._errno().* = @backingInt(c.E.SUCCESS);
333333 try testStrToLLikeFunctionAnyErrno(c.strtoumax, @ptrCast("stop42true"), 0, 0, 0, &.{ .SUCCESS, .INVAL });
334334 try testStrToLLikeFunction(c.strtoumax, @ptrCast("42true"), 0, 42, 2, .SUCCESS);
335335 try testStrToLLikeFunction(c.strtoumax, @ptrCast("-01"), 0, math.maxInt(c.uintmax_t), 3, .SUCCESS);
test/src/StackTrace.zig+1-1
......@@ -229,7 +229,7 @@ fn addCaseInstance(
229229 run.addCheck(.{ .expect_term = term: {
230230 if (!expect_panic) break :term .{ .exited = 0 };
231231 if (target.result.os.tag == .windows) break :term .{ .exited = 3 };
232 break :term .{ .signal = @enumFromInt(6) };
232 break :term .{ .signal = @fromBackingInt(@intCast(6)) };
233233 } });
234234 run.expectStdOutEqual("");
235235
test/standalone/windows_argv/fuzz.zig+1-1
......@@ -162,7 +162,7 @@ fn spawnVerify(verify_path: [:0]const u16, cmd_line: [:0]const u16) !windows.DWO
162162 @sizeOf(windows.PROCESS.BASIC_INFORMATION),
163163 null,
164164 )) {
165 .SUCCESS => return @intFromEnum(info.ExitStatus),
165 .SUCCESS => return @backingInt(info.ExitStatus),
166166 else => return error.UnableToGetExitCode,
167167 }
168168}
tools/fetch_them_macos_headers.zig+2-2
......@@ -44,7 +44,7 @@ const Target = struct {
4444 return std.fmt.allocPrint(allocator, "{s}-{s}.{d}-{s}", .{
4545 @tagName(self.arch),
4646 @tagName(self.os),
47 @intFromEnum(self.os_ver),
47 @backingInt(self.os_ver),
4848 @tagName(self.abi),
4949 });
5050 }
......@@ -97,7 +97,7 @@ pub fn main(init: std.process.Init) !void {
9797 fatal("don't know how to parse SDK version: {s}", .{
9898 parsed_json.value.DefaultProperties.MACOSX_DEPLOYMENT_TARGET,
9999 });
100 const os_ver: OsVer = @enumFromInt(version.major);
100 const os_ver: OsVer = @fromBackingInt(@intCast(version.major));
101101 info("found SDK deployment target macOS {f} aka '{t}'", .{ version, os_ver });
102102
103103 const tmp_dir: Io.Dir = .cwd();
tools/gen_outline_atomics.zig+3-3
......@@ -145,11 +145,11 @@ const N = enum(u8) {
145145 }
146146
147147 fn register(n: N) []const u8 {
148 return if (@intFromEnum(n) < 8) "w" else "x";
148 return if (@backingInt(n) < 8) "w" else "x";
149149 }
150150
151151 fn toBytes(n: N) u8 {
152 return @intFromEnum(n);
152 return @backingInt(n);
153153 }
154154
155155 fn toBits(n: N) u8 {
......@@ -213,7 +213,7 @@ fn generateCas(arena: Allocator, n: N, order: Ordering) ![]const u8 {
213213
214214 const reg = n.register();
215215
216 if (@intFromEnum(n) < 16) {
216 if (@backingInt(n) < 16) {
217217 const cas = try std.fmt.allocPrint(arena, ".inst 0x08a07c41 + {s} + {s}", .{ s_def.b, o_def.m });
218218 const ldxr = try std.fmt.allocPrint(arena, "ld{s}xr{s}", .{ o_def.a, s_def.s });
219219 const stxr = try std.fmt.allocPrint(arena, "st{s}xr{s}", .{ o_def.l, s_def.s });
tools/gen_parser_oracle.zig+2-2
......@@ -398,7 +398,7 @@ const Parser = struct {
398398 _,
399399
400400 fn get(index: Index, p: *const Parser) Node {
401 return p.nodes.items[@intFromEnum(index)];
401 return p.nodes.items[@backingInt(index)];
402402 }
403403 };
404404
......@@ -750,7 +750,7 @@ const Parser = struct {
750750
751751 fn addNode(p: *Parser, node: Node) !Node.Index {
752752 try p.nodes.append(p.gpa, node);
753 return @enumFromInt(p.nodes.items.len - 1);
753 return @fromBackingInt(@intCast(p.nodes.items.len - 1));
754754 }
755755
756756 fn addExtra(p: *Parser, nodes: []const Node.Index) !Node.Slice {
tools/gen_stubs.zig+9-9
......@@ -144,7 +144,7 @@ const Family = enum {
144144const arches: [@typeInfo(Arch).@"enum".field_names.len]Arch = blk: {
145145 var result: [@typeInfo(Arch).@"enum".field_names.len]Arch = undefined;
146146 for (@typeInfo(Arch).@"enum".field_values) |field_value| {
147 const arch: Arch = @enumFromInt(field_value);
147 const arch: Arch = @fromBackingInt(@intCast(field_value));
148148 result[archIndex(arch)] = arch;
149149 }
150150 break :blk result;
......@@ -161,7 +161,7 @@ const MultiSym = struct {
161161 fn isSingleArch(ms: MultiSym) ?Arch {
162162 var result: ?Arch = null;
163163 inline for (@typeInfo(Arch).@"enum".field_values) |field_value| {
164 const arch: Arch = @enumFromInt(field_value);
164 const arch: Arch = @fromBackingInt(@intCast(field_value));
165165 if (ms.present[archIndex(arch)]) {
166166 if (result != null) return null;
167167 result = arch;
......@@ -173,7 +173,7 @@ const MultiSym = struct {
173173 fn isFamily(ms: MultiSym) ?Family {
174174 var result: ?Family = null;
175175 inline for (@typeInfo(Arch).@"enum".field_values) |field_value| {
176 const arch: Arch = @enumFromInt(field_value);
176 const arch: Arch = @fromBackingInt(@intCast(field_value));
177177 if (ms.present[archIndex(arch)]) {
178178 const family = arch.family();
179179 if (result) |r| if (family != r) return null;
......@@ -194,7 +194,7 @@ const MultiSym = struct {
194194
195195 fn isTime32Only(ms: MultiSym) bool {
196196 inline for (@typeInfo(Arch).@"enum".field_values) |field_value| {
197 const arch: Arch = @enumFromInt(field_value);
197 const arch: Arch = @fromBackingInt(@intCast(field_value));
198198 if (ms.present[archIndex(arch)] != arch.isTime32()) {
199199 return false;
200200 }
......@@ -234,7 +234,7 @@ const MultiSym = struct {
234234
235235 fn isPtrSize(ms: MultiSym, mult: u16) bool {
236236 inline for (@typeInfo(Arch).@"enum".field_values) |field_value| {
237 const arch: Arch = @enumFromInt(field_value);
237 const arch: Arch = @fromBackingInt(@intCast(field_value));
238238 const arch_index = archIndex(arch);
239239 if (ms.present[arch_index] and ms.size[arch_index] != arch.ptrSize() * mult) {
240240 return false;
......@@ -245,7 +245,7 @@ const MultiSym = struct {
245245
246246 fn isWeak64(ms: MultiSym) bool {
247247 inline for (@typeInfo(Arch).@"enum".field_values) |field_value| {
248 const arch: Arch = @enumFromInt(field_value);
248 const arch: Arch = @fromBackingInt(@intCast(field_value));
249249 const arch_index = archIndex(arch);
250250 const binding: u4 = switch (arch.ptrSize()) {
251251 4 => std.elf.STB_GLOBAL,
......@@ -261,7 +261,7 @@ const MultiSym = struct {
261261
262262 fn isWeakTime64(ms: MultiSym) bool {
263263 inline for (@typeInfo(Arch).@"enum".field_values) |field_value| {
264 const arch: Arch = @enumFromInt(field_value);
264 const arch: Arch = @fromBackingInt(@intCast(field_value));
265265 const arch_index = archIndex(arch);
266266 const binding: u4 = if (arch.isTime32()) std.elf.STB_GLOBAL else std.elf.STB_WEAK;
267267 if (ms.present[arch_index] and ms.binding[arch_index] != binding) {
......@@ -605,7 +605,7 @@ fn parseElf(parse: Parse, comptime is_64: bool, comptime endian: std.builtin.End
605605 const name = try arena.dupe(u8, mem.sliceTo(dynstr[s(sym.st_name)..], 0));
606606 const ty = @as(u4, @truncate(sym.st_info));
607607 const binding = @as(u4, @truncate(sym.st_info >> 4));
608 const visib = @as(elf.STV, @enumFromInt(@as(u3, @truncate(sym.st_other))));
608 const visib = @as(elf.STV, @fromBackingInt(@intCast(@as(u3, @truncate(sym.st_other)))));
609609 const size = s(sym.st_size);
610610
611611 if (size == 0) {
......@@ -717,7 +717,7 @@ fn parseElf(parse: Parse, comptime is_64: bool, comptime endian: std.builtin.End
717717}
718718
719719fn archIndex(arch: Arch) u8 {
720 return @intFromEnum(arch);
720 return @backingInt(arch);
721721}
722722
723723fn archSetName(arch_set: [arches.len]bool) []const u8 {
tools/generate_c_size_and_align_checks.zig+1-1
......@@ -44,7 +44,7 @@ pub fn main(init: std.process.Init) !void {
4444 var stdout_writer = Io.File.stdout().writerStreaming(io, &buffer);
4545 const w = &stdout_writer.interface;
4646 inline for (@typeInfo(std.Target.CType).@"enum".field_values) |field_value| {
47 const c_type: std.Target.CType = @enumFromInt(field_value);
47 const c_type: std.Target.CType = @fromBackingInt(@intCast(field_value));
4848 try w.print("_Static_assert(sizeof({0s}) == {1d}, \"sizeof({0s}) == {1d}\");\n", .{
4949 cName(c_type),
5050 target.cTypeByteSize(c_type),
tools/update-linux-headers.zig+1-1
......@@ -39,7 +39,7 @@ const MultiArch = union(enum) {
3939 specific: Arch,
4040
4141 fn eql(a: MultiArch, b: MultiArch) bool {
42 if (@intFromEnum(a) != @intFromEnum(b))
42 if (@backingInt(a) != @backingInt(b))
4343 return false;
4444 if (a != .specific)
4545 return true;
tools/update_clang_options.zig+1-1
......@@ -666,7 +666,7 @@ pub fn main(init: std.process.Init) !void {
666666
667667 for (all_features, 0..) |feat, i| {
668668 const llvm_name = feat.llvm_name orelse continue;
669 const zig_feat = @as(Feature, @enumFromInt(i));
669 const zig_feat = @as(Feature, @fromBackingInt(@intCast(i)));
670670 const zig_name = @tagName(zig_feat);
671671 try llvm_to_zig_cpu_features.put(llvm_name, zig_name);
672672 }
tools/update_cpu_features.zig+1-1
......@@ -76,7 +76,7 @@ const spirv_extra_features: []const Feature = blk: {
7676 .zig_name = name,
7777 .desc = "Enable " ++ name ++ " capability",
7878 .deps = &struct {
79 const extensions = spirv_spec.Capability.dependencies(@enumFromInt(value));
79 const extensions = spirv_spec.Capability.dependencies(@fromBackingInt(@intCast(value)));
8080 const deps: [extensions.len][]const u8 = inner: {
8181 var out: [extensions.len][]const u8 = undefined;
8282 for (extensions, 0..) |ext, i| out[i] = @tagName(ext);