; return list[n]
; }
fibcall:
+ ;update counter for aligned access
lls r1, r1, 2 ; *4
-fibmem:
+ ;calculate adress of top element
add r2, r10, r1
+fibmem:
+ ;load top element
ldw r0, 0(r2)
+ ;compare if set
cmpi r0, 0
+ ;return if set
retnz-
- push r2 ; addr pushen
- subi r1, r1, 4
+ ;decrement adress for next lopp
+ subi r2, r2, 4
+ ;iterative call for n-1 element
call+ fibmem
- ldw r2, 0-4(r2)
- add r0, r2, r0
- pop r2 ; addr poppen
- stw r0, 0(r2) ; ergebnis speichern
- addi r1, r1, 4
+ ;load n-2 element
+ ldw r3, 0-4(r2)
+ ;add n-1 and n-2 element
+ add r0, r3, r0
+ ;increment address for n element
+ ;is needed because after return
+ ;we need r2 to be set to the address
+ ;of element n
+ addi r2, r2, 4
+ ;store fib n
+ stw r0, 0(r2)
ret+