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