Automatic date update in version.in
[deliverable/binutils-gdb.git] / sim / testsuite / bfin / dbg_jmp_src_kill.S
1 //Original:/proj/frio/dv/testcases/debug/dbg_jmp_src_kill/dbg_jmp_src_kill.dsp
2 // Description: This test checks that the trace buffer keeps track of a JUMP
3 // source instruction getting killed at each stage in the pipe. The test
4 // consists of 8 instances of an EXCPT instruction followed by 0 to 7 NOPs
5 // and a JUMP, with the trace buffer enabled.
6 # mach: bfin
7 # sim: --environment operating
8
9 #include "test.h"
10 .include "testutils.inc"
11 start
12
13 /////////////////////////////////////////////////////////////////////////////
14 ///////////////////////// Include Files /////////////////////////////
15 /////////////////////////////////////////////////////////////////////////////
16
17 include(std.inc)
18 include(selfcheck.inc)
19 include(symtable.inc)
20 include(mmrs.inc)
21
22 /////////////////////////////////////////////////////////////////////////////
23 ///////////////////////// Defines /////////////////////////////
24 /////////////////////////////////////////////////////////////////////////////
25
26 #ifndef USER_CODE_SPACE
27 #define USER_CODE_SPACE CODE_ADDR_1 //
28 #endif
29 #ifndef STACKSIZE
30 #define STACKSIZE 0x00000020
31 #endif
32 #ifndef ITABLE
33 #define ITABLE CODE_ADDR_2 //
34 #endif
35
36 /////////////////////////////////////////////////////////////////////////////
37 ///////////////////////// RESET ISR /////////////////////////////
38 /////////////////////////////////////////////////////////////////////////////
39
40 RST_ISR :
41
42 // Initialize Dregs
43 INIT_R_REGS(0);
44
45 // Initialize Pregs
46 INIT_P_REGS(0);
47
48 // Initialize ILBM Registers
49 INIT_I_REGS(0);
50 INIT_M_REGS(0);
51 INIT_L_REGS(0);
52 INIT_B_REGS(0);
53
54 // Initialize the Address of the Checkreg data segment
55 // **** THIS IS NEEDED WHENEVER CHECKREG IS USED ****
56 CHECK_INIT_DEF(p5); //CHECK_INIT(p5, 0x00BFFFFC);
57
58 // Setup User Stack
59 LD32_LABEL(sp, USTACK);
60 USP = SP;
61
62 // Setup Kernel Stack
63 LD32_LABEL(sp, KSTACK);
64
65 // Setup Frame Pointer
66 FP = SP;
67
68 // Setup Event Vector Table
69 LD32(p0, EVT0);
70
71 LD32_LABEL(r0, EMU_ISR); // Emulation Handler (Int0)
72 [ P0 ++ ] = R0;
73 LD32_LABEL(r0, RST_ISR); // Reset Handler (Int1)
74 [ P0 ++ ] = R0;
75 LD32_LABEL(r0, NMI_ISR); // NMI Handler (Int2)
76 [ P0 ++ ] = R0;
77 LD32_LABEL(r0, EXC_ISR); // Exception Handler (Int3)
78 [ P0 ++ ] = R0;
79 [ P0 ++ ] = R0; // IVT4 not used
80 LD32_LABEL(r0, HWE_ISR); // HW Error Handler (Int5)
81 [ P0 ++ ] = R0;
82 LD32_LABEL(r0, TMR_ISR); // Timer Handler (Int6)
83 [ P0 ++ ] = R0;
84 LD32_LABEL(r0, IGV7_ISR); // IVG7 Handler
85 [ P0 ++ ] = R0;
86 LD32_LABEL(r0, IGV8_ISR); // IVG8 Handler
87 [ P0 ++ ] = R0;
88 LD32_LABEL(r0, IGV9_ISR); // IVG9 Handler
89 [ P0 ++ ] = R0;
90 LD32_LABEL(r0, IGV10_ISR); // IVG10 Handler
91 [ P0 ++ ] = R0;
92 LD32_LABEL(r0, IGV11_ISR); // IVG11 Handler
93 [ P0 ++ ] = R0;
94 LD32_LABEL(r0, IGV12_ISR); // IVG12 Handler
95 [ P0 ++ ] = R0;
96 LD32_LABEL(r0, IGV13_ISR); // IVG13 Handler
97 [ P0 ++ ] = R0;
98 LD32_LABEL(r0, IGV14_ISR); // IVG14 Handler
99 [ P0 ++ ] = R0;
100 LD32_LABEL(r0, IGV15_ISR); // IVG15 Handler
101 [ P0 ++ ] = R0;
102
103 // Setup the EVT_OVERRIDE MMR
104 R0 = 0;
105 LD32(p0, EVT_OVERRIDE);
106 [ P0 ] = R0;
107
108 // Setup Interrupt Mask
109 R0 = -1;
110 LD32(p0, IMASK);
111 [ P0 ] = R0;
112
113 // Return to Supervisor Code
114 RAISE 15;
115 NOP;
116
117 LD32_LABEL(r0, USER_CODE);
118 RETI = R0;
119 RTI;
120
121 .dw 0xFFFF
122 .dw 0xFFFF
123 .dw 0xFFFF
124 .dw 0xFFFF
125 .dw 0xFFFF
126 .dw 0xFFFF
127 .dw 0xFFFF
128
129 /////////////////////////////////////////////////////////////////////////////
130
131
132 /////////////////////////////////////////////////////////////////////////////
133 ///////////////////////// EMU ISR /////////////////////////////
134 /////////////////////////////////////////////////////////////////////////////
135
136 EMU_ISR :
137
138 RTE;
139
140 .dw 0xFFFF
141 .dw 0xFFFF
142 .dw 0xFFFF
143 .dw 0xFFFF
144 .dw 0xFFFF
145 .dw 0xFFFF
146 .dw 0xFFFF
147
148 /////////////////////////////////////////////////////////////////////////////
149 ///////////////////////// NMI ISR /////////////////////////////
150 /////////////////////////////////////////////////////////////////////////////
151
152 NMI_ISR :
153
154 RTN;
155
156 .dw 0xFFFF
157 .dw 0xFFFF
158 .dw 0xFFFF
159 .dw 0xFFFF
160 .dw 0xFFFF
161 .dw 0xFFFF
162 .dw 0xFFFF
163
164 /////////////////////////////////////////////////////////////////////////////
165 ///////////////////////// EXC ISR /////////////////////////////
166 /////////////////////////////////////////////////////////////////////////////
167
168 EXC_ISR :
169
170 // Save all the registers used in the ISR
171 [ -- SP ] = R0;
172 [ -- SP ] = R1;
173 [ -- SP ] = P0;
174 [ -- SP ] = P1;
175 [ -- SP ] = LC0;
176 [ -- SP ] = LB0;
177 [ -- SP ] = LT0;
178 [ -- SP ] = ASTAT;
179
180 // Get EXCAUSE bits out of SEQSTAT
181 R0 = SEQSTAT;
182 R0 = R0 << 26;
183 R0 = R0 >> 26;
184
185 // Check for Trace Exception
186 // Load r1 with EXCAUSE for Trace Exception
187 R1 = 0x0011 (Z);
188 // Check for Trace Exception
189 CC = R0 == R1;
190 // Branch to OUT if the EXCAUSE is not TRACE.
191 IF !CC JUMP OUT;
192
193 // Read out the Trace Buffer.
194 LD32(p0, TBUFSTAT);
195 // Read TBUFSTAT MMR
196 P1 = [ P0 ];
197
198 // if p1 is zero skip the loop.
199 CC = P1 == 0;
200 IF CC JUMP OUT;
201
202 // Read out the Entire Trace Buffer.
203 LD32(p0, TBUF);
204 LSETUP ( l0s , l0e ) LC0 = P1;
205 l0s:R0 = [ P0 ];
206 l0e:R0 = [ P0 ];
207
208 OUT:
209 // Check for other exception, if any.
210
211 // Restore all saved registers.
212 ASTAT = [ SP ++ ];
213 LT0 = [ SP ++ ];
214 LB0 = [ SP ++ ];
215 LC0 = [ SP ++ ];
216 P1 = [ SP ++ ];
217 P0 = [ SP ++ ];
218 R1 = [ SP ++ ];
219 R0 = [ SP ++ ];
220
221 // Return
222 RTX;
223
224 .dw 0xFFFF
225 .dw 0xFFFF
226 .dw 0xFFFF
227 .dw 0xFFFF
228 .dw 0xFFFF
229 .dw 0xFFFF
230 .dw 0xFFFF
231
232 /////////////////////////////////////////////////////////////////////////////
233 ///////////////////////// HWE ISR /////////////////////////////
234 /////////////////////////////////////////////////////////////////////////////
235
236 HWE_ISR :
237
238 RTI;
239
240 .dw 0xFFFF
241 .dw 0xFFFF
242 .dw 0xFFFF
243 .dw 0xFFFF
244 .dw 0xFFFF
245 .dw 0xFFFF
246 .dw 0xFFFF
247
248 /////////////////////////////////////////////////////////////////////////////
249 ///////////////////////// TMR ISR /////////////////////////////
250 /////////////////////////////////////////////////////////////////////////////
251
252 TMR_ISR :
253
254 RTI;
255
256 .dw 0xFFFF
257 .dw 0xFFFF
258 .dw 0xFFFF
259 .dw 0xFFFF
260 .dw 0xFFFF
261 .dw 0xFFFF
262 .dw 0xFFFF
263
264 /////////////////////////////////////////////////////////////////////////////
265 ///////////////////////// IGV7 ISR /////////////////////////////
266 /////////////////////////////////////////////////////////////////////////////
267
268 IGV7_ISR :
269
270 RTI;
271
272 .dw 0xFFFF
273 .dw 0xFFFF
274 .dw 0xFFFF
275 .dw 0xFFFF
276 .dw 0xFFFF
277 .dw 0xFFFF
278 .dw 0xFFFF
279
280 /////////////////////////////////////////////////////////////////////////////
281 ///////////////////////// IGV8 ISR /////////////////////////////
282 /////////////////////////////////////////////////////////////////////////////
283
284 IGV8_ISR :
285
286 RTI;
287
288 .dw 0xFFFF
289 .dw 0xFFFF
290 .dw 0xFFFF
291 .dw 0xFFFF
292 .dw 0xFFFF
293 .dw 0xFFFF
294 .dw 0xFFFF
295
296 /////////////////////////////////////////////////////////////////////////////
297 ///////////////////////// IGV9 ISR /////////////////////////////
298 /////////////////////////////////////////////////////////////////////////////
299
300 IGV9_ISR :
301
302 RTI;
303
304 .dw 0xFFFF
305 .dw 0xFFFF
306 .dw 0xFFFF
307 .dw 0xFFFF
308 .dw 0xFFFF
309 .dw 0xFFFF
310 .dw 0xFFFF
311
312 /////////////////////////////////////////////////////////////////////////////
313 ///////////////////////// IGV10 ISR /////////////////////////////
314 /////////////////////////////////////////////////////////////////////////////
315
316 IGV10_ISR :
317
318 RTI;
319
320 .dw 0xFFFF
321 .dw 0xFFFF
322 .dw 0xFFFF
323 .dw 0xFFFF
324 .dw 0xFFFF
325 .dw 0xFFFF
326 .dw 0xFFFF
327
328 /////////////////////////////////////////////////////////////////////////////
329 ///////////////////////// IGV11 ISR /////////////////////////////
330 /////////////////////////////////////////////////////////////////////////////
331
332 IGV11_ISR :
333
334 RTI;
335
336 .dw 0xFFFF
337 .dw 0xFFFF
338 .dw 0xFFFF
339 .dw 0xFFFF
340 .dw 0xFFFF
341 .dw 0xFFFF
342 .dw 0xFFFF
343
344 /////////////////////////////////////////////////////////////////////////////
345 ///////////////////////// IGV12 ISR /////////////////////////////
346 /////////////////////////////////////////////////////////////////////////////
347
348 IGV12_ISR :
349
350 RTI;
351
352 .dw 0xFFFF
353 .dw 0xFFFF
354 .dw 0xFFFF
355 .dw 0xFFFF
356 .dw 0xFFFF
357 .dw 0xFFFF
358 .dw 0xFFFF
359
360 /////////////////////////////////////////////////////////////////////////////
361 ///////////////////////// IGV13 ISR /////////////////////////////
362 /////////////////////////////////////////////////////////////////////////////
363
364 IGV13_ISR :
365
366 RTI;
367
368 .dw 0xFFFF
369 .dw 0xFFFF
370 .dw 0xFFFF
371 .dw 0xFFFF
372 .dw 0xFFFF
373 .dw 0xFFFF
374 .dw 0xFFFF
375
376 /////////////////////////////////////////////////////////////////////////////
377 ///////////////////////// IGV14 ISR /////////////////////////////
378 /////////////////////////////////////////////////////////////////////////////
379
380 IGV14_ISR :
381
382 RTI;
383
384 .dw 0xFFFF
385 .dw 0xFFFF
386 .dw 0xFFFF
387 .dw 0xFFFF
388 .dw 0xFFFF
389 .dw 0xFFFF
390 .dw 0xFFFF
391
392 /////////////////////////////////////////////////////////////////////////////
393 ///////////////////////// IGV15 ISR /////////////////////////////
394 /////////////////////////////////////////////////////////////////////////////
395
396 IGV15_ISR :
397
398 WR_MMR(TBUFCTL, 0x7, p0, r0); // Enable trace buffer & overflow
399
400 CSYNC; // Wait for MMR write to complete
401
402 EXCPT 1;
403 JUMP 4; // Jump gets killed in WB stage
404 NOP;
405 NOP;
406
407 EXCPT 2;
408 NOP;
409 JUMP 4; // Jump gets killed in EX3 stage
410 NOP;
411 NOP;
412
413 EXCPT 3;
414 NOP;
415 NOP;
416 JUMP 4; // Jump gets killed in EX2 stage
417 NOP;
418 NOP;
419
420 EXCPT 4;
421 NOP;
422 NOP;
423 NOP;
424 JUMP 4; // Jump gets killed in EX1 stage
425 NOP;
426 NOP;
427
428 EXCPT 5;
429 NOP;
430 NOP;
431 NOP;
432 NOP;
433 JUMP 4; // Jump gets killed in AC stage
434 NOP;
435 NOP;
436
437 EXCPT 6;
438 NOP;
439 NOP;
440 NOP;
441 NOP;
442 NOP;
443 JUMP 4; // Jump gets killed in DEC stage
444 NOP;
445 NOP;
446
447 EXCPT 7;
448 NOP;
449 NOP;
450 NOP;
451 NOP;
452 NOP;
453 NOP;
454 JUMP 4; // Jump gets killed in IF2 stage
455 NOP;
456 NOP;
457
458 EXCPT 8;
459 NOP;
460 NOP;
461 NOP;
462 NOP;
463 NOP;
464 NOP;
465 NOP;
466 JUMP 4; // Jump gets killed in IF1 stage
467 NOP;
468 NOP;
469
470 // Read out the Rest of the Trace Buffer.
471 LD32(p0, TBUFSTAT);
472 // Read TBUFSTAT MMR
473 P1 = [ P0 ];
474
475 // if p1 is zero skip the loop.
476 CC = P1 == 0;
477 IF CC JUMP OUT1;
478
479 // Read out the Entire Trace Buffer.
480 LD32(p0, TBUF);
481 LSETUP ( l1s , l1e ) LC0 = P1;
482 l1s:R0 = [ P0 ];
483 l1e:R0 = [ P0 ];
484
485 // Don't RTI if you never wish to go to User Mode
486 // use END_TEST instead.
487
488 OUT1:
489 dbg_pass;
490
491 // rti;
492
493 .dw 0xFFFF
494 .dw 0xFFFF
495 .dw 0xFFFF
496 .dw 0xFFFF
497 .dw 0xFFFF
498 .dw 0xFFFF
499 .dw 0xFFFF
500
501 /////////////////////////////////////////////////////////////////////////////
502 ///////////////////////// USER CODE /////////////////////////////
503 /////////////////////////////////////////////////////////////////////////////
504
505
506 USER_CODE :
507
508 // YOUR USER CODE GOES HERE.
509
510 dbg_pass; // Call Endtest Macro
511
512 /////////////////////////////////////////////////////////////////////////////
513 ///////////////////////// DATA MEMRORY /////////////////////////////
514 /////////////////////////////////////////////////////////////////////////////
515
516 .section MEM_DATA_ADDR_1 //.data 0x00F00100,"aw"
517 .dd 0x01010101;
518 .dd 0x02020202;
519 .dd 0x03030303;
520 .dd 0x04040404;
521 .dd 0x05050505;
522 .dd 0x06060606;
523 .dd 0x07070707;
524 .dd 0x08080808;
525 .dd 0x09090909;
526 .dd 0x0a0a0a0a;
527 .dd 0x0b0b0b0b;
528 .dd 0x0c0c0c0c;
529 .dd 0x0d0d0d0d;
530 .dd 0x0e0e0e0e;
531 .dd 0x0f0f0f0f;
532
533 // Define Kernal Stack
534 .section MEM_DATA_ADDR_2 //.data 0x00F00210,"aw"
535 .space (STACKSIZE);
536 KSTACK :
537
538 .space (STACKSIZE);
539 USTACK :
540
541 /////////////////////////////////////////////////////////////////////////////
542 ///////////////////////// END OF TEST /////////////////////////////
543 /////////////////////////////////////////////////////////////////////////////
This page took 0.043746 seconds and 4 git commands to generate.