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