.text
.align 2

.global fact

@ int fact(int n)
@ 
@ -- r0 -- int n
@
fact:

	@ Prolog funkcije
	stmfd sp!, {fp,lr}
	mov fp, sp

	@ Smestamo na stek registar r4, jer cemo ga koristiti.
	stmfd sp!, {r4}

	@ Cuvamo n u r4.
	mov r4, r0

	@ Izlaz iz rekurzije: fact(0)=1
	cmp r0, #0
	bne rec_call
	mov r0, #1
	b done

rec_call:
	@ Pozivamo fact(n-1)
	sub r0, r0, #1
	bl fact

	@ Mnozimo n * fact(n-1)
	mov r2, r0
	mul r0, r2, r4

done:

	@ Skidamo sa steka vrednost registra r4.
	ldmfd sp!, {r4}

	@ Epilog funkcije
	mov sp, fp
	ldmfd sp!, {fp,pc}

