From 9f24d0511a89379bb3326ee1b62eeaabe589571b Mon Sep 17 00:00:00 2001 From: bd-912 Date: Tue, 7 May 2024 18:07:44 -0600 Subject: Print Datasegments to file, other Condense improvements, initial tests pass --- condense/CondenseVisitor.java | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'condense/CondenseVisitor.java') diff --git a/condense/CondenseVisitor.java b/condense/CondenseVisitor.java index b6233b2..fd337d9 100644 --- a/condense/CondenseVisitor.java +++ b/condense/CondenseVisitor.java @@ -8,17 +8,23 @@ import java.util.regex.*; public class CondenseVisitor extends VInstr.Visitor{ - ArrayList vaporm; ArrayList mips; StackHelper curr; - public CondenseVisitor(VaporProgram vp, ArrayList vaporm) { - this.vaporm = vaporm; - this.mips = new ArrayList(); + public CondenseVisitor(VaporProgram vp) { + this.mips = new ArrayList<>(); // preamble this.mips.add(0, ".data"); + + MinimalLogger.info("Adding data segments..."); + for (VDataSegment d : vp.dataSegments) { + this.addMIPS(d.ident + ":"); + for (VOperand.Static s : d.values) + this.addMIPS(String.format(" %s", + s.toString().substring(1))); + } this.addMIPS(".text"); this.addMIPS("jal Main"); this.addMIPS("li $v0 10"); @@ -47,12 +53,6 @@ public class CondenseVisitor extends VInstr.Visitor{ this.addMIPS(((VCodeLabel) n).ident + ":"); } - // epilogue - this.addMIPS(" lw $ra -4($fp)"); - this.addMIPS(" lw $fp -8($fp)"); - this.addMIPS(String.format(" addu $sp $sp %d", - this.curr.getFrameSize())); - this.addMIPS(" jr $ra"); } this.addMIPS("_print:"); @@ -141,7 +141,7 @@ public class CondenseVisitor extends VInstr.Visitor{ n.getClass().getSimpleName(), n.sourcePos.toString())); /////////////////////////////////////////////////////////////// - this.addMIPS(String.format(" jal %s", + this.addMIPS(String.format(" jalr $%s", n.addr.toString().substring(1))); /////////////////////////////////////////////////////////////// MinimalLogger.info(String.format("<-%s (%s)", @@ -184,9 +184,9 @@ public class CondenseVisitor extends VInstr.Visitor{ else if (op.equals("Lt")) ; else if (op.equals("LtS")) - ret += " slti"; + ret += " slt"; else if (op.equals("PrintIntS")) { - ret += " jal _print"; + this.addMIPS(" jal _print"); done = true; } else if (op.equals("HeapAllocZ")) { @@ -307,6 +307,10 @@ public class CondenseVisitor extends VInstr.Visitor{ n.getClass().getSimpleName(), n.sourcePos.toString())); /////////////////////////////////////////////////////////////// + this.addMIPS(" lw $ra -4($fp)"); + this.addMIPS(" lw $fp -8($fp)"); + this.addMIPS(String.format(" addu $sp $sp %d", + this.curr.getFrameSize())); this.addMIPS(" jr $ra"); /////////////////////////////////////////////////////////////// MinimalLogger.info(String.format("<-%s (%s)", -- cgit v1.2.3