s3e: fix build break
[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 ; global pointer
11         ldih r10, list@hi
12         call+ fibcall;
13         br+ main;
14
15         ; fib(n) {
16         ;   if (list[n] > 0) {
17         ;       return list[n]
18         ;   }
19         ;   erg = list[n] = fib(n-1) + (n-2)
20         ;   return erg
21         ; }
22 fibcall:
23         lls r1, r1, 2 ; *4
24 fibmem:
25         add r2, r10, r1
26         ldw r0, 0(r2)
27         cmpi r0, 0
28         retnz-
29         push r2 ; addr pushen
30         subi r1, r1, 4
31         call+ fibmem
32         push r0 ; zwischenerg pushen
33         subi r1, r1, 4
34         call+ fibmem
35         pop r2 ; zwischenerg poppen
36         add r0, r2, r0
37         pop r2 ; addr poppen
38         stw r0, 0(r2) ; ergebnis speichern
39         addi r1, r1, 8
40         ret+