|
|
1.1 ! root 1: ! 2: #include "dmp_defs.h" ! 3: ! 4: /*********************************************************************** ! 5: * ! 6: * Verify final single precision accumulator value ! 7: * ! 8: * This code makes the assumption that the PSL is unchanged by the ! 9: * instruction (specific PSL modifying instructions are checked elsewhere). ! 10: * The operand, if any will, be in sgl_value_1. ! 11: ***********************************************************************/ ! 12: chk_sgl_acc() ! 13: { ! 14: sgl_ld_acc = dbl_ld_acc.m; /* move the data to */ ! 15: sgl_st_acc = dbl_st_acc.m; /* the sgl data */ ! 16: sgl_expected = dbl_expected.m; /* operands */ ! 17: sgl_value_1 = dbl_value_1.m; ! 18: sgl_value_2 = dbl_value_2.m; ! 19: exp_psl = init_psl & 0xffffff7f; /* clear PSL's DBL bit */ ! 20: if( sgl_st_acc != sgl_expected ) { ! 21: errcnt++; ! 22: if( prt_error ) ! 23: prt_s_acc_e( bad_result_msg ); ! 24: if( halt_flg ) ! 25: hlt_s_acc_e( 1 ); /* error code 1 */ ! 26: if( loop_on_err ) ! 27: force_loop = TRUE; /* set loop flag */ ! 28: } ! 29: else if( psl_val != exp_psl ) { /* check the final PSL */ ! 30: errcnt++; ! 31: if( prt_error ) ! 32: prt_s_acc_e( bad_psl_msg ); ! 33: if( halt_flg ) ! 34: hlt_s_acc_e( 2 ); /* error code 2 */ ! 35: if( loop_on_err ) ! 36: force_loop = TRUE; /* set loop flag */ ! 37: } ! 38: else if( no_page_faults != exp_page_faults ) { ! 39: errcnt++; ! 40: if( prt_error ) ! 41: prt_s_acc_e( trans_flt_cnt_msg ); ! 42: if( halt_flg ) ! 43: hlt_s_acc_e( 3 ); /* error code 3 */ ! 44: if( loop_on_err ) ! 45: force_loop = TRUE; /* set loop flag */ ! 46: } ! 47: else /* check for corrupted registers */ ! 48: { ! 49: reg_no = 0; ! 50: regs_ok = TRUE; ! 51: while( (reg_no <= 13) && (regs_ok) ) /* check 1st 13 regs */ ! 52: if( store_regs[ reg_no ] == exp_regs[ reg_no ] ) ! 53: reg_no++; ! 54: else ! 55: regs_ok = FALSE; ! 56: if( !regs_ok ) ! 57: { ! 58: errcnt++; ! 59: if( prt_error ) ! 60: prt_s_acc_e( reg_modified_msg ); ! 61: if( halt_flg ) ! 62: hlt_s_acc_e( 4 ); /* error code 4 */ ! 63: if( loop_on_err ) ! 64: force_loop = TRUE; /* set loop flag */ ! 65: } ! 66: } ! 67: } ! 68: ! 69: ! 70: ! 71: /************************************************************************ ! 72: * PRINT AN ERROR MESSAGE OF THE FORM ! 73: * ! 74: * cycle: xx. DMP test xx. <inst>. <error message>, index = xx ! 75: * addressing mode: <addressing mode description> ! 76: * inst buf= xx xx xx xx xx xx xx xx xx xx xx -page faults on byte(s) 0, x ! 77: * initial Acc = xxxxxxxx, final Acc = xxxxxxxx, xx page faults occurred ! 78: * operand = xxxxxxxx, expected Acc = xxxxxxxx, xx page faults expected ! 79: * initial PSL = xxxxxxxx, final PSL = xxxxxxxx, expected PSL = xxxxxxxx ! 80: ************************************************************************/ ! 81: prt_s_acc_e( message ) ! 82: char *message; ! 83: { ! 84: prt_dmp_er_msg( message ); /* print the error header */ ! 85: writes("initial Acc = "); ! 86: write32h( sgl_ld_acc ); /* print initial Acc value */ ! 87: writes(", final Acc = "); ! 88: write32h( sgl_st_acc ); /* print final Acc value */ ! 89: writes(", "); ! 90: writed( no_page_faults ); /* print # page faults */ ! 91: writes(" page faults occurred\n"); ! 92: if( no_ops ) { ! 93: writes(" operand = "); ! 94: write32h( sgl_value_1 ); /* print the operand used */ ! 95: writes(", "); ! 96: } else ! 97: writes(" "); /* align the expected Acc */ ! 98: writes("expected Acc = "); ! 99: write32h( sgl_expected ); /* print the expected Acc */ ! 100: writes(", "); ! 101: writed( exp_page_faults ); /* print # faults expected */ ! 102: writes(" page faults expected\n"); ! 103: if( psl_val != exp_psl ) ! 104: { ! 105: writes("initial PSL = "); /* print PSL data */ ! 106: write32h( init_psl ); ! 107: writes(", final PSL = "); ! 108: write32h( psl_val ); ! 109: writes(", expected PSL = "); ! 110: write32h( exp_psl ); ! 111: writec('\n'); ! 112: } ! 113: if( message == reg_modified_msg ) /* print modified register */ ! 114: prt_reg_data(); /* print bad register */ ! 115: } ! 116: ! 117: ! 118: ! 119: ! 120: /************************************************************************** ! 121: * Set up the registers and halt ! 122: **************************************************************************/ ! 123: hlt_s_acc_e( code ) ! 124: int code; ! 125: { ! 126: sgl_dummy1 = code; ! 127: asm("movl _test_no,r0"); /* r0 = test number */ ! 128: asm("movl _addr_code,r1"); /* r1 = addr mode code */ ! 129: asm("movl _sgl_dummy1,r2"); /* r2 = error code */ ! 130: asm("movl _cycle,r3"); /* r3 = cycle count */ ! 131: asm("movl _sgl_ld_acc,r4"); /* r4 = initial Acc. */ ! 132: asm("movl _sgl_st_acc,r5"); /* r5 = final Acc. */ ! 133: if( !no_ops ) ! 134: sgl_value_1 = 0; ! 135: asm("movl _sgl_value_1,r6"); /* r6 = operand (or 0) */ ! 136: if( code == 1 ) { /* data error? */ ! 137: asm("movl _sgl_expected,r7"); /* r7 = expected Acc */ ! 138: asm("movl _index,r8"); /* r8 = data index */ ! 139: } ! 140: else if( code == 2 ) { /* PSL error? */ ! 141: asm("movl _init_psl,r7"); /* r7 = initial PSL */ ! 142: asm("movl _psl_val,r8"); /* r8 = final PSL value */ ! 143: asm("movl _init_psl,r9"); /* r9 = expected PSL */ ! 144: asm("movl _index,r10"); /* r10 = data index */ ! 145: } ! 146: else if( code == 3 ) { /* page fault error? */ ! 147: asm("movl _no_page_faults,r7"); /* r7 = # page faults */ ! 148: asm("movl _exp_page_faults,r8"); /* r8 = # faults expected */ ! 149: asm("movl _index,r9"); /* r9 = data index */ ! 150: } ! 151: else if( code == 4 ) { /* register error? */ ! 152: asm("movl _reg_no,r7"); /* r7 = bad register # */ ! 153: asm("movl _store_regs[r7],r8"); /* r8 = final (bad) value */ ! 154: asm("movl _exp_regs[r7],r9"); /* r9 = expected value */ ! 155: asm("movl _index,r10"); /* r10 = data index */ ! 156: } ! 157: asm(".globl _hlt_sgl_acc"); ! 158: asm("_hlt_sgl_acc:"); ! 159: asm("halt"); ! 160: } ! 161: ! 162:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.