From 686b8a07e52c2bf215ae39d02a949d6ee58a5af4 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Sun, 16 Jan 2011 15:09:27 +0100 Subject: [PATCH] progs: added remaining benchmarks and offset correction for timer --- progs/Makefile | 6 ++++ progs/datadeps.s | 40 +++++++++++++++++++++ progs/deepjit.s | 2 +- progs/fibmmem.s | 2 +- progs/max.s | 91 +++++++++++++++++++++++++++++++++++++++++++++++ progs/sum.s | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 231 insertions(+), 2 deletions(-) create mode 100644 progs/datadeps.s create mode 100644 progs/max.s create mode 100644 progs/sum.s diff --git a/progs/Makefile b/progs/Makefile index 434d2ea..bf6de15 100644 --- a/progs/Makefile +++ b/progs/Makefile @@ -33,6 +33,9 @@ all: fibmmem.prog fibmmem.prog: testbench.prog: deepjit.prog: +datadeps.prog: +sum.prog: +max.prog: %.prog: %.dthex @echo " PROG $<" ../tools/dtprog.py $< $(DPROGFLAGS) @@ -48,6 +51,9 @@ deepjit.prog: fibmmem.sim: testbench.sim: deepjit.sim: +datadeps.sim: +sum.sim: +max.sim: %.sim: %.dthex_sim @echo " SIM $<" cd ../3b_sim/; ./sim -f ../progs/$< diff --git a/progs/datadeps.s b/progs/datadeps.s new file mode 100644 index 0000000..c3ba725 --- /dev/null +++ b/progs/datadeps.s @@ -0,0 +1,40 @@ +#include "dt_inc.s" + +.text +.org 0x0 +start: + br+ main + br+ main + ret +main: + call u_init + call u_recv_byte + ; benchprolog + call t_init + call t_stop + ldis r1, 0 + call t_valset + call+ t_start + ; /benchprolog + +datadeps: + ldi r1, 7; + ldi r2, 5; + ldi r3, 4; + add r4, r2, r3; + and r5, r4, r1; + + ; benchepilog + call+ t_init + call+ t_stop + call+ t_valget + subi r0, r0, 0xc ; offset abziehen + push r0 + ; /benchepilog + + call u_init ; weil r10 ueberschrieben wird + pop r1 + call+ u_send_uint + call u_send_newline + + br+ main diff --git a/progs/deepjit.s b/progs/deepjit.s index 5f8d62b..c5ab1ff 100644 --- a/progs/deepjit.s +++ b/progs/deepjit.s @@ -157,7 +157,7 @@ main: call+ t_init call+ t_stop call+ t_valget - subi r0, r0, 0xd ; offset abziehen + subi r0, r0, 0xc ; offset abziehen pop r3 push r0 push r3 diff --git a/progs/fibmmem.s b/progs/fibmmem.s index 001dcf3..be971d6 100644 --- a/progs/fibmmem.s +++ b/progs/fibmmem.s @@ -39,7 +39,7 @@ main: call+ t_init call+ t_stop call+ t_valget - subi r0, r0, 0xd ; offset abziehen + subi r0, r0, 0xc ; offset abziehen pop r3 push r0 push r3 diff --git a/progs/max.s b/progs/max.s new file mode 100644 index 0000000..0008d64 --- /dev/null +++ b/progs/max.s @@ -0,0 +1,91 @@ +#include "dt_inc.s" +.data +.org 0x0 +arr: + .fill 2 + .fill 3 + .fill 5 + .fill 7 + .fill 11 + .fill 13 + .fill 17 + .fill 19 + .fill 23 + .fill 29 + .fill 31 + .fill 37 + .fill 41 + .fill 43 + .fill 47 + .fill 53 + +str: + .ascii "hier das ergebnis: " +.text +.org 0x0 +start: + br+ main + br+ main + ret +main: + call+ u_init + call+ u_recv_byte + call u_send_newline + + ; benchprolog + call t_init + call t_stop + ldis r1, 0 + call t_valset + call t_start + ; /benchprolog + + ; max start + ldis r1, 16 + ldil r2, arr@lo + ldih r2, arr@hi + + call+ max + ; max end + + ; benchepilog + push r0 + call+ t_init + call+ t_stop + call+ t_valget + subi r0, r0, 0xc ; offset abziehen + pop r3 + push r0 + push r3 + ; /benchepilog + + call u_init ; weil r10 ueberschrieben wird + ldis r1, str@lo + ldih r1, str@hi + ldis r2, 19 + call u_send_string + + pop r1 + call+ u_send_uint + call u_send_newline + pop r1 + call+ u_send_uint + call u_send_newline + + br+ main + +max: + ; r1 = len + ; r2 = arr + ; r4 = arr[x] + ; r0 = x = arr[0] + ldw r0, 0(r2) + subi r1, r1, 1 +maxloop: + ldw r4, 4(r2) + cmp r0, r4 + movlt r0, r4 + subi r1, r1, 1 + addid r2, r2, 4 + brnq+ maxloop + ret+ diff --git a/progs/sum.s b/progs/sum.s new file mode 100644 index 0000000..d762c60 --- /dev/null +++ b/progs/sum.s @@ -0,0 +1,92 @@ +#include "dt_inc.s" +.data +.org 0x0 +arr: + .fill 2 + .fill 3 + .fill 5 + .fill 7 + .fill 11 + .fill 13 + .fill 17 + .fill 19 + .fill 23 + .fill 29 + .fill 31 + .fill 37 + .fill 41 + .fill 43 + .fill 47 + .fill 53 +str: + .ascii "hier das ergebnis: " +.text +.org 0x0 +start: + br+ main + br+ main + ret +main: + call+ u_init + call+ u_recv_byte + call u_send_newline + + ; benchprolog + call t_init + call t_stop + ldis r1, 0 + call t_valset + call t_start + ; /benchprolog + + ; sum start + ldis r1, 16 + ldis r2, arr@lo + ldih r2, arr@hi + call+ sum + ; sum ende + + ; benchepilog + push r0 + call+ t_init + call+ t_stop + call+ t_valget + subi r0, r0, 0xc ; offset abziehen + pop r3 + push r0 + push r3 + ; /benchepilog + + call u_init ; weil r10 ueberschrieben wird + ldis r1, str@lo + ldih r1, str@hi + ldis r2, 19 + call u_send_string + + pop r1 + call+ u_send_uint + call u_send_newline + pop r1 + call+ u_send_uint + call u_send_newline + + br+ main + +sum: + ;r1 = len + ;r2 = arr + ;r3 = i + ;r0 = sum + ;r4 arr data + ldis r0, 0 + addi r3, r1, 0 + retzs- ; check len != 0 +loop: + ;load arr data + ldw r4, 0(r2) + ;sum += arr[i]; + add r0, r0, r4 + addi r2, r2, 4 + subi r3, r3, 1 + brnz+ loop + ret -- 2.25.1