mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
100 lines
1.8 KiB
ArmAsm
100 lines
1.8 KiB
ArmAsm
|
//Original:/proj/frio/dv/testcases/core/c_except_illopcode/c_except_illopcode.dsp
|
||
|
// Spec Reference: c_exception illegal opcode
|
||
|
# mach: bfin
|
||
|
# sim: --environment operating
|
||
|
|
||
|
#include "test.h"
|
||
|
.include "testutils.inc"
|
||
|
start
|
||
|
|
||
|
include(std.inc)
|
||
|
include(selfcheck.inc)
|
||
|
INIT_R_REGS(0);
|
||
|
INIT_P_REGS(0);
|
||
|
//CHECK_INIT(p5, 0xe0000000);
|
||
|
include(symtable.inc)
|
||
|
CHECK_INIT_DEF(p5);
|
||
|
|
||
|
// load address of exception handler
|
||
|
|
||
|
P0 = 0x200C (Z); // 0xFFE0200C EVT3 EXCEPTION
|
||
|
P0.H = 0xFFE0;
|
||
|
R0 = exception_handler (Z); // wr address of exception handler to MMR EVT3
|
||
|
R0.H = exception_handler;
|
||
|
[ P0 ] = R0;
|
||
|
|
||
|
// Jump to User mode and enable exceptions
|
||
|
|
||
|
R0 = MidUserCode (Z);
|
||
|
R0.H = MidUserCode;
|
||
|
RETI = R0;
|
||
|
RTI; // cause it to go to Midusercode, .dd cause exception
|
||
|
|
||
|
BeginUserCode:
|
||
|
P1 = 1;
|
||
|
P2 = 2;
|
||
|
P3 = 3;
|
||
|
P4 = 4;
|
||
|
|
||
|
CHECKREG(r0, 0x00000000);
|
||
|
CHECKREG(r1, 0x00000001);
|
||
|
CHECKREG(r2, 0x00000002);
|
||
|
CHECKREG(r3, 0x00000003);
|
||
|
// CHECKREG(r4, 0x00000098);
|
||
|
CHECKREG(r5, 0x00000005);
|
||
|
CHECKREG(r6, 0x00000006);
|
||
|
CHECKREG(r7, 0x00000007);
|
||
|
CHECKREG(p1, 0x00000001);
|
||
|
CHECKREG(p2, 0x00000002);
|
||
|
CHECKREG(p3, 0x00000003);
|
||
|
CHECKREG(p4, 0x00000004);
|
||
|
|
||
|
dbg_pass;
|
||
|
//jump 2;
|
||
|
//jump -2;
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
|
||
|
//dbg_pass;
|
||
|
|
||
|
MidUserCode:
|
||
|
.dd 0xFFFFFFFF
|
||
|
R0 = 0;
|
||
|
R1 = 1;
|
||
|
R2 = 2;
|
||
|
R3 = 3;
|
||
|
CC = R0;
|
||
|
IF !CC JUMP BeginUserCode;
|
||
|
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
.dd 0xFFFFFFFF
|
||
|
|
||
|
//.code 0x800
|
||
|
|
||
|
exception_handler:
|
||
|
R4 = RETX; // error handler: RETX has the address of the same Illegal instr
|
||
|
R5 = 5;
|
||
|
R6 = 6;
|
||
|
R7 = 7;
|
||
|
R4 += 4; // we have to add 4 to point to next instr after return
|
||
|
RETX = R4;
|
||
|
|
||
|
RTX; // return from exception
|
||
|
//nop;
|
||
|
|
||
|
.section MEM_DATA_ADDR_1,"aw"
|
||
|
.dd 0xDEADBEEF
|
||
|
.dd 0xBAD00BAD
|