1//Original:/proj/frio/dv/testcases/core/c_except_illopcode/c_except_illopcode.dsp
2// Spec Reference: c_exception illegal opcode
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
18// load address of exception handler
19
20P0 = 0x200C (Z);              // 0xFFE0200C EVT3 EXCEPTION
21P0.H = 0xFFE0;
22R0 = exception_handler (Z);   // wr address of exception handler to MMR EVT3
23R0.H = exception_handler;
24[ P0 ] = R0;
25
26//  Jump to User mode and enable exceptions
27
28R0 = MidUserCode (Z);
29R0.H = MidUserCode;
30RETI = R0;
31RTI;            // cause it to go to Midusercode, .dd cause exception
32
33BeginUserCode:
34P1 = 1;
35P2 = 2;
36P3 = 3;
37P4 = 4;
38
39CHECKREG(r0, 0x00000000);
40CHECKREG(r1, 0x00000001);
41CHECKREG(r2, 0x00000002);
42CHECKREG(r3, 0x00000003);
43// CHECKREG(r4, 0x00000098);
44CHECKREG(r5, 0x00000005);
45CHECKREG(r6, 0x00000006);
46CHECKREG(r7, 0x00000007);
47CHECKREG(p1, 0x00000001);
48CHECKREG(p2, 0x00000002);
49CHECKREG(p3, 0x00000003);
50CHECKREG(p4, 0x00000004);
51
52dbg_pass;
53//jump 2;
54//jump -2;
55.dd 0xFFFFFFFF
56.dd 0xFFFFFFFF
57.dd 0xFFFFFFFF
58.dd 0xFFFFFFFF
59.dd 0xFFFFFFFF
60.dd 0xFFFFFFFF
61.dd 0xFFFFFFFF
62.dd 0xFFFFFFFF
63
64//dbg_pass;
65
66MidUserCode:
67.dd 0xFFFFFFFF
68R0 = 0;
69R1 = 1;
70R2 = 2;
71R3 = 3;
72CC = R0;
73IF !CC JUMP BeginUserCode;
74
75.dd 0xFFFFFFFF
76.dd 0xFFFFFFFF
77.dd 0xFFFFFFFF
78.dd 0xFFFFFFFF
79.dd 0xFFFFFFFF
80.dd 0xFFFFFFFF
81.dd 0xFFFFFFFF
82.dd 0xFFFFFFFF
83
84//.code 0x800
85
86exception_handler:
87R4 = RETX;   // error handler: RETX has the address of the same Illegal instr
88R5 = 5;
89R6 = 6;
90R7 = 7;
91R4 += 4;     // we have to add 4 to point to next instr after return
92RETX = R4;
93
94RTX;  // return from exception
95  //nop;
96
97.section MEM_DATA_ADDR_1,"aw"
98.dd 0xDEADBEEF
99.dd 0xBAD00BAD
100