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