binutils-gdb/sim/testsuite/bfin/se_cc_kill.S
Mike Frysinger 1368b914e9 sim: testsuite: flatten tree
Now that all port tests live under testsuite/sim/*/, and none live
in testsuite/ directly, flatten the structure by moving all of the
dirs under testsuite/sim/ to testsuite/ directly.

We need to stop passing --tool to dejagnu so that it searches all
dirs and not just ones that start with "sim".  Since we have no
other dirs in this tree, and no plans to add any, should be fine.
2021-01-15 19:18:34 -05:00

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: