|
|
1.1 root 1: #include "fpp_defs.h"
2:
3: /*************************************************************************
4: *
5: * FLOATING POINT PROCESSOR EXCEPTION HANDLER
6: *
7: * This routine will be called after any trap or exception. It will
8: * compare the actual event type to any expected event type ( in
9: * _EXP_EVENT ). If no event was expected _EXP_EVENT will be = 0.
10: *
11: * If a previous error has set the FORCE_LOOP flag, then the test will exit
12: * through the loop address pointer without any event type checking.
13: * current subtest through _EVENT_RETURN.
14: *
15: * If the event was NOT it expected:
16: * if _PRT_ERROR is set, an error message will be printed.
17: * if _HALT_FLG is set, the program will halt.
18: * if _UNEXP_EVENT_RET is non-zero, it will contain the return address,
19: * or the program will return to the monitor via RETURN.
20: *
21: * The error message will be of the form:
22: * ** cycle: xx. test: xx. unexpected event type: xx
23: * ** Par0 : xxxxxxxx
24: * ** Par1 : xxxxxxxx
25: * ** PC : xxxxxxxx
26: * ** PSL : xxxxxxxx
27: *
28: *
29: * 30-Apr-85 combined 'fpp_event.s' and 'trap.c' into 'fpp_event.c'.
30: *
31: *************************************************************************/
32:
33: XTrap( code )
34: long code; /* event type code */
35: {
36: register long r12, r11, r10, r9, r8;
37: long tpc, tpsl;
38: if( force_loop ) /* check for continual looping */
39: asm("jmp *_event_return");;
40: asm("movl 8(fp),r12"); /* get par 0 */
41: asm("movl 12(fp),r11"); /* get par 1 */
42: asm("movl 16(fp),r10"); /* get par 2 */
43: asm("movl 20(fp),r9"); /* get par 3 */
44: asm("movl 24(fp),r8"); /* get par 4 */
45: if( code == ARITH_CODE ) {
46: event_code = r12; /* set the arith fault type seen */
47: event_psl = r10; /* take the PSL off the stack */
48: } else
49: event_psl = r11;; /* take the PSL off the stack */
50: if( code == exp_event ) { /* was the event expected? */
51: if( (exp_event != ARITH_CODE) || (exp_code == r12) )
52: asm("jmp *_event_return");; /* exit -the evt was expected */
53: }
54: /*
55: * If we get here then the event was not expected
56: */
57: errcnt++; /* bump the error count */
58: if( prt_error ) {
59: if( !error ) {
60: error = TRUE; /* set current-error flag */
61: writec('\n');
62: }
63: writes("\n** cycle: ");
64: writed( cycle );
65: writes(". test: ");
66: writeh( test_no );
67: writes(". unexpected event -type: ");
68: writeh( code );
69: writec('\n');
70: if( code==0x37 ) { /* FPP Emulation trap */
71: writes("** Par 0 : "); write32h(r12); writec('\n');
72: writes("** Par 1 : "); write32h(r11); writec('\n');
73: writes("** Par 2 : "); write32h(r10); writec('\n');
74: tpc = r9;
75: tpsl = r8;
76: } else
77: if( (code==0x20) || /* bus error */
78: (code==0x2f) || /* access control violation */
79: (code==0x30) ) { /* page fault */
80: writes("** Par 0 : "); write32h(r12); writec('\n');
81: writes("** Par 1 : "); write32h(r11); writec('\n');
82: tpc = r10;
83: tpsl = r9;
84: } else
85: if( (code==0x34) || /* arithmetic acception */
86: (code==0x2b) ) { /* Kcall */
87: writes("** Par. : ");
88: writeh(r12); writec('\n');
89: tpc = r11;
90: tpsl = r10;
91: } else {
92: tpc = r12;
93: tpsl = r11;
94: }
95: writes("** PC : "); write32h(tpc); writec('\n');
96: writes("** PSL : "); write32h(tpsl); writec('\n');
97: }
98: if( halt_flg ) { /* halt on the error? */
99: asm("movl _test_no,r0"); /* r0 = test number */
100: asm("clrl r1"); /* r1 = 0 (subtest #) */
101: asm("movl _event_type,r2"); /* r2 = event code */
102: asm("movl _cycle,r3"); /* r3 = cycle count */
103: asm("movl r12,r4"); /* r4 = parameter 1 */
104: asm("movl r11,r5"); /* r5 = parameter 2 */
105: asm("movl r10,r6"); /* r6 = parameter 3 */
106: asm("movl r9,r7"); /* r7 = parameter 4 */
107: asm("movl _index,r8"); /* r8 = data index */
108: asm("halt"); /* halt */
109: }
110: if( unexp_event_ret )
111: asm("jmp *_unexp_event_ret"); /* return to the test */
112: else
113: asm("jmp *return");
114: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.