Listing 4:


#       compiled using cc -O -S fib.c
_fib:
        save            %sp,-96,%sp         # make space for new frame
        cmp             %i0,2               # determine if n<2

        ble,a           L77007
        mov             1,%i0               # annuled if branch not taken
        call            _fib,1
        sub             %i0,2,%o0           # determine n-2
        mov             %o0,%i5             # copy fib(n-2) result
        call            _fib,1
        sub             %i0,1,%o0           # determine n-1
        add             %o0,%i5,%o0         # add fib(n-2) and fib(n-1)
        mov             %o0,%i0             # result in %i0 (%o0 of caller)
L77007:
        ret
        restore                     # return frame registers to stack


