|
|
1.1 root 1:
2: #include "dmp_defs.h"
3:
4: /***********************************************************************
5: *
6: * Verify results after a single precision TSTF or CMPF(2) instruction
7: *
8: * The final PSL value is compared to the expected value. Also, the
9: * final accumulator and the registers are checked to make sure that
10: * they weren't modified.
11: ***********************************************************************/
12: chk_sgl_psl()
13: {
14: sgl_ld_acc = dbl_ld_acc.m; /* move the data to */
15: sgl_st_acc = dbl_st_acc.m; /* the sgl data */
16: sgl_expected = dbl_expected.m; /* operands */
17: sgl_value_1 = dbl_value_1.m;
18: sgl_value_2 = dbl_value_2.m;
19: if( sgl_ld_acc & 0x7f800000 ) /* get final ACC expected */
20: sgl_value_5 = sgl_ld_acc;
21: else
22: sgl_value_5 = 0;
23: exp_psl = init_psl; /* get the initial PSL */
24: exp_psl &= 0xffffff71; /* clear DBL & flag bits */
25: exp_psl |= PSL_C; /* set the CARRY bit */
26: if( sgl_expected == ZERO )
27: exp_psl |= PSL_Z; /* expect the ZERO bit set */
28: if( sgl_expected == NEGATIVE )
29: exp_psl |= PSL_N; /* expect the NEG bit set */
30: if( psl_val != exp_psl )
31: {
32: errcnt++;
33: if( prt_error )
34: prt_s_psl_e( bad_psl_msg );
35: if( halt_flg )
36: hlt_s_psl_e( 1 ); /* error code 1 */
37: if( loop_on_err )
38: force_loop = TRUE; /* set loop flag */
39: }
40: else if( no_page_faults != exp_page_faults ) {
41: errcnt++;
42: if( prt_error )
43: prt_s_psl_e( trans_flt_cnt_msg );
44: if( halt_flg )
45: hlt_s_psl_e( 2 ); /* error code 2 */
46: if( loop_on_err )
47: force_loop = TRUE; /* set loop flag */
48: }
49: else if( sgl_st_acc != sgl_value_5 ) {
50: errcnt++;
51: if( prt_error )
52: prt_s_psl_e( acc_modified_msg );
53: if( halt_flg )
54: hlt_s_psl_e( 3 ); /* error code 3 */
55: if( loop_on_err )
56: force_loop = TRUE; /* set loop flag */
57: }
58: else {
59: reg_no = 0;
60: regs_ok = TRUE;
61: while( (reg_no <= 13) && (regs_ok) ) /* check 1st 13 regs */
62: if( store_regs[ reg_no ] == exp_regs[ reg_no ] )
63: reg_no++;
64: else
65: regs_ok = FALSE;
66: if( !regs_ok )
67: {
68: errcnt++;
69: if( prt_error )
70: prt_s_psl_e( reg_modified_msg );
71: if( halt_flg )
72: hlt_s_psl_e( 4 ); /* error code 4 */
73: if( loop_on_err )
74: force_loop = TRUE; /* set loop flag */
75: }
76: }
77: }
78:
79:
80:
81:
82: /************************************************************************
83: * CHK_SGL_PSL
84: *
85: * cycle: xx. DMP test xx. <inst>. <error message>, index = xx
86: * addressing mode: <addressing mode description>
87: * inst buf= xx xx xx xx xx xx xx xx xx xx xx -page faults on byte(s) 0, x
88: * initial Acc = xxxxxxxx, operand 1 = xxxxxxxx, xx page faults occurred
89: * final Acc = xxxxxxxx, operand 2 = xxxxxxxx, xx page faults expected
90: * initial PSL = xxxxxxxx, final PSL = xxxxxxxx, expected PSL = xxxxxxxx
91: ************************************************************************/
92: prt_s_psl_e( message )
93: char *message;
94: {
95: prt_dmp_er_msg( message ); /* print the error header */
96: writes("initial Acc = ");
97: write32h( sgl_ld_acc ); /* print Acc loaded */
98: if( no_ops ) {
99: writes(", operand 1 = ");
100: write32h( sgl_value_1 ); /* write op 1 data */
101: }
102: writes(", ");
103: writed( no_page_faults ); /* print # page faults */
104: writes(" page faults occurred\n");
105: writes(" final Acc = "); /* print final Acc data */
106: write32h( sgl_st_acc );
107: if( no_ops == 2 ) {
108: writes(", operand 2 = ");
109: write32h( sgl_value_2 ); /* write op 2 data */
110: writec(',');
111: } else if( no_ops == 1 )
112: writes(", "); /* (only 1 operand) */
113: else
114: writec(','); /* (there were no operands) */
115: writes(" ");
116: writed( exp_page_faults ); /* print # page faults */
117: writes(" page faults expected\n");
118: writes("initial PSL = "); /* print PSL data */
119: write32h( init_psl );
120: writes(", final PSL = ");
121: write32h( psl_val );
122: writes(", expected PSL = ");
123: write32h( exp_psl );
124: writec('\n');
125: if( message == reg_modified_msg ) /* print modified register */
126: prt_reg_data(); /* print bad register */
127: }
128:
129:
130:
131: /**************************************************************************
132: * Set up the registers and halt
133: **************************************************************************/
134: hlt_s_psl_e( code )
135: int code;
136: {
137: sgl_dummy1 = code;
138: asm("movl _test_no,r0"); /* r0 = test number */
139: asm("movl _addr_code,r1"); /* r1 = addressing mode */
140: asm("movl _sgl_dummy1,r2"); /* r2 = error code */
141: asm("movl _cycle,r3"); /* r3 = cycle count */
142: asm("movl _sgl_ld_acc,r4"); /* r4 = initial Acc. */
143: if( no_ops )
144: asm("movl _sgl_value_1,r5"); /* r5 = operand 1 */
145: else
146: asm("clrl r5");;
147: if( no_ops == 2 )
148: asm("movl _sgl_value_2,r6"); /* r6 = operand 2 */
149: else
150: asm("clrl r6");;
151: asm("movl _init_psl,r7"); /* r7 = initial psl */
152: asm("movl _psl_val,r8"); /* r8 = final psl */
153: asm("movl _exp_psl,r9"); /* r9 = expected psl */
154: if( code == 2 ) {
155: asm("movl _no_page_faults,r10"); /* r10 = # page faults */
156: asm("movl _exp_page_faults,r11"); /* r11 = # faults expected */
157: }
158: else if( code == 3 ) /* or */
159: asm("movl _sgl_st_acc,r10"); /* r10 = final Acc. */
160: else /* or */
161: {
162: asm("movl _reg_no,r10"); /* r10 = bad register # */
163: asm("movl _store_regs[r10],r11"); /* r11 = final (bad) value */
164: asm("movl _exp_regs[r10],r12"); /* r12 = expected value */
165: }
166: asm(".globl _hlt_sgl_psl");
167: asm("_hlt_sgl_psl:");
168: asm("halt");
169: }
170:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.