1#include <variant/core.h>
2#include <asm/regs.h>
3#include <asm/asmmacro.h>
4#include <asm/cacheasm.h>
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#define STACK_SIZE 32768
28#define HEAP_SIZE (131072*4)
29
30
31
32
33 .section .start, "ax"
34
35 .globl __start
36
37__start:
38 entry sp, 32
39 _call0 _start
40__start_a0:
41 .align 4
42
43 .section .text, "ax"
44 .begin literal_prefix .text
45
46
47
48 .globl _start
49_start:
50
51
52
53 movi a4, 1
54 wsr a4, ps
55 rsync
56
57 rsr a5, windowbase
58 ssl a5
59 sll a4, a4
60 wsr a4, windowstart
61 rsync
62
63 movi a4, 0x00040000
64 wsr a4, ps
65 rsync
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 movi a4, __start
82 movi a5, __start_a0
83 add a4, a0, a4
84 sub a0, a4, a5
85
86 movi a4, __start
87 movi a5, __reloc_end
88
89
90
91
92
93 mov.n a7, a0
94 mov.n a8, a4
95
961:
97 l32i a10, a7, 0
98 l32i a11, a7, 4
99 s32i a10, a8, 0
100 s32i a11, a8, 4
101 l32i a10, a7, 8
102 l32i a11, a7, 12
103 s32i a10, a8, 8
104 s32i a11, a8, 12
105 addi a8, a8, 16
106 addi a7, a7, 16
107 blt a8, a5, 1b
108
109
110
111
112
113
114 ___flush_dcache_all a5 a6
115
116#endif
117
118 ___invalidate_icache_all a5 a6
119 isync
120
121 movi a11, _reloc
122 jx a11
123
124 .globl _reloc
125_reloc:
126
127
128
129
130
131
132
133
134
135
136
137
138 movi a6, _param_start
139 add a3, a2, a3
1402:
141 l32i a8, a2, 0
142 s32i a8, a6, 0
143 addi a2, a2, 4
144 addi a6, a6, 4
145 blt a2, a3, 2b
146#endif
147
148
149 movi a6, __bss_start
150 movi a7, __bss_end
151 movi.n a5, 0
1523:
153 s32i a5, a6, 0
154 addi a6, a6, 4
155 blt a6, a7, 3b
156
157 movi a5, -16
158 movi a1, _stack + STACK_SIZE
159 and a1, a1, a5
160
161
162
163
164
165
166
167 movi a3, __image_load
168 sub a4, a3, a4
169 add a8, a0, a4
170
171
172
173
174 movi a6, _image_start
175 movi a10, _image_end
176 movi a7, 0x1000000
177 sub a11, a10, a6
178 movi a9, complen
179 s32i a11, a9, 0
180
181 movi a0, 0
182
183
184
185
186
187
188 .extern gunzip
189 movi a4, gunzip
190 beqz a4, 1f
191
192 callx4 a4
193
194 j 2f
195
196
197
198
199
200
201
202
2031:
204 l32i a9, a8, 0
205 l32i a11, a8, 4
206 s32i a9, a6, 0
207 s32i a11, a6, 4
208 l32i a9, a8, 8
209 l32i a11, a8, 12
210 s32i a9, a6, 8
211 s32i a11, a6, 12
212 addi a6, a6, 16
213 addi a8, a8, 16
214 blt a6, a10, 1b
215
216
217
2182:
219
220
221 ___flush_dcache_all a5 a6
222
223#endif
224
225 ___invalidate_icache_all a5 a6
226
227 isync
228
229
230
231 movi a0, _image_start
232 jx a0
233
234 .align 16
235 .data
236 .globl avail_ram
237avail_ram:
238 .long _heap
239 .globl end_avail
240end_avail:
241 .long _heap + HEAP_SIZE
242
243 .comm _stack, STACK_SIZE
244 .comm _heap, HEAP_SIZE
245
246 .globl end_avail
247 .comm complen, 4
248
249 .end literal_prefix
250