|
|
1.1 ! root 1: ! 2: #include "fpp_defs.h"; ! 3: ! 4: ! 5: /************************************************************************** ! 6: * ! 7: * FLOATING POINT PROCESSOR EVENTS TEST DEFINITIONS ! 8: * ! 9: * 29-Mar-85 JJM: mauled "dmp_defs.h" to make this guy ! 10: * 9-Apr-85 JJM: added the "sgl_dbl_un" union and "post_evt_acc" ! 11: * 12-Apr-85 JJM: added the push_cnt and exp_push_cnt variables ! 12: * 24-Apr-85 JJM: added inst_completion test data declarations ! 13: * 25-Apr-85 JJM: changed post_evt_acc to "u64" and removed sgl_dbl_un ! 14: * 2-May-85 JJM: added stuff for checking clock events ! 15: * ! 16: **************************************************************************/ ! 17: ! 18: ! 19: /* ! 20: * Structure definition used to call the subtests ! 21: */ ! 22: struct test_t { ! 23: int (*test)(); /* ptr to the test procedure */ ! 24: char *name; /* name of the test procedure */ ! 25: }; ! 26: extern struct test_t fpp_test_tbl[]; /* table of "FPP" WCS tests */ ! 27: extern int fpp_test_cnt; /* number of "FPP" tests */ ! 28: extern int pipe_test_index; /* index to the pipeline test */ ! 29: ! 30: extern struct test_t no_fpp_test_tbl[]; /* table of "NO-FPP" WCS tests */ ! 31: extern int no_fpp_test_cnt; /* number of "NO-FPP" tests */ ! 32: ! 33: extern struct test_t pipe_test_tbl[]; /* table of pipeline subtests */ ! 34: extern int no_pipe_tests; /* number of pipeline subtests */ ! 35: ! 36: ! 37: /* ! 38: * Structure definition for all non-piped event test data patterns ! 39: */ ! 40: struct evt_data_t { ! 41: struct u64 op_1; ! 42: struct u64 op_2; ! 43: }; ! 44: ! 45: /* ! 46: * Instruction definition for the Reserved Operand Test ! 47: */ ! 48: struct evt_inst_t { ! 49: int inst_code; /* instruction's op code */ ! 50: char *name; /* instruction's name */ ! 51: int no_operands; /* # operands used */ ! 52: int precision; /* sgl / dbl precision */ ! 53: struct evt_data_t *evt_data; /* ptr to data patterns */ ! 54: int *evt_data_cnt; /* # of data patterns */ ! 55: }; ! 56: ! 57: extern struct evt_inst_t resop_tbl[]; /* inst's for RESOP test */ ! 58: extern int size_resop_tbl; /* # of RESOP instr's */ ! 59: ! 60: ! 61: /* ! 62: * Instruction definition for the FPP EMULATION TRAP interface test ! 63: */ ! 64: struct fpm_inst_t { ! 65: int inst_code; /* instruction's op code */ ! 66: char *name; /* instruction's name */ ! 67: int no_operands; /* # operands used */ ! 68: int precision; /* sgl / dbl precision */ ! 69: }; ! 70: ! 71: extern struct fpm_inst_t fpm_tbl[]; /* inst's for FPM test */ ! 72: extern int size_fpm_tbl; /* # of FPM trap isntr's */ ! 73: ! 74: ! 75: ! 76: /* ! 77: * Instruction definition for the Overflow and Underflow tests ! 78: */ ! 79: struct ovfl_inst_t { ! 80: int inst_code; /* instruction's op code */ ! 81: char *name; /* instruction's name */ ! 82: int no_operands; /* # operands used */ ! 83: int precision; /* sgl / dbl precision */ ! 84: struct evt_data_t *ovfl_data; /* ptr to Overflow data */ ! 85: int *ovfl_cnt; /* # of OVFL data pat's */ ! 86: struct evt_data_t *undfl_data; /* ptr to Underflow data */ ! 87: int *undfl_cnt; /* # of UNDFL data pat's */ ! 88: }; ! 89: ! 90: extern struct ovfl_inst_t ovfl_tbl[]; /* OVFL / UNDFL instr's */ ! 91: extern int size_ovfl_tbl; /* # of OVFL/UNDFL insts */ ! 92: ! 93: ! 94: /** Reserved Operand Data Patterns **/ ! 95: extern struct evt_data_t flt_resops[]; /* vanilla Reserved Operands */ ! 96: extern int flt_resop_cnt; /* # of vanilla patterns */ ! 97: extern struct evt_data_t cmp2_resops[]; /* CMPF2, CMPD2 Reserved ops */ ! 98: extern int cmp2_resop_cnt; /* # of CMPx2 data patterns */ ! 99: extern struct evt_data_t logf_resops[]; /* Reserved data for LOGF */ ! 100: extern int logf_resop_cnt; /* # of LOGF data patterns */ ! 101: ! 102: /** Overflow Operand Data Patterns **/ ! 103: extern struct evt_data_t adf_ov_dat[]; /* Overflow data for ADDF */ ! 104: extern int adf_ov_cnt; /* # of ADDF ovfl patterns */ ! 105: extern struct evt_data_t suf_ov_dat[]; /* Overflow data for SUBF */ ! 106: extern int suf_ov_cnt; /* # of SUBF ovfl patterns */ ! 107: extern struct evt_data_t muf_ov_dat[]; /* Overflow data for MULF */ ! 108: extern int muf_ov_cnt; /* # of MULF ovfl patterns */ ! 109: extern struct evt_data_t dif_ov_dat[]; /* Overflow data for DIVF */ ! 110: extern int dif_ov_cnt; /* # of DIVF ovfl patterns */ ! 111: extern struct evt_data_t add_ov_dat[]; /* Overflow data for ADDD */ ! 112: extern int add_ov_cnt; /* # of ADDD ovfl patterns */ ! 113: extern struct evt_data_t sud_ov_dat[]; /* Overflow data for SUBD */ ! 114: extern int sud_ov_cnt; /* # of SUBD ovfl patterns */ ! 115: extern struct evt_data_t mud_ov_dat[]; /* Overflow data for MULD */ ! 116: extern int mud_ov_cnt; /* # of MULD ovfl patterns */ ! 117: extern struct evt_data_t did_ov_dat[]; /* Overflow data for DIVD */ ! 118: extern int did_ov_cnt; /* # of DIVD ovfl patterns */ ! 119: extern struct evt_data_t cvdf_ov_dat[]; /* Overflow data for CVDF */ ! 120: extern int cvdf_ov_cnt; /* # of CVDF ovfl patterns */ ! 121: extern struct evt_data_t exf_ov_dat[]; /* Overflow data for EXPF */ ! 122: extern int exf_ov_cnt; /* # of EXPF ovfl patterns */ ! 123: ! 124: /** Underflow Operand Data Patterns **/ ! 125: extern struct evt_data_t adf_u_dat[]; /* Underflow data for ADDF */ ! 126: extern int adf_u_cnt; /* # of ADDF undfl patterns */ ! 127: extern struct evt_data_t suf_u_dat[]; /* Underflow data for SUBF */ ! 128: extern int suf_u_cnt; /* # of SUBF undfl patterns */ ! 129: extern struct evt_data_t muf_u_dat[]; /* Underflow data for MULF */ ! 130: extern int muf_u_cnt; /* # of MULF undfl patterns */ ! 131: extern struct evt_data_t dif_u_dat[]; /* Underflow data for DIVF */ ! 132: extern int dif_u_cnt; /* # of DIVF undfl patterns */ ! 133: extern struct evt_data_t add_u_dat[]; /* Underflow data for ADDD */ ! 134: extern int add_u_cnt; /* # of ADDD undfl patterns */ ! 135: extern struct evt_data_t sud_u_dat[]; /* Underflow data for SUBD */ ! 136: extern int sud_u_cnt; /* # of SUBD undfl patterns */ ! 137: extern struct evt_data_t mud_u_dat[]; /* Underflow data for MULD */ ! 138: extern int mud_u_cnt; /* # of MULD undfl patterns */ ! 139: extern struct evt_data_t did_u_dat[]; /* Underflow data for DIVD */ ! 140: extern int did_u_cnt; /* # of DIVD undfl patterns */ ! 141: extern struct evt_data_t exf_u_dat[]; /* Underflow data for EXPF */ ! 142: extern int exf_u_cnt; /* # of EXPF undfl patterns */ ! 143: ! 144: /** Integer Overflow Fault Data Patterns **/ ! 145: extern struct evt_data_t mull_ov_dat[]; /* Int Ovfl data for MULL[23]*/ ! 146: extern int mull_ov_cnt; /* # of MULL Int Ovfl pat's */ ! 147: extern struct evt_data_t cvdl_ov_dat[]; /* Int Ovfl data for CVDL */ ! 148: extern int cvdl_ov_cnt; /* # of CVDL Int Ovfl pat's */ ! 149: extern struct evt_data_t cvfl_ov_dat[]; /* Int Ovfl data for CVFL */ ! 150: extern int cvfl_ov_cnt; /* # of CVFL Int Ovfl pat's */ ! 151: ! 152: /** More or Less Miscellaneous Data Patterns **/ ! 153: extern struct u64 acc_data[]; /* non event causing data */ ! 154: extern struct evt_data_t null_data[]; /* empty data definition */ ! 155: extern struct evt_data_t zero_divide_data[]; /* Divide By 0 data patterns */ ! 156: extern int zero_divide_cnt; /* # Divide By 0 patterns */ ! 157: extern struct evt_data_t fpm_data[]; /* FPP Emulation data pat's */ ! 158: extern int fpm_data_cnt; /* # FPP Emulation pat's */ ! 159: ! 160: /** Data patterns for pipelined instr. completion & queue clearing tests **/ ! 161: extern struct addd_data_t pipe1_data[]; /* = DIVD data patterns */ ! 162: extern int max_pipe1_index; /* # of data patterns (-1) */ ! 163: extern struct addd_data_t pipe2_data[]; /* = MULD data patterns */ ! 164: extern int max_pipe2_index; /* # of data patterns (-1) */ ! 165: extern struct addd_data_t pipe3_data[]; /* = LOGF data patterns */ ! 166: extern int max_pipe3_index; /* # of data patterns (-1) */ ! 167: extern struct addd_data_t pipe4_data[]; /* = MULF data patterns */ ! 168: extern int max_pipe4_index; /* # of data patterns (-1) */ ! 169: extern struct addd_data_t pipe7_data[]; /* = DIVF data patterns */ ! 170: extern int max_pipe7_index; /* # of data patterns (-1) */ ! 171: ! 172: ! 173: /* ! 174: * variables used with the event tests ! 175: */ ! 176: extern int evt_inst; /* User specified op-code */ ! 177: extern int user_mode; /* FLAG -run in User Mode */ ! 178: extern int op_code; /* op-code of the inst. */ ! 179: extern char *op_name; /* ascii instruction name */ ! 180: extern int precision; /* sgl / dbl instruction */ ! 181: extern int acc_ld_size; /* load sgl of dbl operand */ ! 182: extern int acc_st_size; /* store sgl of dbl operand */ ! 183: extern int no_ops; /* # of operands used */ ! 184: extern int i_cache_hit; /* instr. cache hit flag */ ! 185: extern int max_index; /* last data index to use */ ! 186: extern int op_type; /* load / store type instr. */ ! 187: extern int d_to_s; /* inst converts dbl to sgl */ ! 188: extern int s_to_d; /* inst converts sgl to dbl */ ! 189: extern int sgl_op; /* inst has sgl operand(s) */ ! 190: extern int force_sp; /* flag -set the Stack Ptr */ ! 191: extern int min_shift; /* min # bytes to shift code */ ! 192: extern int inst_buf[]; /* instruction code buffer */ ! 193: extern int end_of_inst_buf; /* end address of code buff */ ! 194: extern int code_addr; /* start of test code */ ! 195: extern int addr_size; /* # bytes in addr specifier*/ ! 196: extern int addr_1; /* address specifier # 1 */ ! 197: extern int addr_2; /* address specifier # 2 */ ! 198: extern int addr_3; /* address specifier # 3 */ ! 199: extern int inst_size; /* # of bytes in instr. */ ! 200: extern int shift_count; /* # bytes to shift inst_buf*/ ! 201: extern int no_page_faults; /* # addr translation faults*/ ! 202: extern int exp_page_faults; /* # addr trans faults exp'd*/ ! 203: extern int evt_disabled; /* flag -event is disabled */ ! 204: extern short disable_mask; /* events to disable in PSW */ ! 205: extern int push_cnt; /* # l-wds pushed on stack */ ! 206: extern int exp_push_cnt; /* # l-wds expected on stk */ ! 207: extern int Codek; /* current code cache key */ ! 208: extern int rtc_occurred; /* flag -clock event seen */ ! 209: extern int clock_retrys; /* how long to wait for clk */ ! 210: extern int load_type_inst; /* ACC loaded flag */ ! 211: extern int pipe_test; /* flag -pipe test or not */ ! 212: extern int pipe_inst1; /* 1st inst code for pipes */ ! 213: extern int addr_code_p1; /* address code for pipes */ ! 214: extern struct u64 post_evt_acc; /* ACC value after an event */ ! 215: extern struct evt_data_t *data_ptr; /* pointer to current data */ ! 216: ! 217: ! 218: ! 219: /* ! 220: * Demand Paging / Event Test data definitions ! 221: */ ! 222: extern int os_b_op1; /* offset to byte operand 1 */ ! 223: extern int os_b_op2; /* offset to byte operand 2 */ ! 224: extern int os_b_op3; /* offset to byte operand 3 */ ! 225: extern int os_op1; /* offset to operand # 1 */ ! 226: extern int os_op2; /* offset to operand # 2 */ ! 227: extern int os_op3; /* offset to operand # 3 */ ! 228: extern int os_ad_op1; /* offset to op. pointer #1 */ ! 229: extern int os_ad_op2; /* offset to op. pointer #2 */ ! 230: extern int os_ad_op3; /* offset to op. pointer #3 */ ! 231: extern struct u64 *adr_b_op1; /* ptr. to byte operand 1 */ ! 232: extern struct u64 *adr_b_op2; /* ptr. to byte operand 2 */ ! 233: extern struct u64 *adr_b_op3; /* ptr. to byte operand 3 */ ! 234: extern struct u64 *adr_op1; /* ptr. to operand #1 */ ! 235: extern struct u64 *adr_op2; /* ptr. to operand #2 */ ! 236: extern struct u64 *adr_op3; /* ptr. to operand #3 */ ! 237: extern int *adr_bop1_lsw; /* ptr. to byte op 1's LSW */ ! 238: extern int *adr_bop2_lsw; /* ptr. to byte op 2's LSW */ ! 239: extern int *adr_op1_lsw; /* ptr. to dbl op #1's LSW */ ! 240: extern int *adr_op2_lsw; /* ptr. to dbl op #2's LSW */ ! 241: extern int *adr_op1_ptr; /* ptr. to pointer to op #1 */ ! 242: extern int *adr_op2_ptr; /* ptr. to pointer to op #2 */ ! 243: extern int *adr_op3_ptr; /* ptr. to pointer to op #3 */ ! 244: ! 245: /* ! 246: * Event subtests ! 247: */ ! 248: extern int fpm_test(); /* FPP Emulation trap test */ ! 249: extern int resop_test(); /* Reserved Operand Test */ ! 250: extern int ovfl_test(); /* Overflow Test */ ! 251: extern int undfl_test(); /* Underflow Test */ ! 252: extern int div_by_0_test(); /* Divide by Zero Test */ ! 253: extern int int_ovfl_test(); /* Integer Overflow Test */ ! 254: extern int pipeline_test(); /* Piped Events Test */ ! 255: extern int pipe1(); /* Piped Events subtest # 1 */ ! 256: extern int pipe2(); /* Piped Events subtest # 2 */ ! 257: extern int pipe3(); /* Piped Events subtest # 3 */ ! 258: extern int pipe4(); /* Piped Events subtest # 4 */ ! 259: extern int pipe5(); /* Piped Events subtest # 5 */ ! 260: extern int pipe6(); /* Piped Events subtest # 6 */ ! 261: extern int pipe7(); /* Piped Events subtest # 7 */ ! 262: extern int pipe8(); /* Piped Events subtest # 8 */ ! 263: extern int pipe9(); /* Piped Events subtest # 9 */ ! 264: extern int pipe10(); /* Piped Events subtest # 10 */ ! 265: extern int pipe11(); /* Piped Events subtest # 11 */ ! 266: extern int pipe12(); /* Piped Events subtest # 12 */ ! 267: extern int pipe13(); /* Piped Events subtest # 13 */ ! 268: extern int pipe14(); /* Piped Events subtest # 14 */ ! 269: extern int pipe15(); /* Piped Events subtest # 15 */ ! 270: extern int pipe16(); /* Piped Events subtest # 16 */ ! 271: extern int pipe17(); /* Piped Events subtest # 17 */ ! 272: ! 273: ! 274: ! 275: /* ! 276: * These definitions must agree with those in "diagnostics/INCLUDE" ! 277: */ ! 278: #define DMP_PG_0 0x36000 /* addresses for code and data */ ! 279: #define DMP_PG_1 DMP_PG_0+0x400 ! 280: #define DMP_PG_2 DMP_PG_1+0x400 ! 281: #define DMP_PG_3 DMP_PG_2+0x400 ! 282: #define DMP_PG_4 DMP_PG_3+0x400 ! 283: #define DMP_PG_5 DMP_PG_4+0x400 ! 284: #define DMP_PG_6 DMP_PG_5+0x400 ! 285: #define DMP_PG_7 DMP_PG_6+0x400 ! 286: ! 287: #define DMP_OP_1 DMP_PG_3-4 /* 1st data word */ ! 288: #define DMP_OP_2 DMP_PG_7-4 /* 2nd data word */ ! 289:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.