xref: /openbmc/qemu/tests/tcg/xtensa/test_break.S (revision 5c65eed6)
1#include "macros.inc"
2
3test_suite break
4
5#if XCHAL_HAVE_DEBUG
6
7#define debug_level XCHAL_DEBUGLEVEL
8#define debug_vector glue(level, XCHAL_DEBUGLEVEL)
9#define EPC_DEBUG glue(epc, XCHAL_DEBUGLEVEL)
10
11test break
12    set_vector debug_vector, 0
13    rsil    a2, debug_level
14    _break  0, 0
15
16    set_vector debug_vector, 2f
17    rsil    a2, debug_level - 1
181:
19    _break  0, 0
20    test_fail
212:
22    rsr     a2, ps
23    movi    a3, 0x1f
24    and     a2, a2, a3
25    movi    a3, 0x10 | debug_level
26    assert  eq, a2, a3
27    rsr     a2, EPC_DEBUG
28    movi    a3, 1b
29    assert  eq, a2, a3
30    rsr     a2, debugcause
31    movi    a3, 0x8
32    assert  eq, a2, a3
33test_end
34
35test breakn
36    set_vector debug_vector, 0
37    rsil    a2, debug_level
38    _break.n  0
39
40    set_vector debug_vector, 2f
41    rsil    a2, debug_level - 1
421:
43    _break.n  0
44    test_fail
452:
46    rsr     a2, ps
47    movi    a3, 0x1f
48    and     a2, a2, a3
49    movi    a3, 0x10 | debug_level
50    assert  eq, a2, a3
51    rsr     a2, EPC_DEBUG
52    movi    a3, 1b
53    assert  eq, a2, a3
54    rsr     a2, debugcause
55    movi    a3, 0x10
56    assert  eq, a2, a3
57test_end
58
59#if XCHAL_NUM_IBREAK
60test ibreak
61    set_vector debug_vector, 0
62    rsil    a2, debug_level
63    movi    a2, 1f
64    wsr     a2, ibreaka0
65    movi    a2, 1
66    wsr     a2, ibreakenable
67    isync
681:
69    rsil    a2, debug_level - 1
70    movi    a2, 1f
71    wsr     a2, ibreaka0
72    movi    a2, 0
73    wsr     a2, ibreakenable
74    isync
751:
76    set_vector debug_vector, 2f
77    movi    a2, 1f
78    wsr     a2, ibreaka0
79    movi    a2, 1
80    wsr     a2, ibreakenable
81    isync
821:
83    test_fail
842:
85    rsr     a2, ps
86    movi    a3, 0x1f
87    and     a2, a2, a3
88    movi    a3, 0x10 | debug_level
89    assert  eq, a2, a3
90    rsr     a2, EPC_DEBUG
91    movi    a3, 1b
92    assert  eq, a2, a3
93    rsr     a2, debugcause
94    movi    a3, 0x2
95    assert  eq, a2, a3
96test_end
97
98test ibreak_remove
99    set_vector debug_vector, 3f
100    rsil    a2, debug_level - 1
101    movi    a2, 2f
102    wsr     a2, ibreaka0
103    movi    a3, 1
1041:
105    wsr     a3, ibreakenable
106    isync
1072:
108    beqz    a3, 4f
109    test_fail
1103:
111    assert  eqi, a3, 1
112    rsr     a2, ps
113    movi    a3, 0x1f
114    and     a2, a2, a3
115    movi    a3, 0x10 | debug_level
116    assert  eq, a2, a3
117    rsr     a2, EPC_DEBUG
118    movi    a3, 2b
119    assert  eq, a2, a3
120    rsr     a2, debugcause
121    movi    a3, 0x2
122    assert  eq, a2, a3
123
124    movi    a2, 0x40000
125    wsr     a2, ps
126    isync
127    movi    a3, 0
128    j       1b
1294:
130test_end
131
132test ibreak_priority
133    set_vector debug_vector, 2f
134    rsil    a2, debug_level - 1
135    movi    a2, 1f
136    wsr     a2, ibreaka0
137    movi    a2, 1
138    wsr     a2, ibreakenable
139    isync
1401:
141    break   0, 0
142    test_fail
1432:
144    rsr     a2, debugcause
145    movi    a3, 0x2
146    assert  eq, a2, a3
147test_end
148#endif
149
150test icount
151    set_vector debug_vector, 2f
152    rsil    a2, debug_level - 1
153    movi    a2, -2
154    wsr     a2, icount
155    movi    a2, 1
156    wsr     a2, icountlevel
157    isync
158    rsil    a2, 0
159    nop
1601:
161    break   0, 0
162    test_fail
1632:
164    movi    a2, 0
165    wsr     a2, icountlevel
166    rsr     a2, EPC_DEBUG
167    movi    a3, 1b
168    assert  eq, a2, a3
169    rsr     a2, debugcause
170    movi    a3, 0x1
171    assert  eq, a2, a3
172test_end
173
174.macro check_dbreak dr
175    rsr     a2, EPC_DEBUG
176    movi    a3, 1b
177    assert  eq, a2, a3
178    rsr     a2, debugcause
179    movi    a3, 0x4 | (\dr << 8)
180    assert  eq, a2, a3
181    movi    a2, 0
182    wsr     a2, dbreakc\dr
183.endm
184
185.macro dbreak_test dr, ctl, break, access, op
186    set_vector debug_vector, 2f
187    rsil    a2, debug_level - 1
188    movi    a2, \ctl
189    wsr     a2, dbreakc\dr
190    movi    a2, \break
191    wsr     a2, dbreaka\dr
192    movi    a2, \access
193    isync
1941:
195    \op     a3, a2, 0
196    test_fail
1972:
198    check_dbreak \dr
199    reset_ps
200.endm
201
202#if XCHAL_NUM_DBREAK
203test dbreak_exact
204    dbreak_test 0, 0x4000003f, 0xd000007f, 0xd000007f, l8ui
205    dbreak_test 1, 0x4000003e, 0xd000007e, 0xd000007e, l16ui
206    dbreak_test 0, 0x4000003c, 0xd000007c, 0xd000007c, l32i
207
208    dbreak_test 1, 0x8000003f, 0xd000007f, 0xd000007f, s8i
209    dbreak_test 0, 0x8000003e, 0xd000007e, 0xd000007e, s16i
210    dbreak_test 1, 0x8000003c, 0xd000007c, 0xd000007c, s32i
211test_end
212
213test dbreak_overlap
214    dbreak_test 0, 0x4000003f, 0xd000007d, 0xd000007c, l16ui
215    dbreak_test 1, 0x4000003f, 0xd000007d, 0xd000007c, l32i
216
217    dbreak_test 0, 0x4000003e, 0xd000007e, 0xd000007f, l8ui
218    dbreak_test 1, 0x4000003e, 0xd000007e, 0xd000007c, l32i
219
220    dbreak_test 0, 0x4000003c, 0xd000007c, 0xd000007d, l8ui
221    dbreak_test 1, 0x4000003c, 0xd000007c, 0xd000007c, l16ui
222
223    dbreak_test 0, 0x40000038, 0xd0000078, 0xd000007b, l8ui
224    dbreak_test 1, 0x40000038, 0xd0000078, 0xd000007a, l16ui
225    dbreak_test 0, 0x40000038, 0xd0000078, 0xd000007c, l32i
226
227    dbreak_test 1, 0x40000030, 0xd0000070, 0xd0000075, l8ui
228    dbreak_test 0, 0x40000030, 0xd0000070, 0xd0000076, l16ui
229    dbreak_test 1, 0x40000030, 0xd0000070, 0xd0000078, l32i
230
231    dbreak_test 0, 0x40000020, 0xd0000060, 0xd000006f, l8ui
232    dbreak_test 1, 0x40000020, 0xd0000060, 0xd0000070, l16ui
233    dbreak_test 0, 0x40000020, 0xd0000060, 0xd0000074, l32i
234
235
236    dbreak_test 0, 0x8000003f, 0xd000007d, 0xd000007c, s16i
237    dbreak_test 1, 0x8000003f, 0xd000007d, 0xd000007c, s32i
238
239    dbreak_test 0, 0x8000003e, 0xd000007e, 0xd000007f, s8i
240    dbreak_test 1, 0x8000003e, 0xd000007e, 0xd000007c, s32i
241
242    dbreak_test 0, 0x8000003c, 0xd000007c, 0xd000007d, s8i
243    dbreak_test 1, 0x8000003c, 0xd000007c, 0xd000007c, s16i
244
245    dbreak_test 0, 0x80000038, 0xd0000078, 0xd000007b, s8i
246    dbreak_test 1, 0x80000038, 0xd0000078, 0xd000007a, s16i
247    dbreak_test 0, 0x80000038, 0xd0000078, 0xd000007c, s32i
248
249    dbreak_test 1, 0x80000030, 0xd0000070, 0xd0000075, s8i
250    dbreak_test 0, 0x80000030, 0xd0000070, 0xd0000076, s16i
251    dbreak_test 1, 0x80000030, 0xd0000070, 0xd0000078, s32i
252
253    dbreak_test 0, 0x80000020, 0xd0000060, 0xd000006f, s8i
254    dbreak_test 1, 0x80000020, 0xd0000060, 0xd0000070, s16i
255    dbreak_test 0, 0x80000020, 0xd0000060, 0xd0000074, s32i
256test_end
257
258test dbreak_invalid
259    dbreak_test 0, 0x40000030, 0xd0000071, 0xd0000070, l16ui
260    dbreak_test 1, 0x40000035, 0xd0000072, 0xd0000070, l32i
261test_end
262#endif
263
264#endif
265
266test_suite_end
267