# 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