projects
/
calu.git
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
a91543ddbcc3e7acfc922dd6d0301b7879d2bdf5
[calu.git]
/
8_benchs
/
src
/
fibmmem.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
; a = fib(n-1)
20
; list[n] = a + list[n-2]
21
; return list[n]
22
; }
23
fibcall:
24
lls r1, r1, 2 ; *4
25
fibmem:
26
add r2, r10, r1
27
ldw r0, 0(r2)
28
cmpi r0, 0
29
retnz-
30
push r2 ; addr pushen
31
subi r1, r1, 4
32
call+ fibmem
33
ldw r2, 0-4(r2)
34
add r0, r2, r0
35
pop r2 ; addr poppen
36
stw r0, 0(r2) ; ergebnis speichern
37
addi r1, r1, 4
38
ret+