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