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