diff options
Diffstat (limited to 'base')
-rw-r--r-- | base/BinaryTree.opt.s | 1064 | ||||
-rw-r--r-- | base/BinaryTree.s | 1272 | ||||
-rw-r--r-- | base/BubbleSort.opt.s | 437 | ||||
-rw-r--r-- | base/BubbleSort.s | 453 | ||||
-rw-r--r-- | base/Factorial.opt.s | 64 | ||||
-rw-r--r-- | base/Factorial.s | 90 | ||||
-rw-r--r-- | base/LinearSearch.opt.s | 254 | ||||
-rw-r--r-- | base/LinearSearch.s | 276 | ||||
-rw-r--r-- | base/LinkedList.opt.s | 791 | ||||
-rw-r--r-- | base/LinkedList.s | 944 | ||||
-rw-r--r-- | base/MoreThan4.opt.s | 113 | ||||
-rw-r--r-- | base/MoreThan4.s | 140 | ||||
-rw-r--r-- | base/QuickSort.opt.s | 566 | ||||
-rw-r--r-- | base/QuickSort.s | 590 | ||||
-rw-r--r-- | base/TreeVisitor.opt.s | 1258 | ||||
-rw-r--r-- | base/TreeVisitor.s | 1493 |
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" |