diff options
author | bd-912 <bdunahu@colostate.edu> | 2024-04-24 22:55:22 -0600 |
---|---|---|
committer | bd-912 <bdunahu@colostate.edu> | 2024-04-24 22:55:22 -0600 |
commit | d2017d232557b45792857b972ca8883df6e79506 (patch) | |
tree | 609200b502eb3eb6f231c9abcf751fb9af7c3016 | |
parent | c5ff7e6a0d4d589d2f3c6143efc933a532baf0a5 (diff) |
VaporizeVisitor VCall + VReturn
-rw-r--r-- | vaporize/library/VaporizeVisitor.java | 39 |
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(), |