binutils-gdb/sim/testsuite/bfin/cec-snen-reti.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

123 lines
2.0 KiB
ArmAsm

# Blackfin testcase for having RETI LSB set correctly when self nested
# mach: bfin
# sim: --environment operating
#include "test.h"
.include "testutils.inc"
start
# Set our handler
imm32 P5, EVT11;
loadsym R1, _ivg11;
[P5] = R1;
loadsym R1, _fail_lvl;
[P5 + 4] = R1; /* IVG12 */
[P5 + 12] = R1; /* IVG14 */
loadsym R1, _ivg13;
[P5 + 8] = R1;
# Enable self nesting
R2 = SYSCFG;
BITSET (R2, 2);
SYSCFG = R2;
CSYNC;
# Enable IVG11/IVG13/IVG14 but not IVG12
cli R3;
BITSET (R3, 11);
BITCLR (R3, 12);
BITSET (R3, 13);
BITSET (R3, 14);
sti R3;
# Counter to keep track of nesting depth
R7 = 0;
# Lower ourselves to IVG11
loadsym R4, _fail_lvl;
RETI = R4;
RAISE 11;
RAISE 12;
RAISE 13;
RAISE 14;
RTI;
# This IVG makes sure RETI LSB is set correctly on transition in (RAISE)
_ivg11:
R0 = RETI;
# Make sure we are indeed at IVG11
imm32 P0, IPEND;
R1 = [P0];
CC = BITTST (R1, 11);
IF !CC JUMP _fail_lvl;
# Make sure LSB of RETI is set only on first pass
CC = ! BITTST (R0, 0);
R1 = CC;
CC = R7 == 0;
R2 = CC;
CC = R1 == R2;
IF !CC JUMP _fail_lvl;
# Nest ourselves a few times
R6 = 3;
CC = R7 < R6;
IF !CC JUMP 1f;
[--sp] = RETI;
R7 += 1;
RAISE 11;
MNOP;
JUMP _fail_lvl;
# Move down to IVG13 for next test
1: loadsym R4, _fail_lvl;
RETI = R4;
RTI;
# This IVG makes sure RETI LSB is respected on transition out (RTI)
_ivg13:
R0 = RETI;
# Make sure we are indeed at IVG13
imm32 P0, IPEND;
R1 = [P0];
CC = BITTST (R1, 13);
IF !CC JUMP _fail_lvl;
# RETI LSB should be set when re-entering IVG13
CC = ! BITTST (R0, 0);
R1 = CC;
CC = R7 == R6;
R2 = CC;
CC = R1 == R2;
IF !CC JUMP _fail_lvl;
# Should get here only after a few IVG11 tests
CC = R7 < R6;
IF CC JUMP _fail_lvl;
# Make sure IVG13 isn't pending
imm32 P0, ILAT;
R1 = [P0];
CC = BITTST (R1, 13);
IF CC JUMP _fail_lvl;
# Manually set RETI to with LSB set so we return there
R5 = R6;
R5 += 3;
CC = R7 < R5;
IF !CC JUMP 1f;
loadsym R1, _ivg13;
BITSET (R1, 0);
RETI = R1;
R7 += 1;
RTI;
# All done!
1: dbg_pass
_fail_lvl:
dbg_fail;