zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit cf13356dabd79219499bddb63551f61a67a510bb (tree)
parent 1ba52272167b12ea14f688df7d0d34940d98ff5b
Author: Koakuma <koachan@protonmail.com>
Date:   Tue, 29 Mar 2022 20:37:32 +0700

stage2: sparcv9: Mir extraData implementation

Diffstat:
Msrc/arch/riscv64/Mir.zig | 1+
Msrc/arch/sparcv9/Mir.zig | 20++++++++++++++++++++
2 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/src/arch/riscv64/Mir.zig b/src/arch/riscv64/Mir.zig @@ -144,3 +144,4 @@ pub fn extraData(mir: Mir, comptime T: type, index: usize) struct { data: T, end .end = i, }; } + diff --git a/src/arch/sparcv9/Mir.zig b/src/arch/sparcv9/Mir.zig @@ -58,3 +58,23 @@ pub fn deinit(mir: *Mir, gpa: std.mem.Allocator) void { mir.* = undefined; } +/// Returns the requested data, as well as the new index which is at the start of the +/// trailers for the object. +pub fn extraData(mir: Mir, comptime T: type, index: usize) struct { data: T, end: usize } { + const fields = std.meta.fields(T); + var i: usize = index; + var result: T = undefined; + inline for (fields) |field| { + @field(result, field.name) = switch (field.field_type) { + u32 => mir.extra[i], + i32 => @bitCast(i32, mir.extra[i]), + else => @compileError("bad field type"), + }; + i += 1; + } + return .{ + .data = result, + .end = i, + }; +} +