authorgravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-03-29 20:54:23+07:00
committergravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-04-14 22:18:05+07:00
log927706e6d0cf289be979bb6f12be6636c0e07f59
tree1633a4e17859410c365bbbfff9d3a65928a19538
parentcf13356dabd79219499bddb63551f61a67a510bb

stage2: sparcv9: Emit debug inst placeholder


1 files changed, 52 insertions(+), 2 deletions(-)

src/arch/sparcv9/Emit.zig+52-2
...@@ -7,6 +7,7 @@ const Module = @import("../../Module.zig");...@@ -7,6 +7,7 @@ const Module = @import("../../Module.zig");
7const ErrorMsg = Module.ErrorMsg;7const ErrorMsg = Module.ErrorMsg;
8const Liveness = @import("../../Liveness.zig");8const Liveness = @import("../../Liveness.zig");
9const DebugInfoOutput = @import("../../codegen.zig").DebugInfoOutput;9const DebugInfoOutput = @import("../../codegen.zig").DebugInfoOutput;
10const DW = std.dwarf;
1011
11const Emit = @This();12const Emit = @This();
12const Mir = @import("Mir.zig");13const Mir = @import("Mir.zig");
...@@ -33,11 +34,60 @@ const InnerError = error{...@@ -33,11 +34,60 @@ const InnerError = error{
33pub fn emitMir(34pub fn emitMir(
34 emit: *Emit,35 emit: *Emit,
35) InnerError!void {36) InnerError!void {
36 _ = emit;37 const mir_tags = emit.mir.instructions.items(.tag);
3738
38 @panic("TODO implement emitMir");39 // Emit machine code
40 for (mir_tags) |tag, index| {
41 const inst = @intCast(u32, index);
42 switch (tag) {
43 .dbg_line => try emit.mirDbgLine(inst),
44
45 .dbg_prologue_end => try emit.mirDebugPrologueEnd(),
46 .dbg_epilogue_begin => try emit.mirDebugEpilogueBegin(),
47 }
48 }
39}49}
4050
41pub fn deinit(emit: *Emit) void {51pub fn deinit(emit: *Emit) void {
42 emit.* = undefined;52 emit.* = undefined;
43}53}
54
55fn dbgAdvancePCAndLine(self: *Emit, line: u32, column: u32) !void {
56 _ = self;
57 _ = line;
58 _ = column;
59
60 @panic("TODO implement dbgAdvancePCAndLine");
61}
62
63fn mirDbgLine(emit: *Emit, inst: Mir.Inst.Index) !void {
64 const tag = emit.mir.instructions.items(.tag)[inst];
65 const dbg_line_column = emit.mir.instructions.items(.data)[inst].dbg_line_column;
66
67 switch (tag) {
68 .dbg_line => try emit.dbgAdvancePCAndLine(dbg_line_column.line, dbg_line_column.column),
69 else => unreachable,
70 }
71}
72
73fn mirDebugPrologueEnd(self: *Emit) !void {
74 switch (self.debug_output) {
75 .dwarf => |dbg_out| {
76 try dbg_out.dbg_line.append(DW.LNS.set_prologue_end);
77 try self.dbgAdvancePCAndLine(self.prev_di_line, self.prev_di_column);
78 },
79 .plan9 => {},
80 .none => {},
81 }
82}
83
84fn mirDebugEpilogueBegin(self: *Emit) !void {
85 switch (self.debug_output) {
86 .dwarf => |dbg_out| {
87 try dbg_out.dbg_line.append(DW.LNS.set_epilogue_begin);
88 try self.dbgAdvancePCAndLine(self.prev_di_line, self.prev_di_column);
89 },
90 .plan9 => {},
91 .none => {},
92 }
93}