| //Original:/proj/frio/dv/testcases/seq/se_cc_kill/se_cc_kill.dsp |
| // Description: |
| // Verify CC kill under the following condition: |
| // |
| // (1) CC = AZ killed in WB |
| // (2) CC = AN killed in WB |
| // (3) CC = AC killed in WB |
| // (4) CC = AV0 killed in WB |
| // (5) CC = AV1 killed in WB |
| // (6) CC = AQ killed in WB |
| # mach: bfin |
| # sim: --environment operating |
| |
| #include "test.h" |
| .include "testutils.inc" |
| start |
| |
| // ---------------------------------------------------------------- |
| // Include Files |
| // ---------------------------------------------------------------- |
| |
| include(std.inc) |
| include(selfcheck.inc) |
| include(symtable.inc) |
| include(mmrs.inc) |
| |
| // ---------------------------------------------------------------- |
| // Defines |
| // ---------------------------------------------------------------- |
| |
| #ifndef STACKSIZE |
| #define STACKSIZE 0x00000010 |
| #endif |
| #ifndef ITABLE |
| #define ITABLE CODE_ADDR_1 // |
| #endif |
| |
| |
| // ---------------------------------------------------------------- |
| // Reset ISR |
| // - set the processor operating modes |
| // - initialize registers |
| // - etc ... |
| // ---------------------------------------------------------------- |
| |
| RST_ISR: |
| |
| // Initialize data registers |
| //INIT_R_REGS(0); |
| R7 = 0; |
| R6 = 0; |
| R5 = 0; |
| R4 = 0; |
| R3 = 0; |
| R2 = 0; |
| R1 = 0; |
| R0 = 0; |
| |
| // Initialize pointer registers |
| INIT_P_REGS(0); |
| |
| // Initialize address registers |
| INIT_I_REGS(0); |
| INIT_M_REGS(0); |
| INIT_L_REGS(0); |
| INIT_B_REGS(0); |
| |
| // Initialize the address of the checkreg data segment |
| // **** THIS IS NEEDED WHENEVER CHECKREG IS USED **** |
| CHECK_INIT_DEF(p5); //CHECK_INIT(p5, 0x00BFFFFC); |
| |
| // Inhibit events during MMR writes |
| CLI R1; |
| |
| // Setup user stack |
| LD32_LABEL(sp, USTACK); |
| USP = SP; |
| |
| // Setup kernel stack |
| LD32_LABEL(sp, KSTACK); |
| |
| // Setup frame pointer |
| FP = SP; |
| |
| // Setup event vector table |
| LD32(p0, EVT0); |
| |
| LD32_LABEL(r0, EMU_ISR); // Emulation Handler (EVT0) |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, RST_ISR); // Reset Handler (EVT1) |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, NMI_ISR); // NMI Handler (EVT2) |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, EXC_ISR); // Exception Handler (EVT3) |
| [ P0 ++ ] = R0; |
| [ P0 ++ ] = R0; // EVT4 not used |
| LD32_LABEL(r0, HWE_ISR); // HW Error Handler (EVT5) |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, TMR_ISR); // Timer Handler (EVT6) |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, IGV7_ISR); // IVG7 Handler |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, IGV8_ISR); // IVG8 Handler |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, IGV9_ISR); // IVG9 Handler |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, IGV10_ISR); // IVG10 Handler |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, IGV11_ISR); // IVG11 Handler |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, IGV12_ISR); // IVG12 Handler |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, IGV13_ISR); // IVG13 Handler |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, IGV14_ISR); // IVG14 Handler |
| [ P0 ++ ] = R0; |
| LD32_LABEL(r0, IGV15_ISR); // IVG15 Handler |
| [ P0 ++ ] = R0; |
| |
| // Set the EVT_OVERRIDE MMR |
| LD32(p0, EVT_OVERRIDE); |
| R0 = 0; |
| [ P0 ++ ] = R0; |
| |
| // Disable L1 data cache |
| WR_MMR(DMEM_CONTROL, 0x00000000, p0, r0); |
| |
| // Mask interrupts (*) |
| R1 = -1; |
| |
| // Wait for MMR writes to finish |
| CSYNC; |
| |
| // Re-enable events |
| STI R1; |
| |
| // Reset loop counters to deterministic values |
| R0 = 0 (Z); |
| |
| LT0 = R0; |
| LB0 = R0; |
| LC0 = R0; |
| LT1 = R0; |
| LB1 = R0; |
| LC1 = R0; |
| |
| // Reset other internal regs |
| ASTAT = R0; |
| SYSCFG = R0; |
| RETS = R0; |
| |
| // Setup the test to run in USER mode |
| LD32_LABEL(r0, USER_CODE); |
| RETI = R0; |
| |
| // Setup the test to run in SUPERVISOR mode |
| // Comment the following line for a USER mode test |
| JUMP.S SUPERVISOR_CODE; |
| RTI; |
| |
| SUPERVISOR_CODE: |
| // Load IVG15 general handler (Int15) with MAIN_CODE |
| LD32_LABEL(p1, MAIN_CODE); |
| |
| LD32(p0, EVT15); |
| |
| CLI R1; |
| [ P0 ] = P1; |
| CSYNC; |
| STI R1; |
| |
| // Take Int15 which branch to MAIN_CODE after RTI |
| RAISE 15; |
| RTI; |
| |
| USER_CODE: |
| // Setup the stack pointer and the frame pointer |
| LD32_LABEL(sp, USTACK); |
| FP = SP; |
| JUMP.S MAIN_CODE; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // ISR Table |
| // ---------------------------------------------------------------- |
| |
| |
| // ---------------------------------------------------------------- |
| // EMU ISR |
| // ---------------------------------------------------------------- |
| |
| EMU_ISR : |
| |
| RTE; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // NMI ISR |
| // ---------------------------------------------------------------- |
| |
| NMI_ISR : |
| |
| RTN; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // EXC ISR |
| // ---------------------------------------------------------------- |
| |
| EXC_ISR : |
| |
| RTX; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // HWE ISR |
| // ---------------------------------------------------------------- |
| |
| HWE_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // TMR ISR |
| // ---------------------------------------------------------------- |
| |
| TMR_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // IGV7 ISR |
| // ---------------------------------------------------------------- |
| |
| IGV7_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // IGV8 ISR |
| // ---------------------------------------------------------------- |
| |
| IGV8_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // IGV9 ISR |
| // ---------------------------------------------------------------- |
| |
| IGV9_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // IGV10 ISR |
| // ---------------------------------------------------------------- |
| |
| IGV10_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // IGV11 ISR |
| // ---------------------------------------------------------------- |
| |
| IGV11_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // IGV12 ISR |
| // ---------------------------------------------------------------- |
| |
| IGV12_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // IGV13 ISR |
| // ---------------------------------------------------------------- |
| |
| IGV13_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // IGV14 ISR |
| // ---------------------------------------------------------------- |
| |
| IGV14_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // IGV15 ISR |
| // ---------------------------------------------------------------- |
| |
| IGV15_ISR : |
| |
| RTI; |
| |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| .dw 0xFFFF |
| |
| // ---------------------------------------------------------------- |
| // Main Code |
| // ---------------------------------------------------------------- |
| |
| |
| MAIN_CODE: |
| // Enable interrupts in SUPERVISOR mode |
| // Comment the following line for a USER mode test |
| [ -- SP ] = RETI; |
| |
| // Start of the program code |
| |
| // Verify CC kill under the following condition: |
| |
| // (1) CC = AZ killed in WB |
| CC = R2 < R3; |
| EXCPT 3; |
| CC = AZ; |
| |
| // (2) CC = AN killed in WB |
| CC = R2 == R3; |
| EXCPT 3; |
| CC = AN; |
| |
| // (3) CC = AC killed in WB |
| CC = R2 < R3; |
| EXCPT 3; |
| CC = AC0; |
| |
| // (4) CC = AV0 killed in WB |
| CC = R2 == R3; |
| EXCPT 3; |
| CC = AV0; |
| |
| // (5) CC = AV1 killed in WB |
| CC = R2 == R3; |
| EXCPT 3; |
| CC = AV1; |
| |
| // (6) CC = AQ killed in WB |
| CC = R2 == R3; |
| EXCPT 3; |
| CC = AQ; |
| |
| |
| END: |
| dbg_pass; |
| |
| // ---------------------------------------------------------------- |
| // Data Segment |
| // - define kernel and user stacks |
| // ---------------------------------------------------------------- |
| |
| .data |
| DATA: |
| .space (STACKSIZE); |
| |
| .space (STACKSIZE); |
| KSTACK: |
| |
| .space (STACKSIZE); |
| USTACK: |