diff options
Diffstat (limited to 'output/LinearSearch.opt.vaporm')
-rw-r--r-- | output/LinearSearch.opt.vaporm | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/output/LinearSearch.opt.vaporm b/output/LinearSearch.opt.vaporm new file mode 100644 index 0000000..4fa8c5c --- /dev/null +++ b/output/LinearSearch.opt.vaporm @@ -0,0 +1,162 @@ +const empty_LS + +func Main [in 0, out 0, local 0] + $t0 = HeapAllocZ(8) + if $t0 goto :null1 + Error("null pointer") +null1: + $a0 = $t0 + $a1 = 10 + call :LS.Start + $t0 = $v0 + PrintIntS($t0) + ret + +func LS.Start [in 0, out 0, local 1] + local[0] = $s0 + $s0 = $a0 + $t0 = $a1 + $a0 = $s0 + $a1 = $t0 + call :LS.Init + $a0 = $s0 + call :LS.Print + PrintIntS(9999) + $a0 = $s0 + $a1 = 8 + call :LS.Search + $t0 = $v0 + PrintIntS($t0) + $a0 = $s0 + $a1 = 12 + call :LS.Search + $t0 = $v0 + PrintIntS($t0) + $a0 = $s0 + $a1 = 17 + call :LS.Search + $t0 = $v0 + PrintIntS($t0) + $a0 = $s0 + $a1 = 50 + call :LS.Search + $t0 = $v0 + PrintIntS($t0) + $v0 = 55 + $s0 = local[0] + ret + +func LS.Print [in 0, out 0, local 0] + $t0 = $a0 + $t1 = 1 +while1_top: + $t2 = [$t0+4] + $t2 = LtS($t1 $t2) + if0 $t2 goto :while1_end + $t2 = [$t0] + if $t2 goto :null2 + Error("null pointer") +null2: + $t3 = [$t2] + $t3 = Lt($t1 $t3) + if $t3 goto :bounds1 + Error("array index out of bounds") +bounds1: + $t3 = MulS($t1 4) + $t3 = Add($t3 $t2) + $t3 = [$t3+4] + PrintIntS($t3) + $t1 = Add($t1 1) + goto :while1_top +while1_end: + $v0 = 0 + ret + +func LS.Search [in 0, out 0, local 0] + $t0 = $a0 + $t1 = $a1 + $t2 = 1 + $t3 = 0 +while2_top: + $t4 = [$t0+4] + $t4 = LtS($t2 $t4) + if0 $t4 goto :while2_end + $t4 = [$t0] + if $t4 goto :null3 + Error("null pointer") +null3: + $t5 = [$t4] + $t5 = Lt($t2 $t5) + if $t5 goto :bounds2 + Error("array index out of bounds") +bounds2: + $t5 = MulS($t2 4) + $t5 = Add($t5 $t4) + $t5 = [$t5+4] + $t4 = Add($t1 1) + $t6 = LtS($t5 $t1) + if0 $t6 goto :if1_else + goto :if1_end +if1_else: + $t4 = LtS($t5 $t4) + if $t4 goto :if2_else + goto :if2_end +if2_else: + $t3 = 1 + $t2 = [$t0+4] +if2_end: +if1_end: + $t2 = Add($t2 1) + goto :while2_top +while2_end: + $v0 = $t3 + ret + +func LS.Init [in 0, out 0, local 1] + local[0] = $s0 + $s0 = $a0 + $t0 = $a1 + [$s0+4] = $t0 + $a0 = $t0 + call :AllocArray + $t0 = $v0 + [$s0] = $t0 + $t0 = 1 + $t1 = [$s0+4] + $t1 = Add($t1 1) +while3_top: + $t2 = [$s0+4] + $t2 = LtS($t0 $t2) + if0 $t2 goto :while3_end + $t2 = MulS(2 $t0) + $t3 = Sub($t1 3) + $t4 = [$s0] + if $t4 goto :null4 + Error("null pointer") +null4: + $t5 = [$t4] + $t5 = Lt($t0 $t5) + if $t5 goto :bounds3 + Error("array index out of bounds") +bounds3: + $t5 = MulS($t0 4) + $t5 = Add($t5 $t4) + $t3 = Add($t2 $t3) + [$t5+4] = $t3 + $t0 = Add($t0 1) + $t1 = Sub($t1 1) + goto :while3_top +while3_end: + $v0 = 0 + $s0 = local[0] + ret + +func AllocArray [in 0, out 0, local 0] + $t0 = $a0 + $t1 = MulS($t0 4) + $t1 = Add($t1 4) + $t1 = HeapAllocZ($t1) + [$t1] = $t0 + $v0 = $t1 + ret + |