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

1.1       root        1: 
                      2: #include "dmp_defs.h"
                      3: 
                      4: 
                      5: /*
                      6:  **************************************************************************
                      7:  *
                      8:  *             Test an instruction that has no operands
                      9:  *
                     10:  *  This code will test instrucions with no operands. PUSHD is the only
                     11:  *  one of these instructions that will store any data.
                     12:  *
                     13:  *  29-Apr-85  added pipeline test
                     14:  *   5-Jun-85  converted from assembler to C code
                     15:  *
                     16:  **************************************************************************
                     17: */
                     18: test_0_ops()
                     19: {
                     20:        if( (precision == SGL) || (op_code == LDFD_OP_CODE) )
                     21:             acc_ld_size = SGL;                 /* load a single Acc     */
                     22:        else
                     23:             acc_ld_size = DBL;                 /* load a double Acc     */
                     24:        if( (precision == SGL) || (op_code == CVDF_OP_CODE) )
                     25:             acc_st_size = SGL;                 /* store a single Acc    */
                     26:        else
                     27:             acc_st_size = DBL;                 /* store a double Acc    */
                     28:        tst_0_no_pipe();                        /* test with no pipelineing */
                     29:        if( !no_fpp_wcs ) {
                     30:             tst_0_pipe1();                     /* run pipeline test #1  */
                     31:             tst_0_pipe2();                     /* run pipeline test #2  */
                     32:        }
                     33: }
                     34: 
                     35: 
                     36: 
                     37: /*
                     38:  ****************************************************************************
                     39:  *
                     40:  *     NON PIPELINED TEST FOR INSTRUCTIONS WITH NO OPERANDS
                     41:  *
                     42:  ****************************************************************************
                     43: */
                     44: tst_0_no_pipe()
                     45: {
                     46:        pipe_test = FALSE;                      /* clear the PIPE TEST flg */
                     47:        pack_inst();                            /* pack the instr's code   */
                     48:        if( op_code == PUSHD_OP_CODE )          /* Push Double instr?      */
                     49:             exp_page_faults = 3;               /* expect 3 page fault     */
                     50:        else
                     51:             exp_page_faults = 1;               /* expect 1 page fault     */
                     52:        shift_count = 20;                       /* shift the code 16 bytes */
                     53:        fill_reg_buf( load_regs );              /* set register load data  */
                     54:        fill_reg_buf( exp_regs );               /* set expected reg. data  */
                     55:        for( index = 0; index <= max_index; index++ ) {
                     56:             dbl_ld_acc   = data_ptr[ index ].op_1;
                     57:             dbl_expected = data_ptr[ index ].exp;
                     58:             run_code();                /* execute the instruction */
                     59:        }
                     60: }
                     61: 
                     62: 
                     63: 
                     64: 
                     65: 
                     66: 
                     67: /*
                     68:  *************************************************************************
                     69:  *
                     70:  *     PIPELINE TEST #1 FOR INSTRUCTIONS WITH NO OPERANDS
                     71:  *
                     72:  *  This test will put a LOAD instruction immediately in front of the
                     73:  *  test instruction and a MULTIPLY instruction immediately behind it.
                     74:  *  The instruction buffer will look like:
                     75:  *
                     76:  *  <ldf/ldd> <instruction> <mulf/muld> where:
                     77:  *
                     78:  *  The load will be done indirect through register R6
                     79:  *  The 2nd multiply addressing mode will be indirect through register R2.
                     80:  *************************************************************************
                     81: */
                     82: tst_0_pipe1()
                     83: {
                     84:        pipe_test = 1;          /* set pipelined test flag to pipe test #2 */
                     85:        if( acc_ld_size == DBL )
                     86:             pipe_inst1 = LDD_OP_CODE;
                     87:        else
                     88:             pipe_inst1 = LDF_OP_CODE;
                     89:        if( acc_st_size == DBL )
                     90:             pipe_inst2 = MULD_OP_CODE;
                     91:        else
                     92:             pipe_inst2 = MULF_OP_CODE;
                     93:        addr_code_p1 = 0x66;                    /* addr mode 1 = (R6)      */
                     94:        addr_code_p2 = 0x62;                    /* addr mode 2 = (R2)      */
                     95:        if( op_code == PUSHD_OP_CODE )          /* Push Double instr?      */
                     96:             exp_page_faults = 6;               /* expect 3 page fault     */
                     97:        else
                     98:             exp_page_faults = 4;               /* expect 1 page fault     */
                     99:        pack_inst();                            /* pack the instr's code   */
                    100:        fill_reg_buf( load_regs );              /* set register load data  */
                    101:        fill_reg_buf( exp_regs );               /* set expected reg. data  */
                    102:        load_regs[2] = (int) adr_op5;           /* the MULx op. is in op#5 */
                    103:        exp_regs[2] = load_regs[2];
                    104:        load_regs[6] = (int) adr_op4;           /* the LDx op. is in op#4  */
                    105:        exp_regs[6] = load_regs[6];
                    106:        adr_op5->m = 0x40800000;                /* set the MULx instrs'    */
                    107:        adr_op5->l = 0;                         /*    operands = '1.0'     */
                    108:        min_shift = 17;
                    109:        shift_count = 18; 
                    110:        for( index = 0; index <= max_index; index++ ) {
                    111:             dbl_ld_acc   = data_ptr[ index ].op_1;
                    112:             dbl_expected = data_ptr[ index ].exp;
                    113:             adr_op4->m = dbl_ld_acc.m;         /* get the data for        */
                    114:             adr_op4->l = dbl_ld_acc.l;         /*   the load instruction  */
                    115:             run_code();                        /* execute the instruction */
                    116:             if( --shift_count < min_shift )
                    117:                  shift_count = 18;
                    118:        }
                    119:        pipe_test = FALSE;                      /* clear the pipe test flag */
                    120: }
                    121: 
                    122: 
                    123: 
                    124: 
                    125: 
                    126: 
                    127: /*
                    128:  ****************************************************************************
                    129:  *
                    130:  *     PIPELINE TEST #2 FOR INSTRUCTIONS WITH NO OPERANDS
                    131:  *
                    132:  *  This test will put a MULTIPLY instruction immediately in front of the
                    133:  *  test instruction and a MULTIPLY instruction immediately behind it.
                    134:  *  Both multiplys will be times "1.0".
                    135:  *
                    136:  *  The instruction buffer will look like:
                    137:  *     <mulf/muld> <instruction> <mulf/muld> 
                    138:  *
                    139:  *  The 1st multiply will be done indirect through register R6
                    140:  *  The 2nd multiply will be done indirect through register R2.
                    141:  *
                    142:  ****************************************************************************
                    143: */
                    144: tst_0_pipe2()
                    145: {
                    146:        pipe_test = 2;          /* set pipelined test flag to pipe test #1 */
                    147:        if( acc_ld_size == DBL )
                    148:             pipe_inst1 = MULD_OP_CODE;
                    149:        else
                    150:             pipe_inst1 = MULF_OP_CODE;
                    151:        if( acc_st_size == DBL )
                    152:             pipe_inst2 = MULD_OP_CODE;
                    153:        else
                    154:             pipe_inst2 = MULF_OP_CODE;
                    155:        addr_code_p1 = 0x66;                    /* addr mode 1 = (R6)      */
                    156:        addr_code_p2 = 0x62;                    /* addr mode 2 = (R2)      */
                    157:        if( op_code == PUSHD_OP_CODE )          /* Push Double instr?      */
                    158:             exp_page_faults = 6;               /* expect 3 page fault     */
                    159:        else
                    160:             exp_page_faults = 4;               /* expect 1 page fault     */
                    161:        pack_inst();                            /* pack the instr's code   */
                    162:        fill_reg_buf( load_regs );              /* set register load data  */
                    163:        fill_reg_buf( exp_regs );               /* set expected reg. data  */
                    164:        load_regs[2] = (int) adr_op4;           /* 2nd MULx op. is in op#4 */
                    165:        exp_regs[2] = load_regs[2];
                    166:        load_regs[6] = (int) adr_op5;           /* 1st MULx op. is in op#5 */
                    167:        exp_regs[6] = load_regs[6];
                    168:        adr_op4->m = 0x40800000;                /* set the MULx instrs'    */
                    169:        adr_op4->l = 0;                         /*    operands = '1.0'     */
                    170:        adr_op5->m = 0x40800000;
                    171:        adr_op5->l = 0; 
                    172:        min_shift = 17;
                    173:        shift_count = 18; 
                    174:        for( index = 0; index <= max_index; index++ ) {
                    175:             dbl_ld_acc   = data_ptr[ index ].op_1;
                    176:             dbl_expected = data_ptr[ index ].exp;
                    177:             run_code();                        /* execute the instruction */
                    178:             if( --shift_count < min_shift )
                    179:                  shift_count = 18;
                    180:        }
                    181:        pipe_test = FALSE;                      /* clear the pipe test flag */
                    182: }
                    183: 

unix.superglobalmegacorp.com

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