Listing 5:


#       compiled using hc29 -O -S fib.c
_fib:
        sub             gr1,gr1,16          # bring down register stack pointer
        asgeu           V_SPILL,gr1,gr126   # test for spill
        cpgt            gr96,lr6,2          # determine if n<2
        jmpt            gr96,L00043
        add             lr1,gr1,28          # stack support operation
        add             gr1,gr1,16          # repair register stack for return
        const           gr96,1  ; (0x1)       # return value 1 when n<=2
        jmpi            lr0                 # return
        asleu           V_FILL,lr1,gr127    # test for fill
L00043:
        call            lr0,_fib
        sub             lr2,lr6,1           # place n-1 in lr2
        add             lr3,gr96,0          # hold fib(n-1) in local
        call            lr0,_fib
        sub             lr2,lr6,2           # place n-2 in lr2
        add             gr96,gr96,lr3       # add fib(n-2) and fib(n-1)
        add             gr1,gr1,16          # repair register stack for return
        nop                         # wait 1-cycle for gr1 update
        jmpi            lr0                 # return
        asleu           V_FILL,lr1,gr127    # test for fill


