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

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

unix.superglobalmegacorp.com

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