1//Original:/proj/frio/dv/testcases/core/c_progctrl_except_rtx/c_progctrl_except_rtx.dsp 2// Spec Reference: c_progctrl_except_rtx 3# mach: bfin 4# sim: --environment operating 5 6#include "test.h" 7.include "testutils.inc" 8start 9 10include(std.inc) 11include(selfcheck.inc) 12INIT_R_REGS(0); 13INIT_P_REGS(0); 14//CHECK_INIT(p5, 0xe0000000); 15include(symtable.inc) 16CHECK_INIT_DEF(p5); 17// load address of exception handler 18 19P0 = 0x200C (Z); // 0xFFE0200C EVT3 EXCEPTION 20P0.H = 0xFFE0; 21R0 = exception_handler (Z); // wr address of exception handler to MMR EVT3 22R0.H = exception_handler; 23[ P0 ] = R0; 24 25// Jump to User mode and enable exceptions 26 27R0 = MidUserCode (Z); 28R0.H = MidUserCode; 29RETI = R0; 30RTI; // cause it to go to Midusercode, .dd cause exception 31 32BeginUserCode: 33P1 = 1; 34P2 = 2; 35P3 = 3; 36P4 = 4; 37 38CHECKREG(r0, 0x00000000); 39CHECKREG(r1, 0x00000001); 40CHECKREG(r2, 0x00000002); 41CHECKREG(r3, 0x00000003); 42CHECKREG(r5, 0x00000000); 43CHECKREG(r6, 0x00000000); 44CHECKREG(r7, 0x00000000); 45CHECKREG(p1, 0x00000001); 46CHECKREG(p2, 0x00000002); 47CHECKREG(p3, 0x00000003); 48CHECKREG(p4, 0x00000004); 49 50dbg_pass; 51//jump 2; 52//jump -2; 53.dd 0xFFFFFFFF 54.dd 0xFFFFFFFF 55.dd 0xFFFFFFFF 56.dd 0xFFFFFFFF 57.dd 0xFFFFFFFF 58.dd 0xFFFFFFFF 59.dd 0xFFFFFFFF 60.dd 0xFFFFFFFF 61 62//dbg_pass; 63 64MidUserCode: 65.dd 0xFFFFFFFF 66R0 = 0; 67R1 = 1; 68R2 = 2; 69R3 = 3; 70CC = R0; 71IF !CC JUMP BeginUserCode; 72 73.dd 0xFFFFFFFF 74.dd 0xFFFFFFFF 75.dd 0xFFFFFFFF 76.dd 0xFFFFFFFF 77.dd 0xFFFFFFFF 78.dd 0xFFFFFFFF 79.dd 0xFFFFFFFF 80.dd 0xFFFFFFFF 81 82 83exception_handler: 84R4 = RETX; // error handler: RETX has the address of the same Illegal instr 85R1 += 1; 86R2 += 2; 87R3 += 3; 88R1 += 1; 89R4 += 4; // we have to add 4 to point to next instr after return 90RETX = R4; 91 92RTX; // return from exception 93 94.section MEM_DATA_ADDR_1,"aw" 95.dd 0xDEADBEEF 96.dd 0xBAD00BAD 97