xref: /openbmc/qemu/tests/tcg/xtensa/test_break.S (revision 438c78da)
1#include "macros.inc"
2
3#define debug_level 6
4#define debug_vector level6
5
6test_suite break
7
8test break
9    set_vector debug_vector, 0
10    rsil    a2, debug_level
11    _break  0, 0
12
13    set_vector debug_vector, 2f
14    rsil    a2, debug_level - 1
151:
16    _break  0, 0
17    test_fail
182:
19    rsr     a2, ps
20    movi    a3, 0x1f
21    and     a2, a2, a3
22    movi    a3, 0x10 | debug_level
23    assert  eq, a2, a3
24    rsr     a2, epc6
25    movi    a3, 1b
26    assert  eq, a2, a3
27    rsr     a2, debugcause
28    movi    a3, 0x8
29    assert  eq, a2, a3
30test_end
31
32test breakn
33    set_vector debug_vector, 0
34    rsil    a2, debug_level
35    _break.n  0
36
37    set_vector debug_vector, 2f
38    rsil    a2, debug_level - 1
391:
40    _break.n  0
41    test_fail
422:
43    rsr     a2, ps
44    movi    a3, 0x1f
45    and     a2, a2, a3
46    movi    a3, 0x10 | debug_level
47    assert  eq, a2, a3
48    rsr     a2, epc6
49    movi    a3, 1b
50    assert  eq, a2, a3
51    rsr     a2, debugcause
52    movi    a3, 0x10
53    assert  eq, a2, a3
54test_end
55
56test ibreak
57    set_vector debug_vector, 0
58    rsil    a2, debug_level
59    movi    a2, 1f
60    wsr     a2, ibreaka0
61    movi    a2, 1
62    wsr     a2, ibreakenable
63    isync
641:
65    rsil    a2, debug_level - 1
66    movi    a2, 1f
67    wsr     a2, ibreaka0
68    movi    a2, 0
69    wsr     a2, ibreakenable
70    isync
711:
72    set_vector debug_vector, 2f
73    movi    a2, 1f
74    wsr     a2, ibreaka0
75    movi    a2, 1
76    wsr     a2, ibreakenable
77    isync
781:
79    test_fail
802:
81    rsr     a2, ps
82    movi    a3, 0x1f
83    and     a2, a2, a3
84    movi    a3, 0x10 | debug_level
85    assert  eq, a2, a3
86    rsr     a2, epc6
87    movi    a3, 1b
88    assert  eq, a2, a3
89    rsr     a2, debugcause
90    movi    a3, 0x2
91    assert  eq, a2, a3
92test_end
93
94test ibreak_remove
95    set_vector debug_vector, 3f
96    rsil    a2, debug_level - 1
97    movi    a2, 2f
98    wsr     a2, ibreaka0
99    movi    a3, 1
1001:
101    wsr     a3, ibreakenable
102    isync
1032:
104    beqz    a3, 4f
105    test_fail
1063:
107    assert  eqi, a3, 1
108    rsr     a2, ps
109    movi    a3, 0x1f
110    and     a2, a2, a3
111    movi    a3, 0x10 | debug_level
112    assert  eq, a2, a3
113    rsr     a2, epc6
114    movi    a3, 2b
115    assert  eq, a2, a3
116    rsr     a2, debugcause
117    movi    a3, 0x2
118    assert  eq, a2, a3
119
120    movi    a2, 0x40000
121    wsr     a2, ps
122    isync
123    movi    a3, 0
124    j       1b
1254:
126test_end
127
128test ibreak_priority
129    set_vector debug_vector, 2f
130    rsil    a2, debug_level - 1
131    movi    a2, 1f
132    wsr     a2, ibreaka0
133    movi    a2, 1
134    wsr     a2, ibreakenable
135    isync
1361:
137    break   0, 0
138    test_fail
1392:
140    rsr     a2, debugcause
141    movi    a3, 0x2
142    assert  eq, a2, a3
143test_end
144
145test icount
146    set_vector debug_vector, 2f
147    rsil    a2, debug_level - 1
148    movi    a2, -2
149    wsr     a2, icount
150    movi    a2, 1
151    wsr     a2, icountlevel
152    isync
153    rsil    a2, 0
154    nop
1551:
156    break   0, 0
157    test_fail
1582:
159    movi    a2, 0
160    wsr     a2, icountlevel
161    rsr     a2, epc6
162    movi    a3, 1b
163    assert  eq, a2, a3
164    rsr     a2, debugcause
165    movi    a3, 0x1
166    assert  eq, a2, a3
167test_end
168
169.macro check_dbreak dr
170    rsr     a2, epc6
171    movi    a3, 1b
172    assert  eq, a2, a3
173    rsr     a2, debugcause
174    movi    a3, 0x4 | (\dr << 8)
175    assert  eq, a2, a3
176    movi    a2, 0
177    wsr     a2, dbreakc\dr
178.endm
179
180.macro dbreak_test dr, ctl, break, access, op
181    set_vector debug_vector, 2f
182    rsil    a2, debug_level - 1
183    movi    a2, \ctl
184    wsr     a2, dbreakc\dr
185    movi    a2, \break
186    wsr     a2, dbreaka\dr
187    movi    a2, \access
188    isync
1891:
190    \op     a3, a2, 0
191    test_fail
1922:
193    check_dbreak \dr
194    reset_ps
195.endm
196
197test dbreak_exact
198    dbreak_test 0, 0x4000003f, 0xd000007f, 0xd000007f, l8ui
199    dbreak_test 1, 0x4000003e, 0xd000007e, 0xd000007e, l16ui
200    dbreak_test 0, 0x4000003c, 0xd000007c, 0xd000007c, l32i
201
202    dbreak_test 1, 0x8000003f, 0xd000007f, 0xd000007f, s8i
203    dbreak_test 0, 0x8000003e, 0xd000007e, 0xd000007e, s16i
204    dbreak_test 1, 0x8000003c, 0xd000007c, 0xd000007c, s32i
205test_end
206
207test dbreak_overlap
208    dbreak_test 0, 0x4000003f, 0xd000007d, 0xd000007c, l16ui
209    dbreak_test 1, 0x4000003f, 0xd000007d, 0xd000007c, l32i
210
211    dbreak_test 0, 0x4000003e, 0xd000007e, 0xd000007f, l8ui
212    dbreak_test 1, 0x4000003e, 0xd000007e, 0xd000007c, l32i
213
214    dbreak_test 0, 0x4000003c, 0xd000007c, 0xd000007d, l8ui
215    dbreak_test 1, 0x4000003c, 0xd000007c, 0xd000007c, l16ui
216
217    dbreak_test 0, 0x40000038, 0xd0000078, 0xd000007b, l8ui
218    dbreak_test 1, 0x40000038, 0xd0000078, 0xd000007a, l16ui
219    dbreak_test 0, 0x40000038, 0xd0000078, 0xd000007c, l32i
220
221    dbreak_test 1, 0x40000030, 0xd0000070, 0xd0000075, l8ui
222    dbreak_test 0, 0x40000030, 0xd0000070, 0xd0000076, l16ui
223    dbreak_test 1, 0x40000030, 0xd0000070, 0xd0000078, l32i
224
225    dbreak_test 0, 0x40000020, 0xd0000060, 0xd000006f, l8ui
226    dbreak_test 1, 0x40000020, 0xd0000060, 0xd0000070, l16ui
227    dbreak_test 0, 0x40000020, 0xd0000060, 0xd0000074, l32i
228
229
230    dbreak_test 0, 0x8000003f, 0xd000007d, 0xd000007c, s16i
231    dbreak_test 1, 0x8000003f, 0xd000007d, 0xd000007c, s32i
232
233    dbreak_test 0, 0x8000003e, 0xd000007e, 0xd000007f, s8i
234    dbreak_test 1, 0x8000003e, 0xd000007e, 0xd000007c, s32i
235
236    dbreak_test 0, 0x8000003c, 0xd000007c, 0xd000007d, s8i
237    dbreak_test 1, 0x8000003c, 0xd000007c, 0xd000007c, s16i
238
239    dbreak_test 0, 0x80000038, 0xd0000078, 0xd000007b, s8i
240    dbreak_test 1, 0x80000038, 0xd0000078, 0xd000007a, s16i
241    dbreak_test 0, 0x80000038, 0xd0000078, 0xd000007c, s32i
242
243    dbreak_test 1, 0x80000030, 0xd0000070, 0xd0000075, s8i
244    dbreak_test 0, 0x80000030, 0xd0000070, 0xd0000076, s16i
245    dbreak_test 1, 0x80000030, 0xd0000070, 0xd0000078, s32i
246
247    dbreak_test 0, 0x80000020, 0xd0000060, 0xd000006f, s8i
248    dbreak_test 1, 0x80000020, 0xd0000060, 0xd0000070, s16i
249    dbreak_test 0, 0x80000020, 0xd0000060, 0xd0000074, s32i
250test_end
251
252test dbreak_invalid
253    dbreak_test 0, 0x40000030, 0xd0000071, 0xd0000070, l16ui
254    dbreak_test 1, 0x40000035, 0xd0000072, 0xd0000070, l32i
255test_end
256
257test_suite_end
258