Carmi Merimovich

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

אתר אישי

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

unsigned long long gcd(unsigned long long a, unsigned long long b) {
	if (b == 0)
		return (a);
	if (a  >=  b)
		return gcd(a, a - b);
	return gcd(b, b - a);
}

מה זה כבר יכול להיות

gcd::
    bne     a1, x0, l1
    jalr    x0, 0(ra)
l1:
    addi    sp, sp, -8
    sd      ra, 0(sp)

    sub     t0, a0, a1
    blt     t0, l2
    sub     a1, a0, a1
    jal     ra, gcd
    beq     x0, x0, done
l2:
    sub     t0, a1, a0
    add     a0, a1, x0
    add     a1, t0, x0
    jal     ra, gcd
done:
    ld      ra, 0(sp)
    addi    sp, sp, 8
    jalr    x0, 0(ra)