blob: 79688431443e165528717c2e94d1ef0da32ba0e4 [file] [log] [blame]
# Blackfin testcase for the CEC (handling exceptions from usermode)
# mach: bfin
# sim: --environment operating
.include "testutils.inc"
start
.ifndef BFIN_HOST
// load address of exception handler
imm32 p0, 0xFFE02000; /* EVT0 */
R0 = exception_handler (Z);
R0.H = exception_handler;
[ P0 + (4*3) ] = R0;
// Jump to User mode and enable exceptions
R0 = UserCode (Z);
R0.H = UserCode;
RETI = R0;
RTI;
UserCode:
R4 = 0xec39 (Z);
R0 = 0xcafe (Z);
L3 = 0xf41f (Z);
L3.H = 0x1ce9;
I3 = 0xfe10 (Z);
I3.H = 0x20a9;
B3 = 0x4552 (Z);
B3.H = 0x15f0;
// should except - r4 dep
// R4 = R4 >> 25 || W [ I3 ++ ] = R0.H || R4 = [ I3 ];
.Lskip_start:
.rep 8
.byte 0xff
.endr
dbg_fail;
.Lskip_end:
NOP;
NOP;
NOP;
NOP;
NOP;
dbg_pass;
exception_handler:
// just skip over excepting instructions
R0 = RETX;
R1.L = .Lskip_start;
R1.H = .Lskip_start;
R2.L = .Lskip_end;
R2.H = .Lskip_end;
R2 = R2 - R1;
R0 = R0 + R2;
RETX = R0;
RTX;
.endif