--- /dev/null
+../8_benchs/src/fibmem.s
\ No newline at end of file
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
#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;
--- /dev/null
+.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+