// FIB2         Fibonacci numbers without recursion

        .text                     // Section for code
        .align  32                // Desired alignment
        .global fib2              // These three lines
        .proc   fib2              //  mark the mandatory
fib2:                             //   function entry
        .regstk 1,0,0,0           // Claim in0
        .body                     // Now we really begin...
first:  mov     ret0 = 1          // Default value
        add     in0 = -2,in0;;    // Number of additions
        cmp.le  p6,p0 = in0,r0    // Set F(N)=1
   (p6) br.cond.spnt.few done     //  if N=1 or 2
        mov     r9 = ret0         // r9 = F(n-2)
loop:   add     in0 = -1,in0      // Count down...
        mov     r10 = ret0;;      // Old F(n) -> F(n-1)
        add     ret0 = r9,ret0    // ret0 = newest F(n) now
        mov     r9 = r10          // Old F(n-1) -> F(n-2)
        cmp.gt  p6,p0 = in0,r0    //  ...until finished
   (p6) br.cond.sptk.few loop     // ret0 = F(N) sought
done:   br.ret.sptk.many b0;;     // Back to caller
        .endp   fib2              // Mark end of procedure