summaryrefslogtreecommitdiff
path: root/condense/CondenseVisitor.java
diff options
context:
space:
mode:
authorbd-912 <bdunahu@colostate.edu>2024-05-07 18:07:44 -0600
committerbd-912 <bdunahu@colostate.edu>2024-05-07 18:07:44 -0600
commit9f24d0511a89379bb3326ee1b62eeaabe589571b (patch)
tree53303feae0ac4bdbeedb350ee69edaaf3313806a /condense/CondenseVisitor.java
parentdcf0a8a4a77b0add316b3a8ea7cc0f746c128594 (diff)
Print Datasegments to file, other Condense improvements, initial tests pass
Diffstat (limited to 'condense/CondenseVisitor.java')
-rw-r--r--condense/CondenseVisitor.java30
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)",