bench: fib mega mem style
authorMartin Perner <martin@perner.cc>
Wed, 10 Nov 2010 19:10:09 +0000 (20:10 +0100)
committerMartin Perner <martin@perner.cc>
Wed, 10 Nov 2010 19:10:09 +0000 (20:10 +0100)
runs at about 114 :)
but if it is allowed is another question

3_test/fibmmem.s [new symlink]
8_benchs/src/fibmmem.s [new file with mode: 0644]

diff --git a/3_test/fibmmem.s b/3_test/fibmmem.s
new file mode 120000 (symlink)
index 0000000..c2bc347
--- /dev/null
@@ -0,0 +1 @@
+../8_benchs/src/fibmmem.s
\ No newline at end of file
diff --git a/8_benchs/src/fibmmem.s b/8_benchs/src/fibmmem.s
new file mode 100644 (file)
index 0000000..a91543d
--- /dev/null
@@ -0,0 +1,38 @@
+.data
+.org 0x10
+list:
+       .fill 0x1 ;1. element = 1 ;0x10
+       .fill 0x1 ;2. element = 1 ;0x14
+       .fill 0x100, 0x0 ;nullen..
+.text
+main:
+       ldi r1, 9;
+       ldil r10, list@lo ; global pointer
+       ldih r10, list@hi
+       call+ fibcall;
+       br+ main;
+
+       ; fib(n) {
+       ;   if (list[n] > 0) {
+       ;       return list[n]
+       ;   }
+       ;   a = fib(n-1)
+       ;   list[n] = a + list[n-2]
+       ;   return list[n]
+       ; }
+fibcall:
+       lls r1, r1, 2 ; *4
+fibmem:
+       add r2, r10, r1
+       ldw r0, 0(r2)
+       cmpi r0, 0
+       retnz-
+       push r2 ; addr pushen
+       subi r1, r1, 4
+       call+ fibmem
+       ldw r2, 0-4(r2)
+       add r0, r2, r0
+       pop r2 ; addr poppen
+       stw r0, 0(r2) ; ergebnis speichern
+       addi r1, r1, 4
+       ret+