Home | History | Annotate | Line # | Download | only in bfin
      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