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:
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,
+ };
+}
+