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