📄 fpatest.c
字号:
};long start_dot_sp2[FPA_NDATA_REGS][2] = { sfour, 0x1100, smone, 0x1101, stwo, 0x1102, shalf, 0x1103, sone, 0x1104, stwo, 0x1105, smone, 0x1106, sfour, 0x1107, 0x1008, 0x1108, 0x1009, 0x1109, 0x100A, 0x110A, 0x100B, 0x110B, 0x100C, 0x110C, 0x100D, 0x110D, 0x100E, 0x110E, 0x100F, 0x110F, szero, 0x1110, 0x1011, 0x1111, 0x1012, 0x1112, 0x1013, 0x1113, 0x1014, 0x1114, 0x1015, 0x1115, 0x1016, 0x1116, 0x1017, 0x1117, 0x1018, 0x1118, 0x1019, 0x1119, 0x101A, 0x111A, 0x101B, 0x111B, 0x101C, 0x111C, 0x101D, 0x111D, 0x101E, 0x111E, 0x101F, 0x111F};long start_dot_sp3[FPA_NDATA_REGS][2] = { sfour, 0x1100, smone, 0x1101, stwo, 0x1102, shalf, 0x1103, sone, 0x1104, stwo, 0x1105, smone, 0x1106, sfour, 0x1107, 0x1008, 0x1108, 0x1009, 0x1109, 0x100A, 0x110A, 0x100B, 0x110B, 0x100C, 0x110C, 0x100D, 0x110D, 0x100E, 0x110E, 0x100F, 0x110F, stwo, 0x1110, 0x1011, 0x1111, 0x1012, 0x1112, 0x1013, 0x1113, 0x1014, 0x1114, 0x1015, 0x1115, 0x1016, 0x1116, 0x1017, 0x1117, 0x1018, 0x1118, 0x1019, 0x1119, 0x101A, 0x111A, 0x101B, 0x111B, 0x101C, 0x111C, 0x101D, 0x111D, 0x101E, 0x111E, 0x101F, 0x111F};long start_dot_dp[FPA_NDATA_REGS][2] = { dfour, dmone, dtwo, dhalf, done, dtwo, dmone, dfour, 0x1008, 0x1108, 0x1009, 0x1109, 0x100A, 0x110A, 0x100B, 0x110B, 0x100C, 0x110C, 0x100D, 0x110D, 0x100E, 0x110E, 0x100F, 0x110F, 0x1010, 0x1110, 0x1011, 0x1111, 0x1012, 0x1112, 0x1013, 0x1113, 0x1014, 0x1114, 0x1015, 0x1115, 0x1016, 0x1116, 0x1017, 0x1117, 0x1018, 0x1118, 0x1019, 0x1119, 0x101A, 0x111A, 0x101B, 0x111B, 0x101C, 0x111C, 0x101D, 0x111D, 0x101E, 0x111E, 0x101F, 0x111F};long start_dot_dp1[FPA_NDATA_REGS][2] = { dfour, dmone, dtwo, dhalf, done, dtwo, dmone, dfour, 0x1008, 0x1108, 0x1009, 0x1109, 0x100A, 0x110A, 0x100B, 0x110B, 0x100C, 0x110C, 0x100D, 0x110D, 0x100E, 0x110E, 0x100F, 0x110F, dtwo, 0x1011, 0x1111, 0x1012, 0x1112, 0x1013, 0x1113, 0x1014, 0x1114, 0x1015, 0x1115, 0x1016, 0x1116, 0x1017, 0x1117, 0x1018, 0x1118, 0x1019, 0x1119, 0x101A, 0x111A, 0x101B, 0x111B, 0x101C, 0x111C, 0x101D, 0x111D, 0x101E, 0x111E, 0x101F, 0x111F};long start_dot_dp2[FPA_NDATA_REGS][2] = { dfour, dmone, dtwo, dhalf, done, dtwo, dmone, dfour, 0x1008, 0x1108, 0x1009, 0x1109, 0x100A, 0x110A, 0x100B, 0x110B, 0x100C, 0x110C, 0x100D, 0x110D, 0x100E, 0x110E, 0x100F, 0x110F, dzero, 0x1011, 0x1111, 0x1012, 0x1112, 0x1013, 0x1113, 0x1014, 0x1114, 0x1015, 0x1115, 0x1016, 0x1116, 0x1017, 0x1117, 0x1018, 0x1118, 0x1019, 0x1119, 0x101A, 0x111A, 0x101B, 0x111B, 0x101C, 0x111C, 0x101D, 0x111D, 0x101E, 0x111E, 0x101F, 0x111F};long start_dot_dp3[FPA_NDATA_REGS][2] = { dfour, dmone, dtwo, dhalf, done, dtwo, dmone, dfour, 0x1008, 0x1108, 0x1009, 0x1109, 0x100A, 0x110A, 0x100B, 0x110B, 0x100C, 0x110C, 0x100D, 0x110D, 0x100E, 0x110E, 0x100F, 0x110F, dtwo, 0x1011, 0x1111, 0x1012, 0x1112, 0x1013, 0x1113, 0x1014, 0x1114, 0x1015, 0x1115, 0x1016, 0x1116, 0x1017, 0x1117, 0x1018, 0x1118, 0x1019, 0x1119, 0x101A, 0x111A, 0x101B, 0x111B, 0x101C, 0x111C, 0x101D, 0x111D, 0x101E, 0x111E, 0x101F, 0x111F};struct opm_table m_table[] ={ "2x2 Move", &start1[0][0], &matrix_sp1[0][0], &matrix_dp1[0][0], CS_2MOV, CD_2MOV, ST_DONTCARE, "3x3 Move", &start1[0][0], &matrix_sp2[0][0], &matrix_dp2[0][0], CS_3MOV, CD_3MOV, ST_DONTCARE, "4x4 Move", &start1[0][0], &matrix_sp3[0][0], &matrix_dp3[0][0], CS_4MOV, CD_4MOV, ST_DONTCARE, "2x2 Transpose", &start1[0][0], &matrix_sp4[0][0], &matrix_dp4[0][0], CS_2TRN, CD_2TRN, ST_DONTCARE, "3x3 Transpose", &start1[0][0], &matrix_sp5[0][0], &matrix_dp5[0][0], CS_3TRN, CD_3TRN, ST_DONTCARE, "4x4 Transpose", &start1[0][0], &matrix_sp6[0][0], &matrix_dp6[0][0], CS_4TRN, CD_4TRN, ST_DONTCARE, "2x2 Dot", &start_dot_sp[0][0], &start_dot_sp1[0][0], 0, CS_2DOT, 0, ST_FINITEEXACT, "3x3 Dot", &start_dot_sp[0][0], &start_dot_sp2[0][0], 0, CS_3DOT, 0, ST_FINITEEXACT, "4x4 Dot", &start_dot_sp[0][0], &start_dot_sp3[0][0], 0, CS_4DOT, 0, ST_FINITEEXACT, "2x2 Dot", &start_dot_dp[0][0], 0, &start_dot_dp1[0][0], 0, CD_2DOT, ST_FINITEEXACT, "3x3 Dot", &start_dot_dp[0][0], 0, &start_dot_dp2[0][0], 0, CD_3DOT, ST_FINITEEXACT, "4x4 Dot", &start_dot_dp[0][0], 0, &start_dot_dp3[0][0], 0, CD_4DOT, ST_FINITEEXACT, 0, 0, 0, 0, 0, 0, 0};int ignore_fpe_error = 0;int got_fpe_error = 0;struct fpa_device *fpa = (struct fpa_device *)0xE0000000;int stop_on_error = 1;int loop_flag = 0;int quiet_flag = 0;int verbose_flag = 0;int got_error = 0;int fpa_fd;main(argc, argv)int argc;char *argv[];{int fpe_error();int bus_error();int segv_error();int dummy;int i, j;int do_conditional_flag = 0;int sp_flag = 0;int dp_flag = 0;int x_flag = 0;int c_flag = 0;int ck_flag = 0;int pipe_flag = 0;int reg_flag = 0;int shadow_flag = 0;int status_flag = 0;int mode_flag = 0;int imask_flag = 0;int debug_flag = 0;int version_flag = 0;int matrix_flag = 0;int interactive_flag = 0;int pass_count = 0; for(i = 1; i < argc; i++) { switch(argv[i][0]) { case '-': switch(argv[i][1]) { case 'c': stop_on_error = 0; break; case 'q': quiet_flag++; break; case 'v': verbose_flag++; break; case 'l': loop_flag++; /* currently does nothing */ break; case 't': do_conditional_flag++; for(j = 2; argv[i][j] != '\0'; j++) { switch(argv[i][j]) { case 's': sp_flag++; break; case 'd': dp_flag++; break; case 'r': reg_flag++; break; case 'x': x_flag++; break; case 'c': c_flag++; break; case 't': status_flag++; break; case 'M': matrix_flag++; break; case 'm': mode_flag++; break; case 'i': imask_flag++; break; case 'S': shadow_flag++; break; case 'p': pipe_flag++; break; case 'C': ck_flag++; break; case 'u': debug_flag++; break; case 'v': version_flag++; break; case 'I': interactive_flag++; break; case 'h': default: printf("Bad test specifier: %c\n", argv[i][j]); printf("s - single precision\n"); printf("d - double precision\n"); printf("r - registers\n"); printf("x - extended format\n"); printf("c - command format\n"); printf("t - status\n"); printf("m - mode\n"); printf("M - matrix\n"); printf("i - imask\n"); printf("u - debug\n"); printf("v - version\n"); printf("C - checksum\n"); printf("p - pipe test\n"); printf("S - shadow registers\n"); printf("I - interactive\n"); exit(-1); } } break; default: goto usage; } break; case 'h': default: goto usage; } } if(!do_conditional_flag) { if(!verbose_flag) quiet_flag++; version_flag++; sp_flag = dp_flag = x_flag = c_flag = 1; imask_flag = status_flag = mode_flag = 1; matrix_flag = pipe_flag = ck_flag = 1; } signal(SIGBUS, bus_error); signal(SIGFPE, fpe_error); signal(SIGSEGV, segv_error); if((fpa_fd = open("/dev/fpa", O_RDWR, 0)) == -1) { perror("can't open /dev/fpa"); return(2); } fpa->fp_clear_pipe = 0; /* just in case */ init_fpa(); if(!(fpa->fp_pipe_status & FPA_STABLE)) { printf("couldn't get the pipe stable\n"); exit(-1); } if(fpa->fp_pipe_status & FPA_FIRST_V_ACT) { printf("couldn't get the pipe idle\n"); exit(-1); } do { if(reg_flag) reg_test(); if(sp_flag) sp_test(); if(dp_flag) dp_test(); if(sp_flag) sd_test(); if(x_flag) x_test(); if(c_flag) c_test(); if(ck_flag) ck_test(); if(status_flag) status_test(); if(imask_flag) imask_test(); if(pipe_flag) pipe_test(); if(mode_flag) mode_test(); if(shadow_flag) shadow_test(); if(debug_flag) debug_test(); if(version_flag) version_test(); if(matrix_flag) matrix_test(); if(interactive_flag) interactive_test(); if(!quiet_flag && loop_flag) printf("Pass number %d\n", ++pass_count); } while(loop_flag); exit(0);usage: printf("Usage: test [-q] [-v] [-l] [-c] [-t[sdxcrhtimpuCIMS]] [-h]\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -