bench: fibmem.s @ 177 instructions
[calu.git] / 8_benchs / src / fibmem.s
index c848735e564b94b1721708ac5d6cd16333ff2dac..7ecdc54997d02b0acc6cc391225ce0ede41e2755 100644 (file)
@@ -7,29 +7,32 @@ list:
 .text
 main:
        ldi r1, 9;
-       ldil r10, list@lo
+       ldil r10, list@lo ; global pointer
        ldih r10, list@hi
-       call+ fibmem;
+       call+ fibcall;
        br+ main;
 
-       ; if (list[n] == true) {
-       ;       return list[n]
+       ; fib(n) {
+       ;   if (list[n] > 0) {
+       ;       return list[n]
+       ;   }
+       ;   erg = list[n] = fib(n-1) + (n-2)
+       ;   return erg
        ; }
-       ; erg = list[n] = fib(n-1) + (n-2)
-       ; return erg
+fibcall:
+       lls r1, r1, 2 ; *4
 fibmem:
-       lls r2, r1, 2 ; * 4
-       add r2, r10, r2
+       add r2, r10, r1
        ldw r0, 0(r2)
        cmpi r0, 0
        retnz-
        push r2 ; addr pushen
        push r1 ; param pushen
-       subi r1, r1, 1
+       subi r1, r1, 4
        call+ fibmem
        pop r1 ; param poppen
        push r0 ; zwischenerg pushen
-       subi r1, r1, 2
+       subi r1, r1, 8
        call+ fibmem
        pop r2 ; zwischenerg poppen
        add r0, r2, r0