// sum.s
// David_Harris@hmc.edu 24 December 2021
// Add up numbers from 1 to N.

// result in s0, i in s1, N in a0, return answer in a0
//
// long sum(long N) {
//   long result, i;
//   result = 0;
//   for (i=1; i<=N; i++) result = result + i;
//   return result;
// }

.global sum
sum:
    addi sp, sp, -16    # make room to save s0 and s1 on the stack
    sd s0, 0(sp)
    sd s1, 8(sp)

    li s0, 0            # result = 0
    li s1, 1            # i = 1
for: bgt s1, a0, done   # exit loop if i > n
    add s0, s0, s1      # result = result + i
    addi s1, s1, 1      # i++
    j for               # repeat

done:
    mv a0, s0           # put result in a0 to return
    ld s0, 0(sp)        # restore s0 and s1 from stack
    ld s1, 8(sp)
    addi sp, sp, 16  
    ret                 # return from function