Carmi Merimovich

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

אתר אישי

הקוד הזה ניגש לווקטור על-ידי פוינטרים. השיפור בקוד הנוצר משמעותי.

long long sum(long long *vec, unsigned long long len) {
    long long s;
    for (unsigned long long i = 0; i < len; i++) {
        s += *vec++;
    }
    return (sum);
}
sum:
    add t0, zero zero   // i = 0
    add t2, zero zero   // s = 0
    beq zero, zero, L
loop:
    ld  t1, 0(a0)       // *vec
    add t2,t2, t1       // s += *vec
    addi    a0, a0, 8   // vec += 8
    addi    t0, t0, 1   // i += 1
L:  bltu t0, a1, loop   // if (i < len) goto loop
done:
    addi a0, t2, 0      // return value
    jalr zero, 0(ra)    // return