Carmi Merimovich

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

אתר אישי

מימוש פונקצית C בשם M

long long M(long long a, long long b) {
	if (b == 0)
		return (0);
	if (b > 0)
		return (M(a, b - 1) + a);
	return (M(a, b + 1) - a);
}

ושוב,

M::
    bne     a1, x0, l1
    add     a0, x0, x0
    jalr    x0, 0(ra)
l1:

    addi    sp, sp, -16
    sd      ra, 0(sp)
    sd      a0, 8(sp)

    ble     a1, x0, l2

    addi    a1, a1, -1
    jal     ra, M
    ld      t0, 8(sp)
    add     a0, a0, t0
    beq     x0, x0, done
l2:
    addi    a1, a1, 1
    jal     ra, M
    ld      t0, 8(sp)
    sub     a0, a0, t0
done:
    ld      ra, 0(sp)
    add     sp, sp, 16
    jalr    x0, 0(ra)