]> Git Repo - qemu.git/blob - tests/tcg/xtensa/test_break.S
works with less than base ISA qemu-system-riscv32 -M virt -bios none -kernel output...
[qemu.git] / tests / tcg / xtensa / test_break.S
1 #include "macros.inc"
2
3 test_suite break
4
5 #if XCHAL_HAVE_DEBUG
6
7 #define debug_level XCHAL_DEBUGLEVEL
8 #define debug_vector glue(level, XCHAL_DEBUGLEVEL)
9 #define EPC_DEBUG glue(epc, XCHAL_DEBUGLEVEL)
10
11 test break
12     set_vector debug_vector, 0
13     rsil    a2, debug_level
14     _break  0, 0
15
16     set_vector debug_vector, 2f
17     rsil    a2, debug_level - 1
18 1:
19     _break  0, 0
20     test_fail
21 2:
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
34
35 test breakn
36     set_vector debug_vector, 0
37     rsil    a2, debug_level
38     _break.n  0
39
40     set_vector debug_vector, 2f
41     rsil    a2, debug_level - 1
42 1:
43     _break.n  0
44     test_fail
45 2:
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
58
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
68 1:
69     rsil    a2, debug_level - 1
70     movi    a2, 1f
71     wsr     a2, ibreaka0
72     movi    a2, 0
73     wsr     a2, ibreakenable
74     isync
75 1:
76     set_vector debug_vector, 2f
77     movi    a2, 1f
78     wsr     a2, ibreaka0
79     movi    a2, 1
80     wsr     a2, ibreakenable
81     isync
82 1:
83     test_fail
84 2:
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
97
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
104 1:
105     wsr     a3, ibreakenable
106     isync
107 2:
108     beqz    a3, 4f
109     test_fail
110 3:
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
123
124     movi    a2, 0x40000
125     wsr     a2, ps
126     isync
127     movi    a3, 0
128     j       1b
129 4:
130 test_end
131
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
140 1:
141     break   0, 0
142     test_fail
143 2:
144     rsr     a2, debugcause
145     movi    a3, 0x2
146     assert  eq, a2, a3
147 test_end
148 #endif
149
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
160 1:
161     break   0, 0
162     test_fail
163 2:
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
173
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
184
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
194 1:
195     \op     a3, a2, 0
196     test_fail
197 2:
198     check_dbreak \dr
199     reset_ps
200 .endm
201
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
213
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
218
219 test DBdbreak_overlap
220     dbreak_test DB0, 0x4000003f, 0xd000007d, 0xd000007c, l16ui
221     dbreak_test DB1, 0x4000003f, 0xd000007d, 0xd000007c, l32i
222
223     dbreak_test DB0, 0x4000003e, 0xd000007e, 0xd000007f, l8ui
224     dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007c, l32i
225
226     dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007d, l8ui
227     dbreak_test DB1, 0x4000003c, 0xd000007c, 0xd000007c, l16ui
228
229     dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007b, l8ui
230     dbreak_test DB1, 0x40000038, 0xd0000078, 0xd000007a, l16ui
231     dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007c, l32i
232
233     dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000075, l8ui
234     dbreak_test DB0, 0x40000030, 0xd0000070, 0xd0000076, l16ui
235     dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000078, l32i
236
237     dbreak_test DB0, 0x40000020, 0xd0000060, 0xd000006f, l8ui
238     dbreak_test DB1, 0x40000020, 0xd0000060, 0xd0000070, l16ui
239     dbreak_test DB0, 0x40000020, 0xd0000060, 0xd0000074, l32i
240
241
242     dbreak_test DB0, 0x8000003f, 0xd000007d, 0xd000007c, s16i
243     dbreak_test DB1, 0x8000003f, 0xd000007d, 0xd000007c, s32i
244
245     dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007f, s8i
246     dbreak_test DB1, 0x8000003e, 0xd000007e, 0xd000007c, s32i
247
248     dbreak_test DB0, 0x8000003c, 0xd000007c, 0xd000007d, s8i
249     dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s16i
250
251     dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007b, s8i
252     dbreak_test DB1, 0x80000038, 0xd0000078, 0xd000007a, s16i
253     dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007c, s32i
254
255     dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000075, s8i
256     dbreak_test DB0, 0x80000030, 0xd0000070, 0xd0000076, s16i
257     dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000078, s32i
258
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
263
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
269
270 #endif
271
272 test_suite_end
This page took 0.038222 seconds and 4 git commands to generate.