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