|
|
Power 6/32 Unix version 1.21
#include "../fpp_defs.h";
/**************************************************************************
*
* FLOATING POINT PROCESSOR EVENTS TEST DEFINITIONS
*
* 29-Mar-85 JJM: mauled "dmp_defs.h" to make this guy
* 9-Apr-85 JJM: added the "sgl_dbl_un" union and "post_evt_acc"
* 12-Apr-85 JJM: added the push_cnt and exp_push_cnt variables
* 24-Apr-85 JJM: added inst_completion test data declarations
* 25-Apr-85 JJM: changed post_evt_acc to "u64" and removed sgl_dbl_un
* 2-May-85 JJM: added stuff for checking clock events
*
**************************************************************************/
/*
* Structure definition used to call the subtests
*/
struct test_t {
int (*test)(); /* ptr to the test procedure */
char *name; /* name of the test procedure */
};
extern struct test_t fpp_test_tbl[]; /* table of "FPP" WCS tests */
extern int fpp_test_cnt; /* number of "FPP" tests */
extern int pipe_test_index; /* index to the pipeline test */
extern struct test_t no_fpp_test_tbl[]; /* table of "NO-FPP" WCS tests */
extern int no_fpp_test_cnt; /* number of "NO-FPP" tests */
extern struct test_t pipe_test_tbl[]; /* table of pipeline subtests */
extern int no_pipe_tests; /* number of pipeline subtests */
/*
* Structure definition for all non-piped event test data patterns
*/
struct evt_data_t {
struct u64 op_1;
struct u64 op_2;
};
/*
* Instruction definition for the Reserved Operand Test
*/
struct evt_inst_t {
int inst_code; /* instruction's op code */
char *name; /* instruction's name */
int no_operands; /* # operands used */
int precision; /* sgl / dbl precision */
struct evt_data_t *evt_data; /* ptr to data patterns */
int *evt_data_cnt; /* # of data patterns */
};
extern struct evt_inst_t resop_tbl[]; /* inst's for RESOP test */
extern int size_resop_tbl; /* # of RESOP instr's */
/*
* Instruction definition for the FPP EMULATION TRAP interface test
*/
struct fpm_inst_t {
int inst_code; /* instruction's op code */
char *name; /* instruction's name */
int no_operands; /* # operands used */
int precision; /* sgl / dbl precision */
};
extern struct fpm_inst_t fpm_tbl[]; /* inst's for FPM test */
extern int size_fpm_tbl; /* # of FPM trap isntr's */
/*
* Instruction definition for the Overflow and Underflow tests
*/
struct ovfl_inst_t {
int inst_code; /* instruction's op code */
char *name; /* instruction's name */
int no_operands; /* # operands used */
int precision; /* sgl / dbl precision */
struct evt_data_t *ovfl_data; /* ptr to Overflow data */
int *ovfl_cnt; /* # of OVFL data pat's */
struct evt_data_t *undfl_data; /* ptr to Underflow data */
int *undfl_cnt; /* # of UNDFL data pat's */
};
extern struct ovfl_inst_t ovfl_tbl[]; /* OVFL / UNDFL instr's */
extern int size_ovfl_tbl; /* # of OVFL/UNDFL insts */
/** Reserved Operand Data Patterns **/
extern struct evt_data_t flt_resops[]; /* vanilla Reserved Operands */
extern int flt_resop_cnt; /* # of vanilla patterns */
extern struct evt_data_t cmp2_resops[]; /* CMPF2, CMPD2 Reserved ops */
extern int cmp2_resop_cnt; /* # of CMPx2 data patterns */
extern struct evt_data_t logf_resops[]; /* Reserved data for LOGF */
extern int logf_resop_cnt; /* # of LOGF data patterns */
/** Overflow Operand Data Patterns **/
extern struct evt_data_t adf_ov_dat[]; /* Overflow data for ADDF */
extern int adf_ov_cnt; /* # of ADDF ovfl patterns */
extern struct evt_data_t suf_ov_dat[]; /* Overflow data for SUBF */
extern int suf_ov_cnt; /* # of SUBF ovfl patterns */
extern struct evt_data_t muf_ov_dat[]; /* Overflow data for MULF */
extern int muf_ov_cnt; /* # of MULF ovfl patterns */
extern struct evt_data_t dif_ov_dat[]; /* Overflow data for DIVF */
extern int dif_ov_cnt; /* # of DIVF ovfl patterns */
extern struct evt_data_t add_ov_dat[]; /* Overflow data for ADDD */
extern int add_ov_cnt; /* # of ADDD ovfl patterns */
extern struct evt_data_t sud_ov_dat[]; /* Overflow data for SUBD */
extern int sud_ov_cnt; /* # of SUBD ovfl patterns */
extern struct evt_data_t mud_ov_dat[]; /* Overflow data for MULD */
extern int mud_ov_cnt; /* # of MULD ovfl patterns */
extern struct evt_data_t did_ov_dat[]; /* Overflow data for DIVD */
extern int did_ov_cnt; /* # of DIVD ovfl patterns */
extern struct evt_data_t cvdf_ov_dat[]; /* Overflow data for CVDF */
extern int cvdf_ov_cnt; /* # of CVDF ovfl patterns */
extern struct evt_data_t exf_ov_dat[]; /* Overflow data for EXPF */
extern int exf_ov_cnt; /* # of EXPF ovfl patterns */
/** Underflow Operand Data Patterns **/
extern struct evt_data_t adf_u_dat[]; /* Underflow data for ADDF */
extern int adf_u_cnt; /* # of ADDF undfl patterns */
extern struct evt_data_t suf_u_dat[]; /* Underflow data for SUBF */
extern int suf_u_cnt; /* # of SUBF undfl patterns */
extern struct evt_data_t muf_u_dat[]; /* Underflow data for MULF */
extern int muf_u_cnt; /* # of MULF undfl patterns */
extern struct evt_data_t dif_u_dat[]; /* Underflow data for DIVF */
extern int dif_u_cnt; /* # of DIVF undfl patterns */
extern struct evt_data_t add_u_dat[]; /* Underflow data for ADDD */
extern int add_u_cnt; /* # of ADDD undfl patterns */
extern struct evt_data_t sud_u_dat[]; /* Underflow data for SUBD */
extern int sud_u_cnt; /* # of SUBD undfl patterns */
extern struct evt_data_t mud_u_dat[]; /* Underflow data for MULD */
extern int mud_u_cnt; /* # of MULD undfl patterns */
extern struct evt_data_t did_u_dat[]; /* Underflow data for DIVD */
extern int did_u_cnt; /* # of DIVD undfl patterns */
extern struct evt_data_t exf_u_dat[]; /* Underflow data for EXPF */
extern int exf_u_cnt; /* # of EXPF undfl patterns */
/** Integer Overflow Fault Data Patterns **/
extern struct evt_data_t mull_ov_dat[]; /* Int Ovfl data for MULL[23]*/
extern int mull_ov_cnt; /* # of MULL Int Ovfl pat's */
extern struct evt_data_t cvdl_ov_dat[]; /* Int Ovfl data for CVDL */
extern int cvdl_ov_cnt; /* # of CVDL Int Ovfl pat's */
extern struct evt_data_t cvfl_ov_dat[]; /* Int Ovfl data for CVFL */
extern int cvfl_ov_cnt; /* # of CVFL Int Ovfl pat's */
/** More or Less Miscellaneous Data Patterns **/
extern struct u64 acc_data[]; /* non event causing data */
extern struct evt_data_t null_data[]; /* empty data definition */
extern struct evt_data_t zero_divide_data[]; /* Divide By 0 data patterns */
extern int zero_divide_cnt; /* # Divide By 0 patterns */
extern struct evt_data_t fpm_data[]; /* FPP Emulation data pat's */
extern int fpm_data_cnt; /* # FPP Emulation pat's */
/** Data patterns for pipelined instr. completion & queue clearing tests **/
extern struct addd_data_t pipe1_data[]; /* = DIVD data patterns */
extern int max_pipe1_index; /* # of data patterns (-1) */
extern struct addd_data_t pipe2_data[]; /* = MULD data patterns */
extern int max_pipe2_index; /* # of data patterns (-1) */
extern struct addd_data_t pipe3_data[]; /* = LOGF data patterns */
extern int max_pipe3_index; /* # of data patterns (-1) */
extern struct addd_data_t pipe4_data[]; /* = MULF data patterns */
extern int max_pipe4_index; /* # of data patterns (-1) */
extern struct addd_data_t pipe7_data[]; /* = DIVF data patterns */
extern int max_pipe7_index; /* # of data patterns (-1) */
/*
* variables used with the event tests
*/
extern int evt_inst; /* User specified op-code */
extern int user_mode; /* FLAG -run in User Mode */
extern int op_code; /* op-code of the inst. */
extern char *op_name; /* ascii instruction name */
extern int precision; /* sgl / dbl instruction */
extern int acc_ld_size; /* load sgl of dbl operand */
extern int acc_st_size; /* store sgl of dbl operand */
extern int no_ops; /* # of operands used */
extern int i_cache_hit; /* instr. cache hit flag */
extern int max_index; /* last data index to use */
extern int op_type; /* load / store type instr. */
extern int d_to_s; /* inst converts dbl to sgl */
extern int s_to_d; /* inst converts sgl to dbl */
extern int sgl_op; /* inst has sgl operand(s) */
extern int force_sp; /* flag -set the Stack Ptr */
extern int min_shift; /* min # bytes to shift code */
extern int inst_buf[]; /* instruction code buffer */
extern int end_of_inst_buf; /* end address of code buff */
extern int code_addr; /* start of test code */
extern int addr_size; /* # bytes in addr specifier*/
extern int addr_1; /* address specifier # 1 */
extern int addr_2; /* address specifier # 2 */
extern int addr_3; /* address specifier # 3 */
extern int inst_size; /* # of bytes in instr. */
extern int shift_count; /* # bytes to shift inst_buf*/
extern int no_page_faults; /* # addr translation faults*/
extern int exp_page_faults; /* # addr trans faults exp'd*/
extern int evt_disabled; /* flag -event is disabled */
extern short disable_mask; /* events to disable in PSW */
extern int push_cnt; /* # l-wds pushed on stack */
extern int exp_push_cnt; /* # l-wds expected on stk */
extern int Codek; /* current code cache key */
extern int rtc_occurred; /* flag -clock event seen */
extern int clock_retrys; /* how long to wait for clk */
extern int load_type_inst; /* ACC loaded flag */
extern int pipe_test; /* flag -pipe test or not */
extern int pipe_inst1; /* 1st inst code for pipes */
extern int addr_code_p1; /* address code for pipes */
extern struct u64 post_evt_acc; /* ACC value after an event */
extern struct evt_data_t *data_ptr; /* pointer to current data */
/*
* Demand Paging / Event Test data definitions
*/
extern int os_b_op1; /* offset to byte operand 1 */
extern int os_b_op2; /* offset to byte operand 2 */
extern int os_b_op3; /* offset to byte operand 3 */
extern int os_op1; /* offset to operand # 1 */
extern int os_op2; /* offset to operand # 2 */
extern int os_op3; /* offset to operand # 3 */
extern int os_ad_op1; /* offset to op. pointer #1 */
extern int os_ad_op2; /* offset to op. pointer #2 */
extern int os_ad_op3; /* offset to op. pointer #3 */
extern struct u64 *adr_b_op1; /* ptr. to byte operand 1 */
extern struct u64 *adr_b_op2; /* ptr. to byte operand 2 */
extern struct u64 *adr_b_op3; /* ptr. to byte operand 3 */
extern struct u64 *adr_op1; /* ptr. to operand #1 */
extern struct u64 *adr_op2; /* ptr. to operand #2 */
extern struct u64 *adr_op3; /* ptr. to operand #3 */
extern int *adr_bop1_lsw; /* ptr. to byte op 1's LSW */
extern int *adr_bop2_lsw; /* ptr. to byte op 2's LSW */
extern int *adr_op1_lsw; /* ptr. to dbl op #1's LSW */
extern int *adr_op2_lsw; /* ptr. to dbl op #2's LSW */
extern int *adr_op1_ptr; /* ptr. to pointer to op #1 */
extern int *adr_op2_ptr; /* ptr. to pointer to op #2 */
extern int *adr_op3_ptr; /* ptr. to pointer to op #3 */
/*
* Event subtests
*/
extern int fpm_test(); /* FPP Emulation trap test */
extern int resop_test(); /* Reserved Operand Test */
extern int ovfl_test(); /* Overflow Test */
extern int undfl_test(); /* Underflow Test */
extern int div_by_0_test(); /* Divide by Zero Test */
extern int int_ovfl_test(); /* Integer Overflow Test */
extern int pipeline_test(); /* Piped Events Test */
extern int pipe1(); /* Piped Events subtest # 1 */
extern int pipe2(); /* Piped Events subtest # 2 */
extern int pipe3(); /* Piped Events subtest # 3 */
extern int pipe4(); /* Piped Events subtest # 4 */
extern int pipe5(); /* Piped Events subtest # 5 */
extern int pipe6(); /* Piped Events subtest # 6 */
extern int pipe7(); /* Piped Events subtest # 7 */
extern int pipe8(); /* Piped Events subtest # 8 */
extern int pipe9(); /* Piped Events subtest # 9 */
extern int pipe10(); /* Piped Events subtest # 10 */
extern int pipe11(); /* Piped Events subtest # 11 */
extern int pipe12(); /* Piped Events subtest # 12 */
extern int pipe13(); /* Piped Events subtest # 13 */
extern int pipe14(); /* Piped Events subtest # 14 */
extern int pipe15(); /* Piped Events subtest # 15 */
extern int pipe16(); /* Piped Events subtest # 16 */
extern int pipe17(); /* Piped Events subtest # 17 */
/*
* These definitions must agree with those in "diagnostics/INCLUDE"
*/
#define DMP_PG_0 0x36000 /* addresses for code and data */
#define DMP_PG_1 DMP_PG_0+0x400
#define DMP_PG_2 DMP_PG_1+0x400
#define DMP_PG_3 DMP_PG_2+0x400
#define DMP_PG_4 DMP_PG_3+0x400
#define DMP_PG_5 DMP_PG_4+0x400
#define DMP_PG_6 DMP_PG_5+0x400
#define DMP_PG_7 DMP_PG_6+0x400
#define DMP_OP_1 DMP_PG_3-4 /* 1st data word */
#define DMP_OP_2 DMP_PG_7-4 /* 2nd data word */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.