Annotation of cci/d/fpevent/pipe17.c, revision 1.1.1.1

1.1       root        1: 
                      2: #include "evt_defs.h"
                      3: 
                      4: /*
                      5:  *********************************************************************
                      6:  *     FPP PIPELINED EVENTS TEST #17
                      7:  *
                      8:  *  This test will execute a large number of ADDF instructions with 
                      9:  *  clock events active. It will ensure that:
                     10:  *   1. A clock event occurrs during the ADDF sequence, and
                     11:  *   2. the result of the add sequence is correct.
                     12:  *
                     13:  *  At each clock interrupt the ADDF's should be stopped and the queue
                     14:  *  cleared. If the queue isn't cleared then we'll get too many ADDF
                     15:  *  operations run and end up with the wrong result.
                     16:  *  The ADDFs will be run with cache misses and with cache hits.
                     17:  *  There is a finite chance that the clock event will occur after we
                     18:  *  have reset the RTC_OCCURRED flag but before the ADDFs have started
                     19:  *  or that it will have occurred after the ADDFs were done but before
                     20:  *  we check the flag again. With 128 ADDFs the chance is small but to 
                     21:  *  be sure, we'll do it all twice. What the hell.
                     22:  *  This routine uses the special clock event handler found in the
                     23:  *  test initializer.
                     24:  *********************************************************************
                     25: */
                     26: pipe17()
                     27: {
                     28:        precision = SGL;
                     29:        exp_event = FALSE;                      /* don't expect fpp events */
                     30:        sgl_value_1 = 0x40800000;               /* add floating +1.0's     */
                     31:        sgl_expected = 0x44000000;              /* expect a floating +128  */
                     32:        i_cache_hit = FALSE;                    /* run with cache misses   */
                     33:        test_clock_add();                       /* test w/ positive Acc.   */
                     34:        test_clock_add();                       /* ...run the test twice   */
                     35:        i_cache_hit = TRUE;                     /* and run with cache hits */
                     36:        test_clock_add();                       /*  for 2 more times       */
                     37:        test_clock_add();
                     38:        sgl_value_1 = 0xc0800000;               /* add floating -1.0's     */
                     39:        sgl_expected = 0xc4000000;              /* expect a floating -128  */
                     40:        i_cache_hit = FALSE;                    /* run with cache misses   */
                     41:        test_clock_add();                       /* test w/ negative Acc.   */
                     42:        test_clock_add();                       /* ...run the test twice   */
                     43:        i_cache_hit = TRUE;                     /* and run with cache hits */
                     44:        test_clock_add();                       /*  for 2 more times       */
                     45:        test_clock_add();
                     46: }
                     47: 
                     48: 
                     49: 
                     50: /****************************************************************************
                     51: *
                     52: *      Verify that the results of 128 ADDFs is correct.
                     53: *
                     54: ****************************************************************************/
                     55: test_clock_add()
                     56: {
                     57:        asm(".globl test_clock_lp");            /* loop from here on errors */
                     58:        asm("test_clock_lp:");
                     59:        clock_add();                            /* do 128 addf's           */
                     60:        if( !rtc_occurred )
                     61:              who_pulled_the_plug();            /* something is wrong here */
                     62:        else {                                  /* we got a clock event!!  */
                     63:              asm("stf _sgl_st_acc");           /*  store the Accumlator   */
                     64:              if( sgl_st_acc != sgl_expected )
                     65:              {
                     66:                    errcnt++;                   /* bump the error count    */
                     67:                    if( prt_error ) 
                     68:                           print_clock_er();    /* print the error message */
                     69:                    if( halt_flg )
                     70:                           pipe17_halt( 1 );    /* halt with a code of 1   */
                     71:                    if( loop_on_err ) {
                     72:                           force_loop = TRUE;   /* loop on the error       */
                     73:                           asm("jmp test_clock_lp");
                     74:                    }
                     75:              }                                 /* end of store error      */
                     76:        }                                       /* end of clock event found */
                     77: }
                     78: 
                     79: 
                     80: 
                     81: 
                     82: 
                     83: 
                     84: /****************************************************************************
                     85: *
                     86: *                      DO 128 SINGLE PRECISION ADDs
                     87: *
                     88: *  Run a series of 128 ADDF instructions with the clock enabled. Run the 
                     89: *  series untill there was a clock event during the series or we run out 
                     90: *  of patience. -It takes a while to run out of patience!!
                     91: *  If we are running with instruction cache misses then bump the Code Cache 
                     92: *  Key each time through.
                     93: *
                     94: ****************************************************************************/
                     95: clock_add()
                     96: {
                     97:        clock_retrys = 1000000;                 /* allow 1 million retrys  */
                     98:        asm(".globl clock_add_lp");             /* loop from here till RTC */
                     99:        asm("clock_add_lp:");
                    100:        if( !i_cache_hit ) {
                    101:              if( ++Codek >= 255 ) {            /* get next key, key = max? */
                    102:                    Codek = 1;                  /*    reset the cache key   */
                    103:                    asm("mtpr $1,$23");         /*      and purge the cache */
                    104:              };
                    105:              asm("mtpr _Codek,$13");           /* Set the new cache key    */
                    106:        };
                    107:        asm("clrl r0");                         /* get a floating '0.0'    */
                    108:        asm("ldf r0");                          /* clear the accumulator   */
                    109:        asm("bispsw $0x60");                    /* enable ovfl, undfl evts */
                    110:        asm("mtpr $1,$8");                      /* lower IPL -enable clock */
                    111:        asm("nop");
                    112:        asm("movl _sgl_value_1,r6");            /* get the operand         */
                    113:        asm("clrl _rtc_occurred");              /* clear clock event flag  */
                    114: 
                    115: /*
                    116:  * Now do 128 ADDF instructions
                    117: */
                    118:        asm("addf r6");                         /*   ADDF #001    */
                    119:        asm("addf r6");                         /*   ADDF #002    */
                    120:        asm("addf r6");                         /*   ADDF #003    */
                    121:        asm("addf r6");                         /*   ADDF #004    */
                    122:        asm("addf r6");                         /*   ADDF #005    */
                    123:        asm("addf r6");                         /*   ADDF #006    */
                    124:        asm("addf r6");                         /*   ADDF #007    */
                    125:        asm("addf r6");                         /*   ADDF #008    */
                    126:        asm("addf r6");                         /*   ADDF #009    */
                    127:        asm("addf r6");                         /*   ADDF #010    */
                    128:        asm("addf r6");                         /*   ADDF #011    */
                    129:        asm("addf r6");                         /*   ADDF #012    */
                    130:        asm("addf r6");                         /*   ADDF #013    */
                    131:        asm("addf r6");                         /*   ADDF #014    */
                    132:        asm("addf r6");                         /*   ADDF #015    */
                    133:        asm("addf r6");                         /*   ADDF #016    */
                    134:        asm("addf r6");                         /*   ADDF #017    */
                    135:        asm("addf r6");                         /*   ADDF #018    */
                    136:        asm("addf r6");                         /*   ADDF #019    */
                    137:        asm("addf r6");                         /*   ADDF #020    */
                    138:        asm("addf r6");                         /*   ADDF #021    */
                    139:        asm("addf r6");                         /*   ADDF #022    */
                    140:        asm("addf r6");                         /*   ADDF #023    */
                    141:        asm("addf r6");                         /*   ADDF #024    */
                    142:        asm("addf r6");                         /*   ADDF #025    */
                    143:        asm("addf r6");                         /*   ADDF #026    */
                    144:        asm("addf r6");                         /*   ADDF #027    */
                    145:        asm("addf r6");                         /*   ADDF #028    */
                    146:        asm("addf r6");                         /*   ADDF #029    */
                    147:        asm("addf r6");                         /*   ADDF #030    */
                    148:        asm("addf r6");                         /*   ADDF #031    */
                    149:        asm("addf r6");                         /*   ADDF #032    */
                    150:        asm("addf r6");                         /*   ADDF #033    */
                    151:        asm("addf r6");                         /*   ADDF #034    */
                    152:        asm("addf r6");                         /*   ADDF #035    */
                    153:        asm("addf r6");                         /*   ADDF #036    */
                    154:        asm("addf r6");                         /*   ADDF #037    */
                    155:        asm("addf r6");                         /*   ADDF #038    */
                    156:        asm("addf r6");                         /*   ADDF #039    */
                    157:        asm("addf r6");                         /*   ADDF #040    */
                    158:        asm("addf r6");                         /*   ADDF #041    */
                    159:        asm("addf r6");                         /*   ADDF #042    */
                    160:        asm("addf r6");                         /*   ADDF #043    */
                    161:        asm("addf r6");                         /*   ADDF #044    */
                    162:        asm("addf r6");                         /*   ADDF #045    */
                    163:        asm("addf r6");                         /*   ADDF #046    */
                    164:        asm("addf r6");                         /*   ADDF #047    */
                    165:        asm("addf r6");                         /*   ADDF #048    */
                    166:        asm("addf r6");                         /*   ADDF #049    */
                    167:        asm("addf r6");                         /*   ADDF #050    */
                    168:        asm("addf r6");                         /*   ADDF #051    */
                    169:        asm("addf r6");                         /*   ADDF #052    */
                    170:        asm("addf r6");                         /*   ADDF #053    */
                    171:        asm("addf r6");                         /*   ADDF #054    */
                    172:        asm("addf r6");                         /*   ADDF #055    */
                    173:        asm("addf r6");                         /*   ADDF #056    */
                    174:        asm("addf r6");                         /*   ADDF #057    */
                    175:        asm("addf r6");                         /*   ADDF #058    */
                    176:        asm("addf r6");                         /*   ADDF #059    */
                    177:        asm("addf r6");                         /*   ADDF #060    */
                    178:        asm("addf r6");                         /*   ADDF #061    */
                    179:        asm("addf r6");                         /*   ADDF #062    */
                    180:        asm("addf r6");                         /*   ADDF #063    */
                    181:        asm("addf r6");                         /*   ADDF #064    */
                    182:        asm("addf r6");                         /*   ADDF #065    */
                    183:        asm("addf r6");                         /*   ADDF #066    */
                    184:        asm("addf r6");                         /*   ADDF #067    */
                    185:        asm("addf r6");                         /*   ADDF #068    */
                    186:        asm("addf r6");                         /*   ADDF #069    */
                    187:        asm("addf r6");                         /*   ADDF #070    */
                    188:        asm("addf r6");                         /*   ADDF #071    */
                    189:        asm("addf r6");                         /*   ADDF #072    */
                    190:        asm("addf r6");                         /*   ADDF #073    */
                    191:        asm("addf r6");                         /*   ADDF #074    */
                    192:        asm("addf r6");                         /*   ADDF #075    */
                    193:        asm("addf r6");                         /*   ADDF #076    */
                    194:        asm("addf r6");                         /*   ADDF #077    */
                    195:        asm("addf r6");                         /*   ADDF #078    */
                    196:        asm("addf r6");                         /*   ADDF #079    */
                    197:        asm("addf r6");                         /*   ADDF #080    */
                    198:        asm("addf r6");                         /*   ADDF #081    */
                    199:        asm("addf r6");                         /*   ADDF #082    */
                    200:        asm("addf r6");                         /*   ADDF #083    */
                    201:        asm("addf r6");                         /*   ADDF #084    */
                    202:        asm("addf r6");                         /*   ADDF #085    */
                    203:        asm("addf r6");                         /*   ADDF #086    */
                    204:        asm("addf r6");                         /*   ADDF #087    */
                    205:        asm("addf r6");                         /*   ADDF #088    */
                    206:        asm("addf r6");                         /*   ADDF #089    */
                    207:        asm("addf r6");                         /*   ADDF #090    */
                    208:        asm("addf r6");                         /*   ADDF #091    */
                    209:        asm("addf r6");                         /*   ADDF #092    */
                    210:        asm("addf r6");                         /*   ADDF #093    */
                    211:        asm("addf r6");                         /*   ADDF #094    */
                    212:        asm("addf r6");                         /*   ADDF #095    */
                    213:        asm("addf r6");                         /*   ADDF #096    */
                    214:        asm("addf r6");                         /*   ADDF #097    */
                    215:        asm("addf r6");                         /*   ADDF #098    */
                    216:        asm("addf r6");                         /*   ADDF #099    */
                    217:        asm("addf r6");                         /*   ADDF #100    */
                    218:        asm("addf r6");                         /*   ADDF #101    */
                    219:        asm("addf r6");                         /*   ADDF #102    */
                    220:        asm("addf r6");                         /*   ADDF #103    */
                    221:        asm("addf r6");                         /*   ADDF #104    */
                    222:        asm("addf r6");                         /*   ADDF #105    */
                    223:        asm("addf r6");                         /*   ADDF #106    */
                    224:        asm("addf r6");                         /*   ADDF #107    */
                    225:        asm("addf r6");                         /*   ADDF #108    */
                    226:        asm("addf r6");                         /*   ADDF #109    */
                    227:        asm("addf r6");                         /*   ADDF #110    */
                    228:        asm("addf r6");                         /*   ADDF #111    */
                    229:        asm("addf r6");                         /*   ADDF #112    */
                    230:        asm("addf r6");                         /*   ADDF #113    */
                    231:        asm("addf r6");                         /*   ADDF #114    */
                    232:        asm("addf r6");                         /*   ADDF #115    */
                    233:        asm("addf r6");                         /*   ADDF #116    */
                    234:        asm("addf r6");                         /*   ADDF #117    */
                    235:        asm("addf r6");                         /*   ADDF #118    */
                    236:        asm("addf r6");                         /*   ADDF #119    */
                    237:        asm("addf r6");                         /*   ADDF #120    */
                    238:        asm("addf r6");                         /*   ADDF #121    */
                    239:        asm("addf r6");                         /*   ADDF #122    */
                    240:        asm("addf r6");                         /*   ADDF #123    */
                    241:        asm("addf r6");                         /*   ADDF #124    */
                    242:        asm("addf r6");                         /*   ADDF #125    */
                    243:        asm("addf r6");                         /*   ADDF #126    */
                    244:        asm("addf r6");                         /*   ADDF #127    */
                    245:        asm("addf r6");                         /*   ADDF #128    */
                    246: /*
                    247:  * Thank god that's over with!!! now raise the IPL
                    248: */
                    249: 
                    250:        asm("mtpr $0x1f,$8");                   /* disable clock events    */
                    251:        if( ( force_loop ) ||   
                    252:             ( (clock_retrys-- ) &&             /* keep trying to get      */
                    253:               (!rtc_occurred) ) )              /*       a clock event     */
                    254:              asm("jmp clock_add_lp");;
                    255:        asm("bicpsw $0x60");                    /* disable ovfl & undfl   */
                    256: }
                    257: 
                    258: 
                    259: 
                    260: 
                    261: 
                    262: /****************************************************************************
                    263: *              Report an Bad Result Error
                    264: *
                    265: * Cycle: xx. EVT test xx. subtest xx. wrong ADDF result with Clock Events
                    266: * Testing clock event during 128 ADDF's. -instruction cache {hits / misses}
                    267: * operand = xxxxxxxx,  result = xxxxxxxx,  expected = xxxxxxxx
                    268: ****************************************************************************/
                    269: print_clock_er()
                    270: {
                    271:        if( !error ) {                  /* 1st error?               */
                    272:             writes(" \n");             /* start a new print line   */
                    273:             error = TRUE;
                    274:        }
                    275:        writes("Cycle: ");
                    276:        writed( cycle );
                    277:        writes("  EVT test ");
                    278:        writed( test_no );
                    279:        writes(". subtest ");
                    280:        writed( subtest );
                    281:        writes(".  wrong ADDF result with Clock Events\n");
                    282:        writes(
                    283:           "Testing clock event during 128 ADDF's with instruction cache ");
                    284:        if( i_cache_hit )
                    285:              writes("hits\n");
                    286:        else
                    287:              writes("misses\n");
                    288:        writes("operand = ");
                    289:        write32h( sgl_value_1 );                /* write the operand */
                    290:        writes(",  result = ");
                    291:        write32h( sgl_st_acc );
                    292:        writes(",  expected = ");
                    293:        write32h( sgl_expected );
                    294:        writec('\n');
                    295: }
                    296: 
                    297: 
                    298: 
                    299: /****************************************************************************
                    300: *              Report that no clock events were seen
                    301: *
                    302: * Cycle: xx. EVT test xx. subtest xx. no Clock Events were detected
                    303: * Testing clock event during 128 ADDF's. -instruction cache {hits / misses}
                    304: ****************************************************************************/
                    305: who_pulled_the_plug()
                    306: {
                    307:        if( prt_error )
                    308:        {
                    309:             if( !error ) {                     /* 1st error?               */
                    310:                  writes(" \n");                /* start a new print line   */
                    311:                  error = TRUE;
                    312:             }
                    313:             writes("Cycle: ");
                    314:             writed( cycle );
                    315:             writes("  EVT test ");
                    316:             writed( test_no );
                    317:             writes(". subtest ");
                    318:             writed( subtest );
                    319:             writes(".  No Clock Events were detected\n");
                    320:             writes(
                    321:         "\nTesting clock event during 128 ADDF's with instruction cache ");
                    322:             if( i_cache_hit )
                    323:                   writes("hits\n");
                    324:             else
                    325:                   writes("misses\n");
                    326:        }
                    327:        if( halt_flg )
                    328:              pipe17_halt( 2 );         /* halt with code = 2 */
                    329: }
                    330: 
                    331: 
                    332: 
                    333: 
                    334: 
                    335: /****************************************************************************
                    336: *              halt on error routine
                    337: ****************************************************************************/
                    338: pipe17_halt( code )
                    339: int code;                              /* error code to halt with */
                    340: {
                    341:        err_code = code;
                    342:        asm("movl _test_no,r0");                /* r0 = test number      */
                    343:        asm("movl _subtest,r1");                /* r1 = subtest number   */
                    344:        asm("movl _err_code,r2");               /* r2 = error code       */
                    345:        asm("movl _cycle,r3");                  /* r3 = cycle count      */
                    346:        asm("movl _sgl_value_1,r4");            /* r4 = operand used     */
                    347:        asm("movl _sgl_st_acc,r5");             /* r5 = final value      */
                    348:        asm("movl _sgl_expected,r6");           /* r6 = expected value   */
                    349:        asm("movl _i_cache_hit,r7");            /* r7 = 1 if cache hits  */
                    350:        asm("halt");                            /* HALT ...              */
                    351: }
                    352: 
                    353: 

unix.superglobalmegacorp.com

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