|
|
1.1 root 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.