bench: fibmem.s @ 193 instructions
authorBernhard Urban <lewurm@gmail.com>
Tue, 9 Nov 2010 21:12:15 +0000 (22:12 +0100)
committerBernhard Urban <lewurm@gmail.com>
Tue, 9 Nov 2010 21:12:15 +0000 (22:12 +0100)
3_test/fibmem.s [new symlink]
3a_asm/DT.hs
3b_sim/sim.cpp
8_benchs/src/fibmem.s [new file with mode: 0644]

diff --git a/3_test/fibmem.s b/3_test/fibmem.s
new file mode 120000 (symlink)
index 0000000..53fcd01
--- /dev/null
@@ -0,0 +1 @@
+../8_benchs/src/fibmem.s
\ No newline at end of file
index 907bea715d565c88d09b0454120ae4e8a3a2afa7..d4ad4901ea6130abd1550fd430a923e1dd639a14 100644 (file)
@@ -50,7 +50,7 @@ iLit (_,d) = do
 
 iLit5  d = do i <- iLit d; return $ i .&. 0x001f
 iLit12 d = do i <- iLit d; return $ i .&. 0x0fff
-iLit15 d = do i <- iLit d; return $ i .&. 0xefff
+iLit15 d = do i <- iLit d; return $ i .&. 0x7fff
 iLit16 d = do i <- iLit d; return $ i .&. 0xffff
 
 imm4 :: Parser String
index 349c41a471ed70459b0d7f324b8f1110843cb6e7..a5c970f46302524d2a5d62235e999aaf5d86c8b9 100644 (file)
@@ -20,8 +20,8 @@
 #include "SReadline/SReadline.h"
 using namespace swift;
 
-#define RAM_END (1000)
-#define PROG_END (1000)
+#define RAM_END (0x1000)
+#define PROG_END (0x1000)
 #define REG_COUNT (16)
 
 typedef boost::function<void (const vector<string> &)> Func;
diff --git a/8_benchs/src/fibmem.s b/8_benchs/src/fibmem.s
new file mode 100644 (file)
index 0000000..c848735
--- /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
+       ldih r10, list@hi
+       call+ fibmem;
+       br+ main;
+
+       ; if (list[n] == true) {
+       ;       return list[n]
+       ; }
+       ; erg = list[n] = fib(n-1) + (n-2)
+       ; return erg
+fibmem:
+       lls r2, r1, 2 ; * 4
+       add r2, r10, r2
+       ldw r0, 0(r2)
+       cmpi r0, 0
+       retnz-
+       push r2 ; addr pushen
+       push r1 ; param pushen
+       subi r1, r1, 1
+       call+ fibmem
+       pop r1 ; param poppen
+       push r0 ; zwischenerg pushen
+       subi r1, r1, 2
+       call+ fibmem
+       pop r2 ; zwischenerg poppen
+       add r0, r2, r0
+       pop r2 ; addr poppen
+       stw r0, 0(r2) ; ergebnis speichern
+       ret+