From: Bernhard Urban Date: Tue, 9 Nov 2010 21:12:15 +0000 (+0100) Subject: bench: fibmem.s @ 193 instructions X-Git-Tag: bootrom_v1~161 X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=commitdiff_plain;h=d599ee320dc29170d19a76a25a82744881fc64fc bench: fibmem.s @ 193 instructions --- diff --git a/3_test/fibmem.s b/3_test/fibmem.s new file mode 120000 index 0000000..53fcd01 --- /dev/null +++ b/3_test/fibmem.s @@ -0,0 +1 @@ +../8_benchs/src/fibmem.s \ No newline at end of file diff --git a/3a_asm/DT.hs b/3a_asm/DT.hs index 907bea7..d4ad490 100644 --- a/3a_asm/DT.hs +++ b/3a_asm/DT.hs @@ -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 diff --git a/3b_sim/sim.cpp b/3b_sim/sim.cpp index 349c41a..a5c970f 100644 --- a/3b_sim/sim.cpp +++ b/3b_sim/sim.cpp @@ -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 &)> Func; diff --git a/8_benchs/src/fibmem.s b/8_benchs/src/fibmem.s new file mode 100644 index 0000000..c848735 --- /dev/null +++ b/8_benchs/src/fibmem.s @@ -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+