projects
/
calu.git
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
history
|
raw
|
HEAD
progs/sum: cycles--
[calu.git]
/
progs
/
sum.s
1
#include "dt_inc.s"
2
.data
3
.org 0x0
4
arr:
5
.fill 2
6
.fill 3
7
.fill 5
8
.fill 7
9
.fill 11
10
.fill 13
11
.fill 17
12
.fill 19
13
.fill 23
14
.fill 29
15
.fill 31
16
.fill 37
17
.fill 41
18
.fill 43
19
.fill 47
20
.fill 53
21
str:
22
.ascii "hier das ergebnis: "
23
.text
24
.org 0x0
25
start:
26
br+ main
27
br+ main
28
ret
29
main:
30
call+ u_init
31
call+ u_recv_byte
32
call u_send_newline
33
34
; benchprolog
35
call t_init
36
call t_stop
37
ldis r1, 0
38
call t_valset
39
call t_start
40
; /benchprolog
41
42
; sum start
43
ldis r1, 16
44
ldis r2, arr@lo
45
ldih r2, arr@hi
46
call+ sum
47
; sum ende
48
49
; benchepilog
50
push r0
51
call+ t_init
52
call+ t_stop
53
call+ t_valget
54
subi r0, r0, 0xc ; offset abziehen
55
pop r3
56
push r0
57
push r3
58
; /benchepilog
59
60
call u_init ; weil r10 ueberschrieben wird
61
ldis r1, str@lo
62
ldih r1, str@hi
63
ldis r2, 19
64
call u_send_string
65
66
pop r1
67
call+ u_send_uint
68
call u_send_newline
69
pop r1
70
call+ u_send_uint
71
call u_send_newline
72
73
br+ main
74
75
sum:
76
;r1 = len
77
;r2 = arr
78
;r3 = i
79
;r0 = sum
80
;r4 arr data
81
ldis r0, 0
82
83
addi r3, r1, 0
84
andx r1, 0x3
85
86
cmpi r1, 0
87
breq+ go_loop
88
89
cmpi r1, 1
90
addideq r3, r3, 3
91
subideq r2, r2, 12
92
breq- loop1
93
94
cmpi r1, 2
95
addideq r3, r3, 2
96
subideq r2, r2, 8
97
breq- loop2
98
99
cmpi r1, 3
100
addideq r3, r3, 1
101
subideq r2, r2, 4
102
breq- loop3
103
104
go_loop:
105
addi r3, r3, 4
106
loop:
107
subi r3, r3, 4
108
retzs-
109
ldw r4, 0(r2)
110
add r0, r0, r4
111
112
loop3:
113
ldw r4, 4(r2)
114
add r0, r0, r4
115
116
loop2:
117
ldw r4, 8(r2)
118
add r0, r0, r4
119
120
loop1:
121
ldw r4, 12(r2)
122
add r0, r0, r4
123
124
addi r2, r2, 4*4
125
br+ loop