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

1.1       root        1: #include "fpp_defs.h"
                      2: 
                      3: 
                      4: 
                      5: /***************************************************************************
                      6: *
                      7: *       CMPD2  -COMPARE 2 DBL OPERANDS TO EACH OTHER -IGNORE THE ACCUMULATOR
                      8: *
                      9: *****************************************************************************/
                     10: cmpd2()
                     11: {
                     12:         asm(".globl _cmpd2_t");
                     13:         asm("_cmpd2_t:");                       /* entry address            */
                     14:         if( ( cycle == 1 ) && ( prt_hdrs ) )    /* print headers on 1st pass */
                     15:            writes(" CMPD2");
                     16:         cmpd2_1();                              /* register / register data   */
                     17:         cmpd2_2();                              /* cache    / cache    data   */
                     18:         cmpd2_3();                              /* cache    / register data   */
                     19:         cmpd2_4();                              /* register / cache    data   */
                     20:         cmpd2_5();                              /* acc. corruption test       */
                     21:         cmpd2_6();                              /* register corruption test   */
                     22:         asm("jmp *return");                     /* return to the test monitor */
                     23: }
                     24:   
                     25: 
                     26: 
                     27: /****************************************************************************
                     28: *
                     29: *               SUBTEST 1 - CMPD2 test  -register / register data
                     30: *
                     31: ****************************************************************************/
                     32: cmpd2_1() 
                     33: {
                     34:      force_loop = FALSE;
                     35:      subtest = 1;
                     36:      index = 0;
                     37:      do 
                     38:      {
                     39:         dbl_value_1  = cmpd_1_data[index].one; /* get the data operands  */
                     40:         dbl_value_2  = cmpd_1_data[index].two;
                     41:         sgl_expected = cmpd_1_data[index].flag; /* get expected results */
                     42:         sgl_value_1  = dbl_value_1.m;
                     43:         sgl_value_2  = dbl_value_1.l;
                     44:         sgl_value_3  = dbl_value_2.m;
                     45:         sgl_value_4  = dbl_value_2.l;
                     46:         index2 = 0;                             /* clear Acc. data index */
                     47:         do
                     48:         {
                     49:            dbl_ld_acc = ldd_1_data[index2].ld; /* get the Accumulator data */
                     50:            asm("ldd _dbl_ld_acc");               /* load the accumulator     */
                     51:            status_index = 0;                     /* clear the status index   */
                     52:            do
                     53:            {
                     54:                sgl_dummy1 = status_array[status_index]; /* array = +, -, 0  */
                     55: /*
                     56:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                     57:  * The force loop flag is set after the first error.
                     58: */
                     59:                asm("_cmpd2_1_lp1:");
                     60:                asm("movl _sgl_value_1,r4");     /* r4 = operand #1's MSW    */
                     61:                asm("movl _sgl_value_2,r5");     /* r5 = operand #1's LSW    */
                     62:                asm("movl _sgl_value_3,r6");     /* r6 = operand #2's MSW    */
                     63:                asm("movl _sgl_value_4,r7");     /* r7 = operand #2's LSW    */
                     64:                asm("nop");
                     65:                asm("tstl _sgl_dummy1");         /* generate initial status  */
                     66:                asm("movpsl _init_psl");         /* save the initial status  */
                     67:                asm("cmpd2 r4,r6");              /* compare the operands     */
                     68:                asm("movpsl _psl_val");          /* save the final status    */
                     69:                asm("std _dbl_st_acc");         /* save the acc             */
                     70:               if( force_loop )                 /* loop?                    */
                     71:                    asm("brb _cmpd2_1_lp1");;    /* run the loop again       */
                     72:                exp_psl = init_psl;              /* get the initial PSL      */
                     73:                exp_psl &= 0xfffffff3;           /* clear ZERO, NEGATIVE     */
                     74:                if( sgl_expected == ZERO )
                     75:                    exp_psl |= PSL_Z;            /* expect the ZERO bit set  */
                     76:                if( sgl_expected == NEGATIVE )
                     77:                    exp_psl |= PSL_N;            /* expect the NEG bit set   */
                     78:                if( psl_val != exp_psl )  {      /* COMPARE the values       */
                     79:                   errcnt++;                     /* bump the error count     */
                     80:                   if ( prt_error ) {
                     81:                      writes(" \n");         /* start a new print line   */
                     82:                      writes("cycle: ");
                     83:                      writed( cycle );
                     84:                      writes("  CMPD2 test ");
                     85:                     writed( test_no );
                     86:         writes(", subtest 1 (Reg./Reg. Data) - BAD FINAL PSL\n");
                     87:                      print_cmpd2_data();
                     88:                      writes(",   index = ");
                     89:                      writed( index );
                     90:                      writec('\n');
                     91:                      writes("   final Acc = ");
                     92:                      write32h( dbl_st_acc.m );
                     93:                      writec(' ');
                     94:                      write32h( dbl_st_acc.l );
                     95:                      writes(",  operand 2 = ");
                     96:                      write32h( sgl_value_3);
                     97:                      writec(' ');
                     98:                      write32h( sgl_value_4);
                     99:                      writec('\n');
                    100:                      writes("  initial PSL = ");
                    101:                      write32h( init_psl );
                    102:                      writes(",  final PSL = ");
                    103:                      write32h( psl_val );
                    104:                      writes(",  expected PSL = ");
                    105:                      write32h( exp_psl );
                    106:                      writes(" \n");
                    107:                   }
                    108:                   if ( halt_flg )
                    109:                      cmpd2_er_halt( BAD_PSL_HLT );  /* halt on the error    */
                    110:                   if ( loop_on_err ) {
                    111:                      force_loop = TRUE;         /* set the force loop flag */
                    112:                      asm("brw _cmpd2_1_lp1");   /* and loop                */
                    113:                   };  /* end of loop-on-error    */
                    114:                }   /* end of compare error    */
                    115:             } while( ++status_index < 3 );
                    116:         index2++;
                    117:         } while( (index2 < 10) && (index2 < max_ldf_1_index) );
                    118:      } while( index++ < max_cmpd_1_index );
                    119: }  /* end of subtest 1 */
                    120:   
                    121: 
                    122: 
                    123: /****************************************************************************
                    124: *
                    125: *               SUBTEST 2 - CMPD2 test  - cache / cache data
                    126: *
                    127: ****************************************************************************/
                    128: cmpd2_2() 
                    129: {
                    130:      force_loop = FALSE;
                    131:      subtest = 2;
                    132:      index = 0;
                    133:      do 
                    134:      {
                    135:         dbl_value_1  = cmpd_1_data[index].one; /* get the data operands  */
                    136:         dbl_value_2  = cmpd_1_data[index].two;
                    137:         sgl_value_1  = dbl_value_1.m;
                    138:         sgl_value_2  = dbl_value_1.l;
                    139:         sgl_value_3  = dbl_value_2.m;
                    140:         sgl_value_4  = dbl_value_2.l;
                    141:         sgl_expected = cmpd_1_data[index].flag; /* get expected results */
                    142:         index2 = 0;                             /* clear Acc. data index */
                    143:         do
                    144:         {
                    145:            dbl_ld_acc = ldd_1_data[index2].ld; /* get the Accumulator data */
                    146:            asm("ldd _dbl_ld_acc");                /* load the accumulator    */
                    147:            status_index = 0;                     /* clear the status index */
                    148:            do
                    149:            {
                    150:                sgl_dummy1 = status_array[status_index]; /* array = +, -, 0  */
                    151: /*
                    152:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    153:  * The force loop flag is set after the first error.
                    154: */
                    155:                asm("_cmpd2_2_lp1:");
                    156:                asm("tstl _sgl_dummy1");         /* generate initial status  */
                    157:                asm("movpsl _init_psl");         /* save the initial status  */
                    158:                asm("nop");
                    159:                asm("cmpd2 _dbl_value_1,_dbl_value_2");  /* compare the data */
                    160:                asm("nop");
                    161:                asm("movpsl _psl_val");          /* save the final status    */
                    162:                asm("std _dbl_st_acc");         /* save the acc             */
                    163:               if( force_loop )                 /* loop?                    */
                    164:                    asm("brb _cmpd2_2_lp1");;    /* run the loop again       */
                    165:                exp_psl = init_psl;              /* get the initial PSL      */
                    166:                exp_psl &= 0xfffffff3;           /* clear ZERO, NEGATIVE     */
                    167:                if( sgl_expected == ZERO )
                    168:                    exp_psl |= PSL_Z;            /* expect the ZERO bit set  */
                    169:                if( sgl_expected == NEGATIVE )
                    170:                    exp_psl |= PSL_N;            /* expect the NEG bit set   */
                    171:                if( psl_val != exp_psl )  {      /* COMPARE the values       */
                    172:                   errcnt++;                     /* bump the error count     */
                    173:                   if ( prt_error ) {
                    174:                      writes(" \n");         /* start a new print line   */
                    175:                      writes("cycle: ");
                    176:                      writed( cycle );
                    177:                      writes("  CMPD2 test ");
                    178:                     writed( test_no );
                    179:         writes(", subtest 2 (Cache/Cache Data) - BAD FINAL PSL\n");
                    180:                      print_cmpd2_data();
                    181:                      writes(",   index = ");
                    182:                      writed( index );
                    183:                      writec('\n');
                    184:                      writes("   final Acc = ");
                    185:                      write32h( dbl_st_acc.m );
                    186:                      writec(' ');
                    187:                      write32h( dbl_st_acc.l );
                    188:                      writes(",  operand 2 = ");
                    189:                      write32h( sgl_value_3);
                    190:                      writec(' ');
                    191:                      write32h( sgl_value_4);
                    192:                      writec('\n');
                    193:                      writes("  initial PSL = ");
                    194:                      write32h( init_psl );
                    195:                      writes(",  final PSL = ");
                    196:                      write32h( psl_val );
                    197:                      writes(",  expected PSL = ");
                    198:                      write32h( exp_psl );
                    199:                      writes(" \n");
                    200:                   }
                    201:                   if ( halt_flg )
                    202:                      cmpd2_er_halt( BAD_PSL_HLT );  /* halt on the error   */
                    203:                   if ( loop_on_err ) 
                    204:                   {
                    205:                      force_loop = TRUE;         /* set the force loop flag */
                    206:                      asm("brw _cmpd2_2_lp1");   /* and loop                */
                    207:                   };  /* end of loop-on-error    */
                    208:                }   /* end of compare error    */
                    209:             } while( ++status_index < 3 );
                    210:         index2++;
                    211:        } while( (index2 < 10) && (index2 < max_ldf_1_index) );
                    212:      } while( index++ < max_cmpd_1_index );
                    213: }  /* end of subtest 2 */
                    214:   
                    215: 
                    216: 
                    217: /****************************************************************************
                    218: *
                    219: *               SUBTEST 3 - CMPD2 test  - cache / register data
                    220: *
                    221: ****************************************************************************/
                    222: cmpd2_3() 
                    223: {
                    224:      force_loop = FALSE;
                    225:      subtest = 3;
                    226:      index = 0;
                    227:      do 
                    228:      {
                    229:         dbl_value_1  = cmpd_1_data[index].one; /* get the data operands  */
                    230:         dbl_value_2  = cmpd_1_data[index].two;
                    231:         sgl_value_1  = dbl_value_1.m;
                    232:         sgl_value_2  = dbl_value_1.l;
                    233:         sgl_value_3  = dbl_value_2.m;
                    234:         sgl_value_4  = dbl_value_2.l;
                    235:         sgl_expected = cmpd_1_data[index].flag; /* get expected results */
                    236:         index2 = 0;                             /* clear Acc. data index */
                    237:         do
                    238:         {
                    239:            dbl_ld_acc = ldd_1_data[index2].ld; /* get the Accumulator data */
                    240:            asm("ldd _dbl_ld_acc");              /* load the accumulator     */
                    241:            status_index = 0;                   /* clear the status index   */
                    242:            do
                    243:            {
                    244:                sgl_dummy1 = status_array[status_index]; /* array = +, -, 0  */
                    245: /*
                    246:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    247:  * The force loop flag is set after the first error.
                    248: */
                    249:                asm("_cmpd2_3_lp1:");
                    250:                asm("movl _sgl_value_3,r4");     /* move operand #2's MSW,r4 */
                    251:                asm("movl _sgl_value_4,r5");     /* move operand #2's LSW,r5 */
                    252:                asm("tstl _sgl_dummy1");         /* generate initial status  */
                    253:                asm("movpsl _init_psl");         /* save the initial status  */
                    254:                asm("nop");
                    255:                asm("cmpd2 _dbl_value_1,r4");    /* compare the data         */
                    256:                asm("nop");
                    257:                asm("movpsl _psl_val");          /* save the final status    */
                    258:                asm("std _sgl_st_acc");         /* save the acc             */
                    259:               if( force_loop )                 /* loop?                    */
                    260:                    asm("brb _cmpd2_3_lp1");;    /* run the loop again       */
                    261:                exp_psl = init_psl;              /* get the initial PSL      */
                    262:                exp_psl &= 0xfffffff3;           /* clear ZERO, NEGATIVE     */
                    263:                if( sgl_expected == ZERO )
                    264:                    exp_psl |= PSL_Z;            /* expect the ZERO bit set  */
                    265:                if( sgl_expected == NEGATIVE )
                    266:                    exp_psl |= PSL_N;            /* expect the NEG bit set   */
                    267:                if( psl_val != exp_psl )  {      /* COMPARE the values       */
                    268:                   errcnt++;                     /* bump the error count     */
                    269:                   if ( prt_error ) {
                    270:                      writes(" \n");         /* start a new print line   */
                    271:                      writes("cycle: ");
                    272:                      writed( cycle );
                    273:                      writes("  CMPD2 test ");
                    274:                     writed( test_no );
                    275:         writes(", subtest 3 (Cache/Reg. Data) - BAD FINAL PSL\n");
                    276:                      print_cmpd2_data();
                    277:                      writes(",   index = ");
                    278:                      writed( index );
                    279:                      writec('\n');
                    280:                      writes("   final Acc = ");
                    281:                      write32h( dbl_st_acc.m );
                    282:                      writec(' ');
                    283:                      write32h( dbl_st_acc.l );
                    284:                      writes(",  operand 2 = ");
                    285:                      write32h( sgl_value_3);
                    286:                      writec(' ');
                    287:                      write32h( sgl_value_4);
                    288:                      writec('\n');
                    289:                      writes("  initial PSL = ");
                    290:                      write32h( init_psl );
                    291:                      writes(",  final PSL = ");
                    292:                      write32h( psl_val );
                    293:                      writes(",  expected PSL = ");
                    294:                      write32h( exp_psl );
                    295:                      writes(" \n");
                    296:                   }
                    297:                   if ( halt_flg )
                    298:                      cmpd2_er_halt( BAD_PSL_HLT ); /* halt on the error    */
                    299:                   if ( loop_on_err ) 
                    300:                   {
                    301:                      force_loop = TRUE;         /* set the force loop flag */
                    302:                      asm("brw _cmpd2_3_lp1");   /* and loop                */
                    303:                   };  /* end of loop-on-error    */
                    304:                }   /* end of compare error    */
                    305:             } while( ++status_index < 3 );
                    306:         index2++;
                    307:        } while( (index2 < 10) && (index2 < max_ldf_1_index) );
                    308:      } while( index++ < max_cmpd_1_index );
                    309: }  /* end of subtest 3 */
                    310:   
                    311: 
                    312: 
                    313: /****************************************************************************
                    314: *
                    315: *               SUBTEST 4 - CMPD2 test  - register / cache data
                    316: *
                    317: ****************************************************************************/
                    318: cmpd2_4() 
                    319: {
                    320:      force_loop = FALSE;
                    321:      subtest = 4;
                    322:      index = 0;
                    323:      do 
                    324:      {
                    325:         dbl_value_1  = cmpd_1_data[index].one; /* get the data operands  */
                    326:         dbl_value_2  = cmpd_1_data[index].two;
                    327:         sgl_value_1  = dbl_value_1.m;
                    328:         sgl_value_2  = dbl_value_1.l;
                    329:         sgl_value_3  = dbl_value_2.m;
                    330:         sgl_value_4  = dbl_value_2.l;
                    331:         sgl_expected = cmpd_1_data[index].flag; /* get expected results */
                    332:         index2 = 0;                             /* clear Acc. data index */
                    333:         do
                    334:         {
                    335:            dbl_ld_acc = ldd_1_data[index2].ld; /* get the Accumulator data */
                    336:            asm("ldd _dbl_ld_acc");                /* load the accumulator     */
                    337:            status_index = 0;                     /* clear the status index */
                    338:            do
                    339:            {
                    340:                sgl_dummy1 = status_array[status_index]; /* array = +, -, 0  */
                    341: /*
                    342:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    343:  * The force loop flag is set after the first error.
                    344: */
                    345:                asm("_cmpd2_4_lp1:");
                    346:                asm("movl _sgl_value_1,r2");     /* move operand #1,s MSW,r2 */
                    347:                asm("movl _sgl_value_2,r3");     /* move operand #1's LSW,r3 */
                    348:                asm("tstl _sgl_dummy1");         /* generate initial status  */
                    349:                asm("movpsl _init_psl");         /* save the initial status  */
                    350:                asm("nop");
                    351:                asm("cmpd2 r2,_dbl_value_2");   /* compare the data         */
                    352:                asm("nop");
                    353:                asm("movpsl _psl_val");          /* save the final status    */
                    354:                asm("std _dbl_st_acc");         /* save the acc             */
                    355:               if( force_loop )                 /* loop?                    */
                    356:                    asm("brb _cmpd2_4_lp1");;    /* run the loop again       */
                    357:                exp_psl = init_psl;              /* get the initial PSL      */
                    358:                exp_psl &= 0xfffffff3;           /* clear ZERO, NEGATIVE     */
                    359:                if( sgl_expected == ZERO )
                    360:                    exp_psl |= PSL_Z;            /* expect the ZERO bit set  */
                    361:                if( sgl_expected == NEGATIVE )
                    362:                    exp_psl |= PSL_N;            /* expect the NEG bit set   */
                    363:                if( psl_val != exp_psl ) {       /* COMPARE the values       */
                    364:                   errcnt++;                     /* bump the error count     */
                    365:                   if ( prt_error ) {
                    366:                      writes(" \n");         /* start a new print line   */
                    367:                      writes("cycle: ");
                    368:                      writed( cycle );
                    369:                      writes("  CMPD2 test ");
                    370:                     writed( test_no );
                    371:         writes(", subtest 4 (Reg./Cache Data) - BAD FINAL PSL\n");
                    372:                      print_cmpd2_data();
                    373:                      writes(",   index = ");
                    374:                      writed( index );
                    375:                      writec('\n');
                    376:                      writes("   final Acc = ");
                    377:                      write32h( dbl_st_acc.m );
                    378:                      writec(' ');
                    379:                      write32h( dbl_st_acc.l );
                    380:                      writes(",  operand 2 = ");
                    381:                      write32h( sgl_value_3);
                    382:                      writec(' ');
                    383:                      write32h( sgl_value_4);
                    384:                      writec('\n');
                    385:                      writes("  initial PSL = ");
                    386:                      write32h( init_psl );
                    387:                      writes(",  final PSL = ");
                    388:                      write32h( psl_val );
                    389:                      writes(",  expected PSL = ");
                    390:                      write32h( exp_psl );
                    391:                      writes(" \n");
                    392:                   }
                    393:                   if ( halt_flg )
                    394:                      cmpd2_er_halt( BAD_PSL_HLT ); /* halt on the error    */
                    395:                   if ( loop_on_err ) 
                    396:                   {
                    397:                      force_loop = TRUE;         /* set the force loop flag */
                    398:                      asm("jmp _cmpd2_4_lp1");   /* and loop                */
                    399:                   }  /* end of loop-on-error    */
                    400:                }  /* end of compare error    */
                    401:           } while( ++status_index < 3 ); /* end of status loop */
                    402:         index2++;
                    403:        } while( (index2 < 10) && (index2 < max_ldf_1_index) );
                    404:      } while( index++ < max_cmpd_1_index );
                    405: }  /* end of subtest 4 */
                    406:   
                    407: 
                    408: 
                    409: /************************************************************************
                    410: *
                    411: *       SUBTEST 5 - Check for register corruption
                    412: *
                    413: ************************************************************************/
                    414: cmpd2_5() 
                    415: {
                    416:         force_loop = FALSE;                     /* clear force_loop flg */
                    417:         subtest = 5;
                    418:         fill_reg_buf( load_regs );              /* get pattern for regs */
                    419:         index = 0;
                    420:         do 
                    421:         {
                    422:              dbl_value_1  = cmpd_1_data[index].one;   /* data to load    */
                    423:              dbl_value_2  = cmpd_1_data[index].two;   /* data to compare */
                    424:              dbl_ld_acc.m = 0x40800000;               /* get acc data    */
                    425:              dbl_ld_acc.l = 0x10101010;               /* get acc data    */
                    426:              sgl_value_1  = dbl_value_1.m;
                    427:              sgl_value_2  = dbl_value_1.l;
                    428:              sgl_value_3  = dbl_value_2.m;
                    429:              sgl_value_4  = dbl_value_2.l;
                    430:              asm("ldd _dbl_ld_acc");                   /* load the acc    */
                    431: /*
                    432:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    433:  * The force loop flag is set after the first error.
                    434: */
                    435:              asm("_cmpd2_5_lp1:");
                    436:              asm("loadr $0x1fff,_load_regs");   /* load regs 0 - 12       */
                    437:              asm("nop");
                    438:              asm("cmpd2 _dbl_value_1,_dbl_value_2"); /* compare the data  */
                    439:              asm("nop");
                    440:              asm("storer $0x1fff,_store_regs"); /* store regs 0 - 12 */
                    441:              asm("std _dbl_st_acc");           /* save the acc             */
                    442:             if( force_loop )                   /* loop?                    */
                    443:                    asm("brb _cmpd2_5_lp1");;    /* run the loop again       */
                    444: /*
                    445:  * Now compare the stored register values to those that were loaded
                    446: */
                    447:              index2 = 0;
                    448:            while( (load_regs[index2] == store_regs[index2]) && (index2 < 13) )
                    449:                   index2++;                     /* check reg values */
                    450:              if( index2 < 13 ) {                /* error if index2 < 13 */
                    451:                   errcnt++;                     /* bump the error count */
                    452:                   if ( prt_error ) {
                    453:                        writes(" \n");      /* start a new print line   */
                    454:                        writes("cycle: ");
                    455:                        writed( cycle );
                    456:                        writes(", CMPD2 test ");
                    457:                       writed( test_no );
                    458:        writes(", subtest 5 - A REGISTER WAS MODIFIED\n");
                    459:                        print_cmpd2_data();
                    460:                        writec('\n');
                    461:                        writes("   final Acc = ");
                    462:                        write32h( dbl_st_acc.m );
                    463:                        writec(' ');
                    464:                        write32h( dbl_st_acc.l );
                    465:                        writes(",  operand 2 = ");
                    466:                        write32h( sgl_value_3);
                    467:                        writec(' ');
                    468:                        write32h( sgl_value_4);
                    469:                        writec('\n');
                    470:                        writes("register ");
                    471:                        writed( index2 );
                    472:                        writes(" = ");
                    473:                        write32h( store_regs[ index2 ] );
                    474:                        writes(",  should be = ");
                    475:                        write32h( load_regs[ index2 ] );
                    476:                        writes("\n");
                    477:                   }
                    478:                   if ( halt_flg )
                    479:                        cmpd2_er_halt( BAD_REG_HLT ); /* halt on the error  */
                    480:                   if ( loop_on_err ) 
                    481:                   {
                    482:                      force_loop = TRUE;         /* set the force loop flag */
                    483:                      asm("jmp _cmpd2_5_lp1");   /* and loop                */
                    484:                   };   /* end of loop-on-error    */
                    485:              }    /* end of compare error    */
                    486:         } while( index++ < max_cmpd_1_index );
                    487: }  /* end of subtest 5 */
                    488:   
                    489: 
                    490: 
                    491: /****************************************************************************
                    492: *
                    493: *               SUBTEST 6 - CMPD2 test  Accumulator stability test
                    494: *
                    495: ****************************************************************************/
                    496: cmpd2_6() 
                    497: {
                    498:      force_loop = FALSE;
                    499:      subtest = 6;
                    500:      index = 0;
                    501:      do 
                    502:      {
                    503:         dbl_value_1  = cmpd_1_data[index].one; /* get the data operands  */
                    504:         dbl_value_2  = cmpd_1_data[index].two;
                    505:         sgl_value_1  = dbl_value_1.m;
                    506:         sgl_value_2  = dbl_value_1.l;
                    507:         sgl_value_3  = dbl_value_2.m;
                    508:         sgl_value_4  = dbl_value_2.l;
                    509:         index2 = 0;                             /* clear Acc. data index */
                    510:         do
                    511:         {
                    512:            dbl_ld_acc   = ldd_1_data[index2].ld; /* get the Accumulator data */
                    513:            if( !(dbl_ld_acc.m & 0x7f800000 ) ) {
                    514:                   dbl_expected.m = 0;                /* expect a '0' stored */
                    515:                   dbl_expected.l = 0;
                    516:            } else
                    517:                  dbl_expected = dbl_ld_acc;
                    518:           asm("ldd _dbl_ld_acc");                 /* load the acc    */
                    519: /*
                    520:  * If LOOP ON ERROR is set, this is the loop for this subtest.
                    521:  * The force loop flag is set after the first error.
                    522: */
                    523:                asm("_cmpd2_6_lp1:");
                    524:                asm("nop");
                    525:                asm("cmpd2 _dbl_value_1,_dbl_value_2");/* compare the operands */
                    526:                asm("nop");
                    527:                asm("std _dbl_st_acc");          /* store the accumulator    */
                    528:                if( force_loop )                 /* loop?                    */
                    529:                    asm("brb _cmpd2_6_lp1");;    /* run the loop again       */
                    530:                if( (dbl_st_acc.m != dbl_expected.m) || /* compare the final */
                    531:                    (dbl_st_acc.l != dbl_expected.l) ) {  /*    results      */
                    532:                   errcnt++;                     /* bump the error count     */
                    533:                   if ( prt_error ) {
                    534:                      writes(" \n");         /* start a new print line   */
                    535:                      writes("cycle: ");
                    536:                      writed( cycle );
                    537:                      writes("  CMPD2 test ");
                    538:                     writed( test_no );
                    539:                     writes(", subtest 6 - BAD FINAL ACC\n");
                    540:                      print_cmpd2_data();
                    541:                      writes(",   index = ");
                    542:                      writed( index );
                    543:                      writec('\n');
                    544:                      writes("   final Acc = ");
                    545:                      write32h( dbl_st_acc.m );
                    546:                      writec(' ');
                    547:                      write32h( dbl_st_acc.l );
                    548:                      writes(",  operand 2 = ");
                    549:                      write32h( sgl_value_3);
                    550:                      writec(' ');
                    551:                      write32h( sgl_value_4);
                    552:                      writec('\n');
                    553:                      writes("expected Acc = ");
                    554:                      write32h( dbl_expected.m );
                    555:                      writec(' ');
                    556:                      write32h( dbl_expected.l );
                    557:                      writec('\n');
                    558:                   }
                    559:                   if ( halt_flg )                   /* halt on error?      */
                    560:                      cmpd2_er_halt( BAD_ACC_HLT );
                    561:                   if ( loop_on_err ) 
                    562:                   {
                    563:                      force_loop = TRUE;         /* set the force loop flag */
                    564:                      asm("jmp _cmpd2_6_lp1");   /* and loop                */
                    565:                   };   /* end of loop-on-error    */
                    566:                }   /* end of compare error    */
                    567:         index2++;
                    568:         } while( (index2 < 10) && (index2 < max_ldf_1_index) );
                    569:      } while( index++ < max_cmpd_1_index );
                    570: }  /* end of subtest 6 */
                    571:   
                    572: 
                    573: 
                    574: /**************************************************************************
                    575: *
                    576: *       PRINT THE DATA AND STORE RESULTS
                    577: *
                    578: * initial Acc = xxxxxxxx xxxxxxxx,  operand 1 = xxxxxxxx xxxxxxxx
                    579: **************************************************************************/
                    580: print_cmpd2_data()
                    581: {
                    582:         writes(" initial Acc = ");
                    583:         write32h( dbl_ld_acc.m );
                    584:         writec(' ');
                    585:         write32h( dbl_ld_acc.l );
                    586:         writes(",  operand 1 = ");
                    587:         write32h( sgl_value_1 );
                    588:         writec(' ');
                    589:         write32h( sgl_value_2 );
                    590: }
                    591:   
                    592: 
                    593: 
                    594: /**************************************************************************
                    595: *
                    596: *               HALT ON ERROR ROUTINE 
                    597: *
                    598: **************************************************************************/
                    599: cmpd2_er_halt( halt_code )
                    600: int halt_code;
                    601: {
                    602:         sgl_value_1 = dbl_value_1.m;
                    603:         sgl_value_2 = dbl_value_1.l;
                    604:         sgl_value_3 = dbl_value_2.m;
                    605:         sgl_value_4 = dbl_value_2.l;
                    606:         sgl_value_5 = dbl_ld_acc.m;
                    607:         sgl_value_6 = dbl_ld_acc.l;
                    608:         sgl_value_7 = dbl_st_acc.m;
                    609:         sgl_value_8 = dbl_st_acc.l;
                    610:         sgl_dummy1 = halt_code;                 /* get the error type    */
                    611:         asm("movl _test_no,r0");                /* r0  = test number     */
                    612:         asm("movl _subtest,r1");                /* r1  = subtest number  */
                    613:         asm("movl _sgl_dummy1,r2");             /* r2  = error code      */
                    614:         asm("movl _cycle,r3");                  /* r3  = cycle count     */
                    615:         asm("movl _sgl_value_5,r4");            /* r4  = MS acc loaded   */
                    616:         asm("movl _sgl_value_6,r5");            /* r5  = LS acc loaded   */
                    617:         asm("movl _sgl_value_1,r6");            /* r6  = MS operand 1    */
                    618:         asm("movl _sgl_value_2,r7");            /* r7  = MS operand 1    */
                    619:         asm("movl _sgl_value_3,r8");            /* r8  = MS operand 2    */
                    620:         asm("movl _sgl_value_4,r9");            /* r9  = MS operand 2    */
                    621:         asm("movl _psl_val,r10");               /* r10 = actual PSL      */
                    622:         if( halt_code == BAD_ACC_HLT ) {
                    623:              sgl_value_1 = dbl_expected.m;
                    624:              sgl_value_2 = dbl_expected.l;
                    625:              asm("movl _sgl_value_7,r11");      /* r11 = MS stored       */
                    626:              asm("movl _sgl_value_8,r12");      /* r12 = LS stored       */
                    627:              asm("movl _sgl_value_1,r13");      /* r13 = MS expected     */
                    628:              asm("movl _sgl_value_2,r14");      /* r14 = LS expected     */
                    629:         } else 
                    630:           if( halt_code == BAD_REG_HLT ) {
                    631:              sgl_dummy1 = load_regs[index2];
                    632:              sgl_dummy2 = store_regs[index2];
                    633:              asm("movl _index2,r11");           /* r11 = bad register #  */
                    634:              asm("movl _sgl_dummy2,r12");       /* r12 = actual value    */
                    635:              asm("movl _sgl_dummy1,r13");       /* r13 = expected value  */
                    636:         } else
                    637:           if( halt_code == BAD_PSL_HLT ) {
                    638:              asm("movl _exp_psl,r11");          /* r11 = expected PSL    */
                    639:              asm("movl _index,r12");            /* r12 = data index      */
                    640:         };
                    641:         asm("halt");                            /* HALT ...              */
                    642: }  

unix.superglobalmegacorp.com

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