summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
Diffstat (limited to 'base')
-rw-r--r--base/BinaryTree.opt.s1064
-rw-r--r--base/BinaryTree.s1272
-rw-r--r--base/BubbleSort.opt.s437
-rw-r--r--base/BubbleSort.s453
-rw-r--r--base/Factorial.opt.s64
-rw-r--r--base/Factorial.s90
-rw-r--r--base/LinearSearch.opt.s254
-rw-r--r--base/LinearSearch.s276
-rw-r--r--base/LinkedList.opt.s791
-rw-r--r--base/LinkedList.s944
-rw-r--r--base/MoreThan4.opt.s113
-rw-r--r--base/MoreThan4.s140
-rw-r--r--base/QuickSort.opt.s566
-rw-r--r--base/QuickSort.s590
-rw-r--r--base/TreeVisitor.opt.s1258
-rw-r--r--base/TreeVisitor.s1493
16 files changed, 9805 insertions, 0 deletions
diff --git a/base/BinaryTree.opt.s b/base/BinaryTree.opt.s
new file mode 100644
index 0000000..3cea30c
--- /dev/null
+++ b/base/BinaryTree.opt.s
@@ -0,0 +1,1064 @@
+.data
+
+empty_BT:
+
+empty_Tree:
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ la $a0 empty_BT
+ jal BT.Start
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+BT.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ li $a0 24
+ jal _heapAlloc
+ move $s0 $v0
+ bnez $s0 null1
+ la $a0 _str0
+ j _error
+null1:
+ move $a0 $s0
+ li $a1 16
+ jal Tree.Init
+ bnez $s0 null2
+ la $a0 _str0
+ j _error
+null2:
+ move $a0 $s0
+ jal Tree.Print
+ li $a0 100000000
+ jal _print
+ bnez $s0 null3
+ la $a0 _str0
+ j _error
+null3:
+ move $a0 $s0
+ li $a1 8
+ jal Tree.Insert
+ bnez $s0 null4
+ la $a0 _str0
+ j _error
+null4:
+ move $a0 $s0
+ jal Tree.Print
+ bnez $s0 null5
+ la $a0 _str0
+ j _error
+null5:
+ move $a0 $s0
+ li $a1 24
+ jal Tree.Insert
+ bnez $s0 null6
+ la $a0 _str0
+ j _error
+null6:
+ move $a0 $s0
+ li $a1 4
+ jal Tree.Insert
+ bnez $s0 null7
+ la $a0 _str0
+ j _error
+null7:
+ move $a0 $s0
+ li $a1 12
+ jal Tree.Insert
+ bnez $s0 null8
+ la $a0 _str0
+ j _error
+null8:
+ move $a0 $s0
+ li $a1 20
+ jal Tree.Insert
+ bnez $s0 null9
+ la $a0 _str0
+ j _error
+null9:
+ move $a0 $s0
+ li $a1 28
+ jal Tree.Insert
+ bnez $s0 null10
+ la $a0 _str0
+ j _error
+null10:
+ move $a0 $s0
+ li $a1 14
+ jal Tree.Insert
+ bnez $s0 null11
+ la $a0 _str0
+ j _error
+null11:
+ move $a0 $s0
+ jal Tree.Print
+ bnez $s0 null12
+ la $a0 _str0
+ j _error
+null12:
+ move $a0 $s0
+ li $a1 24
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null13
+ la $a0 _str0
+ j _error
+null13:
+ move $a0 $s0
+ li $a1 12
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null14
+ la $a0 _str0
+ j _error
+null14:
+ move $a0 $s0
+ li $a1 16
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null15
+ la $a0 _str0
+ j _error
+null15:
+ move $a0 $s0
+ li $a1 50
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null16
+ la $a0 _str0
+ j _error
+null16:
+ move $a0 $s0
+ li $a1 12
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null17
+ la $a0 _str0
+ j _error
+null17:
+ move $a0 $s0
+ li $a1 12
+ jal Tree.Delete
+ bnez $s0 null18
+ la $a0 _str0
+ j _error
+null18:
+ move $a0 $s0
+ jal Tree.Print
+ bnez $s0 null19
+ la $a0 _str0
+ j _error
+null19:
+ move $a0 $s0
+ li $a1 12
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+Tree.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 8($t0)
+ sw $0 12($t0)
+ sw $0 16($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 4($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 0($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 4($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 0($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetKey:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 8($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetKey:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 8($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetHas_Right:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 16($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetHas_Left:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 12($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetHas_Left:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 12($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetHas_Right:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 16($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.Compare:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a1
+ move $t1 $a2
+ addu $t2 $t1 1
+ slt $t1 $t0 $t1
+ beqz $t1 if1_else
+ li $t1 0
+ j if1_end
+if1_else:
+ slt $t2 $t0 $t2
+ bnez $t2 if2_else
+ li $t1 0
+ j if2_end
+if2_else:
+ li $t1 1
+if2_end:
+if1_end:
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.Insert:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $s0 $a0
+ move $s1 $a1
+ li $a0 24
+ jal _heapAlloc
+ move $s2 $v0
+ bnez $s2 null20
+ la $a0 _str0
+ j _error
+null20:
+ move $a0 $s2
+ move $a1 $s1
+ jal Tree.Init
+ move $s0 $s0
+ li $s3 1
+while1_top:
+ beqz $s3 while1_end
+ bnez $s0 null21
+ la $a0 _str0
+ j _error
+null21:
+ move $a0 $s0
+ jal Tree.GetKey
+ move $t0 $v0
+ slt $t0 $s1 $t0
+ beqz $t0 if3_else
+ bnez $s0 null22
+ la $a0 _str0
+ j _error
+null22:
+ move $a0 $s0
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ beqz $t0 if4_else
+ bnez $s0 null23
+ la $a0 _str0
+ j _error
+null23:
+ move $a0 $s0
+ jal Tree.GetLeft
+ move $s0 $v0
+ j if4_end
+if4_else:
+ li $s3 0
+ bnez $s0 null24
+ la $a0 _str0
+ j _error
+null24:
+ move $a0 $s0
+ li $a1 1
+ jal Tree.SetHas_Left
+ bnez $s0 null25
+ la $a0 _str0
+ j _error
+null25:
+ move $a0 $s0
+ move $a1 $s2
+ jal Tree.SetLeft
+if4_end:
+ j if3_end
+if3_else:
+ bnez $s0 null26
+ la $a0 _str0
+ j _error
+null26:
+ move $a0 $s0
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if5_else
+ bnez $s0 null27
+ la $a0 _str0
+ j _error
+null27:
+ move $a0 $s0
+ jal Tree.GetRight
+ move $s0 $v0
+ j if5_end
+if5_else:
+ li $s3 0
+ bnez $s0 null28
+ la $a0 _str0
+ j _error
+null28:
+ move $a0 $s0
+ li $a1 1
+ jal Tree.SetHas_Right
+ bnez $s0 null29
+ la $a0 _str0
+ j _error
+null29:
+ move $a0 $s0
+ move $a1 $s2
+ jal Tree.SetRight
+if5_end:
+if3_end:
+ j while1_top
+while1_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.Delete:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 36
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ sw $s4 16($sp)
+ sw $s5 20($sp)
+ sw $s6 24($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $s0
+ move $s3 $s0
+ li $s4 1
+ li $s5 0
+ li $s6 1
+while2_top:
+ beqz $s4 while2_end
+ bnez $s2 null30
+ la $a0 _str0
+ j _error
+null30:
+ move $a0 $s2
+ jal Tree.GetKey
+ move $t0 $v0
+ slt $t1 $s1 $t0
+ beqz $t1 if6_else
+ bnez $s2 null31
+ la $a0 _str0
+ j _error
+null31:
+ move $a0 $s2
+ jal Tree.GetHas_Left
+ move $t1 $v0
+ beqz $t1 if7_else
+ move $s3 $s2
+ bnez $s2 null32
+ la $a0 _str0
+ j _error
+null32:
+ move $a0 $s2
+ jal Tree.GetLeft
+ move $s2 $v0
+ j if7_end
+if7_else:
+ li $s4 0
+if7_end:
+ j if6_end
+if6_else:
+ slt $t0 $t0 $s1
+ beqz $t0 if8_else
+ bnez $s2 null33
+ la $a0 _str0
+ j _error
+null33:
+ move $a0 $s2
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if9_else
+ move $s3 $s2
+ bnez $s2 null34
+ la $a0 _str0
+ j _error
+null34:
+ move $a0 $s2
+ jal Tree.GetRight
+ move $s2 $v0
+ j if9_end
+if9_else:
+ li $s4 0
+if9_end:
+ j if8_end
+if8_else:
+ beqz $s6 if10_else
+ bnez $s2 null35
+ la $a0 _str0
+ j _error
+null35:
+ move $a0 $s2
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ bnez $t0 if11_else
+ bnez $s2 null36
+ la $a0 _str0
+ j _error
+null36:
+ move $a0 $s2
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ bnez $t0 if11_else
+ j if11_end
+if11_else:
+ move $a0 $s0
+ move $a1 $s3
+ move $a2 $s2
+ jal Tree.Remove
+if11_end:
+ j if10_end
+if10_else:
+ move $a0 $s0
+ move $a1 $s3
+ move $a2 $s2
+ jal Tree.Remove
+if10_end:
+ li $s5 1
+ li $s4 0
+if8_end:
+if6_end:
+ li $s6 0
+ j while2_top
+while2_end:
+ move $v0 $s5
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $s4 16($sp)
+ lw $s5 20($sp)
+ lw $s6 24($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 36
+ jr $ra
+
+Tree.Remove:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+ bnez $s2 null37
+ la $a0 _str0
+ j _error
+null37:
+ move $a0 $s2
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ beqz $t0 if12_else
+ move $a0 $s0
+ move $a1 $s1
+ move $a2 $s2
+ jal Tree.RemoveLeft
+ j if12_end
+if12_else:
+ bnez $s2 null38
+ la $a0 _str0
+ j _error
+null38:
+ move $a0 $s2
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if13_else
+ move $a0 $s0
+ move $a1 $s1
+ move $a2 $s2
+ jal Tree.RemoveRight
+ j if13_end
+if13_else:
+ bnez $s2 null39
+ la $a0 _str0
+ j _error
+null39:
+ move $a0 $s2
+ jal Tree.GetKey
+ move $s2 $v0
+ bnez $s1 null40
+ la $a0 _str0
+ j _error
+null40:
+ move $a0 $s1
+ jal Tree.GetLeft
+ move $t0 $v0
+ bnez $t0 null41
+ la $a0 _str0
+ j _error
+null41:
+ move $a0 $t0
+ jal Tree.GetKey
+ move $t0 $v0
+ move $a0 $s0
+ move $a1 $s2
+ move $a2 $t0
+ jal Tree.Compare
+ move $t0 $v0
+ beqz $t0 if14_else
+ bnez $s1 null42
+ la $a0 _str0
+ j _error
+null42:
+ lw $t0 20($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jal Tree.SetLeft
+ bnez $s1 null43
+ la $a0 _str0
+ j _error
+null43:
+ move $a0 $s1
+ li $a1 0
+ jal Tree.SetHas_Left
+ j if14_end
+if14_else:
+ bnez $s1 null44
+ la $a0 _str0
+ j _error
+null44:
+ lw $t0 20($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jal Tree.SetRight
+ bnez $s1 null45
+ la $a0 _str0
+ j _error
+null45:
+ move $a0 $s1
+ li $a1 0
+ jal Tree.SetHas_Right
+if14_end:
+if13_end:
+if12_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Tree.RemoveRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+while3_top:
+ bnez $s2 null46
+ la $a0 _str0
+ j _error
+null46:
+ move $a0 $s2
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 while3_end
+ bnez $s2 null47
+ la $a0 _str0
+ j _error
+null47:
+ bnez $s2 null48
+ la $a0 _str0
+ j _error
+null48:
+ move $a0 $s2
+ jal Tree.GetRight
+ move $t0 $v0
+ bnez $t0 null49
+ la $a0 _str0
+ j _error
+null49:
+ move $a0 $t0
+ jal Tree.GetKey
+ move $t0 $v0
+ move $a0 $s2
+ move $a1 $t0
+ jal Tree.SetKey
+ move $s1 $s2
+ bnez $s2 null50
+ la $a0 _str0
+ j _error
+null50:
+ move $a0 $s2
+ jal Tree.GetRight
+ move $s2 $v0
+ j while3_top
+while3_end:
+ bnez $s1 null51
+ la $a0 _str0
+ j _error
+null51:
+ lw $t0 20($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jal Tree.SetRight
+ bnez $s1 null52
+ la $a0 _str0
+ j _error
+null52:
+ move $a0 $s1
+ li $a1 0
+ jal Tree.SetHas_Right
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Tree.RemoveLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+while4_top:
+ bnez $s2 null53
+ la $a0 _str0
+ j _error
+null53:
+ move $a0 $s2
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ beqz $t0 while4_end
+ bnez $s2 null54
+ la $a0 _str0
+ j _error
+null54:
+ bnez $s2 null55
+ la $a0 _str0
+ j _error
+null55:
+ move $a0 $s2
+ jal Tree.GetLeft
+ move $t0 $v0
+ bnez $t0 null56
+ la $a0 _str0
+ j _error
+null56:
+ move $a0 $t0
+ jal Tree.GetKey
+ move $t0 $v0
+ move $a0 $s2
+ move $a1 $t0
+ jal Tree.SetKey
+ move $s1 $s2
+ bnez $s2 null57
+ la $a0 _str0
+ j _error
+null57:
+ move $a0 $s2
+ jal Tree.GetLeft
+ move $s2 $v0
+ j while4_top
+while4_end:
+ bnez $s1 null58
+ la $a0 _str0
+ j _error
+null58:
+ lw $t0 20($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jal Tree.SetLeft
+ bnez $s1 null59
+ la $a0 _str0
+ j _error
+null59:
+ move $a0 $s1
+ li $a1 0
+ jal Tree.SetHas_Left
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Tree.Search:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $t0 $a0
+ move $s0 $a1
+ move $s1 $t0
+ li $s2 1
+ li $s3 0
+while5_top:
+ beqz $s2 while5_end
+ bnez $s1 null60
+ la $a0 _str0
+ j _error
+null60:
+ move $a0 $s1
+ jal Tree.GetKey
+ move $t0 $v0
+ slt $t1 $s0 $t0
+ beqz $t1 if15_else
+ bnez $s1 null61
+ la $a0 _str0
+ j _error
+null61:
+ move $a0 $s1
+ jal Tree.GetHas_Left
+ move $t1 $v0
+ beqz $t1 if16_else
+ bnez $s1 null62
+ la $a0 _str0
+ j _error
+null62:
+ move $a0 $s1
+ jal Tree.GetLeft
+ move $s1 $v0
+ j if16_end
+if16_else:
+ li $s2 0
+if16_end:
+ j if15_end
+if15_else:
+ slt $t0 $t0 $s0
+ beqz $t0 if17_else
+ bnez $s1 null63
+ la $a0 _str0
+ j _error
+null63:
+ move $a0 $s1
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if18_else
+ bnez $s1 null64
+ la $a0 _str0
+ j _error
+null64:
+ move $a0 $s1
+ jal Tree.GetRight
+ move $s1 $v0
+ j if18_end
+if18_else:
+ li $s2 0
+if18_end:
+ j if17_end
+if17_else:
+ li $s3 1
+ li $s2 0
+if17_end:
+if15_end:
+ j while5_top
+while5_end:
+ move $v0 $s3
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $t0
+ move $a0 $t0
+ move $a1 $t1
+ jal Tree.RecPrint
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.RecPrint:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 16
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ move $s0 $a0
+ move $s1 $a1
+ bnez $s1 null65
+ la $a0 _str0
+ j _error
+null65:
+ move $a0 $s1
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ beqz $t0 if19_else
+ bnez $s1 null66
+ la $a0 _str0
+ j _error
+null66:
+ move $a0 $s1
+ jal Tree.GetLeft
+ move $t0 $v0
+ move $a0 $s0
+ move $a1 $t0
+ jal Tree.RecPrint
+ j if19_end
+if19_else:
+if19_end:
+ bnez $s1 null67
+ la $a0 _str0
+ j _error
+null67:
+ move $a0 $s1
+ jal Tree.GetKey
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s1 null68
+ la $a0 _str0
+ j _error
+null68:
+ move $a0 $s1
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if20_else
+ bnez $s1 null69
+ la $a0 _str0
+ j _error
+null69:
+ move $a0 $s1
+ jal Tree.GetRight
+ move $t0 $v0
+ move $a0 $s0
+ move $a1 $t0
+ jal Tree.RecPrint
+ j if20_end
+if20_else:
+if20_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 16
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
diff --git a/base/BinaryTree.s b/base/BinaryTree.s
new file mode 100644
index 0000000..bf3f2ba
--- /dev/null
+++ b/base/BinaryTree.s
@@ -0,0 +1,1272 @@
+.data
+
+vmt_BT:
+ BT.Start
+
+vmt_Tree:
+ Tree.Init
+ Tree.SetRight
+ Tree.SetLeft
+ Tree.GetRight
+ Tree.GetLeft
+ Tree.GetKey
+ Tree.SetKey
+ Tree.GetHas_Right
+ Tree.GetHas_Left
+ Tree.SetHas_Left
+ Tree.SetHas_Right
+ Tree.Compare
+ Tree.Insert
+ Tree.Delete
+ Tree.Remove
+ Tree.RemoveRight
+ Tree.RemoveLeft
+ Tree.Search
+ Tree.Print
+ Tree.RecPrint
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ li $a0 4
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_BT
+ sw $t9 0($t0)
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ lw $t1 0($t0)
+ lw $t1 0($t1)
+ move $a0 $t0
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+BT.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ li $a0 28
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_Tree
+ sw $t9 0($t0)
+ move $s0 $t0
+ bnez $s0 null2
+ la $a0 _str0
+ j _error
+null2:
+ lw $t0 0($s0)
+ lw $t0 0($t0)
+ move $a0 $s0
+ li $a1 16
+ jalr $t0
+ bnez $s0 null3
+ la $a0 _str0
+ j _error
+null3:
+ lw $t0 0($s0)
+ lw $t0 72($t0)
+ move $a0 $s0
+ jalr $t0
+ li $a0 100000000
+ jal _print
+ bnez $s0 null4
+ la $a0 _str0
+ j _error
+null4:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 8
+ jalr $t0
+ bnez $s0 null5
+ la $a0 _str0
+ j _error
+null5:
+ lw $t0 0($s0)
+ lw $t0 72($t0)
+ move $a0 $s0
+ jalr $t0
+ bnez $s0 null6
+ la $a0 _str0
+ j _error
+null6:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 24
+ jalr $t0
+ bnez $s0 null7
+ la $a0 _str0
+ j _error
+null7:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 4
+ jalr $t0
+ bnez $s0 null8
+ la $a0 _str0
+ j _error
+null8:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 12
+ jalr $t0
+ bnez $s0 null9
+ la $a0 _str0
+ j _error
+null9:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 20
+ jalr $t0
+ bnez $s0 null10
+ la $a0 _str0
+ j _error
+null10:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 28
+ jalr $t0
+ bnez $s0 null11
+ la $a0 _str0
+ j _error
+null11:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 14
+ jalr $t0
+ bnez $s0 null12
+ la $a0 _str0
+ j _error
+null12:
+ lw $t0 0($s0)
+ lw $t0 72($t0)
+ move $a0 $s0
+ jalr $t0
+ bnez $s0 null13
+ la $a0 _str0
+ j _error
+null13:
+ lw $t0 0($s0)
+ lw $t0 68($t0)
+ move $a0 $s0
+ li $a1 24
+ jalr $t0
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null14
+ la $a0 _str0
+ j _error
+null14:
+ lw $t0 0($s0)
+ lw $t0 68($t0)
+ move $a0 $s0
+ li $a1 12
+ jalr $t0
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null15
+ la $a0 _str0
+ j _error
+null15:
+ lw $t0 0($s0)
+ lw $t0 68($t0)
+ move $a0 $s0
+ li $a1 16
+ jalr $t0
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null16
+ la $a0 _str0
+ j _error
+null16:
+ lw $t0 0($s0)
+ lw $t0 68($t0)
+ move $a0 $s0
+ li $a1 50
+ jalr $t0
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null17
+ la $a0 _str0
+ j _error
+null17:
+ lw $t0 0($s0)
+ lw $t0 68($t0)
+ move $a0 $s0
+ li $a1 12
+ jalr $t0
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null18
+ la $a0 _str0
+ j _error
+null18:
+ lw $t0 0($s0)
+ lw $t0 52($t0)
+ move $a0 $s0
+ li $a1 12
+ jalr $t0
+ bnez $s0 null19
+ la $a0 _str0
+ j _error
+null19:
+ lw $t0 0($s0)
+ lw $t0 72($t0)
+ move $a0 $s0
+ jalr $t0
+ bnez $s0 null20
+ la $a0 _str0
+ j _error
+null20:
+ lw $t0 0($s0)
+ lw $t0 68($t0)
+ move $a0 $s0
+ li $a1 12
+ jalr $t0
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+Tree.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 12($t0)
+ sw $0 16($t0)
+ sw $0 20($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 8($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 4($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 8($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 4($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetKey:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 12($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetKey:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 12($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetHas_Right:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 20($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetHas_Left:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 16($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetHas_Left:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 16($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetHas_Right:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 20($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.Compare:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a1
+ move $t1 $a2
+ addu $t2 $t1 1
+ slt $t1 $t0 $t1
+ beqz $t1 if1_else
+ li $t1 0
+ j if1_end
+if1_else:
+ slt $t2 $t0 $t2
+ li $t9 1
+ subu $t2 $t9 $t2
+ beqz $t2 if2_else
+ li $t1 0
+ j if2_end
+if2_else:
+ li $t1 1
+if2_end:
+if1_end:
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.Insert:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $s0 $a0
+ move $s1 $a1
+ li $a0 28
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_Tree
+ sw $t9 0($t0)
+ move $s2 $t0
+ bnez $s2 null21
+ la $a0 _str0
+ j _error
+null21:
+ lw $t0 0($s2)
+ lw $t0 0($t0)
+ move $a0 $s2
+ move $a1 $s1
+ jalr $t0
+ move $s0 $s0
+ li $s3 1
+while1_top:
+ beqz $s3 while1_end
+ bnez $s0 null22
+ la $a0 _str0
+ j _error
+null22:
+ lw $t0 0($s0)
+ lw $t0 20($t0)
+ move $a0 $s0
+ jalr $t0
+ move $t0 $v0
+ slt $t0 $s1 $t0
+ beqz $t0 if3_else
+ bnez $s0 null23
+ la $a0 _str0
+ j _error
+null23:
+ lw $t0 0($s0)
+ lw $t0 32($t0)
+ move $a0 $s0
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if4_else
+ bnez $s0 null24
+ la $a0 _str0
+ j _error
+null24:
+ lw $t0 0($s0)
+ lw $t0 16($t0)
+ move $a0 $s0
+ jalr $t0
+ move $s0 $v0
+ j if4_end
+if4_else:
+ li $s3 0
+ bnez $s0 null25
+ la $a0 _str0
+ j _error
+null25:
+ lw $t0 0($s0)
+ lw $t0 36($t0)
+ move $a0 $s0
+ li $a1 1
+ jalr $t0
+ bnez $s0 null26
+ la $a0 _str0
+ j _error
+null26:
+ lw $t0 0($s0)
+ lw $t0 8($t0)
+ move $a0 $s0
+ move $a1 $s2
+ jalr $t0
+if4_end:
+ j if3_end
+if3_else:
+ bnez $s0 null27
+ la $a0 _str0
+ j _error
+null27:
+ lw $t0 0($s0)
+ lw $t0 28($t0)
+ move $a0 $s0
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if5_else
+ bnez $s0 null28
+ la $a0 _str0
+ j _error
+null28:
+ lw $t0 0($s0)
+ lw $t0 12($t0)
+ move $a0 $s0
+ jalr $t0
+ move $s0 $v0
+ j if5_end
+if5_else:
+ li $s3 0
+ bnez $s0 null29
+ la $a0 _str0
+ j _error
+null29:
+ lw $t0 0($s0)
+ lw $t0 40($t0)
+ move $a0 $s0
+ li $a1 1
+ jalr $t0
+ bnez $s0 null30
+ la $a0 _str0
+ j _error
+null30:
+ lw $t0 0($s0)
+ lw $t0 4($t0)
+ move $a0 $s0
+ move $a1 $s2
+ jalr $t0
+if5_end:
+if3_end:
+ j while1_top
+while1_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.Delete:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 36
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ sw $s4 16($sp)
+ sw $s5 20($sp)
+ sw $s6 24($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $s0
+ move $s3 $s0
+ li $s4 1
+ li $s5 0
+ li $s6 1
+while2_top:
+ beqz $s4 while2_end
+ bnez $s2 null31
+ la $a0 _str0
+ j _error
+null31:
+ lw $t0 0($s2)
+ lw $t0 20($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ slt $t1 $s1 $t0
+ beqz $t1 if6_else
+ bnez $s2 null32
+ la $a0 _str0
+ j _error
+null32:
+ lw $t1 0($s2)
+ lw $t1 32($t1)
+ move $a0 $s2
+ jalr $t1
+ move $t1 $v0
+ beqz $t1 if7_else
+ move $s3 $s2
+ bnez $s2 null33
+ la $a0 _str0
+ j _error
+null33:
+ lw $t1 0($s2)
+ lw $t1 16($t1)
+ move $a0 $s2
+ jalr $t1
+ move $s2 $v0
+ j if7_end
+if7_else:
+ li $s4 0
+if7_end:
+ j if6_end
+if6_else:
+ slt $t0 $t0 $s1
+ beqz $t0 if8_else
+ bnez $s2 null34
+ la $a0 _str0
+ j _error
+null34:
+ lw $t0 0($s2)
+ lw $t0 28($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if9_else
+ move $s3 $s2
+ bnez $s2 null35
+ la $a0 _str0
+ j _error
+null35:
+ lw $t0 0($s2)
+ lw $t0 12($t0)
+ move $a0 $s2
+ jalr $t0
+ move $s2 $v0
+ j if9_end
+if9_else:
+ li $s4 0
+if9_end:
+ j if8_end
+if8_else:
+ beqz $s6 if10_else
+ bnez $s2 null36
+ la $a0 _str0
+ j _error
+null36:
+ lw $t0 0($s2)
+ lw $t0 28($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ li $t9 1
+ subu $t0 $t9 $t0
+ beqz $t0 ss1_else
+ bnez $s2 null37
+ la $a0 _str0
+ j _error
+null37:
+ lw $t0 0($s2)
+ lw $t0 32($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ li $t9 1
+ subu $t0 $t9 $t0
+ j ss1_end
+ss1_else:
+ li $t0 0
+ss1_end:
+ beqz $t0 if11_else
+ j if11_end
+if11_else:
+ lw $t0 0($s0)
+ lw $t0 56($t0)
+ move $a0 $s0
+ move $a1 $s3
+ move $a2 $s2
+ jalr $t0
+if11_end:
+ j if10_end
+if10_else:
+ lw $t0 0($s0)
+ lw $t0 56($t0)
+ move $a0 $s0
+ move $a1 $s3
+ move $a2 $s2
+ jalr $t0
+if10_end:
+ li $s5 1
+ li $s4 0
+if8_end:
+if6_end:
+ li $s6 0
+ j while2_top
+while2_end:
+ move $v0 $s5
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $s4 16($sp)
+ lw $s5 20($sp)
+ lw $s6 24($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 36
+ jr $ra
+
+Tree.Remove:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+ bnez $s2 null38
+ la $a0 _str0
+ j _error
+null38:
+ lw $t0 0($s2)
+ lw $t0 32($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if12_else
+ lw $t0 0($s0)
+ lw $t0 64($t0)
+ move $a0 $s0
+ move $a1 $s1
+ move $a2 $s2
+ jalr $t0
+ j if12_end
+if12_else:
+ bnez $s2 null39
+ la $a0 _str0
+ j _error
+null39:
+ lw $t0 0($s2)
+ lw $t0 28($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if13_else
+ lw $t0 0($s0)
+ lw $t0 60($t0)
+ move $a0 $s0
+ move $a1 $s1
+ move $a2 $s2
+ jalr $t0
+ j if13_end
+if13_else:
+ bnez $s2 null40
+ la $a0 _str0
+ j _error
+null40:
+ lw $t0 0($s2)
+ lw $t0 20($t0)
+ move $a0 $s2
+ jalr $t0
+ move $s2 $v0
+ bnez $s1 null41
+ la $a0 _str0
+ j _error
+null41:
+ lw $t0 0($s1)
+ lw $t0 16($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ bnez $t0 null42
+ la $a0 _str0
+ j _error
+null42:
+ lw $t1 0($t0)
+ lw $t1 20($t1)
+ move $a0 $t0
+ jalr $t1
+ move $t1 $v0
+ lw $t0 0($s0)
+ lw $t0 44($t0)
+ move $a0 $s0
+ move $a1 $s2
+ move $a2 $t1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if14_else
+ bnez $s1 null43
+ la $a0 _str0
+ j _error
+null43:
+ lw $t0 0($s1)
+ lw $t0 8($t0)
+ lw $t1 24($s0)
+ move $a0 $s1
+ move $a1 $t1
+ jalr $t0
+ bnez $s1 null44
+ la $a0 _str0
+ j _error
+null44:
+ lw $t1 0($s1)
+ lw $t1 36($t1)
+ move $a0 $s1
+ li $a1 0
+ jalr $t1
+ j if14_end
+if14_else:
+ bnez $s1 null45
+ la $a0 _str0
+ j _error
+null45:
+ lw $t1 0($s1)
+ lw $t1 4($t1)
+ lw $t0 24($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jalr $t1
+ bnez $s1 null46
+ la $a0 _str0
+ j _error
+null46:
+ lw $t0 0($s1)
+ lw $t0 40($t0)
+ move $a0 $s1
+ li $a1 0
+ jalr $t0
+if14_end:
+if13_end:
+if12_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Tree.RemoveRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+while3_top:
+ bnez $s2 null47
+ la $a0 _str0
+ j _error
+null47:
+ lw $t0 0($s2)
+ lw $t0 28($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 while3_end
+ bnez $s2 null48
+ la $a0 _str0
+ j _error
+null48:
+ lw $s3 0($s2)
+ lw $s3 24($s3)
+ bnez $s2 null49
+ la $a0 _str0
+ j _error
+null49:
+ lw $t0 0($s2)
+ lw $t0 12($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ bnez $t0 null50
+ la $a0 _str0
+ j _error
+null50:
+ lw $t1 0($t0)
+ lw $t1 20($t1)
+ move $a0 $t0
+ jalr $t1
+ move $t1 $v0
+ move $a0 $s2
+ move $a1 $t1
+ jalr $s3
+ move $s1 $s2
+ bnez $s2 null51
+ la $a0 _str0
+ j _error
+null51:
+ lw $t1 0($s2)
+ lw $t1 12($t1)
+ move $a0 $s2
+ jalr $t1
+ move $s2 $v0
+ j while3_top
+while3_end:
+ bnez $s1 null52
+ la $a0 _str0
+ j _error
+null52:
+ lw $t1 0($s1)
+ lw $t1 4($t1)
+ lw $t0 24($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jalr $t1
+ bnez $s1 null53
+ la $a0 _str0
+ j _error
+null53:
+ lw $t0 0($s1)
+ lw $t0 40($t0)
+ move $a0 $s1
+ li $a1 0
+ jalr $t0
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.RemoveLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+while4_top:
+ bnez $s2 null54
+ la $a0 _str0
+ j _error
+null54:
+ lw $t0 0($s2)
+ lw $t0 32($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 while4_end
+ bnez $s2 null55
+ la $a0 _str0
+ j _error
+null55:
+ lw $s3 0($s2)
+ lw $s3 24($s3)
+ bnez $s2 null56
+ la $a0 _str0
+ j _error
+null56:
+ lw $t0 0($s2)
+ lw $t0 16($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ bnez $t0 null57
+ la $a0 _str0
+ j _error
+null57:
+ lw $t1 0($t0)
+ lw $t1 20($t1)
+ move $a0 $t0
+ jalr $t1
+ move $t1 $v0
+ move $a0 $s2
+ move $a1 $t1
+ jalr $s3
+ move $s1 $s2
+ bnez $s2 null58
+ la $a0 _str0
+ j _error
+null58:
+ lw $t1 0($s2)
+ lw $t1 16($t1)
+ move $a0 $s2
+ jalr $t1
+ move $s2 $v0
+ j while4_top
+while4_end:
+ bnez $s1 null59
+ la $a0 _str0
+ j _error
+null59:
+ lw $t1 0($s1)
+ lw $t1 8($t1)
+ lw $t0 24($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jalr $t1
+ bnez $s1 null60
+ la $a0 _str0
+ j _error
+null60:
+ lw $t0 0($s1)
+ lw $t0 36($t0)
+ move $a0 $s1
+ li $a1 0
+ jalr $t0
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.Search:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $t0 $a0
+ move $s0 $a1
+ move $s1 $t0
+ li $s2 1
+ li $s3 0
+while5_top:
+ beqz $s2 while5_end
+ bnez $s1 null61
+ la $a0 _str0
+ j _error
+null61:
+ lw $t0 0($s1)
+ lw $t0 20($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ slt $t1 $s0 $t0
+ beqz $t1 if15_else
+ bnez $s1 null62
+ la $a0 _str0
+ j _error
+null62:
+ lw $t1 0($s1)
+ lw $t1 32($t1)
+ move $a0 $s1
+ jalr $t1
+ move $t1 $v0
+ beqz $t1 if16_else
+ bnez $s1 null63
+ la $a0 _str0
+ j _error
+null63:
+ lw $t1 0($s1)
+ lw $t1 16($t1)
+ move $a0 $s1
+ jalr $t1
+ move $s1 $v0
+ j if16_end
+if16_else:
+ li $s2 0
+if16_end:
+ j if15_end
+if15_else:
+ slt $t0 $t0 $s0
+ beqz $t0 if17_else
+ bnez $s1 null64
+ la $a0 _str0
+ j _error
+null64:
+ lw $t0 0($s1)
+ lw $t0 28($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if18_else
+ bnez $s1 null65
+ la $a0 _str0
+ j _error
+null65:
+ lw $t0 0($s1)
+ lw $t0 12($t0)
+ move $a0 $s1
+ jalr $t0
+ move $s1 $v0
+ j if18_end
+if18_else:
+ li $s2 0
+if18_end:
+ j if17_end
+if17_else:
+ li $s3 1
+ li $s2 0
+if17_end:
+if15_end:
+ j while5_top
+while5_end:
+ move $v0 $s3
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $t0
+ lw $t2 0($t0)
+ lw $t2 76($t2)
+ move $a0 $t0
+ move $a1 $t1
+ jalr $t2
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.RecPrint:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ bnez $s1 null66
+ la $a0 _str0
+ j _error
+null66:
+ lw $t0 0($s1)
+ lw $t0 32($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if19_else
+ lw $s2 0($s0)
+ lw $s2 76($s2)
+ bnez $s1 null67
+ la $a0 _str0
+ j _error
+null67:
+ lw $t0 0($s1)
+ lw $t0 16($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ move $a0 $s0
+ move $a1 $t0
+ jalr $s2
+ j if19_end
+if19_else:
+if19_end:
+ bnez $s1 null68
+ la $a0 _str0
+ j _error
+null68:
+ lw $t0 0($s1)
+ lw $t0 20($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s1 null69
+ la $a0 _str0
+ j _error
+null69:
+ lw $t0 0($s1)
+ lw $t0 28($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if20_else
+ lw $s2 0($s0)
+ lw $s2 76($s2)
+ bnez $s1 null70
+ la $a0 _str0
+ j _error
+null70:
+ lw $t0 0($s1)
+ lw $t0 12($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ move $a0 $s0
+ move $a1 $t0
+ jalr $s2
+ j if20_end
+if20_else:
+if20_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
diff --git a/base/BubbleSort.opt.s b/base/BubbleSort.opt.s
new file mode 100644
index 0000000..b1e5946
--- /dev/null
+++ b/base/BubbleSort.opt.s
@@ -0,0 +1,437 @@
+.data
+
+empty_BBS:
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ li $a0 8
+ jal _heapAlloc
+ move $t0 $v0
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ move $a0 $t0
+ li $a1 10
+ jal BBS.Start
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+BBS.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ move $a0 $s0
+ move $a1 $t0
+ jal BBS.Init
+ move $a0 $s0
+ jal BBS.Print
+ li $a0 99999
+ jal _print
+ move $a0 $s0
+ jal BBS.Sort
+ move $a0 $s0
+ jal BBS.Print
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+BBS.Sort:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t1 4($t0)
+ subu $t1 $t1 1
+ li $t2 -1
+while1_top:
+ slt $t3 $t2 $t1
+ beqz $t3 while1_end
+ li $t3 1
+while2_top:
+ addu $t4 $t1 1
+ slt $t4 $t3 $t4
+ beqz $t4 while2_end
+ subu $t4 $t3 1
+ lw $t5 0($t0)
+ bnez $t5 null2
+ la $a0 _str0
+ j _error
+null2:
+ lw $t6 0($t5)
+ sltu $t6 $t4 $t6
+ bnez $t6 bounds1
+ la $a0 _str1
+ j _error
+bounds1:
+ mul $t6 $t4 4
+ addu $t6 $t6 $t5
+ lw $t6 4($t6)
+ lw $t5 0($t0)
+ bnez $t5 null3
+ la $a0 _str0
+ j _error
+null3:
+ lw $t4 0($t5)
+ sltu $t4 $t3 $t4
+ bnez $t4 bounds2
+ la $a0 _str1
+ j _error
+bounds2:
+ mul $t4 $t3 4
+ addu $t4 $t4 $t5
+ lw $t4 4($t4)
+ slt $t4 $t4 $t6
+ beqz $t4 if1_else
+ subu $t4 $t3 1
+ lw $t6 0($t0)
+ bnez $t6 null4
+ la $a0 _str0
+ j _error
+null4:
+ lw $t5 0($t6)
+ sltu $t5 $t4 $t5
+ bnez $t5 bounds3
+ la $a0 _str1
+ j _error
+bounds3:
+ mul $t5 $t4 4
+ addu $t5 $t5 $t6
+ lw $t5 4($t5)
+ lw $t6 0($t0)
+ bnez $t6 null5
+ la $a0 _str0
+ j _error
+null5:
+ lw $t7 0($t6)
+ sltu $t7 $t4 $t7
+ bnez $t7 bounds4
+ la $a0 _str1
+ j _error
+bounds4:
+ mul $t7 $t4 4
+ addu $t7 $t7 $t6
+ lw $t6 0($t0)
+ bnez $t6 null6
+ la $a0 _str0
+ j _error
+null6:
+ lw $t4 0($t6)
+ sltu $t4 $t3 $t4
+ bnez $t4 bounds5
+ la $a0 _str1
+ j _error
+bounds5:
+ mul $t4 $t3 4
+ addu $t4 $t4 $t6
+ lw $t4 4($t4)
+ sw $t4 4($t7)
+ lw $t4 0($t0)
+ bnez $t4 null7
+ la $a0 _str0
+ j _error
+null7:
+ lw $t7 0($t4)
+ sltu $t7 $t3 $t7
+ bnez $t7 bounds6
+ la $a0 _str1
+ j _error
+bounds6:
+ mul $t7 $t3 4
+ addu $t7 $t7 $t4
+ sw $t5 4($t7)
+ j if1_end
+if1_else:
+if1_end:
+ addu $t3 $t3 1
+ j while2_top
+while2_end:
+ subu $t1 $t1 1
+ j while1_top
+while1_end:
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+BBS.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ li $t1 0
+while3_top:
+ lw $t2 4($t0)
+ slt $t2 $t1 $t2
+ beqz $t2 while3_end
+ lw $t2 0($t0)
+ bnez $t2 null8
+ la $a0 _str0
+ j _error
+null8:
+ lw $t3 0($t2)
+ sltu $t3 $t1 $t3
+ bnez $t3 bounds7
+ la $a0 _str1
+ j _error
+bounds7:
+ mul $t3 $t1 4
+ addu $t3 $t3 $t2
+ lw $t3 4($t3)
+ move $a0 $t3
+ jal _print
+ addu $t1 $t1 1
+ j while3_top
+while3_end:
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+BBS.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ sw $t0 4($s0)
+ move $a0 $t0
+ jal AllocArray
+ move $t0 $v0
+ sw $t0 0($s0)
+ lw $t0 0($s0)
+ bnez $t0 null9
+ la $a0 _str0
+ j _error
+null9:
+ lw $t1 0($t0)
+ li $t9 0
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds8
+ la $a0 _str1
+ j _error
+bounds8:
+ li $t1 0
+ addu $t1 $t1 $t0
+ li $t9 20
+ sw $t9 4($t1)
+ lw $t1 0($s0)
+ bnez $t1 null10
+ la $a0 _str0
+ j _error
+null10:
+ lw $t0 0($t1)
+ li $t9 1
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds9
+ la $a0 _str1
+ j _error
+bounds9:
+ li $t0 4
+ addu $t0 $t0 $t1
+ li $t9 7
+ sw $t9 4($t0)
+ lw $t0 0($s0)
+ bnez $t0 null11
+ la $a0 _str0
+ j _error
+null11:
+ lw $t1 0($t0)
+ li $t9 2
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds10
+ la $a0 _str1
+ j _error
+bounds10:
+ li $t1 8
+ addu $t1 $t1 $t0
+ li $t9 12
+ sw $t9 4($t1)
+ lw $t1 0($s0)
+ bnez $t1 null12
+ la $a0 _str0
+ j _error
+null12:
+ lw $t0 0($t1)
+ li $t9 3
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds11
+ la $a0 _str1
+ j _error
+bounds11:
+ li $t0 12
+ addu $t0 $t0 $t1
+ li $t9 18
+ sw $t9 4($t0)
+ lw $t0 0($s0)
+ bnez $t0 null13
+ la $a0 _str0
+ j _error
+null13:
+ lw $t1 0($t0)
+ li $t9 4
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds12
+ la $a0 _str1
+ j _error
+bounds12:
+ li $t1 16
+ addu $t1 $t1 $t0
+ li $t9 2
+ sw $t9 4($t1)
+ lw $t1 0($s0)
+ bnez $t1 null14
+ la $a0 _str0
+ j _error
+null14:
+ lw $t0 0($t1)
+ li $t9 5
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds13
+ la $a0 _str1
+ j _error
+bounds13:
+ li $t0 20
+ addu $t0 $t0 $t1
+ li $t9 11
+ sw $t9 4($t0)
+ lw $t0 0($s0)
+ bnez $t0 null15
+ la $a0 _str0
+ j _error
+null15:
+ lw $t1 0($t0)
+ li $t9 6
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds14
+ la $a0 _str1
+ j _error
+bounds14:
+ li $t1 24
+ addu $t1 $t1 $t0
+ li $t9 6
+ sw $t9 4($t1)
+ lw $t1 0($s0)
+ bnez $t1 null16
+ la $a0 _str0
+ j _error
+null16:
+ lw $t0 0($t1)
+ li $t9 7
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds15
+ la $a0 _str1
+ j _error
+bounds15:
+ li $t0 28
+ addu $t0 $t0 $t1
+ li $t9 9
+ sw $t9 4($t0)
+ lw $t0 0($s0)
+ bnez $t0 null17
+ la $a0 _str0
+ j _error
+null17:
+ lw $t1 0($t0)
+ li $t9 8
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds16
+ la $a0 _str1
+ j _error
+bounds16:
+ li $t1 32
+ addu $t1 $t1 $t0
+ li $t9 19
+ sw $t9 4($t1)
+ lw $t1 0($s0)
+ bnez $t1 null18
+ la $a0 _str0
+ j _error
+null18:
+ lw $t0 0($t1)
+ li $t9 9
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds17
+ la $a0 _str1
+ j _error
+bounds17:
+ li $t0 36
+ addu $t0 $t0 $t1
+ li $t9 5
+ sw $t9 4($t0)
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+AllocArray:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ mul $t1 $t0 4
+ addu $t1 $t1 4
+ move $a0 $t1
+ jal _heapAlloc
+ move $t1 $v0
+ sw $t0 0($t1)
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
+_str1: .asciiz "array index out of bounds\n"
diff --git a/base/BubbleSort.s b/base/BubbleSort.s
new file mode 100644
index 0000000..8d4676e
--- /dev/null
+++ b/base/BubbleSort.s
@@ -0,0 +1,453 @@
+.data
+
+vmt_BBS:
+ BBS.Start
+ BBS.Sort
+ BBS.Print
+ BBS.Init
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ li $a0 12
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_BBS
+ sw $t9 0($t0)
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ lw $t1 0($t0)
+ lw $t1 0($t1)
+ move $a0 $t0
+ li $a1 10
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+BBS.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ lw $t1 0($s0)
+ lw $t1 12($t1)
+ move $a0 $s0
+ move $a1 $t0
+ jalr $t1
+ lw $t1 0($s0)
+ lw $t1 8($t1)
+ move $a0 $s0
+ jalr $t1
+ li $a0 99999
+ jal _print
+ lw $t1 0($s0)
+ lw $t1 4($t1)
+ move $a0 $s0
+ jalr $t1
+ lw $t1 0($s0)
+ lw $t1 8($t1)
+ move $a0 $s0
+ jalr $t1
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+BBS.Sort:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t1 8($t0)
+ subu $t1 $t1 1
+ li $t2 -1
+while1_top:
+ slt $t3 $t2 $t1
+ beqz $t3 while1_end
+ li $t3 1
+while2_top:
+ addu $t4 $t1 1
+ slt $t4 $t3 $t4
+ beqz $t4 while2_end
+ subu $t4 $t3 1
+ lw $t5 4($t0)
+ bnez $t5 null2
+ la $a0 _str0
+ j _error
+null2:
+ lw $t6 0($t5)
+ sltu $t6 $t4 $t6
+ bnez $t6 bounds1
+ la $a0 _str1
+ j _error
+bounds1:
+ mul $t6 $t4 4
+ addu $t6 $t6 $t5
+ lw $t6 4($t6)
+ lw $t5 4($t0)
+ bnez $t5 null3
+ la $a0 _str0
+ j _error
+null3:
+ lw $t4 0($t5)
+ sltu $t4 $t3 $t4
+ bnez $t4 bounds2
+ la $a0 _str1
+ j _error
+bounds2:
+ mul $t4 $t3 4
+ addu $t4 $t4 $t5
+ lw $t4 4($t4)
+ slt $t4 $t4 $t6
+ beqz $t4 if1_else
+ subu $t4 $t3 1
+ lw $t6 4($t0)
+ bnez $t6 null4
+ la $a0 _str0
+ j _error
+null4:
+ lw $t5 0($t6)
+ sltu $t5 $t4 $t5
+ bnez $t5 bounds3
+ la $a0 _str1
+ j _error
+bounds3:
+ mul $t5 $t4 4
+ addu $t5 $t5 $t6
+ lw $t5 4($t5)
+ lw $t6 4($t0)
+ bnez $t6 null5
+ la $a0 _str0
+ j _error
+null5:
+ lw $t7 0($t6)
+ sltu $t7 $t4 $t7
+ bnez $t7 bounds4
+ la $a0 _str1
+ j _error
+bounds4:
+ mul $t7 $t4 4
+ addu $t7 $t7 $t6
+ lw $t6 4($t0)
+ bnez $t6 null6
+ la $a0 _str0
+ j _error
+null6:
+ lw $t4 0($t6)
+ sltu $t4 $t3 $t4
+ bnez $t4 bounds5
+ la $a0 _str1
+ j _error
+bounds5:
+ mul $t4 $t3 4
+ addu $t4 $t4 $t6
+ lw $t4 4($t4)
+ sw $t4 4($t7)
+ lw $t4 4($t0)
+ bnez $t4 null7
+ la $a0 _str0
+ j _error
+null7:
+ lw $t7 0($t4)
+ sltu $t7 $t3 $t7
+ bnez $t7 bounds6
+ la $a0 _str1
+ j _error
+bounds6:
+ mul $t7 $t3 4
+ addu $t7 $t7 $t4
+ sw $t5 4($t7)
+ j if1_end
+if1_else:
+if1_end:
+ addu $t3 $t3 1
+ j while2_top
+while2_end:
+ subu $t1 $t1 1
+ j while1_top
+while1_end:
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+BBS.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ li $t1 0
+while3_top:
+ lw $t2 8($t0)
+ slt $t2 $t1 $t2
+ beqz $t2 while3_end
+ lw $t2 4($t0)
+ bnez $t2 null8
+ la $a0 _str0
+ j _error
+null8:
+ lw $t3 0($t2)
+ sltu $t3 $t1 $t3
+ bnez $t3 bounds7
+ la $a0 _str1
+ j _error
+bounds7:
+ mul $t3 $t1 4
+ addu $t3 $t3 $t2
+ lw $t3 4($t3)
+ move $a0 $t3
+ jal _print
+ addu $t1 $t1 1
+ j while3_top
+while3_end:
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+BBS.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ sw $t0 8($s0)
+ move $a0 $t0
+ jal AllocArray
+ move $t0 $v0
+ sw $t0 4($s0)
+ lw $t0 4($s0)
+ bnez $t0 null9
+ la $a0 _str0
+ j _error
+null9:
+ lw $t1 0($t0)
+ li $t9 0
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds8
+ la $a0 _str1
+ j _error
+bounds8:
+ li $t1 0
+ addu $t1 $t1 $t0
+ li $t9 20
+ sw $t9 4($t1)
+ lw $t1 4($s0)
+ bnez $t1 null10
+ la $a0 _str0
+ j _error
+null10:
+ lw $t0 0($t1)
+ li $t9 1
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds9
+ la $a0 _str1
+ j _error
+bounds9:
+ li $t0 4
+ addu $t0 $t0 $t1
+ li $t9 7
+ sw $t9 4($t0)
+ lw $t0 4($s0)
+ bnez $t0 null11
+ la $a0 _str0
+ j _error
+null11:
+ lw $t1 0($t0)
+ li $t9 2
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds10
+ la $a0 _str1
+ j _error
+bounds10:
+ li $t1 8
+ addu $t1 $t1 $t0
+ li $t9 12
+ sw $t9 4($t1)
+ lw $t1 4($s0)
+ bnez $t1 null12
+ la $a0 _str0
+ j _error
+null12:
+ lw $t0 0($t1)
+ li $t9 3
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds11
+ la $a0 _str1
+ j _error
+bounds11:
+ li $t0 12
+ addu $t0 $t0 $t1
+ li $t9 18
+ sw $t9 4($t0)
+ lw $t0 4($s0)
+ bnez $t0 null13
+ la $a0 _str0
+ j _error
+null13:
+ lw $t1 0($t0)
+ li $t9 4
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds12
+ la $a0 _str1
+ j _error
+bounds12:
+ li $t1 16
+ addu $t1 $t1 $t0
+ li $t9 2
+ sw $t9 4($t1)
+ lw $t1 4($s0)
+ bnez $t1 null14
+ la $a0 _str0
+ j _error
+null14:
+ lw $t0 0($t1)
+ li $t9 5
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds13
+ la $a0 _str1
+ j _error
+bounds13:
+ li $t0 20
+ addu $t0 $t0 $t1
+ li $t9 11
+ sw $t9 4($t0)
+ lw $t0 4($s0)
+ bnez $t0 null15
+ la $a0 _str0
+ j _error
+null15:
+ lw $t1 0($t0)
+ li $t9 6
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds14
+ la $a0 _str1
+ j _error
+bounds14:
+ li $t1 24
+ addu $t1 $t1 $t0
+ li $t9 6
+ sw $t9 4($t1)
+ lw $t1 4($s0)
+ bnez $t1 null16
+ la $a0 _str0
+ j _error
+null16:
+ lw $t0 0($t1)
+ li $t9 7
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds15
+ la $a0 _str1
+ j _error
+bounds15:
+ li $t0 28
+ addu $t0 $t0 $t1
+ li $t9 9
+ sw $t9 4($t0)
+ lw $t0 4($s0)
+ bnez $t0 null17
+ la $a0 _str0
+ j _error
+null17:
+ lw $t1 0($t0)
+ li $t9 8
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds16
+ la $a0 _str1
+ j _error
+bounds16:
+ li $t1 32
+ addu $t1 $t1 $t0
+ li $t9 19
+ sw $t9 4($t1)
+ lw $t1 4($s0)
+ bnez $t1 null18
+ la $a0 _str0
+ j _error
+null18:
+ lw $t0 0($t1)
+ li $t9 9
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds17
+ la $a0 _str1
+ j _error
+bounds17:
+ li $t0 36
+ addu $t0 $t0 $t1
+ li $t9 5
+ sw $t9 4($t0)
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+AllocArray:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ mul $t1 $t0 4
+ addu $t1 $t1 4
+ move $a0 $t1
+ jal _heapAlloc
+ move $t1 $v0
+ sw $t0 0($t1)
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
+_str1: .asciiz "array index out of bounds\n"
diff --git a/base/Factorial.opt.s b/base/Factorial.opt.s
new file mode 100644
index 0000000..b743942
--- /dev/null
+++ b/base/Factorial.opt.s
@@ -0,0 +1,64 @@
+.data
+
+empty_Fac:
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ la $a0 empty_Fac
+ li $a1 10
+ jal Fac.ComputeFac
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Fac.ComputeFac:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $t0 $a0
+ move $s0 $a1
+ slti $t1 $s0 1
+ beqz $t1 if1_else
+ li $t1 1
+ j if1_end
+if1_else:
+ subu $t2 $s0 1
+ move $a0 $t0
+ move $a1 $t2
+ jal Fac.ComputeFac
+ move $t2 $v0
+ mul $t1 $s0 $t2
+if1_end:
+ move $v0 $t1
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
diff --git a/base/Factorial.s b/base/Factorial.s
new file mode 100644
index 0000000..ee0830b
--- /dev/null
+++ b/base/Factorial.s
@@ -0,0 +1,90 @@
+.data
+
+vmt_Fac:
+ Fac.ComputeFac
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ li $a0 4
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_Fac
+ sw $t9 0($t0)
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ lw $t1 0($t0)
+ lw $t1 0($t1)
+ move $a0 $t0
+ li $a1 10
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Fac.ComputeFac:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $t0 $a0
+ move $s0 $a1
+ slti $t1 $s0 1
+ beqz $t1 if1_else
+ li $t1 1
+ j if1_end
+if1_else:
+ lw $t2 0($t0)
+ lw $t2 0($t2)
+ subu $t3 $s0 1
+ move $a0 $t0
+ move $a1 $t3
+ jalr $t2
+ move $t3 $v0
+ mul $t1 $s0 $t3
+if1_end:
+ move $v0 $t1
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
diff --git a/base/LinearSearch.opt.s b/base/LinearSearch.opt.s
new file mode 100644
index 0000000..92b272e
--- /dev/null
+++ b/base/LinearSearch.opt.s
@@ -0,0 +1,254 @@
+.data
+
+empty_LS:
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ li $a0 8
+ jal _heapAlloc
+ move $t0 $v0
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ move $a0 $t0
+ li $a1 10
+ jal LS.Start
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+LS.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ move $a0 $s0
+ move $a1 $t0
+ jal LS.Init
+ move $a0 $s0
+ jal LS.Print
+ li $a0 9999
+ jal _print
+ move $a0 $s0
+ li $a1 8
+ jal LS.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ move $a0 $s0
+ li $a1 12
+ jal LS.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ move $a0 $s0
+ li $a1 17
+ jal LS.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ move $a0 $s0
+ li $a1 50
+ jal LS.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ li $v0 55
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+LS.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ li $t1 1
+while1_top:
+ lw $t2 4($t0)
+ slt $t2 $t1 $t2
+ beqz $t2 while1_end
+ lw $t2 0($t0)
+ bnez $t2 null2
+ la $a0 _str0
+ j _error
+null2:
+ lw $t3 0($t2)
+ sltu $t3 $t1 $t3
+ bnez $t3 bounds1
+ la $a0 _str1
+ j _error
+bounds1:
+ mul $t3 $t1 4
+ addu $t3 $t3 $t2
+ lw $t3 4($t3)
+ move $a0 $t3
+ jal _print
+ addu $t1 $t1 1
+ j while1_top
+while1_end:
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+LS.Search:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ li $t2 1
+ li $t3 0
+while2_top:
+ lw $t4 4($t0)
+ slt $t4 $t2 $t4
+ beqz $t4 while2_end
+ lw $t4 0($t0)
+ bnez $t4 null3
+ la $a0 _str0
+ j _error
+null3:
+ lw $t5 0($t4)
+ sltu $t5 $t2 $t5
+ bnez $t5 bounds2
+ la $a0 _str1
+ j _error
+bounds2:
+ mul $t5 $t2 4
+ addu $t5 $t5 $t4
+ lw $t5 4($t5)
+ addu $t4 $t1 1
+ slt $t6 $t5 $t1
+ beqz $t6 if1_else
+ j if1_end
+if1_else:
+ slt $t4 $t5 $t4
+ bnez $t4 if2_else
+ j if2_end
+if2_else:
+ li $t3 1
+ lw $t2 4($t0)
+if2_end:
+if1_end:
+ addu $t2 $t2 1
+ j while2_top
+while2_end:
+ move $v0 $t3
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+LS.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ sw $t0 4($s0)
+ move $a0 $t0
+ jal AllocArray
+ move $t0 $v0
+ sw $t0 0($s0)
+ li $t0 1
+ lw $t1 4($s0)
+ addu $t1 $t1 1
+while3_top:
+ lw $t2 4($s0)
+ slt $t2 $t0 $t2
+ beqz $t2 while3_end
+ mul $t2 $t0 2
+ subu $t3 $t1 3
+ lw $t4 0($s0)
+ bnez $t4 null4
+ la $a0 _str0
+ j _error
+null4:
+ lw $t5 0($t4)
+ sltu $t5 $t0 $t5
+ bnez $t5 bounds3
+ la $a0 _str1
+ j _error
+bounds3:
+ mul $t5 $t0 4
+ addu $t5 $t5 $t4
+ addu $t3 $t2 $t3
+ sw $t3 4($t5)
+ addu $t0 $t0 1
+ subu $t1 $t1 1
+ j while3_top
+while3_end:
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+AllocArray:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ mul $t1 $t0 4
+ addu $t1 $t1 4
+ move $a0 $t1
+ jal _heapAlloc
+ move $t1 $v0
+ sw $t0 0($t1)
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
+_str1: .asciiz "array index out of bounds\n"
diff --git a/base/LinearSearch.s b/base/LinearSearch.s
new file mode 100644
index 0000000..711126b
--- /dev/null
+++ b/base/LinearSearch.s
@@ -0,0 +1,276 @@
+.data
+
+vmt_LS:
+ LS.Start
+ LS.Print
+ LS.Search
+ LS.Init
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ li $a0 12
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_LS
+ sw $t9 0($t0)
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ lw $t1 0($t0)
+ lw $t1 0($t1)
+ move $a0 $t0
+ li $a1 10
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+LS.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ lw $t1 0($s0)
+ lw $t1 12($t1)
+ move $a0 $s0
+ move $a1 $t0
+ jalr $t1
+ lw $t1 0($s0)
+ lw $t1 4($t1)
+ move $a0 $s0
+ jalr $t1
+ li $a0 9999
+ jal _print
+ lw $t1 0($s0)
+ lw $t1 8($t1)
+ move $a0 $s0
+ li $a1 8
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $t1 0($s0)
+ lw $t1 8($t1)
+ move $a0 $s0
+ li $a1 12
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $t1 0($s0)
+ lw $t1 8($t1)
+ move $a0 $s0
+ li $a1 17
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $t1 0($s0)
+ lw $t1 8($t1)
+ move $a0 $s0
+ li $a1 50
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ li $v0 55
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+LS.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ li $t1 1
+while1_top:
+ lw $t2 8($t0)
+ slt $t2 $t1 $t2
+ beqz $t2 while1_end
+ lw $t2 4($t0)
+ bnez $t2 null2
+ la $a0 _str0
+ j _error
+null2:
+ lw $t3 0($t2)
+ sltu $t3 $t1 $t3
+ bnez $t3 bounds1
+ la $a0 _str1
+ j _error
+bounds1:
+ mul $t3 $t1 4
+ addu $t3 $t3 $t2
+ lw $t3 4($t3)
+ move $a0 $t3
+ jal _print
+ addu $t1 $t1 1
+ j while1_top
+while1_end:
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+LS.Search:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ li $t2 1
+ li $t3 0
+while2_top:
+ lw $t4 8($t0)
+ slt $t4 $t2 $t4
+ beqz $t4 while2_end
+ lw $t4 4($t0)
+ bnez $t4 null3
+ la $a0 _str0
+ j _error
+null3:
+ lw $t5 0($t4)
+ sltu $t5 $t2 $t5
+ bnez $t5 bounds2
+ la $a0 _str1
+ j _error
+bounds2:
+ mul $t5 $t2 4
+ addu $t5 $t5 $t4
+ lw $t5 4($t5)
+ addu $t4 $t1 1
+ slt $t6 $t5 $t1
+ beqz $t6 if1_else
+ j if1_end
+if1_else:
+ slt $t4 $t5 $t4
+ li $t9 1
+ subu $t4 $t9 $t4
+ beqz $t4 if2_else
+ j if2_end
+if2_else:
+ li $t3 1
+ lw $t2 8($t0)
+if2_end:
+if1_end:
+ addu $t2 $t2 1
+ j while2_top
+while2_end:
+ move $v0 $t3
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+LS.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ sw $t0 8($s0)
+ move $a0 $t0
+ jal AllocArray
+ move $t0 $v0
+ sw $t0 4($s0)
+ li $t0 1
+ lw $t1 8($s0)
+ addu $t1 $t1 1
+while3_top:
+ lw $t2 8($s0)
+ slt $t2 $t0 $t2
+ beqz $t2 while3_end
+ mul $t2 $t0 2
+ subu $t3 $t1 3
+ lw $t4 4($s0)
+ bnez $t4 null4
+ la $a0 _str0
+ j _error
+null4:
+ lw $t5 0($t4)
+ sltu $t5 $t0 $t5
+ bnez $t5 bounds3
+ la $a0 _str1
+ j _error
+bounds3:
+ mul $t5 $t0 4
+ addu $t5 $t5 $t4
+ addu $t3 $t2 $t3
+ sw $t3 4($t5)
+ addu $t0 $t0 1
+ subu $t1 $t1 1
+ j while3_top
+while3_end:
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+AllocArray:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ mul $t1 $t0 4
+ addu $t1 $t1 4
+ move $a0 $t1
+ jal _heapAlloc
+ move $t1 $v0
+ sw $t0 0($t1)
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
+_str1: .asciiz "array index out of bounds\n"
diff --git a/base/LinkedList.opt.s b/base/LinkedList.opt.s
new file mode 100644
index 0000000..c02b2cd
--- /dev/null
+++ b/base/LinkedList.opt.s
@@ -0,0 +1,791 @@
+.data
+
+empty_Element:
+
+empty_List:
+
+empty_LL:
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ la $a0 empty_LL
+ jal LL.Start
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Element.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ move $t2 $a2
+ move $t3 $a3
+ sw $t1 0($t0)
+ sw $t2 4($t0)
+ sw $t3 8($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Element.GetAge:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 0($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Element.GetSalary:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 4($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Element.GetMarried:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 8($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Element.Equal:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ li $s2 1
+ bnez $s1 null1
+ la $a0 _str0
+ j _error
+null1:
+ move $a0 $s1
+ jal Element.GetAge
+ move $t0 $v0
+ lw $t1 0($s0)
+ move $a0 $s0
+ move $a1 $t0
+ move $a2 $t1
+ jal Element.Compare
+ move $t1 $v0
+ bnez $t1 if1_else
+ li $s2 0
+ j if1_end
+if1_else:
+ bnez $s1 null2
+ la $a0 _str0
+ j _error
+null2:
+ move $a0 $s1
+ jal Element.GetSalary
+ move $t1 $v0
+ lw $t0 4($s0)
+ move $a0 $s0
+ move $a1 $t1
+ move $a2 $t0
+ jal Element.Compare
+ move $t0 $v0
+ bnez $t0 if2_else
+ li $s2 0
+ j if2_end
+if2_else:
+ lw $t0 8($s0)
+ beqz $t0 if3_else
+ bnez $s1 null3
+ la $a0 _str0
+ j _error
+null3:
+ move $a0 $s1
+ jal Element.GetMarried
+ move $t0 $v0
+ bnez $t0 if4_else
+ li $s2 0
+ j if4_end
+if4_else:
+if4_end:
+ j if3_end
+if3_else:
+ bnez $s1 null4
+ la $a0 _str0
+ j _error
+null4:
+ move $a0 $s1
+ jal Element.GetMarried
+ move $t0 $v0
+ beqz $t0 if5_else
+ li $s2 0
+ j if5_end
+if5_else:
+if5_end:
+if3_end:
+if2_end:
+if1_end:
+ move $v0 $s2
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Element.Compare:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a1
+ move $t1 $a2
+ addu $t2 $t1 1
+ slt $t1 $t0 $t1
+ beqz $t1 if6_else
+ li $t1 0
+ j if6_end
+if6_else:
+ slt $t2 $t0 $t2
+ bnez $t2 if7_else
+ li $t1 0
+ j if7_end
+if7_else:
+ li $t1 1
+if7_end:
+if6_end:
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ li $t9 1
+ sw $t9 8($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.InitNew:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ move $t2 $a2
+ move $t3 $a3
+ sw $t3 8($t0)
+ sw $t1 0($t0)
+ sw $t2 4($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.Insert:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $t0 $a0
+ move $t1 $a1
+ move $t0 $t0
+ li $a0 12
+ jal _heapAlloc
+ move $s0 $v0
+ bnez $s0 null5
+ la $a0 _str0
+ j _error
+null5:
+ move $a0 $s0
+ move $a1 $t1
+ move $a2 $t0
+ li $a3 0
+ jal List.InitNew
+ move $v0 $s0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+List.SetNext:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 4($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.Delete:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 40
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ sw $s4 16($sp)
+ sw $s5 20($sp)
+ sw $s6 24($sp)
+ sw $s7 28($sp)
+ move $t0 $a0
+ move $s0 $a1
+ move $s1 $t0
+ li $s2 0
+ li $s3 -1
+ move $s4 $t0
+ move $s5 $t0
+ lw $s6 8($t0)
+ lw $s7 0($t0)
+while1_top:
+ bnez $s6 ss1_else
+ li $t9 1
+ subu $t0 $t9 $s2
+ j ss1_end
+ss1_else:
+ li $t0 0
+ss1_end:
+ beqz $t0 while1_end
+ bnez $s0 null6
+ la $a0 _str0
+ j _error
+null6:
+ move $a0 $s0
+ move $a1 $s7
+ jal Element.Equal
+ move $t0 $v0
+ beqz $t0 if8_else
+ li $s2 1
+ slti $t0 $s3 0
+ beqz $t0 if9_else
+ bnez $s4 null7
+ la $a0 _str0
+ j _error
+null7:
+ move $a0 $s4
+ jal List.GetNext
+ move $s1 $v0
+ j if9_end
+if9_else:
+ li $t0 -555
+ move $a0 $t0
+ jal _print
+ bnez $s5 null8
+ la $a0 _str0
+ j _error
+null8:
+ bnez $s4 null9
+ la $a0 _str0
+ j _error
+null9:
+ move $a0 $s4
+ jal List.GetNext
+ move $t0 $v0
+ move $a0 $s5
+ move $a1 $t0
+ jal List.SetNext
+ li $t0 -555
+ move $a0 $t0
+ jal _print
+if9_end:
+ j if8_end
+if8_else:
+if8_end:
+ bnez $s2 if10_else
+ move $s5 $s4
+ bnez $s4 null10
+ la $a0 _str0
+ j _error
+null10:
+ move $a0 $s4
+ jal List.GetNext
+ move $s4 $v0
+ bnez $s4 null11
+ la $a0 _str0
+ j _error
+null11:
+ move $a0 $s4
+ jal List.GetEnd
+ move $s6 $v0
+ bnez $s4 null12
+ la $a0 _str0
+ j _error
+null12:
+ move $a0 $s4
+ jal List.GetElem
+ move $s7 $v0
+ li $s3 1
+ j if10_end
+if10_else:
+if10_end:
+ j while1_top
+while1_end:
+ move $v0 $s1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $s4 16($sp)
+ lw $s5 20($sp)
+ lw $s6 24($sp)
+ lw $s7 28($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 40
+ jr $ra
+
+List.Search:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $t0 $a0
+ move $s0 $a1
+ li $s1 0
+ move $s2 $t0
+ lw $s3 8($t0)
+ lw $t0 0($t0)
+while2_top:
+ li $t9 1
+ subu $t1 $t9 $s3
+ beqz $t1 while2_end
+ bnez $s0 null13
+ la $a0 _str0
+ j _error
+null13:
+ move $a0 $s0
+ move $a1 $t0
+ jal Element.Equal
+ move $t1 $v0
+ beqz $t1 if11_else
+ li $s1 1
+ j if11_end
+if11_else:
+if11_end:
+ bnez $s2 null14
+ la $a0 _str0
+ j _error
+null14:
+ move $a0 $s2
+ jal List.GetNext
+ move $s2 $v0
+ bnez $s2 null15
+ la $a0 _str0
+ j _error
+null15:
+ move $a0 $s2
+ jal List.GetEnd
+ move $s3 $v0
+ bnez $s2 null16
+ la $a0 _str0
+ j _error
+null16:
+ move $a0 $s2
+ jal List.GetElem
+ move $t0 $v0
+ j while2_top
+while2_end:
+ move $v0 $s1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+List.GetEnd:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 8($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.GetElem:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 0($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.GetNext:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 4($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 16
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ move $t0 $a0
+ move $s0 $t0
+ lw $s1 8($t0)
+ lw $t0 0($t0)
+while3_top:
+ li $t9 1
+ subu $t1 $t9 $s1
+ beqz $t1 while3_end
+ bnez $t0 null17
+ la $a0 _str0
+ j _error
+null17:
+ move $a0 $t0
+ jal Element.GetAge
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ bnez $s0 null18
+ la $a0 _str0
+ j _error
+null18:
+ move $a0 $s0
+ jal List.GetNext
+ move $s0 $v0
+ bnez $s0 null19
+ la $a0 _str0
+ j _error
+null19:
+ move $a0 $s0
+ jal List.GetEnd
+ move $s1 $v0
+ bnez $s0 null20
+ la $a0 _str0
+ j _error
+null20:
+ move $a0 $s0
+ jal List.GetElem
+ move $t0 $v0
+ j while3_top
+while3_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 16
+ jr $ra
+
+LL.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ li $a0 12
+ jal _heapAlloc
+ move $s0 $v0
+ bnez $s0 null21
+ la $a0 _str0
+ j _error
+null21:
+ move $a0 $s0
+ jal List.Init
+ move $s0 $s0
+ bnez $s0 null22
+ la $a0 _str0
+ j _error
+null22:
+ move $a0 $s0
+ jal List.Init
+ bnez $s0 null23
+ la $a0 _str0
+ j _error
+null23:
+ move $a0 $s0
+ jal List.Print
+ li $a0 12
+ jal _heapAlloc
+ move $s1 $v0
+ bnez $s1 null24
+ la $a0 _str0
+ j _error
+null24:
+ move $a0 $s1
+ li $a1 25
+ li $a2 37000
+ li $a3 0
+ jal Element.Init
+ bnez $s0 null25
+ la $a0 _str0
+ j _error
+null25:
+ move $a0 $s0
+ move $a1 $s1
+ jal List.Insert
+ move $s0 $v0
+ bnez $s0 null26
+ la $a0 _str0
+ j _error
+null26:
+ move $a0 $s0
+ jal List.Print
+ li $a0 10000000
+ jal _print
+ li $a0 12
+ jal _heapAlloc
+ move $s1 $v0
+ bnez $s1 null27
+ la $a0 _str0
+ j _error
+null27:
+ move $a0 $s1
+ li $a1 39
+ li $a2 42000
+ li $a3 1
+ jal Element.Init
+ move $s2 $s1
+ bnez $s0 null28
+ la $a0 _str0
+ j _error
+null28:
+ move $a0 $s0
+ move $a1 $s1
+ jal List.Insert
+ move $s0 $v0
+ bnez $s0 null29
+ la $a0 _str0
+ j _error
+null29:
+ move $a0 $s0
+ jal List.Print
+ li $a0 10000000
+ jal _print
+ li $a0 12
+ jal _heapAlloc
+ move $s1 $v0
+ bnez $s1 null30
+ la $a0 _str0
+ j _error
+null30:
+ move $a0 $s1
+ li $a1 22
+ li $a2 34000
+ li $a3 0
+ jal Element.Init
+ bnez $s0 null31
+ la $a0 _str0
+ j _error
+null31:
+ move $a0 $s0
+ move $a1 $s1
+ jal List.Insert
+ move $s0 $v0
+ bnez $s0 null32
+ la $a0 _str0
+ j _error
+null32:
+ move $a0 $s0
+ jal List.Print
+ li $a0 12
+ jal _heapAlloc
+ move $s3 $v0
+ bnez $s3 null33
+ la $a0 _str0
+ j _error
+null33:
+ move $a0 $s3
+ li $a1 27
+ li $a2 34000
+ li $a3 0
+ jal Element.Init
+ bnez $s0 null34
+ la $a0 _str0
+ j _error
+null34:
+ move $a0 $s0
+ move $a1 $s2
+ jal List.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null35
+ la $a0 _str0
+ j _error
+null35:
+ move $a0 $s0
+ move $a1 $s3
+ jal List.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ li $a0 10000000
+ jal _print
+ li $a0 12
+ jal _heapAlloc
+ move $s1 $v0
+ bnez $s1 null36
+ la $a0 _str0
+ j _error
+null36:
+ move $a0 $s1
+ li $a1 28
+ li $a2 35000
+ li $a3 0
+ jal Element.Init
+ bnez $s0 null37
+ la $a0 _str0
+ j _error
+null37:
+ move $a0 $s0
+ move $a1 $s1
+ jal List.Insert
+ move $s0 $v0
+ bnez $s0 null38
+ la $a0 _str0
+ j _error
+null38:
+ move $a0 $s0
+ jal List.Print
+ li $a0 2220000
+ jal _print
+ bnez $s0 null39
+ la $a0 _str0
+ j _error
+null39:
+ move $a0 $s0
+ move $a1 $s2
+ jal List.Delete
+ move $s0 $v0
+ bnez $s0 null40
+ la $a0 _str0
+ j _error
+null40:
+ move $a0 $s0
+ jal List.Print
+ li $a0 33300000
+ jal _print
+ bnez $s0 null41
+ la $a0 _str0
+ j _error
+null41:
+ move $a0 $s0
+ move $a1 $s1
+ jal List.Delete
+ move $s0 $v0
+ bnez $s0 null42
+ la $a0 _str0
+ j _error
+null42:
+ move $a0 $s0
+ jal List.Print
+ li $a0 44440000
+ jal _print
+ li $v0 0
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
diff --git a/base/LinkedList.s b/base/LinkedList.s
new file mode 100644
index 0000000..593d777
--- /dev/null
+++ b/base/LinkedList.s
@@ -0,0 +1,944 @@
+.data
+
+vmt_Element:
+ Element.Init
+ Element.GetAge
+ Element.GetSalary
+ Element.GetMarried
+ Element.Equal
+ Element.Compare
+
+vmt_List:
+ List.Init
+ List.InitNew
+ List.Insert
+ List.SetNext
+ List.Delete
+ List.Search
+ List.GetEnd
+ List.GetElem
+ List.GetNext
+ List.Print
+
+vmt_LL:
+ LL.Start
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ li $a0 4
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_LL
+ sw $t9 0($t0)
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ lw $t1 0($t0)
+ lw $t1 0($t1)
+ move $a0 $t0
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Element.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ move $t2 $a2
+ move $t3 $a3
+ sw $t1 4($t0)
+ sw $t2 8($t0)
+ sw $t3 12($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Element.GetAge:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 4($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Element.GetSalary:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 8($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Element.GetMarried:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 12($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Element.Equal:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ li $s2 1
+ bnez $s1 null2
+ la $a0 _str0
+ j _error
+null2:
+ lw $t0 0($s1)
+ lw $t0 4($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ lw $t1 0($s0)
+ lw $t1 20($t1)
+ lw $t2 4($s0)
+ move $a0 $s0
+ move $a1 $t0
+ move $a2 $t2
+ jalr $t1
+ move $t2 $v0
+ li $t9 1
+ subu $t2 $t9 $t2
+ beqz $t2 if1_else
+ li $s2 0
+ j if1_end
+if1_else:
+ bnez $s1 null3
+ la $a0 _str0
+ j _error
+null3:
+ lw $t2 0($s1)
+ lw $t2 8($t2)
+ move $a0 $s1
+ jalr $t2
+ move $t2 $v0
+ lw $t1 0($s0)
+ lw $t1 20($t1)
+ lw $t0 8($s0)
+ move $a0 $s0
+ move $a1 $t2
+ move $a2 $t0
+ jalr $t1
+ move $t0 $v0
+ li $t9 1
+ subu $t0 $t9 $t0
+ beqz $t0 if2_else
+ li $s2 0
+ j if2_end
+if2_else:
+ lw $t0 12($s0)
+ beqz $t0 if3_else
+ bnez $s1 null4
+ la $a0 _str0
+ j _error
+null4:
+ lw $t0 0($s1)
+ lw $t0 12($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ li $t9 1
+ subu $t0 $t9 $t0
+ beqz $t0 if4_else
+ li $s2 0
+ j if4_end
+if4_else:
+if4_end:
+ j if3_end
+if3_else:
+ bnez $s1 null5
+ la $a0 _str0
+ j _error
+null5:
+ lw $t0 0($s1)
+ lw $t0 12($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if5_else
+ li $s2 0
+ j if5_end
+if5_else:
+if5_end:
+if3_end:
+if2_end:
+if1_end:
+ move $v0 $s2
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Element.Compare:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a1
+ move $t1 $a2
+ addu $t2 $t1 1
+ slt $t1 $t0 $t1
+ beqz $t1 if6_else
+ li $t1 0
+ j if6_end
+if6_else:
+ slt $t2 $t0 $t2
+ li $t9 1
+ subu $t2 $t9 $t2
+ beqz $t2 if7_else
+ li $t1 0
+ j if7_end
+if7_else:
+ li $t1 1
+if7_end:
+if6_end:
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ li $t9 1
+ sw $t9 12($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.InitNew:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ move $t2 $a2
+ move $t3 $a3
+ sw $t3 12($t0)
+ sw $t1 4($t0)
+ sw $t2 8($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.Insert:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $t0 $a0
+ move $t1 $a1
+ move $t0 $t0
+ li $a0 16
+ jal _heapAlloc
+ move $t2 $v0
+ la $t9 vmt_List
+ sw $t9 0($t2)
+ move $s0 $t2
+ bnez $s0 null6
+ la $a0 _str0
+ j _error
+null6:
+ lw $t2 0($s0)
+ lw $t2 4($t2)
+ move $a0 $s0
+ move $a1 $t1
+ move $a2 $t0
+ li $a3 0
+ jalr $t2
+ move $v0 $s0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+List.SetNext:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 8($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.Delete:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 44
+ sw $ra -4($fp)
+ sw $s0 4($sp)
+ sw $s1 8($sp)
+ sw $s2 12($sp)
+ sw $s3 16($sp)
+ sw $s4 20($sp)
+ sw $s5 24($sp)
+ sw $s6 28($sp)
+ sw $s7 32($sp)
+ move $t0 $a0
+ move $s0 $a1
+ move $s1 $t0
+ li $s2 0
+ li $s3 -1
+ move $s4 $t0
+ move $s5 $t0
+ lw $s6 12($t0)
+ lw $s7 4($t0)
+while1_top:
+ li $t9 1
+ subu $t0 $t9 $s6
+ beqz $t0 ss1_else
+ li $t9 1
+ subu $t0 $t9 $s2
+ j ss1_end
+ss1_else:
+ li $t0 0
+ss1_end:
+ beqz $t0 while1_end
+ bnez $s0 null7
+ la $a0 _str0
+ j _error
+null7:
+ lw $t0 0($s0)
+ lw $t0 16($t0)
+ move $a0 $s0
+ move $a1 $s7
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if8_else
+ li $s2 1
+ slti $t0 $s3 0
+ beqz $t0 if9_else
+ bnez $s4 null8
+ la $a0 _str0
+ j _error
+null8:
+ lw $t0 0($s4)
+ lw $t0 32($t0)
+ move $a0 $s4
+ jalr $t0
+ move $s1 $v0
+ j if9_end
+if9_else:
+ li $t0 -555
+ move $a0 $t0
+ jal _print
+ bnez $s5 null9
+ la $a0 _str0
+ j _error
+null9:
+ lw $v0 0($s5)
+ sw $v0 0($sp)
+ lw $v0 0($sp)
+ lw $v0 12($v0)
+ sw $v0 0($sp)
+ bnez $s4 null10
+ la $a0 _str0
+ j _error
+null10:
+ lw $t0 0($s4)
+ lw $t0 32($t0)
+ move $a0 $s4
+ jalr $t0
+ move $t0 $v0
+ move $a0 $s5
+ move $a1 $t0
+ lw $v0 0($sp)
+ jalr $v0
+ li $t0 -555
+ move $a0 $t0
+ jal _print
+if9_end:
+ j if8_end
+if8_else:
+if8_end:
+ li $t9 1
+ subu $t0 $t9 $s2
+ beqz $t0 if10_else
+ move $s5 $s4
+ bnez $s4 null11
+ la $a0 _str0
+ j _error
+null11:
+ lw $t0 0($s4)
+ lw $t0 32($t0)
+ move $a0 $s4
+ jalr $t0
+ move $s4 $v0
+ bnez $s4 null12
+ la $a0 _str0
+ j _error
+null12:
+ lw $t0 0($s4)
+ lw $t0 24($t0)
+ move $a0 $s4
+ jalr $t0
+ move $s6 $v0
+ bnez $s4 null13
+ la $a0 _str0
+ j _error
+null13:
+ lw $t0 0($s4)
+ lw $t0 28($t0)
+ move $a0 $s4
+ jalr $t0
+ move $s7 $v0
+ li $s3 1
+ j if10_end
+if10_else:
+if10_end:
+ j while1_top
+while1_end:
+ move $v0 $s1
+ lw $s0 4($sp)
+ lw $s1 8($sp)
+ lw $s2 12($sp)
+ lw $s3 16($sp)
+ lw $s4 20($sp)
+ lw $s5 24($sp)
+ lw $s6 28($sp)
+ lw $s7 32($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 44
+ jr $ra
+
+List.Search:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $t0 $a0
+ move $s0 $a1
+ li $s1 0
+ move $s2 $t0
+ lw $s3 12($t0)
+ lw $t0 4($t0)
+while2_top:
+ li $t9 1
+ subu $t1 $t9 $s3
+ beqz $t1 while2_end
+ bnez $s0 null14
+ la $a0 _str0
+ j _error
+null14:
+ lw $t1 0($s0)
+ lw $t1 16($t1)
+ move $a0 $s0
+ move $a1 $t0
+ jalr $t1
+ move $t1 $v0
+ beqz $t1 if11_else
+ li $s1 1
+ j if11_end
+if11_else:
+if11_end:
+ bnez $s2 null15
+ la $a0 _str0
+ j _error
+null15:
+ lw $t1 0($s2)
+ lw $t1 32($t1)
+ move $a0 $s2
+ jalr $t1
+ move $s2 $v0
+ bnez $s2 null16
+ la $a0 _str0
+ j _error
+null16:
+ lw $t1 0($s2)
+ lw $t1 24($t1)
+ move $a0 $s2
+ jalr $t1
+ move $s3 $v0
+ bnez $s2 null17
+ la $a0 _str0
+ j _error
+null17:
+ lw $t1 0($s2)
+ lw $t1 28($t1)
+ move $a0 $s2
+ jalr $t1
+ move $t0 $v0
+ j while2_top
+while2_end:
+ move $v0 $s1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+List.GetEnd:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 12($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.GetElem:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 4($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.GetNext:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 8($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+List.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 16
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ move $t0 $a0
+ move $s0 $t0
+ lw $s1 12($t0)
+ lw $t0 4($t0)
+while3_top:
+ li $t9 1
+ subu $t1 $t9 $s1
+ beqz $t1 while3_end
+ bnez $t0 null18
+ la $a0 _str0
+ j _error
+null18:
+ lw $t1 0($t0)
+ lw $t1 4($t1)
+ move $a0 $t0
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ bnez $s0 null19
+ la $a0 _str0
+ j _error
+null19:
+ lw $t1 0($s0)
+ lw $t1 32($t1)
+ move $a0 $s0
+ jalr $t1
+ move $s0 $v0
+ bnez $s0 null20
+ la $a0 _str0
+ j _error
+null20:
+ lw $t1 0($s0)
+ lw $t1 24($t1)
+ move $a0 $s0
+ jalr $t1
+ move $s1 $v0
+ bnez $s0 null21
+ la $a0 _str0
+ j _error
+null21:
+ lw $t1 0($s0)
+ lw $t1 28($t1)
+ move $a0 $s0
+ jalr $t1
+ move $t0 $v0
+ j while3_top
+while3_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 16
+ jr $ra
+
+LL.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ li $a0 16
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_List
+ sw $t9 0($t0)
+ move $s0 $t0
+ bnez $s0 null22
+ la $a0 _str0
+ j _error
+null22:
+ lw $t0 0($s0)
+ lw $t0 0($t0)
+ move $a0 $s0
+ jalr $t0
+ move $s0 $s0
+ bnez $s0 null23
+ la $a0 _str0
+ j _error
+null23:
+ lw $t0 0($s0)
+ lw $t0 0($t0)
+ move $a0 $s0
+ jalr $t0
+ bnez $s0 null24
+ la $a0 _str0
+ j _error
+null24:
+ lw $t0 0($s0)
+ lw $t0 36($t0)
+ move $a0 $s0
+ jalr $t0
+ li $a0 16
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_Element
+ sw $t9 0($t0)
+ move $s1 $t0
+ bnez $s1 null25
+ la $a0 _str0
+ j _error
+null25:
+ lw $t0 0($s1)
+ lw $t0 0($t0)
+ move $a0 $s1
+ li $a1 25
+ li $a2 37000
+ li $a3 0
+ jalr $t0
+ bnez $s0 null26
+ la $a0 _str0
+ j _error
+null26:
+ lw $t0 0($s0)
+ lw $t0 8($t0)
+ move $a0 $s0
+ move $a1 $s1
+ jalr $t0
+ move $s0 $v0
+ bnez $s0 null27
+ la $a0 _str0
+ j _error
+null27:
+ lw $t0 0($s0)
+ lw $t0 36($t0)
+ move $a0 $s0
+ jalr $t0
+ li $a0 10000000
+ jal _print
+ li $a0 16
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_Element
+ sw $t9 0($t0)
+ move $s1 $t0
+ bnez $s1 null28
+ la $a0 _str0
+ j _error
+null28:
+ lw $t0 0($s1)
+ lw $t0 0($t0)
+ move $a0 $s1
+ li $a1 39
+ li $a2 42000
+ li $a3 1
+ jalr $t0
+ move $s2 $s1
+ bnez $s0 null29
+ la $a0 _str0
+ j _error
+null29:
+ lw $t0 0($s0)
+ lw $t0 8($t0)
+ move $a0 $s0
+ move $a1 $s1
+ jalr $t0
+ move $s0 $v0
+ bnez $s0 null30
+ la $a0 _str0
+ j _error
+null30:
+ lw $t0 0($s0)
+ lw $t0 36($t0)
+ move $a0 $s0
+ jalr $t0
+ li $a0 10000000
+ jal _print
+ li $a0 16
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_Element
+ sw $t9 0($t0)
+ move $s1 $t0
+ bnez $s1 null31
+ la $a0 _str0
+ j _error
+null31:
+ lw $t0 0($s1)
+ lw $t0 0($t0)
+ move $a0 $s1
+ li $a1 22
+ li $a2 34000
+ li $a3 0
+ jalr $t0
+ bnez $s0 null32
+ la $a0 _str0
+ j _error
+null32:
+ lw $t0 0($s0)
+ lw $t0 8($t0)
+ move $a0 $s0
+ move $a1 $s1
+ jalr $t0
+ move $s0 $v0
+ bnez $s0 null33
+ la $a0 _str0
+ j _error
+null33:
+ lw $t0 0($s0)
+ lw $t0 36($t0)
+ move $a0 $s0
+ jalr $t0
+ li $a0 16
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_Element
+ sw $t9 0($t0)
+ move $s3 $t0
+ bnez $s3 null34
+ la $a0 _str0
+ j _error
+null34:
+ lw $t0 0($s3)
+ lw $t0 0($t0)
+ move $a0 $s3
+ li $a1 27
+ li $a2 34000
+ li $a3 0
+ jalr $t0
+ bnez $s0 null35
+ la $a0 _str0
+ j _error
+null35:
+ lw $t0 0($s0)
+ lw $t0 20($t0)
+ move $a0 $s0
+ move $a1 $s2
+ jalr $t0
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null36
+ la $a0 _str0
+ j _error
+null36:
+ lw $t0 0($s0)
+ lw $t0 20($t0)
+ move $a0 $s0
+ move $a1 $s3
+ jalr $t0
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ li $a0 10000000
+ jal _print
+ li $a0 16
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_Element
+ sw $t9 0($t0)
+ move $s1 $t0
+ bnez $s1 null37
+ la $a0 _str0
+ j _error
+null37:
+ lw $t0 0($s1)
+ lw $t0 0($t0)
+ move $a0 $s1
+ li $a1 28
+ li $a2 35000
+ li $a3 0
+ jalr $t0
+ bnez $s0 null38
+ la $a0 _str0
+ j _error
+null38:
+ lw $t0 0($s0)
+ lw $t0 8($t0)
+ move $a0 $s0
+ move $a1 $s1
+ jalr $t0
+ move $s0 $v0
+ bnez $s0 null39
+ la $a0 _str0
+ j _error
+null39:
+ lw $t0 0($s0)
+ lw $t0 36($t0)
+ move $a0 $s0
+ jalr $t0
+ li $a0 2220000
+ jal _print
+ bnez $s0 null40
+ la $a0 _str0
+ j _error
+null40:
+ lw $t0 0($s0)
+ lw $t0 16($t0)
+ move $a0 $s0
+ move $a1 $s2
+ jalr $t0
+ move $s0 $v0
+ bnez $s0 null41
+ la $a0 _str0
+ j _error
+null41:
+ lw $t0 0($s0)
+ lw $t0 36($t0)
+ move $a0 $s0
+ jalr $t0
+ li $a0 33300000
+ jal _print
+ bnez $s0 null42
+ la $a0 _str0
+ j _error
+null42:
+ lw $t0 0($s0)
+ lw $t0 16($t0)
+ move $a0 $s0
+ move $a1 $s1
+ jalr $t0
+ move $s0 $v0
+ bnez $s0 null43
+ la $a0 _str0
+ j _error
+null43:
+ lw $t0 0($s0)
+ lw $t0 36($t0)
+ move $a0 $s0
+ jalr $t0
+ li $a0 44440000
+ jal _print
+ li $v0 0
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
diff --git a/base/MoreThan4.opt.s b/base/MoreThan4.opt.s
new file mode 100644
index 0000000..70e3173
--- /dev/null
+++ b/base/MoreThan4.opt.s
@@ -0,0 +1,113 @@
+.data
+
+empty_MT4:
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ la $a0 empty_MT4
+ li $a1 1
+ li $a2 2
+ li $a3 3
+ li $t9 4
+ sw $t9 0($sp)
+ li $t9 5
+ sw $t9 4($sp)
+ li $t9 6
+ sw $t9 8($sp)
+ jal MT4.Start
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+MT4.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ move $t2 $a2
+ move $t3 $a3
+ lw $t4 0($fp)
+ lw $t5 4($fp)
+ lw $t6 8($fp)
+ move $a0 $t1
+ jal _print
+ move $a0 $t2
+ jal _print
+ move $a0 $t3
+ jal _print
+ move $a0 $t4
+ jal _print
+ move $a0 $t5
+ jal _print
+ move $a0 $t6
+ jal _print
+ move $a0 $t0
+ move $a1 $t6
+ move $a2 $t5
+ move $a3 $t4
+ sw $t3 0($sp)
+ sw $t2 4($sp)
+ sw $t1 8($sp)
+ jal MT4.Change
+ move $t6 $v0
+ move $v0 $t6
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+MT4.Change:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a1
+ move $t1 $a2
+ move $t2 $a3
+ lw $t3 0($fp)
+ lw $t4 4($fp)
+ lw $t5 8($fp)
+ move $a0 $t0
+ jal _print
+ move $a0 $t1
+ jal _print
+ move $a0 $t2
+ jal _print
+ move $a0 $t3
+ jal _print
+ move $a0 $t4
+ jal _print
+ move $a0 $t5
+ jal _print
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
diff --git a/base/MoreThan4.s b/base/MoreThan4.s
new file mode 100644
index 0000000..d04c1f5
--- /dev/null
+++ b/base/MoreThan4.s
@@ -0,0 +1,140 @@
+.data
+
+vmt_MT4:
+ MT4.Start
+ MT4.Change
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ li $a0 4
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_MT4
+ sw $t9 0($t0)
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ lw $t1 0($t0)
+ lw $t1 0($t1)
+ move $a0 $t0
+ li $a1 1
+ li $a2 2
+ li $a3 3
+ li $t9 4
+ sw $t9 0($sp)
+ li $t9 5
+ sw $t9 4($sp)
+ li $t9 6
+ sw $t9 8($sp)
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+MT4.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ move $t2 $a2
+ move $t3 $a3
+ lw $t4 0($fp)
+ lw $t5 4($fp)
+ lw $t6 8($fp)
+ move $a0 $t1
+ jal _print
+ move $a0 $t2
+ jal _print
+ move $a0 $t3
+ jal _print
+ move $a0 $t4
+ jal _print
+ move $a0 $t5
+ jal _print
+ move $a0 $t6
+ jal _print
+ lw $t7 0($t0)
+ lw $t7 4($t7)
+ move $a0 $t0
+ move $a1 $t6
+ move $a2 $t5
+ move $a3 $t4
+ sw $t3 0($sp)
+ sw $t2 4($sp)
+ sw $t1 8($sp)
+ jalr $t7
+ move $t7 $v0
+ move $v0 $t7
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+MT4.Change:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a1
+ move $t1 $a2
+ move $t2 $a3
+ lw $t3 0($fp)
+ lw $t4 4($fp)
+ lw $t5 8($fp)
+ move $a0 $t0
+ jal _print
+ move $a0 $t1
+ jal _print
+ move $a0 $t2
+ jal _print
+ move $a0 $t3
+ jal _print
+ move $a0 $t4
+ jal _print
+ move $a0 $t5
+ jal _print
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
diff --git a/base/QuickSort.opt.s b/base/QuickSort.opt.s
new file mode 100644
index 0000000..69f7bda
--- /dev/null
+++ b/base/QuickSort.opt.s
@@ -0,0 +1,566 @@
+.data
+
+empty_QS:
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ li $a0 8
+ jal _heapAlloc
+ move $t0 $v0
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ move $a0 $t0
+ li $a1 10
+ jal QS.Start
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+QS.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ move $a0 $s0
+ move $a1 $t0
+ jal QS.Init
+ move $a0 $s0
+ jal QS.Print
+ li $a0 9999
+ jal _print
+ lw $t0 4($s0)
+ subu $t0 $t0 1
+ move $a0 $s0
+ li $a1 0
+ move $a2 $t0
+ jal QS.Sort
+ move $a0 $s0
+ jal QS.Print
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+QS.Sort:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $t0 $a1
+ move $s1 $a2
+ li $t1 0
+ slt $t2 $t0 $s1
+ beqz $t2 if1_else
+ lw $t2 0($s0)
+ bnez $t2 null2
+ la $a0 _str0
+ j _error
+null2:
+ lw $t3 0($t2)
+ sltu $t3 $s1 $t3
+ bnez $t3 bounds1
+ la $a0 _str1
+ j _error
+bounds1:
+ mul $t3 $s1 4
+ addu $t3 $t3 $t2
+ lw $t3 4($t3)
+ subu $s2 $t0 1
+ move $t2 $s1
+ li $t4 1
+while1_top:
+ beqz $t4 while1_end
+ li $t5 1
+while2_top:
+ beqz $t5 while2_end
+ addu $s2 $s2 1
+ lw $t6 0($s0)
+ bnez $t6 null3
+ la $a0 _str0
+ j _error
+null3:
+ lw $t7 0($t6)
+ sltu $t7 $s2 $t7
+ bnez $t7 bounds2
+ la $a0 _str1
+ j _error
+bounds2:
+ mul $t7 $s2 4
+ addu $t7 $t7 $t6
+ lw $t7 4($t7)
+ slt $t6 $t7 $t3
+ bnez $t6 if2_else
+ li $t5 0
+ j if2_end
+if2_else:
+ li $t5 1
+if2_end:
+ j while2_top
+while2_end:
+ li $t5 1
+while3_top:
+ beqz $t5 while3_end
+ subu $t2 $t2 1
+ lw $t6 0($s0)
+ bnez $t6 null4
+ la $a0 _str0
+ j _error
+null4:
+ lw $t8 0($t6)
+ sltu $t8 $t2 $t8
+ bnez $t8 bounds3
+ la $a0 _str1
+ j _error
+bounds3:
+ mul $t8 $t2 4
+ addu $t8 $t8 $t6
+ lw $t7 4($t8)
+ slt $t7 $t3 $t7
+ bnez $t7 if3_else
+ li $t5 0
+ j if3_end
+if3_else:
+ li $t5 1
+if3_end:
+ j while3_top
+while3_end:
+ lw $t5 0($s0)
+ bnez $t5 null5
+ la $a0 _str0
+ j _error
+null5:
+ lw $t7 0($t5)
+ sltu $t7 $s2 $t7
+ bnez $t7 bounds4
+ la $a0 _str1
+ j _error
+bounds4:
+ mul $t7 $s2 4
+ addu $t7 $t7 $t5
+ lw $t1 4($t7)
+ lw $t7 0($s0)
+ bnez $t7 null6
+ la $a0 _str0
+ j _error
+null6:
+ lw $t5 0($t7)
+ sltu $t5 $s2 $t5
+ bnez $t5 bounds5
+ la $a0 _str1
+ j _error
+bounds5:
+ mul $t5 $s2 4
+ addu $t5 $t5 $t7
+ lw $t7 0($s0)
+ bnez $t7 null7
+ la $a0 _str0
+ j _error
+null7:
+ lw $t8 0($t7)
+ sltu $t8 $t2 $t8
+ bnez $t8 bounds6
+ la $a0 _str1
+ j _error
+bounds6:
+ mul $t8 $t2 4
+ addu $t8 $t8 $t7
+ lw $t8 4($t8)
+ sw $t8 4($t5)
+ lw $t8 0($s0)
+ bnez $t8 null8
+ la $a0 _str0
+ j _error
+null8:
+ lw $t5 0($t8)
+ sltu $t5 $t2 $t5
+ bnez $t5 bounds7
+ la $a0 _str1
+ j _error
+bounds7:
+ mul $t5 $t2 4
+ addu $t5 $t5 $t8
+ sw $t1 4($t5)
+ addu $t5 $s2 1
+ slt $t5 $t2 $t5
+ beqz $t5 if4_else
+ li $t4 0
+ j if4_end
+if4_else:
+ li $t4 1
+if4_end:
+ j while1_top
+while1_end:
+ lw $t4 0($s0)
+ bnez $t4 null9
+ la $a0 _str0
+ j _error
+null9:
+ lw $t3 0($t4)
+ sltu $t3 $t2 $t3
+ bnez $t3 bounds8
+ la $a0 _str1
+ j _error
+bounds8:
+ mul $t3 $t2 4
+ addu $t3 $t3 $t4
+ lw $t4 0($s0)
+ bnez $t4 null10
+ la $a0 _str0
+ j _error
+null10:
+ lw $t2 0($t4)
+ sltu $t2 $s2 $t2
+ bnez $t2 bounds9
+ la $a0 _str1
+ j _error
+bounds9:
+ mul $t2 $s2 4
+ addu $t2 $t2 $t4
+ lw $t2 4($t2)
+ sw $t2 4($t3)
+ lw $t2 0($s0)
+ bnez $t2 null11
+ la $a0 _str0
+ j _error
+null11:
+ lw $t3 0($t2)
+ sltu $t3 $s2 $t3
+ bnez $t3 bounds10
+ la $a0 _str1
+ j _error
+bounds10:
+ mul $t3 $s2 4
+ addu $t3 $t3 $t2
+ lw $t2 0($s0)
+ bnez $t2 null12
+ la $a0 _str0
+ j _error
+null12:
+ lw $t4 0($t2)
+ sltu $t4 $s1 $t4
+ bnez $t4 bounds11
+ la $a0 _str1
+ j _error
+bounds11:
+ mul $t4 $s1 4
+ addu $t4 $t4 $t2
+ lw $t4 4($t4)
+ sw $t4 4($t3)
+ lw $t4 0($s0)
+ bnez $t4 null13
+ la $a0 _str0
+ j _error
+null13:
+ lw $t3 0($t4)
+ sltu $t3 $s1 $t3
+ bnez $t3 bounds12
+ la $a0 _str1
+ j _error
+bounds12:
+ mul $t3 $s1 4
+ addu $t3 $t3 $t4
+ sw $t1 4($t3)
+ subu $t3 $s2 1
+ move $a0 $s0
+ move $a1 $t0
+ move $a2 $t3
+ jal QS.Sort
+ addu $t3 $s2 1
+ move $a0 $s0
+ move $a1 $t3
+ move $a2 $s1
+ jal QS.Sort
+ j if1_end
+if1_else:
+if1_end:
+ li $v0 0
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+QS.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ li $t1 0
+while4_top:
+ lw $t2 4($t0)
+ slt $t2 $t1 $t2
+ beqz $t2 while4_end
+ lw $t2 0($t0)
+ bnez $t2 null14
+ la $a0 _str0
+ j _error
+null14:
+ lw $t3 0($t2)
+ sltu $t3 $t1 $t3
+ bnez $t3 bounds13
+ la $a0 _str1
+ j _error
+bounds13:
+ mul $t3 $t1 4
+ addu $t3 $t3 $t2
+ lw $t3 4($t3)
+ move $a0 $t3
+ jal _print
+ addu $t1 $t1 1
+ j while4_top
+while4_end:
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+QS.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ sw $t0 4($s0)
+ move $a0 $t0
+ jal AllocArray
+ move $t0 $v0
+ sw $t0 0($s0)
+ lw $t0 0($s0)
+ bnez $t0 null15
+ la $a0 _str0
+ j _error
+null15:
+ lw $t1 0($t0)
+ li $t9 0
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds14
+ la $a0 _str1
+ j _error
+bounds14:
+ li $t1 0
+ addu $t1 $t1 $t0
+ li $t9 20
+ sw $t9 4($t1)
+ lw $t1 0($s0)
+ bnez $t1 null16
+ la $a0 _str0
+ j _error
+null16:
+ lw $t0 0($t1)
+ li $t9 1
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds15
+ la $a0 _str1
+ j _error
+bounds15:
+ li $t0 4
+ addu $t0 $t0 $t1
+ li $t9 7
+ sw $t9 4($t0)
+ lw $t0 0($s0)
+ bnez $t0 null17
+ la $a0 _str0
+ j _error
+null17:
+ lw $t1 0($t0)
+ li $t9 2
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds16
+ la $a0 _str1
+ j _error
+bounds16:
+ li $t1 8
+ addu $t1 $t1 $t0
+ li $t9 12
+ sw $t9 4($t1)
+ lw $t1 0($s0)
+ bnez $t1 null18
+ la $a0 _str0
+ j _error
+null18:
+ lw $t0 0($t1)
+ li $t9 3
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds17
+ la $a0 _str1
+ j _error
+bounds17:
+ li $t0 12
+ addu $t0 $t0 $t1
+ li $t9 18
+ sw $t9 4($t0)
+ lw $t0 0($s0)
+ bnez $t0 null19
+ la $a0 _str0
+ j _error
+null19:
+ lw $t1 0($t0)
+ li $t9 4
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds18
+ la $a0 _str1
+ j _error
+bounds18:
+ li $t1 16
+ addu $t1 $t1 $t0
+ li $t9 2
+ sw $t9 4($t1)
+ lw $t1 0($s0)
+ bnez $t1 null20
+ la $a0 _str0
+ j _error
+null20:
+ lw $t0 0($t1)
+ li $t9 5
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds19
+ la $a0 _str1
+ j _error
+bounds19:
+ li $t0 20
+ addu $t0 $t0 $t1
+ li $t9 11
+ sw $t9 4($t0)
+ lw $t0 0($s0)
+ bnez $t0 null21
+ la $a0 _str0
+ j _error
+null21:
+ lw $t1 0($t0)
+ li $t9 6
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds20
+ la $a0 _str1
+ j _error
+bounds20:
+ li $t1 24
+ addu $t1 $t1 $t0
+ li $t9 6
+ sw $t9 4($t1)
+ lw $t1 0($s0)
+ bnez $t1 null22
+ la $a0 _str0
+ j _error
+null22:
+ lw $t0 0($t1)
+ li $t9 7
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds21
+ la $a0 _str1
+ j _error
+bounds21:
+ li $t0 28
+ addu $t0 $t0 $t1
+ li $t9 9
+ sw $t9 4($t0)
+ lw $t0 0($s0)
+ bnez $t0 null23
+ la $a0 _str0
+ j _error
+null23:
+ lw $t1 0($t0)
+ li $t9 8
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds22
+ la $a0 _str1
+ j _error
+bounds22:
+ li $t1 32
+ addu $t1 $t1 $t0
+ li $t9 19
+ sw $t9 4($t1)
+ lw $t1 0($s0)
+ bnez $t1 null24
+ la $a0 _str0
+ j _error
+null24:
+ lw $t0 0($t1)
+ li $t9 9
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds23
+ la $a0 _str1
+ j _error
+bounds23:
+ li $t0 36
+ addu $t0 $t0 $t1
+ li $t9 5
+ sw $t9 4($t0)
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+AllocArray:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ mul $t1 $t0 4
+ addu $t1 $t1 4
+ move $a0 $t1
+ jal _heapAlloc
+ move $t1 $v0
+ sw $t0 0($t1)
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
+_str1: .asciiz "array index out of bounds\n"
diff --git a/base/QuickSort.s b/base/QuickSort.s
new file mode 100644
index 0000000..26dfbcc
--- /dev/null
+++ b/base/QuickSort.s
@@ -0,0 +1,590 @@
+.data
+
+vmt_QS:
+ QS.Start
+ QS.Sort
+ QS.Print
+ QS.Init
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ li $a0 12
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_QS
+ sw $t9 0($t0)
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ lw $t1 0($t0)
+ lw $t1 0($t1)
+ move $a0 $t0
+ li $a1 10
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+QS.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ lw $t1 0($s0)
+ lw $t1 12($t1)
+ move $a0 $s0
+ move $a1 $t0
+ jalr $t1
+ lw $t1 0($s0)
+ lw $t1 8($t1)
+ move $a0 $s0
+ jalr $t1
+ li $a0 9999
+ jal _print
+ lw $t1 8($s0)
+ subu $t1 $t1 1
+ lw $t0 0($s0)
+ lw $t0 4($t0)
+ move $a0 $s0
+ li $a1 0
+ move $a2 $t1
+ jalr $t0
+ lw $t0 0($s0)
+ lw $t0 8($t0)
+ move $a0 $s0
+ jalr $t0
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+QS.Sort:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $t0 $a1
+ move $s1 $a2
+ li $t1 0
+ slt $t2 $t0 $s1
+ beqz $t2 if1_else
+ lw $t2 4($s0)
+ bnez $t2 null2
+ la $a0 _str0
+ j _error
+null2:
+ lw $t3 0($t2)
+ sltu $t3 $s1 $t3
+ bnez $t3 bounds1
+ la $a0 _str1
+ j _error
+bounds1:
+ mul $t3 $s1 4
+ addu $t3 $t3 $t2
+ lw $t3 4($t3)
+ subu $s2 $t0 1
+ move $t2 $s1
+ li $t4 1
+while1_top:
+ beqz $t4 while1_end
+ li $t5 1
+while2_top:
+ beqz $t5 while2_end
+ addu $s2 $s2 1
+ lw $t6 4($s0)
+ bnez $t6 null3
+ la $a0 _str0
+ j _error
+null3:
+ lw $t7 0($t6)
+ sltu $t7 $s2 $t7
+ bnez $t7 bounds2
+ la $a0 _str1
+ j _error
+bounds2:
+ mul $t7 $s2 4
+ addu $t7 $t7 $t6
+ lw $t7 4($t7)
+ slt $t6 $t7 $t3
+ li $t9 1
+ subu $t6 $t9 $t6
+ beqz $t6 if2_else
+ li $t5 0
+ j if2_end
+if2_else:
+ li $t5 1
+if2_end:
+ j while2_top
+while2_end:
+ li $t5 1
+while3_top:
+ beqz $t5 while3_end
+ subu $t2 $t2 1
+ lw $t6 4($s0)
+ bnez $t6 null4
+ la $a0 _str0
+ j _error
+null4:
+ lw $t8 0($t6)
+ sltu $t8 $t2 $t8
+ bnez $t8 bounds3
+ la $a0 _str1
+ j _error
+bounds3:
+ mul $t8 $t2 4
+ addu $t8 $t8 $t6
+ lw $t7 4($t8)
+ slt $t7 $t3 $t7
+ li $t9 1
+ subu $t7 $t9 $t7
+ beqz $t7 if3_else
+ li $t5 0
+ j if3_end
+if3_else:
+ li $t5 1
+if3_end:
+ j while3_top
+while3_end:
+ lw $t5 4($s0)
+ bnez $t5 null5
+ la $a0 _str0
+ j _error
+null5:
+ lw $t7 0($t5)
+ sltu $t7 $s2 $t7
+ bnez $t7 bounds4
+ la $a0 _str1
+ j _error
+bounds4:
+ mul $t7 $s2 4
+ addu $t7 $t7 $t5
+ lw $t1 4($t7)
+ lw $t7 4($s0)
+ bnez $t7 null6
+ la $a0 _str0
+ j _error
+null6:
+ lw $t5 0($t7)
+ sltu $t5 $s2 $t5
+ bnez $t5 bounds5
+ la $a0 _str1
+ j _error
+bounds5:
+ mul $t5 $s2 4
+ addu $t5 $t5 $t7
+ lw $t7 4($s0)
+ bnez $t7 null7
+ la $a0 _str0
+ j _error
+null7:
+ lw $t8 0($t7)
+ sltu $t8 $t2 $t8
+ bnez $t8 bounds6
+ la $a0 _str1
+ j _error
+bounds6:
+ mul $t8 $t2 4
+ addu $t8 $t8 $t7
+ lw $t8 4($t8)
+ sw $t8 4($t5)
+ lw $t8 4($s0)
+ bnez $t8 null8
+ la $a0 _str0
+ j _error
+null8:
+ lw $t5 0($t8)
+ sltu $t5 $t2 $t5
+ bnez $t5 bounds7
+ la $a0 _str1
+ j _error
+bounds7:
+ mul $t5 $t2 4
+ addu $t5 $t5 $t8
+ sw $t1 4($t5)
+ addu $t5 $s2 1
+ slt $t5 $t2 $t5
+ beqz $t5 if4_else
+ li $t4 0
+ j if4_end
+if4_else:
+ li $t4 1
+if4_end:
+ j while1_top
+while1_end:
+ lw $t4 4($s0)
+ bnez $t4 null9
+ la $a0 _str0
+ j _error
+null9:
+ lw $t3 0($t4)
+ sltu $t3 $t2 $t3
+ bnez $t3 bounds8
+ la $a0 _str1
+ j _error
+bounds8:
+ mul $t3 $t2 4
+ addu $t3 $t3 $t4
+ lw $t4 4($s0)
+ bnez $t4 null10
+ la $a0 _str0
+ j _error
+null10:
+ lw $t2 0($t4)
+ sltu $t2 $s2 $t2
+ bnez $t2 bounds9
+ la $a0 _str1
+ j _error
+bounds9:
+ mul $t2 $s2 4
+ addu $t2 $t2 $t4
+ lw $t2 4($t2)
+ sw $t2 4($t3)
+ lw $t2 4($s0)
+ bnez $t2 null11
+ la $a0 _str0
+ j _error
+null11:
+ lw $t3 0($t2)
+ sltu $t3 $s2 $t3
+ bnez $t3 bounds10
+ la $a0 _str1
+ j _error
+bounds10:
+ mul $t3 $s2 4
+ addu $t3 $t3 $t2
+ lw $t2 4($s0)
+ bnez $t2 null12
+ la $a0 _str0
+ j _error
+null12:
+ lw $t4 0($t2)
+ sltu $t4 $s1 $t4
+ bnez $t4 bounds11
+ la $a0 _str1
+ j _error
+bounds11:
+ mul $t4 $s1 4
+ addu $t4 $t4 $t2
+ lw $t4 4($t4)
+ sw $t4 4($t3)
+ lw $t4 4($s0)
+ bnez $t4 null13
+ la $a0 _str0
+ j _error
+null13:
+ lw $t3 0($t4)
+ sltu $t3 $s1 $t3
+ bnez $t3 bounds12
+ la $a0 _str1
+ j _error
+bounds12:
+ mul $t3 $s1 4
+ addu $t3 $t3 $t4
+ sw $t1 4($t3)
+ lw $t3 0($s0)
+ lw $t3 4($t3)
+ subu $t1 $s2 1
+ move $a0 $s0
+ move $a1 $t0
+ move $a2 $t1
+ jalr $t3
+ lw $t1 0($s0)
+ lw $t1 4($t1)
+ addu $t3 $s2 1
+ move $a0 $s0
+ move $a1 $t3
+ move $a2 $s1
+ jalr $t1
+ j if1_end
+if1_else:
+if1_end:
+ li $v0 0
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+QS.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ li $t1 0
+while4_top:
+ lw $t2 8($t0)
+ slt $t2 $t1 $t2
+ beqz $t2 while4_end
+ lw $t2 4($t0)
+ bnez $t2 null14
+ la $a0 _str0
+ j _error
+null14:
+ lw $t3 0($t2)
+ sltu $t3 $t1 $t3
+ bnez $t3 bounds13
+ la $a0 _str1
+ j _error
+bounds13:
+ mul $t3 $t1 4
+ addu $t3 $t3 $t2
+ lw $t3 4($t3)
+ move $a0 $t3
+ jal _print
+ addu $t1 $t1 1
+ j while4_top
+while4_end:
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+QS.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ move $s0 $a0
+ move $t0 $a1
+ sw $t0 8($s0)
+ move $a0 $t0
+ jal AllocArray
+ move $t0 $v0
+ sw $t0 4($s0)
+ lw $t0 4($s0)
+ bnez $t0 null15
+ la $a0 _str0
+ j _error
+null15:
+ lw $t1 0($t0)
+ li $t9 0
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds14
+ la $a0 _str1
+ j _error
+bounds14:
+ li $t1 0
+ addu $t1 $t1 $t0
+ li $t9 20
+ sw $t9 4($t1)
+ lw $t1 4($s0)
+ bnez $t1 null16
+ la $a0 _str0
+ j _error
+null16:
+ lw $t0 0($t1)
+ li $t9 1
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds15
+ la $a0 _str1
+ j _error
+bounds15:
+ li $t0 4
+ addu $t0 $t0 $t1
+ li $t9 7
+ sw $t9 4($t0)
+ lw $t0 4($s0)
+ bnez $t0 null17
+ la $a0 _str0
+ j _error
+null17:
+ lw $t1 0($t0)
+ li $t9 2
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds16
+ la $a0 _str1
+ j _error
+bounds16:
+ li $t1 8
+ addu $t1 $t1 $t0
+ li $t9 12
+ sw $t9 4($t1)
+ lw $t1 4($s0)
+ bnez $t1 null18
+ la $a0 _str0
+ j _error
+null18:
+ lw $t0 0($t1)
+ li $t9 3
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds17
+ la $a0 _str1
+ j _error
+bounds17:
+ li $t0 12
+ addu $t0 $t0 $t1
+ li $t9 18
+ sw $t9 4($t0)
+ lw $t0 4($s0)
+ bnez $t0 null19
+ la $a0 _str0
+ j _error
+null19:
+ lw $t1 0($t0)
+ li $t9 4
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds18
+ la $a0 _str1
+ j _error
+bounds18:
+ li $t1 16
+ addu $t1 $t1 $t0
+ li $t9 2
+ sw $t9 4($t1)
+ lw $t1 4($s0)
+ bnez $t1 null20
+ la $a0 _str0
+ j _error
+null20:
+ lw $t0 0($t1)
+ li $t9 5
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds19
+ la $a0 _str1
+ j _error
+bounds19:
+ li $t0 20
+ addu $t0 $t0 $t1
+ li $t9 11
+ sw $t9 4($t0)
+ lw $t0 4($s0)
+ bnez $t0 null21
+ la $a0 _str0
+ j _error
+null21:
+ lw $t1 0($t0)
+ li $t9 6
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds20
+ la $a0 _str1
+ j _error
+bounds20:
+ li $t1 24
+ addu $t1 $t1 $t0
+ li $t9 6
+ sw $t9 4($t1)
+ lw $t1 4($s0)
+ bnez $t1 null22
+ la $a0 _str0
+ j _error
+null22:
+ lw $t0 0($t1)
+ li $t9 7
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds21
+ la $a0 _str1
+ j _error
+bounds21:
+ li $t0 28
+ addu $t0 $t0 $t1
+ li $t9 9
+ sw $t9 4($t0)
+ lw $t0 4($s0)
+ bnez $t0 null23
+ la $a0 _str0
+ j _error
+null23:
+ lw $t1 0($t0)
+ li $t9 8
+ sltu $t1 $t9 $t1
+ bnez $t1 bounds22
+ la $a0 _str1
+ j _error
+bounds22:
+ li $t1 32
+ addu $t1 $t1 $t0
+ li $t9 19
+ sw $t9 4($t1)
+ lw $t1 4($s0)
+ bnez $t1 null24
+ la $a0 _str0
+ j _error
+null24:
+ lw $t0 0($t1)
+ li $t9 9
+ sltu $t0 $t9 $t0
+ bnez $t0 bounds23
+ la $a0 _str1
+ j _error
+bounds23:
+ li $t0 36
+ addu $t0 $t0 $t1
+ li $t9 5
+ sw $t9 4($t0)
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+AllocArray:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ mul $t1 $t0 4
+ addu $t1 $t1 4
+ move $a0 $t1
+ jal _heapAlloc
+ move $t1 $v0
+ sw $t0 0($t1)
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
+_str1: .asciiz "array index out of bounds\n"
diff --git a/base/TreeVisitor.opt.s b/base/TreeVisitor.opt.s
new file mode 100644
index 0000000..df5024b
--- /dev/null
+++ b/base/TreeVisitor.opt.s
@@ -0,0 +1,1258 @@
+.data
+
+empty_TV:
+
+empty_Tree:
+
+vmt_Visitor:
+ Visitor.visit
+
+vmt_MyVisitor:
+ MyVisitor.visit
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ la $a0 empty_TV
+ jal TV.Start
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+TV.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ li $a0 24
+ jal _heapAlloc
+ move $s0 $v0
+ bnez $s0 null1
+ la $a0 _str0
+ j _error
+null1:
+ move $a0 $s0
+ li $a1 16
+ jal Tree.Init
+ bnez $s0 null2
+ la $a0 _str0
+ j _error
+null2:
+ move $a0 $s0
+ jal Tree.Print
+ li $a0 100000000
+ jal _print
+ bnez $s0 null3
+ la $a0 _str0
+ j _error
+null3:
+ move $a0 $s0
+ li $a1 8
+ jal Tree.Insert
+ bnez $s0 null4
+ la $a0 _str0
+ j _error
+null4:
+ move $a0 $s0
+ li $a1 24
+ jal Tree.Insert
+ bnez $s0 null5
+ la $a0 _str0
+ j _error
+null5:
+ move $a0 $s0
+ li $a1 4
+ jal Tree.Insert
+ bnez $s0 null6
+ la $a0 _str0
+ j _error
+null6:
+ move $a0 $s0
+ li $a1 12
+ jal Tree.Insert
+ bnez $s0 null7
+ la $a0 _str0
+ j _error
+null7:
+ move $a0 $s0
+ li $a1 20
+ jal Tree.Insert
+ bnez $s0 null8
+ la $a0 _str0
+ j _error
+null8:
+ move $a0 $s0
+ li $a1 28
+ jal Tree.Insert
+ bnez $s0 null9
+ la $a0 _str0
+ j _error
+null9:
+ move $a0 $s0
+ li $a1 14
+ jal Tree.Insert
+ bnez $s0 null10
+ la $a0 _str0
+ j _error
+null10:
+ move $a0 $s0
+ jal Tree.Print
+ li $a0 100000000
+ jal _print
+ li $a0 12
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_MyVisitor
+ sw $t9 0($t0)
+ move $t0 $t0
+ li $a0 50000000
+ jal _print
+ bnez $s0 null11
+ la $a0 _str0
+ j _error
+null11:
+ move $a0 $s0
+ move $a1 $t0
+ jal Tree.accept
+ li $a0 100000000
+ jal _print
+ bnez $s0 null12
+ la $a0 _str0
+ j _error
+null12:
+ move $a0 $s0
+ li $a1 24
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null13
+ la $a0 _str0
+ j _error
+null13:
+ move $a0 $s0
+ li $a1 12
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null14
+ la $a0 _str0
+ j _error
+null14:
+ move $a0 $s0
+ li $a1 16
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null15
+ la $a0 _str0
+ j _error
+null15:
+ move $a0 $s0
+ li $a1 50
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null16
+ la $a0 _str0
+ j _error
+null16:
+ move $a0 $s0
+ li $a1 12
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s0 null17
+ la $a0 _str0
+ j _error
+null17:
+ move $a0 $s0
+ li $a1 12
+ jal Tree.Delete
+ bnez $s0 null18
+ la $a0 _str0
+ j _error
+null18:
+ move $a0 $s0
+ jal Tree.Print
+ bnez $s0 null19
+ la $a0 _str0
+ j _error
+null19:
+ move $a0 $s0
+ li $a1 12
+ jal Tree.Search
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+Tree.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 8($t0)
+ sw $0 12($t0)
+ sw $0 16($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 4($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 0($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 4($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 0($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetKey:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 8($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetKey:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 8($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetHas_Right:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 16($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetHas_Left:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 12($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetHas_Left:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 12($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetHas_Right:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 16($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.Compare:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a1
+ move $t1 $a2
+ addu $t2 $t1 1
+ slt $t1 $t0 $t1
+ beqz $t1 if1_else
+ li $t1 0
+ j if1_end
+if1_else:
+ slt $t2 $t0 $t2
+ bnez $t2 if2_else
+ li $t1 0
+ j if2_end
+if2_else:
+ li $t1 1
+if2_end:
+if1_end:
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.Insert:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $s0 $a0
+ move $s1 $a1
+ li $a0 24
+ jal _heapAlloc
+ move $s2 $v0
+ bnez $s2 null20
+ la $a0 _str0
+ j _error
+null20:
+ move $a0 $s2
+ move $a1 $s1
+ jal Tree.Init
+ move $s0 $s0
+ li $s3 1
+while1_top:
+ beqz $s3 while1_end
+ bnez $s0 null21
+ la $a0 _str0
+ j _error
+null21:
+ move $a0 $s0
+ jal Tree.GetKey
+ move $t0 $v0
+ slt $t0 $s1 $t0
+ beqz $t0 if3_else
+ bnez $s0 null22
+ la $a0 _str0
+ j _error
+null22:
+ move $a0 $s0
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ beqz $t0 if4_else
+ bnez $s0 null23
+ la $a0 _str0
+ j _error
+null23:
+ move $a0 $s0
+ jal Tree.GetLeft
+ move $s0 $v0
+ j if4_end
+if4_else:
+ li $s3 0
+ bnez $s0 null24
+ la $a0 _str0
+ j _error
+null24:
+ move $a0 $s0
+ li $a1 1
+ jal Tree.SetHas_Left
+ bnez $s0 null25
+ la $a0 _str0
+ j _error
+null25:
+ move $a0 $s0
+ move $a1 $s2
+ jal Tree.SetLeft
+if4_end:
+ j if3_end
+if3_else:
+ bnez $s0 null26
+ la $a0 _str0
+ j _error
+null26:
+ move $a0 $s0
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if5_else
+ bnez $s0 null27
+ la $a0 _str0
+ j _error
+null27:
+ move $a0 $s0
+ jal Tree.GetRight
+ move $s0 $v0
+ j if5_end
+if5_else:
+ li $s3 0
+ bnez $s0 null28
+ la $a0 _str0
+ j _error
+null28:
+ move $a0 $s0
+ li $a1 1
+ jal Tree.SetHas_Right
+ bnez $s0 null29
+ la $a0 _str0
+ j _error
+null29:
+ move $a0 $s0
+ move $a1 $s2
+ jal Tree.SetRight
+if5_end:
+if3_end:
+ j while1_top
+while1_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.Delete:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 36
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ sw $s4 16($sp)
+ sw $s5 20($sp)
+ sw $s6 24($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $s0
+ move $s3 $s0
+ li $s4 1
+ li $s5 0
+ li $s6 1
+while2_top:
+ beqz $s4 while2_end
+ bnez $s2 null30
+ la $a0 _str0
+ j _error
+null30:
+ move $a0 $s2
+ jal Tree.GetKey
+ move $t0 $v0
+ slt $t1 $s1 $t0
+ beqz $t1 if6_else
+ bnez $s2 null31
+ la $a0 _str0
+ j _error
+null31:
+ move $a0 $s2
+ jal Tree.GetHas_Left
+ move $t1 $v0
+ beqz $t1 if7_else
+ move $s3 $s2
+ bnez $s2 null32
+ la $a0 _str0
+ j _error
+null32:
+ move $a0 $s2
+ jal Tree.GetLeft
+ move $s2 $v0
+ j if7_end
+if7_else:
+ li $s4 0
+if7_end:
+ j if6_end
+if6_else:
+ slt $t0 $t0 $s1
+ beqz $t0 if8_else
+ bnez $s2 null33
+ la $a0 _str0
+ j _error
+null33:
+ move $a0 $s2
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if9_else
+ move $s3 $s2
+ bnez $s2 null34
+ la $a0 _str0
+ j _error
+null34:
+ move $a0 $s2
+ jal Tree.GetRight
+ move $s2 $v0
+ j if9_end
+if9_else:
+ li $s4 0
+if9_end:
+ j if8_end
+if8_else:
+ beqz $s6 if10_else
+ bnez $s2 null35
+ la $a0 _str0
+ j _error
+null35:
+ move $a0 $s2
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ bnez $t0 if11_else
+ bnez $s2 null36
+ la $a0 _str0
+ j _error
+null36:
+ move $a0 $s2
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ bnez $t0 if11_else
+ j if11_end
+if11_else:
+ move $a0 $s0
+ move $a1 $s3
+ move $a2 $s2
+ jal Tree.Remove
+if11_end:
+ j if10_end
+if10_else:
+ move $a0 $s0
+ move $a1 $s3
+ move $a2 $s2
+ jal Tree.Remove
+if10_end:
+ li $s5 1
+ li $s4 0
+if8_end:
+if6_end:
+ li $s6 0
+ j while2_top
+while2_end:
+ move $v0 $s5
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $s4 16($sp)
+ lw $s5 20($sp)
+ lw $s6 24($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 36
+ jr $ra
+
+Tree.Remove:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+ bnez $s2 null37
+ la $a0 _str0
+ j _error
+null37:
+ move $a0 $s2
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ beqz $t0 if12_else
+ move $a0 $s0
+ move $a1 $s1
+ move $a2 $s2
+ jal Tree.RemoveLeft
+ j if12_end
+if12_else:
+ bnez $s2 null38
+ la $a0 _str0
+ j _error
+null38:
+ move $a0 $s2
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if13_else
+ move $a0 $s0
+ move $a1 $s1
+ move $a2 $s2
+ jal Tree.RemoveRight
+ j if13_end
+if13_else:
+ bnez $s2 null39
+ la $a0 _str0
+ j _error
+null39:
+ move $a0 $s2
+ jal Tree.GetKey
+ move $s2 $v0
+ bnez $s1 null40
+ la $a0 _str0
+ j _error
+null40:
+ move $a0 $s1
+ jal Tree.GetLeft
+ move $t0 $v0
+ bnez $t0 null41
+ la $a0 _str0
+ j _error
+null41:
+ move $a0 $t0
+ jal Tree.GetKey
+ move $t0 $v0
+ move $a0 $s0
+ move $a1 $s2
+ move $a2 $t0
+ jal Tree.Compare
+ move $t0 $v0
+ beqz $t0 if14_else
+ bnez $s1 null42
+ la $a0 _str0
+ j _error
+null42:
+ lw $t0 20($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jal Tree.SetLeft
+ bnez $s1 null43
+ la $a0 _str0
+ j _error
+null43:
+ move $a0 $s1
+ li $a1 0
+ jal Tree.SetHas_Left
+ j if14_end
+if14_else:
+ bnez $s1 null44
+ la $a0 _str0
+ j _error
+null44:
+ lw $t0 20($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jal Tree.SetRight
+ bnez $s1 null45
+ la $a0 _str0
+ j _error
+null45:
+ move $a0 $s1
+ li $a1 0
+ jal Tree.SetHas_Right
+if14_end:
+if13_end:
+if12_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Tree.RemoveRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+while3_top:
+ bnez $s2 null46
+ la $a0 _str0
+ j _error
+null46:
+ move $a0 $s2
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 while3_end
+ bnez $s2 null47
+ la $a0 _str0
+ j _error
+null47:
+ bnez $s2 null48
+ la $a0 _str0
+ j _error
+null48:
+ move $a0 $s2
+ jal Tree.GetRight
+ move $t0 $v0
+ bnez $t0 null49
+ la $a0 _str0
+ j _error
+null49:
+ move $a0 $t0
+ jal Tree.GetKey
+ move $t0 $v0
+ move $a0 $s2
+ move $a1 $t0
+ jal Tree.SetKey
+ move $s1 $s2
+ bnez $s2 null50
+ la $a0 _str0
+ j _error
+null50:
+ move $a0 $s2
+ jal Tree.GetRight
+ move $s2 $v0
+ j while3_top
+while3_end:
+ bnez $s1 null51
+ la $a0 _str0
+ j _error
+null51:
+ lw $t0 20($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jal Tree.SetRight
+ bnez $s1 null52
+ la $a0 _str0
+ j _error
+null52:
+ move $a0 $s1
+ li $a1 0
+ jal Tree.SetHas_Right
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Tree.RemoveLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+while4_top:
+ bnez $s2 null53
+ la $a0 _str0
+ j _error
+null53:
+ move $a0 $s2
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ beqz $t0 while4_end
+ bnez $s2 null54
+ la $a0 _str0
+ j _error
+null54:
+ bnez $s2 null55
+ la $a0 _str0
+ j _error
+null55:
+ move $a0 $s2
+ jal Tree.GetLeft
+ move $t0 $v0
+ bnez $t0 null56
+ la $a0 _str0
+ j _error
+null56:
+ move $a0 $t0
+ jal Tree.GetKey
+ move $t0 $v0
+ move $a0 $s2
+ move $a1 $t0
+ jal Tree.SetKey
+ move $s1 $s2
+ bnez $s2 null57
+ la $a0 _str0
+ j _error
+null57:
+ move $a0 $s2
+ jal Tree.GetLeft
+ move $s2 $v0
+ j while4_top
+while4_end:
+ bnez $s1 null58
+ la $a0 _str0
+ j _error
+null58:
+ lw $t0 20($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jal Tree.SetLeft
+ bnez $s1 null59
+ la $a0 _str0
+ j _error
+null59:
+ move $a0 $s1
+ li $a1 0
+ jal Tree.SetHas_Left
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Tree.Search:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $t0 $a0
+ move $s0 $a1
+ move $s1 $t0
+ li $s2 1
+ li $s3 0
+while5_top:
+ beqz $s2 while5_end
+ bnez $s1 null60
+ la $a0 _str0
+ j _error
+null60:
+ move $a0 $s1
+ jal Tree.GetKey
+ move $t0 $v0
+ slt $t1 $s0 $t0
+ beqz $t1 if15_else
+ bnez $s1 null61
+ la $a0 _str0
+ j _error
+null61:
+ move $a0 $s1
+ jal Tree.GetHas_Left
+ move $t1 $v0
+ beqz $t1 if16_else
+ bnez $s1 null62
+ la $a0 _str0
+ j _error
+null62:
+ move $a0 $s1
+ jal Tree.GetLeft
+ move $s1 $v0
+ j if16_end
+if16_else:
+ li $s2 0
+if16_end:
+ j if15_end
+if15_else:
+ slt $t0 $t0 $s0
+ beqz $t0 if17_else
+ bnez $s1 null63
+ la $a0 _str0
+ j _error
+null63:
+ move $a0 $s1
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if18_else
+ bnez $s1 null64
+ la $a0 _str0
+ j _error
+null64:
+ move $a0 $s1
+ jal Tree.GetRight
+ move $s1 $v0
+ j if18_end
+if18_else:
+ li $s2 0
+if18_end:
+ j if17_end
+if17_else:
+ li $s3 1
+ li $s2 0
+if17_end:
+if15_end:
+ j while5_top
+while5_end:
+ move $v0 $s3
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $t0
+ move $a0 $t0
+ move $a1 $t1
+ jal Tree.RecPrint
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.RecPrint:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 16
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ move $s0 $a0
+ move $s1 $a1
+ bnez $s1 null65
+ la $a0 _str0
+ j _error
+null65:
+ move $a0 $s1
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ beqz $t0 if19_else
+ bnez $s1 null66
+ la $a0 _str0
+ j _error
+null66:
+ move $a0 $s1
+ jal Tree.GetLeft
+ move $t0 $v0
+ move $a0 $s0
+ move $a1 $t0
+ jal Tree.RecPrint
+ j if19_end
+if19_else:
+if19_end:
+ bnez $s1 null67
+ la $a0 _str0
+ j _error
+null67:
+ move $a0 $s1
+ jal Tree.GetKey
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s1 null68
+ la $a0 _str0
+ j _error
+null68:
+ move $a0 $s1
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if20_else
+ bnez $s1 null69
+ la $a0 _str0
+ j _error
+null69:
+ move $a0 $s1
+ jal Tree.GetRight
+ move $t0 $v0
+ move $a0 $s0
+ move $a1 $t0
+ jal Tree.RecPrint
+ j if20_end
+if20_else:
+if20_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 16
+ jr $ra
+
+Tree.accept:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ li $a0 333
+ jal _print
+ bnez $t1 null70
+ la $a0 _str0
+ j _error
+null70:
+ lw $t2 0($t1)
+ lw $t2 0($t2)
+ move $a0 $t1
+ move $a1 $t0
+ jalr $t2
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Visitor.visit:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 16
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ move $s0 $a0
+ move $s1 $a1
+ bnez $s1 null71
+ la $a0 _str0
+ j _error
+null71:
+ move $a0 $s1
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if21_else
+ bnez $s1 null72
+ la $a0 _str0
+ j _error
+null72:
+ move $a0 $s1
+ jal Tree.GetRight
+ move $t0 $v0
+ sw $t0 8($s0)
+ lw $t0 8($s0)
+ bnez $t0 null73
+ la $a0 _str0
+ j _error
+null73:
+ move $a0 $t0
+ move $a1 $s0
+ jal Tree.accept
+ j if21_end
+if21_else:
+if21_end:
+ bnez $s1 null74
+ la $a0 _str0
+ j _error
+null74:
+ move $a0 $s1
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ beqz $t0 if22_else
+ bnez $s1 null75
+ la $a0 _str0
+ j _error
+null75:
+ move $a0 $s1
+ jal Tree.GetLeft
+ move $t0 $v0
+ sw $t0 4($s0)
+ lw $t0 4($s0)
+ bnez $t0 null76
+ la $a0 _str0
+ j _error
+null76:
+ move $a0 $t0
+ move $a1 $s0
+ jal Tree.accept
+ j if22_end
+if22_else:
+if22_end:
+ li $v0 0
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 16
+ jr $ra
+
+MyVisitor.visit:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 16
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ move $s0 $a0
+ move $s1 $a1
+ bnez $s1 null77
+ la $a0 _str0
+ j _error
+null77:
+ move $a0 $s1
+ jal Tree.GetHas_Right
+ move $t0 $v0
+ beqz $t0 if23_else
+ bnez $s1 null78
+ la $a0 _str0
+ j _error
+null78:
+ move $a0 $s1
+ jal Tree.GetRight
+ move $t0 $v0
+ sw $t0 8($s0)
+ lw $t0 8($s0)
+ bnez $t0 null79
+ la $a0 _str0
+ j _error
+null79:
+ move $a0 $t0
+ move $a1 $s0
+ jal Tree.accept
+ j if23_end
+if23_else:
+if23_end:
+ bnez $s1 null80
+ la $a0 _str0
+ j _error
+null80:
+ move $a0 $s1
+ jal Tree.GetKey
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s1 null81
+ la $a0 _str0
+ j _error
+null81:
+ move $a0 $s1
+ jal Tree.GetHas_Left
+ move $t0 $v0
+ beqz $t0 if24_else
+ bnez $s1 null82
+ la $a0 _str0
+ j _error
+null82:
+ move $a0 $s1
+ jal Tree.GetLeft
+ move $t0 $v0
+ sw $t0 4($s0)
+ lw $t0 4($s0)
+ bnez $t0 null83
+ la $a0 _str0
+ j _error
+null83:
+ move $a0 $t0
+ move $a1 $s0
+ jal Tree.accept
+ j if24_end
+if24_else:
+if24_end:
+ li $v0 0
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 16
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"
diff --git a/base/TreeVisitor.s b/base/TreeVisitor.s
new file mode 100644
index 0000000..9ef1916
--- /dev/null
+++ b/base/TreeVisitor.s
@@ -0,0 +1,1493 @@
+.data
+
+vmt_TV:
+ TV.Start
+
+vmt_Tree:
+ Tree.Init
+ Tree.SetRight
+ Tree.SetLeft
+ Tree.GetRight
+ Tree.GetLeft
+ Tree.GetKey
+ Tree.SetKey
+ Tree.GetHas_Right
+ Tree.GetHas_Left
+ Tree.SetHas_Left
+ Tree.SetHas_Right
+ Tree.Compare
+ Tree.Insert
+ Tree.Delete
+ Tree.Remove
+ Tree.RemoveRight
+ Tree.RemoveLeft
+ Tree.Search
+ Tree.Print
+ Tree.RecPrint
+ Tree.accept
+
+vmt_Visitor:
+ Visitor.visit
+
+vmt_MyVisitor:
+ MyVisitor.visit
+
+.text
+
+ jal Main
+ li $v0 10
+ syscall
+
+Main:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ li $a0 4
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_TV
+ sw $t9 0($t0)
+ bnez $t0 null1
+ la $a0 _str0
+ j _error
+null1:
+ lw $t1 0($t0)
+ lw $t1 0($t1)
+ move $a0 $t0
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+TV.Start:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 12
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ li $a0 28
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_Tree
+ sw $t9 0($t0)
+ move $s0 $t0
+ bnez $s0 null2
+ la $a0 _str0
+ j _error
+null2:
+ lw $t0 0($s0)
+ lw $t0 0($t0)
+ move $a0 $s0
+ li $a1 16
+ jalr $t0
+ bnez $s0 null3
+ la $a0 _str0
+ j _error
+null3:
+ lw $t0 0($s0)
+ lw $t0 72($t0)
+ move $a0 $s0
+ jalr $t0
+ li $a0 100000000
+ jal _print
+ bnez $s0 null4
+ la $a0 _str0
+ j _error
+null4:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 8
+ jalr $t0
+ bnez $s0 null5
+ la $a0 _str0
+ j _error
+null5:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 24
+ jalr $t0
+ bnez $s0 null6
+ la $a0 _str0
+ j _error
+null6:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 4
+ jalr $t0
+ bnez $s0 null7
+ la $a0 _str0
+ j _error
+null7:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 12
+ jalr $t0
+ bnez $s0 null8
+ la $a0 _str0
+ j _error
+null8:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 20
+ jalr $t0
+ bnez $s0 null9
+ la $a0 _str0
+ j _error
+null9:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 28
+ jalr $t0
+ bnez $s0 null10
+ la $a0 _str0
+ j _error
+null10:
+ lw $t0 0($s0)
+ lw $t0 48($t0)
+ move $a0 $s0
+ li $a1 14
+ jalr $t0
+ bnez $s0 null11
+ la $a0 _str0
+ j _error
+null11:
+ lw $t0 0($s0)
+ lw $t0 72($t0)
+ move $a0 $s0
+ jalr $t0
+ li $a0 100000000
+ jal _print
+ li $a0 12
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_MyVisitor
+ sw $t9 0($t0)
+ move $t0 $t0
+ li $a0 50000000
+ jal _print
+ bnez $s0 null12
+ la $a0 _str0
+ j _error
+null12:
+ lw $t1 0($s0)
+ lw $t1 80($t1)
+ move $a0 $s0
+ move $a1 $t0
+ jalr $t1
+ li $a0 100000000
+ jal _print
+ bnez $s0 null13
+ la $a0 _str0
+ j _error
+null13:
+ lw $t1 0($s0)
+ lw $t1 68($t1)
+ move $a0 $s0
+ li $a1 24
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ bnez $s0 null14
+ la $a0 _str0
+ j _error
+null14:
+ lw $t1 0($s0)
+ lw $t1 68($t1)
+ move $a0 $s0
+ li $a1 12
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ bnez $s0 null15
+ la $a0 _str0
+ j _error
+null15:
+ lw $t1 0($s0)
+ lw $t1 68($t1)
+ move $a0 $s0
+ li $a1 16
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ bnez $s0 null16
+ la $a0 _str0
+ j _error
+null16:
+ lw $t1 0($s0)
+ lw $t1 68($t1)
+ move $a0 $s0
+ li $a1 50
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ bnez $s0 null17
+ la $a0 _str0
+ j _error
+null17:
+ lw $t1 0($s0)
+ lw $t1 68($t1)
+ move $a0 $s0
+ li $a1 12
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ bnez $s0 null18
+ la $a0 _str0
+ j _error
+null18:
+ lw $t1 0($s0)
+ lw $t1 52($t1)
+ move $a0 $s0
+ li $a1 12
+ jalr $t1
+ bnez $s0 null19
+ la $a0 _str0
+ j _error
+null19:
+ lw $t1 0($s0)
+ lw $t1 72($t1)
+ move $a0 $s0
+ jalr $t1
+ bnez $s0 null20
+ la $a0 _str0
+ j _error
+null20:
+ lw $t1 0($s0)
+ lw $t1 68($t1)
+ move $a0 $s0
+ li $a1 12
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ li $v0 0
+ lw $s0 0($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 12
+ jr $ra
+
+Tree.Init:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 12($t0)
+ sw $0 16($t0)
+ sw $0 20($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 8($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 4($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 8($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 4($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetKey:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 12($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetKey:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 12($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetHas_Right:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 20($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.GetHas_Left:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ lw $t0 16($t0)
+ move $v0 $t0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetHas_Left:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 16($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.SetHas_Right:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ sw $t1 20($t0)
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.Compare:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a1
+ move $t1 $a2
+ addu $t2 $t1 1
+ slt $t1 $t0 $t1
+ beqz $t1 if1_else
+ li $t1 0
+ j if1_end
+if1_else:
+ slt $t2 $t0 $t2
+ li $t9 1
+ subu $t2 $t9 $t2
+ beqz $t2 if2_else
+ li $t1 0
+ j if2_end
+if2_else:
+ li $t1 1
+if2_end:
+if1_end:
+ move $v0 $t1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.Insert:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $s0 $a0
+ move $s1 $a1
+ li $a0 28
+ jal _heapAlloc
+ move $t0 $v0
+ la $t9 vmt_Tree
+ sw $t9 0($t0)
+ move $s2 $t0
+ bnez $s2 null21
+ la $a0 _str0
+ j _error
+null21:
+ lw $t0 0($s2)
+ lw $t0 0($t0)
+ move $a0 $s2
+ move $a1 $s1
+ jalr $t0
+ move $s0 $s0
+ li $s3 1
+while1_top:
+ beqz $s3 while1_end
+ bnez $s0 null22
+ la $a0 _str0
+ j _error
+null22:
+ lw $t0 0($s0)
+ lw $t0 20($t0)
+ move $a0 $s0
+ jalr $t0
+ move $t0 $v0
+ slt $t0 $s1 $t0
+ beqz $t0 if3_else
+ bnez $s0 null23
+ la $a0 _str0
+ j _error
+null23:
+ lw $t0 0($s0)
+ lw $t0 32($t0)
+ move $a0 $s0
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if4_else
+ bnez $s0 null24
+ la $a0 _str0
+ j _error
+null24:
+ lw $t0 0($s0)
+ lw $t0 16($t0)
+ move $a0 $s0
+ jalr $t0
+ move $s0 $v0
+ j if4_end
+if4_else:
+ li $s3 0
+ bnez $s0 null25
+ la $a0 _str0
+ j _error
+null25:
+ lw $t0 0($s0)
+ lw $t0 36($t0)
+ move $a0 $s0
+ li $a1 1
+ jalr $t0
+ bnez $s0 null26
+ la $a0 _str0
+ j _error
+null26:
+ lw $t0 0($s0)
+ lw $t0 8($t0)
+ move $a0 $s0
+ move $a1 $s2
+ jalr $t0
+if4_end:
+ j if3_end
+if3_else:
+ bnez $s0 null27
+ la $a0 _str0
+ j _error
+null27:
+ lw $t0 0($s0)
+ lw $t0 28($t0)
+ move $a0 $s0
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if5_else
+ bnez $s0 null28
+ la $a0 _str0
+ j _error
+null28:
+ lw $t0 0($s0)
+ lw $t0 12($t0)
+ move $a0 $s0
+ jalr $t0
+ move $s0 $v0
+ j if5_end
+if5_else:
+ li $s3 0
+ bnez $s0 null29
+ la $a0 _str0
+ j _error
+null29:
+ lw $t0 0($s0)
+ lw $t0 40($t0)
+ move $a0 $s0
+ li $a1 1
+ jalr $t0
+ bnez $s0 null30
+ la $a0 _str0
+ j _error
+null30:
+ lw $t0 0($s0)
+ lw $t0 4($t0)
+ move $a0 $s0
+ move $a1 $s2
+ jalr $t0
+if5_end:
+if3_end:
+ j while1_top
+while1_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.Delete:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 36
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ sw $s4 16($sp)
+ sw $s5 20($sp)
+ sw $s6 24($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $s0
+ move $s3 $s0
+ li $s4 1
+ li $s5 0
+ li $s6 1
+while2_top:
+ beqz $s4 while2_end
+ bnez $s2 null31
+ la $a0 _str0
+ j _error
+null31:
+ lw $t0 0($s2)
+ lw $t0 20($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ slt $t1 $s1 $t0
+ beqz $t1 if6_else
+ bnez $s2 null32
+ la $a0 _str0
+ j _error
+null32:
+ lw $t1 0($s2)
+ lw $t1 32($t1)
+ move $a0 $s2
+ jalr $t1
+ move $t1 $v0
+ beqz $t1 if7_else
+ move $s3 $s2
+ bnez $s2 null33
+ la $a0 _str0
+ j _error
+null33:
+ lw $t1 0($s2)
+ lw $t1 16($t1)
+ move $a0 $s2
+ jalr $t1
+ move $s2 $v0
+ j if7_end
+if7_else:
+ li $s4 0
+if7_end:
+ j if6_end
+if6_else:
+ slt $t0 $t0 $s1
+ beqz $t0 if8_else
+ bnez $s2 null34
+ la $a0 _str0
+ j _error
+null34:
+ lw $t0 0($s2)
+ lw $t0 28($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if9_else
+ move $s3 $s2
+ bnez $s2 null35
+ la $a0 _str0
+ j _error
+null35:
+ lw $t0 0($s2)
+ lw $t0 12($t0)
+ move $a0 $s2
+ jalr $t0
+ move $s2 $v0
+ j if9_end
+if9_else:
+ li $s4 0
+if9_end:
+ j if8_end
+if8_else:
+ beqz $s6 if10_else
+ bnez $s2 null36
+ la $a0 _str0
+ j _error
+null36:
+ lw $t0 0($s2)
+ lw $t0 28($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ li $t9 1
+ subu $t0 $t9 $t0
+ beqz $t0 ss1_else
+ bnez $s2 null37
+ la $a0 _str0
+ j _error
+null37:
+ lw $t0 0($s2)
+ lw $t0 32($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ li $t9 1
+ subu $t0 $t9 $t0
+ j ss1_end
+ss1_else:
+ li $t0 0
+ss1_end:
+ beqz $t0 if11_else
+ j if11_end
+if11_else:
+ lw $t0 0($s0)
+ lw $t0 56($t0)
+ move $a0 $s0
+ move $a1 $s3
+ move $a2 $s2
+ jalr $t0
+if11_end:
+ j if10_end
+if10_else:
+ lw $t0 0($s0)
+ lw $t0 56($t0)
+ move $a0 $s0
+ move $a1 $s3
+ move $a2 $s2
+ jalr $t0
+if10_end:
+ li $s5 1
+ li $s4 0
+if8_end:
+if6_end:
+ li $s6 0
+ j while2_top
+while2_end:
+ move $v0 $s5
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $s4 16($sp)
+ lw $s5 20($sp)
+ lw $s6 24($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 36
+ jr $ra
+
+Tree.Remove:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+ bnez $s2 null38
+ la $a0 _str0
+ j _error
+null38:
+ lw $t0 0($s2)
+ lw $t0 32($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if12_else
+ lw $t0 0($s0)
+ lw $t0 64($t0)
+ move $a0 $s0
+ move $a1 $s1
+ move $a2 $s2
+ jalr $t0
+ j if12_end
+if12_else:
+ bnez $s2 null39
+ la $a0 _str0
+ j _error
+null39:
+ lw $t0 0($s2)
+ lw $t0 28($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if13_else
+ lw $t0 0($s0)
+ lw $t0 60($t0)
+ move $a0 $s0
+ move $a1 $s1
+ move $a2 $s2
+ jalr $t0
+ j if13_end
+if13_else:
+ bnez $s2 null40
+ la $a0 _str0
+ j _error
+null40:
+ lw $t0 0($s2)
+ lw $t0 20($t0)
+ move $a0 $s2
+ jalr $t0
+ move $s2 $v0
+ bnez $s1 null41
+ la $a0 _str0
+ j _error
+null41:
+ lw $t0 0($s1)
+ lw $t0 16($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ bnez $t0 null42
+ la $a0 _str0
+ j _error
+null42:
+ lw $t1 0($t0)
+ lw $t1 20($t1)
+ move $a0 $t0
+ jalr $t1
+ move $t1 $v0
+ lw $t0 0($s0)
+ lw $t0 44($t0)
+ move $a0 $s0
+ move $a1 $s2
+ move $a2 $t1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if14_else
+ bnez $s1 null43
+ la $a0 _str0
+ j _error
+null43:
+ lw $t0 0($s1)
+ lw $t0 8($t0)
+ lw $t1 24($s0)
+ move $a0 $s1
+ move $a1 $t1
+ jalr $t0
+ bnez $s1 null44
+ la $a0 _str0
+ j _error
+null44:
+ lw $t1 0($s1)
+ lw $t1 36($t1)
+ move $a0 $s1
+ li $a1 0
+ jalr $t1
+ j if14_end
+if14_else:
+ bnez $s1 null45
+ la $a0 _str0
+ j _error
+null45:
+ lw $t1 0($s1)
+ lw $t1 4($t1)
+ lw $t0 24($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jalr $t1
+ bnez $s1 null46
+ la $a0 _str0
+ j _error
+null46:
+ lw $t0 0($s1)
+ lw $t0 40($t0)
+ move $a0 $s1
+ li $a1 0
+ jalr $t0
+if14_end:
+if13_end:
+if12_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Tree.RemoveRight:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+while3_top:
+ bnez $s2 null47
+ la $a0 _str0
+ j _error
+null47:
+ lw $t0 0($s2)
+ lw $t0 28($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 while3_end
+ bnez $s2 null48
+ la $a0 _str0
+ j _error
+null48:
+ lw $s3 0($s2)
+ lw $s3 24($s3)
+ bnez $s2 null49
+ la $a0 _str0
+ j _error
+null49:
+ lw $t0 0($s2)
+ lw $t0 12($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ bnez $t0 null50
+ la $a0 _str0
+ j _error
+null50:
+ lw $t1 0($t0)
+ lw $t1 20($t1)
+ move $a0 $t0
+ jalr $t1
+ move $t1 $v0
+ move $a0 $s2
+ move $a1 $t1
+ jalr $s3
+ move $s1 $s2
+ bnez $s2 null51
+ la $a0 _str0
+ j _error
+null51:
+ lw $t1 0($s2)
+ lw $t1 12($t1)
+ move $a0 $s2
+ jalr $t1
+ move $s2 $v0
+ j while3_top
+while3_end:
+ bnez $s1 null52
+ la $a0 _str0
+ j _error
+null52:
+ lw $t1 0($s1)
+ lw $t1 4($t1)
+ lw $t0 24($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jalr $t1
+ bnez $s1 null53
+ la $a0 _str0
+ j _error
+null53:
+ lw $t0 0($s1)
+ lw $t0 40($t0)
+ move $a0 $s1
+ li $a1 0
+ jalr $t0
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.RemoveLeft:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $s0 $a0
+ move $s1 $a1
+ move $s2 $a2
+while4_top:
+ bnez $s2 null54
+ la $a0 _str0
+ j _error
+null54:
+ lw $t0 0($s2)
+ lw $t0 32($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 while4_end
+ bnez $s2 null55
+ la $a0 _str0
+ j _error
+null55:
+ lw $s3 0($s2)
+ lw $s3 24($s3)
+ bnez $s2 null56
+ la $a0 _str0
+ j _error
+null56:
+ lw $t0 0($s2)
+ lw $t0 16($t0)
+ move $a0 $s2
+ jalr $t0
+ move $t0 $v0
+ bnez $t0 null57
+ la $a0 _str0
+ j _error
+null57:
+ lw $t1 0($t0)
+ lw $t1 20($t1)
+ move $a0 $t0
+ jalr $t1
+ move $t1 $v0
+ move $a0 $s2
+ move $a1 $t1
+ jalr $s3
+ move $s1 $s2
+ bnez $s2 null58
+ la $a0 _str0
+ j _error
+null58:
+ lw $t1 0($s2)
+ lw $t1 16($t1)
+ move $a0 $s2
+ jalr $t1
+ move $s2 $v0
+ j while4_top
+while4_end:
+ bnez $s1 null59
+ la $a0 _str0
+ j _error
+null59:
+ lw $t1 0($s1)
+ lw $t1 8($t1)
+ lw $t0 24($s0)
+ move $a0 $s1
+ move $a1 $t0
+ jalr $t1
+ bnez $s1 null60
+ la $a0 _str0
+ j _error
+null60:
+ lw $t0 0($s1)
+ lw $t0 36($t0)
+ move $a0 $s1
+ li $a1 0
+ jalr $t0
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.Search:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 24
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ sw $s3 12($sp)
+ move $t0 $a0
+ move $s0 $a1
+ move $s1 $t0
+ li $s2 1
+ li $s3 0
+while5_top:
+ beqz $s2 while5_end
+ bnez $s1 null61
+ la $a0 _str0
+ j _error
+null61:
+ lw $t0 0($s1)
+ lw $t0 20($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ slt $t1 $s0 $t0
+ beqz $t1 if15_else
+ bnez $s1 null62
+ la $a0 _str0
+ j _error
+null62:
+ lw $t1 0($s1)
+ lw $t1 32($t1)
+ move $a0 $s1
+ jalr $t1
+ move $t1 $v0
+ beqz $t1 if16_else
+ bnez $s1 null63
+ la $a0 _str0
+ j _error
+null63:
+ lw $t1 0($s1)
+ lw $t1 16($t1)
+ move $a0 $s1
+ jalr $t1
+ move $s1 $v0
+ j if16_end
+if16_else:
+ li $s2 0
+if16_end:
+ j if15_end
+if15_else:
+ slt $t0 $t0 $s0
+ beqz $t0 if17_else
+ bnez $s1 null64
+ la $a0 _str0
+ j _error
+null64:
+ lw $t0 0($s1)
+ lw $t0 28($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if18_else
+ bnez $s1 null65
+ la $a0 _str0
+ j _error
+null65:
+ lw $t0 0($s1)
+ lw $t0 12($t0)
+ move $a0 $s1
+ jalr $t0
+ move $s1 $v0
+ j if18_end
+if18_else:
+ li $s2 0
+if18_end:
+ j if17_end
+if17_else:
+ li $s3 1
+ li $s2 0
+if17_end:
+if15_end:
+ j while5_top
+while5_end:
+ move $v0 $s3
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $s3 12($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 24
+ jr $ra
+
+Tree.Print:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $t0
+ lw $t2 0($t0)
+ lw $t2 76($t2)
+ move $a0 $t0
+ move $a1 $t1
+ jalr $t2
+ li $v0 1
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Tree.RecPrint:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 20
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ sw $s2 8($sp)
+ move $s0 $a0
+ move $s1 $a1
+ bnez $s1 null66
+ la $a0 _str0
+ j _error
+null66:
+ lw $t0 0($s1)
+ lw $t0 32($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if19_else
+ lw $s2 0($s0)
+ lw $s2 76($s2)
+ bnez $s1 null67
+ la $a0 _str0
+ j _error
+null67:
+ lw $t0 0($s1)
+ lw $t0 16($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ move $a0 $s0
+ move $a1 $t0
+ jalr $s2
+ j if19_end
+if19_else:
+if19_end:
+ bnez $s1 null68
+ la $a0 _str0
+ j _error
+null68:
+ lw $t0 0($s1)
+ lw $t0 20($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ move $a0 $t0
+ jal _print
+ bnez $s1 null69
+ la $a0 _str0
+ j _error
+null69:
+ lw $t0 0($s1)
+ lw $t0 28($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if20_else
+ lw $s2 0($s0)
+ lw $s2 76($s2)
+ bnez $s1 null70
+ la $a0 _str0
+ j _error
+null70:
+ lw $t0 0($s1)
+ lw $t0 12($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ move $a0 $s0
+ move $a1 $t0
+ jalr $s2
+ j if20_end
+if20_else:
+if20_end:
+ li $v0 1
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $s2 8($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 20
+ jr $ra
+
+Tree.accept:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 8
+ sw $ra -4($fp)
+ move $t0 $a0
+ move $t1 $a1
+ li $a0 333
+ jal _print
+ bnez $t1 null71
+ la $a0 _str0
+ j _error
+null71:
+ lw $t2 0($t1)
+ lw $t2 0($t2)
+ move $a0 $t1
+ move $a1 $t0
+ jalr $t2
+ li $v0 0
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 8
+ jr $ra
+
+Visitor.visit:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 16
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ move $s0 $a0
+ move $s1 $a1
+ bnez $s1 null72
+ la $a0 _str0
+ j _error
+null72:
+ lw $t0 0($s1)
+ lw $t0 28($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if21_else
+ bnez $s1 null73
+ la $a0 _str0
+ j _error
+null73:
+ lw $t0 0($s1)
+ lw $t0 12($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ sw $t0 8($s0)
+ lw $t0 8($s0)
+ bnez $t0 null74
+ la $a0 _str0
+ j _error
+null74:
+ lw $t1 0($t0)
+ lw $t1 80($t1)
+ move $a0 $t0
+ move $a1 $s0
+ jalr $t1
+ j if21_end
+if21_else:
+if21_end:
+ bnez $s1 null75
+ la $a0 _str0
+ j _error
+null75:
+ lw $t1 0($s1)
+ lw $t1 32($t1)
+ move $a0 $s1
+ jalr $t1
+ move $t1 $v0
+ beqz $t1 if22_else
+ bnez $s1 null76
+ la $a0 _str0
+ j _error
+null76:
+ lw $t1 0($s1)
+ lw $t1 16($t1)
+ move $a0 $s1
+ jalr $t1
+ move $t1 $v0
+ sw $t1 4($s0)
+ lw $t1 4($s0)
+ bnez $t1 null77
+ la $a0 _str0
+ j _error
+null77:
+ lw $t0 0($t1)
+ lw $t0 80($t0)
+ move $a0 $t1
+ move $a1 $s0
+ jalr $t0
+ j if22_end
+if22_else:
+if22_end:
+ li $v0 0
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 16
+ jr $ra
+
+MyVisitor.visit:
+ sw $fp -8($sp)
+ move $fp $sp
+ subu $sp $sp 16
+ sw $ra -4($fp)
+ sw $s0 0($sp)
+ sw $s1 4($sp)
+ move $s0 $a0
+ move $s1 $a1
+ bnez $s1 null78
+ la $a0 _str0
+ j _error
+null78:
+ lw $t0 0($s1)
+ lw $t0 28($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ beqz $t0 if23_else
+ bnez $s1 null79
+ la $a0 _str0
+ j _error
+null79:
+ lw $t0 0($s1)
+ lw $t0 12($t0)
+ move $a0 $s1
+ jalr $t0
+ move $t0 $v0
+ sw $t0 8($s0)
+ lw $t0 8($s0)
+ bnez $t0 null80
+ la $a0 _str0
+ j _error
+null80:
+ lw $t1 0($t0)
+ lw $t1 80($t1)
+ move $a0 $t0
+ move $a1 $s0
+ jalr $t1
+ j if23_end
+if23_else:
+if23_end:
+ bnez $s1 null81
+ la $a0 _str0
+ j _error
+null81:
+ lw $t1 0($s1)
+ lw $t1 20($t1)
+ move $a0 $s1
+ jalr $t1
+ move $t1 $v0
+ move $a0 $t1
+ jal _print
+ bnez $s1 null82
+ la $a0 _str0
+ j _error
+null82:
+ lw $t1 0($s1)
+ lw $t1 32($t1)
+ move $a0 $s1
+ jalr $t1
+ move $t1 $v0
+ beqz $t1 if24_else
+ bnez $s1 null83
+ la $a0 _str0
+ j _error
+null83:
+ lw $t1 0($s1)
+ lw $t1 16($t1)
+ move $a0 $s1
+ jalr $t1
+ move $t1 $v0
+ sw $t1 4($s0)
+ lw $t1 4($s0)
+ bnez $t1 null84
+ la $a0 _str0
+ j _error
+null84:
+ lw $t0 0($t1)
+ lw $t0 80($t0)
+ move $a0 $t1
+ move $a1 $s0
+ jalr $t0
+ j if24_end
+if24_else:
+if24_end:
+ li $v0 0
+ lw $s0 0($sp)
+ lw $s1 4($sp)
+ lw $ra -4($fp)
+ lw $fp -8($fp)
+ addu $sp $sp 16
+ jr $ra
+
+_print:
+ li $v0 1 # syscall: print integer
+ syscall
+ la $a0 _newline
+ li $v0 4 # syscall: print string
+ syscall
+ jr $ra
+
+_error:
+ li $v0 4 # syscall: print string
+ syscall
+ li $v0 10 # syscall: exit
+ syscall
+
+_heapAlloc:
+ li $v0 9 # syscall: sbrk
+ syscall
+ jr $ra
+
+.data
+.align 0
+_newline: .asciiz "\n"
+_str0: .asciiz "null pointer\n"