Merge tag 'qemu-macppc-20230206' of https://github.com/mcayland/qemu into staging
[qemu.git] / tests / tcg / xtensa / test_break.S
blob3aa18b5cec3f0f58e0f49ef332241b99434ac3b0
1 #include "macros.inc"
3 test_suite break
5 #if XCHAL_HAVE_DEBUG
7 #define debug_level XCHAL_DEBUGLEVEL
8 #define debug_vector glue(level, XCHAL_DEBUGLEVEL)
9 #define EPC_DEBUG glue(epc, XCHAL_DEBUGLEVEL)
11 test break
12     set_vector debug_vector, 0
13     rsil    a2, debug_level
14     _break  0, 0
16     set_vector debug_vector, 2f
17     rsil    a2, debug_level - 1
19     _break  0, 0
20     test_fail
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
33 test_end
35 test breakn
36     set_vector debug_vector, 0
37     rsil    a2, debug_level
38     _break.n  0
40     set_vector debug_vector, 2f
41     rsil    a2, debug_level - 1
43     _break.n  0
44     test_fail
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
57 test_end
59 #if XCHAL_NUM_IBREAK
60 test 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
69     rsil    a2, debug_level - 1
70     movi    a2, 1f
71     wsr     a2, ibreaka0
72     movi    a2, 0
73     wsr     a2, ibreakenable
74     isync
76     set_vector debug_vector, 2f
77     movi    a2, 1f
78     wsr     a2, ibreaka0
79     movi    a2, 1
80     wsr     a2, ibreakenable
81     isync
83     test_fail
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
96 test_end
98 test 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
105     wsr     a3, ibreakenable
106     isync
108     beqz    a3, 4f
109     test_fail
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
124     movi    a2, 0x40000
125     wsr     a2, ps
126     isync
127     movi    a3, 0
128     j       1b
130 test_end
132 test 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
141     break   0, 0
142     test_fail
144     rsr     a2, debugcause
145     movi    a3, 0x2
146     assert  eq, a2, a3
147 test_end
148 #endif
150 test 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
161     break   0, 0
162     test_fail
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
172 test_end
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
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
195     \op     a3, a2, 0
196     test_fail
198     check_dbreak \dr
199     reset_ps
200 .endm
202 #if XCHAL_NUM_DBREAK
203 #define DB0 0
204 #if XCHAL_NUM_DBREAK > 1
205 #define DB1 1
206 #else
207 #define DB1 0
208 #endif
209 test dbreak_exact
210     dbreak_test DB0, 0x4000003f, 0xd000007f, 0xd000007f, l8ui
211     dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007e, l16ui
212     dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007c, l32i
214     dbreak_test DB1, 0x8000003f, 0xd000007f, 0xd000007f, s8i
215     dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007e, s16i
216     dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s32i
217 test_end
219 test DBdbreak_overlap
220     dbreak_test DB0, 0x4000003f, 0xd000007d, 0xd000007c, l16ui
221     dbreak_test DB1, 0x4000003f, 0xd000007d, 0xd000007c, l32i
223     dbreak_test DB0, 0x4000003e, 0xd000007e, 0xd000007f, l8ui
224     dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007c, l32i
226     dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007d, l8ui
227     dbreak_test DB1, 0x4000003c, 0xd000007c, 0xd000007c, l16ui
229     dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007b, l8ui
230     dbreak_test DB1, 0x40000038, 0xd0000078, 0xd000007a, l16ui
231     dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007c, l32i
233     dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000075, l8ui
234     dbreak_test DB0, 0x40000030, 0xd0000070, 0xd0000076, l16ui
235     dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000078, l32i
237     dbreak_test DB0, 0x40000020, 0xd0000060, 0xd000006f, l8ui
238     dbreak_test DB1, 0x40000020, 0xd0000060, 0xd0000070, l16ui
239     dbreak_test DB0, 0x40000020, 0xd0000060, 0xd0000074, l32i
242     dbreak_test DB0, 0x8000003f, 0xd000007d, 0xd000007c, s16i
243     dbreak_test DB1, 0x8000003f, 0xd000007d, 0xd000007c, s32i
245     dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007f, s8i
246     dbreak_test DB1, 0x8000003e, 0xd000007e, 0xd000007c, s32i
248     dbreak_test DB0, 0x8000003c, 0xd000007c, 0xd000007d, s8i
249     dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s16i
251     dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007b, s8i
252     dbreak_test DB1, 0x80000038, 0xd0000078, 0xd000007a, s16i
253     dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007c, s32i
255     dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000075, s8i
256     dbreak_test DB0, 0x80000030, 0xd0000070, 0xd0000076, s16i
257     dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000078, s32i
259     dbreak_test DB0, 0x80000020, 0xd0000060, 0xd000006f, s8i
260     dbreak_test DB1, 0x80000020, 0xd0000060, 0xd0000070, s16i
261     dbreak_test DB0, 0x80000020, 0xd0000060, 0xd0000074, s32i
262 test_end
264 test DBdbreak_invalid
265     dbreak_test DB0, 0x40000030, 0xd0000071, 0xd0000070, l16ui
266     dbreak_test DB1, 0x40000035, 0xd0000072, 0xd0000070, l32i
267 test_end
268 #endif
270 #endif
272 test_suite_end