Annotation of cci/d/dmp4/chk_sgl_acc.c, revision 1.1

1.1     ! root        1: 
        !             2: #include "dmp_defs.h"
        !             3: 
        !             4: /***********************************************************************
        !             5: *
        !             6: *      Verify final single precision accumulator value
        !             7: *
        !             8: *  This code makes the assumption that the PSL is unchanged by the 
        !             9: *  instruction (specific PSL modifying instructions are checked elsewhere). 
        !            10: *  The operand, if any will, be in sgl_value_1.
        !            11: ***********************************************************************/
        !            12: chk_sgl_acc()
        !            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:        exp_psl      = init_psl & 0xffffff7f;   /* clear PSL's DBL bit */
        !            20:        if( sgl_st_acc != sgl_expected ) {
        !            21:            errcnt++;
        !            22:            if( prt_error )
        !            23:                 prt_s_acc_e( bad_result_msg );
        !            24:            if( halt_flg )
        !            25:                 hlt_s_acc_e( 1 );              /* error code 1 */
        !            26:            if( loop_on_err )
        !            27:                 force_loop = TRUE;             /* set loop flag */
        !            28:        }
        !            29:         else if( psl_val != exp_psl ) {        /* check the final PSL */
        !            30:            errcnt++;
        !            31:            if( prt_error )
        !            32:                 prt_s_acc_e( bad_psl_msg );
        !            33:            if( halt_flg )
        !            34:                 hlt_s_acc_e( 2 );              /* error code 2 */
        !            35:            if( loop_on_err )
        !            36:                 force_loop = TRUE;             /* set loop flag */
        !            37:        }
        !            38:         else if( no_page_faults != exp_page_faults ) {
        !            39:            errcnt++;
        !            40:            if( prt_error )
        !            41:                 prt_s_acc_e( trans_flt_cnt_msg );
        !            42:            if( halt_flg )
        !            43:                 hlt_s_acc_e( 3 );              /* error code 3 */
        !            44:            if( loop_on_err )
        !            45:                 force_loop = TRUE;             /* set loop flag */
        !            46:        }
        !            47:         else                           /* check for corrupted registers */
        !            48:        {
        !            49:            reg_no = 0;
        !            50:            regs_ok = TRUE;
        !            51:            while( (reg_no <= 13) && (regs_ok) )  /* check 1st 13 regs */
        !            52:                if( store_regs[ reg_no ] == exp_regs[ reg_no ] )
        !            53:                    reg_no++;
        !            54:                else
        !            55:                    regs_ok = FALSE;
        !            56:            if( !regs_ok )
        !            57:            {
        !            58:                errcnt++;
        !            59:                if( prt_error )
        !            60:                     prt_s_acc_e( reg_modified_msg );
        !            61:                if( halt_flg )
        !            62:                     hlt_s_acc_e( 4 );  /* error code 4 */
        !            63:                if( loop_on_err )
        !            64:                     force_loop = TRUE;         /* set loop flag */
        !            65:            }
        !            66:        }
        !            67: }
        !            68: 
        !            69: 
        !            70: 
        !            71: /************************************************************************
        !            72: *              PRINT AN ERROR MESSAGE OF THE FORM
        !            73: *
        !            74: * cycle: xx. DMP test xx. <inst>. <error message>, index = xx
        !            75: * addressing mode: <addressing mode description>
        !            76: * inst buf= xx xx xx xx xx xx xx xx xx xx xx -page faults on byte(s) 0, x 
        !            77: * initial Acc = xxxxxxxx,     final Acc = xxxxxxxx,   xx page faults occurred
        !            78: *     operand = xxxxxxxx,  expected Acc = xxxxxxxx,   xx page faults expected
        !            79: * initial PSL = xxxxxxxx,     final PSL = xxxxxxxx,   expected PSL = xxxxxxxx
        !            80: ************************************************************************/
        !            81: prt_s_acc_e( message )
        !            82: char *message;
        !            83: {
        !            84:        prt_dmp_er_msg( message );              /* print the error header */
        !            85:        writes("initial Acc = ");
        !            86:        write32h( sgl_ld_acc );                 /* print initial Acc value */
        !            87:        writes(",     final Acc = ");
        !            88:        write32h( sgl_st_acc );                 /* print final Acc value */
        !            89:        writes(",   ");
        !            90:        writed( no_page_faults );               /* print # page faults */
        !            91:        writes(" page faults occurred\n");
        !            92:        if( no_ops ) {
        !            93:            writes("    operand = ");
        !            94:            write32h( sgl_value_1 );            /* print the operand used */
        !            95:            writes(",  ");
        !            96:        } else 
        !            97:            writes("                         "); /* align the expected Acc */
        !            98:        writes("expected Acc = ");
        !            99:        write32h( sgl_expected );               /* print the expected Acc */
        !           100:        writes(",   ");
        !           101:        writed( exp_page_faults );              /* print # faults expected */
        !           102:        writes(" page faults expected\n");
        !           103:        if( psl_val != exp_psl )
        !           104:        {
        !           105:             writes("initial PSL = ");          /* print PSL data */
        !           106:             write32h( init_psl );
        !           107:             writes(",     final PSL = ");
        !           108:             write32h( psl_val );
        !           109:             writes(",   expected PSL = ");
        !           110:             write32h( exp_psl );
        !           111:             writec('\n');
        !           112:        }
        !           113:        if( message == reg_modified_msg )       /* print modified register */
        !           114:            prt_reg_data();                     /* print bad register      */
        !           115: }
        !           116: 
        !           117:  
        !           118: 
        !           119: 
        !           120: /**************************************************************************
        !           121: *      Set up the registers and halt
        !           122: **************************************************************************/
        !           123: hlt_s_acc_e( code )
        !           124: int code;
        !           125: {
        !           126:        sgl_dummy1 = code;
        !           127:        asm("movl _test_no,r0");                /* r0  = test number       */
        !           128:        asm("movl _addr_code,r1");              /* r1  = addr mode code    */
        !           129:        asm("movl _sgl_dummy1,r2");             /* r2  = error code        */
        !           130:        asm("movl _cycle,r3");                  /* r3  = cycle count       */
        !           131:        asm("movl _sgl_ld_acc,r4");             /* r4  = initial Acc.      */
        !           132:        asm("movl _sgl_st_acc,r5");             /* r5  = final Acc.        */
        !           133:        if( !no_ops )
        !           134:            sgl_value_1 = 0;    
        !           135:        asm("movl _sgl_value_1,r6");            /* r6  = operand  (or 0)   */
        !           136:        if( code == 1 ) {       /* data error? */
        !           137:            asm("movl _sgl_expected,r7");       /* r7  = expected Acc      */
        !           138:            asm("movl _index,r8");              /* r8  = data index        */
        !           139:        }
        !           140:         else if( code == 2 ) { /* PSL error? */
        !           141:            asm("movl _init_psl,r7");           /* r7  = initial PSL       */
        !           142:            asm("movl _psl_val,r8");            /* r8  = final PSL value   */
        !           143:            asm("movl _init_psl,r9");           /* r9  = expected PSL      */
        !           144:            asm("movl _index,r10");             /* r10 = data index        */
        !           145:        }
        !           146:         else if( code == 3 ) { /* page fault error? */
        !           147:            asm("movl _no_page_faults,r7");     /* r7  = # page faults     */
        !           148:            asm("movl _exp_page_faults,r8");    /* r8  = # faults expected */
        !           149:            asm("movl _index,r9");              /* r9  = data index        */
        !           150:        }
        !           151:         else if( code == 4 ) { /* register error? */
        !           152:            asm("movl _reg_no,r7");             /* r7  = bad register #    */
        !           153:            asm("movl _store_regs[r7],r8");     /* r8  = final (bad) value */
        !           154:            asm("movl _exp_regs[r7],r9");       /* r9  = expected value    */
        !           155:            asm("movl _index,r10");             /* r10 = data index        */
        !           156:        }
        !           157:        asm(".globl _hlt_sgl_acc");
        !           158:        asm("_hlt_sgl_acc:");
        !           159:        asm("halt");
        !           160: }
        !           161: 
        !           162: 

unix.superglobalmegacorp.com

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