summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--output/ex45.vaporm119
-rw-r--r--output/ex47.vaporm179
-rw-r--r--vaporize/VaporizeVisitor.java16
3 files changed, 311 insertions, 3 deletions
diff --git a/output/ex45.vaporm b/output/ex45.vaporm
index e69de29..277d9ed 100644
--- a/output/ex45.vaporm
+++ b/output/ex45.vaporm
@@ -0,0 +1,119 @@
+const functable_A
+ :A_run
+func Main [in 0, out 0, local 17]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ local[7] = $s7
+ $s7 = HeapAllocZ(8 )
+ [$s7+0] = :functable_A
+ $s6 = $s7
+ $s6 = $s6
+ $s7 = [$s6+0]
+ $s5 = [$s7+0]
+ local[8] = $t0
+ local[9] = $t1
+ local[10] = $t2
+ local[11] = $t3
+ local[12] = $t4
+ local[13] = $t5
+ local[14] = $t6
+ local[15] = $t7
+ local[16] = $t8
+ $a0 = $s6
+ call $s5
+ $s7 = $v0
+ $t0 = local[8]
+ $t1 = local[9]
+ $t2 = local[10]
+ $t3 = local[11]
+ $t4 = local[12]
+ $t5 = local[13]
+ $t6 = local[14]
+ $t7 = local[15]
+ $t8 = local[16]
+ $s5 = $s7
+ $s7 = $s5
+ PrintIntS($s7 )
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ $s7 = local[7]
+ ret
+func A_run [in 0, out 0, local 17]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ local[7] = $s7
+ $s6 = $a0
+ local[8] = $t0
+ local[9] = $t1
+ local[10] = $t2
+ local[11] = $t3
+ local[12] = $t4
+ local[13] = $t5
+ local[14] = $t6
+ local[15] = $t7
+ local[16] = $t8
+ $a0 = 10
+ call :AllocArray
+ $s7 = $v0
+ $t0 = local[8]
+ $t1 = local[9]
+ $t2 = local[10]
+ $t3 = local[11]
+ $t4 = local[12]
+ $t5 = local[13]
+ $t6 = local[14]
+ $t7 = local[15]
+ $t8 = local[16]
+ [$s6+4] = $s7
+ $s7 = [$s6+4]
+ $s6 = [$s7+0]
+ $s7 = $s6
+ $v0 = $s7
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ $s7 = local[7]
+ ret
+func AllocArray [in 0, out 0, local 17]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ local[7] = $s7
+ $s7 = $a0
+ $s6 = MulS($s7 4 )
+ $s6 = Add($s6 4 )
+ $s5 = HeapAllocZ($s6 )
+ [$s5+0] = $s7
+ $v0 = $s5
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ $s7 = local[7]
+ ret
diff --git a/output/ex47.vaporm b/output/ex47.vaporm
index e69de29..f5e4df1 100644
--- a/output/ex47.vaporm
+++ b/output/ex47.vaporm
@@ -0,0 +1,179 @@
+const functable_A
+ :A_set
+ :A_get
+func Main [in 0, out 0, local 17]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ local[7] = $s7
+ $s7 = HeapAllocZ(12 )
+ [$s7+0] = :functable_A
+ $s6 = $s7
+ $s6 = $s6
+ $s7 = [$s6+0]
+ $s5 = [$s7+0]
+ $s7 = 42
+ local[8] = $t0
+ local[9] = $t1
+ local[10] = $t2
+ local[11] = $t3
+ local[12] = $t4
+ local[13] = $t5
+ local[14] = $t6
+ local[15] = $t7
+ local[16] = $t8
+ $a0 = $s6
+ $a1 = $s7
+ call $s5
+ $s4 = $v0
+ $t0 = local[8]
+ $t1 = local[9]
+ $t2 = local[10]
+ $t3 = local[11]
+ $t4 = local[12]
+ $t5 = local[13]
+ $t6 = local[14]
+ $t7 = local[15]
+ $t8 = local[16]
+ $s7 = $s4
+ PrintIntS($s7 )
+ $s6 = $s6
+ $s7 = [$s6+0]
+ $s4 = [$s7+4]
+ local[8] = $t0
+ local[9] = $t1
+ local[10] = $t2
+ local[11] = $t3
+ local[12] = $t4
+ local[13] = $t5
+ local[14] = $t6
+ local[15] = $t7
+ local[16] = $t8
+ $a0 = $s6
+ call $s4
+ $s7 = $v0
+ $t0 = local[8]
+ $t1 = local[9]
+ $t2 = local[10]
+ $t3 = local[11]
+ $t4 = local[12]
+ $t5 = local[13]
+ $t6 = local[14]
+ $t7 = local[15]
+ $t8 = local[16]
+ $s4 = $s7
+ PrintIntS($s4 )
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ $s7 = local[7]
+ ret
+func A_set [in 0, out 0, local 17]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ local[7] = $s7
+ $s5 = $a0
+ $s6 = $a1
+ local[8] = $t0
+ local[9] = $t1
+ local[10] = $t2
+ local[11] = $t3
+ local[12] = $t4
+ local[13] = $t5
+ local[14] = $t6
+ local[15] = $t7
+ local[16] = $t8
+ $a0 = 12
+ call :AllocArray
+ $s7 = $v0
+ $t0 = local[8]
+ $t1 = local[9]
+ $t2 = local[10]
+ $t3 = local[11]
+ $t4 = local[12]
+ $t5 = local[13]
+ $t6 = local[14]
+ $t7 = local[15]
+ $t8 = local[16]
+ [$s5+8] = $s7
+ $s7 = [$s5+8]
+ $s4 = MulS(5 4 )
+ $s4 = Add($s4 4 )
+ $s4 = Add($s7 $s4 )
+ [$s4+0] = $s6
+ $s4 = [$s5+8]
+ $s5 = [$s4+0]
+ $s4 = $s5
+ $v0 = $s4
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ $s7 = local[7]
+ ret
+func A_get [in 0, out 0, local 17]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ local[7] = $s7
+ $s6 = $a0
+ $s7 = [$s6+8]
+ $s6 = MulS(5 4 )
+ $s6 = Add($s6 4 )
+ $s6 = Add($s7 $s6 )
+ $s7 = [$s6+0]
+ $s6 = $s7
+ $v0 = $s6
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ $s7 = local[7]
+ ret
+func AllocArray [in 0, out 0, local 17]
+ local[0] = $s0
+ local[1] = $s1
+ local[2] = $s2
+ local[3] = $s3
+ local[4] = $s4
+ local[5] = $s5
+ local[6] = $s6
+ local[7] = $s7
+ $s7 = $a0
+ $s6 = MulS($s7 4 )
+ $s6 = Add($s6 4 )
+ $s5 = HeapAllocZ($s6 )
+ [$s5+0] = $s7
+ $v0 = $s5
+ $s0 = local[0]
+ $s1 = local[1]
+ $s2 = local[2]
+ $s3 = local[3]
+ $s4 = local[4]
+ $s5 = local[5]
+ $s6 = local[6]
+ $s7 = local[7]
+ ret
diff --git a/vaporize/VaporizeVisitor.java b/vaporize/VaporizeVisitor.java
index c8cee17..aa462a5 100644
--- a/vaporize/VaporizeVisitor.java
+++ b/vaporize/VaporizeVisitor.java
@@ -113,9 +113,19 @@ public class VaporizeVisitor extends VInstr.VisitorP<LIRDict, RuntimeException>
reg));
}
- this.addVaporm(String.format(" call %s",
- d.getInterval(n.addr.toString())
- .getAssignedRegister()));
+ MinimalLogger.severe(String.format("n addr: %s",
+ n.addr.toString()));
+ MinimalLogger.severe(String.format("Interval: %s",
+ d.getInterval(n.addr.toString())));
+ LIRVar interval = d.getInterval(n.addr.toString());
+ if (interval == null)
+ // a label
+ this.addVaporm(String.format(" call %s",
+ n.addr.toString()));
+ else
+ this.addVaporm(String.format(" call %s",
+ interval
+ .getAssignedRegister()));
// get dest
if (n.dest != null) {
this.addVaporm(String.format(" %s = $v0",