Carmi Merimovich

כרמי מרימוביץ

אתר אישי

סכום האברים הזוגיים בווקטור long long (אינדקסים)

long long sum(long long *vec, unsigned long long len) {
    long long s = 0;
    for (unsigned long long i = 0; i < len; i += 2) {
        s += vec[i];
    }
    return (sum);
}

להלן תרגום אפשרי לחלוטין של הקוד הנ"ל.

sum:
    add t2, zero zero   // s = 0
    add t0, zero zero   // i = 0
loop:
    bgeu t0, a1, done   // if (i >= len) goto done
    slli t1, t0, 3      // i*8
    add  t1, t1, a0     // vec + i * 8
    ld  t1, 0(t1)       // vec[i]
    add t2,t2, t1       // s = s + vec[i]
    addi    t0, t0, 2   // 
    beq zero, zero, loop
done:
    addi a0, t2         // return value
    jalr zero, 0(ra)    // return