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