bench: fibmem.s @ 177 instructions
authorBernhard Urban <lewurm@gmail.com>
Tue, 9 Nov 2010 23:17:05 +0000 (00:17 +0100)
committerBernhard Urban <lewurm@gmail.com>
Tue, 9 Nov 2010 23:17:05 +0000 (00:17 +0100)
8_benchs/src/fibmem.s
8_benchs/src/max.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
index ec3a70ee6f9e0808f90435b11e6c9ee03ee1189b..79557856aded8333f6b00ba322385ba8487de437 100644 (file)
@@ -27,6 +27,9 @@ main:
        br+ main
 
 max:
+       ; r1 = len
+       ; r2 = arr
+       ; r4 = arr[x]
        ; r0 = x = arr[0]
        ldw r0, 0(r2)
        subi r1, r1, 1
@@ -35,7 +38,6 @@ maxloop:
        cmp r0, r4
        movlt r0, r4
        subi r1, r1, 1
-       ;cmpi r1, 1 ; nicht noetig hier, weil wegen subi ueberfluessig (?)
        addid r2, r2, 4
        brnq+ maxloop
        ret+