Annotation of cci/d/macro4/mull2.c, revision 1.1

1.1     ! root        1: #include "fpp_defs.h"
        !             2: 
        !             3: 
        !             4: /***************************************************************************
        !             5: *
        !             6: *       MULL2 -MULTIPLY INTEGER 2 INSTRUCTION TEST
        !             7: *
        !             8: *****************************************************************************/
        !             9: mull2()
        !            10: {
        !            11:         asm(".globl _mull2_t");
        !            12:         asm("_mull2_t:");                       /* entry address            */
        !            13:         if( (cycle == 1) && (prt_hdrs) )        /* print headers on 1st cycle */
        !            14:         {
        !            15:            writes(" MULL2");
        !            16:         }
        !            17:         mull2_1();                              /* register data / SGL acc. */
        !            18:         mull2_2();                              /* memory data   / DBL acc. */
        !            19:         mull2_3();                              /* register corruption test */
        !            20:         mull2_4();                              /* PSL corruption test      */
        !            21:         mull2_5();                              /* pipelined entry test     */
        !            22:         mull2_6();                              /* pipelined exit test      */
        !            23:         asm("jmp *return");                     /* return to the test monitor */
        !            24: }
        !            25:   
        !            26: 
        !            27: 
        !            28: /************************************************************************
        !            29: *
        !            30: *        SUBTEST 1 - register addressing / single precsion accumulator
        !            31: *
        !            32: ************************************************************************/
        !            33: mull2_1() 
        !            34: {
        !            35:         force_loop = FALSE;
        !            36:         subtest = 1;
        !            37:         for( index = 0; index < max_mull_1_index; index++ ) {
        !            38:            sgl_value_1  = mull_1_data[index].op_1; /* get operand 1        */
        !            39:            sgl_value_2  = mull_1_data[index].op_2; /* get operand 2        */
        !            40:           sgl_value_4  = mull_1_data[index].exp;  /* get expected results */
        !            41:            sgl_ld_acc   = 0x12345678;             /* set acc data pattern */
        !            42:           sgl_expected = sgl_ld_acc;              /* final Acc expected   */
        !            43: /*
        !            44:  * If LOOP ON ERROR is set, this is the loop for this subtest.
        !            45: */
        !            46:            asm("_mull2_1_lp1:");
        !            47:            asm("movl _sgl_value_1,r3");         /* move the 1st data to r3 */
        !            48:            asm("movl _sgl_value_2,r4");         /* move the 2nd data to r4 */
        !            49:            asm("movl _sgl_ld_acc,r5");         /* move the acc data to r5 */
        !            50:            asm("ldf r5");                      /* load the acc            */
        !            51:           asm("mull2 r3,r4");                  /* do the multiply         */
        !            52:            asm("nop");
        !            53:            asm("stf _sgl_st_acc");             /* save the acc            */
        !            54:            if( force_loop )
        !            55:                 asm("brb _mull2_1_lp1");;
        !            56:            asm("movl r4,_sgl_value_3");
        !            57:           if( sgl_expected != sgl_st_acc )  {   /* COMPARE the values      */
        !            58:               errcnt++;                         /* bump the error count    */
        !            59:               if ( prt_error ) {
        !            60:                   print_mull2_error("(Reg. Data) -THE ACC WAS MODIFIED");
        !            61:                  writes("initial Acc = ");
        !            62:                   write32h( sgl_ld_acc );
        !            63:                   writes(",     final Acc = ");
        !            64:                   write32h( sgl_st_acc );
        !            65:                  writes("\n                         expected Acc = ");
        !            66:                   write32h( sgl_expected );
        !            67:                   writec('\n');
        !            68:               }
        !            69:              if ( halt_flg )                   /* halt on error?          */
        !            70:                   mull2_halt( 4 );
        !            71:               if ( loop_on_err ) {
        !            72:                   force_loop = TRUE;            /* set the force loop flag */
        !            73:                   asm("jmp _mull2_1_lp1");      /* and loop                */
        !            74:               }  /* end of loop-on-error */
        !            75:            } /* end of acc corr error */
        !            76:           if( sgl_value_4 != sgl_value_3 )    /* COMPARE the values      */
        !            77:            {
        !            78:               errcnt++;                         /* bump the error count    */
        !            79:               if ( prt_error ) {
        !            80:                   print_mull2_error("(Reg. Data) -BAD MULTIPLY RESULT");
        !            81:               }
        !            82:              if ( halt_flg )                   /* halt on error?          */
        !            83:                   mull2_halt( 1 );
        !            84:               if ( loop_on_err ) {
        !            85:                   force_loop = TRUE;            /* set the force loop flag */
        !            86:                   asm("jmp _mull2_1_lp1");      /* and loop                */
        !            87:               }  /* end of loop-on-error */
        !            88:            } /* end of multiply error */
        !            89:         }
        !            90: }  /* end of subtest 1 */
        !            91:   
        !            92: 
        !            93: 
        !            94: /************************************************************************
        !            95: *
        !            96: *        SUBTEST 2 - cache addressing / double precsion accumulator
        !            97: *
        !            98: ************************************************************************/
        !            99: mull2_2() 
        !           100: {
        !           101:         force_loop = FALSE;
        !           102:         subtest = 2;
        !           103:         for( index = 0; index < max_mull_1_index; index++ ) {
        !           104:            sgl_value_1  = mull_1_data[index].op_1; /* get operand 1        */
        !           105:            sgl_value_2  = mull_1_data[index].op_2; /* get operand 2        */
        !           106:           sgl_value_4  = mull_1_data[index].exp;  /* get expected results */
        !           107:            dbl_ld_acc.m = 0x12345678;             /* set acc data pattern */
        !           108:            dbl_ld_acc.l = 0x9abcdef0;
        !           109:           dbl_expected.m = dbl_ld_acc.m;          /* final Acc expected   */
        !           110:           dbl_expected.l = dbl_ld_acc.l;
        !           111: /*
        !           112:  * If LOOP ON ERROR is set, this is the loop for this subtest.
        !           113: */
        !           114:            asm("_mull2_2_lp1:");
        !           115:           sgl_value_3 = sgl_value_2;           /* set initial op 2 data   */
        !           116:            asm("ldd _dbl_ld_acc");             /* load the acc            */
        !           117:           asm("mull2 _sgl_value_1,_sgl_value_3"); /* multiply the integers */
        !           118:            asm("nop");
        !           119:            asm("std _dbl_st_acc");             /* save the acc            */
        !           120:            if( force_loop )
        !           121:                 asm("brb _mull2_2_lp1");;
        !           122:           if( (dbl_expected.m != dbl_st_acc.m) ||    /* COMPARE the Acc */
        !           123:               (dbl_expected.l != dbl_st_acc.l) )  { 
        !           124:               errcnt++;                         /* bump the error count    */
        !           125:               if ( prt_error ) {
        !           126:                   print_mull2_error("(Memory data) -THE ACC WAS MODIFIED");
        !           127:                  writes("initial Acc = ");
        !           128:                   write32h( dbl_ld_acc.m );
        !           129:                  writec(' ');
        !           130:                   write32h( dbl_ld_acc.l );
        !           131:                   writes(",     final Acc = ");
        !           132:                   write32h( dbl_st_acc.m );
        !           133:                  writec(' ');
        !           134:                   write32h( dbl_st_acc.l );
        !           135:                  writes("\n                                  expected Acc = ");
        !           136:                   write32h( dbl_expected.m );
        !           137:                  writec(' ');
        !           138:                   write32h( dbl_expected.l );
        !           139:                   writec('\n');
        !           140:               }
        !           141:              if ( halt_flg )                   /* halt on error?          */
        !           142:                   mull2_halt( 4 );
        !           143:               if ( loop_on_err ) {
        !           144:                   force_loop = TRUE;            /* set the force loop flag */
        !           145:                   asm("jmp _mull2_2_lp1");      /* and loop                */
        !           146:               }  /* end of loop-on-error */
        !           147:            } /* end of acc corr error */
        !           148:           if( sgl_value_4 != sgl_value_3 )    /* COMPARE the values      */
        !           149:            {
        !           150:               errcnt++;                         /* bump the error count    */
        !           151:               if ( prt_error ) {
        !           152:                   print_mull2_error("(Memory data) -BAD MULTIPLY RESULT");
        !           153:               }
        !           154:              if ( halt_flg )                   /* halt on error?          */
        !           155:                   mull2_halt( 1 );
        !           156:               if ( loop_on_err ) {
        !           157:                   force_loop = TRUE;            /* set the force loop flag */
        !           158:                   asm("jmp _mull2_2_lp1");      /* and loop                */
        !           159:               }  /* end of loop-on-error */
        !           160:            } /* end of multiply error */
        !           161:         }
        !           162: }  /* end of subtest 2 */
        !           163:   
        !           164: 
        !           165: 
        !           166: /************************************************************************
        !           167: *
        !           168: *               SUBTEST 3 - register corruption test
        !           169: *
        !           170: ************************************************************************/
        !           171: mull2_3() 
        !           172: {
        !           173:         force_loop = FALSE;
        !           174:         subtest = 3;
        !           175:         fill_reg_buf( load_regs );             /* get pattern for registers */
        !           176:        for( index = 0; index < max_mull_1_index; index++ ) {
        !           177:            sgl_value_1  = mull_1_data[index].op_1; /* get operand 1        */
        !           178:            sgl_value_2  = mull_1_data[index].op_2; /* get operand 2        */
        !           179:            sgl_value_4  = mull_1_data[index].exp;  /* get expected results */
        !           180: /*
        !           181:  * If LOOP ON ERROR is set, this is the loop for this subtest.
        !           182: */
        !           183:            asm("_mull2_3_lp1:");
        !           184:           sgl_value_3 = sgl_value_2;           /* set operand 2        */
        !           185:            asm("loadr $0x1fff,_load_regs");    /* load regs 0 - 12     */
        !           186:           asm("mull2 _sgl_value_1,_sgl_value_3");/* do the multiply    */
        !           187:            asm("nop");
        !           188:            asm("storer $0x1fff,_store_regs");  /* store regs 0 - 12    */
        !           189:           if( force_loop )
        !           190:                 asm("brb _mull2_3_lp1");
        !           191: /*
        !           192:  * Now check the result
        !           193: */
        !           194:         index2 = 0;
        !           195:         while( (load_regs[index2] == store_regs[index2]) && (index2 < 13) )
        !           196:              index2++;                          /* check reg values        */
        !           197:         if( index2 < 13 ) {                     /* error if index2 < 13    */
        !           198:               errcnt++;                         /* bump the error count    */
        !           199:              if ( prt_error ) {
        !           200:                   print_mull2_error(" -A REGISTER WAS MODIFIED");
        !           201:                   writes("register ");
        !           202:                  writeh( index2 );
        !           203:                  writes(" = ");
        !           204:                  write32h( store_regs[index2] );
        !           205:                  writes(",  should be = ");
        !           206:                   write32h( load_regs[index2] );
        !           207:                   writec('\n');
        !           208:               }
        !           209:              if ( halt_flg )                   /* halt on error?          */
        !           210:                   mull2_halt( 2 );
        !           211:               if ( loop_on_err ) {
        !           212:                   force_loop = TRUE;            /* set the force loop flag */
        !           213:                   asm("jmp _mull2_3_lp1");      /* and loop                */
        !           214:               };  /* end of loop-on-error */
        !           215:            } /* end of multiply error */
        !           216:         }
        !           217: }  /* end of subtest 3 */
        !           218:   
        !           219: 
        !           220: 
        !           221: /************************************************************************
        !           222: *
        !           223: *               SUBTEST 4 - PSL corruption test
        !           224: *
        !           225: ************************************************************************/
        !           226: mull2_4() 
        !           227: {
        !           228:         force_loop = FALSE;
        !           229:         subtest = 4;
        !           230:        status_index = 0;
        !           231:        for( index = 0; index < max_mull_1_index; index++ ) {
        !           232:            sgl_value_1  = mull_1_data[index].op_1; /* get operand 1        */
        !           233:            sgl_value_2  = mull_1_data[index].op_2; /* get operand 2        */
        !           234:            sgl_value_4  = mull_1_data[index].exp;  /* get expected results */
        !           235:            sgl_dummy1   = status_array[status_index]; /* status = +, -, 0 */
        !           236: /*
        !           237:  * If LOOP ON ERROR is set, this is the loop for this subtest.
        !           238: */
        !           239:            asm("_mull2_4_lp1:");
        !           240:           sgl_value_3 = sgl_value_2;           /* set operand 2        */
        !           241:            asm("tstl _sgl_dummy1");
        !           242:           asm("movpsl _init_psl");             /* save the initial PSL */
        !           243:           asm("mull2 _sgl_value_1,_sgl_value_3");/* do the multiply    */
        !           244:           asm("movpsl _psl_val");              /* save the final PSL   */
        !           245:           if( force_loop )
        !           246:                 asm("brb _mull2_4_lp1");
        !           247: /*
        !           248:  * Now check the result
        !           249: */
        !           250:         exp_psl = init_psl & 0xffffff3;                /* strip off the PSL status */
        !           251:        if( sgl_value_4 < 0 )                   /* check the MULL result */
        !           252:           exp_psl |= PSL_N;                    /* set the NEGATIVE bit */
        !           253:        if( !sgl_value_4 )
        !           254:           exp_psl |= PSL_Z;                    /* set the ZERO bit */
        !           255:         if( psl_val != exp_psl ) {             /* was the final PSL correct */
        !           256:               errcnt++;                         /* bump the error count    */
        !           257:              if ( prt_error ) {
        !           258:                   print_mull2_error(" -INCORRECT FINAL PSL");
        !           259:                   writes("initial PSL = ");
        !           260:                  write32h( init_psl );
        !           261:                  writes(",  final PSL = ");
        !           262:                  write32h( psl_val );
        !           263:                  writes(",  expected PSL = ");
        !           264:                  write32h( exp_psl );
        !           265:                   writec('\n');
        !           266:               }
        !           267:              if ( halt_flg )                   /* halt on error?          */
        !           268:                   mull2_halt( 3 );
        !           269:               if ( loop_on_err ) {
        !           270:                   force_loop = TRUE;            /* set the force loop flag */
        !           271:                   asm("jmp _mull2_4_lp1");      /* and loop                */
        !           272:               };  /* end of loop-on-error */
        !           273:            }; /* end of error */
        !           274:           if( ++status_index >= 3 )
        !           275:              status_index = 0;
        !           276:         }
        !           277: }  /* end of subtest 4 */
        !           278:   
        !           279: 
        !           280: 
        !           281: /************************************************************************
        !           282: *
        !           283: *        SUBTEST 5 - Pipelined Entry test
        !           284: *
        !           285: ************************************************************************/
        !           286: mull2_5() 
        !           287: {
        !           288:         force_loop = FALSE;
        !           289:         subtest = 5;
        !           290:         for( index = 0; index < max_mull_1_index; index++ ) {
        !           291:            sgl_value_1  = mull_1_data[index].op_1; /* get operand 1        */
        !           292:            sgl_value_2  = mull_1_data[index].op_2; /* get operand 2        */
        !           293:           sgl_value_4  = mull_1_data[index].exp;  /* get expected results */
        !           294:            sgl_ld_acc   = 0x12345678;             /* set acc data pattern */
        !           295:           sgl_expected = sgl_ld_acc;              /* final Acc expected   */
        !           296:           sgl_value_10 = 0x40800000;              /* floating "1.0"       */
        !           297: /*
        !           298:  * If LOOP ON ERROR is set, this is the loop for this subtest.
        !           299: */
        !           300:            asm("_mull2_5_lp1:");
        !           301:           sgl_value_3 = sgl_value_2;           /* set integer operand 2   */
        !           302:            asm("ldf _sgl_ld_acc");             /* load the acc            */
        !           303:           asm("mulf _sgl_value_10");           /* do a floating multiply  */
        !           304:           asm("mull2 _sgl_value_1,_sgl_value_3"); /* do the int. multiply */
        !           305:            asm("nop");
        !           306:           asm("stf _sgl_st_acc");              /* save the acc            */
        !           307:            if( force_loop )
        !           308:                 asm("brb _mull2_5_lp1");;
        !           309:           if( sgl_expected != sgl_st_acc )  {   /* COMPARE the values      */
        !           310:               errcnt++;                         /* bump the error count    */
        !           311:               if ( prt_error ) {
        !           312:                   print_mull2_error("(Piped Entry) -BAD FINAL ACC");
        !           313:                  writes("initial Acc = ");
        !           314:                   write32h( sgl_ld_acc );
        !           315:                   writes(",     final Acc = ");
        !           316:                   write32h( sgl_st_acc );
        !           317:                  writes("\nFPP operand = ");
        !           318:                  write32h( sgl_value_10 );
        !           319:                  writes(",  expected Acc = ");
        !           320:                   write32h( sgl_expected );
        !           321:                   writec('\n');
        !           322:               }
        !           323:              if ( halt_flg )                   /* halt on error?          */
        !           324:                   mull2_halt( 5 );
        !           325:               if ( loop_on_err ) {
        !           326:                   force_loop = TRUE;            /* set the force loop flag */
        !           327:                   asm("jmp _mull2_5_lp1");      /* and loop                */
        !           328:               }  /* end of loop-on-error */
        !           329:            } /* end of acc corr error */
        !           330:           if( sgl_value_4 != sgl_value_3 )    /* COMPARE the values      */
        !           331:            {
        !           332:               errcnt++;                         /* bump the error count    */
        !           333:               if ( prt_error ) {
        !           334:                   print_mull2_error("(Piped Entry) -BAD MULTIPLY RESULT");
        !           335:               }
        !           336:              if ( halt_flg )                   /* halt on error?          */
        !           337:                   mull2_halt( 1 );
        !           338:               if ( loop_on_err ) {
        !           339:                   force_loop = TRUE;            /* set the force loop flag */
        !           340:                   asm("jmp _mull2_5_lp1");      /* and loop                */
        !           341:               }  /* end of loop-on-error */
        !           342:            } /* end of multiply error */
        !           343:         }
        !           344: }  /* end of subtest 5 */
        !           345:   
        !           346: 
        !           347: 
        !           348: /************************************************************************
        !           349: *
        !           350: *        SUBTEST 6 - Pipelined Exit test
        !           351: *
        !           352: ************************************************************************/
        !           353: mull2_6() 
        !           354: {
        !           355:         force_loop = FALSE;
        !           356:         subtest = 6;
        !           357:         for( index = 0; index < max_mull_1_index; index++ ) {
        !           358:            sgl_value_1  = mull_1_data[index].op_1; /* get operand 1        */
        !           359:            sgl_value_2  = mull_1_data[index].op_2; /* get operand 2        */
        !           360:           sgl_value_4  = mull_1_data[index].exp;  /* get expected results */
        !           361:           sgl_ld_acc   = 0x40800000;              /* floating "1.0"       */
        !           362:            sgl_value_10 = 0x12345678;             /* set acc data pattern */
        !           363:           sgl_expected = sgl_value_10;            /* final Acc expected   */
        !           364: /*
        !           365:  * If LOOP ON ERROR is set, this is the loop for this subtest.
        !           366: */
        !           367:            asm("_mull2_6_lp1:");
        !           368:           sgl_value_3 = sgl_value_2;           /* set integer operand 2   */
        !           369:            asm("ldf _sgl_ld_acc");             /* load the acc            */
        !           370:           asm("mull2 _sgl_value_1,_sgl_value_3"); /* do the int. multiply */
        !           371:           asm("mulf _sgl_value_10");           /* do a floating multiply  */
        !           372:            asm("stf _sgl_st_acc");             /* save the acc            */
        !           373:            if( force_loop )
        !           374:                 asm("brb _mull2_6_lp1");;
        !           375:           if( sgl_expected != sgl_st_acc )  {   /* COMPARE the values      */
        !           376:               errcnt++;                         /* bump the error count    */
        !           377:               if ( prt_error ) {
        !           378:                   print_mull2_error("(Piped Exit) -BAD FINAL ACC");
        !           379:                  writes("initial Acc = ");
        !           380:                   write32h( sgl_ld_acc );
        !           381:                   writes(",     final Acc = ");
        !           382:                   write32h( sgl_st_acc );
        !           383:                  writes("\nFPP operand = ");
        !           384:                  write32h( sgl_value_10 );
        !           385:                  writes(",  expected Acc = ");
        !           386:                   write32h( sgl_expected );
        !           387:                   writec('\n');
        !           388:               }
        !           389:              if ( halt_flg )                   /* halt on error?          */
        !           390:                   mull2_halt( 5 );
        !           391:               if ( loop_on_err ) {
        !           392:                   force_loop = TRUE;            /* set the force loop flag */
        !           393:                   asm("jmp _mull2_6_lp1");      /* and loop                */
        !           394:               }  /* end of loop-on-error */
        !           395:            } /* end of acc corr error */
        !           396:           if( sgl_value_4 != sgl_value_3 )    /* COMPARE the values      */
        !           397:            {
        !           398:               errcnt++;                         /* bump the error count    */
        !           399:               if ( prt_error ) {
        !           400:                   print_mull2_error("(Piped Exit) -BAD MULTIPLY RESULT");
        !           401:               }
        !           402:              if ( halt_flg )                   /* halt on error?          */
        !           403:                   mull2_halt( 1 );
        !           404:               if ( loop_on_err ) {
        !           405:                   force_loop = TRUE;            /* set the force loop flag */
        !           406:                   asm("jmp _mull2_6_lp1");      /* and loop                */
        !           407:               }  /* end of loop-on-error */
        !           408:            } /* end of multiply error */
        !           409:         }
        !           410: }  /* end of subtest 6 */
        !           411:   
        !           412: 
        !           413: 
        !           414: /*****************************************************************************
        !           415: *
        !           416: *               Print an error message of the form:
        !           417: *
        !           418: *  cycle: xx  MULL2 test xx, subtest xx  <"your message here">
        !           419: *    operand 1 = xxxxxxxx,        result = xxxxxxxx,   data index = xx
        !           420: *    operand 2 = xxxxxxxx,      expected = xxxxxxxx
        !           421: *
        !           422: *****************************************************************************/
        !           423: print_mull2_error(msg)
        !           424: char *msg;                                      /* addressing mode msg */
        !           425: {
        !           426:                  writes(" \n");             /* start a new print line   */
        !           427:                  writes("cycle: ");
        !           428:                  writed( cycle );
        !           429:                  writes("  MULL2 test ");
        !           430:                  writed( test_no );
        !           431:                 writes(", subtest ");
        !           432:                 writed( subtest );
        !           433:                 writes("  ");
        !           434:                 writes( msg );
        !           435:                  writes("\n  operand 1 = ");
        !           436:                 write32h( sgl_value_1 );
        !           437:                 writes(",        result = ");
        !           438:                 write32h( sgl_value_3 );
        !           439:                 writes(",   data index = ");
        !           440:                 writed( index );
        !           441:                  writes("\n  operand 2 = ");
        !           442:                 write32h( sgl_value_2 );
        !           443:                 writes(",      expected = ");
        !           444:                 write32h( sgl_value_4 );
        !           445:                 writec('\n');
        !           446: }
        !           447:   
        !           448: 
        !           449: 
        !           450: /***************************************************************************
        !           451: *
        !           452: *               HALT ON AN ERROR
        !           453: *
        !           454: ***************************************************************************/
        !           455: mull2_halt( code )
        !           456: int code;                                      /* error code to use */
        !           457: {
        !           458:        sgl_dummy1 = code;                      /* save the error code    */
        !           459:         asm("movl _test_no,r0");               /* r0  = test number      */
        !           460:         asm("movl _subtest,r1");               /* r1  = subtest number   */
        !           461:         asm("movl _sgl_dummy1,r2");            /* r2  = error code       */
        !           462:         asm("movl _cycle,r3");                 /* r3  = cycle count      */
        !           463:         asm("movl _sgl_value_1,r4");           /* r4  = operand 1        */
        !           464:         asm("movl _sgl_value_2,r5");           /* r5  = operand 2        */
        !           465:         asm("movl _sgl_value_3,r6");           /* r6  = MULL2's result   */
        !           466:        if( code == 1 ) {
        !           467:             asm("movl _sgl_value_4,r7");       /* r7  = expected result  */
        !           468:             asm("movl _index,r8");;            /* r8  = data index       */
        !           469:        }
        !           470:         else if( code == 2 )  {  /* corrupted register */
        !           471:             sgl_dummy1 = store_regs[index2];   /* get the actual reg data */
        !           472:             sgl_dummy2 = load_regs[index2];    /* get the data expected  */
        !           473:             asm("movl _index2,r7");            /* r7  = register number  */
        !           474:             asm("movl _sgl_dummy1,r8");        /* r8  = final reg value  */
        !           475:             asm("movl _sgl_dummy2,r9");        /* r9  = expected value   */
        !           476:        }
        !           477:         else if( code == 3 ) {  /* corrupted PSL */
        !           478:              asm("movl _init_psl,r7");          /* r7  = initial PSL     */
        !           479:              asm("movl _psl_val,r8");           /* r8  = final PSL       */
        !           480:              asm("movl _exp_psl,r9");           /* r9  = expected PSL    */
        !           481:         }
        !           482:         else if( code == 4 ) {  /* corrupted Acc */
        !           483:             if( subtest == 1 ) {       /* single precision */
        !           484:                 dbl_ld_acc.m = sgl_ld_acc;
        !           485:                 dbl_ld_acc.l = 0;
        !           486:                 dbl_st_acc.m = sgl_st_acc;
        !           487:                 dbl_st_acc.l = 0;
        !           488:                 dbl_expected.m = sgl_expected;
        !           489:                 dbl_expected.l = 0;
        !           490:             };
        !           491:             asm("movl _index,r7");             /* r7  = data index       */
        !           492:             asm("movl _dbl_ld_acc,r8");        /* r8  = MS initial Acc.  */
        !           493:             asm("movl _dbl_ld_acc+4,r9");      /* r9  = LS initial Acc.  */
        !           494:             asm("movl _dbl_st_acc,r10");       /* r10 = MS final Acc.    */
        !           495:             asm("movl _dbl_st_acc+4,r11");     /* r11 = LS final Acc.    */
        !           496:             asm("movl _dbl_expected,r12");     /* r12 = MS expected Acc. */
        !           497:             asm("movl _dbl_expected+4,r13");   /* r13 = LS expected Acc. */
        !           498:        }
        !           499:         else if( code == 5 ) {  /* bad final Acc */
        !           500:             asm("movl _index,r7");             /* r7  = data index       */
        !           501:             asm("movl _sgl_ld_acc,r8");        /* r8  = initial Acc.     */
        !           502:             asm("movl _sgl_value_10,r9");      /* r9  = fpp operand      */
        !           503:             asm("movl _sgl_st_acc,r10");       /* r10 = final Acc.       */
        !           504:             asm("movl _sgl_expected,r11");     /* r11 = expected Acc.    */
        !           505:        };
        !           506:        asm("halt");                   /* HALT ...                */
        !           507: }

unix.superglobalmegacorp.com

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