|
|
1.1 root 1:
2: #include "evt_defs.h"
3:
4: /*
5: ********************************************************************
6: *
7: * MONITOR FOR THE FPP INTEGER-OVERFLOW EVENT TEST
8: *
9: * This test will generate integer-overflow faults with the FPP.
10: * There are 2 ways for the floating point to generate integer overflows:
11: * -either with the convert floating to integer instructions (CVFL, CVDL),
12: * or with the longword integer multiply instructions (MULL2, MULL3).
13: * CVFL and CVDL can cause integer overflows because any floating point
14: * accumulator larger than +(2**23)-1 or -2**23 will be too big to store
15: * as a longword integer.
16: * The test will cause the overflows with and without the integer
17: * overflow event being enabled. If the event is enabled we'll get an
18: * arithmetic trap (but the overflow bit (V) will NOT be set in the PSL.
19: * If the event is disabled then no event will occur but the 'V' bit
20: * will be set in the PSL.
21: * The integer multiplys will only be tested if there is an active FPP
22: * in the system. The converts will always be tested.
23: *
24: * 26-Mar-85 : written
25: * 20-Jul-85 : added MULL2, MULL3
26: *
27: ********************************************************************
28: */
29: int_ovfl_test()
30: {
31: event_msg = "Integer Overflow";
32: test_event = ARITH_CODE; /* expect an arithmetic fault */
33: exp_code = INT_OVFL_CODE; /* -specificly integer overflow */
34: if( evt_inst ) { /* was the op-code specified? */
35: if( evt_inst == CVFL_OP_CODE )
36: run_cvfl(); /* test the CVFL instruction */
37: else if( evt_inst == CVDL_OP_CODE )
38: run_cvdl(); /* test the CVDL instruction */
39: else if( evt_inst == MULL2_OP_CODE ) {
40: if( !no_fpp_wcs )
41: run_mull2(); /* test the MULL2 instruction */
42: else {
43: if( (prt_hdrs) && (cycle == 1) )
44: writes("MULL2 is only tested with FPP hardware\n");
45: }
46: }
47: else if( evt_inst == MULL3_OP_CODE ) {
48: if( !no_fpp_wcs )
49: run_mull3(); /* test the MULL3 instruction */
50: else {
51: if( (prt_hdrs) && (cycle == 1) )
52: writes("MULL3 is only tested with FPP hardware\n");
53: }
54: }
55: else if( (prt_hdrs) && (cycle == 1) ) {
56: writes(
57: "There are no INTEGER OVERFLOW faults with op-code ");
58: writeh( evt_inst ); /* print the ersatz op-code */
59: writec('\n');
60: error = TRUE; /* needed for line feed spacing */
61: }
62: }
63: else { /* test all instructions */
64: run_cvfl(); /* test the CVFL instruction */
65: run_cvdl(); /* test the CVDL instruction */
66: if( !no_fpp_wcs ) {
67: run_mull2(); /* test the MULL2 instruction */
68: run_mull3(); /* test the MULL3 instruction */
69: }
70: }
71: }
72:
73:
74: /*
75: **********************************************************************
76: *
77: * SET UP TO TEST INTEGER OVERFLOW WITH THE CVFL INSTRUCTION
78: *
79: **********************************************************************
80: */
81: run_cvfl()
82: {
83: valid_test = TRUE; /* a test is being run */
84: op_code = CVFL_OP_CODE; /* set the inst's op_code */
85: op_name = "CVFL "; /* set the inst's name */
86: precision = SGL;
87: acc_ld_size = SGL; /* load a single precision Acc. */
88: sgl_op = TRUE;
89: no_ops = 1; /* one operand */
90: data_ptr = cvfl_ov_dat; /* set the data ptr */
91: max_index = cvfl_ov_cnt; /* set the max index */
92: if( (prt_hdrs) && (cycle == 1) )
93: writes( op_name );
94: disable_mask = 0; /* don't disable any events */
95: evt_disabled = FALSE; /* expected event is enabled */
96: test_inst();
97: disable_mask = PSL_EN_OVFL; /* disable the int ovfl event */
98: evt_disabled = TRUE;
99: test_inst();
100: }
101:
102: /*
103: **********************************************************************
104: *
105: * SET UP TO TEST INTEGER OVERFLOW WITH THE CVDL INSTRUCTION
106: *
107: **********************************************************************
108: */
109: run_cvdl()
110: {
111: valid_test = TRUE; /* a test is being run */
112: op_code = CVDL_OP_CODE; /* set the inst's op_code */
113: op_name = "CVDL "; /* set the inst's name */
114: precision = DBL;
115: acc_ld_size = DBL; /* load a double precision Acc. */
116: sgl_op = TRUE;
117: no_ops = 1; /* one operand */
118: data_ptr = cvdl_ov_dat; /* set the data ptr */
119: max_index = cvdl_ov_cnt; /* set the max index */
120: if( (prt_hdrs) && (cycle == 1) )
121: writes( op_name );
122: disable_mask = 0; /* don't disable any events */
123: evt_disabled = FALSE; /* expected event is enabled */
124: test_inst();
125: disable_mask = PSL_EN_OVFL; /* disable the int ovfl event */
126: evt_disabled = TRUE;
127: test_inst();
128: }
129:
130:
131: /*
132: **********************************************************************
133: *
134: * SET UP TO TEST INTEGER OVERFLOW WITH THE MULL2 INSTRUCTION
135: *
136: **********************************************************************
137: */
138: run_mull2()
139: {
140: valid_test = TRUE; /* a test is being run */
141: op_code = MULL2_OP_CODE; /* set the inst's op_code */
142: op_name = "MULL2 "; /* set the inst's name */
143: precision = SGL;
144: acc_ld_size = DBL; /* load a double precision Acc. */
145: sgl_op = TRUE;
146: no_ops = 2; /* two operands */
147: data_ptr = mull_ov_dat; /* set the data ptr */
148: max_index = mull_ov_cnt; /* set the max index */
149: if( (prt_hdrs) && (cycle == 1) )
150: writes( op_name );
151: disable_mask = 0; /* don't disable any events */
152: evt_disabled = FALSE; /* expected event is enabled */
153: test_inst();
154: disable_mask = PSL_EN_OVFL; /* disable the int ovfl event */
155: evt_disabled = TRUE;
156: test_inst();
157: }
158:
159:
160:
161: /*
162: **********************************************************************
163: *
164: * SET UP TO TEST INTEGER OVERFLOW WITH THE MULL3 INSTRUCTION
165: *
166: **********************************************************************
167: */
168: run_mull3()
169: {
170: valid_test = TRUE; /* a test is being run */
171: op_code = MULL3_OP_CODE; /* set the inst's op_code */
172: op_name = "MULL3 "; /* set the inst's name */
173: precision = SGL;
174: acc_ld_size = DBL; /* load a double precision Acc. */
175: sgl_op = TRUE;
176: no_ops = 3; /* three operands */
177: data_ptr = mull_ov_dat; /* set the data ptr */
178: max_index = mull_ov_cnt; /* set the max index */
179: if( (prt_hdrs) && (cycle == 1) )
180: writes( op_name );
181: disable_mask = 0; /* don't disable any events */
182: evt_disabled = FALSE; /* expected event is enabled */
183: test_inst();
184: disable_mask = PSL_EN_OVFL; /* disable the int ovfl event */
185: evt_disabled = TRUE;
186: test_inst();
187: }
188:
189:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.