Statistics
| Branch: | Revision:

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

History | View | Annotate | Download (5.4 kB)

1
.include "macros.inc"
2

    
3
test_suite windowed
4

    
5
.altmacro
6

    
7
.macro reset_window start
8
    movi    a2, 0xff
9
    wsr     a2, windowstart
10
    rsync
11
    movi    a2, 0
12
    wsr     a2, windowbase
13
    rsync
14
    movi    a2, \start
15
    wsr     a2, windowstart
16
    rsync
17
.endm
18

    
19
.macro overflow_test shift, window, probe_ok, probe_ex
20
    set_vector window_overflow_4, 0
21
    set_vector window_overflow_8, 0
22
    set_vector window_overflow_12, 0
23

    
24
    movi    a2, 1 | (((1 << ((\window) / 4)) | 1) << ((\shift) / 4))
25
    wsr     a2, windowstart
26
    reset_ps
27

    
28
    mov     a2, a\probe_ok
29
    set_vector window_overflow_\window, 10f
30
1:
31
    mov     a2, a\probe_ex
32
    test_fail
33
10:
34
    rsr     a2, epc1
35
    movi    a3, 1b
36
    assert  eq, a2, a3
37
    movi    a2, 2f
38
    wsr     a2, epc1
39

    
40
    rsr     a2, windowbase
41
    movi    a3, (\shift) / 4
42
    assert  eq, a2, a3
43
    rsr     a2, ps
44
    movi    a3, 0x4001f
45
    assert  eq, a2, a3
46
    rfwo
47
    test_fail
48
2:
49
    rsr     a2, windowbase
50
    assert  eqi, a2, 0
51
    rsr     a2, windowstart
52
    movi    a3, 1 | ((1 << ((\window) / 4)) << ((\shift) / 4))
53
    assert  eq, a2, a3
54
    rsr     a2, ps
55
    movi    a3, 0x4000f
56
    assert  eq, a2, a3
57
.endm
58

    
59
.macro overflow_tests shift, window, probe
60
    .if \probe < 15
61
    overflow_test \shift, \window, %((\shift) - 1), \probe
62
    overflow_tests \shift, \window, %((\probe) + 1)
63
    .endif
64
.endm
65

    
66
.macro all_overflow_tests
67
    .irp shift, 4, 8, 12
68
    .irp window, 4, 8, 12
69
    overflow_tests \shift, \window, \shift
70
    .endr
71
    .endr
72
.endm
73

    
74
test overflow
75
    all_overflow_tests
76
test_end
77

    
78

    
79
.macro underflow_test window
80
    set_vector window_underflow_4, 0
81
    set_vector window_underflow_8, 0
82
    set_vector window_underflow_12, 0
83

    
84
    set_vector window_underflow_\window, 10f
85

    
86
    reset_window 1
87
    reset_ps
88

    
89
    ssai    2
90
    movi    a2, 2f
91
    slli    a2, a2, 2
92
    movi    a3, (\window) / 4
93
    src     a0, a3, a2
94
1:
95
    retw
96
    test_fail
97
10:
98
    rsr     a2, epc1
99
    movi    a3, 1b
100
    assert  eq, a2, a3
101
    movi    a2, 2f
102
    wsr     a2, epc1
103

    
104
    rsr     a2, ps
105
    movi    a3, 0x4001f
106
    assert  eq, a2, a3
107
    rsr     a2, windowbase
108
    assert  eqi, a2, 8 - ((\window) / 4)
109
    rsr     a2, windowstart
110
    assert  eqi, a2, 1
111
    rfwu
112
2:
113
    rsr     a2, ps
114
    movi    a3, 0x4000f
115
    assert  eq, a2, a3
116
    rsr     a2, windowbase
117
    assert  eqi, a2, 0
118
    rsr     a2, windowstart
119
    assert  bsi, a2, 0
120
    assert  bsi, a2, 8 - ((\window) / 4)
121
.endm
122

    
123
test underflow
124
    set_vector window_overflow_4, 0
125
    set_vector window_overflow_8, 0
126
    set_vector window_overflow_12, 0
127

    
128
    underflow_test 4
129
    underflow_test 8
130
    underflow_test 12
131
test_end
132

    
133

    
134
.macro retw_test window
135
    reset_window %(1 | (1 << (8 - (\window) / 4)))
136
    reset_ps
137

    
138
    ssai    2
139
    movi    a2, 1f
140
    slli    a2, a2, 2
141
    movi    a3, (\window) / 4
142
    src     a0, a3, a2
143
    retw
144
    test_fail
145
1:
146
    rsr     a2, ps
147
    movi    a3, 0x4000f
148
    assert  eq, a2, a3
149
    rsr     a2, windowbase
150
    assert  eqi, a2, 8 - ((\window) / 4)
151
    rsr     a2, windowstart
152
    assert  bci, a2, 0
153
    assert  bsi, a2, 8 - ((\window) / 4)
154
.endm
155

    
156
test retw
157
    set_vector window_underflow_4, 0
158
    set_vector window_underflow_8, 0
159
    set_vector window_underflow_12, 0
160

    
161
    retw_test 4
162
    retw_test 8
163
    retw_test 12
164
test_end
165

    
166
test movsp
167
    set_vector kernel, 2f
168

    
169
    reset_window 1
170
    reset_ps
171
1:
172
    movsp   a2, a3
173
    test_fail
174
2:
175
    rsr     a2, exccause
176
    assert  eqi, a2, 5
177
    rsr     a2, epc1
178
    movi    a3, 1b
179
    assert  eq, a2, a3
180

    
181
    set_vector kernel, 0
182

    
183
    reset_window 0x81
184
    reset_ps
185

    
186
    movsp   a2, a3
187
test_end
188

    
189
test rotw
190
    reset_window 0x4b
191
    reset_ps
192

    
193
    movi    a3, 0x10
194

    
195
    rotw    1
196
    rsr     a2, windowbase
197
    assert  eqi, a2, 1
198
    movi    a3, 0x11
199
    movi    a7, 0x12
200

    
201
    rotw    2
202
    rsr     a2, windowbase
203
    assert  eqi, a2, 3
204
    movi    a3, 0x13
205
    movi    a7, 0x14
206
    movi    a11, 0x15
207

    
208
    rotw    3
209
    rsr     a2, windowbase
210
    assert  eqi, a2, 6
211
    movi    a3, 0x16
212
    movi    a7, 0x17
213

    
214
    movi    a2, 0x44
215
    wsr     a2, windowstart
216
    rsync
217

    
218
    movi    a2, 0x10
219
    assert  eq, a2, a11
220
    movi    a11, 0x18
221
    movi    a2, 0x11
222
    assert  eq, a2, a15
223
    movi    a15, 0x19
224

    
225
    rotw    4
226
    movi    a2, 0x12
227
    assert  eq, a2, a3
228
    movi    a2, 0x13
229
    assert  eq, a2, a7
230
    movi    a2, 0x14
231
    assert  eq, a2, a11
232
    movi    a2, 0x15
233
    assert  eq, a2, a15
234

    
235
    movi    a2, 0x5
236
    wsr     a2, windowstart
237
    rsync
238

    
239
    rotw    -2
240
    movi    a2, 0x18
241
    assert  eq, a2, a3
242
    movi    a2, 0x19
243
    assert  eq, a2, a7
244
test_end
245

    
246
.macro callw_test window
247
    call\window 2f
248
1:
249
    test_fail
250
    .align  4
251
2:
252
    rsr     a2, windowbase
253
    assert  eqi, a2, 0
254
    rsr     a2, ps
255
    movi    a3, 0x4000f | ((\window) << 14)
256
    assert  eq, a2, a3
257
    movi    a2, 1b
258
    slli    a2, a2, 2
259
    ssai    2
260
    movi    a3, (\window) / 4
261
    src     a2, a3, a2
262
    assert  eq, a2, a\window
263
.endm
264

    
265
test callw
266
    reset_window 0x1
267
    reset_ps
268

    
269
    callw_test 4
270
    callw_test 8
271
    callw_test 12
272
test_end
273

    
274

    
275
.macro entry_test window
276
    reset_window 0x1
277
    reset_ps
278
    movi    a2, 0x4000f | ((\window) << 14)
279
    wsr     a2, ps
280
    isync
281
    movi    a3, 0x12345678
282
    j       1f
283
    .align  4
284
1:
285
    entry   a3, 0x5678
286
    movi    a2, 0x12340000
287
    assert  eq, a2, a3
288
    rsr     a2, windowbase
289
    assert  eqi, a2, (\window) / 4
290
    rsr     a2, windowstart
291
    movi    a3, 1 | (1 << ((\window) / 4))
292
    assert  eq, a2, a3
293
    rotw    -(\window) / 4
294
.endm
295

    
296
test entry
297
    entry_test 4
298
    entry_test 8
299
    entry_test 12
300
test_end
301

    
302
test_suite_end