void assemble_op(enum Op op) { int op1 = ((int)op) >> 16; switch (formats[op1]) { case Bra: parse_bra(op); break; case Mem: parse_mem(op); break; case Mfc: parse_mfc(op); break; case Mbr: parse_mbr(op); break; case Opr: parse_opr(op); break; case F_P: parse_fp (op); break; default: { uint64_t num; if (parse_value(&num)) assemble_pcd(op1, (int)num); break; } } }
void BidlParser::do_parse(const std::string& bidl) { std::string dir; if (!g_parser.is_bidl_exist_in_bidl_include_dirs(bidl, dir)) { myerror("file %s is not exist", bidl.c_str()); } std::string fullname = dir + bidl; if (is_bidl_parsed(bidl)) { return; } _input_bidls.push_back(bidl); g_cur_bidl_file_name = bidl; FILE* fp = fopen(fullname.c_str(), "r"); if (!fp) { myerror("open %s failed: %s", fullname.c_str(), strerror(errno)); } ParseResult* pr; pr = parse_fp(fp); fclose(fp); if (!pr || !pr->bt) { myerror("parse %s failed", fullname.c_str()); } _filename2parseresult.insert(std::make_pair(bidl, pr)); std::vector<std::string>::const_iterator citr; for (citr = pr->include_bidls.begin(); citr != pr->include_bidls.end(); ++citr) { do_parse(*citr); } g_parseresult = NULL; }