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

1.1       root        1: 
                      2: #include "stdio.h"
                      3: #include "../fpp_defs.h"
                      4: 
                      5: 
                      6: /***************************************************************************
                      7: *
                      8: *      LDF  -FLOATING POINT SINGLE PRECISION LOAD RESERVED OPERAND TEST
                      9: *
                     10: ***************************************************************************/
                     11: 
                     12: func_ptr_array ldf_r_tests;            /* table of pointers to subtests  */
                     13: int max_ldf_r_sbtst_no;                        /* # reserved operand tests */
                     14: 
                     15: 
                     16: /*
                     17:  * SUBTEST MESSAGE TABLE: messages describing the subtests
                     18: */
                     19: char *ldf_r_sbtst_msg1[] =
                     20: {
                     21:      "  LDF -test 1 -Resop, Register data ",           /* subtest # 1 */
                     22:      "  LDF -test 2 -Resop, Cache data "               /* subtest # 2 */
                     23: };
                     24: 
                     25: 
                     26: /*
                     27:  * ERROR MESSAGE TABLE
                     28: */
                     29: char *ldf_r_err_msg[] =
                     30: {
                     31:      "-expected fault didn't occur\n"                  /* error code = 1 */
                     32: };
                     33: 
                     34: 
                     35: /***************************************************************************
                     36: *
                     37: *              LOAD SINGLE PRECISION RESERVED OPERAND MONITOR
                     38: *
                     39: ***************************************************************************/
                     40: ldf_event()
                     41: {
                     42:        asm(".globl _ldf_e");
                     43:        asm("_ldf_e:");                         /* entry address */
                     44:        if( (cycle == 1) && (prt_hdrs) )        /* print header on 1st cycle */
                     45:        {
                     46:           writes(" LDF");
                     47:        }
                     48:        stuff_ldf_r_array();                    /* fill in subtest ptr array */
                     49:        ldf_r_sched();                          /* load reserved operands    */
                     50:        asm("jmp *return");;                    /* return to test monitor    */
                     51: } 
                     52: 
                     53: 
                     54: 
                     55: 
                     56: 
                     57: 
                     58: /*****************************************************************************
                     59: *
                     60: *              LDF - RESERVED OPERAND TEST SEQUENCER
                     61: *
                     62: * This function will select the subtest and call the subtest schedualer
                     63: *
                     64: *****************************************************************************/
                     65: ldf_r_sched()
                     66: {
                     67: int sbtst_index;
                     68:        for( subtest = 1; subtest < max_ldf_r_sbtst_no; subtest++ )
                     69:        {
                     70:             sbtst_index = subtest - 1;
                     71:             subtest_message = ldf_r_sbtst_msg1[ sbtst_index ];
                     72:             test_ldf_r( ldf_r_tests[ sbtst_index ] );  /* execute the test */
                     73:        }
                     74: }
                     75: 
                     76: 
                     77: 
                     78: 
                     79: 
                     80: 
                     81: 
                     82: /*****************************************************************************
                     83: *
                     84: *              LDF RESERVED OPERAND TEST 
                     85: *
                     86: *  This function will call the specific subtest sequences. The subtest will
                     87: *  load a Reserved Operand. A Reserved Operand Fault ( code 2d ) should 
                     88: *  occur. The fault handler will return control to this function.
                     89: *
                     90: *****************************************************************************/
                     91: test_ldf_r( current_subtest ) 
                     92: int (*current_subtest)();                      /* pointer to test sequence */
                     93: {
                     94:        asm("moval (r14),_pre_event_sp");       /* save the stack pointer   */
                     95:        asm("moval (r13),_pre_event_fp");       /* save the frame pointer   */
                     96:        asm("moval _ldf_r_ret,_event_return");  /* set event return address */
                     97: /*
                     98:  *  test all of the data pattenrs
                     99: */
                    100:        for( index = 0; index < max_ldf_resop_index; index++ );
                    101:        {
                    102:            sgl_ld_acc = ldf_resop_data[index]; /* get Reserved Op data    */
                    103:            asm("_ldf_r_loop:");
                    104:            exp_event = RESOP_CODE;             /* RESOP fault expected    */
                    105:            (*current_subtest)();               /* run the test            */
                    106: /* 
                    107:  *       We shouldn't get to this point - if we do then there was no trap.
                    108: */
                    109:            err_code = 1;                       /* error type 1 (no event) */
                    110:            exp_event = FALSE;                  /* no events are expected  */
                    111:            asm("movl _pre_event_sp,r14");      /* restore stack pointer   */
                    112:            asm("movl _pre_event_fp,r13");      /* restore frame pointer   */
                    113:            if( force_loop )
                    114:            {
                    115:                 loop_val_1b = sgl_ld_acc;      /* save last OP_1 pattern  */
                    116:                 sgl_ld_acc = loop_val_1a;      /* get next OP_1 pattern   */
                    117:                 loop_val_1a = loop_val_1b;     /* get ready for next loop */
                    118:                 asm("jmp _ldf_r_loop");        /* loop forever            */
                    119:            };
                    120:            errcnt++;                           /* bump the error count    */
                    121:            if( prt_error ) {
                    122:                 error_message = ldf_r_err_msg[ err_code -1 ];
                    123:                 ldf_r_print_error( error_message );
                    124:            };
                    125:            if ( halt_flg )                     /* halt on error           */
                    126:                 ldf_err_hlt();
                    127:            if ( loop_on_err ) 
                    128:            {
                    129:                 get_ldf_r_loop_data();         /* set up the loop data    */
                    130:                 force_loop = 1;                /* set the force loop flag */
                    131:                 asm("jmp _ldf_r_loop");        /* and loop                */
                    132:            };
                    133: /*
                    134:  *  Reserved Operand events will return here:
                    135: */
                    136:            asm(".globl _ldf_r_ret"); 
                    137:            asm("_ldf_r_ret:"); 
                    138:            if( force_loop )
                    139:            {
                    140:                 get_ldf_r_loop_data();         /* set up the loop data    */
                    141:                 asm("jmp _ldf_r_loop");        /* loop on previous error  */
                    142:            };
                    143:       };
                    144:       asm("movl _pre_event_sp,r14");           /* restore stack pointer   */
                    145:       asm("movl _pre_event_fp,r13");           /* restore frame pointer   */
                    146: }  /* end of subtest schedualer */
                    147: 
                    148: 
                    149: 
                    150: 
                    151: 
                    152: /***************************************************************************
                    153: *
                    154: *              SUBTEST 1 - Register data
                    155: *
                    156: ***************************************************************************/
                    157: ldf_r_reg()
                    158: {
                    159:           asm("movl _sgl_ld_acc,r4");          /* move the data to a reg */
                    160:           asm("ldf r4");                       /* trigger the fault      */
                    161:           asm("nop");                          /* waste a little time    */
                    162:           asm("nop");                          /* waste a little time    */
                    163:           sgl_dummy1 = 0;                      /* dummy instr for "C"    */
                    164: }
                    165: 
                    166: 
                    167: 
                    168: 
                    169: 
                    170: /***************************************************************************
                    171: *
                    172: *              SUBTEST 2 - Cache data
                    173: *
                    174: ***************************************************************************/
                    175: ldf_r_cache()
                    176: {
                    177:           asm("ldf _sgl_ld_acc");              /* trigger the fault      */
                    178:           asm("nop");                          /* waste a little time    */
                    179:           asm("nop");                          /* waste a little time    */
                    180:           sgl_dummy1 = 0;                      /* dummy instr for "C"    */
                    181: }
                    182: 
                    183: 
                    184: 
                    185: 
                    186: /******************************************************************************
                    187: *
                    188: *      FILL IN THE SUBTEST POINTER ARRAY WITH THE SUBTEST ADDRESSES
                    189: *
                    190: ******************************************************************************/
                    191: stuff_ldf_r_array()
                    192: {
                    193:        ldf_r_tests[0] = ldf_r_reg;             /* subtest 1 (register data) */
                    194:        ldf_r_tests[1] = ldf_r_cache;           /* subtest 2 (cache data)    */
                    195:        max_ldf_r_sbtst_no = 2;                 /* set # of reserved op tsts */
                    196: }
                    197: 
                    198: 
                    199: 
                    200: 
                    201: /******************************************************************************
                    202: *
                    203: *              HALT ON ERROR
                    204: *
                    205: ******************************************************************************/
                    206: ldf_err_hlt()
                    207: {
                    208:        asm("movl _test_no,r0");        /* r0  = test number          */
                    209:        asm("movl _subtest,r1");        /* r1  = subtest number       */
                    210:        asm("movl _err_code,r2");       /* r2  = error code           */
                    211:        asm("movl _cycle,r3");          /* r3  = cycle count          */
                    212:        asm("movl _sgl_ld_acc,r4");     /* r4  = operand              */
                    213:        asm(".globl _ldf_resop_hlt");
                    214:        asm("_ldf_resop_hlt:");         /* PC after the halt          */
                    215:        asm("halt");                    /* HALT ...                   */
                    216:        sgl_dummy1 = 0;                 /* dummy statement for 'C'    */
                    217: }
                    218: 
                    219: 
                    220: 
                    221: 
                    222: 
                    223: /******************************************************************************
                    224: *
                    225: *              PRINT AN ERROR MESSAGE
                    226: *
                    227: ******************************************************************************/
                    228: ldf_r_print_error()
                    229: {
                    230:        writes("\ncycle: ");
                    231:        writed( cycle );
                    232:        writes( subtest_message );
                    233:        writes( error_message );
                    234:        writes("operand = ");
                    235:        write32h( sgl_ld_acc );
                    236:        writes(" \n");
                    237: }
                    238: 
                    239: 
                    240: 
                    241: 
                    242: 
                    243: /******************************************************************************
                    244: *
                    245: *              GET DATA PATTERNS FOR LOOPING ON THE ERROR
                    246: *
                    247: ******************************************************************************/
                    248: get_ldf_r_loop_data()
                    249: {
                    250:      if( (index > 0) && (!no_data_swap_on_lp) )
                    251:      {
                    252:          old_indx = index -1;                  /* get the last data pattern */
                    253:           loop_val_1a  = ldf_resop_data[old_indx]; 
                    254:      }
                    255:      else
                    256:           loop_val_1a = sgl_ld_acc;            /* use the same data pattern */
                    257: }
                    258: 
                    259: 
                    260: 
                    261: 

unix.superglobalmegacorp.com

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