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

1.1       root        1: #include "fpp_defs.h"
                      2: 
                      3: 
                      4: /*****************************************************************************
                      5: *
                      6: *      MONITOR FOR PIPELINE TEST #7 (The Trans-Siberian Pipeline test)
                      7: *
                      8: *  This test will do:
                      9: *
                     10: *      LDF(x), SUBF(x), ADDF(0), SUBF(x), ADDF(x), SUBF(0), 
                     11: *              ADDF(x), SUBF(x), ADDF(0), SUBF(0), ADDF(x), STF
                     12: *
                     13: *  where the x's are the fmacro1 LDF data patterns. This test is an attempt
                     14: *  to fill the instruction Queue.
                     15: *****************************************************************************/
                     16: pipe_7()
                     17: {
                     18:        asm(".globl _pipeline_7_t");
                     19:        asm("_pipeline_7_t:");                  /* entry address            */
                     20:        if( (cycle == 1) && (prt_hdrs) )        /* print headers on 1st cycle */
                     21:        {
                     22:           writes(" PIPE_7 ");
                     23:        }
                     24:        subtest = 1;
                     25:        pipe7_1();                              /* data in REGs,  no NOPs */
                     26:        subtest ++;                             /* increment subtest num  */
                     27:        pipe7_2();                              /* data in REGs,   1 NOP  */
                     28:        subtest ++;                             /* increment subtest num  */
                     29:        pipe7_3();                              /* data in REGs,   2 NOPs */
                     30:        subtest ++;                             /* increment subtest num  */
                     31:        pipe7_4();                              /* data in REGs,   3 NOPs */
                     32:        subtest ++;                             /* increment subtest num  */
                     33:        pipe7_5();                              /* data in CACHE, no NOPs */
                     34:        subtest ++;                             /* increment subtest num  */
                     35:        pipe7_6();                              /* data in CACHE,  1 NOP  */
                     36:        subtest ++;                             /* increment subtest num  */
                     37:        pipe7_7();                              /* data in CACHE,  2 NOPs */
                     38:        subtest ++;                             /* increment subtest num  */
                     39:        pipe7_8();                              /* data in CACHE,  3 NOPs */
                     40:        subtest ++;                             /* increment subtest num  */
                     41:        pipe7_9();                              /* data on STACK, no NOPs */
                     42:        subtest ++;                             /* increment subtest num  */
                     43:        pipe7_10();                             /* data via FP  no NOPs */
                     44:        asm("jmp *return");                     /* return to the test monitor */
                     45: }
                     46: 
                     47: 
                     48: 
                     49: 
                     50: 
                     51: 
                     52: /************************************************************************
                     53: *
                     54: *                      SUBTEST 1  
                     55: *              data in registers, no NO-OPs
                     56: *
                     57: ************************************************************************/
                     58: pipe7_1() 
                     59: {
                     60:        force_loop = FALSE;                     /* clear the force_loop flg */
                     61:        index = 0;
                     62:        do 
                     63:        {
                     64:           sgl_value_1  = ldf_1_data[index].ld;   /* get operand 1        */
                     65:           sgl_expected = ldf_1_data[index].exp;  /* get expected results */
                     66:           sgl_value_2  = 0;                      /* set one operand to 0 */
                     67: /*
                     68:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                     69:  * The force loop flag is set after the first error.
                     70: */
                     71:           asm("_pipe7_1_lp1:");
                     72:           asm("movl _sgl_value_1,r4");         /* move the data to r4     */
                     73:           asm("movl _sgl_value_2,r3");         /* move the '0' to r3      */
                     74:           asm("ldf r4");                       /* load the ACC (ACC = op) */
                     75:           asm("subf r4");                      /* sub. the op. (ACC = 0 ) */
                     76:           asm("addf r3");                      /* add a '0'    (ACC = 0 ) */
                     77:           asm("subf r4");                      /* sub. the op. (ACC =-op) */
                     78:           asm("addf r4");                      /* add the op.  (ACC = 0 ) */
                     79:           asm("subf r3");                      /* sub. a '0'   (ACC = 0 ) */
                     80:           asm("addf r4");                      /* add the op.  (ACC = op) */
                     81:           asm("subf r4");                      /* sub. the op. (ACC = 0 ) */
                     82:           asm("addf r3");                      /* add a '0'    (ACC = 0 ) */
                     83:           asm("subf r3");                      /* sub. a '0'   (ACC = 0 ) */
                     84:           asm("addf r4");                      /* add the op.  (ACC = op) */
                     85:           asm("stf r5");                       /* store the ACC (s/b= op) */
                     86:           if( force_loop )
                     87:              asm("brb _pipe7_1_lp1");;         /* loop on the error       */
                     88: /* 
                     89:  * verify the results
                     90: */
                     91:           asm("movl r5,_sgl_st_acc");          /* get the result          */
                     92:           if( sgl_st_acc != sgl_expected )     /* COMPARE the values      */
                     93:           {
                     94:              errcnt++;                         /* bump the error count    */
                     95:              if ( prt_error ) 
                     96:                 print_pipe7_er("Reg. Data, no NO-OPs");
                     97:              if ( halt_flg )
                     98:                 pipe7_er_hlt( subtest );
                     99:              if ( loop_on_err ) {
                    100:                 force_loop = TRUE;             /* set the force loop flag */
                    101:                 asm("jmp _pipe7_1_lp1");       /* and loop                */
                    102:              }
                    103:           }   /* end of compare error */
                    104:        } while( index++ < max_ldf_1_index );
                    105: }  /* end of subtest 1 */
                    106: 
                    107: 
                    108: 
                    109: 
                    110: 
                    111: 
                    112: /************************************************************************
                    113: *
                    114: *                      SUBTEST 2  
                    115: *              data in registers, 1 NO-OP
                    116: *
                    117: ************************************************************************/
                    118: pipe7_2() 
                    119: {
                    120:        force_loop = FALSE;                     /* clear force_loop flag */
                    121:        index = 0;
                    122:        do 
                    123:        {
                    124:           sgl_value_1  = ldf_1_data[index].ld;   /* get operand 1        */
                    125:           sgl_expected = ldf_1_data[index].exp;  /* get expected results */
                    126:           sgl_value_2  = 0;                      /* get the '0' operand  */
                    127: /*
                    128:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    129:  * The force loop flag is set after the first error.
                    130: */
                    131:           asm("_pipe7_2_lp1:");
                    132:           asm("movl _sgl_value_1,r4");         /* move the data to r4     */
                    133:           asm("movl _sgl_value_2,r3");         /* move the '0' to r3      */
                    134:           asm("ldf r4");                       /* load the ACC (ACC = op) */
                    135:           asm("nop");
                    136:           asm("subf r4");                      /* sub. the op. (ACC = 0 ) */
                    137:           asm("nop");
                    138:           asm("addf r3");                      /* add a '0'    (ACC = 0 ) */
                    139:           asm("nop");
                    140:           asm("subf r4");                      /* sub. the op. (ACC =-op) */
                    141:           asm("nop");
                    142:           asm("addf r4");                      /* add the op.  (ACC = 0 ) */
                    143:           asm("nop");
                    144:           asm("subf r3");                      /* sub. a '0'   (ACC = 0 ) */
                    145:           asm("nop");
                    146:           asm("addf r4");                      /* add the op.  (ACC = op) */
                    147:           asm("nop");
                    148:           asm("subf r4");                      /* sub. the op. (ACC = 0 ) */
                    149:           asm("nop");
                    150:           asm("addf r3");                      /* add a '0'    (ACC = 0 ) */
                    151:           asm("nop");
                    152:           asm("subf r3");                      /* sub. a '0'   (ACC = 0 ) */
                    153:           asm("nop");
                    154:           asm("addf r4");                      /* add the op.  (ACC = op) */
                    155:           asm("nop");
                    156:           asm("stf r5");                       /* store the ACC (s/b= op) */
                    157:           if( force_loop )
                    158:              asm("brb _pipe7_2_lp1");;         /* loop on the error       */
                    159: /* 
                    160:  * verify the results
                    161: */
                    162:           asm("movl r5,_sgl_st_acc");          /* get the result          */
                    163:           if( sgl_st_acc != sgl_expected )     /* COMPARE the values      */
                    164:           {
                    165:              errcnt++;                         /* bump the error count    */
                    166:              if ( prt_error ) 
                    167:                 print_pipe7_er("Reg. Data, 1 NO-OP");
                    168:              if ( halt_flg )
                    169:                 pipe7_er_hlt( subtest );
                    170:              if ( loop_on_err ) {
                    171:                 force_loop = TRUE;             /* set the force loop flag */
                    172:                 asm("jmp _pipe7_2_lp1");       /* and loop                */
                    173:              }
                    174:           }   /* end of compare error */
                    175:        } while( index++ < max_ldf_1_index );
                    176: }  /* end of subtest 2 */
                    177: 
                    178: 
                    179: 
                    180: 
                    181: 
                    182: 
                    183: /************************************************************************
                    184: *
                    185: *                      SUBTEST 3  
                    186: *              data in registers, 2 NO-OPs
                    187: *
                    188: ************************************************************************/
                    189: pipe7_3() 
                    190: {
                    191:        force_loop = FALSE;                     /* clear force_loop flag */
                    192:        index = 0;
                    193:        do 
                    194:        {
                    195:           sgl_value_1  = ldf_1_data[index].ld;   /* get operand 1        */
                    196:           sgl_expected = ldf_1_data[index].exp;  /* get expected results */
                    197:           sgl_value_2  = 0;                      /* set the '0' operand  */
                    198: /*
                    199:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    200:  * The force loop flag is set after the first error.
                    201: */
                    202:           asm("_pipe7_3_lp1:");
                    203:           asm("movl _sgl_value_1,r4");         /* move the data to r4     */
                    204:           asm("movl _sgl_value_2,r3");         /* move the '0' to r3      */
                    205:           asm("ldf r4");                       /* load the ACC (ACC = op) */
                    206:           asm("nop");
                    207:           asm("nop");
                    208:           asm("subf r4");                      /* sub. the op. (ACC = 0 ) */
                    209:           asm("nop");
                    210:           asm("nop");
                    211:           asm("addf r3");                      /* add a '0'    (ACC = 0 ) */
                    212:           asm("nop");
                    213:           asm("nop");
                    214:           asm("subf r4");                      /* sub. the op. (ACC =-op) */
                    215:           asm("nop");
                    216:           asm("nop");
                    217:           asm("addf r4");                      /* add the op.  (ACC = 0 ) */
                    218:           asm("nop");
                    219:           asm("nop");
                    220:           asm("subf r3");                      /* sub. a '0'   (ACC = 0 ) */
                    221:           asm("nop");
                    222:           asm("nop");
                    223:           asm("addf r4");                      /* add the op.  (ACC = op) */
                    224:           asm("nop");
                    225:           asm("nop");
                    226:           asm("subf r4");                      /* sub. the op. (ACC = 0 ) */
                    227:           asm("nop");
                    228:           asm("nop");
                    229:           asm("addf r3");                      /* add a '0'    (ACC = 0 ) */
                    230:           asm("nop");
                    231:           asm("nop");
                    232:           asm("subf r3");                      /* sub. a '0'   (ACC = 0 ) */
                    233:           asm("nop");
                    234:           asm("nop");
                    235:           asm("addf r4");                      /* add the op.  (ACC = op) */
                    236:           asm("nop");
                    237:           asm("nop");
                    238:           asm("stf r5");                       /* store the ACC (s/b= op) */
                    239:           if( force_loop )
                    240:              asm("brb _pipe7_3_lp1");;         /* loop on the error       */
                    241: /* 
                    242:  * verify the results
                    243: */
                    244:           asm("movl r5,_sgl_st_acc");          /* get the result          */
                    245:           if( sgl_st_acc != sgl_expected )     /* COMPARE the values      */
                    246:           {
                    247:              errcnt++;                         /* bump the error count    */
                    248:              if ( prt_error ) 
                    249:                 print_pipe7_er("Reg. Data, 2 NO-OPs");
                    250:              if ( halt_flg )
                    251:                 pipe7_er_hlt( subtest );
                    252:              if ( loop_on_err ) {
                    253:                 force_loop = TRUE;             /* set the force loop flag */
                    254:                 asm("jmp _pipe7_3_lp1");       /* and loop                */
                    255:              }
                    256:           }   /* end of compare error */
                    257:        } while( index++ < max_ldf_1_index );
                    258: }  /* end of subtest 3 */
                    259: 
                    260: 
                    261: 
                    262: 
                    263: 
                    264: 
                    265: /************************************************************************
                    266: *
                    267: *                      SUBTEST 4  
                    268: *              data in registers, 3 NO-OPs
                    269: *
                    270: ************************************************************************/
                    271: pipe7_4() 
                    272: {
                    273:        force_loop = FALSE;                     /* clear force_loop flag */
                    274:        index = 0;
                    275:        do 
                    276:        {
                    277:           sgl_value_1  = ldf_1_data[index].ld;   /* get operand 1        */
                    278:           sgl_expected = ldf_1_data[index].exp;  /* get expected results */
                    279:           sgl_value_2  = 0;                      /* set the '0' operand  */
                    280: /*
                    281:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    282:  * The force loop flag is set after the first error.
                    283: */
                    284:           asm("_pipe7_4_lp1:");
                    285:           asm("movl _sgl_value_1,r4");         /* move the data to r4     */
                    286:           asm("movl _sgl_value_2,r3");         /* move the '0' to r3      */
                    287:           asm("ldf r4");                       /* load the ACC (ACC = op) */
                    288:           asm("nop");
                    289:           asm("nop");
                    290:           asm("nop");
                    291:           asm("subf r4");                      /* sub. the op. (ACC = 0 ) */
                    292:           asm("nop");
                    293:           asm("nop");
                    294:           asm("nop");
                    295:           asm("addf r3");                      /* add a '0'    (ACC = 0 ) */
                    296:           asm("nop");
                    297:           asm("nop");
                    298:           asm("nop");
                    299:           asm("subf r4");                      /* sub. the op. (ACC =-op) */
                    300:           asm("nop");
                    301:           asm("nop");
                    302:           asm("nop");
                    303:           asm("addf r4");                      /* add the op.  (ACC = 0 ) */
                    304:           asm("nop");
                    305:           asm("nop");
                    306:           asm("nop");
                    307:           asm("subf r3");                      /* sub. a '0'   (ACC = 0 ) */
                    308:           asm("nop");
                    309:           asm("nop");
                    310:           asm("nop");
                    311:           asm("addf r4");                      /* add the op.  (ACC = op) */
                    312:           asm("nop");
                    313:           asm("nop");
                    314:           asm("nop");
                    315:           asm("subf r4");                      /* sub. the op. (ACC = 0 ) */
                    316:           asm("nop");
                    317:           asm("nop");
                    318:           asm("nop");
                    319:           asm("addf r3");                      /* add a '0'    (ACC = 0 ) */
                    320:           asm("nop");
                    321:           asm("nop");
                    322:           asm("nop");
                    323:           asm("subf r3");                      /* sub. a '0'   (ACC = 0 ) */
                    324:           asm("nop");
                    325:           asm("nop");
                    326:           asm("nop");
                    327:           asm("addf r4");                      /* add the op.  (ACC = op) */
                    328:           asm("nop");
                    329:           asm("nop");
                    330:           asm("nop");
                    331:           asm("stf r5");                       /* store the ACC (s/b= op) */
                    332:           if( force_loop )
                    333:              asm("brb _pipe7_4_lp1");;         /* loop on the error       */
                    334: /* 
                    335:  * verify the results
                    336: */
                    337:           asm("movl r5,_sgl_st_acc");          /* get the result          */
                    338:           if( sgl_st_acc != sgl_expected )     /* COMPARE the values      */
                    339:           {
                    340:              errcnt++;                         /* bump the error count    */
                    341:              if ( prt_error ) 
                    342:                 print_pipe7_er("Reg. Data, 3 NO-OPs");
                    343:              if ( halt_flg )
                    344:                 pipe7_er_hlt( subtest );
                    345:              if ( loop_on_err ) {
                    346:                 force_loop = TRUE;             /* set the force loop flag */
                    347:                 asm("jmp _pipe7_4_lp1");       /* and loop                */
                    348:              }
                    349:           }   /* end of compare error */
                    350:        } while( index++ < max_ldf_1_index );
                    351: }  /* end of subtest 4 */
                    352: 
                    353: 
                    354: 
                    355: 
                    356: 
                    357: 
                    358: 
                    359: /************************************************************************
                    360: *
                    361: *                      SUBTEST 5  
                    362: *              data in Cache, no NO-OPs
                    363: *
                    364: ************************************************************************/
                    365: pipe7_5() 
                    366: {
                    367:        force_loop = FALSE;                     /* clear force_loop flag */
                    368:        index = 0;
                    369:        do 
                    370:        {
                    371:           sgl_value_1  = ldf_1_data[index].ld;   /* get operand 1        */
                    372:           sgl_expected = ldf_1_data[index].exp;  /* get expected results */
                    373:           sgl_value_2  = 0;                      /* set the '0' operand  */
                    374: /*
                    375:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    376:  * The force loop flag is set after the first error.
                    377: */
                    378:           asm("_pipe7_5_lp1:");
                    379:           asm("ldf _sgl_value_1");             /* load the ACC (ACC = op) */
                    380:           asm("subf _sgl_value_1");            /* sub. the op. (ACC = 0 ) */
                    381:           asm("addf _sgl_value_2");            /* add a '0'    (ACC = 0 ) */
                    382:           asm("subf _sgl_value_1");            /* sub. the op. (ACC =-op) */
                    383:           asm("addf _sgl_value_1");            /* add the op.  (ACC = 0 ) */
                    384:           asm("subf _sgl_value_2");            /* sub. a '0'   (ACC = 0 ) */
                    385:           asm("addf _sgl_value_1");            /* add the op.  (ACC = op) */
                    386:           asm("subf _sgl_value_1");            /* sub. the op. (ACC = 0 ) */
                    387:           asm("addf _sgl_value_2");            /* add a '0'    (ACC = 0 ) */
                    388:           asm("subf _sgl_value_2");            /* sub. a '0'   (ACC = 0 ) */
                    389:           asm("addf _sgl_value_1");            /* add the op.  (ACC = op) */
                    390:           asm("stf _sgl_st_acc");              /* store the ACC (s/b= op) */
                    391:           if( force_loop )
                    392:              asm("brb _pipe7_5_lp1");;         /* loop on the error       */
                    393: /* 
                    394:  * verify the results
                    395: */
                    396:           if( sgl_st_acc != sgl_expected )     /* COMPARE the values      */
                    397:           {
                    398:              errcnt++;                         /* bump the error count    */
                    399:              if ( prt_error ) 
                    400:                 print_pipe7_er("Cache Data, no NO-OPs");
                    401:              if ( halt_flg )
                    402:                 pipe7_er_hlt( subtest );
                    403:              if ( loop_on_err ) {
                    404:                 force_loop = TRUE;             /* set the force loop flag */
                    405:                 asm("jmp _pipe7_5_lp1");       /* and loop                */
                    406:              }
                    407:           }   /* end of compare error */
                    408:        } while( index++ < max_ldf_1_index );
                    409: }  /* end of subtest 5 */
                    410: 
                    411: 
                    412: 
                    413: 
                    414: 
                    415: 
                    416: /************************************************************************
                    417: *
                    418: *                      SUBTEST 6  
                    419: *              data in Cache, 1 NO-OP
                    420: *
                    421: ************************************************************************/
                    422: pipe7_6() 
                    423: {
                    424:        force_loop = FALSE;                     /* clear force_loop flag */
                    425:        index = 0;
                    426:        do 
                    427:        {
                    428:           sgl_value_1  = ldf_1_data[index].ld;   /* get operand 1        */
                    429:           sgl_expected = ldf_1_data[index].exp;  /* get expected results */
                    430: /*
                    431:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    432:  * The force loop flag is set after the first error.
                    433: */
                    434:           asm("_pipe7_6_lp1:");
                    435:           asm("ldf _sgl_value_1");             /* load the ACC (ACC = op) */
                    436:           asm("nop");
                    437:           asm("subf _sgl_value_1");            /* sub. the op. (ACC = 0 ) */
                    438:           asm("nop");
                    439:           asm("addf _sgl_value_2");            /* add a '0'    (ACC = 0 ) */
                    440:           asm("nop");
                    441:           asm("subf _sgl_value_1");            /* sub. the op. (ACC =-op) */
                    442:           asm("nop");
                    443:           asm("addf _sgl_value_1");            /* add the op.  (ACC = 0 ) */
                    444:           asm("nop");
                    445:           asm("subf _sgl_value_2");            /* sub. a '0'   (ACC = 0 ) */
                    446:           asm("nop");
                    447:           asm("addf _sgl_value_1");            /* add the op.  (ACC = op) */
                    448:           asm("nop");
                    449:           asm("subf _sgl_value_1");            /* sub. the op. (ACC = 0 ) */
                    450:           asm("nop");
                    451:           asm("addf _sgl_value_2");            /* add a '0'    (ACC = 0 ) */
                    452:           asm("nop");
                    453:           asm("subf _sgl_value_2");            /* sub. a '0'   (ACC = 0 ) */
                    454:           asm("nop");
                    455:           asm("addf _sgl_value_1");            /* add the op.  (ACC = op) */
                    456:           asm("nop");
                    457:           asm("stf _sgl_st_acc");              /* store the ACC (s/b= op) */
                    458:           if( force_loop )
                    459:              asm("brb _pipe7_6_lp1");;         /* loop on the error       */
                    460: /* 
                    461:  * verify the results
                    462: */
                    463:           if( sgl_st_acc != sgl_expected )     /* COMPARE the values      */
                    464:           {
                    465:              errcnt++;                         /* bump the error count    */
                    466:              if ( prt_error ) 
                    467:                 print_pipe7_er("Cache Data, 1 NO-OP");
                    468:              if ( halt_flg )
                    469:                 pipe7_er_hlt( subtest );
                    470:              if ( loop_on_err ) {
                    471:                 force_loop = TRUE;             /* set the force loop flag */
                    472:                 asm("jmp _pipe7_6_lp1");       /* and loop                */
                    473:              }
                    474:           }   /* end of compare error */
                    475:        } while( index++ < max_ldf_1_index );
                    476: }  /* end of subtest 6 */
                    477: 
                    478: 
                    479: 
                    480: 
                    481: 
                    482: 
                    483: /************************************************************************
                    484: *
                    485: *                      SUBTEST 7  
                    486: *              data in Cache, 2 NO-OPs
                    487: *
                    488: ************************************************************************/
                    489: pipe7_7() 
                    490: {
                    491:        force_loop = FALSE;                     /* clear force_loop flag */
                    492:        index = 0;
                    493:        do 
                    494:        {
                    495:           sgl_value_1  = ldf_1_data[index].ld;   /* get operand 1        */
                    496:           sgl_expected = ldf_1_data[index].exp;  /* get expected results */
                    497:           sgl_value_2  = 0;                      /* set the '0' operand  */
                    498: /*
                    499:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    500:  * The force loop flag is set after the first error.
                    501: */
                    502:           asm("_pipe7_7_lp1:");
                    503:           asm("ldf _sgl_value_1");             /* load the ACC (ACC = op) */
                    504:           asm("nop");
                    505:           asm("nop");
                    506:           asm("subf _sgl_value_1");            /* sub. the op. (ACC = 0 ) */
                    507:           asm("nop");
                    508:           asm("nop");
                    509:           asm("addf _sgl_value_2");            /* add a '0'    (ACC = 0 ) */
                    510:           asm("nop");
                    511:           asm("nop");
                    512:           asm("subf _sgl_value_1");            /* sub. the op. (ACC =-op) */
                    513:           asm("nop");
                    514:           asm("nop");
                    515:           asm("addf _sgl_value_1");            /* add the op.  (ACC = 0 ) */
                    516:           asm("nop");
                    517:           asm("nop");
                    518:           asm("subf _sgl_value_2");            /* sub. a '0'   (ACC = 0 ) */
                    519:           asm("nop");
                    520:           asm("nop");
                    521:           asm("addf _sgl_value_1");            /* add the op.  (ACC = op) */
                    522:           asm("nop");
                    523:           asm("nop");
                    524:           asm("subf _sgl_value_1");            /* sub. the op. (ACC = 0 ) */
                    525:           asm("nop");
                    526:           asm("nop");
                    527:           asm("addf _sgl_value_2");            /* add a '0'    (ACC = 0 ) */
                    528:           asm("nop");
                    529:           asm("nop");
                    530:           asm("subf _sgl_value_2");            /* sub. a '0'   (ACC = 0 ) */
                    531:           asm("nop");
                    532:           asm("nop");
                    533:           asm("addf _sgl_value_1");            /* add the op.  (ACC = op) */
                    534:           asm("nop");
                    535:           asm("nop");
                    536:           asm("stf _sgl_st_acc");              /* store the ACC (s/b= op) */
                    537:           if( force_loop )
                    538:              asm("brb _pipe7_7_lp1");;         /* loop on the error       */
                    539: /* 
                    540:  * verify the results
                    541: */
                    542:           if( sgl_st_acc != sgl_expected )     /* COMPARE the values      */
                    543:           {
                    544:              errcnt++;                         /* bump the error count    */
                    545:              if ( prt_error ) 
                    546:                 print_pipe7_er("Cache Data, 2 NO-OPs");
                    547:              if ( halt_flg )
                    548:                 pipe7_er_hlt( subtest );
                    549:              if ( loop_on_err ) {
                    550:                 force_loop = TRUE;             /* set the force loop flag */
                    551:                 asm("jmp _pipe7_7_lp1");       /* and loop                */
                    552:              }
                    553:           }   /* end of compare error */
                    554:        } while( index++ < max_ldf_1_index );
                    555: }  /* end of subtest 7 */
                    556: 
                    557: 
                    558: 
                    559: 
                    560: 
                    561: 
                    562: /************************************************************************
                    563: *
                    564: *                      SUBTEST 8  
                    565: *              data in Cache, 3 NO-OPs
                    566: *
                    567: ************************************************************************/
                    568: pipe7_8() 
                    569: {
                    570:        force_loop = FALSE;                     /* clear force_loop flag */
                    571:        index = 0;
                    572:        do 
                    573:        {
                    574:           sgl_value_1  = ldf_1_data[index].ld;   /* get operand 1        */
                    575:           sgl_expected = ldf_1_data[index].exp;  /* get expected results */
                    576:           sgl_value_2  = 0;                      /* set the '0' operand  */
                    577: /*
                    578:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    579:  * The force loop flag is set after the first error.
                    580: */
                    581:           asm("_pipe7_8_lp1:");
                    582:           asm("ldf _sgl_value_1");             /* load the ACC (ACC = op) */
                    583:           asm("nop");
                    584:           asm("nop");
                    585:           asm("nop");
                    586:           asm("subf _sgl_value_1");            /* sub. the op. (ACC = 0 ) */
                    587:           asm("nop");
                    588:           asm("nop");
                    589:           asm("nop");
                    590:           asm("addf _sgl_value_2");            /* add a '0'    (ACC = 0 ) */
                    591:           asm("nop");
                    592:           asm("nop");
                    593:           asm("nop");
                    594:           asm("subf _sgl_value_1");            /* sub. the op. (ACC =-op) */
                    595:           asm("nop");
                    596:           asm("nop");
                    597:           asm("nop");
                    598:           asm("addf _sgl_value_1");            /* add the op.  (ACC = 0 ) */
                    599:           asm("nop");
                    600:           asm("nop");
                    601:           asm("nop");
                    602:           asm("subf _sgl_value_2");            /* sub. a '0'   (ACC = 0 ) */
                    603:           asm("nop");
                    604:           asm("nop");
                    605:           asm("nop");
                    606:           asm("addf _sgl_value_1");            /* add the op.  (ACC = op) */
                    607:           asm("nop");
                    608:           asm("nop");
                    609:           asm("nop");
                    610:           asm("subf _sgl_value_1");            /* sub. the op. (ACC = 0 ) */
                    611:           asm("nop");
                    612:           asm("nop");
                    613:           asm("nop");
                    614:           asm("addf _sgl_value_2");            /* add a '0'    (ACC = 0 ) */
                    615:           asm("nop");
                    616:           asm("nop");
                    617:           asm("nop");
                    618:           asm("subf _sgl_value_2");            /* sub. a '0'   (ACC = 0 ) */
                    619:           asm("nop");
                    620:           asm("nop");
                    621:           asm("nop");
                    622:           asm("addf _sgl_value_1");            /* add the op.  (ACC = op) */
                    623:           asm("nop");
                    624:           asm("nop");
                    625:           asm("nop");
                    626:           asm("stf _sgl_st_acc");              /* store the ACC (s/b= op) */
                    627:           if( force_loop )
                    628:              asm("brb _pipe7_8_lp1");;         /* loop on the error       */
                    629: /* 
                    630:  * verify the results
                    631: */
                    632:           if( sgl_st_acc != sgl_expected )     /* COMPARE the values      */
                    633:           {
                    634:              errcnt++;                         /* bump the error count    */
                    635:              if ( prt_error ) 
                    636:                 print_pipe7_er("Cache Data, 3 NO-OPs");
                    637:              if ( halt_flg )
                    638:                 pipe7_er_hlt( subtest );
                    639:              if ( loop_on_err ) {
                    640:                 force_loop = TRUE;             /* set the force loop flag */
                    641:                 asm("jmp _pipe7_8_lp1");       /* and loop                */
                    642:              }
                    643:           }   /* end of compare error */
                    644:        } while( index++ < max_ldf_1_index );
                    645: }  /* end of subtest 8 */
                    646: 
                    647: 
                    648: 
                    649: 
                    650: 
                    651: 
                    652: /*****************************************************************************
                    653: *
                    654: *                      SUBTEST 9  
                    655: *              data on the stack, no NO-OPs
                    656: *
                    657: *****************************************************************************/
                    658: pipe7_9() 
                    659: {
                    660:        asm("moval (r13),_pre_event_fp");       /* save the frame pointer   */ 
                    661:        asm("moval (r14),_pre_event_sp");       /* save the stack pointer   */ 
                    662:        force_loop = FALSE;                     /* clear force_loop flag */
                    663:        index = 0;
                    664:        do 
                    665:        {
                    666:           sgl_value_1  = ldf_1_data[index].ld;   /* get operand 1          */
                    667:           sgl_expected = ldf_1_data[index].exp;  /* get expected results   */
                    668:           sgl_value_4  = 0;                      /* set the '0' operand  */
                    669:           asm("moval _pointer_data,_sgl_value_2");/* init / final SP value */
                    670: /*
                    671:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    672:  * The force loop flag is set after the first error.
                    673: */
                    674:           asm("_pipe7_9_lp1:");
                    675:           asm("moval _pointer_data,r14");      /* set the stack pointer  */
                    676:           asm("movl _sgl_value_1,-(r14)");     /* push operand to add    */
                    677:           asm("movl _sgl_value_4,-(r14)");     /* '0' to subtract */
                    678:           asm("movl _sgl_value_4,-(r14)");     /* '0' to add      */
                    679:           asm("movl _sgl_value_1,-(r14)");     /* op. to subtract */
                    680:           asm("movl _sgl_value_1,-(r14)");     /* op. to add      */
                    681:           asm("movl _sgl_value_4,-(r14)");     /* '0' to subtract */
                    682:           asm("movl _sgl_value_1,-(r14)");     /* op. to add      */
                    683:           asm("movl _sgl_value_1,-(r14)");     /* op. to subtract */
                    684:           asm("movl _sgl_value_4,-(r14)");     /* '0' to add      */
                    685:           asm("movl _sgl_value_1,-(r14)");     /* op. to subtract */
                    686:           asm("movl _sgl_value_1,-(r14)");     /* op. to load */
                    687: /*
                    688:  * now pop the data off the stack
                    689: */
                    690:           asm("ldf (r14)+");                   /* pop the data & load it  */
                    691:           asm("subf (r14)+");                  /* sub. the op. (ACC = 0 ) */
                    692:           asm("addf (r14)+");                  /* add a '0'    (ACC = 0 ) */
                    693:           asm("subf (r14)+");                  /* sub. the op. (ACC =-op) */
                    694:           asm("addf (r14)+");                  /* add the op.  (ACC = 0 ) */
                    695:           asm("subf (r14)+");                  /* sub. a '0'   (ACC = 0 ) */
                    696:           asm("addf (r14)+");                  /* add the op.  (ACC = op) */
                    697:           asm("subf (r14)+");                  /* sub. the op. (ACC = 0 ) */
                    698:           asm("addf (r14)+");                  /* add a '0'    (ACC = 0 ) */
                    699:           asm("subf (r14)+");                  /* sub. a '0'   (ACC = 0 ) */
                    700:           asm("addf (r14)+");                  /* add the op.  (ACC = op) */
                    701:           asm("stf r5");                       /* store the ACC (s/b= op) */
                    702:           if( force_loop )
                    703:              asm("brb _pipe7_9_lp1");;         /* loop on the error       */
                    704: /* 
                    705:  * verify the results
                    706: */
                    707:           asm("movl r5,_sgl_st_acc");          /* get the result          */
                    708:           asm("moval (r14),_sgl_value_3");     /* save the stack pointer  */
                    709:           if( (sgl_st_acc  != sgl_expected) || /* verify the result...    */
                    710:               (sgl_value_3 != sgl_value_2) )   /* ... and the final SP    */
                    711:           {
                    712:              asm("movl _pre_event_fp,r13");    /* restore frame pointer   */
                    713:              asm("movl _pre_event_sp,r14");    /* restore stack pointer   */
                    714:              errcnt++;                         /* bump the error count    */
                    715:              if ( prt_error ) {
                    716:                 print_pipe7_er("POP data from the STACK");
                    717:                 writes("final Stack Pointer = ");
                    718:                 write32h( sgl_value_5 );
                    719:                 writes(",  expected SP = ");
                    720:                 write32h( sgl_value_4 );
                    721:                 writes("\n");
                    722:              }
                    723:              if ( halt_flg )                   /* halt on error?          */
                    724:                 pipe7_er_hlt( subtest );
                    725:              if ( loop_on_err ) {
                    726:                 force_loop = TRUE;             /* set the force loop flag */
                    727:                 asm("jmp _pipe7_9_lp1");       /* and loop                */
                    728:              }
                    729:           }   /* end of compare error */
                    730:        } while( index++ < max_ldf_1_index );
                    731:        asm("movl _pre_event_fp,r13");          /* restore the frame pointer */
                    732:        asm("movl _pre_event_sp,r14");          /* restore the stack pointer */
                    733: }  /* end of subtest 9 */
                    734: 
                    735: 
                    736: 
                    737: 
                    738: 
                    739: 
                    740: /******************************************************************************
                    741: *
                    742: *                      SUBTEST 10  
                    743: *      load 0, add operand 4 times  -get data via indexed FRAME pointer
                    744: *
                    745: *      ADDR            INDEX   DATA
                    746: *      pointer_data      4     <the STF result goes here>
                    747: *      pointer_data-4    3     <operand data>
                    748: *      pointer_data-8    2     <'0' data>
                    749: *      pointer_data-16   0     point the frame pointer here
                    750: *
                    751: ******************************************************************************/
                    752: pipe7_10() 
                    753: {
                    754:        asm("moval (r13),_pre_event_fp");       /* save the frame pointer   */ 
                    755:        asm("moval (r14),_pre_event_sp");       /* save the stack pointer   */ 
                    756:        force_loop = FALSE;                     /* clear force_loop flag */
                    757:        index = 0;
                    758:        do 
                    759:        {
                    760:           sgl_value_1  = ldf_1_data[index].ld;    /* get operand 1         */
                    761:           sgl_expected = ldf_1_data[index].exp;   /* get expected results  */
                    762:           sgl_value_4  = 0;                      /* set the '0' operand  */
                    763:           asm("moval _pointer_data,_sgl_value_2");/* init / final SP value */
                    764: /*
                    765:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    766:  * The force loop flag is set after the first error.
                    767: */
                    768:           asm("_pipe7_10_lp1:");
                    769:           asm("moval _pointer_data,_sgl_value_2");/* get store data's addr */
                    770:           sgl_value_2 -= 4;                    /* decrement it by 4 (bytes)*/
                    771:           asm("movl _sgl_value_1,*_sgl_value_2");/* set the operand data   */
                    772:           sgl_value_2 -= 4;                    /* decrement it by 4 (bytes)*/
                    773:           asm("movl _sgl_value_4,*_sgl_value_2");/* set the '0' data       */
                    774:           sgl_value_2 -= 8;                    /* get the FP addr to use   */
                    775:           asm("movl _sgl_value_2,r13");        /* set the FRAME POINTER    */
                    776:           asm("movl $2,r2");                   /* r2 index = 2 longwords   */
                    777:           asm("movl $3,r5");                   /* r5 index = 3 longwords   */
                    778:           asm("movl $4,r6");                   /* r6 index = 4 longwords   */
                    779:           asm("ldf (r13)[r5]");                /* load the operand via SP  */
                    780:           asm("subf (r13)[r5]");               /* sub. the op. (ACC = 0 )  */
                    781:           asm("addf (r13)[r2]");               /* add a '0'    (ACC = 0 )  */
                    782:           asm("subf (r13)[r5]");               /* sub. the op. (ACC =-op)  */
                    783:           asm("addf (r13)[r5]");               /* add the op.  (ACC = 0 )  */
                    784:           asm("subf (r13)[r2]");               /* sub. a '0'   (ACC = 0 )  */
                    785:           asm("addf (r13)[r5]");               /* add the op.  (ACC = op)  */
                    786:           asm("subf (r13)[r5]");               /* sub. the op. (ACC = 0 )  */
                    787:           asm("addf (r13)[r2]");               /* add a '0'    (ACC = 0 )  */
                    788:           asm("subf (r13)[r2]");               /* sub. a '0'   (ACC = 0 )  */
                    789:           asm("addf (r13)[r5]");               /* add the op.  (ACC = op)  */
                    790:           asm("stf (r13)[r6]");                /* store -indexed by r6     */
                    791:           if( force_loop )
                    792:              asm("brb _pipe7_10_lp1");;        /* loop on the error       */
                    793: /* 
                    794:  * verify the results
                    795: */
                    796:           sgl_st_acc = pointer_data;           /* move the stored result  */
                    797:           asm("moval (r13),_sgl_value_3");     /* save the frame pointer  */
                    798:           if( (sgl_st_acc  != sgl_expected) || /* verify the result...    */
                    799:               (sgl_value_3 != sgl_value_2) )   /* ... and the final FP    */
                    800:           {
                    801:              asm("movl _pre_event_fp,r13");    /* restore frame pointer   */
                    802:              asm("movl _pre_event_sp,r14");    /* restore stack pointer   */
                    803:              errcnt++;                         /* bump the error count    */
                    804:              if ( prt_error ) {
                    805:                 print_pipe7_er("indexed FP addressing");
                    806:                 writes("final Frame Pointer = ");
                    807:                 writeh( sgl_value_5 );
                    808:                 writes(",  expected FP = ");
                    809:                 writeh( sgl_value_4 );
                    810:                 writes("\n");
                    811:              }
                    812:              if ( halt_flg )                   /* halt on error?          */
                    813:                 pipe7_er_hlt( subtest );
                    814:              if ( loop_on_err ) {
                    815:                 force_loop = TRUE;             /* set the force loop flag */
                    816:                 asm("jmp _pipe7_10_lp1");      /* and loop                */
                    817:              }
                    818:           }   /* end of compare error */
                    819:        } while( index++ < max_ldf_1_index );
                    820:        asm("movl _pre_event_fp,r13");          /* restore the frame pointer */
                    821:        asm("movl _pre_event_sp,r14");          /* restore the stack pointer */
                    822: }  /* end of subtest 10 */
                    823: 
                    824: 
                    825: /******************************************************************************
                    826: *
                    827: *                      ERROR ROUTINE
                    828: *
                    829: *      print an error in the following form
                    830: *
                    831: *  operand = xxxxxxxx,   final Acc = xxxxxxxx,   data index = dd
                    832: *                     expected Acc = xxxxxxxx
                    833: *
                    834: ******************************************************************************/
                    835: print_pipe7_er(msg)
                    836: char *msg;
                    837: {
                    838:        writes("\n");           /* start a new print line   */
                    839:        writes("cycle: ");
                    840:        writed( cycle );
                    841:        writes(" test ");
                    842:        writed( test_no );
                    843:        writes("  (Pipe 7), subtest ");
                    844:        writed( subtest );
                    845:        writes(" error - ");
                    846:        writes( msg );
                    847:        writec('\n');
                    848:        writes(
                    849:        "LDF(op), SUBF(op), ADDF(0.0), SUBF(op),  ADDF(op),  SUBF(0.0),\n");
                    850:        writes(
                    851:        "         ADDF(op), SUBF(op),  ADDF(0.0), SUBF(0.0), ADDF(op),  STF\n");
                    852:        writes("operand = ");
                    853:        write32h( sgl_value_1 );
                    854:        writes(",   final Acc = ");
                    855:        write32h( sgl_st_acc );
                    856:        writes(",   data index = ");
                    857:        writed( index );
                    858:        writec('\n');
                    859:        writes("                   expected Acc = ");
                    860:        write32h( sgl_expected );
                    861:        writec('\n');
                    862: }
                    863: 
                    864: 
                    865: 
                    866: 
                    867: 
                    868: /******************************************************************************
                    869: *
                    870: *                      HALT ON ERROR ROUTINE
                    871: *
                    872: *      halt with the necessary information saved in the registers
                    873: *
                    874: ******************************************************************************/
                    875: pipe7_er_hlt( subtest )
                    876: int subtest;
                    877: {
                    878:        asm("movl _test_no,r0");                /* r0 = test number        */
                    879:        asm("movl _subtest,r1");                /* r1 = subtest number     */
                    880:        asm("movl $1,r2");                      /* r2 = error code         */
                    881:        asm("movl _cycle,r3");                  /* r3 = cycle count        */
                    882:        asm("movl _sgl_value_1,r4");            /* r4 = sgl operand        */
                    883:        asm("movl _sgl_st_acc,r5");             /* r5 = sgl stored         */
                    884:        asm("movl _sgl_expected,r6");           /* r6 = sgl expected       */
                    885:        asm("movl _index,r7");                  /* r7 = data index         */
                    886:        asm("movl _sgl_value_2,r8");            /* r8 = floating zero      */
                    887:        if( subtest == 9 ) {
                    888:                asm("movl _sgl_value_3,r9");    /* r9 = final SP value     */
                    889:                asm("movl _sgl_value_2,r10");   /* r10 = expected SP value */
                    890:        } else
                    891:        if( subtest == 10 ) {
                    892:                asm("movl _sgl_value_3,r9");    /* r9 = final FP value     */
                    893:                asm("movl _sgl_value_2,r10");   /* r10 = expected FP value */
                    894:        };
                    895:        asm(".globl _pipe7_1_hlt");
                    896:        asm("_pipe7_1_hlt:");                   /* PC after the halt       */
                    897:        asm("halt");                            /* HALT ...                */
                    898: }  /* end of halt on error */

unix.superglobalmegacorp.com

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