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