diff options
Diffstat (limited to 'output/LinearSearch.opt.s')
-rw-r--r-- | output/LinearSearch.opt.s | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/output/LinearSearch.opt.s b/output/LinearSearch.opt.s new file mode 100644 index 0000000..a012e02 --- /dev/null +++ b/output/LinearSearch.opt.s @@ -0,0 +1,290 @@ +.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 + bgtz $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 -12($fp) + 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 -12($fp) + 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) + move $a0 $t1 + move $t9 $t2 + slt $t2 $a0 $t9 + blez $t2 while1_end + lw $t2 0($t0) + bgtz $t2 null2 + la $a0 _str0 + j _error +null2: + lw $t3 0($t2) + move $a0 $t1 + move $t9 $t3 + sltu $t3 $a0 $t9 + bgtz $t3 bounds1 + la $a0 _str0 + j _error +bounds1: + move $a0 $t1 + li $t9 4 + mul $t3 $a0 $t9 + move $a0 $t3 + move $t9 $t2 + addu $t3 $a0 $t9 + lw $t3 4($t3) + move $a0 $t3 + jal _print + move $a0 $t1 + li $t9 1 + addu $t1 $a0 $t9 + 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) + move $a0 $t2 + move $t9 $t4 + slt $t4 $a0 $t9 + blez $t4 while2_end + lw $t4 0($t0) + bgtz $t4 null3 + la $a0 _str0 + j _error +null3: + lw $t5 0($t4) + move $a0 $t2 + move $t9 $t5 + sltu $t5 $a0 $t9 + bgtz $t5 bounds2 + la $a0 _str0 + j _error +bounds2: + move $a0 $t2 + li $t9 4 + mul $t5 $a0 $t9 + move $a0 $t5 + move $t9 $t4 + addu $t5 $a0 $t9 + lw $t5 4($t5) + move $a0 $t1 + li $t9 1 + addu $t4 $a0 $t9 + move $a0 $t5 + move $t9 $t1 + slt $t6 $a0 $t9 + blez $t6 if1_else + j if1_end +if1_else: + move $a0 $t5 + move $t9 $t4 + slt $t4 $a0 $t9 + bgtz $t4 if2_else + j if2_end +if2_else: + li $t3 1 + lw $t2 4($t0) +if2_end: +if1_end: + move $a0 $t2 + li $t9 1 + addu $t2 $a0 $t9 + 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 -12($fp) + 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) + move $a0 $t1 + li $t9 1 + addu $t1 $a0 $t9 +while3_top: + lw $t2 4($s0) + move $a0 $t0 + move $t9 $t2 + slt $t2 $a0 $t9 + blez $t2 while3_end + li $a0 2 + move $t9 $t0 + mul $t2 $a0 $t9 + move $a0 $t1 + li $t9 3 + subu $t3 $a0 $t9 + lw $t4 0($s0) + bgtz $t4 null4 + la $a0 _str0 + j _error +null4: + lw $t5 0($t4) + move $a0 $t0 + move $t9 $t5 + sltu $t5 $a0 $t9 + bgtz $t5 bounds3 + la $a0 _str0 + j _error +bounds3: + move $a0 $t0 + li $t9 4 + mul $t5 $a0 $t9 + move $a0 $t5 + move $t9 $t4 + addu $t5 $a0 $t9 + move $a0 $t2 + move $t9 $t3 + addu $t3 $a0 $t9 + sw $t3 4($t5) + move $a0 $t0 + li $t9 1 + addu $t0 $a0 $t9 + move $a0 $t1 + li $t9 1 + subu $t1 $a0 $t9 + j while3_top +while3_end: + li $v0 0 + lw $s0 -12($fp) + 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 + move $a0 $t0 + li $t9 4 + mul $t1 $a0 $t9 + move $a0 $t1 + li $t9 4 + addu $t1 $a0 $t9 + 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" |