Annotation of cci/d/dmp4/old_test.c, revision 1.1.1.1

1.1       root        1: #include "dmp_defs.h"
                      2: 
                      3: /**************************************************************************
                      4: *
                      5: *              Test the current instruction
                      6: *
                      7: *  If the current instruction accesses any operands, then test it with
                      8: *  all major applicable addressing modes.
                      9: **************************************************************************/
                     10: test_inst()
                     11: {
                     12: /*
                     13:  * Set the values for the indirect pointers
                     14: */
                     15:        asm("movl _adr_op1,*_adr_op1_ptr");     /* word offset ptr #1   */
                     16:        asm("movl _adr_op2,*_adr_op2_ptr");     /* word offset ptr #2   */
                     17:        if( !no_ops )
                     18:             test_0_ops();      /* test inst w/ no operands */
                     19:         else
                     20:        {
                     21:             tst_abs();         /* absolute addressing             */
                     22:             if( s_to_d || 
                     23:               ( (precision == SGL) && (op_type == LOAD) ) )
                     24:                  tst_i_l();    /* immediate longword              */
                     25:             tst_b();           /* byte displacement relative      */
                     26:             tst_w();           /* word displacement relative      */
                     27:             tst_l();           /* longword displacement relative  */
                     28:             tst_b_d();         /* byte disp. relative deferred    */
                     29:             tst_w_d();         /* word disp. relative deferred    */
                     30:             tst_l_d();         /* longword disp. rel. deferred    */
                     31:             tst_r();           /* direct register                 */
                     32:             tst_r_d();         /* register deferred               */
                     33: /*          if( d_to_s || ( (precision == SGL) && (op_type == STORE) ) )
                     34: /*               tst_push();   /* PUSH ( auto-decremented SP )    */
                     35: /*          if( s_to_d || ( (precision == SGL) && (op_type == LOAD) ) )
                     36: /*               tst_pop();    /* POP ( auto-incremented SP )     */
                     37: /*          tst_pop_d();       /* auto-incremented SP deferred    */
                     38:             tst_r_b();         /* register + byte displacement    */
                     39:             tst_r_w();         /* register + word displacement    */
                     40:             tst_r_l();         /* register _ longword disp.       */
                     41:             tst_r_bd();        /* reg. + byte disp. deferred      */
                     42:             tst_r_wd();        /* reg. + word disp. deferred      */
                     43:             tst_r_ld();        /* reg. _ longword disp. deferred  */
                     44:             tst_x_fpd();       /* FP deferred + longword index    */
                     45:             tst_x_l();         /* longword disp. + longword index */
                     46:        }
                     47: }
                     48: 
                     49: 
                     50: 
                     51: 
                     52: 
                     53: /*******************************************************************
                     54: * ABSOLUTE ADDRESSING:
                     55: *  instruction =  <op-code> <9f> <&dmp_op_1> {<9f> <&dmp_op_2>}
                     56: *******************************************************************/
                     57: tst_abs()
                     58: {
                     59:        fill_reg_buf( load_regs );      /* set data for registers */
                     60:        fill_reg_buf( exp_regs );       /* set data for registers */
                     61:        addr_mode = ADR_ABSOLUTE;
                     62:        addr_code  = 0x9f;
                     63:        addr_code2 = 0x9f;
                     64:        addr_size = 4;                  /* longword (4 byte) ops. */
                     65:        addr_1    = DMP_OP_1;           /* abs. address of data   */
                     66:        addr_2    = DMP_OP_2;
                     67:        if( no_ops == 2 )
                     68:             min_shift = 6;
                     69:         else 
                     70:             min_shift = 11;
                     71:        index = 0;
                     72:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                     73:        {
                     74:             get_current_data();
                     75:             *adr_op1 = dbl_value_1.m;  /* set the 1st operand    */
                     76:             *adr_op1_lsw = dbl_value_1.l;
                     77:             *adr_op2 = dbl_value_2.m;  /* set the 2nd operand    */
                     78:             *adr_op2_lsw = dbl_value_2.l;
                     79:             get_exp_faults( 3, 4, 4, 6 );  /* set exp fault cnt  */
                     80:             pack_inst();               /* pack the instr. code   */
                     81:             run_code();                /* execute the instruction */
                     82:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                     83:             dbl_value_3.l = *adr_op1_lsw;
                     84:             (*test_ptr)();             /* verify the results     */
                     85:             if( force_loop )
                     86:                  run_code();           /* start the error loop   */
                     87:             index++;                   /* bump the data index    */
                     88:        }
                     89: }
                     90: 
                     91: 
                     92: 
                     93: 
                     94: 
                     95: /*******************************************************************
                     96: * IMMEDIATE LONGWORD ADDRESSING:       ( sgl and sgl_to_dbl only )
                     97: *  instruction =  <op-code> <8f> <data>
                     98: *******************************************************************/
                     99: tst_i_l()
                    100: {
                    101:        fill_reg_buf( load_regs );      /* set data for registers */
                    102:        fill_reg_buf( exp_regs );       /* set data for registers */
                    103:        addr_mode = ADR_IM_L;
                    104:        addr_code = addr_code2 = 0x8f;  /* immediate lword = 0x8f */
                    105:        addr_size = 4;                  /* longword (4 byte) data */
                    106:        exp_page_faults = 2;            /* 2 pages used           */
                    107:        index = 0;
                    108:        for( shift_count = 15; shift_count >= 11; shift_count-- )
                    109:        {
                    110:             get_current_data();
                    111:             addr_1 = dbl_value_1.m;    /* set the 1st operand    */
                    112:             addr_2 = dbl_value_2.m;    /* set the 2nd operand    */
                    113:             pack_inst();               /* pack the instr. code   */
                    114:             run_code();                /* execute the instruction */
                    115:             (*test_ptr)();             /* verify the results     */
                    116:             if( force_loop )
                    117:                  run_code();           /* start the error loop   */
                    118:             index++;                   /* bump the data index    */
                    119:        }
                    120: }
                    121: 
                    122: 
                    123: 
                    124: /*******************************************************************
                    125: * BYTE DISPLACEMENT RELATIVE ADDRESSING:
                    126: *  instruction =  <op-code> <af> <offset to dmp_byte_op_1>
                    127: *                         { <af> <offset to dmp_byte_op_2> }
                    128: *******************************************************************/
                    129: tst_b()
                    130: {
                    131:        fill_reg_buf( load_regs );      /* set data for registers */
                    132:        fill_reg_buf( exp_regs );       /* set data for registers */
                    133:        addr_mode = ADR_B_DSP;
                    134:        addr_code = addr_code2 = 0xaf;
                    135:        addr_size = 1;                  /* 1 byte operand         */
                    136:        exp_page_faults = 2;            /* 2 pages used           */
                    137:        if( no_ops == 2 )
                    138:             min_shift = 11;
                    139:         else
                    140:             min_shift = 13;
                    141:        index = 0;
                    142:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    143:        {
                    144:             get_current_data();
                    145:             *adr_b_op1 = dbl_value_1.m; /* set the operand  */
                    146:             *adr_bop1_lsw = dbl_value_1.l;
                    147:             *adr_b_op2 = dbl_value_2.m; /* set the operand  */
                    148:             *adr_bop2_lsw = dbl_value_2.l;
                    149:             addr_1 = os_b_op1 + 13 - shift_count; /* data's offset */
                    150:             addr_2 = os_b_op2 + 11 - shift_count;
                    151:             pack_inst();               /* pack the instr. code    */
                    152:             run_code();                /* execute the instruction */
                    153:             dbl_value_3.m = *adr_b_op1;  /* get the final operand */
                    154:             dbl_value_3.l = *adr_bop1_lsw;
                    155:             (*test_ptr)();             /* verify the results      */
                    156:             if( force_loop )
                    157:                  run_code();           /* start the error loop   */
                    158:             index++;                   /* bump the data index    */
                    159:        }
                    160: }
                    161: 
                    162: 
                    163: 
                    164: /*******************************************************************
                    165: * WORD DISPLACEMENT RELATIVE ADDRESSING:
                    166: *  instruction =  <op-code> <cf> <offset to dmp_op_1>
                    167: *                         { <cf> <offset to dmp_op_2> }
                    168: *******************************************************************/
                    169: tst_w()
                    170: {
                    171:        fill_reg_buf( load_regs );      /* set data for registers */
                    172:        fill_reg_buf( exp_regs );       /* set data for registers */
                    173:        addr_mode = ADR_W_DSP;
                    174:        addr_code = addr_code2 = 0xcf;
                    175:        addr_size = 2;                  /* word (2 byte) operand  */
                    176:        if( no_ops == 2 )
                    177:             min_shift = 10;
                    178:         else 
                    179:             min_shift = 13;
                    180:        index = 0;
                    181:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    182:        {
                    183:             get_current_data();
                    184:             *adr_op1 = dbl_value_1.m;  /* set the operand        */
                    185:             *adr_op1_lsw = dbl_value_1.l;
                    186:             *adr_op2 = dbl_value_2.m;
                    187:             *adr_op2_lsw = dbl_value_2.l;
                    188:             addr_1 = os_op1 + 12 - shift_count; /* data's offset */
                    189:             addr_2 = os_op2 +  9 - shift_count;
                    190:             get_exp_faults( 3, 4, 4, 6 );  /* set exp fault cnt  */
                    191:             pack_inst();               /* pack the instr. code   */
                    192:             run_code();                /* execute the instruction */
                    193:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    194:             dbl_value_3.l = *adr_op1_lsw;
                    195:             (*test_ptr)();             /* verify the results     */
                    196:             if( force_loop )
                    197:                  run_code();           /* start the error loop   */
                    198:             index++;                   /* bump the data index    */
                    199:        }
                    200: }
                    201: 
                    202: 
                    203: 
                    204: /*******************************************************************
                    205: * LONGWORD DISPLACEMENT RELATIVE ADDRESSING:
                    206: *  instruction =  <op-code> <ef> <offset to dmp_op_1>
                    207: *                         { <ef> <offset to dmp_op_2> }
                    208: *******************************************************************/
                    209: tst_l()
                    210: {
                    211:        fill_reg_buf( load_regs );      /* set data for registers */
                    212:        fill_reg_buf( exp_regs );       /* set data for registers */
                    213:        addr_mode = ADR_L_DSP;
                    214:        addr_code = addr_code2 = 0xef;
                    215:        addr_size = 4;                  /* longword (4 byte) ops. */
                    216:        if( no_ops == 2 )
                    217:             min_shift = 6;
                    218:         else
                    219:             min_shift = 11;
                    220:        index = 0;
                    221:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    222:        {
                    223:             get_current_data();
                    224:             *adr_op1 = dbl_value_1.m;  /* set the operand        */
                    225:             *adr_op1_lsw = dbl_value_1.l;
                    226:             *adr_op2 = dbl_value_2.m;
                    227:             *adr_op2_lsw = dbl_value_2.l;
                    228:             get_exp_faults( 3, 4, 4, 6 );  /* set exp fault cnt  */
                    229:             addr_1 = os_op1 + 10 - shift_count; /* data's offset */
                    230:             addr_2 = os_op2 +  5 - shift_count;
                    231:             pack_inst();               /* pack the instr. code   */
                    232:             run_code();                /* execute the instruction */
                    233:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    234:             dbl_value_3.l = *adr_op1_lsw;
                    235:             (*test_ptr)();             /* verify the results     */
                    236:             if( force_loop )
                    237:                  run_code();           /* start the error loop   */
                    238:             index++;                   /* bump the data index    */
                    239:        }
                    240: }
                    241: 
                    242: 
                    243: 
                    244: /*******************************************************************
                    245: * BYTE DISPLACEMENT RELATIVE DEFERRED ADDRESSING:
                    246: *  instruction =  <op-code> <bf> <offset to dmp_byte_op_1>
                    247: *                         { <bf> <offset to dmp_byte_op_2> }
                    248: *******************************************************************/
                    249: tst_b_d()
                    250: {
                    251:        fill_reg_buf( load_regs );      /* set data for registers */
                    252:        fill_reg_buf( exp_regs );       /* set data for registers */
                    253:        addr_mode = ADR_B_DSP_DEF;
                    254:        addr_code = addr_code2 = 0xbf;
                    255:        addr_size = 1;                  /* 1 byte operand         */
                    256:        *adr_b_op1 = (int) adr_op1;     /* set byte offset ptr #1 */
                    257:        *adr_b_op2 = (int) adr_op2;     /* set byte offset ptr #2 */
                    258:        if( no_ops == 2 )
                    259:             min_shift = 11;
                    260:         else 
                    261:             min_shift = 13;
                    262:        index = 0;
                    263:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    264:        {
                    265:             get_current_data();
                    266:             *adr_op1 = dbl_value_1.m;  /* set the operand        */
                    267:             *adr_op1_lsw = dbl_value_1.l;
                    268:             *adr_op2 = dbl_value_2.m;
                    269:             *adr_op2_lsw = dbl_value_2.l;
                    270:             get_exp_faults( 3, 4, 4, 6 );  /* set exp fault cnt  */
                    271:             addr_1 = os_b_op1 + 13 - shift_count; /* data's offset */
                    272:             addr_2 = os_b_op2 + 11 - shift_count; 
                    273:             pack_inst();               /* pack the instr. code   */
                    274:             run_code();                /* execute the instruction */
                    275:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    276:             dbl_value_3.l = *adr_op1_lsw;
                    277:             (*test_ptr)();             /* verify the results     */
                    278:             if( force_loop )
                    279:                  run_code();           /* start the error loop   */
                    280:             index++;                   /* bump the data index    */
                    281:        }
                    282: }
                    283: 
                    284: 
                    285: 
                    286: 
                    287: /*******************************************************************
                    288: * WORD DISPLACEMENT RELATIVE DEFERRED ADDRESSING:
                    289: *  instruction =  <op-code> <df> <offset to dmp_op_1>
                    290: *                         { <df> <offset to dmp_op_2> }
                    291: *******************************************************************/
                    292: tst_w_d()
                    293: {
                    294:        fill_reg_buf( load_regs );      /* set data for registers */
                    295:        fill_reg_buf( exp_regs );       /* set data for registers */
                    296:        addr_mode = ADR_W_DSP_DEF;
                    297:        addr_code = addr_code2 = 0xdf;
                    298:        addr_size = 2;                  /* word (2 byte) operand  */
                    299:        if( no_ops == 2 )
                    300:             min_shift = 10;
                    301:         else 
                    302:             min_shift = 13;
                    303:        index = 0;
                    304:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    305:        {
                    306:             get_current_data();
                    307:             *adr_op1 = dbl_value_1.m;  /* set the operand        */
                    308:             *adr_op1_lsw = dbl_value_1.l;
                    309:             *adr_op2 = dbl_value_2.m;
                    310:             *adr_op2_lsw = dbl_value_2.l;
                    311:             get_exp_faults( 4, 5, 6, 8 );  /* set exp fault cnt  */
                    312:             addr_1 = os_ad_op1 + 12 - shift_count; /* operand offset */
                    313:             addr_2 = os_ad_op2 +  9 - shift_count; 
                    314:             pack_inst();               /* pack the instr. code   */
                    315:             run_code();                /* execute the instruction */
                    316:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    317:             dbl_value_3.l = *adr_op1_lsw;
                    318:             (*test_ptr)();             /* verify the results     */
                    319:             if( force_loop )
                    320:                  run_code();           /* start the error loop   */
                    321:             index++;                   /* bump the data index    */
                    322:        }
                    323: }
                    324: 
                    325: 
                    326:   
                    327: /*******************************************************************
                    328: * LONGWORD DISPLACEMENT RELATIVE DEFERRED ADDRESSING:
                    329: *  instruction =  <op-code> <ff> <offset to dmp_op_1>
                    330: *                         { <ff> <offset to dmp_op_1> }
                    331: *******************************************************************/
                    332: tst_l_d()
                    333: {
                    334:        fill_reg_buf( load_regs );      /* set data for registers */
                    335:        fill_reg_buf( exp_regs );       /* set data for registers */
                    336:        addr_mode = ADR_L_DSP_DEF;
                    337:        addr_code = addr_code2 = 0xff;
                    338:        addr_size = 4;                  /* longword (4 byte) op.  */
                    339:        if( no_ops == 2 )
                    340:             min_shift = 6;
                    341:         else 
                    342:             min_shift = 11;
                    343:        index = 0;
                    344:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    345:        {
                    346:             get_current_data();
                    347:             *adr_op1 = dbl_value_1.m;  /* set the operand        */
                    348:             *adr_op1_lsw = dbl_value_1.l;
                    349:             *adr_op2 = dbl_value_2.m;  /* set the operand        */
                    350:             *adr_op2_lsw = dbl_value_2.l;
                    351:             get_exp_faults( 4, 5, 6, 8 );  /* set exp fault cnt  */
                    352:             addr_1 = os_ad_op1 + 10 - shift_count; /* operand offset */
                    353:             addr_2 = os_ad_op2 +  5 - shift_count; 
                    354:             pack_inst();               /* pack the instr. code   */
                    355:             run_code();                /* execute the instruction */
                    356:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    357:             dbl_value_3.l = *adr_op1_lsw;
                    358:             (*test_ptr)();             /* verify the results     */
                    359:             if( force_loop )
                    360:                  run_code();           /* start the error loop   */
                    361:             index++;                   /* bump the data index    */
                    362:        }
                    363: }
                    364: 
                    365: 
                    366: 
                    367: /*******************************************************************
                    368: * DIRECT REGISTER ADDRESSING:
                    369: *  instruction =  <op-code> <50> { <54> }
                    370: *******************************************************************/
                    371: tst_r()
                    372: {
                    373:        fill_reg_buf( load_regs );      /* set data for registers */
                    374:        fill_reg_buf( exp_regs );       /* set data for registers */
                    375:        addr_mode = ADR_REG;
                    376:        addr_code  = 0x50;              /* 1st op in registers 0/1 */
                    377:        addr_code2 = 0x54;              /* 2nd op in registers 4/5 */
                    378:        addr_size = 0;                  /* no addressing bytes    */
                    379:        pack_inst();                    /* pack the instr. code   */
                    380:        exp_page_faults = 2;            /* 2 pages used           */
                    381:        if( no_ops == 2 )
                    382:             min_shift = 14;
                    383:         else
                    384:             min_shift = 15;
                    385:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    386:        {
                    387:             for( index = 0; index < 3; index++ )
                    388:             {
                    389:                  get_current_data();
                    390:                  load_regs[0] = dbl_value_1.m; /* get the data       */
                    391:                  load_regs[1] = dbl_value_1.l;
                    392:                  load_regs[4] = dbl_value_2.m;
                    393:                  load_regs[5] = dbl_value_2.l;
                    394:                  exp_regs[4]  = load_regs[4];  /* set exp final reg value */
                    395:                  exp_regs[5]  = load_regs[5];
                    396:                  if( op_type == LOAD )
                    397:                  {
                    398:                       exp_regs[0] = dbl_value_1.m;
                    399:                       exp_regs[1] = dbl_value_1.l;
                    400:                  } else {
                    401:                       exp_regs[0] = dbl_expected.m;
                    402:                       exp_regs[1] = dbl_expected.l;
                    403:                  }
                    404:                  if( op_code == CVDL_OP_CODE ) /* correct for sgl store    */
                    405:                       exp_regs[1] = dbl_value_1.l; /* r1 shouldn't change  */
                    406:                  run_code();                   /* execute the instruction  */
                    407:                  dbl_value_3.m = store_regs[0]; /* get final r0, r1 values */
                    408:                  dbl_value_3.l = store_regs[1];
                    409:                  (*test_ptr)();                /* verify the results       */
                    410:                  if( force_loop )
                    411:                       run_code();              /* start the error loop     */
                    412:             }
                    413:        }
                    414: }
                    415: 
                    416: 
                    417: 
                    418: /*******************************************************************
                    419: * REGISTER DEFERRED ADDRESSING:
                    420: *  instruction =  <op-code> <60> {<61>}
                    421: *******************************************************************/
                    422: tst_r_d()
                    423: {
                    424:        fill_reg_buf( load_regs );      /* set data for registers */
                    425:        fill_reg_buf( exp_regs );       /* set data for registers */
                    426:        addr_mode  = ADR_REG_DEF;
                    427:        addr_code  = 0x60;
                    428:        addr_code2 = 0x61;
                    429:        addr_size  = 0;                 /* no address byte(s)   */
                    430:        load_regs[0] = (int) adr_op1;   /* get addr of op. 1    */
                    431:        load_regs[1] = (int) adr_op2;   /* get addr of op. 2    */
                    432:        exp_regs[0] = load_regs[0];
                    433:        exp_regs[1] = load_regs[1];
                    434:        pack_inst();                    /* pack the instr. code */
                    435:        if( no_ops == 2 )
                    436:             min_shift = 14;
                    437:         else 
                    438:             min_shift = 15;
                    439:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    440:        {
                    441:             for( index = 0; index < 3; index++ )
                    442:             {
                    443:                  get_current_data();
                    444:                  *adr_op1 = dbl_value_1.m;     /* set the 1st data     */
                    445:                  *adr_op1_lsw = dbl_value_1.l;
                    446:                  *adr_op2 = dbl_value_2.m;     /* set the 2nd data     */
                    447:                  *adr_op2_lsw = dbl_value_2.l;
                    448:                  get_exp_faults( 3, 4, 4, 6 );  /* set exp fault cnt   */
                    449:                  run_code();                /* execute the instruction */
                    450:                  dbl_value_3.m = *adr_op1;     /* get op's final value */
                    451:                  dbl_value_3.l = *adr_op1_lsw;
                    452:                  (*test_ptr)();                /* verify the results   */
                    453:                  if( force_loop )
                    454:                       run_code();              /* start the error loop */
                    455:             }
                    456:        }
                    457: }
                    458: 
                    459: 
                    460: 
                    461: 
                    462: /*******************************************************************
                    463: * AUTO-DECREMENTED STACK POINTER ADDRESSING  ( PUSH ):
                    464: *  instruction =  <op-code> <7e>
                    465: * 
                    466: * The final result will be popped by "run_code"
                    467: *******************************************************************/
                    468: tst_push()
                    469: {
                    470:        fill_reg_buf( load_regs );      /* set data for registers */
                    471:        fill_reg_buf( exp_regs );       /* set data for registers */
                    472:        addr_mode = ADR_PUSH;
                    473:        addr_code = 0x7e;
                    474:        addr_size = 0;                  /* no addressing bytes    */
                    475:        exp_page_faults = 3;            /* 3 pages used           */
                    476:        shift_count = 15;
                    477:        pack_inst();                    /* pack the instr. code   */
                    478:        for( index = 0; index < 3; index++ )
                    479:        {
                    480:             get_current_data();
                    481:             run_code();                /* execute the instruction */
                    482:             dbl_value_3.m = *adr_op1;  /* get op's final value */
                    483:             (*test_ptr)();             /* verify the results     */
                    484:             if( force_loop )
                    485:                  run_code();           /* start the error loop   */
                    486:        }
                    487: }
                    488: 
                    489: 
                    490: 
                    491: 
                    492: /*******************************************************************
                    493: * AUTO-INCREMENTED STACK POINTER ADDRESSING  ( POP ):  ( sgl ops only )
                    494: *  instruction =  <op-code> <8e> 
                    495: * 
                    496: * The data will be pushed by "run_code"
                    497: *******************************************************************/
                    498: tst_pop()
                    499: {
                    500:        fill_reg_buf( load_regs );      /* set data for registers */
                    501:        fill_reg_buf( exp_regs );       /* set data for registers */
                    502:        addr_mode = ADR_POP;
                    503:        addr_code = 0x8e;
                    504:        addr_size = 0;                  /* no addressing bytes    */
                    505:        pack_inst();                    /* pack the instr. code   */
                    506:        exp_page_faults = 3;            /* 3 pages used           */
                    507:        shift_count = 15;
                    508:        for( index = 0; index < 3; index++ )
                    509:        {
                    510:             get_current_data();
                    511:             sgl_value_9 = dbl_value_1.m; /* data to be pushed   */
                    512:             if( no_ops == 2 )
                    513:                  sgl_value_10 = dbl_value_2.m;
                    514:             run_code();                /* execute the instruction */
                    515:             (*test_ptr)();             /* verify the results     */
                    516:             if( force_loop )
                    517:                  run_code();           /* start the error loop   */
                    518:        }
                    519: }
                    520: 
                    521: 
                    522: 
                    523: 
                    524: 
                    525: /*******************************************************************
                    526: * AUTO-INCREMENTED STACK POINTER DEFERRED ADDRESSING:
                    527: *  instruction =  <op-code> <9e> { <9e> }
                    528: *
                    529: * The address of the data will be pushed by "run_code"
                    530: *******************************************************************/
                    531: tst_pop_d()
                    532: {
                    533:        fill_reg_buf( load_regs );      /* set data for registers */
                    534:        fill_reg_buf( exp_regs );       /* set data for registers */
                    535:        addr_mode = ADR_POP_DEF;
                    536:        addr_code = addr_code2 = 0x9e;
                    537:        addr_size = 0;                  /* no addressing bytes     */
                    538:        pack_inst();                    /* pack the instr. code    */
                    539:        sgl_value_9 = (int) adr_op1;    /* get 1st op to be popped */
                    540:        sgl_value_10 = (int) adr_op2;   /* get 2nd op to be popped */
                    541:        if( no_ops == 2 )
                    542:             min_shift = 14;
                    543:         else 
                    544:             min_shift = 15;
                    545:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    546:        {
                    547:             for( index = 0; index < 3; index++ )
                    548:             {
                    549:                  get_current_data();
                    550:                  *adr_op1 = dbl_value_1.m;     /* set the 1st op's data */
                    551:                  *adr_op1_lsw = dbl_value_1.l;
                    552:                  *adr_op2 = dbl_value_2.m;     /* set the 2nd op's data */
                    553:                  *adr_op2_lsw = dbl_value_2.l;
                    554:                  get_exp_faults( 4, 5, 5, 7 ); /* set exp fault cnt     */
                    555:                  run_code();                   /* execute the instruction */
                    556:                  dbl_value_3.m = *adr_op1;     /* get op's final value */
                    557:                  dbl_value_3.l = *adr_op1_lsw;
                    558:                  (*test_ptr)();                /* verify the results     */
                    559:                  if( force_loop )
                    560:                       run_code();              /* start the error loop   */
                    561:             }
                    562:        }
                    563: }
                    564: 
                    565: 
                    566: 
                    567: 
                    568: 
                    569: 
                    570: /*******************************************************************
                    571: * REGISTER + BYTE DISPLACEMENT ADDRESSING:
                    572: *  instruction =  <op-code> <a4> <(&op_1 -r4)>
                    573: *                         { <a5> <(&op_2- r5)> }
                    574: *******************************************************************/
                    575: tst_r_b()
                    576: {
                    577:        fill_reg_buf( load_regs );      /* set data for registers */
                    578:        fill_reg_buf( exp_regs );       /* set data for registers */
                    579:        addr_mode  = ADR_REG_B;
                    580:        addr_code  = 0xa4;              /* addr 1 is offset by r4 */
                    581:        addr_code2 = 0xa5;              /* addr 2 is offset by r5 */
                    582:        addr_size  = 1;                 /* 1 byte operand         */
                    583:        addr_1 = 20;                    /* set the 1st byte offset */
                    584:        addr_2 = 4;                     /* set the 2nd byte offset */
                    585:        pack_inst();                    /* pack the instr. code    */
                    586:        load_regs[4] = (int) adr_op1 - 20;  /* get the reg value   */
                    587:        load_regs[5] = (int) adr_op2 - 4;
                    588:        exp_regs[4] = load_regs[4];
                    589:        exp_regs[5] = load_regs[5];
                    590:        if( no_ops == 2 )
                    591:             min_shift = 12;
                    592:         else 
                    593:             min_shift = 14;
                    594:        index = 0;
                    595:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    596:        {
                    597:             get_current_data();
                    598:             *adr_op1 = dbl_value_1.m;  /* set the 1st operand    */
                    599:             *adr_op1_lsw = dbl_value_1.l;
                    600:             *adr_op2 = dbl_value_2.m;  /* set the 2nd operand    */
                    601:             *adr_op2_lsw = dbl_value_2.l;
                    602:             get_exp_faults( 3, 4, 4, 6 );  /* set exp fault cnt  */
                    603:             run_code();                /* execute the instruction */
                    604:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    605:             dbl_value_3.l = *adr_op1_lsw;
                    606:             (*test_ptr)();             /* verify the results     */
                    607:             if( force_loop )
                    608:                  run_code();           /* start the error loop   */
                    609:             index++;                   /* bump the data index    */
                    610:        }
                    611: }
                    612: 
                    613: 
                    614: 
                    615: /*******************************************************************
                    616: * REGISTER + WORD DISPLACEMENT ADDRESSING:
                    617: *  instruction =  <op-code> <c4> <(&op_1 -r4)>
                    618: *                         { <c5> <(&op_2 -r5)> }
                    619: *******************************************************************/
                    620: tst_r_w()
                    621: {
                    622:        fill_reg_buf( load_regs );      /* set data for registers */
                    623:        fill_reg_buf( exp_regs );       /* set data for registers */
                    624:        addr_mode  = ADR_REG_W;
                    625:        addr_code  = 0xc4;              /* addr 1 is offset by r4 */
                    626:        addr_code2 = 0xc5;              /* addr 2 is offset by r5 */
                    627:        addr_size  = 2;                 /* word (2 byte) operand  */
                    628:        addr_1 = 511;                   /* set the 1st word offset */
                    629:        addr_2 = 513;                   /* set the 2nd word offset */
                    630:        pack_inst();                    /* pack the instr. code    */
                    631:        load_regs[4] = (int) adr_op1 - 511;  /* get the reg value  */
                    632:        load_regs[5] = (int) adr_op2 - 513;
                    633:        exp_regs[4] = load_regs[4];
                    634:        exp_regs[5] = load_regs[5];
                    635:        if( no_ops == 2 )
                    636:             min_shift = 10;
                    637:         else 
                    638:             min_shift = 13;
                    639:        index = 0;
                    640:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    641:        {
                    642:             get_current_data();
                    643:             *adr_op1 = dbl_value_1.m;  /* set the 1st operand    */
                    644:             *adr_op1_lsw = dbl_value_1.l;
                    645:             *adr_op2 = dbl_value_2.m;  /* set the 2nd operand    */
                    646:             *adr_op2_lsw = dbl_value_2.l;
                    647:             get_exp_faults( 3, 4, 4, 6 );  /* set exp fault cnt  */
                    648:             run_code();                /* execute the instruction */
                    649:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    650:             dbl_value_3.l = *adr_op1_lsw;
                    651:             (*test_ptr)();             /* verify the results     */
                    652:             if( force_loop )
                    653:                  run_code();           /* start the error loop   */
                    654:             index++;                   /* bump the data index    */
                    655:        }
                    656: }
                    657: 
                    658: 
                    659: 
                    660: 
                    661: /*******************************************************************
                    662: * REGISTER + LONGWORD DISPLACEMENT ADDRESSING:
                    663: *  instruction =  <op-code> <e4> <(op_1 -r4)>
                    664: *                         { <e5> <(op_2 -r5)> }
                    665: *******************************************************************/
                    666: tst_r_l()
                    667: {
                    668:        fill_reg_buf( load_regs );      /* set data for registers */
                    669:        fill_reg_buf( exp_regs );       /* set data for registers */
                    670:        addr_mode  = ADR_REG_B;
                    671:        addr_code  = 0xe4;              /* addr 1 is offset by r4 */
                    672:        addr_code2 = 0xe5;              /* addr 2 is offset by r5 */
                    673:        addr_size  = 4;                 /* longword (4 byte) op.  */
                    674:        addr_1 = (int) adr_op1 - 123;   /* get the 1st addr base  */
                    675:        addr_2 = (int) adr_op2 - 130;   /* get the 2nd addr base  */
                    676:        load_regs[4] = 123;             /* reg 4 = 123            */
                    677:        exp_regs[4] = 123;
                    678:        load_regs[5] = 130;             /* reg 5 = 130            */
                    679:        exp_regs[5] = 130;
                    680:        pack_inst();                    /* pack the instr. code   */
                    681:        if( no_ops == 2 )
                    682:             min_shift = 6;
                    683:         else 
                    684:             min_shift = 11;
                    685:        index = 0;
                    686:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    687:        {
                    688:             get_current_data();
                    689:             *adr_op1 = dbl_value_1.m;  /* set the 1st operand    */
                    690:             *adr_op1_lsw = dbl_value_1.l;
                    691:             *adr_op2 = dbl_value_2.m;  /* set the 2nd operand    */
                    692:             *adr_op2_lsw = dbl_value_2.l;
                    693:             get_exp_faults( 3, 4, 4, 6 );  /* set exp fault cnt  */
                    694:             run_code();                /* execute the instruction */
                    695:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    696:             dbl_value_3.l = *adr_op1_lsw;
                    697:             (*test_ptr)();             /* verify the results     */
                    698:             if( force_loop )
                    699:                  run_code();           /* start the error loop   */
                    700:             index++;                   /* bump the data index    */
                    701:        }
                    702: }
                    703: 
                    704: 
                    705: 
                    706: 
                    707: /*******************************************************************
                    708: * REGISTER + BYTE DISPLACEMENT DEFERRED ADDRESSING:
                    709: *  instruction =  <op-code> <b4> <(&ptr_to_op_1 -r4)>
                    710: *                         { <b5> <(&ptr_to_op_1 -r5)>}
                    711: *******************************************************************/
                    712: tst_r_bd()
                    713: {
                    714:        fill_reg_buf( load_regs );      /* set data for registers */
                    715:        fill_reg_buf( exp_regs );       /* set data for registers */
                    716:        addr_mode  = ADR_REG_B_DEF;
                    717:        addr_code  = 0xb4;              /* addr 1 is offset by r4 */
                    718:        addr_code2 = 0xb5;              /* addr 2 is offset by r5 */
                    719:        addr_size  = 1;                 /* 1 byte operand         */
                    720:        addr_1 = 20;                    /* set the 1st byte offset */
                    721:        addr_2 = 4;                     /* set the 2nd byte offset */
                    722:        pack_inst();                    /* pack the instr. code    */
                    723:        load_regs[4] = (int) adr_op1_ptr - 20;  /* get the reg value */
                    724:        load_regs[5] = (int) adr_op2_ptr - 4;
                    725:        exp_regs[4] = load_regs[4];
                    726:        exp_regs[5] = load_regs[5];
                    727:        if( no_ops == 2 )
                    728:             min_shift = 12;
                    729:         else 
                    730:             min_shift = 14;
                    731:        index = 0;
                    732:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    733:        {
                    734:             get_current_data();
                    735:             *adr_op1 = dbl_value_1.m;  /* set the 1st operand    */
                    736:             *adr_op1_lsw = dbl_value_1.l;
                    737:             *adr_op2 = dbl_value_2.m;  /* set the 2nd operand    */
                    738:             *adr_op2_lsw = dbl_value_2.l;
                    739:             get_exp_faults( 4, 5, 6, 8 );  /* set exp fault cnt  */
                    740:             run_code();                /* execute the instruction */
                    741:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    742:             dbl_value_3.l = *adr_op1_lsw;
                    743:             (*test_ptr)();             /* verify the results     */
                    744:             if( force_loop )
                    745:                  run_code();           /* start the error loop   */
                    746:             index++;                   /* bump the data index    */
                    747:        }
                    748: }
                    749: 
                    750: 
                    751: 
                    752: /*******************************************************************
                    753: * REGISTER + WORD DISPLACEMENT DEFERRED ADDRESSING:
                    754: *  instruction =  <op-code> <d4> <(word &ptr_to_op_1 -r4)>
                    755: *                         { <d5> <(word &ptr_to_op_1 -r5)> }
                    756: *******************************************************************/
                    757: tst_r_wd()
                    758: {
                    759:        fill_reg_buf( load_regs );      /* set data for registers */
                    760:        fill_reg_buf( exp_regs );       /* set data for registers */
                    761:        addr_mode  = ADR_REG_W_DEF;
                    762:        addr_code  = 0xd4;              /* addr 1 is offset by r4 */
                    763:        addr_code2 = 0xd5;              /* addr 2 is offset by r5 */
                    764:        addr_size  = 2;                 /* word (2 byte) operand  */
                    765:        addr_1 = 511;                   /* set the 1st word offset */
                    766:        addr_2 = 601;                   /* set the 2nd word offset */
                    767:        pack_inst();                    /* pack the instr. code    */
                    768:        load_regs[4] = (int) adr_op1_ptr - 511; /* get the reg value */
                    769:        load_regs[5] = (int) adr_op2_ptr - 601;
                    770:        exp_regs[4] = load_regs[4];
                    771:        exp_regs[5] = load_regs[5];
                    772:        if( no_ops == 2 )
                    773:             min_shift = 10;
                    774:         else 
                    775:             min_shift = 13;
                    776:        index = 0;
                    777:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    778:        {
                    779:             get_current_data();
                    780:             *adr_op1 = dbl_value_1.m;  /* set the 1st operand    */
                    781:             *adr_op1_lsw = dbl_value_1.l;
                    782:             *adr_op2 = dbl_value_2.m;  /* set the 2nd operand    */
                    783:             *adr_op2_lsw = dbl_value_2.l;
                    784:             get_exp_faults( 4, 5, 6, 8 );  /* set exp fault cnt  */
                    785:             run_code();                /* execute the instruction */
                    786:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    787:             dbl_value_3.l = *adr_op1_lsw;
                    788:             (*test_ptr)();             /* verify the results     */
                    789:             if( force_loop )
                    790:                  run_code();           /* start the error loop   */
                    791:             index++;                   /* bump the data index    */
                    792:        }
                    793: }
                    794: 
                    795: 
                    796: 
                    797: 
                    798: /*******************************************************************
                    799: * REGISTER + LONGWORD DISPLACEMENT DEFERRED ADDRESSING:
                    800: *  instruction =  <op-code> <f4> <(longword &ptr_to_op_1 -r4)>
                    801: *                         { <f5> <(longword &ptr_to_op_1 -r5)> }
                    802: *******************************************************************/
                    803: tst_r_ld()
                    804: {
                    805:        fill_reg_buf( load_regs );      /* set data for registers */
                    806:        fill_reg_buf( exp_regs );       /* set data for registers */
                    807:        addr_mode    = ADR_REG_L_DEF;
                    808:        addr_code    = 0xf4;            /* addr 1 is offset by r4 */
                    809:        addr_code2   = 0xf5;            /* addr 2 is offset by r5 */
                    810:        addr_size    = 4;               /* longword (4 byte) op.  */
                    811:        addr_1 = (int) adr_op1_ptr - 123;       /* set the 1st byte offset */
                    812:        addr_2 = (int) adr_op2_ptr - 212;       /* set the 2nd byte offset */
                    813:        pack_inst();                    /* pack the instr. code    */
                    814:        load_regs[4] = 123;             /* reg 4 = 123             */
                    815:        load_regs[5] = 212;             /* reg 5 = 212             */
                    816:        exp_regs[4]  = load_regs[4];
                    817:        exp_regs[5]  = load_regs[5];
                    818:        if( no_ops == 2 )
                    819:             min_shift = 6;
                    820:         else 
                    821:             min_shift = 11;
                    822:        index = 0;
                    823:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    824:        {
                    825:             get_current_data();
                    826:             *adr_op1 = dbl_value_1.m;  /* set the 1st operand    */
                    827:             *adr_op1_lsw = dbl_value_1.l;
                    828:             *adr_op2 = dbl_value_2.m;  /* set the 2nd operand   */
                    829:             *adr_op2_lsw = dbl_value_2.l;
                    830:             get_exp_faults( 4, 5, 6, 8 );  /* set exp fault cnt  */
                    831:             run_code();                /* execute the instruction */
                    832:             dbl_value_3.m = *adr_op1;  /* get the final operand  */
                    833:             dbl_value_3.l = *adr_op1_lsw;
                    834:             (*test_ptr)();             /* verify the results     */
                    835:             if( force_loop )
                    836:                  run_code();           /* start the error loop   */
                    837:             index++;                   /* bump the data index    */
                    838:        }
                    839: }
                    840: 
                    841: 
                    842: 
                    843: /*******************************************************************
                    844: * FRAME POINTER DEFERRED + LONGWORD INDEX ADDRESSING:
                    845: *  instruction =  <op-code> <44> <6d> { <45> <6d> }
                    846: * 
                    847: *  The indeces used will be either quadword indeces ( for DBL operands )
                    848: *  of longword indeces ( for SGL operands ).
                    849: *
                    850: * NOTE: 
                    851: *  dmp_op_2 is exactly 4 pages away from dmp_op_1. (200 hex quadwords)
                    852: *  IF THIS RELATIVE DISPLACEMENT IS CHANGED THEN THE R5 INDEX MUST
                    853: *  BE CHANGED IN THIS CODE!!! ( used by CMPF2 & CMPD2 )
                    854: *******************************************************************/
                    855: tst_x_fpd()
                    856: {
                    857:        fill_reg_buf( load_regs );      /* set data for registers */
                    858:        fill_reg_buf( exp_regs );       /* set data for registers */
                    859:        addr_mode  = ADR_I_FP_DEF;
                    860:        addr_code  = 0x44;              /* code for reg. 4 index  */
                    861:        addr_code2 = 0x45;              /* code for reg. 5 index  */
                    862:        addr_codeB = 0x6d;              /* code for FP deferred   */
                    863:        addr_size = 0;                  /* no addr. field per se  */
                    864:        pack_inst();                    /* pack the instr. code   */
                    865: /*
                    866:  * set the frame pointer to 'operand 1 - 16 bytes' (2 quad-words)
                    867: */
                    868:        asm("movl _adr_op1,_sgl_dummy1"); /* get the addr of op 1 */
                    869:        load_regs[13] = sgl_dummy1-16;  /* SP = op 1's addr - 16  */
                    870:        exp_regs[13] = load_regs[13];
                    871:        if( sgl_op )
                    872:        {
                    873:            load_regs[4] = 4;           /* SP to op_1 (longwords) */
                    874:            load_regs[5] = 0x404;       /* SP to op_2 (longwords) */
                    875:        } else {
                    876:            load_regs[4] = 2;           /* SP to op_1 (quadwords) */
                    877:            load_regs[5] = 0x202;       /* SP to op_2 (quadwords) */
                    878:        }
                    879:        exp_regs[4] = load_regs[4];
                    880:        exp_regs[5] = load_regs[5];
                    881:        if( no_ops == 2 )
                    882:             min_shift = 12;
                    883:         else 
                    884:             min_shift = 14;
                    885:        index = 0;
                    886:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    887:        {
                    888:             get_current_data();
                    889:             *adr_op1 = dbl_value_1.m;   /* set the 1st operand */
                    890:             *adr_op1_lsw = dbl_value_1.l;
                    891:             *adr_op2 = dbl_value_2.m;  /* set the 2nd operand  */
                    892:             *adr_op2_lsw = dbl_value_2.l;
                    893:             get_exp_faults( 3, 4, 4, 6 );  /* set exp fault cnt */
                    894:             run_code();                /* execute the instruction */
                    895:             dbl_value_3.m = *adr_op1;  /* get the final operand */
                    896:             dbl_value_3.l = *adr_op1_lsw;
                    897:             (*test_ptr)();             /* verify the results   */
                    898:             if( force_loop )
                    899:                  run_code();           /* start the error loop */
                    900:             index++;                   /* bump the data index  */
                    901:        }
                    902: }
                    903: 
                    904: 
                    905: 
                    906: /*******************************************************************
                    907: *         INDEXED LONGWORD DISPLACEMENT ADDRESSING:
                    908: *  instruction =  <op-code> <44> <ef> <longword offset>
                    909: *                         { <45> <ef> <longword offset> }
                    910: *******************************************************************/
                    911: tst_x_l()
                    912: {
                    913:        fill_reg_buf( load_regs );      /* set data for registers */
                    914:        fill_reg_buf( exp_regs );       /* set data for registers */
                    915:        addr_mode  = ADR_I_L;
                    916:        addr_code  = 0x44;              /* code for reg. 4 index  */
                    917:        addr_code2 = 0x45;              /* code for reg. 5 index  */
                    918:        addr_codeB = 0xef;              /* code for longword disp */
                    919:        addr_size  = 4;                 /* longword (4 byte) op.  */
                    920:        if( sgl_op )
                    921:        {
                    922:             load_regs[4] = 4;          /* reg 4 = 4 (longwords)  */
                    923:             load_regs[5] = 6;          /* reg 5 = 6 (longwords)  */
                    924:        } else {
                    925:             load_regs[4] = 2;          /* reg 4 = 2 (quadwords)  */
                    926:             load_regs[5] = 3;          /* reg 5 = 3 (quadwords)  */
                    927:        }
                    928:        exp_regs[4] = load_regs[4];
                    929:        exp_regs[5] = load_regs[5];
                    930:        if( no_ops == 2 )
                    931:             min_shift = 4;
                    932:         else 
                    933:             min_shift = 10;
                    934:        index = 0;
                    935:        for( shift_count = 15; shift_count >= min_shift; shift_count-- )
                    936:        {
                    937:             get_current_data();
                    938:             *adr_op1 = dbl_value_1.m;   /* set the 1st operand     */
                    939:             *adr_op1_lsw = dbl_value_1.l;
                    940:             *adr_op2 = dbl_value_2.m;  /* set the 2nd operand      */
                    941:             *adr_op2_lsw = dbl_value_2.l;
                    942:             get_exp_faults( 3, 4, 4, 6 );  /* set exp fault cnt    */
                    943:             addr_1 = os_op1 + 9 - shift_count; /* data's offset    */
                    944:             addr_1 -=16;               /*    -16 bytes (2 Q-words) */
                    945:             addr_2 = os_op2 + 3 - shift_count; /* data's offset    */
                    946:             addr_2 -=24;               /*    -24 bytes (3 Q-words) */
                    947:             pack_inst();               /* pack the instr. code     */
                    948:             run_code();                /* execute the instruction  */
                    949:             dbl_value_3.m = *adr_op1;  /* get the final operand    */
                    950:             dbl_value_3.l = *adr_op1_lsw;
                    951:             (*test_ptr)();             /* verify the results       */
                    952:             if( force_loop )
                    953:                  run_code();           /* start the error loop     */
                    954:             index++;                   /* bump the data index      */
                    955:        }
                    956: }
                    957: 
                    958: 
                    959: 
                    960: /**************************************************************************
                    961: *              Get data for double precision instructions
                    962: **************************************************************************/
                    963: get_current_data()
                    964: {
                    965:        if( no_ops == 2 )
                    966:        {
                    967:             dbl_ld_acc   = ldd_data[ index +1 ].op_1;
                    968:             dbl_value_1  = data_ptr[ index ].op_1;
                    969:             dbl_value_2  = data_ptr[ index ].op_2;
                    970:             dbl_expected = data_ptr[ index ].exp;
                    971:        }
                    972:         else
                    973:        {
                    974:             dbl_ld_acc   = data_ptr[ index ].op_1;
                    975:             dbl_value_1  = data_ptr[ index ].op_2;
                    976:             dbl_expected = data_ptr[ index ].exp;
                    977:        }
                    978: }
                    979:        
                    980:        
                    981: /****************************************************************************
                    982: *              Get the expected number of translation faults
                    983: ****************************************************************************/
                    984: get_exp_faults( sgl_1, dbl_1, sgl_2, dbl_2 )
                    985: int sgl_1;                             /* exp # faults for 1 sgl operand  */
                    986: int dbl_1;                             /* exp # faults for 1 dbl operand  */
                    987: int sgl_2;                             /* exp # faults for 2 sgl operands */
                    988: int dbl_2;                             /* exp # faults for 2 dbl operands */
                    989: {
                    990:        if( no_ops == 1 )
                    991:        {
                    992:             if( sgl_op )
                    993:                  exp_page_faults = sgl_1;      /* 1 sgl operand  */
                    994:              else
                    995:                  exp_page_faults = dbl_1;      /* 1 dbl operand  */
                    996:        } else {
                    997:             if( sgl_op )
                    998:                  exp_page_faults = sgl_2;      /* 2 sgl operands */
                    999:              else
                   1000:                  exp_page_faults = dbl_2;      /* 2 dbl operands */
                   1001:        }
                   1002: /*
                   1003:  * In DBL compare instructions, the system won't fetch the least significant
                   1004:  * half of the operand(s) if the most significant halves are different.
                   1005: */
                   1006:        if( (op_code == CMPD_OP_CODE)  && (dbl_value_1.m != dbl_ld_acc.m) ||
                   1007:            (op_code == CMPD2_OP_CODE) && (dbl_value_1.m != dbl_value_2.m) )
                   1008:             exp_page_faults--;
                   1009: }

unix.superglobalmegacorp.com

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