progs: added remaining benchmarks and offset correction for timer
authorBernhard Urban <lewurm@gmail.com>
Sun, 16 Jan 2011 14:09:27 +0000 (15:09 +0100)
committerBernhard Urban <lewurm@gmail.com>
Sun, 16 Jan 2011 14:09:27 +0000 (15:09 +0100)
progs/Makefile
progs/datadeps.s [new file with mode: 0644]
progs/deepjit.s
progs/fibmmem.s
progs/max.s [new file with mode: 0644]
progs/sum.s [new file with mode: 0644]

index 434d2eaed621cf3fc55da10c7de4aadd976fd563..bf6de1593e7a7b1215317316fbd90744543939a0 100644 (file)
@@ -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 (file)
index 0000000..c3ba725
--- /dev/null
@@ -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
index 5f8d62b30a89816ba5674413dfe2336e04892ade..c5ab1ff2445031c76b083dedce7cd8b283df0178 100644 (file)
@@ -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
index 001dcf396a7c8b974b0e7485af4f77d07b328d84..be971d66347e191c5d48d46c0287ec099da6ddcf 100644 (file)
@@ -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 (file)
index 0000000..0008d64
--- /dev/null
@@ -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 (file)
index 0000000..d762c60
--- /dev/null
@@ -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