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