Statistics
| Branch: | Revision:

root / tests / tcg / xtensa / test_windowed.S @ c09015dd

History | View | Annotate | Download (5.4 kB)

1 7d890b40 Max Filippov
.include "macros.inc"
2 7d890b40 Max Filippov
3 7d890b40 Max Filippov
test_suite windowed
4 7d890b40 Max Filippov
5 7d890b40 Max Filippov
.altmacro
6 7d890b40 Max Filippov
7 7d890b40 Max Filippov
.macro reset_window start
8 7d890b40 Max Filippov
    movi    a2, 0xff
9 7d890b40 Max Filippov
    wsr     a2, windowstart
10 7d890b40 Max Filippov
    rsync
11 7d890b40 Max Filippov
    movi    a2, 0
12 7d890b40 Max Filippov
    wsr     a2, windowbase
13 7d890b40 Max Filippov
    rsync
14 7d890b40 Max Filippov
    movi    a2, \start
15 7d890b40 Max Filippov
    wsr     a2, windowstart
16 7d890b40 Max Filippov
    rsync
17 7d890b40 Max Filippov
.endm
18 7d890b40 Max Filippov
19 7d890b40 Max Filippov
.macro overflow_test shift, window, probe_ok, probe_ex
20 7d890b40 Max Filippov
    set_vector window_overflow_4, 0
21 7d890b40 Max Filippov
    set_vector window_overflow_8, 0
22 7d890b40 Max Filippov
    set_vector window_overflow_12, 0
23 7d890b40 Max Filippov
24 7d890b40 Max Filippov
    movi    a2, 1 | (((1 << ((\window) / 4)) | 1) << ((\shift) / 4))
25 7d890b40 Max Filippov
    wsr     a2, windowstart
26 7d890b40 Max Filippov
    reset_ps
27 7d890b40 Max Filippov
28 7d890b40 Max Filippov
    mov     a2, a\probe_ok
29 7d890b40 Max Filippov
    set_vector window_overflow_\window, 10f
30 7d890b40 Max Filippov
1:
31 7d890b40 Max Filippov
    mov     a2, a\probe_ex
32 7d890b40 Max Filippov
    test_fail
33 7d890b40 Max Filippov
10:
34 7d890b40 Max Filippov
    rsr     a2, epc1
35 7d890b40 Max Filippov
    movi    a3, 1b
36 7d890b40 Max Filippov
    assert  eq, a2, a3
37 7d890b40 Max Filippov
    movi    a2, 2f
38 7d890b40 Max Filippov
    wsr     a2, epc1
39 7d890b40 Max Filippov
40 7d890b40 Max Filippov
    rsr     a2, windowbase
41 7d890b40 Max Filippov
    movi    a3, (\shift) / 4
42 7d890b40 Max Filippov
    assert  eq, a2, a3
43 7d890b40 Max Filippov
    rsr     a2, ps
44 7d890b40 Max Filippov
    movi    a3, 0x4001f
45 7d890b40 Max Filippov
    assert  eq, a2, a3
46 7d890b40 Max Filippov
    rfwo
47 7d890b40 Max Filippov
    test_fail
48 7d890b40 Max Filippov
2:
49 7d890b40 Max Filippov
    rsr     a2, windowbase
50 7d890b40 Max Filippov
    assert  eqi, a2, 0
51 7d890b40 Max Filippov
    rsr     a2, windowstart
52 7d890b40 Max Filippov
    movi    a3, 1 | ((1 << ((\window) / 4)) << ((\shift) / 4))
53 7d890b40 Max Filippov
    assert  eq, a2, a3
54 7d890b40 Max Filippov
    rsr     a2, ps
55 7d890b40 Max Filippov
    movi    a3, 0x4000f
56 7d890b40 Max Filippov
    assert  eq, a2, a3
57 7d890b40 Max Filippov
.endm
58 7d890b40 Max Filippov
59 7d890b40 Max Filippov
.macro overflow_tests shift, window, probe
60 7d890b40 Max Filippov
    .if \probe < 15
61 7d890b40 Max Filippov
    overflow_test \shift, \window, %((\shift) - 1), \probe
62 7d890b40 Max Filippov
    overflow_tests \shift, \window, %((\probe) + 1)
63 7d890b40 Max Filippov
    .endif
64 7d890b40 Max Filippov
.endm
65 7d890b40 Max Filippov
66 7d890b40 Max Filippov
.macro all_overflow_tests
67 7d890b40 Max Filippov
    .irp shift, 4, 8, 12
68 7d890b40 Max Filippov
    .irp window, 4, 8, 12
69 7d890b40 Max Filippov
    overflow_tests \shift, \window, \shift
70 7d890b40 Max Filippov
    .endr
71 7d890b40 Max Filippov
    .endr
72 7d890b40 Max Filippov
.endm
73 7d890b40 Max Filippov
74 7d890b40 Max Filippov
test overflow
75 7d890b40 Max Filippov
    all_overflow_tests
76 7d890b40 Max Filippov
test_end
77 7d890b40 Max Filippov
78 7d890b40 Max Filippov
79 7d890b40 Max Filippov
.macro underflow_test window
80 7d890b40 Max Filippov
    set_vector window_underflow_4, 0
81 7d890b40 Max Filippov
    set_vector window_underflow_8, 0
82 7d890b40 Max Filippov
    set_vector window_underflow_12, 0
83 7d890b40 Max Filippov
84 7d890b40 Max Filippov
    set_vector window_underflow_\window, 10f
85 7d890b40 Max Filippov
86 7d890b40 Max Filippov
    reset_window 1
87 7d890b40 Max Filippov
    reset_ps
88 7d890b40 Max Filippov
89 7d890b40 Max Filippov
    ssai    2
90 7d890b40 Max Filippov
    movi    a2, 2f
91 7d890b40 Max Filippov
    slli    a2, a2, 2
92 7d890b40 Max Filippov
    movi    a3, (\window) / 4
93 7d890b40 Max Filippov
    src     a0, a3, a2
94 7d890b40 Max Filippov
1:
95 7d890b40 Max Filippov
    retw
96 7d890b40 Max Filippov
    test_fail
97 7d890b40 Max Filippov
10:
98 7d890b40 Max Filippov
    rsr     a2, epc1
99 7d890b40 Max Filippov
    movi    a3, 1b
100 7d890b40 Max Filippov
    assert  eq, a2, a3
101 7d890b40 Max Filippov
    movi    a2, 2f
102 7d890b40 Max Filippov
    wsr     a2, epc1
103 7d890b40 Max Filippov
104 7d890b40 Max Filippov
    rsr     a2, ps
105 7d890b40 Max Filippov
    movi    a3, 0x4001f
106 7d890b40 Max Filippov
    assert  eq, a2, a3
107 7d890b40 Max Filippov
    rsr     a2, windowbase
108 7d890b40 Max Filippov
    assert  eqi, a2, 8 - ((\window) / 4)
109 7d890b40 Max Filippov
    rsr     a2, windowstart
110 7d890b40 Max Filippov
    assert  eqi, a2, 1
111 7d890b40 Max Filippov
    rfwu
112 7d890b40 Max Filippov
2:
113 7d890b40 Max Filippov
    rsr     a2, ps
114 7d890b40 Max Filippov
    movi    a3, 0x4000f
115 7d890b40 Max Filippov
    assert  eq, a2, a3
116 7d890b40 Max Filippov
    rsr     a2, windowbase
117 7d890b40 Max Filippov
    assert  eqi, a2, 0
118 7d890b40 Max Filippov
    rsr     a2, windowstart
119 7d890b40 Max Filippov
    assert  bsi, a2, 0
120 7d890b40 Max Filippov
    assert  bsi, a2, 8 - ((\window) / 4)
121 7d890b40 Max Filippov
.endm
122 7d890b40 Max Filippov
123 7d890b40 Max Filippov
test underflow
124 7d890b40 Max Filippov
    set_vector window_overflow_4, 0
125 7d890b40 Max Filippov
    set_vector window_overflow_8, 0
126 7d890b40 Max Filippov
    set_vector window_overflow_12, 0
127 7d890b40 Max Filippov
128 7d890b40 Max Filippov
    underflow_test 4
129 7d890b40 Max Filippov
    underflow_test 8
130 7d890b40 Max Filippov
    underflow_test 12
131 7d890b40 Max Filippov
test_end
132 7d890b40 Max Filippov
133 7d890b40 Max Filippov
134 7d890b40 Max Filippov
.macro retw_test window
135 7d890b40 Max Filippov
    reset_window %(1 | (1 << (8 - (\window) / 4)))
136 7d890b40 Max Filippov
    reset_ps
137 7d890b40 Max Filippov
138 7d890b40 Max Filippov
    ssai    2
139 7d890b40 Max Filippov
    movi    a2, 1f
140 7d890b40 Max Filippov
    slli    a2, a2, 2
141 7d890b40 Max Filippov
    movi    a3, (\window) / 4
142 7d890b40 Max Filippov
    src     a0, a3, a2
143 7d890b40 Max Filippov
    retw
144 7d890b40 Max Filippov
    test_fail
145 7d890b40 Max Filippov
1:
146 7d890b40 Max Filippov
    rsr     a2, ps
147 7d890b40 Max Filippov
    movi    a3, 0x4000f
148 7d890b40 Max Filippov
    assert  eq, a2, a3
149 7d890b40 Max Filippov
    rsr     a2, windowbase
150 7d890b40 Max Filippov
    assert  eqi, a2, 8 - ((\window) / 4)
151 7d890b40 Max Filippov
    rsr     a2, windowstart
152 7d890b40 Max Filippov
    assert  bci, a2, 0
153 7d890b40 Max Filippov
    assert  bsi, a2, 8 - ((\window) / 4)
154 7d890b40 Max Filippov
.endm
155 7d890b40 Max Filippov
156 7d890b40 Max Filippov
test retw
157 7d890b40 Max Filippov
    set_vector window_underflow_4, 0
158 7d890b40 Max Filippov
    set_vector window_underflow_8, 0
159 7d890b40 Max Filippov
    set_vector window_underflow_12, 0
160 7d890b40 Max Filippov
161 7d890b40 Max Filippov
    retw_test 4
162 7d890b40 Max Filippov
    retw_test 8
163 7d890b40 Max Filippov
    retw_test 12
164 7d890b40 Max Filippov
test_end
165 7d890b40 Max Filippov
166 7d890b40 Max Filippov
test movsp
167 7d890b40 Max Filippov
    set_vector kernel, 2f
168 7d890b40 Max Filippov
169 7d890b40 Max Filippov
    reset_window 1
170 7d890b40 Max Filippov
    reset_ps
171 7d890b40 Max Filippov
1:
172 7d890b40 Max Filippov
    movsp   a2, a3
173 7d890b40 Max Filippov
    test_fail
174 7d890b40 Max Filippov
2:
175 7d890b40 Max Filippov
    rsr     a2, exccause
176 7d890b40 Max Filippov
    assert  eqi, a2, 5
177 7d890b40 Max Filippov
    rsr     a2, epc1
178 7d890b40 Max Filippov
    movi    a3, 1b
179 7d890b40 Max Filippov
    assert  eq, a2, a3
180 7d890b40 Max Filippov
181 7d890b40 Max Filippov
    set_vector kernel, 0
182 7d890b40 Max Filippov
183 7d890b40 Max Filippov
    reset_window 0x81
184 7d890b40 Max Filippov
    reset_ps
185 7d890b40 Max Filippov
186 7d890b40 Max Filippov
    movsp   a2, a3
187 7d890b40 Max Filippov
test_end
188 7d890b40 Max Filippov
189 7d890b40 Max Filippov
test rotw
190 7d890b40 Max Filippov
    reset_window 0x4b
191 7d890b40 Max Filippov
    reset_ps
192 7d890b40 Max Filippov
193 7d890b40 Max Filippov
    movi    a3, 0x10
194 7d890b40 Max Filippov
195 7d890b40 Max Filippov
    rotw    1
196 7d890b40 Max Filippov
    rsr     a2, windowbase
197 7d890b40 Max Filippov
    assert  eqi, a2, 1
198 7d890b40 Max Filippov
    movi    a3, 0x11
199 7d890b40 Max Filippov
    movi    a7, 0x12
200 7d890b40 Max Filippov
201 7d890b40 Max Filippov
    rotw    2
202 7d890b40 Max Filippov
    rsr     a2, windowbase
203 7d890b40 Max Filippov
    assert  eqi, a2, 3
204 7d890b40 Max Filippov
    movi    a3, 0x13
205 7d890b40 Max Filippov
    movi    a7, 0x14
206 7d890b40 Max Filippov
    movi    a11, 0x15
207 7d890b40 Max Filippov
208 7d890b40 Max Filippov
    rotw    3
209 7d890b40 Max Filippov
    rsr     a2, windowbase
210 7d890b40 Max Filippov
    assert  eqi, a2, 6
211 7d890b40 Max Filippov
    movi    a3, 0x16
212 7d890b40 Max Filippov
    movi    a7, 0x17
213 7d890b40 Max Filippov
214 7d890b40 Max Filippov
    movi    a2, 0x44
215 7d890b40 Max Filippov
    wsr     a2, windowstart
216 7d890b40 Max Filippov
    rsync
217 7d890b40 Max Filippov
218 7d890b40 Max Filippov
    movi    a2, 0x10
219 7d890b40 Max Filippov
    assert  eq, a2, a11
220 7d890b40 Max Filippov
    movi    a11, 0x18
221 7d890b40 Max Filippov
    movi    a2, 0x11
222 7d890b40 Max Filippov
    assert  eq, a2, a15
223 7d890b40 Max Filippov
    movi    a15, 0x19
224 7d890b40 Max Filippov
225 7d890b40 Max Filippov
    rotw    4
226 7d890b40 Max Filippov
    movi    a2, 0x12
227 7d890b40 Max Filippov
    assert  eq, a2, a3
228 7d890b40 Max Filippov
    movi    a2, 0x13
229 7d890b40 Max Filippov
    assert  eq, a2, a7
230 7d890b40 Max Filippov
    movi    a2, 0x14
231 7d890b40 Max Filippov
    assert  eq, a2, a11
232 7d890b40 Max Filippov
    movi    a2, 0x15
233 7d890b40 Max Filippov
    assert  eq, a2, a15
234 7d890b40 Max Filippov
235 7d890b40 Max Filippov
    movi    a2, 0x5
236 7d890b40 Max Filippov
    wsr     a2, windowstart
237 7d890b40 Max Filippov
    rsync
238 7d890b40 Max Filippov
239 7d890b40 Max Filippov
    rotw    -2
240 7d890b40 Max Filippov
    movi    a2, 0x18
241 7d890b40 Max Filippov
    assert  eq, a2, a3
242 7d890b40 Max Filippov
    movi    a2, 0x19
243 7d890b40 Max Filippov
    assert  eq, a2, a7
244 7d890b40 Max Filippov
test_end
245 7d890b40 Max Filippov
246 7d890b40 Max Filippov
.macro callw_test window
247 7d890b40 Max Filippov
    call\window 2f
248 7d890b40 Max Filippov
1:
249 7d890b40 Max Filippov
    test_fail
250 7d890b40 Max Filippov
    .align  4
251 7d890b40 Max Filippov
2:
252 7d890b40 Max Filippov
    rsr     a2, windowbase
253 7d890b40 Max Filippov
    assert  eqi, a2, 0
254 7d890b40 Max Filippov
    rsr     a2, ps
255 7d890b40 Max Filippov
    movi    a3, 0x4000f | ((\window) << 14)
256 7d890b40 Max Filippov
    assert  eq, a2, a3
257 7d890b40 Max Filippov
    movi    a2, 1b
258 7d890b40 Max Filippov
    slli    a2, a2, 2
259 7d890b40 Max Filippov
    ssai    2
260 7d890b40 Max Filippov
    movi    a3, (\window) / 4
261 7d890b40 Max Filippov
    src     a2, a3, a2
262 7d890b40 Max Filippov
    assert  eq, a2, a\window
263 7d890b40 Max Filippov
.endm
264 7d890b40 Max Filippov
265 7d890b40 Max Filippov
test callw
266 7d890b40 Max Filippov
    reset_window 0x1
267 7d890b40 Max Filippov
    reset_ps
268 7d890b40 Max Filippov
269 7d890b40 Max Filippov
    callw_test 4
270 7d890b40 Max Filippov
    callw_test 8
271 7d890b40 Max Filippov
    callw_test 12
272 7d890b40 Max Filippov
test_end
273 7d890b40 Max Filippov
274 7d890b40 Max Filippov
275 7d890b40 Max Filippov
.macro entry_test window
276 7d890b40 Max Filippov
    reset_window 0x1
277 7d890b40 Max Filippov
    reset_ps
278 7d890b40 Max Filippov
    movi    a2, 0x4000f | ((\window) << 14)
279 7d890b40 Max Filippov
    wsr     a2, ps
280 7d890b40 Max Filippov
    isync
281 7d890b40 Max Filippov
    movi    a3, 0x12345678
282 7d890b40 Max Filippov
    j       1f
283 7d890b40 Max Filippov
    .align  4
284 7d890b40 Max Filippov
1:
285 7d890b40 Max Filippov
    entry   a3, 0x5678
286 7d890b40 Max Filippov
    movi    a2, 0x12340000
287 7d890b40 Max Filippov
    assert  eq, a2, a3
288 7d890b40 Max Filippov
    rsr     a2, windowbase
289 7d890b40 Max Filippov
    assert  eqi, a2, (\window) / 4
290 7d890b40 Max Filippov
    rsr     a2, windowstart
291 7d890b40 Max Filippov
    movi    a3, 1 | (1 << ((\window) / 4))
292 7d890b40 Max Filippov
    assert  eq, a2, a3
293 7d890b40 Max Filippov
    rotw    -(\window) / 4
294 7d890b40 Max Filippov
.endm
295 7d890b40 Max Filippov
296 7d890b40 Max Filippov
test entry
297 7d890b40 Max Filippov
    entry_test 4
298 7d890b40 Max Filippov
    entry_test 8
299 7d890b40 Max Filippov
    entry_test 12
300 7d890b40 Max Filippov
test_end
301 7d890b40 Max Filippov
302 7d890b40 Max Filippov
test_suite_end