xref: /netbsd-src/external/gpl3/gdb/dist/sim/testsuite/bfin/dbg_brprd_ntkn_src_kill.S (revision 4b169a6ba595ae283ca507b26b15fdff40495b1c)
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"
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/////////////////////////////////////////////////////////////////////////////
39///////////////////////// RESET ISR             /////////////////////////////
40/////////////////////////////////////////////////////////////////////////////
41
42 RST_ISR :
43
44    // Initialize Dregs
45INIT_R_REGS(0);
46
47    // Initialize Pregs
48INIT_P_REGS(0);
49
50    // Initialize ILBM Registers
51INIT_I_REGS(0);
52INIT_M_REGS(0);
53INIT_L_REGS(0);
54INIT_B_REGS(0);
55
56    // Initialize the Address of the Checkreg data segment
57    // **** THIS IS NEEDED WHENEVER CHECKREG IS USED ****
58CHECK_INIT_DEF(p5); //CHECK_INIT(p5,   0x00BFFFFC);
59
60    // Setup User Stack
61LD32_LABEL(sp, USTACK);
62USP = SP;
63
64    // Setup Kernel Stack
65LD32_LABEL(sp, KSTACK);
66
67    // Setup Frame Pointer
68FP = SP;
69
70    // Setup Event Vector Table
71LD32(p0, EVT0);
72
73LD32_LABEL(r0, EMU_ISR);    // Emulation Handler (Int0)
74    [ P0 ++ ] = R0;
75LD32_LABEL(r0, RST_ISR);    // Reset Handler (Int1)
76    [ P0 ++ ] = R0;
77LD32_LABEL(r0, NMI_ISR);    // NMI Handler (Int2)
78    [ P0 ++ ] = R0;
79LD32_LABEL(r0, EXC_ISR);    // Exception Handler (Int3)
80    [ P0 ++ ] = R0;
81    [ P0 ++ ] = R0;                // IVT4 not used
82LD32_LABEL(r0, HWE_ISR);    // HW Error Handler (Int5)
83    [ P0 ++ ] = R0;
84LD32_LABEL(r0, TMR_ISR);    // Timer Handler (Int6)
85    [ P0 ++ ] = R0;
86LD32_LABEL(r0, IGV7_ISR);   // IVG7 Handler
87    [ P0 ++ ] = R0;
88LD32_LABEL(r0, IGV8_ISR);   // IVG8 Handler
89    [ P0 ++ ] = R0;
90LD32_LABEL(r0, IGV9_ISR);   // IVG9 Handler
91    [ P0 ++ ] = R0;
92LD32_LABEL(r0, IGV10_ISR);  // IVG10 Handler
93    [ P0 ++ ] = R0;
94LD32_LABEL(r0, IGV11_ISR);  // IVG11 Handler
95    [ P0 ++ ] = R0;
96LD32_LABEL(r0, IGV12_ISR);  // IVG12 Handler
97    [ P0 ++ ] = R0;
98LD32_LABEL(r0, IGV13_ISR);  // IVG13 Handler
99    [ P0 ++ ] = R0;
100LD32_LABEL(r0, IGV14_ISR);  // IVG14 Handler
101    [ P0 ++ ] = R0;
102LD32_LABEL(r0, IGV15_ISR);  // IVG15 Handler
103    [ P0 ++ ] = R0;
104
105    // Setup the EVT_OVERRIDE MMR
106    R0 = 0;
107LD32(p0, EVT_OVERRIDE);
108    [ P0 ] = R0;
109
110    // Setup Interrupt Mask
111    R0 = -1;
112LD32(p0, IMASK);
113    [ P0 ] = R0;
114
115    // Return to Supervisor Code
116RAISE 15;
117NOP;
118
119LD32_LABEL(r0, USER_CODE);
120RETI = R0;
121RTI;
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
140RTE;
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
156RTN;
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
191CC = R0 == R1;
192    // Branch to OUT if the EXCAUSE is not TRACE.
193IF !CC JUMP OUT;
194
195    // Read out the Trace Buffer.
196LD32(p0, TBUFSTAT);
197    // Read TBUFSTAT MMR
198    P1 = [ P0 ];
199
200    // if p1 is zero skip the loop.
201CC = P1 == 0;
202IF CC JUMP OUT;
203
204    // Read out the Entire Trace Buffer.
205LD32(p0, TBUF);
206LSETUP ( l0s , l0e ) LC0 = P1;
207l0s:R0 = [ P0 ];
208l0e:R0 = [ P0 ];
209
210OUT:
211    // Check for other exception, if any.
212
213    // Restore all saved registers.
214ASTAT = [ SP ++ ];
215LT0 = [ SP ++ ];
216LB0 = [ SP ++ ];
217LC0 = [ SP ++ ];
218    P1 = [ SP ++ ];
219    P0 = [ SP ++ ];
220    R1 = [ SP ++ ];
221    R0 = [ SP ++ ];
222
223    // Return
224RTX;
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
240RTI;
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
256RTI;
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
272RTI;
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
288RTI;
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
304RTI;
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
320RTI;
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
336RTI;
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
352RTI;
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
368RTI;
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
384RTI;
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
400WR_MMR(TBUFCTL, 0x7, p0, r0);       // Enable trace buffer & overflow
401
402CSYNC;      // Wait for MMR write to complete
403
404CC = R7 == R6;      // Set CC
405EXCPT 1;
406IF !CC JUMP 4 (BP);         // Mispredicted branch gets killed in WB stage
407NOP;
408NOP;
409
410EXCPT 2;
411NOP;
412IF !CC JUMP 4 (BP);         // Mispredicted branch gets killed in EX3 stage
413NOP;
414NOP;
415
416EXCPT 3;
417NOP;
418NOP;
419IF !CC JUMP 4 (BP);         // Mispredicted branch gets killed in EX2 stage
420NOP;
421NOP;
422
423EXCPT 4;
424NOP;
425NOP;
426NOP;
427IF !CC JUMP 4 (BP);         // Mispredicted branch gets killed in EX1 stage
428NOP;
429NOP;
430
431EXCPT 5;
432NOP;
433NOP;
434NOP;
435NOP;
436IF !CC JUMP 4 (BP);         // Mispredicted branch gets killed in AC stage
437NOP;
438NOP;
439
440EXCPT 6;
441NOP;
442NOP;
443NOP;
444NOP;
445NOP;
446IF !CC JUMP 4 (BP);         // Mispredicted branch gets killed in DEC stage
447NOP;
448NOP;
449
450EXCPT 7;    NOP;
451NOP;
452NOP;
453NOP;
454NOP;
455NOP;
456IF !CC JUMP 4 (BP);         // Mispredicted branch gets killed in IF2 stage
457NOP;
458NOP;
459
460EXCPT 8;
461NOP;
462NOP;
463NOP;
464NOP;
465NOP;
466NOP;
467NOP;
468IF !CC JUMP 4 (BP);         // Mispredicted branch gets killed in IF1 stage
469NOP;
470NOP;
471
472    // Read out the Rest of the Trace Buffer.
473LD32(p0, TBUFSTAT);
474    // Read TBUFSTAT MMR
475    P1 = [ P0 ];
476
477    // if p1 is zero skip the loop.
478CC = P1 == 0;
479IF CC JUMP OUT1;
480
481    // Read out the Entire Trace Buffer.
482LD32(p0, TBUF);
483LSETUP ( l1s , l1e ) LC0 = P1;
484l1s:R0 = [ P0 ];
485l1e:R0 = [ P0 ];
486
487    // Don't RTI if you never wish to go to User Mode
488    // use END_TEST instead.
489
490OUT1:
491dbg_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
512dbg_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/////////////////////////////////////////////////////////////////////////////
546