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[i];
    }
    return (sum);
}

הקוד הבא יותר קרוב לקוד שקומפיילר בין ימינו יוציא.

sum:
    add t0, zero zero   // i = 0
    add t2, zero zero   // s = 0
    beq zero, zero, L
loop:
    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, 1   // 
L:  bltu t0, a1, loop   // if (i < len) goto loop
done:
    addi a0, t2, 0        // return value
    jalr zero, 0(ra)    // return