56 lines
967 B
ArmAsm
56 lines
967 B
ArmAsm
# 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
|