Merge tag 'v9.0.0-rc3'
[qemu/ar7.git] / tests / tcg / xtensa / test_break.S
blob4c618feb5b1050fefcf8affd3e6f8b080f5e3a1f
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_break_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
149 test ibreak_icount_priority
150     set_vector debug_vector, 2f
151     rsil    a2, debug_level - 1
152     movi    a2, 1f
153     wsr     a2, ibreaka0
154     movi    a2, 1
155     wsr     a2, ibreakenable
156     movi    a2, -2
157     wsr     a2, icount
158     movi    a2, 1
159     wsr     a2, icountlevel
160     isync
161     rsil    a2, 0
162     nop
164     break   0, 0
165     test_fail
167     rsr     a2, debugcause
168     movi    a3, 0x1
169     assert  eq, a2, a3
170 test_end
171 #endif
173 test icount
174     set_vector debug_vector, 2f
175     rsil    a2, debug_level - 1
176     movi    a2, -2
177     wsr     a2, icount
178     movi    a2, 1
179     wsr     a2, icountlevel
180     isync
181     rsil    a2, 0
182     nop
184     break   0, 0
185     test_fail
187     movi    a2, 0
188     wsr     a2, icountlevel
189     rsr     a2, EPC_DEBUG
190     movi    a3, 1b
191     assert  eq, a2, a3
192     rsr     a2, debugcause
193     movi    a3, 0x1
194     assert  eq, a2, a3
195 test_end
197 .macro check_dbreak dr
198     rsr     a2, EPC_DEBUG
199     movi    a3, 1b
200     assert  eq, a2, a3
201     rsr     a2, debugcause
202     movi    a3, 0x4 | (\dr << 8)
203     assert  eq, a2, a3
204     movi    a2, 0
205     wsr     a2, dbreakc\dr
206 .endm
208 .macro dbreak_test dr, ctl, break, access, op
209     set_vector debug_vector, 2f
210     rsil    a2, debug_level - 1
211     movi    a2, \ctl
212     wsr     a2, dbreakc\dr
213     movi    a2, \break
214     wsr     a2, dbreaka\dr
215     movi    a2, \access
216     isync
218     \op     a3, a2, 0
219     test_fail
221     check_dbreak \dr
222     reset_ps
223 .endm
225 #if XCHAL_NUM_DBREAK
226 #define DB0 0
227 #if XCHAL_NUM_DBREAK > 1
228 #define DB1 1
229 #else
230 #define DB1 0
231 #endif
232 test dbreak_exact
233     dbreak_test DB0, 0x4000003f, 0xd000007f, 0xd000007f, l8ui
234     dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007e, l16ui
235     dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007c, l32i
237     dbreak_test DB1, 0x8000003f, 0xd000007f, 0xd000007f, s8i
238     dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007e, s16i
239     dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s32i
240 test_end
242 test DBdbreak_overlap
243     dbreak_test DB0, 0x4000003f, 0xd000007d, 0xd000007c, l16ui
244     dbreak_test DB1, 0x4000003f, 0xd000007d, 0xd000007c, l32i
246     dbreak_test DB0, 0x4000003e, 0xd000007e, 0xd000007f, l8ui
247     dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007c, l32i
249     dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007d, l8ui
250     dbreak_test DB1, 0x4000003c, 0xd000007c, 0xd000007c, l16ui
252     dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007b, l8ui
253     dbreak_test DB1, 0x40000038, 0xd0000078, 0xd000007a, l16ui
254     dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007c, l32i
256     dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000075, l8ui
257     dbreak_test DB0, 0x40000030, 0xd0000070, 0xd0000076, l16ui
258     dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000078, l32i
260     dbreak_test DB0, 0x40000020, 0xd0000060, 0xd000006f, l8ui
261     dbreak_test DB1, 0x40000020, 0xd0000060, 0xd0000070, l16ui
262     dbreak_test DB0, 0x40000020, 0xd0000060, 0xd0000074, l32i
265     dbreak_test DB0, 0x8000003f, 0xd000007d, 0xd000007c, s16i
266     dbreak_test DB1, 0x8000003f, 0xd000007d, 0xd000007c, s32i
268     dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007f, s8i
269     dbreak_test DB1, 0x8000003e, 0xd000007e, 0xd000007c, s32i
271     dbreak_test DB0, 0x8000003c, 0xd000007c, 0xd000007d, s8i
272     dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s16i
274     dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007b, s8i
275     dbreak_test DB1, 0x80000038, 0xd0000078, 0xd000007a, s16i
276     dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007c, s32i
278     dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000075, s8i
279     dbreak_test DB0, 0x80000030, 0xd0000070, 0xd0000076, s16i
280     dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000078, s32i
282     dbreak_test DB0, 0x80000020, 0xd0000060, 0xd000006f, s8i
283     dbreak_test DB1, 0x80000020, 0xd0000060, 0xd0000070, s16i
284     dbreak_test DB0, 0x80000020, 0xd0000060, 0xd0000074, s32i
285 test_end
287 test DBdbreak_invalid
288     dbreak_test DB0, 0x40000030, 0xd0000071, 0xd0000070, l16ui
289     dbreak_test DB1, 0x40000035, 0xd0000072, 0xd0000070, l32i
290 test_end
291 #endif
293 #endif
295 test_suite_end