Annotation of cci/d/macro4/pipe20.c, revision 1.1.1.1

1.1       root        1: #include "fpp_defs.h"
                      2: 
                      3: 
                      4: /*****************************************************************************
                      5: *
                      6: *              DBL PIPELINE TEST #20 MONITOR
                      7: *
                      8: *  This test will do a series of 2, 3, 4, 5, and 6 NEGDs.
                      9: *  The data used will be the LDD data patterns.
                     10: *
                     11: *****************************************************************************/
                     12: pipe_20()
                     13: {
                     14:        asm(".globl _pipeline_20_t");
                     15:        asm("_pipeline_20_t:");                 /* entry address            */
                     16:        if( (cycle == 1) && (prt_hdrs) )        /* print headers on 1st cycle */
                     17:             writes(" PIPE_20");
                     18:        pipe20_1();                             /* 2 NOPs  */
                     19:        pipe20_2();                             /* 3 NOPs  */
                     20:        pipe20_3();                             /* 4 NOPs  */
                     21:        pipe20_4();                             /* 5 NOPs  */
                     22:        pipe20_5();                             /* 6 NOPs  */
                     23:        asm("jmp *return");                     /* return to the test monitor */
                     24: }
                     25: 
                     26: 
                     27: 
                     28: 
                     29: 
                     30: /************************************************************************
                     31: *
                     32: *              SUBTEST 1 :  2 NEGDs
                     33: *
                     34: ************************************************************************/
                     35: pipe20_1() 
                     36: {
                     37:        subtest = 1;
                     38:        force_loop = FALSE;
                     39:        for( index = 0; index < max_ldd_1_index; index++ ) 
                     40:        {
                     41:           dbl_value_1  = ldd_1_data[index].ld;   /* get operand 1        */
                     42:           dbl_expected = ldd_1_data[index].exp;  /* get expected results */
                     43: /*
                     44:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                     45:  * The force loop flag is set after the first error.
                     46: */
                     47:           asm("_pipe20_1_lp1:");
                     48:           asm("ldd _dbl_value_1");             /* load the operand       */
                     49:           asm("negd");                         /* negate it ( twice )    */
                     50:           asm("negd");
                     51:           asm("std _dbl_st_acc");              /* store the result       */
                     52:           if( force_loop )
                     53:               asm("brb _pipe20_1_lp1");        /* loop on an error       */
                     54: /* 
                     55:  * verify the results
                     56: */
                     57:           if( (dbl_st_acc.m != dbl_expected.m) ||  /* COMPARE the stored */
                     58:               (dbl_st_acc.l != dbl_expected.l) ) { /*  to the expected   */
                     59:              errcnt++;                         /* bump the error count   */
                     60:              if( prt_error )
                     61:                  pipe20_print( 2 );            /* print error msg -2 NOPs */
                     62:              if( halt_flg )                    /* halt on error?          */
                     63:                  pipe20_halt( 2 );             /* error halt  -2 NOPs     */
                     64:              if( loop_on_err ) {
                     65:                  force_loop = TRUE;            /* set the force loop flag */
                     66:                  asm("jmp _pipe20_1_lp1");     /*      and loop           */
                     67:              }  
                     68:           }
                     69:        }  /* end of FOR loop */
                     70: }  /* end of subtest 1 */
                     71: 
                     72: 
                     73: 
                     74: 
                     75: 
                     76: /************************************************************************
                     77: *
                     78: *              SUBTEST 2 :  3 NEGDs
                     79: *
                     80: ************************************************************************/
                     81: pipe20_2() 
                     82: {
                     83:        subtest = 2;
                     84:        force_loop = FALSE;
                     85:        for( index = 0; index < max_ldd_1_index; index++ ) 
                     86:        {
                     87:           dbl_value_1  = ldd_1_data[index].ld;   /* get operand 1        */
                     88:           dbl_expected = ldd_1_data[index].exp;  /* get expected results */
                     89:           if( dbl_expected.m )
                     90:               dbl_expected.m ^= 0x80000000;      /* negate exptd results */
                     91: /*
                     92:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                     93:  * The force loop flag is set after the first error.
                     94: */
                     95:           asm("_pipe20_2_lp1:");
                     96:           asm("ldd _dbl_value_1");             /* load the operand       */
                     97:           asm("negd");                         /* negate it ( 3 times )  */
                     98:           asm("negd");
                     99:           asm("negd");
                    100:           asm("std _dbl_st_acc");              /* store the result       */
                    101:           if( force_loop )
                    102:               asm("brb _pipe20_2_lp1");        /* loop on an error       */
                    103: /* 
                    104:  * verify the results
                    105: */
                    106:           if( (dbl_st_acc.m != dbl_expected.m) ||  /* COMPARE the stored */
                    107:               (dbl_st_acc.l != dbl_expected.l) ) { /*  to the expected   */
                    108:              errcnt++;                         /* bump the error count   */
                    109:              if( prt_error )
                    110:                  pipe20_print( 3 );            /* print error msg -3 NOPs */
                    111:              if( halt_flg )                    /* halt on error?          */
                    112:                  pipe20_halt( 3 );             /* error halt  -3 NOPs     */
                    113:              if( loop_on_err ) {
                    114:                  force_loop = TRUE;            /* set the force loop flag */
                    115:                  asm("jmp _pipe20_2_lp1");     /*      and loop           */
                    116:              }  
                    117:           }
                    118:        }  /* end of FOR loop */
                    119: }  /* end of subtest 2 */
                    120: 
                    121: 
                    122: 
                    123: 
                    124: 
                    125: /************************************************************************
                    126: *
                    127: *              SUBTEST 3 :  4 NEGDs
                    128: *
                    129: ************************************************************************/
                    130: pipe20_3() 
                    131: {
                    132:        subtest = 3;
                    133:        force_loop = FALSE;
                    134:        for( index = 0; index < max_ldd_1_index; index++ ) 
                    135:        {
                    136:           dbl_value_1  = ldd_1_data[index].ld;   /* get operand 1        */
                    137:           dbl_expected = ldd_1_data[index].exp;  /* get expected results */
                    138: /*
                    139:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    140:  * The force loop flag is set after the first error.
                    141: */
                    142:           asm("_pipe20_3_lp1:");
                    143:           asm("ldd _dbl_value_1");             /* load the operand       */
                    144:           asm("negd");                         /* negate it ( 4 times )  */
                    145:           asm("negd");
                    146:           asm("negd");
                    147:           asm("negd");
                    148:           asm("std _dbl_st_acc");              /* store the result       */
                    149:           if( force_loop )
                    150:               asm("brb _pipe20_3_lp1");        /* loop on an error       */
                    151: /* 
                    152:  * verify the results
                    153: */
                    154:           if( (dbl_st_acc.m != dbl_expected.m) ||  /* COMPARE the stored */
                    155:               (dbl_st_acc.l != dbl_expected.l) ) { /*  to the expected   */
                    156:              errcnt++;                         /* bump the error count   */
                    157:              if( prt_error )
                    158:                  pipe20_print( 4 );            /* print error msg -4 NOPs */
                    159:              if( halt_flg )                    /* halt on error?          */
                    160:                  pipe20_halt( 4 );             /* error halt  -4 NOPs     */
                    161:              if( loop_on_err ) {
                    162:                  force_loop = TRUE;            /* set the force loop flag */
                    163:                  asm("jmp _pipe20_3_lp1");     /*      and loop           */
                    164:              }  
                    165:           }
                    166:        }  /* end of FOR loop */
                    167: }  /* end of subtest 3 */
                    168: 
                    169: 
                    170: 
                    171: 
                    172: 
                    173: 
                    174: /************************************************************************
                    175: *
                    176: *              SUBTEST 4 :  5 NEGDs
                    177: *
                    178: ************************************************************************/
                    179: pipe20_4() 
                    180: {
                    181:        subtest = 4;
                    182:        force_loop = FALSE;
                    183:        for( index = 0; index < max_ldd_1_index; index++ ) 
                    184:        {
                    185:           dbl_value_1  = ldd_1_data[index].ld;   /* get operand 1        */
                    186:           dbl_expected = ldd_1_data[index].exp;  /* get expected results */
                    187:           if( dbl_expected.m )
                    188:               dbl_expected.m ^= 0x80000000;      /* negate exptd results */
                    189: /*
                    190:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    191:  * The force loop flag is set after the first error.
                    192: */
                    193:           asm("_pipe20_4_lp1:");
                    194:           asm("ldd _dbl_value_1");             /* load the operand       */
                    195:           asm("negd");                         /* negate it ( 5 times )  */
                    196:           asm("negd");
                    197:           asm("negd");
                    198:           asm("negd");
                    199:           asm("negd");
                    200:           asm("std _dbl_st_acc");              /* store the result       */
                    201:           if( force_loop )
                    202:               asm("brb _pipe20_4_lp1");        /* loop on an error       */
                    203: /* 
                    204:  * verify the results
                    205: */
                    206:           if( (dbl_st_acc.m != dbl_expected.m) ||  /* COMPARE the stored */
                    207:               (dbl_st_acc.l != dbl_expected.l) ) { /*  to the expected   */
                    208:              errcnt++;                         /* bump the error count   */
                    209:              if( prt_error )
                    210:                  pipe20_print( 5 );            /* print error msg -5 NOPs */
                    211:              if( halt_flg )                    /* halt on error?          */
                    212:                  pipe20_halt( 5 );             /* error halt  -5 NOPs     */
                    213:              if( loop_on_err ) {
                    214:                  force_loop = TRUE;            /* set the force loop flag */
                    215:                  asm("jmp _pipe20_4_lp1");     /*      and loop           */
                    216:              }  
                    217:           }
                    218:        }  /* end of FOR loop */
                    219: }  /* end of subtest 4 */
                    220: 
                    221: 
                    222: 
                    223: 
                    224: 
                    225: /************************************************************************
                    226: *
                    227: *              SUBTEST 5 :  6 NEGDs
                    228: *
                    229: ************************************************************************/
                    230: pipe20_5() 
                    231: {
                    232:        subtest = 5;
                    233:        force_loop = FALSE;
                    234:        for( index = 0; index < max_ldd_1_index; index++ ) 
                    235:        {
                    236:           dbl_value_1  = ldd_1_data[index].ld;   /* get operand 1        */
                    237:           dbl_expected = ldd_1_data[index].exp;  /* get expected results */
                    238: /*
                    239:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    240:  * The force loop flag is set after the first error.
                    241: */
                    242:           asm("_pipe20_5_lp1:");
                    243:           asm("ldd _dbl_value_1");             /* load the operand       */
                    244:           asm("negd");                         /* negate it ( 6 times )  */
                    245:           asm("negd");
                    246:           asm("negd");
                    247:           asm("negd");
                    248:           asm("negd");
                    249:           asm("negd");
                    250:           asm("std _dbl_st_acc");              /* store the result       */
                    251:           if( force_loop )
                    252:               asm("brb _pipe20_5_lp1");        /* loop on an error       */
                    253: /* 
                    254:  * verify the results
                    255: */
                    256:           if( (dbl_st_acc.m != dbl_expected.m) ||  /* COMPARE the stored */
                    257:               (dbl_st_acc.l != dbl_expected.l) ) { /*  to the expected   */
                    258:              errcnt++;                         /* bump the error count   */
                    259:              if( prt_error )
                    260:                  pipe20_print( 6 );            /* print error msg -6 NOPs */
                    261:              if( halt_flg )                    /* halt on error?          */
                    262:                  pipe20_halt( 6 );             /* error halt  -6 NOPs     */
                    263:              if( loop_on_err ) {
                    264:                  force_loop = TRUE;            /* set the force loop flag */
                    265:                  asm("jmp _pipe20_5_lp1");     /*      and loop           */
                    266:              }  
                    267:           }
                    268:        }  /* end of FOR loop */
                    269: }  /* end of subtest 5 */
                    270: 
                    271: 
                    272: 
                    273: 
                    274: /****************************************************************************
                    275: *
                    276: *                      PRINT AN ERROR MESSAGE
                    277: *
                    278: * cycle dd   PIPELINE 20, subtest dd error
                    279: *  LDD op, {NEGD}, STD
                    280: * operand = xxxxxxxx xxxxxxxx,  final Acc = xxxxxxxx xxxxxxxx,   index = dd
                    281: *                            expected Acc = xxxxxxxx xxxxxxxx
                    282: *
                    283: ****************************************************************************/
                    284: pipe20_print( nop_count )
                    285: int nop_count;                                 /* # of NOP instructions */
                    286: {
                    287:        writes(" \n");          /* start a new print line   */
                    288:        writes("cycle: ");
                    289:        writed( cycle );
                    290:        writes("  PIPELINE 20, subtest ");
                    291:        writed( subtest );
                    292:        writes(" error\n");
                    293:        writes(" LDD(op), NEGD");
                    294:        while( --nop_count )
                    295:             writes(", NEGD");
                    296:        writes(", STD\n");
                    297:        writes("operand = ");
                    298:        write32h( dbl_value_1.m );
                    299:        writec(' ');
                    300:        write32h( dbl_value_1.l );
                    301:        writes(",  final Acc = ");
                    302:        write32h( dbl_st_acc.m );
                    303:        writec(' ');
                    304:        write32h( dbl_st_acc.l );
                    305:        writes(",   index = ");
                    306:        writed( index );
                    307:        writes("\n                           expected Acc = ");
                    308:        write32h( dbl_expected.m );
                    309:        writec(' ');
                    310:        write32h( dbl_expected.l );
                    311:        writec('\n');
                    312: }
                    313: 
                    314: 
                    315: 
                    316: /****************************************************************************
                    317: *
                    318: *              SET UP THE REGISTERS AND HALT
                    319: *
                    320: ****************************************************************************/
                    321: pipe20_halt( nop_count )
                    322: int nop_count;                                 /* # of NOP instructions */
                    323: {
                    324:        sgl_dummy1 = nop_count;
                    325:        sgl_value_1 = dbl_value_1.m;
                    326:        sgl_value_2 = dbl_value_1.l;
                    327:        sgl_value_3 = dbl_st_acc.m;
                    328:        sgl_value_4 = dbl_st_acc.l;
                    329:        sgl_value_5 = dbl_expected.m;
                    330:        sgl_value_6 = dbl_expected.l;
                    331:        asm("movl _test_no,r0");        /* r0  = test number     */
                    332:        asm("movl _subtest,r1");        /* r1  = subtest number  */
                    333:        asm("movl $1,r2");              /* r2  = error code      */
                    334:        asm("movl _cycle,r3");          /* r3  = cycle count     */
                    335:        asm("movl _sgl_dummy1,r4");     /* r4  = # of NEGDS      */
                    336:        asm("movl _sgl_value_1,r5");    /* r5  = MS operand      */
                    337:        asm("movl _sgl_value_2,r6");    /* r6  = LS operand      */
                    338:        asm("movl _sgl_value_3,r7");    /* r7  = MS stored       */
                    339:        asm("movl _sgl_value_4,r8");    /* r8  = LS stored       */
                    340:        asm("movl _sgl_value_5,r9");    /* r9  = MS expected     */
                    341:        asm("movl _sgl_value_6,r10");   /* r10 = LS expected     */
                    342:        asm("movl _index,r11");         /* r11 = data index      */
                    343:        asm("halt");                    /* HALT ...              */
                    344: }

unix.superglobalmegacorp.com

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