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