Commit 89b4195c69

Koakuma <koachan@protonmail.com>
2022-05-28 04:06:25
stage2: sparc64: Account for delay slot in airBlock
1 parent 3220e0b
Changed files (1)
src
arch
sparc64
src/arch/sparc64/CodeGen.zig
@@ -991,9 +991,14 @@ fn airBlock(self: *Self, inst: Air.Inst.Index) !void {
     const relocs = &self.blocks.getPtr(inst).?.relocs;
     if (relocs.items.len > 0 and relocs.items[relocs.items.len - 1] == self.mir_instructions.len - 1) {
         // If the last Mir instruction is the last relocation (which
-        // would just jump one instruction further), it can be safely
+        // would just jump two instruction further), it can be safely
         // removed
-        self.mir_instructions.orderedRemove(relocs.pop());
+        const index = relocs.pop();
+
+        // First, remove the delay slot, then remove
+        // the branch instruction itself.
+        self.mir_instructions.orderedRemove(index + 1);
+        self.mir_instructions.orderedRemove(index);
     }
     for (relocs.items) |reloc| {
         try self.performReloc(reloc);