summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd-912 <bdunahu@colostate.edu>2024-04-24 22:55:22 -0600
committerbd-912 <bdunahu@colostate.edu>2024-04-24 22:55:22 -0600
commitd2017d232557b45792857b972ca8883df6e79506 (patch)
tree609200b502eb3eb6f231c9abcf751fb9af7c3016
parentc5ff7e6a0d4d589d2f3c6143efc933a532baf0a5 (diff)
VaporizeVisitor VCall + VReturn
-rw-r--r--vaporize/library/VaporizeVisitor.java39
1 files changed, 27 insertions, 12 deletions
diff --git a/vaporize/library/VaporizeVisitor.java b/vaporize/library/VaporizeVisitor.java
index c51cf99..ca1b3de 100644
--- a/vaporize/library/VaporizeVisitor.java
+++ b/vaporize/library/VaporizeVisitor.java
@@ -73,20 +73,25 @@ public class VaporizeVisitor extends VInstr.VisitorP<LIRDict, RuntimeException>
this.caller_save[i]));
}
- String ret = " ";
+ // FIXME for arg num > 4!
+ for (int i = 0; i < n.args.length; ++i) {
+ String reg = (n.args[i] instanceof VVarRef.Local) ?
+ d.getInterval(n.args[i].toString()).getAssignedRegister()
+ : n.args[i].toString();
+ this.addVaporm(String.format(" %s = %s",
+ this.arg_pass[i],
+ reg));
+ }
+
+ this.addVaporm(String.format(" call %s",
+ d.getInterval(n.addr.toString())
+ .getAssignedRegister()));
// get dest
if (n.dest != null) {
- ret += String.format("%s = ",
- d.getInterval(((VVarRef.Local) n.dest).ident).getAssignedRegister());
- }
- ret += d.getInterval(n.addr.toString()).getAssignedRegister() + "(";
- for (VOperand a : n.args) {
- ret += (a instanceof VVarRef.Local) ?
- d.getInterval(a.toString()).getAssignedRegister()
- : a.toString();
- ret += " ";
+ this.addVaporm(String.format(" %s = $v0",
+ d.getInterval(((VVarRef.Local) n.dest).ident)
+ .getAssignedRegister()));
}
- this.addVaporm(ret + ")"); //FIXME
for (int i = 0; i < this.caller_save.length; ++i) {
this.addVaporm(String.format(" %s = local[%s]",
@@ -164,6 +169,7 @@ public class VaporizeVisitor extends VInstr.VisitorP<LIRDict, RuntimeException>
n.getClass().getSimpleName(),
n.sourcePos.toString()));
///////////////////////////////////////////////////////////////
+
///////////////////////////////////////////////////////////////
MinimalLogger.info(String.format("<-%s (%s)",
n.getClass().getSimpleName(),
@@ -175,12 +181,21 @@ public class VaporizeVisitor extends VInstr.VisitorP<LIRDict, RuntimeException>
n.getClass().getSimpleName(),
n.sourcePos.toString()));
///////////////////////////////////////////////////////////////
+ // get ret
+ if (n.value != null) {
+ String reg = (n.value instanceof VVarRef.Local) ?
+ d.getInterval(n.value.toString()).getAssignedRegister() :
+ n.value.toString();
+ this.addVaporm(String.format(" $v0 = %s",
+ d.getInterval(((VVarRef.Local) n.value).ident)
+ .getAssignedRegister()));
+ }
for (int j = 0; j < this.callee_save.length; ++j) {
this.addVaporm(String.format(" %s = local[%s]",
this.callee_save[j],
j));
}
- this.addVaporm(" ret"); //FIXME
+ this.addVaporm(" ret");
///////////////////////////////////////////////////////////////
MinimalLogger.info(String.format("<-%s (%s)",
n.getClass().getSimpleName(),