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)