Annotation of cci/d/fpevent/common.c, revision 1.1.1.1

1.1       root        1: 
                      2: #include "evt_defs.h"
                      3: 
                      4: /***********************************************************************
                      5: *
                      6: *      COMMON ROUTINES FOR THE DEMAND PAGING TESTS
                      7: *
                      8: ***********************************************************************/
                      9: 
                     10: 
                     11: 
                     12: /*
                     13:  ***********************************************************************
                     14:  *             Print an FPP Events Test Error Message
                     15:  *
                     16:  * cycle: xx. EVT test xx. < your message here >
                     17:  * instr: <inst name> <event type> {( disabled )}  -data index = xx
                     18:  * addressing mode: <addressing mode description>
                     19:  * { piped entry test #x.  <instruction buffer description> }
                     20:  * inst_buf = xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
                     21:  * initial ACC. = xxxxxxxx xxxxxxxx,  operand 1 = xxxxxxxx xxxxxxxxx
                     22:  *   final ACC. = xxxxxxxx xxxxxxxx,  operand 2 = xxxxxxxx xxxxxxxxx
                     23:  ***********************************************************************
                     24: */
                     25: prt_evt_er_msg( msg )
                     26: char *msg;
                     27: {
                     28:        writes("\ncycle: ");
                     29:        writed( cycle );                        /* print the cycle #     */
                     30:        writes(". EVT test ");
                     31:        writeh( test_no );                      /* print the test #      */
                     32:        writes(". ");
                     33:        writes( msg );                          /* print the error msg   */
                     34:        writes("\ninstr: ");
                     35:        writes( op_name );                      /* print the inst name   */
                     36:        writes("  Event: ");
                     37:        writes( event_msg );                    /* print the event type  */
                     38:        if( evt_disabled )
                     39:            writes(" ( disabled )");
                     40:        writes("   -data index = ");            /* print the data index  */
                     41:        writed( index );
                     42:        if( no_ops ) {
                     43:            writes("\naddressing mode: ");
                     44:            writes( addressing_modes[ addr_mode ] );
                     45:        }
                     46:        if( pipe_test ) {
                     47:             writes("\npiped entry test #");
                     48:             writed( pipe_test );               /* print the pipe test # */
                     49:             writes(".  ");
                     50:             if( pipe_inst1 == LDD_OP_CODE )
                     51:                   writes("LDD (initial acc), ");
                     52:               else if( pipe_inst1 == LDF_OP_CODE )
                     53:                   writes("LDF (initial acc), ");
                     54:               else if( pipe_inst1 == MULD_OP_CODE )
                     55:                   writes("MULD (1.0), ");
                     56:               else if( pipe_inst1 == MULF_OP_CODE )
                     57:                   writes("MULF (1.0), ");
                     58:             writes( op_name );
                     59:             if( no_ops == 1 )
                     60:                 writes(" (operand)");
                     61:             else if( no_ops == 2 )
                     62:                 writes(" (op #1, op #2)");
                     63:        }
                     64:        print_inst_buf();               /* print the inst buf contents   */
                     65:        writes("initial ACC. = ");
                     66:        write32h( dbl_ld_acc.m );
                     67:        if( precision == DBL ) {
                     68:             writec(' ');
                     69:             write32h( dbl_ld_acc.l );
                     70:        }
                     71:        if( no_ops ) {
                     72:             if( (op_code == CVFL_OP_CODE) || (op_code == CVDL_OP_CODE) )
                     73:                  writes(",   stored value = ");
                     74:             else
                     75:                  writes(",   operand 1 = ");
                     76:             write32h( dbl_value_1.m );
                     77:             if( precision == DBL ) {
                     78:                  writec(' ');
                     79:                  write32h( dbl_value_1.l );
                     80:             }
                     81:             writec('\n');
                     82:        } else 
                     83:             writes(", ");
                     84:        writes("  final ACC. = ");
                     85:        write32h( dbl_st_acc.m );
                     86:        if( precision == DBL ) {
                     87:             writec(' ');
                     88:             write32h( dbl_st_acc.l );
                     89:        }
                     90:        if( no_ops == 2) {
                     91:             writes(",   operand 2 = ");
                     92:             write32h( dbl_value_2.m );
                     93:             if( precision == DBL ) {
                     94:                  writec(' ');
                     95:                  write32h( dbl_value_2.l );
                     96:             }
                     97:        }
                     98:        writec('\n');
                     99: }
                    100: 
                    101: 
                    102: 
                    103: /*
                    104:  *******************************************************************
                    105:  *     print the contents of the instruction buffer
                    106:  *******************************************************************
                    107: */
                    108: print_inst_buf()
                    109: {
                    110:        writes("\ninst buf=");
                    111:        write_lw_bytes( inst_buf[0] );    /* print word 0 as bytes */
                    112:        write_lw_bytes( inst_buf[1] );    /* print word 1 as bytes */
                    113:        write_lw_bytes( inst_buf[2] );    /* print word 2 as bytes */
                    114:        write_lw_bytes( inst_buf[3] );    /* print word 2 as bytes */
                    115:        write_lw_bytes( inst_buf[4] );    /* print word 2 as bytes */
                    116:        writec('\n');
                    117: }
                    118: 
                    119: 
                    120: 
                    121: /*
                    122:  *******************************************************************
                    123:  *     print a longword a byte at a time
                    124:  *******************************************************************
                    125: */
                    126: write_lw_bytes( lw )
                    127: int lw;
                    128: {
                    129:        writec(' ');
                    130:        writeh( (lw >> 28) & 0xf );
                    131:        writeh( (lw >> 24) & 0xf );
                    132:        writec(' ');
                    133:        writeh( (lw >> 20) & 0xf );
                    134:        writeh( (lw >> 16) & 0xf );
                    135:        writec(' ');
                    136:        writeh( (lw >> 12) & 0xf );
                    137:        writeh( (lw >> 8) & 0xf );
                    138:        writec(' ');
                    139:        writeh( (lw >> 4) & 0xf );
                    140:        writeh( (lw & 0xf) );
                    141: }
                    142:                 
                    143: 
                    144: 
                    145: 
                    146: /*
                    147:  ********************************************************************
                    148:  *
                    149:  *             ERROR HALT ROUTINE  ( for non-FPM event halts )
                    150:  *
                    151:  ********************************************************************
                    152: */
                    153: event_halt(halt_code)
                    154: int halt_code;
                    155: {
                    156:        sgl_value_1 = halt_code;
                    157:        asm("movl _test_no,r0");            /* r0  = test number        */
                    158:        asm("movl _op_code,r1");            /* r1  = instr's op-code    */
                    159:        asm("movl _sgl_value_1,r2");        /* r2  = error code         */
                    160:        asm("movl _cycle,r3");              /* r3  = cycle              */
                    161:        asm("movl _addr_code,r4");          /* r4  = addressing mode    */
                    162:        asm("movl _index,r5");              /* r5  = data pattern index */
                    163: /*
                    164:  * put the operands used in regs 6 - 9
                    165: */
                    166:        if( no_ops == 2 ) {
                    167:             asm("movl _dbl_value_1,r6");   /* r6  = operand 1's MSW    */
                    168:             asm("movl _dbl_value_1+4,r7"); /* r7  = operand 1's LSW    */
                    169:             asm("movl _dbl_value_2,r8");   /* r8  = operand 2's MSW    */
                    170:             asm("movl _dbl_value_2+4,r9"); /* r9  = operand 2's LSW    */
                    171:        } else {
                    172:             asm("movl _dbl_ld_acc,r6");    /* r6  = initial Acc's MSW  */
                    173:             asm("movl _dbl_ld_acc+4,r7");  /* r7  = initial Acc's LSW  */
                    174:             asm("movl _dbl_value_1,r8");   /* r8  = the operand's MSW  */
                    175:             asm("movl _dbl_value_1+4,r9"); /* r9  = the operand's LSW  */
                    176:        };
                    177: /*
                    178:  * now set the type specific data in regs 10 - 12
                    179: */
                    180:        if( halt_code == BAD_PSL_HLT ) {
                    181:             asm("movl _init_psl,r10");     /* r10 = initial PSL value  */
                    182:             asm("movl _psl_val,r11");      /* r11 = final PSL value    */
                    183:             asm("movl _exp_psl,r12");      /* r12 = expected PSL value */
                    184:        }
                    185:        else if( halt_code == PUSH_PSL_HLT ) {
                    186:             asm("movl _init_psl,r10");     /* r10 = initial PSL value  */
                    187:             asm("movl _event_psl,r11");    /* r11 = PSL on the stack   */
                    188:        }
                    189:        else if( halt_code == BAD_REG_HLT ) {
                    190:             sgl_value_1 = store_regs[reg_no];
                    191:             sgl_value_2 = exp_regs[reg_no];
                    192:             asm("movl _reg_no,r10");       /* r10 = register #         */
                    193:             asm("movl _sgl_value_1,r11");  /* r11 = actual reg value   */
                    194:             asm("movl _sgl_value_2,r12");  /* r12 = expected reg value */
                    195:        }
                    196:        else if( halt_code == BAD_ACC_HLT ) {
                    197:             sgl_value_1 = dbl_expected.l;
                    198:             asm("movl _dbl_st_acc,r10");   /* r10 = final Acc's MSW    */
                    199:             asm("movl _dbl_st_acc+4,r11"); /* r11 = final Acc's LSW    */
                    200:             asm("movl _dbl_expected,r12"); /* r12 = exp Acc's MSW      */
                    201:             asm("movl _sgl_value_1,r13");  /* r13 = exp Acc's LSW      */
                    202:        };
                    203:        asm("halt");
                    204: }
                    205: 
                    206: 
                    207: 
                    208: 
                    209: 
                    210: /*
                    211:  ********************************************************************
                    212:  *
                    213:  *             ERROR HALT ROUTINE FOR FPM EVENT HALTS 
                    214:  *
                    215:  ********************************************************************
                    216: */
                    217: fpm_halt(halt_code)
                    218: int halt_code;
                    219: {
                    220:        sgl_value_1 = halt_code;
                    221:        asm("movl _test_no,r0");                /* r0  = test number        */
                    222:        asm("movl _op_code,r1");                /* r1  = instr's op-code    */
                    223:        asm("movl _sgl_value_1,r2");            /* r2  = error code         */
                    224:        asm("movl _cycle,r3");                  /* r3  = cycle              */
                    225:        asm("movl _fpm_psl,r4");                /* r4  = PSL on the stack   */
                    226:        if( halt_code == BAD_FPM_STK_HLT ) {            /* if bad FPM stack */
                    227:             sgl_value_2 = dbl_value_1.l;               /* LS op. expected */
                    228:             asm("movl _init_psl,r5");          /* r5  = PSL expected       */
                    229:             asm("movl _fpm_pc,r6");            /* r6  = PC on the stack    */
                    230:             asm("movl _exp_pc,r7");            /* r7  = PC expected        */
                    231:             asm("movl _fpm_op_code,r8");       /* r8  = op-code on stack   */
                    232:             asm("movl _op_code,r9");           /* r9  = op-code expected   */
                    233:             asm("movl _fpm_ls_op,r10");        /* r10 = LS op. on stack    */
                    234:             asm("movl _sgl_value_2,r11");      /* r11 = LS op. expected    */
                    235:             asm("movl _fpm_ms_op,r12");        /* r12 = MS op. on stack    */
                    236:             asm("movl _dbl_value_1,r13");      /* r13 = MS op. expected    */
                    237:             asm("movl _index,r14");            /* r14 = data pattern index */
                    238:        } else {
                    239:             sgl_value_2 = dbl_st_acc.l;                /* LS of final ACC */
                    240:             sgl_value_3 = dbl_expected.l;              /* LS of exp'd ACC */
                    241:             asm("movl _fpm_pc,r5");            /* r5  = PC on the stack    */
                    242:             asm("movl _fpm_op_code,r6");       /* r6  = op-code on stack   */
                    243:             asm("movl _fpm_ls_op,r7");         /* r7  = LS op. on stack    */
                    244:             asm("movl _fpm_ms_op,r8");         /* r8  = LS op. on stack    */
                    245:             asm("movl _dbl_st_acc,r9");        /* r9  = MS of final ACC.   */
                    246:             asm("movl _sgl_value_2,r10");      /* r10 = LS of final ACC.   */
                    247:             asm("movl _dbl_expected,r11");     /* r11 = MS of exp'd ACC.   */
                    248:             asm("movl _sgl_value_3,r12");      /* r12 = LS of exp'd ACC.   */
                    249:             asm("movl _index,r13");            /* r13 = data pattern index */
                    250:        }
                    251:        asm("halt");
                    252: }
                    253: 
                    254: 
                    255: 
                    256: 
                    257: /*
                    258:  ***********************************************************************
                    259:  *     fill a register buffer with known patterns
                    260:  ***********************************************************************
                    261: */
                    262: fill_reg_buf( buffer )
                    263: int *buffer;
                    264: {
                    265:        buffer[0]  = 0x10101010;        /* register '0' data */
                    266:        buffer[1]  = 0x11111111;
                    267:        buffer[2]  = 0x12121212;
                    268:        buffer[3]  = 0x13131313;
                    269:        buffer[4]  = 0x14141414;
                    270:        buffer[5]  = 0x15151515;
                    271:        buffer[6]  = 0x16161616;
                    272:        buffer[7]  = 0x17171717;
                    273:        buffer[8]  = 0x18181818;
                    274:        buffer[9]  = 0x19191919;
                    275:        buffer[10] = 0x1a1a1a1a;
                    276:        buffer[11] = 0x1b1b1b1b;
                    277:        buffer[12] = 0x1c1c1c1c;
                    278:        buffer[13] = 0x1d1d1d1d;
                    279: }
                    280: 

unix.superglobalmegacorp.com

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