Annotation of cci/d/dmp4/chk_dbl_psl.c, revision 1.1.1.1

1.1       root        1: 
                      2: #include "dmp_defs.h"
                      3: 
                      4: 
                      5: /***********************************************************************
                      6: *
                      7: *   Verify results after a double precision TSTD or CMPD(2) instruction
                      8: *
                      9: *  The final PSL value is compared to the expected value. Also, the
                     10: *  final accumulator and the registers are checked to make sure that 
                     11: *  they weren't modified.
                     12: *  The "no-fpp" firmware will not clear "bad 0" double precision accumulators.
                     13: ***********************************************************************/
                     14: chk_dbl_psl()
                     15: {
                     16:        if( (dbl_ld_acc.m & 0x7f800000) ||      /* get the exp'd Acc */
                     17:            (no_fpp_wcs) ) {
                     18:             sgl_value_1 = dbl_ld_acc.m;
                     19:             sgl_value_2 = dbl_ld_acc.l;
                     20:        } else {                                /* zero accumulator */
                     21:             sgl_value_1 = 0;           /* clear any bad 0's */
                     22:             sgl_value_2 = 0;
                     23:        }  /* end of "0" accumulator */
                     24:        exp_psl = init_psl;                     /* get the initial PSL      */
                     25:        exp_psl &= 0xfffffff1;                  /* clear the flag bits      */
                     26:        exp_psl |= PSL_DBL;                     /* set the DBL Acc. bit     */
                     27:        exp_psl |= PSL_C;                       /* set the CARRY bit        */
                     28:        if( dbl_expected.m == ZERO )
                     29:            exp_psl |= PSL_Z;                   /* expect the ZERO bit set  */
                     30:        if( dbl_expected.m == NEGATIVE )
                     31:            exp_psl |= PSL_N;                   /* expect the NEG bit set   */
                     32:        if( psl_val != exp_psl ) {
                     33:            errcnt++;
                     34:            if( prt_error )
                     35:                 prt_d_psl_e( bad_psl_msg );
                     36:            if( halt_flg )
                     37:                 hlt_d_psl_e( 2 );              /* error code 2 */
                     38:            if( loop_on_err )
                     39:                 force_loop = TRUE;             /* set loop flag */
                     40:        }
                     41:         else if( no_page_faults != exp_page_faults ) {
                     42:            errcnt++;
                     43:            if( prt_error )
                     44:                 prt_d_psl_e( trans_flt_cnt_msg );
                     45:            if( halt_flg )
                     46:                 hlt_d_psl_e( 3 );              /* error code 3 */
                     47:            if( loop_on_err )
                     48:                 force_loop = TRUE;             /* set loop flag */
                     49:        }
                     50:         else if( (dbl_st_acc.m != sgl_value_1) ||  /* check final Acc. */
                     51:                  (dbl_st_acc.l != sgl_value_2) ) {
                     52:            errcnt++;
                     53:            if( prt_error )
                     54:                 prt_d_psl_e( acc_modified_msg );
                     55:            if( halt_flg )
                     56:                 hlt_d_psl_e( 5 );              /* error code 5 */
                     57:            if( loop_on_err )
                     58:                 force_loop = TRUE;             /* set loop flag */
                     59:        }
                     60:         else {
                     61:            reg_no = 0;
                     62:            regs_ok = TRUE;
                     63:            while( (reg_no <= 13) && (regs_ok) )  /* check 1st 13 regs */
                     64:                if( store_regs[ reg_no ] == exp_regs[ reg_no ] )
                     65:                    reg_no++;
                     66:                else
                     67:                    regs_ok = FALSE;
                     68:            if( !regs_ok )
                     69:            {
                     70:                errcnt++;
                     71:                if( prt_error )
                     72:                     prt_d_psl_e( reg_modified_msg );
                     73:                if( halt_flg )
                     74:                     hlt_d_psl_e( 4 );          /* error code 4 */
                     75:                if( loop_on_err )
                     76:                     force_loop = TRUE;         /* set loop flag */
                     77:            }
                     78:        } 
                     79: }
                     80: 
                     81: 
                     82: 
                     83: /************************************************************************
                     84: *              PRINT AN ERROR MESSAGE OF THE FORM
                     85: *
                     86: * cycle: xx. DMP test xx. <inst>. <error message>, index = xx
                     87: * addressing mode: <addressing mode description>
                     88: * inst buf= xx xx xx xx xx xx xx xx xx xx xx -page faults on byte(s) 0, x 
                     89: * initial Acc = xxxxxxxx xxxxxxxx,  operand1 = xxxxxxxx xxxxxxxx,  xx pg faults
                     90: *   final Acc = xxxxxxxx xxxxxxxx,  operand2 = xxxxxxxx xxxxxxxx,  xx expected
                     91: * initial PSL = xxxxxxxx,   final PSL = xxxxxxxx,  expected PSL = xxxxxxxx
                     92: ************************************************************************/
                     93: prt_d_psl_e( message )
                     94: char *message;
                     95: {
                     96:        prt_dmp_er_msg( message );              /* print the error header */
                     97:        writes("initial Acc = ");
                     98:        write32h( dbl_ld_acc.m );               /* print Acc loaded */
                     99:        writec(' ');
                    100:        write32h( dbl_ld_acc.l );
                    101:        if( no_ops ) {
                    102:            writes(",  operand1 = ");
                    103:            write32h( dbl_value_1.m );          /* write op 1 data */
                    104:            writec(' ');
                    105:            write32h( dbl_value_1.l );
                    106:        }
                    107:        writes(",  ");
                    108:        writed( no_page_faults );
                    109:        writes(" pg faults\n");
                    110:        writes("  final Acc = ");               /* write final ACC data */
                    111:        write32h( dbl_st_acc.m );
                    112:        writec(' ');
                    113:        write32h( dbl_st_acc.l );
                    114:        if( no_ops == 2 ) {
                    115:            writes(",  operand2 = ");
                    116:            write32h( dbl_value_2.m );          /* write op 2 data */
                    117:            writec(' ');
                    118:            write32h( dbl_value_2.l );
                    119:        }
                    120:        if( no_ops )
                    121:            writes(",                                 ");
                    122:        else
                    123:            writes(",  ");
                    124:        writed( exp_page_faults );
                    125:        writes(" expected\n");
                    126:        writes("\ninitial PSL = ");             /* print PSL data */
                    127:        write32h( init_psl );
                    128:        writes(",   final PSL = ");
                    129:        write32h( psl_val );
                    130:        writes(",  expected PSL = ");
                    131:        write32h( exp_psl );
                    132:        writec('\n');
                    133:        if( message == reg_modified_msg )       /* print modified register */
                    134:            prt_reg_data();                     /* print bad register      */
                    135: }
                    136: 
                    137: 
                    138: 
                    139: /**************************************************************************
                    140: *      Set up the registers and halt
                    141: **************************************************************************/
                    142: hlt_d_psl_e( code )
                    143: int code;
                    144: {
                    145:        sgl_dummy1 = code;
                    146:        asm("movl _test_no,r0");                /* r0  = test number       */
                    147:        asm("movl _addr_code,r1");              /* r1  = addressing mode   */
                    148:        asm("movl _sgl_dummy1,r2");             /* r2  = error code        */
                    149:        asm("movl _cycle,r3");                  /* r3  = cycle count       */
                    150:        sgl_dummy1 = dbl_ld_acc.m;
                    151:        sgl_dummy2 = dbl_ld_acc.l;
                    152:        asm("movl _sgl_dummy1,r4");             /* r4  = MS of initial Acc */
                    153:        asm("movl _sgl_dummy2,r5");             /* r5  = LS of initial Acc */
                    154:        if( no_ops ) {
                    155:            sgl_dummy1 = dbl_value_1.m;
                    156:            sgl_dummy2 = dbl_value_1.m;
                    157:            asm("movl _sgl_dummy1,r6");         /* r6  = MS of operand 1   */
                    158:            asm("movl _sgl_dummy2,r7");         /* r7  = LS of operand 1   */
                    159:        } else {
                    160:            asm("clrl r6");                     /* r6, r7 = 0 for TSTD     */
                    161:            asm("clrl r7");;
                    162:        }
                    163:        if( no_ops ==  2 ) {
                    164:            sgl_dummy1 = dbl_value_2.m;
                    165:            sgl_dummy2 = dbl_value_2.m;
                    166:            asm("movl _sgl_dummy1,r8");         /* r8  = MS of operand 2   */
                    167:            asm("movl _sgl_dummy2,r9");         /* r9  = LS of operand 2   */
                    168:        } else {
                    169:            asm("clrl r8");                     /* r8, r9 = 0 for TSTD,CMPD */
                    170:            asm("clrl r9");;
                    171:        }
                    172:        if( code == 2 ) {  /* wrong PSL */
                    173:            asm("movl _init_psl,r10");          /* r10 = initial psl       */
                    174:            asm("movl _psl_val,r11");           /* r11 = final psl         */
                    175:            asm("movl _exp_psl,r12");           /* r12 = expected psl      */
                    176:            asm("movl _index,r13");             /* r13 = data index        */
                    177:        }
                    178:         else if( code == 3 ) {  /* wrong # page faults */
                    179:            asm("movl _no_page_faults,r10");    /* r10 = # page faults     */
                    180:            asm("movl _exp_page_faults,r11");   /* r11 = # faults expected */
                    181:        }
                    182:         else if( code == 5 ) { /* corrupted accumulator */
                    183:            sgl_dummy1 = dbl_st_acc.m;
                    184:            sgl_dummy2 = dbl_st_acc.l;
                    185:            asm("movl _sgl_dummy1,r10");        /* r10 = MS of final Acc.  */
                    186:            asm("movl _sgl_dummy2,r11");        /* r11 = LS of final Acc.  */
                    187:        }
                    188:        else  {                 /* corrupted register */
                    189:            asm("movl _reg_no,r10");            /* r10 = bad register #    */
                    190:            asm("movl _store_regs[r9],r11");    /* r11 = final (bad) value */
                    191:            asm("movl _exp_regs[r9],r12");      /* r12 = expected value    */
                    192:        }
                    193:        asm(".globl _hlt_dbl_psl");
                    194:        asm("_hlt_dbl_psl:");
                    195:        asm("halt");
                    196: }
                    197: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.