c848735e564b94b1721708ac5d6cd16333ff2dac
[calu.git] / 8_benchs / src / fibmem.s
1 .data
2 .org 0x10
3 list:
4         .fill 0x1 ;1. element = 1 ;0x10
5         .fill 0x1 ;2. element = 1 ;0x14
6         .fill 0x100, 0x0 ;nullen..
7 .text
8 main:
9         ldi r1, 9;
10         ldil r10, list@lo
11         ldih r10, list@hi
12         call+ fibmem;
13         br+ main;
14
15         ; if (list[n] == true) {
16         ;       return list[n]
17         ; }
18         ; erg = list[n] = fib(n-1) + (n-2)
19         ; return erg
20 fibmem:
21         lls r2, r1, 2 ; * 4
22         add r2, r10, r2
23         ldw r0, 0(r2)
24         cmpi r0, 0
25         retnz-
26         push r2 ; addr pushen
27         push r1 ; param pushen
28         subi r1, r1, 1
29         call+ fibmem
30         pop r1 ; param poppen
31         push r0 ; zwischenerg pushen
32         subi r1, r1, 2
33         call+ fibmem
34         pop r2 ; zwischenerg poppen
35         add r0, r2, r0
36         pop r2 ; addr poppen
37         stw r0, 0(r2) ; ergebnis speichern
38         ret+