From cf13356dabd79219499bddb63551f61a67a510bb Mon Sep 17 00:00:00 2001 From: Koakuma Date: Tue, 29 Mar 2022 20:37:32 +0700 Subject: [PATCH] stage2: sparcv9: Mir extraData implementation --- src/arch/riscv64/Mir.zig | 1 + src/arch/sparcv9/Mir.zig | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/arch/riscv64/Mir.zig b/src/arch/riscv64/Mir.zig index 5df3a86229..7b5049b7d4 100644 --- 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 index 0f80a60ecf..c8b9c6544f 100644 --- 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, + }; +} +