481 lines
8.7 KiB
ArmAsm
481 lines
8.7 KiB
ArmAsm
//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:
|