xref: /qemu/tests/tcg/xtensa/test_break.S (revision 6b1f1009)
1a2e67072SMax Filippov#include "macros.inc"
2e7dfa64dSMax Filippov
3e7dfa64dSMax Filippovtest_suite break
4e7dfa64dSMax Filippov
566c58ba7SMax Filippov#if XCHAL_HAVE_DEBUG
666c58ba7SMax Filippov
766c58ba7SMax Filippov#define debug_level XCHAL_DEBUGLEVEL
866c58ba7SMax Filippov#define debug_vector glue(level, XCHAL_DEBUGLEVEL)
966c58ba7SMax Filippov#define EPC_DEBUG glue(epc, XCHAL_DEBUGLEVEL)
1066c58ba7SMax 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
2766c58ba7SMax 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
5166c58ba7SMax 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
5966c58ba7SMax 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
9066c58ba7SMax 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
11766c58ba7SMax 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
132*6b1f1009SMax Filippovtest ibreak_break_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*6b1f1009SMax Filippov
149*6b1f1009SMax Filippovtest ibreak_icount_priority
150*6b1f1009SMax Filippov    set_vector debug_vector, 2f
151*6b1f1009SMax Filippov    rsil    a2, debug_level - 1
152*6b1f1009SMax Filippov    movi    a2, 1f
153*6b1f1009SMax Filippov    wsr     a2, ibreaka0
154*6b1f1009SMax Filippov    movi    a2, 1
155*6b1f1009SMax Filippov    wsr     a2, ibreakenable
156*6b1f1009SMax Filippov    movi    a2, -2
157*6b1f1009SMax Filippov    wsr     a2, icount
158*6b1f1009SMax Filippov    movi    a2, 1
159*6b1f1009SMax Filippov    wsr     a2, icountlevel
160*6b1f1009SMax Filippov    isync
161*6b1f1009SMax Filippov    rsil    a2, 0
162*6b1f1009SMax Filippov    nop
163*6b1f1009SMax Filippov1:
164*6b1f1009SMax Filippov    break   0, 0
165*6b1f1009SMax Filippov    test_fail
166*6b1f1009SMax Filippov2:
167*6b1f1009SMax Filippov    rsr     a2, debugcause
168*6b1f1009SMax Filippov    movi    a3, 0x1
169*6b1f1009SMax Filippov    assert  eq, a2, a3
170*6b1f1009SMax Filippovtest_end
17166c58ba7SMax Filippov#endif
172e7dfa64dSMax Filippov
173e7dfa64dSMax Filippovtest icount
174e7dfa64dSMax Filippov    set_vector debug_vector, 2f
175e7dfa64dSMax Filippov    rsil    a2, debug_level - 1
176e7dfa64dSMax Filippov    movi    a2, -2
177e7dfa64dSMax Filippov    wsr     a2, icount
178e7dfa64dSMax Filippov    movi    a2, 1
179e7dfa64dSMax Filippov    wsr     a2, icountlevel
180e7dfa64dSMax Filippov    isync
181e7dfa64dSMax Filippov    rsil    a2, 0
182e7dfa64dSMax Filippov    nop
183e7dfa64dSMax Filippov1:
184e7dfa64dSMax Filippov    break   0, 0
185e7dfa64dSMax Filippov    test_fail
186e7dfa64dSMax Filippov2:
187e7dfa64dSMax Filippov    movi    a2, 0
188e7dfa64dSMax Filippov    wsr     a2, icountlevel
18966c58ba7SMax Filippov    rsr     a2, EPC_DEBUG
190e7dfa64dSMax Filippov    movi    a3, 1b
191e7dfa64dSMax Filippov    assert  eq, a2, a3
192e7dfa64dSMax Filippov    rsr     a2, debugcause
193e7dfa64dSMax Filippov    movi    a3, 0x1
194e7dfa64dSMax Filippov    assert  eq, a2, a3
195e7dfa64dSMax Filippovtest_end
196e7dfa64dSMax Filippov
197e7dfa64dSMax Filippov.macro check_dbreak dr
19866c58ba7SMax Filippov    rsr     a2, EPC_DEBUG
199e7dfa64dSMax Filippov    movi    a3, 1b
200e7dfa64dSMax Filippov    assert  eq, a2, a3
201e7dfa64dSMax Filippov    rsr     a2, debugcause
202e7dfa64dSMax Filippov    movi    a3, 0x4 | (\dr << 8)
203e7dfa64dSMax Filippov    assert  eq, a2, a3
204e7dfa64dSMax Filippov    movi    a2, 0
205e7dfa64dSMax Filippov    wsr     a2, dbreakc\dr
206e7dfa64dSMax Filippov.endm
207e7dfa64dSMax Filippov
208e7dfa64dSMax Filippov.macro dbreak_test dr, ctl, break, access, op
209e7dfa64dSMax Filippov    set_vector debug_vector, 2f
210e7dfa64dSMax Filippov    rsil    a2, debug_level - 1
211e7dfa64dSMax Filippov    movi    a2, \ctl
212e7dfa64dSMax Filippov    wsr     a2, dbreakc\dr
213e7dfa64dSMax Filippov    movi    a2, \break
214e7dfa64dSMax Filippov    wsr     a2, dbreaka\dr
215e7dfa64dSMax Filippov    movi    a2, \access
216e7dfa64dSMax Filippov    isync
217e7dfa64dSMax Filippov1:
218e7dfa64dSMax Filippov    \op     a3, a2, 0
219e7dfa64dSMax Filippov    test_fail
220e7dfa64dSMax Filippov2:
221e7dfa64dSMax Filippov    check_dbreak \dr
222e7dfa64dSMax Filippov    reset_ps
223e7dfa64dSMax Filippov.endm
224e7dfa64dSMax Filippov
22566c58ba7SMax Filippov#if XCHAL_NUM_DBREAK
22664407f6aSMax Filippov#define DB0 0
22764407f6aSMax Filippov#if XCHAL_NUM_DBREAK > 1
22864407f6aSMax Filippov#define DB1 1
22964407f6aSMax Filippov#else
23064407f6aSMax Filippov#define DB1 0
23164407f6aSMax Filippov#endif
232e7dfa64dSMax Filippovtest dbreak_exact
23364407f6aSMax Filippov    dbreak_test DB0, 0x4000003f, 0xd000007f, 0xd000007f, l8ui
23464407f6aSMax Filippov    dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007e, l16ui
23564407f6aSMax Filippov    dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007c, l32i
236e7dfa64dSMax Filippov
23764407f6aSMax Filippov    dbreak_test DB1, 0x8000003f, 0xd000007f, 0xd000007f, s8i
23864407f6aSMax Filippov    dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007e, s16i
23964407f6aSMax Filippov    dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s32i
240e7dfa64dSMax Filippovtest_end
241e7dfa64dSMax Filippov
24264407f6aSMax Filippovtest DBdbreak_overlap
24364407f6aSMax Filippov    dbreak_test DB0, 0x4000003f, 0xd000007d, 0xd000007c, l16ui
24464407f6aSMax Filippov    dbreak_test DB1, 0x4000003f, 0xd000007d, 0xd000007c, l32i
245e7dfa64dSMax Filippov
24664407f6aSMax Filippov    dbreak_test DB0, 0x4000003e, 0xd000007e, 0xd000007f, l8ui
24764407f6aSMax Filippov    dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007c, l32i
248e7dfa64dSMax Filippov
24964407f6aSMax Filippov    dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007d, l8ui
25064407f6aSMax Filippov    dbreak_test DB1, 0x4000003c, 0xd000007c, 0xd000007c, l16ui
251e7dfa64dSMax Filippov
25264407f6aSMax Filippov    dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007b, l8ui
25364407f6aSMax Filippov    dbreak_test DB1, 0x40000038, 0xd0000078, 0xd000007a, l16ui
25464407f6aSMax Filippov    dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007c, l32i
255e7dfa64dSMax Filippov
25664407f6aSMax Filippov    dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000075, l8ui
25764407f6aSMax Filippov    dbreak_test DB0, 0x40000030, 0xd0000070, 0xd0000076, l16ui
25864407f6aSMax Filippov    dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000078, l32i
259e7dfa64dSMax Filippov
26064407f6aSMax Filippov    dbreak_test DB0, 0x40000020, 0xd0000060, 0xd000006f, l8ui
26164407f6aSMax Filippov    dbreak_test DB1, 0x40000020, 0xd0000060, 0xd0000070, l16ui
26264407f6aSMax Filippov    dbreak_test DB0, 0x40000020, 0xd0000060, 0xd0000074, l32i
263e7dfa64dSMax Filippov
264e7dfa64dSMax Filippov
26564407f6aSMax Filippov    dbreak_test DB0, 0x8000003f, 0xd000007d, 0xd000007c, s16i
26664407f6aSMax Filippov    dbreak_test DB1, 0x8000003f, 0xd000007d, 0xd000007c, s32i
267e7dfa64dSMax Filippov
26864407f6aSMax Filippov    dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007f, s8i
26964407f6aSMax Filippov    dbreak_test DB1, 0x8000003e, 0xd000007e, 0xd000007c, s32i
270e7dfa64dSMax Filippov
27164407f6aSMax Filippov    dbreak_test DB0, 0x8000003c, 0xd000007c, 0xd000007d, s8i
27264407f6aSMax Filippov    dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s16i
273e7dfa64dSMax Filippov
27464407f6aSMax Filippov    dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007b, s8i
27564407f6aSMax Filippov    dbreak_test DB1, 0x80000038, 0xd0000078, 0xd000007a, s16i
27664407f6aSMax Filippov    dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007c, s32i
277e7dfa64dSMax Filippov
27864407f6aSMax Filippov    dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000075, s8i
27964407f6aSMax Filippov    dbreak_test DB0, 0x80000030, 0xd0000070, 0xd0000076, s16i
28064407f6aSMax Filippov    dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000078, s32i
281e7dfa64dSMax Filippov
28264407f6aSMax Filippov    dbreak_test DB0, 0x80000020, 0xd0000060, 0xd000006f, s8i
28364407f6aSMax Filippov    dbreak_test DB1, 0x80000020, 0xd0000060, 0xd0000070, s16i
28464407f6aSMax Filippov    dbreak_test DB0, 0x80000020, 0xd0000060, 0xd0000074, s32i
285e7dfa64dSMax Filippovtest_end
286e7dfa64dSMax Filippov
28764407f6aSMax Filippovtest DBdbreak_invalid
28864407f6aSMax Filippov    dbreak_test DB0, 0x40000030, 0xd0000071, 0xd0000070, l16ui
28964407f6aSMax Filippov    dbreak_test DB1, 0x40000035, 0xd0000072, 0xd0000070, l32i
290e7dfa64dSMax Filippovtest_end
29166c58ba7SMax Filippov#endif
29266c58ba7SMax Filippov
29366c58ba7SMax Filippov#endif
294e7dfa64dSMax Filippov
295e7dfa64dSMax Filippovtest_suite_end
296