Opnd get_dst(Operation operation, int pos) { if (operation.is_phi_handle()) return get_dst(*operation.get_phi_handle()); else return get_dst(*operation.get_instr_handle(), pos); }
static void nv04_surface_copy_cpu(struct gl_context *ctx, struct nouveau_surface *dst, struct nouveau_surface *src, int dx, int dy, int sx, int sy, int w, int h) { int x, y; get_offset_t get_dst = (dst->layout == SWIZZLED ? get_swizzled_offset : get_linear_offset); get_offset_t get_src = (src->layout == SWIZZLED ? get_swizzled_offset : get_linear_offset); void *dp, *sp; nouveau_bo_map(dst->bo, NOUVEAU_BO_WR, context_client(ctx)); nouveau_bo_map(src->bo, NOUVEAU_BO_RD, context_client(ctx)); dp = dst->bo->map + dst->offset; sp = src->bo->map + src->offset; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { memcpy(dp + get_dst(dst, dx + x, dy + y), sp + get_src(src, sx + x, sy + y), dst->cpp); } } }
bool AdminNetLinkAdd::commit(AdminState* admin) throw (admin_error) { AdminNetLinkBase::commit(admin); AdminState::WriteLockRecord net_rec = get_net_write(); NetStatePtr net = boost::dynamic_pointer_cast<NetState>(net_rec.first); NetVertex v_src; if (!net->get_node(get_src(), v_src, *net_rec.second)) return false; NetVertex v_dst; if (!net->get_node(get_dst(), v_dst, *net_rec.second)) return false; NetEdge e; if (!net->add_edge(v_src, v_dst, e, *net_rec.second)) return false; net->set_name(e, get_link(), *net_rec.second); return true; }
int main() { #ifndef __EMSCRIPTEN__ _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); #endif printf ("{ \"workload\": %u, \"results\": [\n", N); assert(N%4 == 0); // Don't care about the tail for now. float *src = get_src();//(float*)aligned_alloc(16, N*sizeof(float)); for(int i = 0; i < N; ++i) src[i] = (float)rand() / RAND_MAX; float *src2 = get_src2();//(float*)aligned_alloc(16, N*sizeof(float)); for(int i = 0; i < N; ++i) src2[i] = (float)rand() / RAND_MAX; float *dst = get_dst();//(float*)aligned_alloc(16, N*sizeof(float)); float scalarTime; SETCHART("load"); START(); for(int i = 0; i < N; ++i) dst[i] = src[i]; ENDSCALAR(checksum_dst(dst), "scalar"); LS_TEST("_mm_load_ps", _mm_load_ps, 0, _mm_store_ps, 0); LS_TEST("_mm_load_ps1", _mm_load_ps1, 1, _mm_store_ps, 0); LS_TEST("_mm_load_ss", _mm_load_ss, 1, _mm_store_ps, 0); LS_TEST("_mm_load1_ps", _mm_load1_ps, 1, _mm_store_ps, 0); // _mm_loadh_pi // _mm_loadl_pi LS_TEST("_mm_loadr_ps", _mm_loadr_ps, 0, _mm_store_ps, 0); LS_TEST("_mm_loadu_ps", _mm_loadu_ps, 1, _mm_store_ps, 0); SETCHART("set"); SS_TEST("_mm_set_ps", _mm_set_ps(src[i+2], src[i+1], src[i+5], src[i+0])); SS_TEST("_mm_set_ps1", _mm_set_ps1(src[i])); SS_TEST("_mm_set_ss", _mm_set_ss(src[i])); SS_TEST("_mm_set1_ps", _mm_set1_ps(src[i])); SS_TEST("_mm_setr_ps", _mm_set_ps(src[i+2], src[i+1], src[i+5], src[i+0])); SS_TEST("_mm_setzero_ps", _mm_setzero_ps()); SETCHART("move"); SS_TEST("_mm_move_ss", _mm_move_ss(_mm_load_ps(src+i), _mm_load_ps(src2+i))); SS_TEST("_mm_movehl_ps", _mm_movehl_ps(_mm_load_ps(src+i), _mm_load_ps(src2+i))); SS_TEST("_mm_movelh_ps", _mm_movelh_ps(_mm_load_ps(src+i), _mm_load_ps(src2+i))); SETCHART("store"); LS_TEST("_mm_store_ps", _mm_load_ps, 0, _mm_store_ps, 0); LS_TEST("_mm_store_ps1", _mm_load_ps, 0, _mm_store_ps1, 0); LS_TEST("_mm_store_ss", _mm_load_ps, 0, _mm_store_ss, 1); LS64_TEST("_mm_storeh_pi", _mm_load_ps, 0, _mm_storeh_pi, 1); LS64_TEST("_mm_storel_pi", _mm_load_ps, 0, _mm_storel_pi, 1); LS_TEST("_mm_storer_ps", _mm_load_ps, 0, _mm_storer_ps, 0); LS_TEST("_mm_storeu_ps", _mm_load_ps, 0, _mm_storeu_ps, 1); LS_TEST("_mm_stream_ps", _mm_load_ps, 0, _mm_stream_ps, 0); SETCHART("arithmetic"); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] += src2[0]; dst[1] += src2[1]; dst[2] += src2[2]; dst[3] += src2[3]; } ENDSCALAR(checksum_dst(dst), "scalar add"); BINARYOP_TEST("_mm_add_ps", _mm_add_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_add_ss", _mm_add_ss, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] /= src2[0]; dst[1] /= src2[1]; dst[2] /= src2[2]; dst[3] /= src2[3]; } ENDSCALAR(checksum_dst(dst), "scalar div"); BINARYOP_TEST("_mm_div_ps", _mm_div_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_div_ss", _mm_div_ss, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] *= src2[0]; dst[1] *= src2[1]; dst[2] *= src2[2]; dst[3] *= src2[3]; } ENDSCALAR(checksum_dst(dst), "scalar mul"); BINARYOP_TEST("_mm_mul_ps", _mm_mul_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_mul_ss", _mm_mul_ss, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] -= src2[0]; dst[1] -= src2[1]; dst[2] -= src2[2]; dst[3] -= src2[3]; } ENDSCALAR(checksum_dst(dst), "scalar sub"); BINARYOP_TEST("_mm_sub_ps", _mm_sub_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_sub_ss", _mm_sub_ss, _mm_load_ps(src), _mm_load_ps(src2)); SETCHART("roots"); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = 1.f / dst[0]; dst[1] = 1.f / dst[1]; dst[2] = 1.f / dst[2]; dst[3] = 1.f / dst[3]; } ENDSCALAR(checksum_dst(dst), "scalar rcp"); UNARYOP_TEST("_mm_rcp_ps", _mm_rcp_ps, _mm_load_ps(src)); UNARYOP_TEST("_mm_rcp_ss", _mm_rcp_ss, _mm_load_ps(src)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = 1.f / sqrtf(dst[0]); dst[1] = 1.f / sqrtf(dst[1]); dst[2] = 1.f / sqrtf(dst[2]); dst[3] = 1.f / sqrtf(dst[3]); } ENDSCALAR(checksum_dst(dst), "scalar rsqrt"); UNARYOP_TEST("_mm_rsqrt_ps", _mm_rsqrt_ps, _mm_load_ps(src)); UNARYOP_TEST("_mm_rsqrt_ss", _mm_rsqrt_ss, _mm_load_ps(src)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = sqrtf(dst[0]); dst[1] = sqrtf(dst[1]); dst[2] = sqrtf(dst[2]); dst[3] = sqrtf(dst[3]); } ENDSCALAR(checksum_dst(dst), "scalar sqrt"); UNARYOP_TEST("_mm_sqrt_ps", _mm_sqrt_ps, _mm_load_ps(src)); UNARYOP_TEST("_mm_sqrt_ss", _mm_sqrt_ss, _mm_load_ps(src)); SETCHART("logical"); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = ucastf(fcastu(dst[0]) & fcastu(src2[0])); dst[1] = ucastf(fcastu(dst[1]) & fcastu(src2[1])); dst[2] = ucastf(fcastu(dst[2]) & fcastu(src2[2])); dst[3] = ucastf(fcastu(dst[3]) & fcastu(src2[3])); } ENDSCALAR(checksum_dst(dst), "scalar and"); BINARYOP_TEST("_mm_and_ps", _mm_and_ps, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = ucastf((~fcastu(dst[0])) & fcastu(src2[0])); dst[1] = ucastf((~fcastu(dst[1])) & fcastu(src2[1])); dst[2] = ucastf((~fcastu(dst[2])) & fcastu(src2[2])); dst[3] = ucastf((~fcastu(dst[3])) & fcastu(src2[3])); } ENDSCALAR(checksum_dst(dst), "scalar andnot"); BINARYOP_TEST("_mm_andnot_ps", _mm_andnot_ps, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = ucastf(fcastu(dst[0]) | fcastu(src2[0])); dst[1] = ucastf(fcastu(dst[1]) | fcastu(src2[1])); dst[2] = ucastf(fcastu(dst[2]) | fcastu(src2[2])); dst[3] = ucastf(fcastu(dst[3]) | fcastu(src2[3])); } ENDSCALAR(checksum_dst(dst), "scalar or"); BINARYOP_TEST("_mm_or_ps", _mm_or_ps, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = ucastf(fcastu(dst[0]) ^ fcastu(src2[0])); dst[1] = ucastf(fcastu(dst[1]) ^ fcastu(src2[1])); dst[2] = ucastf(fcastu(dst[2]) ^ fcastu(src2[2])); dst[3] = ucastf(fcastu(dst[3]) ^ fcastu(src2[3])); } ENDSCALAR(checksum_dst(dst), "scalar xor"); BINARYOP_TEST("_mm_xor_ps", _mm_xor_ps, _mm_load_ps(src), _mm_load_ps(src2)); SETCHART("cmp"); #ifndef __EMSCRIPTEN__ // TODO: Disabled due to https://github.com/kripken/emscripten/issues/2841 START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (dst[0] == src2[0]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (dst[1] == src2[1]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (dst[2] == src2[2]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (dst[3] == src2[3]) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmp=="); BINARYOP_TEST("_mm_cmpeq_ps", _mm_cmpeq_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_cmpeq_ss", _mm_cmpeq_ss, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (dst[0] >= src2[0]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (dst[1] >= src2[1]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (dst[2] >= src2[2]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (dst[3] >= src2[3]) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmp>="); BINARYOP_TEST("_mm_cmpge_ps", _mm_cmpge_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_cmpge_ss", _mm_cmpge_ss, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (dst[0] > src2[0]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (dst[1] > src2[1]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (dst[2] > src2[2]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (dst[3] > src2[3]) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmp>"); BINARYOP_TEST("_mm_cmpgt_ps", _mm_cmpgt_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_cmpgt_ss", _mm_cmpgt_ss, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (dst[0] <= src2[0]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (dst[1] <= src2[1]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (dst[2] <= src2[2]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (dst[3] <= src2[3]) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmp<="); BINARYOP_TEST("_mm_cmple_ps", _mm_cmple_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_cmple_ss", _mm_cmple_ss, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (dst[0] < src2[0]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (dst[1] < src2[1]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (dst[2] < src2[2]) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (dst[3] < src2[3]) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmp<"); BINARYOP_TEST("_mm_cmplt_ps", _mm_cmplt_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_cmplt_ss", _mm_cmplt_ss, _mm_load_ps(src), _mm_load_ps(src2)); #endif START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (!Isnan(dst[0]) && !Isnan(src2[0])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (!Isnan(dst[1]) && !Isnan(src2[1])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (!Isnan(dst[2]) && !Isnan(src2[2])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (!Isnan(dst[3]) && !Isnan(src2[3])) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmpord"); BINARYOP_TEST("_mm_cmpord_ps", _mm_cmpord_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_cmpord_ss", _mm_cmpord_ss, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = (Isnan(dst[0]) || Isnan(src2[0])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[1] = (Isnan(dst[1]) || Isnan(src2[1])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[2] = (Isnan(dst[2]) || Isnan(src2[2])) ? ucastf(0xFFFFFFFFU) : 0.f; dst[3] = (Isnan(dst[3]) || Isnan(src2[3])) ? ucastf(0xFFFFFFFFU) : 0.f; } ENDSCALAR(checksum_dst(dst), "scalar cmpunord"); BINARYOP_TEST("_mm_cmpunord_ps", _mm_cmpunord_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_cmpunord_ss", _mm_cmpunord_ss, _mm_load_ps(src), _mm_load_ps(src2)); SETCHART("max"); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = Max(dst[0], src2[0]); dst[1] = Max(dst[1], src2[1]); dst[2] = Max(dst[2], src2[2]); dst[3] = Max(dst[3], src2[3]); } ENDSCALAR(checksum_dst(dst), "scalar max"); BINARYOP_TEST("_mm_max_ps", _mm_max_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_max_ss", _mm_max_ss, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = Min(dst[0], src2[0]); dst[1] = Min(dst[1], src2[1]); dst[2] = Min(dst[2], src2[2]); dst[3] = Min(dst[3], src2[3]); } ENDSCALAR(checksum_dst(dst), "scalar min"); BINARYOP_TEST("_mm_min_ps", _mm_min_ps, _mm_load_ps(src), _mm_load_ps(src2)); BINARYOP_TEST("_mm_min_ss", _mm_min_ss, _mm_load_ps(src), _mm_load_ps(src2)); SETCHART("shuffle"); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[3] = dst[1]; dst[2] = dst[0]; dst[1] = src2[3]; dst[0] = src2[2]; } ENDSCALAR(checksum_dst(dst), "scalar shuffle"); // BINARYOP_TEST("_mm_shuffle_ps", _mm_shuffle_ps, _mm_load_ps(src), _mm_load_ps(src2)); START(); __m128 o0 = _mm_load_ps(src); __m128 o1 = _mm_load_ps(src2); for(int i = 0; i < N; i += 4) o0 = _mm_shuffle_ps(o0, o1, _MM_SHUFFLE(1, 0, 3, 2)); _mm_store_ps(dst, o0); END(checksum_dst(dst), "_mm_shuffle_ps"); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[0] = dst[2]; dst[1] = src2[2]; dst[2] = dst[3]; dst[3] = src2[3]; } ENDSCALAR(checksum_dst(dst), "scalar unpackhi_ps"); BINARYOP_TEST("_mm_unpackhi_ps", _mm_unpackhi_ps, _mm_load_ps(src), _mm_load_ps(src2)); START(); dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; dst[3] = src[3]; for(int i = 0; i < N; ++i) { dst[2] = dst[1]; dst[1] = dst[0]; dst[0] = src2[0]; dst[3] = src2[1]; } ENDSCALAR(checksum_dst(dst), "scalar unpacklo_ps"); BINARYOP_TEST("_mm_unpacklo_ps", _mm_unpacklo_ps, _mm_load_ps(src), _mm_load_ps(src2)); printf("]}\n"); /* printf("Finished!\n"); printf("Total time spent in scalar intrinsics: %f msecs.\n", (double)scalarTotalTicks * 1000.0 / ticks_per_sec()); printf("Total time spent in SSE1 intrinsics: %f msecs.\n", (double)simdTotalTicks * 1000.0 / ticks_per_sec()); if (scalarTotalTicks > simdTotalTicks) printf("SSE1 was %.3fx faster than scalar!\n", (double)scalarTotalTicks / simdTotalTicks); else printf("SSE1 was %.3fx slower than scalar!\n", (double)simdTotalTicks / scalarTotalTicks); */ #ifdef __EMSCRIPTEN__ fprintf(stderr,"User Agent: %s\n", emscripten_run_script_string("navigator.userAgent")); printf("/*Test finished! Now please close Firefox to continue with benchmark_sse1.py.*/\n"); #endif exit(0); }
int T_device(void) { char *cmp_regexp; /* ptr to compiled reg expression */ char input[32]; /* input string */ char ret[3]; /* return array for regex() */ char *work; /* work int */ char workstr[128]; /* work string */ char page_str[15]; enum t_dev_status dev_status; /* return from get_dst */ extern char *__loc1; /* beginning of reg exp match */ extern int COLS; /* number of cols in CURSES screen */ extern int LINES; /* number of lines in CURSES screen */ extern WINDOW *stdscr; /* standard screen window */ extern union shm_pointers shm_addr; /* shared memory union pointers */ int col = 0; /* first column displayed on screen */ int i = 0; /* loop counter */ int k; /* loop counter */ int rc; /* return value. */ int dev_len; /* loop counter */ int dev_no=-1; /* loop counter */ int max_strt_ent = 0; /* max starting entry */ int num_disp = 0; /* number of THE entries to show */ int num_entries = 0; /* local number of shm HE entries */ int row = 0; /* first row displayed on screen */ int strt_ent = 1; /* first entry on screen */ int update_screen = 0; /* update screen flag */ int workint = 0; struct ahd_entry *p_td_table = NULL; /* points to begin td seq tbl */ struct ahd_entry *p_into_table; /* points into td sequence table */ struct htxshm_HE *p_htxshm_HE; /* pointer to a htxshm_HE struct */ union shm_pointers shm_addr_wk; /* work ptr into shm */ shm_addr_wk.hdr_addr = shm_addr.hdr_addr; /* copy addr to work space */ (shm_addr_wk.hdr_addr)++; /* skip over header */ /* * display screen outline */ clear(); refresh(); display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn", 1, &row, &col, NUM_COLS, NUM_ROWS, 'n'); /* * loop until operator says to quit */ for (;;) { if ((shm_addr.hdr_addr)->max_entries == 0) { /* no HE programs? */ PRTMSG(MSGLINE, 0, ("There are no Hardware Exerciser programs currently defined.")); getch(); fflush(stdin); CLRLIN(MSGLINE, 0); if (p_td_table != NULL) { free((char *) p_td_table); /* release memory for td order tbl */ } return (-1); } else { /* some HE's defined. */ if ((shm_addr.hdr_addr)->max_entries != num_entries) { /* # HE change? */ num_entries = init_ahd_tbl(&p_td_table); if (num_entries <= 0) { return (num_entries); } /* problem in init fcn - bye! */ else { /* init fcn ran ok. */ if (num_entries <= 13) { /* 13 or fewer entries? */ max_strt_ent = 1; } else { /* more than 13 entries */ max_strt_ent = num_entries; } /* endif */ } /* endif */ } /* endif */ } /* endif */ /* * build screen data for the current strt_ent */ p_into_table = p_td_table + strt_ent - 1; num_disp = num_entries - strt_ent + 1; if (num_disp > 13) { num_disp = 13; } for (i = 1; i <= 13; i++) { if (i <= num_disp) { /* something there? */ p_htxshm_HE = shm_addr_wk.HE_addr + p_into_table->shm_pos; /* * build output characters & attributes for * entry */ /* * screen entry number */ #ifdef __HTX_LINUX__ wcolorout(stdscr, WHITE_BLUE | NORMAL); #else wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE); #endif wmove(stdscr, (i + 6), 3); wprintw(stdscr, "%2d", i); /* * Device Status */ work = get_dst(p_htxshm_HE, p_into_table->shm_pos, &dev_status); workint = htx_strlen(work); /* length of status string */ htx_strncpy(workstr, " ", 8 - workint); /* spaces */ workstr[8 - workint] = '\0'; /* set display attributes based on status */ if (dev_status == DST_CP || dev_status == DST_ST || dev_status == DST_RN) { #ifdef __HTX_LINUX__ wcolorout(stdscr, WHITE_BLUE | NORMAL); #else wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE); #endif } if (dev_status == DST_UK || dev_status == DST_SG || dev_status == DST_TM) { #ifdef __HTX_LINUX__ wcolorout(stdscr, WHITE_BLUE | STANDOUT); #else wcolorout(stdscr, STANDOUT | F_WHITE | B_BLUE); #endif } if (dev_status == DST_DD) { #ifdef __HTX_LINUX__ wcolorout(stdscr, RED_BLACK | STANDOUT); #else wcolorout(stdscr, STANDOUT | F_RED | B_BLACK); #endif } if (dev_status == DST_ER || dev_status == DST_HG) { #ifdef __HTX_LINUX__ wcolorout(stdscr, RED_BLACK | NORMAL); #else wcolorout(stdscr, NORMAL | F_RED | B_BLACK); #endif } /* display status */ mvwaddstr(stdscr, (i + 6), 6, work); /* pad field with spaces */ #ifdef __HTX_LINUX__ wcolorout(stdscr, WHITE_BLUE | NORMAL); #else wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE); #endif mvwaddstr(stdscr, (i + 6), 6 + workint, workstr); /* * Slot, Port, /dev/id, Adapt Desc, and Device * Desc */ wmove(stdscr, i + 6, 15); #ifdef __HTX_LINUX__ wcolorout(stdscr, WHITE_BLUE | NORMAL); #else wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE); #endif sprintf(workstr, " %.4d ", p_htxshm_HE->slot); mvwaddstr(stdscr, (i + 6), 15, workstr); sprintf(workstr, " %.4d ", p_htxshm_HE->port); mvwaddstr(stdscr, (i + 6), 22, workstr); /* set color for device id based on status */ if (dev_status == DST_CP || dev_status == DST_ST || dev_status == DST_RN || (dev_no+1) == i ) { #ifdef __HTX_LINUX__ wcolorout(stdscr, WHITE_BLUE | STANDOUT); #else wcolorout(stdscr, STANDOUT | F_WHITE | B_BLUE); #endif } else { #ifdef __HTX_LINUX__ wcolorout(stdscr, WHITE_BLUE | NORMAL); #else wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE); #endif } sprintf(workstr, " %-7s ", p_htxshm_HE->sdev_id); mvwaddstr(stdscr, (i + 6), 29, workstr); #ifdef __HTX_LINUX__ wcolorout(stdscr, WHITE_BLUE | NORMAL); #else wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE); #endif sprintf(workstr, " %-11s ", p_htxshm_HE->adapt_desc); mvwaddstr(stdscr, (i + 6), 39, workstr); sprintf(workstr, " %-18s ", p_htxshm_HE->device_desc); mvwaddstr(stdscr, (i + 6), 53, workstr); } else { /* no HE entry for this area of screen */ #ifdef __HTX_LINUX__ wcolorout(stdscr, WHITE_BLUE | NORMAL); #else wcolorout(stdscr, NORMAL | F_WHITE | B_BLUE); #endif mvwaddstr(stdscr, (i + 6), 3, " "); /* scn entry num */ mvwaddstr(stdscr, (i + 6), 6, " "); /* COE Flag */ mvwaddstr(stdscr, (i + 6), 15, " "); /* slot fld */ mvwaddstr(stdscr, (i + 6), 22, " "); /* port fld */ mvwaddstr(stdscr, (i + 6), 29, " "); /* sdev_id */ mvwaddstr(stdscr, (i + 6), 39, " "); /* adapt_desc field */ mvwaddstr(stdscr, (i + 6), 53, " "); /* device_desc field */ } /* endif */ p_into_table++; } /* endfor */ #ifdef __HTX_LINUX__ wcolorout(stdscr, NORMAL); #else wcolorout(stdscr, NORMAL); #endif for (update_screen = FALSE; (update_screen == FALSE);) { /* * Read input from keyboard... */ htx_strncpy(input, "", DIM(input)); /* clear input */ get_string(stdscr, TD_IN_ROW, TD_IN_COL, input, (size_t) DIM(input), (char *) NULL, (tbool) TRUE); switch (input[0]) { case 'f': case 'F': dev_no = -1; if (strt_ent < max_strt_ent) { strt_ent += 13; if (strt_ent > max_strt_ent) { strt_ent = max_strt_ent; } update_screen = TRUE; } else { beep(); } /* endif */ break; case 'b': case 'B': dev_no = -1; if (strt_ent > 1) { strt_ent -= 13; if (strt_ent < 1) { strt_ent = 1; } update_screen = TRUE; } else { beep(); } /* endif */ break; case 'q': case 'Q': if (p_td_table != NULL) { free((char *) p_td_table); /* rel mem for td table */ } return (0); case 'd': case 'D': dev_no = -1; clear(); refresh(); display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn", 1, &row, &col, NUM_COLS, NUM_ROWS, 'n'); update_screen = TRUE; break; case '/': rc = search_win(16, 50, 2, 2, "ddsrch_scn", 1, page_str); dev_len = strlen(page_str); if ( rc == -1 ) { (void) clear(); wrefresh(stdscr); /* (void) refresh(); */ (void) display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn", 1, &row, &col, NUM_COLS, NUM_ROWS, 'n'); PRTMSG(MSGLINE, 0, ("No String entered.")); update_screen = TRUE; dev_no = -1; break; } if ( rc == 0 ) { (void) clear(); wrefresh(stdscr); (void) display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn", 1, &row, &col, NUM_COLS, NUM_ROWS, 'n'); update_screen = TRUE; dev_no = -1; break; } for ( k=0; k<num_entries; k++) { struct ahd_entry *p_into_table_temp; struct htxshm_HE *p_htxshm_HE_temp; p_into_table_temp = p_td_table + k; p_htxshm_HE_temp = shm_addr_wk.HE_addr + p_into_table_temp->shm_pos; if ( strncmp(p_htxshm_HE_temp->sdev_id, page_str, dev_len) == 0 ) { break; } } if ( k >= num_entries ) { (void) clear(); wrefresh(stdscr); (void) refresh(); (void) display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn", 1, &row, &col, NUM_COLS, NUM_ROWS, 'n'); PRTMSG(MSGLINE, 0, ("Device not found.")); update_screen = TRUE; dev_no = -1; break; } dev_no = k%13; /* Points to the 1st entry of 13-entry-page * in which this device will be displayed. */ strt_ent = (((k/13) * 13) + 1); if (strt_ent > max_strt_ent) strt_ent = max_strt_ent; if (strt_ent <= 0) strt_ent = 1; (void) clear(); (void) refresh(); (void) display_scn(stdscr, 0, 0, LINES, COLS, "TD_scn", 1, &row, &col, NUM_COLS, NUM_ROWS, 'n'); update_screen = TRUE; break; default: dev_no = -1; cmp_regexp = regcmp(input, (char *) 0); /* compile exp */ if (cmp_regexp != NULL) { /* regular expression OK? */ for (i = 1; i <= num_disp; i++) { sprintf(workstr, "%-d", i); work = regex(cmp_regexp, workstr); if (work != NULL) { htx_strncpy(ret, " ", (size_t) sizeof(ret)); /* clear return (ret) array */ htx_strncpy(ret, __loc1, (size_t) (work - __loc1)); if (htx_strcmp(workstr, ret) == 0) { /* matched reg exp? */ update_screen = TRUE; p_into_table = p_td_table + (strt_ent - 1) + (i - 1); p_htxshm_HE = shm_addr_wk.HE_addr + p_into_table->shm_pos; if(p_htxshm_HE->PID != 0) { #ifdef __HTX_LINUX__ wcolorout(stdscr, WHITE_BLUE | STANDOUT); #else wcolorout(stdscr, STANDOUT | F_WHITE | B_BLUE); #endif mvwaddstr(stdscr, (i + 6), 6, "SIGNALED"); terminate_exerciser(p_htxshm_HE, p_into_table->shm_pos); } /* endif */ else { sprintf(workstr, "The exerciser for %s, %s is already deceased.", p_htxshm_HE->sdev_id, p_htxshm_HE->HE_name); PRTMSG(MSGLINE, 0, (workstr)); } /* else */ } /* endif */ } /* endif */ } /* endfor */ if (update_screen != TRUE) { /* no match? */ beep(); } /* endif */ } else { /* invalid entry_number */ beep(); } /* endif */ break; } /* endswitch */ } /* endfor */ } /* endfor */ } /* T_device */
int parse_config(const char *file_name) { pid_t pid = getpid(); snprintf(sysconfig.error_path_, MAX_FIO_PATH, "/var/log/error_nfio_%d.log", pid); snprintf(sysconfig.trace_path_, MAX_FIO_PATH, "/var/log/trace_nfio_%d.log", pid); FILE *fp; if ((fp = fopen(file_name, "r")) == NULL) { printf("fopen() failed\n"); return -1; } char line_buf[1024] = {0}; char key[64] = {0}; char value[1024] = {0}; char *p = NULL; int pos = 0, md = FM_STR; struct fetch_method *pfm; while(1) { if (fgets(line_buf, sizeof(line_buf), fp) == NULL) break; p = line_buf; while(isspace(*p)) p++; if (*p == '\0' || *p == '#') continue; GetArg(key, sizeof(key), &p); for (pfm = g_fms; pfm->key_name; pfm++) { if (!strcasecmp(key, pfm->key_name)) { md = pfm->fm; break; } } if (!pfm->key_name) { OD("%s doesn't been implemented!", key); continue; } if (pfm->flag&FML_STRUCT) { if (1 == g_struct) { OD("<error> Already in a struct"); goto config_error; } else g_struct = 1; } switch (md) { case FM_STR: get_str((char*)pfm->dst, value, sizeof(value), p); break; case FM_INT: get_int((int*)pfm->dst, value, sizeof(value), p); break; case FM_IPMAC: { struct IPMAC *ptr; if (NULL != (ptr=get_ipmac(fp))) { g_struct = 0; g_ip_macs[pos++] = ptr; g_mac_num++; } } break; case FM_DST: { struct IPDST ipdst; if (NULL != get_dst(fp, &ipdst)) { if (sysconfig.dst_count + 1 > FIO_MAX_DST_TEST) { OD("<error> too many dst tags"); goto config_error; } strcpy(sysconfig.dst_ip[sysconfig.dst_count].name, ipdst.ip); strcpy(sysconfig.dst_mac[sysconfig.dst_count].name, ipdst.mac); sysconfig.dst_count++; g_struct = 0; } else { OD("<error> get dst tags"); goto config_error; } } break; default: break; } } fclose(fp); return CheckValid(); config_error: fclose(fp); return -1; }