diff options
Diffstat (limited to 'output/Factorial.opt.s')
-rw-r--r-- | output/Factorial.opt.s | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/output/Factorial.opt.s b/output/Factorial.opt.s new file mode 100644 index 0000000..c71d219 --- /dev/null +++ b/output/Factorial.opt.s @@ -0,0 +1,73 @@ +.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 -12($fp) + move $t0 $a0 + move $s0 $a1 + move $a0 $s0 + li $t9 1 + slt $t1 $a0 $t9 + blez $t1 if1_else + li $t1 1 + j if1_end +if1_else: + move $a0 $s0 + li $t9 1 + subu $t2 $a0 $t9 + move $a0 $t0 + move $a1 $t2 + jal Fac.ComputeFac + move $t2 $v0 + move $a0 $s0 + move $t9 $t2 + mul $t1 $a0 $t9 +if1_end: + move $v0 $t1 + lw $s0 -12($fp) + 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" |