diff options
Diffstat (limited to 'condense')
-rw-r--r-- | condense/CondenseVisitor.java | 30 |
1 files changed, 17 insertions, 13 deletions
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<RuntimeException>{ - ArrayList<String> vaporm; ArrayList<String> mips; StackHelper curr; - public CondenseVisitor(VaporProgram vp, ArrayList<String> vaporm) { - this.vaporm = vaporm; - this.mips = new ArrayList<String>(); + 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<RuntimeException>{ 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<RuntimeException>{ 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<RuntimeException>{ 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<RuntimeException>{ 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)", |