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