]> git.proxmox.com Git - mirror_qemu.git/blob - tests/xtensa/test_mmu.S
vga: optimize ppm_save() divisions
[mirror_qemu.git] / tests / xtensa / test_mmu.S
1 .include "macros.inc"
2
3 test_suite mmu
4
5 .purgem test
6
7 .macro test name
8 movi a2, 0x00000004
9 idtlb a2
10 movi a2, 0x00100004
11 idtlb a2
12 movi a2, 0x00200004
13 idtlb a2
14 movi a2, 0x00300004
15 idtlb a2
16 movi a2, 0x00000007
17 idtlb a2
18 .endm
19
20 test tlb_group
21 movi a2, 0x04000002 /* PPN */
22 movi a3, 0x01200004 /* VPN */
23 wdtlb a2, a3
24 witlb a2, a3
25 movi a3, 0x00200004
26 rdtlb0 a1, a3
27 ritlb0 a2, a3
28 movi a3, 0x01000001
29 assert eq, a1, a3
30 assert eq, a2, a3
31 movi a3, 0x00200004
32 rdtlb1 a1, a3
33 ritlb1 a2, a3
34 movi a3, 0x04000002
35 assert eq, a1, a3
36 assert eq, a2, a3
37 movi a3, 0x01234567
38 pdtlb a1, a3
39 pitlb a2, a3
40 movi a3, 0x01234014
41 assert eq, a1, a3
42 movi a3, 0x0123400c
43 assert eq, a2, a3
44 movi a3, 0x00200004
45 idtlb a3
46 iitlb a3
47 movi a3, 0x01234567
48 pdtlb a1, a3
49 pitlb a2, a3
50 movi a3, 0x00000010
51 and a1, a1, a3
52 assert eqi, a1, 0
53 movi a3, 0x00000008
54 and a2, a2, a3
55 assert eqi, a2, 0
56 test_end
57
58 test itlb_miss
59 set_vector kernel, 1f
60
61 movi a3, 0x00100000
62 jx a3
63 test_fail
64 1:
65 rsr a2, excvaddr
66 assert eq, a2, a3
67 rsr a2, exccause
68 movi a3, 16
69 assert eq, a2, a3
70 test_end
71
72 test dtlb_miss
73 set_vector kernel, 1f
74
75 movi a3, 0x00100000
76 l8ui a2, a3, 0
77 test_fail
78 1:
79 rsr a2, excvaddr
80 assert eq, a2, a3
81 rsr a2, exccause
82 movi a3, 24
83 assert eq, a2, a3
84 test_end
85
86 test itlb_multi_hit
87 set_vector kernel, 1f
88
89 movi a2, 0x04000002 /* PPN */
90 movi a3, 0xf0000004 /* VPN */
91 witlb a2, a3
92 movi a3, 0xf0000000
93 pitlb a2, a3
94 test_fail
95 1:
96 rsr a2, exccause
97 movi a3, 17
98 assert eq, a2, a3
99 test_end
100
101 test dtlb_multi_hit
102 set_vector kernel, 1f
103
104 movi a2, 0x04000002 /* PPN */
105 movi a3, 0x01200004 /* VPN */
106 wdtlb a2, a3
107 movi a3, 0x01200007 /* VPN */
108 wdtlb a2, a3
109 movi a3, 0x01200000
110 pdtlb a2, a3
111 test_fail
112 1:
113 rsr a2, exccause
114 movi a3, 25
115 assert eq, a2, a3
116 test_end
117
118 test inst_fetch_privilege
119 set_vector kernel, 3f
120
121 movi a2, 0x4004f
122 wsr a2, ps
123 1:
124 isync
125 nop
126 2:
127 test_fail
128 3:
129 movi a1, 1b
130 rsr a2, excvaddr
131 rsr a3, epc1
132 assert ge, a2, a1
133 assert ge, a3, a1
134 movi a1, 2b
135 assert lt, a2, a1
136 assert lt, a3, a1
137 rsr a2, exccause
138 movi a3, 18
139 assert eq, a2, a3
140 rsr a2, ps
141 movi a3, 0x4005f
142 assert eq, a2, a3
143 test_end
144
145 test load_store_privilege
146 set_vector kernel, 2f
147
148 movi a3, 10f
149 pitlb a3, a3
150 ritlb1 a2, a3
151 movi a1, 0x10
152 or a2, a2, a1
153 movi a1, 0x000ff000
154 and a3, a3, a1
155 movi a1, 4
156 or a3, a3, a1
157 witlb a2, a3
158 movi a3, 10f
159 movi a1, 0x000fffff
160 and a1, a3, a1
161
162 movi a2, 0x04000003 /* PPN */
163 movi a3, 0x01200004 /* VPN */
164 wdtlb a2, a3
165 movi a3, 0x01200001
166 movi a2, 0x4004f
167 jx a1
168 10:
169 wsr a2, ps
170 isync
171 1:
172 l8ui a2, a3, 0
173 test_fail
174 2:
175 rsr a2, excvaddr
176 assert eq, a2, a3
177 rsr a2, epc1
178 movi a3, 1b
179 movi a1, 0x000fffff
180 and a3, a3, a1
181 assert eq, a2, a3
182 rsr a2, exccause
183 movi a3, 26
184 assert eq, a2, a3
185 rsr a2, ps
186 movi a3, 0x4005f
187 assert eq, a2, a3
188 test_end
189
190 test cring_load_store_privilege
191 set_vector kernel, 0
192 set_vector double, 2f
193
194 movi a2, 0x04000003 /* PPN */
195 movi a3, 0x01200004 /* VPN */
196 wdtlb a2, a3
197 movi a3, 0x01200004
198 movi a2, 0x4005f /* ring 1 + excm => cring == 0 */
199 wsr a2, ps
200 isync
201 l8ui a2, a3, 0 /* cring used */
202 1:
203 l32e a2, a3, -4 /* ring used */
204 test_fail
205 2:
206 rsr a2, excvaddr
207 addi a2, a2, 4
208 assert eq, a2, a3
209 rsr a2, depc
210 movi a3, 1b
211 assert eq, a2, a3
212 rsr a2, exccause
213 movi a3, 26
214 assert eq, a2, a3
215 rsr a2, ps
216 movi a3, 0x4005f
217 assert eq, a2, a3
218 test_end
219
220 test inst_fetch_prohibited
221 set_vector kernel, 2f
222
223 movi a3, 10f
224 pitlb a3, a3
225 ritlb1 a2, a3
226 movi a1, 0xfffff000
227 and a2, a2, a1
228 movi a1, 0x4
229 or a2, a2, a1
230 movi a1, 0x000ff000
231 and a3, a3, a1
232 movi a1, 4
233 or a3, a3, a1
234 witlb a2, a3
235 movi a3, 10f
236 movi a1, 0x000fffff
237 and a1, a3, a1
238 jx a1
239 .align 4
240 10:
241 nop
242 test_fail
243 2:
244 rsr a2, excvaddr
245 assert eq, a2, a1
246 rsr a2, epc1
247 assert eq, a2, a1
248 rsr a2, exccause
249 movi a3, 20
250 assert eq, a2, a3
251 test_end
252
253 test load_prohibited
254 set_vector kernel, 2f
255
256 movi a2, 0x0400000c /* PPN */
257 movi a3, 0x01200004 /* VPN */
258 wdtlb a2, a3
259 movi a3, 0x01200002
260 1:
261 l8ui a2, a3, 0
262 test_fail
263 2:
264 rsr a2, excvaddr
265 assert eq, a2, a3
266 rsr a2, epc1
267 movi a3, 1b
268 assert eq, a2, a3
269 rsr a2, exccause
270 movi a3, 28
271 assert eq, a2, a3
272 test_end
273
274 test store_prohibited
275 set_vector kernel, 2f
276
277 movi a2, 0x04000001 /* PPN */
278 movi a3, 0x01200004 /* VPN */
279 wdtlb a2, a3
280 movi a3, 0x01200003
281 l8ui a2, a3, 0
282 1:
283 s8i a2, a3, 0
284 test_fail
285 2:
286 rsr a2, excvaddr
287 assert eq, a2, a3
288 rsr a2, epc1
289 movi a3, 1b
290 assert eq, a2, a3
291 rsr a2, exccause
292 movi a3, 29
293 assert eq, a2, a3
294 test_end
295
296 test dtlb_autoload
297 set_vector kernel, 0
298
299 movi a2, 0xd4000000
300 wsr a2, ptevaddr
301 movi a3, 0x00001013
302 s32i a3, a2, 4
303 pdtlb a2, a3
304 movi a1, 0x10
305 and a1, a1, a2
306 assert eqi, a1, 0
307 l8ui a1, a3, 0
308 pdtlb a2, a3
309 movi a1, 0xfffff010
310 and a1, a1, a2
311 movi a3, 0x00001010
312 assert eq, a1, a3
313 movi a1, 0xf
314 and a1, a1, a2
315 assert lti, a1, 4
316 test_end
317
318 test_suite_end