|
|
1.1 ! root 1: ! 2: #include "dmp_defs.h" ! 3: ! 4: ! 5: /*********************************************************************** ! 6: * ! 7: * Verify single precision results for a store type operation ! 8: * ! 9: * The operand is assumed to be in sgl_value_3. This test assumes that ! 10: * the flag bits of the PSL will be set by the operation. This test also ! 11: * assumes that the accumulator shouldn't be changed by the operation. ! 12: ***********************************************************************/ ! 13: chk_sgl_s() ! 14: { ! 15: sgl_ld_acc = dbl_ld_acc.m; /* move the data to */ ! 16: sgl_st_acc = dbl_st_acc.m; /* the sgl data */ ! 17: sgl_expected = dbl_expected.m; /* operands */ ! 18: sgl_value_1 = dbl_value_1.m; ! 19: sgl_value_2 = dbl_value_2.m; ! 20: sgl_value_3 = dbl_value_3.m; ! 21: if( sgl_ld_acc && 0x7f800000 ) /* get final ACC expected */ ! 22: sgl_value_5 = sgl_ld_acc; ! 23: else ! 24: sgl_value_5 = 0; ! 25: exp_psl = init_psl & 0xffffff71; /* clear DBL & flag bits */ ! 26: exp_psl |= PSL_C; /* set the CARRY bit */ ! 27: if( sgl_expected < 0 ) ! 28: exp_psl |= PSL_N; /* set the NEGATIVE bit */ ! 29: else if( !sgl_expected ) ! 30: exp_psl |= PSL_Z; /* set the ZERO bit */ ! 31: if( sgl_value_3 != sgl_expected ) { ! 32: errcnt++; ! 33: if( prt_error ) ! 34: prt_s_st_e( bad_result_msg ); ! 35: if( halt_flg ) ! 36: hlt_s_st_e( 1 ); /* error code 1 */ ! 37: if( loop_on_err ) ! 38: force_loop = TRUE; /* set loop flag */ ! 39: } ! 40: else if( psl_val != exp_psl ) { ! 41: errcnt++; ! 42: if( prt_error ) ! 43: prt_s_st_e( bad_psl_msg ); ! 44: if( halt_flg ) ! 45: hlt_s_st_e( 2 ); /* error code 2 */ ! 46: if( loop_on_err ) ! 47: force_loop = TRUE; /* set loop flag */ ! 48: } ! 49: else if( no_page_faults != exp_page_faults ) { ! 50: errcnt++; ! 51: if( prt_error ) ! 52: prt_s_st_e( trans_flt_cnt_msg ); ! 53: if( halt_flg ) ! 54: hlt_s_st_e( 3 ); /* error code 3 */ ! 55: if( loop_on_err ) ! 56: force_loop = TRUE; /* set loop flag */ ! 57: } ! 58: else if( sgl_st_acc != sgl_value_5 ) { ! 59: errcnt++; ! 60: if( prt_error ) ! 61: prt_s_st_e( acc_modified_msg ); ! 62: if( halt_flg ) ! 63: hlt_s_st_e( 5 ); /* error code 5 */ ! 64: if( loop_on_err ) ! 65: force_loop = TRUE; /* set loop flag */ ! 66: } ! 67: else { ! 68: reg_no = 0; ! 69: regs_ok = TRUE; ! 70: while( (reg_no <= 13) && (regs_ok) ) /* check 1st 13 regs */ ! 71: if( store_regs[ reg_no ] == exp_regs[ reg_no ] ) ! 72: reg_no++; ! 73: else ! 74: regs_ok = FALSE; ! 75: if( !regs_ok ) { ! 76: errcnt++; ! 77: if( prt_error ) ! 78: prt_s_st_e( reg_modified_msg ); ! 79: if( halt_flg ) ! 80: hlt_s_st_e( 4 ); /* error code 4 */ ! 81: if( loop_on_err ) ! 82: force_loop = TRUE; /* set loop flag */ ! 83: } ! 84: } ! 85: } ! 86: ! 87: ! 88: ! 89: /************************************************************************ ! 90: * PRINT AN ERROR MESSAGE ! 91: * ! 92: * cycle: xx. DMP test xx. <inst>. <error message>, index = xx ! 93: * addressing mode: <addressing mode description> ! 94: * inst buf= xx xx xx xx xx xx xx xx xx xx xx -page faults on byte(s) 0, x ! 95: * ! 96: * initial Acc = xxxxxxxx, stored = xxxxxxxx, xx page faults occurred ! 97: * final Acc = xxxxxxxx, expected = xxxxxxxx, xx page faults expected ! 98: * initial PSL = xxxxxxxx, final PSL = xxxxxxxx, expected PSL = xxxxxxxx ! 99: * or ! 100: * operand #1 = xxxxxxxx, stored = xxxxxxxx, xx page faults occurred ! 101: * operand #2 = xxxxxxxx, expected = xxxxxxxx, xx page faults expected ! 102: * initial Acc = xxxxxxxx, final Acc = xxxxxxxx, expected Acc = xxxxxxxx ! 103: * initial PSL = xxxxxxxx, final PSL = xxxxxxxx, expected PSL = xxxxxxxx ! 104: ************************************************************************/ ! 105: prt_s_st_e( message ) ! 106: char *message; ! 107: { ! 108: prt_dmp_er_msg( message ); /* print the error header */ ! 109: if( no_ops == 1 ) { ! 110: writes("initial Acc = "); ! 111: write32h( sgl_ld_acc ); /* print accumulator data */ ! 112: writes(", stored = "); ! 113: write32h( sgl_value_3 ); /* print the final result */ ! 114: writes(", "); ! 115: writed( no_page_faults ); /* print page fault data */ ! 116: writes(" page faults occurred\n"); ! 117: writes(" final Acc = "); /* print final Acc vaule */ ! 118: write32h( sgl_st_acc ); ! 119: writes(", expected = "); /* print expected result */ ! 120: write32h( sgl_expected ); ! 121: writes(", "); ! 122: writed( exp_page_faults ); /* print exp # page faults */ ! 123: writes(" page faults expected\n"); ! 124: } else { /* MULL2 or MULL3 */ ! 125: writes(" operand #1 = "); ! 126: write32h( sgl_value_1 ); /* print accumulator data */ ! 127: writes(", stored = "); ! 128: write32h( sgl_value_3 ); /* print the final result */ ! 129: writes(", "); ! 130: writed( no_page_faults ); /* print page fault data */ ! 131: writes(" page faults occurred\n"); ! 132: writes(" operand #2 = "); /* print final Acc vaule */ ! 133: write32h( sgl_value_2 ); ! 134: writes(", expected = "); /* print expected result */ ! 135: write32h( sgl_expected ); ! 136: writes(", "); ! 137: writed( exp_page_faults ); /* print exp # page faults */ ! 138: writes(" page faults expected\n"); ! 139: if( message == acc_modified_msg ) { ! 140: writes("initial Acc = "); ! 141: write32h( sgl_ld_acc ); /* print accumulator data */ ! 142: writes(", final Acc = "); ! 143: write32h( sgl_st_acc ); /* print the final result */ ! 144: writes(", expected Acc = "); ! 145: write32h( sgl_value_5 ); ! 146: writec('\n'); ! 147: } ! 148: } ! 149: if( message == bad_psl_msg ) { ! 150: writes("initial PSL = "); /* print PSL data */ ! 151: write32h( init_psl ); ! 152: writes(", final PSL = "); ! 153: write32h( psl_val ); ! 154: writes(", expected PSL = "); ! 155: write32h( exp_psl ); ! 156: writec('\n'); ! 157: } ! 158: if( message == reg_modified_msg ) /* print modified register */ ! 159: prt_reg_data(); /* print bad register */ ! 160: } ! 161: ! 162: ! 163: ! 164: /************************************************************************** ! 165: * Set up the registers and halt ! 166: **************************************************************************/ ! 167: hlt_s_st_e( code ) ! 168: int code; ! 169: { ! 170: sgl_dummy1 = code; ! 171: asm("movl _test_no,r0"); /* r0 = test number */ ! 172: asm("movl _addr_code,r1"); /* r1 = addressing mode */ ! 173: asm("movl _sgl_dummy1,r2"); /* r2 = error code */ ! 174: asm("movl _cycle,r3"); /* r3 = cycle count */ ! 175: asm("movl _sgl_ld_acc,r4"); /* r4 = initial Acc. */ ! 176: asm("movl _sgl_st_acc,r5"); /* r5 = final Acc. */ ! 177: asm("movl _sgl_value_3,r6"); /* r6 = result stored */ ! 178: asm("movl _sgl_expected,r7"); /* r7 = expected result */ ! 179: asm("movl _addr_code,r8"); /* r8 = addr mode */ ! 180: if( no_ops > 1 ) { /* MULL2 or MULL3 */ ! 181: asm("movl _sgl_value_1,r9"); /* r9 = operand #1 */ ! 182: asm("movl _sgl_value_1,r10"); /* r10 = operand #2 */ ! 183: } ! 184: if( code == 2 ) { ! 185: asm("movl _init_psl,r11"); /* r11 = initial psl */ ! 186: asm("movl _psl_val,r12"); /* r12 = final psl */ ! 187: asm("movl _exp_psl,r13"); /* r13 = expected psl */ ! 188: } ! 189: else if( code == 3 ) { ! 190: asm("movl _no_page_faults,r11"); /* r11 = # page faults */ ! 191: asm("movl _exp_page_faults,r12"); /* r12 = # faults expected */ ! 192: } ! 193: else if( code == 4 ) { ! 194: asm("movl _reg_no,r11"); /* r11 = bad register # */ ! 195: asm("movl _store_regs[r11],r12"); /* r12 = final (bad) value */ ! 196: asm("movl _exp_regs[r11],r13"); /* r13 = expected value */ ! 197: } ! 198: asm(".globl _hlt_sgl_st"); ! 199: asm("_hlt_sgl_st:"); ! 200: asm("halt"); ! 201: } ! 202:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.