From c1d57f46c0eb74fbea90db8df8b42dc3ac8c31d5 Mon Sep 17 00:00:00 2001 From: bd-912 Date: Sat, 27 Apr 2024 14:51:07 -0600 Subject: Fix Calling ArrayAlloc or other labels --- output/ex45.vaporm | 119 ++++++++++++++++++++++++++++ output/ex47.vaporm | 179 ++++++++++++++++++++++++++++++++++++++++++ vaporize/VaporizeVisitor.java | 16 +++- 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 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", -- cgit v1.2.3