# ------------------------------------------------------ # FuncDef for max([int: [a] init=null, int: [b] init=null]) max: addi $sp, $sp, -12 # max room for $ra, $fp, and local var sw $ra, 0($sp) # save return address sw $fp, 4($sp) # save caller's frame pointer add $fp, $0, $sp # reset frame pointer # if ((< a b)) # (< a b) lw $t0, 12($fp) # fetch a lw $t1, 16($fp) # fetch b slt $t2, $t0, $t1 beq $0, $t2, __L3 # result = b addi $t0, $fp, 8 # compute address of local var "result" lw $t1, 16($fp) sw $t1, 0($t0) j __L4 __L3: nop # result = a addi $t0, $fp, 8 lw $t1, 12($fp) sw $t1, 0($t0) __L4: nop # return result lw $t0, 8($fp) add $v0, $0, $t0 # put return value in $v0 for caller j __L2 __L2: nop lw $ra, 0($fp) # restore return address reg lw $fp, 4($fp) # restore frame pointer reg addi $sp, $sp, 12 # "free" caller part of stack frame jr $ra # return