Annotation of cci/d/dmp4/chk_dbl_psl.c, revision 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.