diff options
Diffstat (limited to 'omegalib/code_gen/src')
-rw-r--r-- | omegalib/code_gen/src/CG.cc | 1163 | ||||
-rw-r--r-- | omegalib/code_gen/src/CG_roseBuilder.cc | 1533 | ||||
-rw-r--r-- | omegalib/code_gen/src/CG_roseRepr.cc | 176 | ||||
-rw-r--r-- | omegalib/code_gen/src/CG_stringBuilder.cc | 487 | ||||
-rw-r--r-- | omegalib/code_gen/src/CG_stringRepr.cc | 54 | ||||
-rw-r--r-- | omegalib/code_gen/src/CG_suifBuilder.cc | 678 | ||||
-rw-r--r-- | omegalib/code_gen/src/CG_suifRepr.cc | 81 | ||||
-rwxr-xr-x | omegalib/code_gen/src/CG_utils.cc | 1735 | ||||
-rw-r--r-- | omegalib/code_gen/src/code_gen.cc | 656 | ||||
-rwxr-xr-x | omegalib/code_gen/src/codegen.cc | 378 | ||||
-rw-r--r-- | omegalib/code_gen/src/cscope.out | 89773 | ||||
-rw-r--r-- | omegalib/code_gen/src/output_repr.cc | 1931 | ||||
-rw-r--r-- | omegalib/code_gen/src/rose_attributes.cc | 183 | ||||
-rw-r--r-- | omegalib/code_gen/src/tags | 158 |
14 files changed, 98986 insertions, 0 deletions
diff --git a/omegalib/code_gen/src/CG.cc b/omegalib/code_gen/src/CG.cc new file mode 100644 index 0000000..42bd172 --- /dev/null +++ b/omegalib/code_gen/src/CG.cc @@ -0,0 +1,1163 @@ +/***************************************************************************** + Copyright (C) 1994-2000 the Omega Project Team + Copyright (C) 2005-2011 Chun Chen + All Rights Reserved. + + Purpose: + CG node classes, used to build AST tree from polyhedra scanning. + + Notes: + Parameter "restriction" is always tighter than "known" since CG_split + node does not correspond to any code for enforcement. This property is + destroyed after hoistGuard since "restriction" is not used anymore. + CG node's children are guaranteed not to be NULL, either NULL child is + removed from the children or the parent node itself becomes NULL. + + History: + 04/20/96 printRepr added by D people. Lei Zhou + 10/24/06 hoistGuard added by chun + 08/03/10 collect CG classes into one place, by Chun Chen + 08/04/10 track dynamically substituted variables in printRepr, by chun + 04/02/11 rewrite the CG node classes, by chun + *****************************************************************************/ + +#include <typeinfo> +#include <assert.h> +#include <omega.h> +#include <code_gen/codegen.h> +#include <code_gen/CG.h> +#include <code_gen/CG_outputBuilder.h> +#include <code_gen/CG_stringBuilder.h> +#include <code_gen/CG_utils.h> +#include <code_gen/codegen_error.h> +#include <stack> +#include <string.h> + +namespace omega { + +extern std::vector<std::vector<int> > smtNonSplitLevels; +extern std::vector<std::vector<std::string> > loopIdxNames; //per stmt +extern std::vector<std::pair<int, std::string> > syncs; + +extern int checkLoopLevel; +extern int stmtForLoopCheck; +extern int upperBoundForLevel; +extern int lowerBoundForLevel; +extern bool fillInBounds; + +//----------------------------------------------------------------------------- +// Class: CG_result +//----------------------------------------------------------------------------- + +CG_outputRepr *CG_result::printRepr(CG_outputBuilder *ocg, + const std::vector<CG_outputRepr *> &stmts) const { + return printRepr(1, ocg, stmts, + std::vector<std::pair<CG_outputRepr *, int> >(num_level(), + std::make_pair(static_cast<CG_outputRepr *>(NULL), 0))); +} + +std::string CG_result::printString() const { + CG_stringBuilder ocg; + std::vector<CG_outputRepr *> stmts(codegen_->xforms_.size()); + for (int i = 0; i < stmts.size(); i++) + stmts[i] = new CG_stringRepr("s" + to_string(i)); + CG_stringRepr *repr = static_cast<CG_stringRepr *>(printRepr(&ocg, stmts)); + for (int i = 0; i < stmts.size(); i++) + delete stmts[i]; + + if (repr != NULL) { + std::string s = repr->GetString(); + delete repr; + return s; + } else + return std::string(); +} + +int CG_result::num_level() const { + return codegen_->num_level(); +} + +//----------------------------------------------------------------------------- +// Class: CG_split +//----------------------------------------------------------------------------- + +CG_result *CG_split::recompute(const BoolSet<> &parent_active, + const Relation &known, const Relation &restriction) { + active_ &= parent_active; + if (active_.empty()) { + delete this; + return NULL; + } + + + int i = 0; + while (i < restrictions_.size()) { + Relation new_restriction = Intersection(copy(restrictions_[i]), + copy(restriction)); + + new_restriction.simplify(2, 4); + //new_restriction.simplify(); + clauses_[i] = clauses_[i]->recompute(active_, copy(known), + new_restriction); + if (clauses_[i] == NULL) { + restrictions_.erase(restrictions_.begin() + i); + clauses_.erase(clauses_.begin() + i); + } else + i++; + } + + + if (restrictions_.size() == 0) { + delete this; + return NULL; + } else + return this; +} + +int CG_split::populateDepth() { + int max_depth = 0; + for (int i = 0; i < clauses_.size(); i++) { + int t = clauses_[i]->populateDepth(); + if (t > max_depth) + max_depth = t; + } + return max_depth; +} + +std::pair<CG_result *, Relation> CG_split::liftOverhead(int depth, + bool propagate_up) { + for (int i = 0; i < clauses_.size();) { + std::pair<CG_result *, Relation> result = clauses_[i]->liftOverhead( + depth, propagate_up); + if (result.first == NULL) + clauses_.erase(clauses_.begin() + i); + else { + clauses_[i] = result.first; + if (!result.second.is_obvious_tautology()) + return std::make_pair(this, result.second); + i++; + } + + } + + if (clauses_.size() == 0) { + delete this; + return std::make_pair(static_cast<CG_result *>(NULL), + Relation::True(num_level())); + } else + return std::make_pair(this, Relation::True(num_level())); +} + +Relation CG_split::hoistGuard() { + std::vector<Relation> guards; + for (int i = 0; i < clauses_.size(); i++) + guards.push_back(clauses_[i]->hoistGuard()); + + return SimpleHull(guards, true, true); +} + +void CG_split::removeGuard(const Relation &guard) { + for (int i = 0; i < clauses_.size(); i++) + clauses_[i]->removeGuard(guard); +} + +std::vector<CG_result *> CG_split::findNextLevel() const { + std::vector<CG_result *> result; + for (int i = 0; i < clauses_.size(); i++) { + CG_split *splt = dynamic_cast<CG_split *>(clauses_[i]); + if (splt != NULL) { + std::vector<CG_result *> t = splt->findNextLevel(); + result.insert(result.end(), t.begin(), t.end()); + } else + result.push_back(clauses_[i]); + } + + return result; +} + +CG_outputRepr *CG_split::printRepr(int indent, CG_outputBuilder *ocg, + const std::vector<CG_outputRepr *> &stmts, + const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) const { + CG_outputRepr *stmtList = NULL; + std::vector<CG_result *> next_level = findNextLevel(); + + std::vector<CG_loop *> cur_loops; + for (int i = 0; i < next_level.size(); i++) { + CG_loop *lp = dynamic_cast<CG_loop *>(next_level[i]); + if (lp != NULL) { + cur_loops.push_back(lp); + } else { + stmtList = ocg->StmtListAppend(stmtList, + loop_print_repr(cur_loops, 0, cur_loops.size(), + Relation::True(num_level()), NULL, indent, ocg, + stmts, assigned_on_the_fly)); + stmtList = ocg->StmtListAppend(stmtList, + next_level[i]->printRepr(indent, ocg, stmts, + assigned_on_the_fly)); + cur_loops.clear(); + } + } + + stmtList = ocg->StmtListAppend(stmtList, + loop_print_repr(cur_loops, 0, cur_loops.size(), + Relation::True(num_level()), NULL, indent, ocg, stmts, + assigned_on_the_fly)); + return stmtList; +} + +CG_result *CG_split::clone() const { + std::vector<CG_result *> clauses(clauses_.size()); + for (int i = 0; i < clauses_.size(); i++) + clauses[i] = clauses_[i]->clone(); + return new CG_split(codegen_, active_, restrictions_, clauses); +} + +void CG_split::dump(int indent) const { + std::string prefix; + for (int i = 0; i < indent; i++) + prefix += " "; + std::cout << prefix << "SPLIT: " << active_ << std::endl; + for (int i = 0; i < restrictions_.size(); i++) { + std::cout << prefix << "restriction: "; + const_cast<CG_split *>(this)->restrictions_[i].print(); + clauses_[i]->dump(indent + 1); + } + +} + +//----------------------------------------------------------------------------- +// Class: CG_loop +//----------------------------------------------------------------------------- + +CG_result *CG_loop::recompute(const BoolSet<> &parent_active, + const Relation &known, const Relation &restriction) { + known_ = copy(known); + restriction_ = copy(restriction); + active_ &= parent_active; + + std::vector<Relation> Rs; + for (BoolSet<>::iterator i = active_.begin(); i != active_.end(); i++) { + Relation r = Intersection(copy(restriction), + copy(codegen_->projected_IS_[level_ - 1][*i])); + + //r.simplify(2, 4); + r.simplify(); + if (!r.is_upper_bound_satisfiable()) { + active_.unset(*i); + continue; + } + Rs.push_back(copy(r)); + } + + if (active_.empty()) { + delete this; + return NULL; + } + + Relation hull = SimpleHull(Rs, true, true); + + //hull.simplify(2,4); + + // check if actual loop is needed + std::pair<EQ_Handle, int> result = find_simplest_assignment(hull, + hull.set_var(level_)); + if (result.second < INT_MAX) { + needLoop_ = false; + + bounds_ = Relation(hull.n_set()); + F_Exists *f_exists = bounds_.add_and()->add_exists(); + F_And *f_root = f_exists->add_and(); + std::map<Variable_ID, Variable_ID> exists_mapping; + EQ_Handle h = f_root->add_EQ(); + for (Constr_Vars_Iter cvi(result.first); cvi; cvi++) { + Variable_ID v = cvi.curr_var(); + switch (v->kind()) { + case Input_Var: + h.update_coef(bounds_.input_var(v->get_position()), + cvi.curr_coef()); + break; + case Wildcard_Var: { + Variable_ID v2 = replicate_floor_definition(hull, v, bounds_, + f_exists, f_root, exists_mapping); + h.update_coef(v2, cvi.curr_coef()); + break; + } + case Global_Var: { + Global_Var_ID g = v->get_global_var(); + Variable_ID v2; + if (g->arity() == 0) + v2 = bounds_.get_local(g); + else + v2 = bounds_.get_local(g, v->function_of()); + h.update_coef(v2, cvi.curr_coef()); + break; + } + default: + assert(false); + } + } + h.update_const(result.first.get_const()); + bounds_.simplify(); + } + // loop iterates more than once, extract bounds now + else { + needLoop_ = true; + + bounds_ = Relation(hull.n_set()); + F_Exists *f_exists = bounds_.add_and()->add_exists(); + F_And *f_root = f_exists->add_and(); + std::map<Variable_ID, Variable_ID> exists_mapping; + + Relation b = Gist(copy(hull), copy(known), 1); + bool has_unresolved_bound = false; + + std::set<Variable_ID> excluded_floor_vars; + excluded_floor_vars.insert(b.set_var(level_)); + for (GEQ_Iterator e(b.single_conjunct()->GEQs()); e; e++) + if ((*e).get_coef(b.set_var(level_)) != 0) { + bool is_bound = true; + for (Constr_Vars_Iter cvi(*e, true); cvi; cvi++) { + std::pair<bool, GEQ_Handle> result = find_floor_definition( + b, cvi.curr_var(), excluded_floor_vars); + if (!result.first) { + is_bound = false; + has_unresolved_bound = true; + break; + } + } + + if (!is_bound) + continue; + + GEQ_Handle h = f_root->add_GEQ(); + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) { + Variable_ID v = cvi.curr_var(); + switch (v->kind()) { + case Input_Var: + h.update_coef(bounds_.input_var(v->get_position()), + cvi.curr_coef()); + break; + case Wildcard_Var: { + Variable_ID v2 = replicate_floor_definition(b, v, + bounds_, f_exists, f_root, exists_mapping); + h.update_coef(v2, cvi.curr_coef()); + break; + } + case Global_Var: { + Global_Var_ID g = v->get_global_var(); + Variable_ID v2; + if (g->arity() == 0) + v2 = bounds_.get_local(g); + else + v2 = bounds_.get_local(g, v->function_of()); + h.update_coef(v2, cvi.curr_coef()); + break; + } + default: + assert(false); + } + } + h.update_const((*e).get_const()); + } + + if (has_unresolved_bound) { + b = Approximate(b); + b.simplify(2, 4); + //Simplification of Hull + hull = Approximate(hull); + hull.simplify(2, 4); + //end : Anand + for (GEQ_Iterator e(b.single_conjunct()->GEQs()); e; e++) + if ((*e).get_coef(b.set_var(level_)) != 0) + f_root->add_GEQ(*e); + } + bounds_.simplify(); + hull.simplify(2,4); + // Since current SimpleHull does not support max() upper bound or min() lower bound, + // we have to forcefully split the loop when hull approximation does not return any bound. + bool has_lb = false; + bool has_ub = false; + for (GEQ_Iterator e = bounds_.single_conjunct()->GEQs(); e; e++) { + if ((*e).get_coef(bounds_.set_var(level_)) > 0) + has_lb = true; + else if ((*e).get_coef(bounds_.set_var(level_)) < 0) + has_ub = true; + if (has_lb && has_ub) + break; + } + + if (!has_lb) { + for (int i = 0; i < Rs.size(); i++) { + Relation r = Approximate(copy(Rs[i])); + r.simplify(2, 4); + for (GEQ_Iterator e = r.single_conjunct()->GEQs(); e; e++) + if ((*e).get_coef(r.input_var(level_)) > 0) { + Relation r2 = Relation::True(num_level()); + r2.and_with_GEQ(*e); + r2.simplify(); + std::vector<Relation> restrictions(2); + restrictions[0] = Complement(copy(r2)); + restrictions[0].simplify(); + restrictions[1] = r2; + std::vector<CG_result *> clauses(2); + clauses[0] = this; + clauses[1] = this->clone(); + CG_result *cgr = new CG_split(codegen_, active_, + restrictions, clauses); + cgr = cgr->recompute(active_, copy(known), + copy(restriction)); + return cgr; + } + } + for (int i = 0; i < Rs.size(); i++) { + Relation r = Approximate(copy(Rs[i])); + r.simplify(2, 4); + for (EQ_Iterator e = r.single_conjunct()->EQs(); e; e++) + if ((*e).get_coef(r.input_var(level_)) != 0) { + Relation r2 = Relation::True(num_level()); + r2.and_with_GEQ(*e); + r2.simplify(); + std::vector<Relation> restrictions(2); + if ((*e).get_coef(r.input_var(level_)) > 0) { + restrictions[0] = Complement(copy(r2)); + restrictions[0].simplify(); + restrictions[1] = r2; + } else { + restrictions[0] = r2; + restrictions[1] = Complement(copy(r2)); + restrictions[1].simplify(); + } + std::vector<CG_result *> clauses(2); + clauses[0] = this; + clauses[1] = this->clone(); + CG_result *cgr = new CG_split(codegen_, active_, + restrictions, clauses); + cgr = cgr->recompute(active_, copy(known), + copy(restriction)); + return cgr; + } + } + } else if (!has_ub) { + for (int i = 0; i < Rs.size(); i++) { + Relation r = Approximate(copy(Rs[i])); + r.simplify(2, 4); + for (GEQ_Iterator e = r.single_conjunct()->GEQs(); e; e++) + if ((*e).get_coef(r.input_var(level_)) < 0) { + Relation r2 = Relation::True(num_level()); + r2.and_with_GEQ(*e); + r2.simplify(); + std::vector<Relation> restrictions(2); + restrictions[1] = Complement(copy(r2)); + restrictions[1].simplify(); + restrictions[0] = r2; + std::vector<CG_result *> clauses(2); + clauses[0] = this; + clauses[1] = this->clone(); + CG_result *cgr = new CG_split(codegen_, active_, + restrictions, clauses); + cgr = cgr->recompute(active_, copy(known), + copy(restriction)); + return cgr; + } + } + for (int i = 0; i < Rs.size(); i++) { + Relation r = Approximate(copy(Rs[i])); + r.simplify(2, 4); + for (EQ_Iterator e = r.single_conjunct()->EQs(); e; e++) + if ((*e).get_coef(r.input_var(level_)) != 0) { + Relation r2 = Relation::True(num_level()); + r2.and_with_GEQ(*e); + r2.simplify(); + std::vector<Relation> restrictions(2); + if ((*e).get_coef(r.input_var(level_)) > 0) { + restrictions[0] = Complement(copy(r2)); + restrictions[0].simplify(); + restrictions[1] = r2; + } else { + restrictions[0] = r2; + restrictions[1] = Complement(copy(r2)); + restrictions[1].simplify(); + } + std::vector<CG_result *> clauses(2); + clauses[0] = this; + clauses[1] = this->clone(); + CG_result *cgr = new CG_split(codegen_, active_, + restrictions, clauses); + cgr = cgr->recompute(active_, copy(known), + copy(restriction)); + return cgr; + } + } + } + + if (!has_lb && !has_ub) + throw codegen_error( + "can't find any bound at loop level " + to_string(level_)); + else if (!has_lb) + throw codegen_error( + "can't find lower bound at loop level " + + to_string(level_)); + else if (!has_ub) + throw codegen_error( + "can't find upper bound at loop level " + + to_string(level_)); + } + bounds_.copy_names(hull); + bounds_.setup_names(); + + // additional guard/stride condition extraction + if (needLoop_) { + Relation cur_known = Intersection(copy(bounds_), copy(known_)); + cur_known.simplify(); + hull = Gist(hull, copy(cur_known), 1); + + std::pair<EQ_Handle, Variable_ID> result = find_simplest_stride(hull, + hull.set_var(level_)); + if (result.second != NULL) + if (abs(result.first.get_coef(hull.set_var(level_))) == 1) { + F_Exists *f_exists = bounds_.and_with_and()->add_exists(); + F_And *f_root = f_exists->add_and(); + std::map<Variable_ID, Variable_ID> exists_mapping; + EQ_Handle h = f_root->add_EQ(); + for (Constr_Vars_Iter cvi(result.first); cvi; cvi++) { + Variable_ID v = cvi.curr_var(); + switch (v->kind()) { + case Input_Var: + h.update_coef(bounds_.input_var(v->get_position()), + cvi.curr_coef()); + break; + case Wildcard_Var: { + Variable_ID v2; + if (v == result.second) + v2 = f_exists->declare(); + else + v2 = replicate_floor_definition(hull, v, bounds_, + f_exists, f_root, exists_mapping); + h.update_coef(v2, cvi.curr_coef()); + break; + } + case Global_Var: { + Global_Var_ID g = v->get_global_var(); + Variable_ID v2; + if (g->arity() == 0) + v2 = bounds_.get_local(g); + else + v2 = bounds_.get_local(g, v->function_of()); + h.update_coef(v2, cvi.curr_coef()); + break; + } + default: + assert(false); + } + } + h.update_const(result.first.get_const()); + } else { + // since gist is not powerful enough on modular constraints for now, + // make an educated guess + coef_t stride = abs(result.first.get_coef(result.second)) + / gcd(abs(result.first.get_coef(result.second)), + abs( + result.first.get_coef( + hull.set_var(level_)))); + + Relation r1(hull.n_inp()); + F_Exists *f_exists = r1.add_and()->add_exists(); + F_And *f_root = f_exists->add_and(); + std::map<Variable_ID, Variable_ID> exists_mapping; + EQ_Handle h = f_root->add_EQ(); + for (Constr_Vars_Iter cvi(result.first); cvi; cvi++) { + Variable_ID v = cvi.curr_var(); + switch (v->kind()) { + case Input_Var: + h.update_coef(r1.input_var(v->get_position()), + cvi.curr_coef()); + break; + case Wildcard_Var: { + Variable_ID v2; + if (v == result.second) + v2 = f_exists->declare(); + else + v2 = replicate_floor_definition(hull, v, r1, + f_exists, f_root, exists_mapping); + h.update_coef(v2, cvi.curr_coef()); + break; + } + case Global_Var: { + Global_Var_ID g = v->get_global_var(); + Variable_ID v2; + if (g->arity() == 0) + v2 = r1.get_local(g); + else + v2 = r1.get_local(g, v->function_of()); + h.update_coef(v2, cvi.curr_coef()); + break; + } + default: + assert(false); + } + } + h.update_const(result.first.get_const()); + r1.simplify(); + + bool guess_success = false; + for (GEQ_Iterator e(bounds_.single_conjunct()->GEQs()); e; e++) + if ((*e).get_coef(bounds_.set_var(level_)) == 1) { + Relation r2(hull.n_inp()); + F_Exists *f_exists = r2.add_and()->add_exists(); + F_And *f_root = f_exists->add_and(); + std::map<Variable_ID, Variable_ID> exists_mapping; + EQ_Handle h = f_root->add_EQ(); + h.update_coef(f_exists->declare(), stride); + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) { + Variable_ID v = cvi.curr_var(); + switch (v->kind()) { + case Input_Var: + h.update_coef(r2.input_var(v->get_position()), + cvi.curr_coef()); + break; + case Wildcard_Var: { + Variable_ID v2 = replicate_floor_definition( + hull, v, r2, f_exists, f_root, + exists_mapping); + h.update_coef(v2, cvi.curr_coef()); + break; + } + case Global_Var: { + Global_Var_ID g = v->get_global_var(); + Variable_ID v2; + if (g->arity() == 0) + v2 = r2.get_local(g); + else + v2 = r2.get_local(g, v->function_of()); + h.update_coef(v2, cvi.curr_coef()); + break; + } + default: + assert(false); + } + } + h.update_const((*e).get_const()); + r2.simplify(); + + if (Gist(copy(r1), + Intersection(copy(cur_known), copy(r2)), 1).is_obvious_tautology() + && Gist(copy(r2), + Intersection(copy(cur_known), copy(r1)), + 1).is_obvious_tautology()) { + bounds_ = Intersection(bounds_, r2); + bounds_.simplify(); + guess_success = true; + break; + } + } + + // this is really a stride with non-unit coefficient for this loop variable + if (!guess_success) { + // TODO: for stride ax = b mod n it might be beneficial to + // generate modular linear equation solver code for + // runtime to get the starting position in printRepr, + // and stride would be n/gcd(|a|,n), thus this stride + // can be put into bounds_ too. + } + + } + + hull = Project(hull, hull.set_var(level_)); + hull.simplify(2, 4); + guard_ = Gist(hull, Intersection(copy(bounds_), copy(known_)), 1); + } + // don't generate guard for non-actual loop, postpone it. otherwise + // redundant if-conditions might be generated since for-loop semantics + // includes implicit comparison checking. -- by chun 09/14/10 + else + guard_ = Relation::True(num_level()); + guard_.copy_names(bounds_); + guard_.setup_names(); + + //guard_.simplify(); + // recursively down the AST + Relation new_known = Intersection(copy(known), + Intersection(copy(bounds_), copy(guard_))); + new_known.simplify(2, 4); + Relation new_restriction = Intersection(copy(restriction), + Intersection(copy(bounds_), copy(guard_))); + new_restriction.simplify(2, 4); + body_ = body_->recompute(active_, new_known, new_restriction); + if (body_ == NULL) { + delete this; + return NULL; + } else + return this; +} + +int CG_loop::populateDepth() { + int depth = body_->populateDepth(); + if (needLoop_) + depth_ = depth + 1; + else + depth_ = depth; + return depth_; +} + +std::pair<CG_result *, Relation> CG_loop::liftOverhead(int depth, + bool propagate_up) { + if (depth_ > depth) { + assert(propagate_up == false); + std::pair<CG_result *, Relation> result = body_->liftOverhead(depth, + false); + body_ = result.first; + return std::make_pair(this, Relation::True(num_level())); + } else { // (depth_ <= depth) + if (propagate_up) { + Relation r = pick_one_guard(guard_, level_); + if (!r.is_obvious_tautology()) + return std::make_pair(this, r); + } + + std::pair<CG_result *, Relation> result; + if (propagate_up || needLoop_) + result = body_->liftOverhead(depth, true); + else + result = body_->liftOverhead(depth, false); + body_ = result.first; + if (result.second.is_obvious_tautology()) + return std::make_pair(this, result.second); + + // loop is an assignment, replace this loop variable in overhead condition + if (!needLoop_) { + result.second = Intersection(result.second, copy(bounds_)); + result.second = Project(result.second, + result.second.set_var(level_)); + result.second.simplify(2, 4); + } + + + int max_level = 0; + bool has_wildcard = false; + bool direction = true; + for (EQ_Iterator e(result.second.single_conjunct()->EQs()); e; e++) + if ((*e).has_wildcards()) { + if (has_wildcard) + assert(false); + else + has_wildcard = true; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + if (cvi.curr_var()->kind() == Input_Var + && cvi.curr_var()->get_position() > max_level) + max_level = cvi.curr_var()->get_position(); + } else + assert(false); + + if (!has_wildcard) { + int num_simple_geq = 0; + for (GEQ_Iterator e(result.second.single_conjunct()->GEQs()); e; + e++) + if (!(*e).has_wildcards()) { + num_simple_geq++; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + if (cvi.curr_var()->kind() == Input_Var + && cvi.curr_var()->get_position() > max_level) { + max_level = cvi.curr_var()->get_position(); + direction = (cvi.curr_coef() < 0) ? true : false; + } + } else { + has_wildcard = true; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + if (cvi.curr_var()->kind() == Input_Var + && cvi.curr_var()->get_position() > max_level) { + max_level = cvi.curr_var()->get_position(); + } + } + assert( + (has_wildcard && num_simple_geq == 0) || (!has_wildcard && num_simple_geq == 1)); + } + + // check if this is the top loop level for splitting for this overhead + if (!propagate_up || (has_wildcard && max_level == level_ - 1) + || (!has_wildcard && max_level == level_)) { + std::vector<Relation> restrictions(2); + std::vector<CG_result *> clauses(2); + int saved_num_level = num_level(); + if (has_wildcard || direction) { + restrictions[1] = Complement(copy(result.second)); + restrictions[1].simplify(); + clauses[1] = this->clone(); + restrictions[0] = result.second; + clauses[0] = this; + } else { + restrictions[0] = Complement(copy(result.second)); + restrictions[0].simplify(); + clauses[0] = this->clone(); + restrictions[1] = result.second; + clauses[1] = this; + } + CG_result *cgr = new CG_split(codegen_, active_, restrictions, + clauses); + CG_result *new_cgr = cgr->recompute(active_, copy(known_), + copy(restriction_)); + new_cgr->populateDepth(); + assert(new_cgr==cgr); + if (static_cast<CG_split *>(new_cgr)->clauses_.size() == 1) + // infinite recursion detected, bail out + return std::make_pair(new_cgr, Relation::True(saved_num_level)); + else + return cgr->liftOverhead(depth, propagate_up); + } else + return std::make_pair(this, result.second); + } +} + +Relation CG_loop::hoistGuard() { + + Relation r = body_->hoistGuard(); + + // TODO: should bookkeep catched contraints in loop output as enforced and check if anything missing + // if (!Gist(copy(b), copy(enforced)).is_obvious_tautology()) { + // fprintf(stderr, "need to generate extra guard inside the loop\n"); + // } + + if (!needLoop_) + r = Intersection(r, copy(bounds_)); + r = Project(r, r.set_var(level_)); + r = Gist(r, copy(known_), 1); + + Relation eliminate_existentials_r; + Relation eliminate_existentials_known; + + eliminate_existentials_r = copy(r); + if (!r.is_obvious_tautology()) { + eliminate_existentials_r = Approximate(copy(r)); + eliminate_existentials_r.simplify(2,4); + eliminate_existentials_known = Approximate(copy(known_)); + eliminate_existentials_known.simplify(2,4); + + eliminate_existentials_r = Gist( eliminate_existentials_r, eliminate_existentials_known, 1); + } + + + if (!eliminate_existentials_r.is_obvious_tautology()) { + // if (!r.is_obvious_tautology()) { + body_->removeGuard(r); + guard_ = Intersection(guard_, copy(r)); + guard_.simplify(); + } + + return guard_; + + // return ifList; + // } + + +} + +void CG_loop::removeGuard(const Relation &guard) { + known_ = Intersection(known_, copy(guard)); + known_.simplify(); + + guard_ = Gist(guard_, copy(known_), 1); + guard_.copy_names(known_); + guard_.setup_names(); +} + +CG_outputRepr *CG_loop::printRepr(int indent, CG_outputBuilder *ocg, + const std::vector<CG_outputRepr *> &stmts, + const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) const { + return printRepr(true, indent, ocg, stmts, assigned_on_the_fly); +} + +CG_outputRepr *CG_loop::printRepr(bool do_print_guard, int indent, + CG_outputBuilder *ocg, const std::vector<CG_outputRepr *> &stmts, + const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) const { + CG_outputRepr *guardRepr; + if (do_print_guard) + guardRepr = output_guard(ocg, guard_, assigned_on_the_fly); + else + guardRepr = NULL; + + Relation cur_known = Intersection(copy(known_), copy(guard_)); + cur_known.simplify(); + if (needLoop_) { + + if (checkLoopLevel) + if (level_ == checkLoopLevel) + if (active_.get(stmtForLoopCheck)) + fillInBounds = true; + + CG_outputRepr *ctrlRepr = output_loop(ocg, bounds_, level_, cur_known, + assigned_on_the_fly); + + fillInBounds = false; + + CG_outputRepr *bodyRepr = body_->printRepr( + (guardRepr == NULL) ? indent + 1 : indent + 2, ocg, stmts, + assigned_on_the_fly); + CG_outputRepr * loopRepr; + + if (guardRepr == NULL) + loopRepr = ocg->CreateLoop(indent, ctrlRepr, bodyRepr); + else + loopRepr = ocg->CreateLoop(indent + 1, ctrlRepr, bodyRepr); + + if (!smtNonSplitLevels.empty()) { + bool blockLoop = false; + bool threadLoop = false; + bool sync = false; + int firstActiveStmt = -1; + for (int s = 0; s < active_.size(); s++) { + if (active_.get(s)) { + if (firstActiveStmt < 0) + firstActiveStmt = s; + //We assume smtNonSplitLevels is only used to mark the first of + //the block or thread loops to be reduced in CUDA-CHiLL. Here we + //place some comments to help with final code generation. + //int idx = smtNonSplitLevels[s].index(level_); + + if (s < smtNonSplitLevels.size()) { + if (smtNonSplitLevels[s].size() > 0) + if (smtNonSplitLevels[s][0] == level_) { + blockLoop = true; + } + //Assume every stmt marked with a thread loop index also has a block loop idx + if (smtNonSplitLevels[s].size() > 1) + if (smtNonSplitLevels[s][1] == level_) { + threadLoop = true; + } + } + } + } + if (blockLoop && threadLoop) { + fprintf(stderr, + "Warning, have %d level more than once in smtNonSplitLevels\n", + level_); + threadLoop = false; + } + std::string preferredIdx; + if (loopIdxNames.size() + && (level_ / 2) - 1 < loopIdxNames[firstActiveStmt].size()) + preferredIdx = loopIdxNames[firstActiveStmt][(level_ / 2) - 1]; + for (int s = 0; s < active_.size(); s++) { + if (active_.get(s)) { + for (int i = 0; i < syncs.size(); i++) { + if (syncs[i].first == s + && strcmp(syncs[i].second.c_str(), + preferredIdx.c_str()) == 0) { + sync = true; + //printf("FOUND SYNC\n"); + } + + } + } + + } + if (threadLoop || blockLoop || preferredIdx.length() != 0) { + char buf[1024]; + std::string loop; + if (blockLoop) + loop = "blockLoop "; + if (threadLoop) + loop = "threadLoop "; + if (preferredIdx.length() != 0 && sync) { + sprintf(buf, "~cuda~ %spreferredIdx: %s sync", loop.c_str(), + preferredIdx.c_str()); + } else if (preferredIdx.length() != 0) { + sprintf(buf, "~cuda~ %spreferredIdx: %s", loop.c_str(), + preferredIdx.c_str()); + } else { + sprintf(buf, "~cuda~ %s", loop.c_str()); + } + + + loopRepr = ocg->CreateAttribute(loopRepr, buf); + } + + } + if (guardRepr == NULL) + return loopRepr; + else + return ocg->CreateIf(indent, guardRepr, loopRepr, NULL); + } else { + std::pair<CG_outputRepr *, std::pair<CG_outputRepr *, int> > result = + output_assignment(ocg, bounds_, level_, cur_known, + assigned_on_the_fly); + guardRepr = ocg->CreateAnd(guardRepr, result.first); + + if (result.second.second < CodeGen::var_substitution_threshold) { + std::vector<std::pair<CG_outputRepr *, int> > atof = + assigned_on_the_fly; + atof[level_ - 1] = result.second; + CG_outputRepr *bodyRepr = body_->printRepr( + (guardRepr == NULL) ? indent : indent + 1, ocg, stmts, + atof); + delete atof[level_ - 1].first; + if (guardRepr == NULL) + return bodyRepr; + else + return ocg->CreateIf(indent, guardRepr, bodyRepr, NULL); + } else { + CG_outputRepr *assignRepr = ocg->CreateAssignment( + (guardRepr == NULL) ? indent : indent + 1, + output_ident(ocg, bounds_, + const_cast<CG_loop *>(this)->bounds_.set_var( + level_), assigned_on_the_fly), + result.second.first); + CG_outputRepr *bodyRepr = body_->printRepr( + (guardRepr == NULL) ? indent : indent + 1, ocg, stmts, + assigned_on_the_fly); + if (guardRepr == NULL) + return ocg->StmtListAppend(assignRepr, bodyRepr); + else + return ocg->CreateIf(indent, guardRepr, + ocg->StmtListAppend(assignRepr, bodyRepr), NULL); + } + + } +} + +CG_result *CG_loop::clone() const { + return new CG_loop(codegen_, active_, level_, body_->clone()); +} + +void CG_loop::dump(int indent) const { + std::string prefix; + for (int i = 0; i < indent; i++) + prefix += " "; + std::cout << prefix << "LOOP (level " << level_ << "): " << active_ + << std::endl; + std::cout << prefix << "known: "; + const_cast<CG_loop *>(this)->known_.print(); + std::cout << prefix << "restriction: "; + const_cast<CG_loop *>(this)->restriction_.print(); + std::cout << prefix << "bounds: "; + const_cast<CG_loop *>(this)->bounds_.print(); + std::cout << prefix << "guard: "; + const_cast<CG_loop *>(this)->guard_.print(); + body_->dump(indent + 1); +} + +//----------------------------------------------------------------------------- +// Class: CG_leaf +//----------------------------------------------------------------------------- + +CG_result* CG_leaf::recompute(const BoolSet<> &parent_active, + const Relation &known, const Relation &restriction) { + active_ &= parent_active; + known_ = copy(known); + + guards_.clear(); + for (BoolSet<>::iterator i = active_.begin(); i != active_.end(); i++) { + Relation r = Intersection( + copy(codegen_->projected_IS_[num_level() - 1][*i]), + copy(restriction)); + r.simplify(2, 4); + if (!r.is_upper_bound_satisfiable()) + active_.unset(*i); + else { + r = Gist(r, copy(known), 1); + if (!r.is_obvious_tautology()) { + guards_[*i] = r; + guards_[*i].copy_names(known); + guards_[*i].setup_names(); + } + } + } + + + if (active_.empty()) { + delete this; + return NULL; + } else + return this; +} + +std::pair<CG_result *, Relation> CG_leaf::liftOverhead(int depth, bool) { + if (depth == 0) + return std::make_pair(this, Relation::True(num_level())); + + for (std::map<int, Relation>::iterator i = guards_.begin(); + i != guards_.end(); i++) { + Relation r = pick_one_guard(i->second); + if (!r.is_obvious_tautology()) { + bool has_wildcard = false; + int max_level = 0; + for (EQ_Iterator e(r.single_conjunct()->EQs()); e; e++) { + if ((*e).has_wildcards()) + has_wildcard = true; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + if (cvi.curr_var()->kind() == Input_Var + && cvi.curr_var()->get_position() > max_level) + max_level = cvi.curr_var()->get_position(); + } + for (GEQ_Iterator e(r.single_conjunct()->GEQs()); e; e++) { + if ((*e).has_wildcards()) + has_wildcard = true; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + if (cvi.curr_var()->kind() == Input_Var + && cvi.curr_var()->get_position() > max_level) + max_level = cvi.curr_var()->get_position(); + } + + if (!(has_wildcard && max_level == codegen_->num_level())) + return std::make_pair(this, r); + } + } + + return std::make_pair(this, Relation::True(num_level())); +} + +Relation CG_leaf::hoistGuard() { + std::vector<Relation> guards; + for (BoolSet<>::iterator i = active_.begin(); i != active_.end(); i++) { + std::map<int, Relation>::iterator j = guards_.find(*i); + if (j == guards_.end()) { + Relation r = Relation::True(num_level()); + r.copy_names(known_); + r.setup_names(); + return r; + } else { + guards.push_back(j->second); + } + } + + return SimpleHull(guards, true, true); +} + +void CG_leaf::removeGuard(const Relation &guard) { + known_ = Intersection(known_, copy(guard)); + known_.simplify(); + + std::map<int, Relation>::iterator i = guards_.begin(); + while (i != guards_.end()) { + i->second = Gist(i->second, copy(known_), 1); + if (i->second.is_obvious_tautology()) + guards_.erase(i++); + else + ++i; + } +} + +CG_outputRepr *CG_leaf::printRepr(int indent, CG_outputBuilder *ocg, + const std::vector<CG_outputRepr *> &stmts, + const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) const { + return leaf_print_repr(active_, guards_, NULL, known_, indent, ocg, + codegen_->remap_, codegen_->xforms_, stmts, assigned_on_the_fly); +} + +CG_result *CG_leaf::clone() const { + return new CG_leaf(codegen_, active_); +} + +void CG_leaf::dump(int indent) const { + std::string prefix; + for (int i = 0; i < indent; i++) + prefix += " "; + std::cout << prefix << "LEAF: " << active_ << std::endl; + std::cout << prefix << "known: "; + const_cast<CG_leaf *>(this)->known_.print(); + for (std::map<int, Relation>::const_iterator i = guards_.begin(); + i != guards_.end(); i++) { + std::cout << prefix << "guard #" << i->first << ":"; + const_cast<Relation &>(i->second).print(); + } +} + +} diff --git a/omegalib/code_gen/src/CG_roseBuilder.cc b/omegalib/code_gen/src/CG_roseBuilder.cc new file mode 100644 index 0000000..eb16830 --- /dev/null +++ b/omegalib/code_gen/src/CG_roseBuilder.cc @@ -0,0 +1,1533 @@ +/***************************************************************************** + Copyright (C) 2008 University of Southern California + Copyright (C) 2009-2010 University of Utah + All Rights Reserved. + + Purpose: + generate suif code for omega + + Notes: + + History: + 02/01/06 created by Chun Chen + *****************************************************************************/ + +#include <stack> +#include <code_gen/CG_roseBuilder.h> +#include <string> + +struct ir_error: public std::runtime_error { + ir_error(const std::string &msg) : + std::runtime_error(msg) { + } +}; + +using namespace SageBuilder; +using namespace SageInterface; +using namespace OmpSupport; + +namespace omega { + +//----------------------------------------------------------------------------- +// make suif initilization happy +//----------------------------------------------------------------------------- +char *k_ocg_comment; + +// void __attribute__ ((constructor)) my_init(void) { +// ANNOTE(k_ocg_comment, "omega_comment", TRUE); +// } + +/* + const char *libcode_gen_ver_string = ""; + const char *libcode_gen_who_string = ""; + const char *libcode_gen_suif_string = ""; + + void init_code_gen(int&, char* []) { + ANNOTE(k_ocg_comment, "omega_comment", TRUE); + } + + void exit_code_gen(void) { + } + */ +CG_roseBuilder::CG_roseBuilder(int is_fortran, SgGlobal* global, SgGlobal* firstScope, + SgSymbolTable* symtab, SgSymbolTable* symtab2, SgNode* root) : + isFortran(is_fortran), global_(global), global_scope(firstScope), symtab_(symtab), symtab2_( + symtab2), root_(root) { +} + + +CG_roseBuilder::~CG_roseBuilder() { +} + +// Manu:: returns true if input is in fortran, else returns false +bool CG_roseBuilder::isInputFortran() const{ + if (isFortran) + return true; + else + return false; +} + +//----------------------------------------------------------------------------- +// place holder generation +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreateSubstitutedStmt(int, CG_outputRepr *stmt, + const std::vector<std::string> &vars, std::vector<CG_outputRepr*> &subs) const { + + SgStatementPtrList* list = static_cast<CG_roseRepr *>(stmt)->list_; + SgNode *tnl; + SgStatement* statement; + if (list != NULL) { + //statement = *((*list).begin()); + //tnl = isSgNode(statement); + delete stmt; + for (int i = 0; i < subs.size(); i++) { + if (subs[i] == NULL) + continue; + + CG_roseRepr *repr = static_cast<CG_roseRepr*>(subs[i]); + SgExpression* op = repr->op_; + + for (SgStatementPtrList::iterator it = (*list).begin(); + it != (*list).end(); it++) { + statement = (*it); + tnl = isSgNode(statement); + + // std::string master = tnl->unparseToString(); + + int j; + int not_in_symtab_; + + not_in_symtab_ = 0; + + SgVariableSymbol *vs = symtab_->find_variable( + SgName(vars[i].c_str())); + + if (vs == NULL) { + + not_in_symtab_ = 1; + + vs = symtab2_->find_variable(SgName(vars[i].c_str())); + } + if (vs != NULL) { + //std::string x = vars[i].c_str() ; + //std::string y = isSgNode(op)->unparseToString(); + + std::vector<SgVarRefExp *> array = substitute(tnl, + (const SgVariableSymbol*) vs, op, root_); + for (std::vector<SgVarRefExp *>::iterator it = + array.begin(); it != array.end(); it++) { + + // std::string z = isSgNode(array[j])->unparseToString(); + if (isSgVarRefExp(op)) { + if (strcmp( + isSgVarRefExp(op)->get_symbol()->get_name().getString().c_str(), + vs->get_name().getString().c_str())) { + + (*it)->set_symbol( + isSgVarRefExp(op)->get_symbol()); + // std::string z = isSgNode(array[j])->unparseToString(); + + // isSgBinaryOp(array[j]->get_parent())->replace_expression(array[j], op); + + } + } else if (isSgExpression(op)) { + + if (isSgBinaryOp((*it)->get_parent())) + isSgBinaryOp((*it)->get_parent())->replace_expression( + *it, op); + else if (isSgUnaryOp((*it)->get_parent())) + isSgUnaryOp((*it)->get_parent())->replace_expression( + *it, op); + else if (isSgExprListExp((*it)->get_parent())) + isSgExprListExp((*it)->get_parent())->replace_expression( + *it, op); + else + throw ir_error("unrecognized expression type"); + } + + } + /* std::vector<SgVarRefExp *> array2 = substitute (tnl,(const SgVariableSymbol*) vs, op, root_); + if(array2.size() != 0) + throw ir_error("variable replacement unsuccessful"); + */ + } + + } + + delete repr; + subs[i] = NULL; + + if (subs[i] != NULL) + throw ir_error("not freed properly"); + + } + + return new CG_roseRepr(list); + + } else { + tnl = static_cast<CG_roseRepr *>(stmt)->tnl_; + //std::string master = tnl->unparseToString(); + + if (tnl == NULL) + throw ir_error("both list and tnl are null!!"); + + delete stmt; + int j; + int not_in_symtab_; + for (int i = 0; i < subs.size(); i++) { + if (subs[i] == NULL) + continue; + not_in_symtab_ = 0; + + + CG_roseRepr *repr = static_cast<CG_roseRepr*>(subs[i]); + SgExpression* op = repr->op_; + delete repr; + subs[i] = NULL; + + SgVariableSymbol *vs = symtab_->find_variable( + SgName(vars[i].c_str())); + + if (vs == NULL) { + + not_in_symtab_ = 1; + + vs = symtab2_->find_variable(SgName(vars[i].c_str())); + } + if (vs != NULL) { + //std::string x = vars[i].c_str() ; + //std::string y = isSgNode(op)->unparseToString(); + std::vector<SgVarRefExp *> array = substitute(tnl, vs, op, + root_); + + if (not_in_symtab_ && isSgVarRefExp(op)) { + if (strcmp( + isSgVarRefExp(op)->get_symbol()->get_name().getString().c_str(), + vs->get_name().getString().c_str())) { + // symtab2_->remove(vs); + } + } + /* else if(not_in_symtab_ && isSgVarRefExp(isSgAddOp(op)->get_lhs_operand())){ + if(strcmp(isSgVarRefExp(isSgAddOp(op)->get_lhs_operand())->get_symbol()->get_name().getString().c_str(),\ + vs->get_name().getString().c_str())){ + symtab2_->remove(vs); + } + }*/ + //symtab2_->remove(vs); + for (std::vector<SgVarRefExp *>::iterator j = array.begin(); + j != array.end(); j++) { + // std::string z = isSgNode(array[j])->unparseToString(); + + if (isSgVarRefExp(op)) { + if (strcmp( + isSgVarRefExp(op)->get_symbol()->get_name().getString().c_str(), + vs->get_name().getString().c_str())) { + (*j)->set_symbol(isSgVarRefExp(op)->get_symbol()); + //isSgBinaryOp(array[j]->get_parent())->replace_expression(array[j], op); + // std::string z = isSgNode(array[j])->unparseToString(); + + } + } else if (isSgExpression(op)) { + + if (isSgBinaryOp((*j)->get_parent())) + isSgBinaryOp((*j)->get_parent())->replace_expression( + *j, op); + else if (isSgUnaryOp((*j)->get_parent())) + isSgUnaryOp((*j)->get_parent())->replace_expression( + *j, op); + else if (isSgExprListExp((*j)->get_parent())) { // Manu:: fortran indices are stored this way + isSgExprListExp((*j)->get_parent())->replace_expression(*j, op); + } + else + throw ir_error("unrecognized expression type"); + /* if(strcmp(isSgVarRefExp(isSgAddOp(op)->get_lhs_operand())->get_symbol()->get_name().getString().c_str(),\ + vs->get_name().getString().c_str() )){ + array[j]->set_symbol(isSgVarRefExp(isSgAddOp(op)->get_lhs_operand())->get_symbol()); + + */ + + } + + } + /* std::vector<SgVarRefExp *> array2 = substitute (tnl,(const SgVariableSymbol*) vs, op, root_); + if(array2.size() != 0) + throw ir_error("variable replacement unsuccessful"); + */ + } + /* SgExpression* exp = NULL; + + if(stmt1 = isSgStatement(tnl)){ + if (SgExprStatement* expr_stmt = isSgExprStatement(stmt1)) + exp = expr_stmt->get_expression(); + else if( block = isSgBasicBlock(tnl)){ + SgStatementPtrList& stmts = block->get_statements(); + SgExpression* exp2; + for(int i =0; i < stmts.size(); i++){ + if(isSgExprStatement(stmts[i])){ + exp2 = isSgExprStatement(stmts[i])->get_expression(); + if(exp2 != NULL){ + + if(isSgBinaryOp(exp2)) { + substitute(isSgBinaryOp(exp2)->get_lhs_operand(), vs, op, root_, exp2); + substitute(isSgBinaryOp(exp2)->get_rhs_operand(), vs, op, root_, exp2); + } + else if (isSgUnaryOp(exp2)) + substitute(isSgUnaryOp(exp2)->get_operand(), vs, op, root_, exp2); + + + }//end if + + }//end if + }//end for + + }//end else + else if(SgForStatement* for_stmt = isSgForStatement(tnl)){ + SgForStatement* temp = for_stmt; + while(isSgForStatement(temp)){ + + + + } + + + + + } + + + }//end if + else + exp = isSgExpression(tnl); + + if(exp != NULL){ + if(isSgBinaryOp(exp)) { + substitute(isSgBinaryOp(exp)->get_lhs_operand(), vs, op, root_, exp); + substitute(isSgBinaryOp(exp)->get_rhs_operand(), vs, op, root_, exp); + } + else if (isSgUnaryOp(exp)) + substitute(isSgUnaryOp(exp)->get_operand(), vs, op, root_, exp); + + } + // if (op.is_instr()) + // delete op.instr(); + } + */ + } + return new CG_roseRepr(tnl); + } + +} + +//----------------------------------------------------------------------------- +// assignment generation +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreateAssignment(int, CG_outputRepr *lhs, + CG_outputRepr *rhs) const { + if (lhs == NULL || rhs == NULL) { + fprintf(stderr, "Code generation: Missing lhs or rhs\n"); + return NULL; + } + + SgExpression* src = static_cast<CG_roseRepr*>(rhs)->op_; + SgExpression* dst = static_cast<CG_roseRepr*>(lhs)->op_; + + SgExprStatement* ins = buildAssignStatement(dst, src); + src->set_parent(ins); + dst->set_parent(ins); + + SgStatementPtrList* new_list = new SgStatementPtrList; + + (*new_list).push_back(isSgStatement(ins)); + + delete lhs; + delete rhs; + + return new CG_roseRepr(new_list); + +} + +//----------------------------------------------------------------------------- +// function invocation generation +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreateInvoke(const std::string &fname, + std::vector<CG_outputRepr *> &list) const { + + // Manu:: debug +// std::cout << "--------- CreateInvoke --------- \n"; + + if (fname == std::string("max") || fname == std::string("min")) { + if (list.size() == 0) { + return NULL; + } else if (list.size() == 1) { + return list[0]; + } else { + int last = list.size() - 1; + SgExpression* op2 = static_cast<CG_roseRepr*>(list[last])->op_; + delete list[last]; + list.erase(list.end()-1); + CG_roseRepr *repr = static_cast<CG_roseRepr*>(CreateInvoke(fname, + list)); + SgExpression* op1 = repr->op_; + + + SgExpression *ins; + SgExprListExp* arg_list = buildExprListExp(); + appendExpression(arg_list, op1); + appendExpression(arg_list, op2); + SgVarRefExp* opaque_var; + + + if (fname == std::string("max")) { + opaque_var = buildOpaqueVarRefExp("__rose_gt", global_); + ins = isSgExpression(buildFunctionCallExp(opaque_var, arg_list)); + + // Manu:: fortran support + if (isInputFortran()) { + SgName fName("merge"); + SgTypeInt *retType = buildIntType(); + + SgExpression *cond = static_cast<CG_roseRepr *>(CreateLE(new CG_roseRepr(op2), new CG_roseRepr(op1)))->op_; + appendExpression(arg_list, cond); + ins = isSgExpression(buildFunctionCallExp(fName, retType, arg_list, global_)); +// std::cout << "--------- CreateInvoke:: " << isSgNode(ins)->unparseToString().c_str() << "\n"; + } + + } else { + opaque_var = buildOpaqueVarRefExp("__rose_lt", global_); + ins = isSgExpression(buildFunctionCallExp(opaque_var, arg_list)); + + // Manu:: fortran support + if (isInputFortran()) { + SgName fName("merge"); + SgTypeInt *retType = buildIntType(); + + SgExpression *cond = static_cast<CG_roseRepr *>(CreateLE(new CG_roseRepr(op1), new CG_roseRepr(op2)))->op_; + appendExpression(arg_list, cond); + ins = isSgExpression(buildFunctionCallExp(fName, retType, arg_list, global_)); +// std::cout << "--------- CreateInvoke:: " << isSgNode(ins)->unparseToString().c_str() << "\n"; + } + + } + + repr->op_ = ins; + return repr; + } + } else { + fprintf(stderr, + "Code generation: invoke function io_call not implemented\n"); + return NULL; + } + +} + +//----------------------------------------------------------------------------- +// comment generation +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreateComment(int, + const std::string &commentText) const { + if (commentText == std::string("")) { + return NULL; + } + + SgLocatedNode *tnl = new SgLocatedNode(); + buildComment(tnl, "//omega_comment: " + commentText); + + return new CG_roseRepr(isSgNode(tnl)); + +} + +//----------------------------------------------------------------------------- +// if stmt gen operations +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreateIf(int, CG_outputRepr *guardList, + CG_outputRepr *true_stmtList, CG_outputRepr *false_stmtList) const { + + // static int if_counter = 1; + // std::string s = std::string("omegaif_")+to_string(if_counter++); + // SgLabelStatement* label =buildLabelStatement(SgName(const_cast<char *>(s.c_str()))); + + if (true_stmtList == NULL && false_stmtList == NULL) { + delete guardList; + return NULL; + } else if (guardList == NULL) { + return StmtListAppend(true_stmtList, false_stmtList); + } + + SgExpression* header = static_cast<CG_roseRepr*>(guardList)->op_; + + SgStatementPtrList *then_part1, *else_part1; + SgStatement* then_part; + SgStatement* else_part; + SgBasicBlock* then_part2; + SgBasicBlock* else_part2; + if (true_stmtList != NULL) { + then_part1 = static_cast<CG_roseRepr*>(true_stmtList)->list_; + if (then_part1 != NULL) { + then_part = *((*then_part1).begin()); + + if ((*then_part1).size() > 1) { + then_part2 = buildBasicBlock(); + for (SgStatementPtrList::iterator it = (*then_part1).begin(); + it != (*then_part1).end(); it++) { + then_part2->append_statement(*it); + + } + then_part = isSgStatement(then_part2); + + } + } else { + // Manu:: fortran support (if part) + if (isInputFortran()) { + then_part2 = buildBasicBlock(); + then_part2->append_statement(isSgStatement(static_cast<CG_roseRepr*>(true_stmtList)->tnl_)); + then_part = isSgStatement(then_part2); + } else + then_part = isSgStatement(static_cast<CG_roseRepr*>(true_stmtList)->tnl_); + } + } else { + then_part = NULL; + } + if (false_stmtList != NULL) { + else_part1 = static_cast<CG_roseRepr*>(false_stmtList)->list_; + if (else_part1 != NULL) { + else_part = *((*else_part1).begin()); + if ((*else_part1).size() > 1) { + else_part2 = buildBasicBlock(); + for (SgStatementPtrList::iterator it2 = (*else_part1).begin(); + it2 != (*else_part1).end(); it2++) { + else_part2->append_statement(*it2); + + } + else_part = isSgStatement(else_part2); + + } + } else { + // Manu:: fortran support (if part) + if (isInputFortran()) { + else_part2 = buildBasicBlock(); + else_part2->append_statement(isSgStatement(static_cast<CG_roseRepr*>(false_stmtList)->tnl_)); + else_part = isSgStatement(else_part2); + } else + else_part = isSgStatement(static_cast<CG_roseRepr*>(false_stmtList)->tnl_); + } + } else { + else_part = NULL; + } + + SgIfStmt* ti = buildIfStmt(header, isSgStatement(then_part), + isSgStatement(else_part)); + +// label->set_scope(ti);//may have to be shifted to after symbol table insertion +// SgLabelSymbol* if_label = isSgLabelSymbol(label->get_symbol_from_symbol_table()); + +// symtab_->insert( SgName(const_cast<char *>(s.c_str())) , isSgSymbol(if_label)); + + delete guardList; + delete true_stmtList; + delete false_stmtList; + + return new CG_roseRepr(isSgNode(ti)); + +} + +//----------------------------------------------------------------------------- +// inductive variable generation, to be used in CreateLoop as control +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreateInductive(CG_outputRepr *index, + CG_outputRepr *lower, CG_outputRepr *upper, CG_outputRepr *step) const { + + if (index == NULL || lower == NULL || upper == NULL) { + fprintf(stderr, + "Code generation: something wrong in CreateInductive\n"); + return NULL; + } + + if (step == NULL) + step = new CG_roseRepr(isSgExpression(buildIntVal(1))); + + SgVarRefExp *index_sym = isSgVarRefExp( + static_cast<CG_roseRepr*>(index)->op_); + SgExpression* lower_bound = static_cast<CG_roseRepr*>(lower)->op_; + SgExpression* upper_bound = static_cast<CG_roseRepr*>(upper)->op_; + SgExpression* step_size = static_cast<CG_roseRepr*>(step)->op_; + + /* label_sym *contLabel = new label_sym(""); + label_sym *brkLabel = new label_sym(""); may not be required on rose?! + */ + + SgStatement* for_init_stmt = buildAssignStatement(index_sym, lower_bound); + SgLessOrEqualOp* cond = buildLessOrEqualOp(index_sym, upper_bound); + SgExprStatement* test = buildExprStatement(cond); + SgPlusAssignOp* increment = buildPlusAssignOp(index_sym, step_size); + SgForStatement *for_stmt = buildForStatement(for_init_stmt, + isSgStatement(test), increment, NULL); + + delete index; + delete lower; + delete upper; + delete step; + + + // Manu + if (isInputFortran()) { + // std::cout << "CG_roseBuilder:: need to construct a fortran do statement\n"; + SgFortranDo * forStmt=new SgFortranDo(Sg_File_Info::generateDefaultFileInfoForTransformationNode()); + forStmt->set_has_end_statement(true); + forStmt->set_bound(upper_bound); + forStmt->set_increment(step_size); + forStmt->set_initialization(isSgExprStatement(for_init_stmt)->get_expression()); + return new CG_roseRepr(isSgNode(forStmt)); + } else { +// std::cout << "CG_roseBuilder:: for statement is fine\n"; + + return new CG_roseRepr(isSgNode(for_stmt)); + + } + +} + +//----------------------------------------------------------------------------- +// Attribute Creation +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreateAttribute(CG_outputRepr *control, + const std::string &commentText) const { + + SgNode *tnl = static_cast<CG_roseRepr*>(control)->tnl_; + + tnl->setAttribute("omega_comment", new AstTextAttribute(commentText)); + + return static_cast<CG_roseRepr*>(control); + +} + +//----------------------------------------------------------------------------- +// Pragma Attribute +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreatePragmaAttribute(CG_outputRepr *stmt, int looplevel, const std::string &pragmaText) const { + SgNode *tnl = static_cast<CG_roseRepr*>(stmt)->tnl_; + CodeInsertionAttribute* attr = NULL; + if (!tnl->attributeExists("code_insertion")) { + attr = new CodeInsertionAttribute(); + tnl->setAttribute("code_insertion", attr); + } + else { + attr = static_cast<CodeInsertionAttribute*>(tnl->getAttribute("code_insertion")); + } + attr->add(new PragmaInsertion(looplevel, pragmaText)); + return stmt; +} + +//----------------------------------------------------------------------------- +// Prefetch Attribute +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreatePrefetchAttribute(CG_outputRepr* stmt, int looplevel, const std::string &arrName, int hint) const { + SgNode *tnl = static_cast<CG_roseRepr*>(stmt)->tnl_; + CodeInsertionAttribute *attr = getOrCreateCodeInsertionAttribute(tnl); + attr->add(new MMPrefetchInsertion(looplevel, arrName, hint)); +} + +//----------------------------------------------------------------------------- +// loop stmt generation +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreateLoop(int, CG_outputRepr *control, + CG_outputRepr *stmtList) const { + if (stmtList == NULL) { + delete control; + return NULL; + } else if (control == NULL) { + fprintf(stderr, "Code generation: no inductive for this loop\n"); + return stmtList; + } + + SgNode *tnl = static_cast<CG_roseRepr*>(control)->tnl_; + SgForStatement *tf = isSgForStatement(tnl); + + // Manu :: fortran support + SgFortranDo *tfd = NULL; + if (isInputFortran()) { + tfd = isSgFortranDo(tnl); + } + // Manu:: debug +/* if (!tf) { + std::cout << "CreateLoop:: Not a for loop\n"; + if (isSgFortranDo(tnl)) + std::cout << "CreateLoop:: It is a fortran do loop\n"; + } +*/ + + SgStatementPtrList * body = static_cast<CG_roseRepr*>(stmtList)->list_; + + if (body != NULL) { + if (!((*body).empty())) { + if ((*body).size() == 1) { + // if(isSgBasicBlock(*((*body).begin()))){ + if (!isInputFortran()) { // Manu:: added if-else for fortran support + tf->set_loop_body(*((*body).begin())); + (*((*body).begin()))->set_parent(tf); + } else { + SgBasicBlock* bb1 = buildBasicBlock(); + bb1->set_parent(tfd); + bb1->append_statement(*((*body).begin())); + tfd->set_body(bb1); + } + // } + /* else{ + SgBasicBlock* bb1 = buildBasicBlock(); + bb1->set_parent(tf); + bb1->append_statement(*((*body).begin())); + tf->set_loop_body(bb1); + + }*/ + } else { + // Manu:: support for fortran label (do - continue) + SgName *sname = NULL; + + SgBasicBlock* bb = buildBasicBlock(); + if (!isInputFortran()) + bb->set_parent(tf); + else + bb->set_parent(tfd); + for (SgStatementPtrList::iterator it = (*body).begin(); + it != (*body).end(); it++) { + bb->append_statement(*it); + (*it)->set_parent(bb); + } + if (!isInputFortran()) + tf->set_loop_body(bb); + else { + tfd->set_body(bb); + } + } + } + } else { + SgNode* tnl2 = static_cast<CG_roseRepr*>(stmtList)->tnl_; + + if (tnl2 != NULL) { + if (!isInputFortran()) { + tf->set_loop_body(isSgStatement(tnl2)); + tnl2->set_parent(tf); + } else { + SgBasicBlock* bb1 = buildBasicBlock(); + bb1->set_parent(tfd); + bb1->append_statement(isSgStatement(tnl2)); + tfd->set_body(bb1); + tnl2->set_parent(bb1); + } + } + } + + delete stmtList; + + return control; +} + +//----------------------------------------------------------------------------- +// basic int, identifier gen operations +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreateInt(int _i) const { + return new CG_roseRepr(isSgExpression(buildIntVal(_i))); +} +bool CG_roseBuilder::isInteger(CG_outputRepr *op) const{ + + SgExpression *op1 = static_cast<CG_roseRepr *>(op)->op_; + + if(op1) + if(isSgIntVal(op1)) + return true; + + return false; +} +CG_outputRepr* CG_roseBuilder::CreateIdent(const std::string &_s) const { + + SgVariableSymbol *vs = symtab_->find_variable(SgName(_s.c_str())); + SgVariableSymbol *vs2 = symtab2_->find_variable(SgName(_s.c_str())); + + if (vs == NULL && vs2 == NULL) { + + SgVariableDeclaration* defn = buildVariableDeclaration( + SgName(_s.c_str()), buildIntType()); + SgInitializedNamePtrList& variables = defn->get_variables(); + SgInitializedNamePtrList::const_iterator i = variables.begin(); + SgInitializedName* initializedName = *i; + vs = new SgVariableSymbol(initializedName); + prependStatement(defn, isSgScopeStatement(root_)); + + vs->set_parent(symtab2_); + symtab2_->insert(SgName(_s.c_str()), vs); + return new CG_roseRepr(isSgExpression(buildVarRefExp(vs))); + + } + + /* May have problem */ + + if (!isSgExpression(buildVarRefExp(SgName(_s.c_str())))) + throw ir_error("error in Create ident!!"); + if (vs2 != NULL) + return new CG_roseRepr(isSgExpression(buildVarRefExp(vs2))); + + return new CG_roseRepr(isSgExpression(buildVarRefExp(vs))); + +} + +//----------------------------------------------------------------------------- +// binary arithmetic operations +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreatePlus(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if (rop == NULL) { + return lop; + } else if (lop == NULL) { + return rop; + } + + SgExpression* op1 = static_cast<CG_roseRepr*>(lop)->op_; + SgExpression* op2 = static_cast<CG_roseRepr*>(rop)->op_; + + SgAddOp *ins = buildAddOp(op1, op2); + op1->set_parent(ins); + op2->set_parent(ins); + delete lop; + delete rop; + + return new CG_roseRepr(isSgExpression(ins)); + +} + +CG_outputRepr* CG_roseBuilder::CreateMinus(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if (rop == NULL) { + return lop; /* May Cause Problem */ + } else if (lop == NULL) { + SgExpression *op = static_cast<CG_roseRepr*>(rop)->op_; + SgMinusOp *ins = buildMinusOp(op); + + delete rop; + + return new CG_roseRepr(isSgExpression(ins)); + } else { + SgExpression* op1 = static_cast<CG_roseRepr*>(lop)->op_; + SgExpression* op2 = static_cast<CG_roseRepr*>(rop)->op_; + + SgSubtractOp *ins = buildSubtractOp(op1, op2); + op1->set_parent(ins); + op2->set_parent(ins); + delete lop; + delete rop; + return new CG_roseRepr(isSgExpression(ins)); + } + +} + +CG_outputRepr* CG_roseBuilder::CreateTimes(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if (rop == NULL || lop == NULL) { + if (rop != NULL) { + rop->clear(); + delete rop; + } + if (lop != NULL) { + lop->clear(); + delete lop; + } + return NULL; + } + + SgExpression* op1 = static_cast<CG_roseRepr*>(lop)->op_; + SgExpression* op2 = static_cast<CG_roseRepr*>(rop)->op_; + + SgMultiplyOp *ins = buildMultiplyOp(op1, op2); + op1->set_parent(ins); + op2->set_parent(ins); + delete lop; + delete rop; + + return new CG_roseRepr(isSgExpression(ins)); + +} + +CG_outputRepr* CG_roseBuilder::CreateIntegerFloor(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if (rop == NULL) { + fprintf(stderr, "Code generation: divide by NULL\n"); + return NULL; + } else if (lop == NULL) { + delete rop; + return NULL; + } + + // (6+5)*10 / 4 + SgExpression* op1 = static_cast<CG_roseRepr*>(lop)->op_; + SgExpression* op2 = static_cast<CG_roseRepr*>(rop)->op_; + + // bugs in SUIF prevent use of correct io_divfloor + SgDivideOp *ins = buildDivideOp(op1, op2); + + delete lop; + delete rop; + + return new CG_roseRepr(isSgExpression(ins)); + +} + +CG_outputRepr* CG_roseBuilder::CreateIntegerMod(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if (rop == NULL || lop == NULL) { + return NULL; + } + + SgExpression* op1 = static_cast<CG_roseRepr*>(lop)->op_; + SgExpression* op2 = static_cast<CG_roseRepr*>(rop)->op_; + + // bugs in SUIF prevent use of correct io_mod + SgModOp *ins; + if (!isInputFortran()) { + ins = buildModOp(op1, op2); + delete lop; + delete rop; + + return new CG_roseRepr(isSgExpression(ins)); + } else { // Manu:: fortran mod is a function call and not an operator (f77 and f90) + SgExpression *fins; + SgName fName("MOD"); + SgExprListExp* arg_list = buildExprListExp(); + appendExpression(arg_list, op1); + appendExpression(arg_list, op2); + SgTypeInt *retType = buildIntType(); + fins = isSgExpression(buildFunctionCallExp(fName, retType, arg_list, global_)); + return new CG_roseRepr(isSgExpression(fins)); + } + +} + +//----------------------------------------------------------------------------- +// binary logical operations +//----------------------------------------------------------------------------- +CG_outputRepr* CG_roseBuilder::CreateAnd(CG_outputRepr *lop, + CG_outputRepr *rop) const { + /*if (rop == NULL || lop == NULL) { + return NULL; + }*/ + + if (rop == NULL) + return lop; + else if (lop == NULL) + return rop; + + SgExpression* op1 = static_cast<CG_roseRepr*>(lop)->op_; + SgExpression* op2 = static_cast<CG_roseRepr*>(rop)->op_; + + SgAndOp *ins = buildAndOp(op1, op2); + + delete lop; + delete rop; + + return new CG_roseRepr(isSgExpression(ins)); + +} + +//----------------------------------------------------------------------------- +// binary relational operations +//----------------------------------------------------------------------------- +/*CG_outputRepr* CG_roseBuilder::CreateGE(CG_outputRepr *lop, + CG_outputRepr *rop) const { + return CreateLE(rop, lop); +}*/ + +CG_outputRepr* CG_roseBuilder::CreateLE(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if (rop == NULL || lop == NULL) { + return NULL; + } + + SgExpression* op1 = static_cast<CG_roseRepr*>(lop)->op_; + SgExpression* op2 = static_cast<CG_roseRepr*>(rop)->op_; + + SgLessOrEqualOp *ins = buildLessOrEqualOp(op1, op2); + + delete lop; + delete rop; + + return new CG_roseRepr(isSgExpression(ins)); + +} + +CG_outputRepr* CG_roseBuilder::CreateEQ(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if (rop == NULL || lop == NULL) { + return NULL; + } + + SgExpression* op1 = static_cast<CG_roseRepr*>(lop)->op_; + SgExpression* op2 = static_cast<CG_roseRepr*>(rop)->op_; + + SgEqualityOp *ins = buildEqualityOp(op1, op2); + + delete lop; + delete rop; + + return new CG_roseRepr(isSgExpression(ins)); + +} + +//----------------------------------------------------------------------------- +// stmt list gen operations +//----------------------------------------------------------------------------- +/*CG_outputRepr* CG_roseBuilder::CreateStmtList(CG_outputRepr *singleton) const { + + if (singleton == NULL) { + return new CG_roseRepr(new SgStatementPtrList); + } + + SgStatementPtrList *tnl = static_cast<CG_roseRepr *>(singleton)->list_; + SgNode* sgn = static_cast<CG_roseRepr *>(singleton)->tnl_; + + if (tnl == NULL) + tnl = new SgStatementPtrList; + + if (sgn == NULL) { + SgExpression* op = static_cast<CG_roseRepr *>(singleton)->op_; + + if (op != NULL) + (*tnl).push_back( + buildExprStatement( + static_cast<CG_roseRepr *>(singleton)->op_)); + + } else + (*tnl).push_back(isSgStatement(sgn)); + + delete singleton; + return new CG_roseRepr(tnl); + +// tnl = isSgNode(buildBasicBlock(buildExprStatement(static_cast<CG_roseRepr *>(singleton)->op_))); + +// delete singleton; +// return new CG_roseRepr(tnl); + +} + +CG_outputRepr* CG_roseBuilder::StmtListInsertLast(CG_outputRepr *list, + CG_outputRepr *node) const { + return StmtListAppend(list, node); +} +*/ +CG_outputRepr* CG_roseBuilder::StmtListAppend(CG_outputRepr *list1, + CG_outputRepr *list2) const { + + if (list2 == NULL) { + return list1; + } else if (list1 == NULL) { + return list2; + } + + // SgStatement* parent; + // SgStatement* stmt1; + // SgStatement* stmt2; + + SgStatementPtrList* new_list; + + SgStatementPtrList* tnl1 = static_cast<CG_roseRepr *>(list1)->list_; + SgStatementPtrList* tnl2 = static_cast<CG_roseRepr *>(list2)->list_; + SgNode* one = static_cast<CG_roseRepr *>(list1)->tnl_; + SgNode* two = static_cast<CG_roseRepr *>(list2)->tnl_; + + SgExpression* exp1 = static_cast<CG_roseRepr *>(list1)->op_; + SgExpression* exp2 = static_cast<CG_roseRepr *>(list2)->op_; + + if (exp1 || exp2) + throw ir_error("error in stmtlistappend!!"); + + if (tnl1 && one) + throw ir_error("error in stmtlistappend!!"); + + if (tnl2 && two) + throw ir_error("error in stmtlistappend!!"); +// SgNode* sg1 = static_cast<CG_roseRepr *>(list1)->tnl_; + +//if((*tnl1).empty()){ + +// if(SgStatement* stmt = isSgStatement(sg1)) +// (*tnl1).push_back(stmt); +//else if(isSgScopeStatement(sg1)){ +// SgStatementPtrList scopeStmtPtrLst = isSgScopeStatement(sg1)->generateStatementList(); + +// for(SgStatementPtrList::iterator it1 = scopeStmtPtrLst.begin();it1 != scopeStmtPtrLst.end(); it1++) +// (*tnl1).push_back(*it1); +//} +//} + + if ((tnl1 == NULL) && (tnl2 == NULL)) { + + if ((one != NULL) && (two != NULL)) { + + new_list = new SgStatementPtrList; + + (*new_list).push_back(isSgStatement(one)); + (*new_list).push_back(isSgStatement(two)); + + CG_roseRepr* new_rep = new CG_roseRepr(new_list); + + return static_cast<CG_outputRepr *>(new_rep); + + } else if ((one != NULL) && (two == NULL)) { + + return static_cast<CG_outputRepr *>(new CG_roseRepr(one)); + + } else if ((two != NULL) && (one == NULL)) { + return static_cast<CG_outputRepr *>(new CG_roseRepr(two)); + + } + + } else { + if ((tnl2 != NULL) && (tnl1 == NULL)) { + /* for(SgStatementPtrList::iterator it = (*tnl2).begin(); it != (*tnl2).end(); it++) + { + (*tnl1).push_back(*it); + + } + */ + if (one == NULL) + return list2; + else { + new_list = new SgStatementPtrList; + (*new_list).push_back(isSgStatement(one)); + + for (SgStatementPtrList::iterator it = (*tnl2).begin(); + it != (*tnl2).end(); it++) { + (*new_list).push_back(*it); + + } + //delete list2; + return static_cast<CG_outputRepr *>(new CG_roseRepr(new_list)); + } + } else if ((tnl1 != NULL) && (tnl2 == NULL)) { + if (two == NULL) + return list1; + else { + + (*tnl1).push_back(isSgStatement(two)); + // delete list1; + return static_cast<CG_outputRepr *>(new CG_roseRepr(tnl1)); + + } + + } else if ((tnl1 != NULL) && (tnl2 != NULL)) { + + for (SgStatementPtrList::iterator it = (*tnl2).begin(); + it != (*tnl2).end(); it++) { + (*tnl1).push_back(*it); + + } + + // delete list2; + // delete list1; + return static_cast<CG_outputRepr *>(new CG_roseRepr(tnl1)); + } +//else{ +// SgNode* tnll2 = static_cast<CG_roseRepr *>(list2)->tnl_; +// if(tnll2 != NULL){ +// if(isSgStatement(tnll2)) +// (*tnl1).push_back(isSgStatement(tnll2)); +// else if(isSgScopeStatement(tnll2)){ +// SgStatementPtrList scopeStmtPtrLst1 = isSgScopeStatement(tnll2)->generateStatementList(); + +// for(SgStatementPtrList::iterator it2 = scopeStmtPtrLst1.begin();it2 != scopeStmtPtrLst1.end(); it2++) +// (*tnl1).push_back(*it2); + +// } +//} +// else{ +// SgStatement* stmt2 = isSgStatement(buildExprStatement(static_cast<CG_roseRepr *>(list2)->op_)); +// (*tnl1).push_back(stmt2); + +// } + +//} + // stmt2 = isSgStatement(tnl2); + +// std::string c = tnl1->unparseToString(); + +// std::string d = isSgNode(stmt2)->unparseToString(); + +// if(isSgForStatement(tnl1) || isSgBasicBlock(tnl1)) +// isSgScopeStatement(tnl1)->append_statement(stmt2); +// else +// { + // stmt1 = isSgStatement(tnl1); + // parent = isSgStatement(tnl1->get_parent()); + // if(isSgForStatement(tnl1->get_parent()) || isSgBasicBlock(tnl1->get_parent())) + // isSgScopeStatement(tnl1->get_parent())->append_statement(stmt2); + // else if (isSgStatement(tnl1->get_parent())) + // isSgStatement(tnl1->get_parent())->insert_statement(stmt1, stmt2, false); + +// } + + } +// delete list2; + +// return list1; + +} + + +CG_outputRepr* CG_roseBuilder::CreateDim3(const char* varName, CG_outputRepr* arg1, + CG_outputRepr* arg2, CG_outputRepr* arg3) const { + + //SgName type_name("dim3"); + //SgClassSymbol * type_symbol = global_scope->lookup_class_symbol(type_name); + // SgClassDeclaration * type_decl = isSgClassDeclaration( + // type_symbol->get_declaration()); + + //SgVariableDeclaration * var_decl = buildVariableDeclaration(varName, type_symbol->get_type()); + + SgFunctionSymbol * ctor_symbol = global_scope->lookup_function_symbol( + SgName("dim3")); + + SgExprListExp * ctor_args; + if(arg3 != NULL) + ctor_args = buildExprListExp(static_cast<CG_roseRepr*>(arg1)->op_, + static_cast<CG_roseRepr*>(arg2)->op_, static_cast<CG_roseRepr*>(arg3)->op_); + else + ctor_args = buildExprListExp(static_cast<CG_roseRepr*>(arg1)->op_, + static_cast<CG_roseRepr*>(arg2)->op_); + SgFunctionCallExp * dim3_func_call = buildFunctionCallExp( + buildFunctionRefExp(ctor_symbol->get_declaration()), ctor_args); + + char joined_str[20]; + + strcpy(joined_str, "dim3 "); + strcat(joined_str, varName); + + SgExprStatement* decl = buildAssignStatement( + buildOpaqueVarRefExp(joined_str, isSgScopeStatement(root_)), + dim3_func_call); + + SgStatementPtrList *tnl2 = new SgStatementPtrList; + + // (*tnl2).push_back(var_decl); + (*tnl2).push_back(decl); + return new CG_roseRepr(tnl2); + +} + +/*CG_outputRepr* CG_roseBuilder::CreateDim3(const char* varName, int arg1, + int arg2) const { + + SgName type_name("dim3"); + SgClassSymbol * type_symbol = global_scope->lookup_class_symbol(type_name); + SgClassDeclaration * type_decl = isSgClassDeclaration( + type_symbol->get_declaration()); + + //SgVariableDeclaration * var_decl = buildVariableDeclaration(varName, type_symbol->get_type()); + + SgFunctionSymbol * ctor_symbol = global_scope->lookup_function_symbol( + SgName("dim3")); + + SgExprListExp * ctor_args = buildExprListExp(buildIntVal(arg1), + buildIntVal(arg2)); + + SgFunctionCallExp * dim3_func_call = buildFunctionCallExp( + buildFunctionRefExp(ctor_symbol->get_declaration()), ctor_args); + + char joined_str[20]; + + strcpy(joined_str, "dim3 "); + strcat(joined_str, varName); + + SgExprStatement* decl = buildAssignStatement( + buildOpaqueVarRefExp(joined_str, isSgScopeStatement(root_)), + dim3_func_call); + + SgStatementPtrList *tnl2 = new SgStatementPtrList; + + // (*tnl2).push_back(var_decl); + (*tnl2).push_back(decl); + return new CG_roseRepr(tnl2); +} + +CG_outputRepr* CG_roseBuilder::CreateDim3(const char* varName, int arg1, + int arg2, int arg3) const { + + SgName type_name("dim3"); + SgClassSymbol * type_symbol = global_scope->lookup_class_symbol(type_name); + SgClassDeclaration * type_decl = isSgClassDeclaration( + type_symbol->get_declaration()); + + //SgVariableDeclaration * var_decl = buildVariableDeclaration(varName, type_symbol->get_type()); + + SgFunctionSymbol * ctor_symbol = global_scope->lookup_function_symbol( + SgName("dim3")); + + SgExprListExp * ctor_args = buildExprListExp(buildIntVal(arg1), + buildIntVal(arg2), buildIntVal(arg3)); + + SgFunctionCallExp * dim3_func_call = buildFunctionCallExp( + buildFunctionRefExp(ctor_symbol->get_declaration()), ctor_args); + + char joined_str[20]; + + strcpy(joined_str, "dim3 "); + strcat(joined_str, varName); + + SgExprStatement* decl = buildAssignStatement( + buildOpaqueVarRefExp(joined_str, isSgScopeStatement(root_)), + dim3_func_call); + + SgStatementPtrList *tnl2 = new SgStatementPtrList; + + // (*tnl2).push_back(var_decl); + (*tnl2).push_back(decl); + return new CG_roseRepr(tnl2); + + + +} +*/ + +/*CG_outputRepr* CG_suifBuilder::CreateKernel(immed_list* iml) const { + instruction *ins = new in_rrr(io_mrk); + ins->append_annote(k_cuda_kernel, iml); + tree_node_list *tnl = new tree_node_list; + tnl->append(new tree_instr(ins)); + return new CG_suifRepr(tnl); + } + + type_node* CG_suifBuilder::ModifyType(type_node* base, const char* modifier) const { + modifier_type* result = new modifier_type(TYPE_NULL, base); + immed_list *iml = new immed_list; + iml->append(immed((char*)modifier)); + result->append_annote(k_cuda_modifier, iml); + return result; + } + */ + +std::vector<SgVarRefExp *> substitute(SgNode *in, const SgVariableSymbol *sym, + SgExpression* expr, SgNode* root) { + + SgStatement* stmt; + SgExpression* op; + std::vector<SgVarRefExp *> arrays; + + if (in != NULL) { + if (stmt = isSgStatement(in)) { + if (isSgBasicBlock(stmt)) { + SgStatementPtrList& stmts = + isSgBasicBlock(stmt)->get_statements(); + for (int i = 0; i < stmts.size(); i++) { + stmts[i]->set_parent(stmt); + std::vector<SgVarRefExp *> a = substitute( + isSgNode(stmts[i]), sym, expr, root); + std::copy(a.begin(), a.end(), back_inserter(arrays)); + } + } else if (isSgForStatement(stmt)) { + SgForStatement *tnf = isSgForStatement(stmt); + tnf->get_for_init_stmt()->set_parent(tnf); + tnf->get_test()->set_parent(tnf); + tnf->get_increment()->set_parent(tnf); + tnf->get_loop_body()->set_parent(tnf); + std::vector<SgVarRefExp *> a = substitute( + isSgNode(tnf->get_for_init_stmt()), sym, expr, root); + std::copy(a.begin(), a.end(), back_inserter(arrays)); + std::vector<SgVarRefExp *> a1 = substitute( + isSgNode(tnf->get_test()), sym, expr, root); + std::copy(a1.begin(), a1.end(), back_inserter(arrays)); + std::vector<SgVarRefExp *> a2 = substitute( + isSgNode(tnf->get_increment()), sym, expr, root); + std::copy(a2.begin(), a2.end(), back_inserter(arrays)); + std::vector<SgVarRefExp *> a3 = substitute( + isSgNode(tnf->get_loop_body()), sym, expr, root); + std::copy(a3.begin(), a3.end(), back_inserter(arrays)); + } else if (isSgFortranDo(stmt)) { // Manu:: fortran support + SgFortranDo *tnf = isSgFortranDo(stmt); + tnf->get_initialization()->set_parent(tnf); + tnf->get_bound()->set_parent(tnf); + tnf->get_increment()->set_parent(tnf); + tnf->get_body()->set_parent(tnf); + std::vector<SgVarRefExp *> a = substitute( + isSgNode(tnf->get_initialization()), sym, expr, root); + std::copy(a.begin(), a.end(), back_inserter(arrays)); + std::vector<SgVarRefExp *> a1 = substitute( + isSgNode(tnf->get_bound()), sym, expr, root); + std::copy(a1.begin(), a1.end(), back_inserter(arrays)); + std::vector<SgVarRefExp *> a2 = substitute( + isSgNode(tnf->get_increment()), sym, expr, root); + std::copy(a2.begin(), a2.end(), back_inserter(arrays)); + std::vector<SgVarRefExp *> a3 = substitute( + isSgNode(tnf->get_body()), sym, expr, root); + std::copy(a3.begin(), a3.end(), back_inserter(arrays)); + } else if (isSgForInitStatement(stmt)) { + + SgStatementPtrList& stmts = + isSgForInitStatement(stmt)->get_init_stmt(); + + for (SgStatementPtrList::iterator it = stmts.begin(); + it != stmts.end(); it++) { + std::vector<SgVarRefExp *> a = substitute(isSgNode(*it), + sym, expr, root); + + std::copy(a.begin(), a.end(), back_inserter(arrays)); + } + } + /*else if(isSgFortranDo(stmt)){ + SgFortranDo *tfortran = isSgFortranDo(stmt); + omega::CG_roseRepr *r = new omega::CG_roseRepr(isSgStatement(tfortran->get_body())); + std::vector<IR_ArrayRef *> a = FindArrayRef(r); + delete r; + std::copy(a.begin(), a.end(), back_inserter(arrays)); + }*/ + else if (isSgVariableDeclaration(stmt)) { + if (SgExpression *init = + isSgVariableDeclaration(stmt)->get_variables().front()->get_initializer()) { + if (isSgAssignInitializer(init)) { + std::vector<SgVarRefExp *> a = substitute( + isSgAssignInitializer(init)->get_operand(), sym, + expr, root); + std::copy(a.begin(), a.end(), back_inserter(arrays)); + } + } + } else if (isSgIfStmt(stmt)) { + SgIfStmt* tni = isSgIfStmt(stmt); + //tni->get_conditional()->set_parent(tni); + //tni->get_true_body()->set_parent(tni); + //tni->get_false_body()->set_parent(tni); + std::vector<SgVarRefExp *> a = substitute( + isSgNode(tni->get_conditional()), sym, expr, root); + std::copy(a.begin(), a.end(), back_inserter(arrays)); + std::vector<SgVarRefExp *> a1 = substitute( + isSgNode(tni->get_true_body()), sym, expr, root); + std::copy(a1.begin(), a1.end(), back_inserter(arrays)); + std::vector<SgVarRefExp *> a2 = substitute( + isSgNode(tni->get_false_body()), sym, expr, root); + std::copy(a2.begin(), a2.end(), back_inserter(arrays)); + } else if (isSgExprStatement(stmt)) { + (isSgExprStatement(stmt)->get_expression())->set_parent( + isSgExprStatement(stmt)); + std::vector<SgVarRefExp *> a = substitute( + isSgNode(isSgExprStatement(stmt)->get_expression()), + sym, expr, root); + std::copy(a.begin(), a.end(), back_inserter(arrays)); + } //end else if + } //end if + else { + op = isSgExpression(in); + // std::string x = isSgNode(op)->unparseToString(); + std::string y = sym->get_name().getString(); +// std::cout << "------substitute else:: " << in->unparseToString().c_str() << ", " << y.c_str() << "\n"; + + if (isSgBinaryOp(op)) { + + isSgBinaryOp(op)->get_lhs_operand()->set_parent(op); + isSgBinaryOp(op)->get_rhs_operand()->set_parent(op); + + std::vector<SgVarRefExp *> a = substitute( + isSgBinaryOp(op)->get_lhs_operand(), sym, expr, root); + std::copy(a.begin(), a.end(), back_inserter(arrays)); + std::vector<SgVarRefExp *> a1 = substitute( + isSgBinaryOp(op)->get_rhs_operand(), sym, expr, root); + std::copy(a1.begin(), a1.end(), back_inserter(arrays)); + } else if (isSgUnaryOp(op)) { + //isSgUnaryOp(op)->get_operand()->set_parent(op); + //std::string x = isSgNode(op)->unparseToString(); + //std::cout<<x<<std::endl; + std::vector<SgVarRefExp *> a = substitute( + isSgUnaryOp(op)->get_operand(), sym, expr, root); + std::copy(a.begin(), a.end(), back_inserter(arrays)); + } else if (isSgVarRefExp(op)) { + std::string z = + isSgVarRefExp(op)->get_symbol()->get_name().getString(); + if (!strcmp(z.c_str(), y.c_str())) { + //isSgVarRefExp(op)->set_symbol(isSgVarRefExp(expr)->get_symbol()); + arrays.push_back(isSgVarRefExp(op)); + //replaceVariableReferences(root, isSgVarRefExp(in)->get_symbol(), temp); + //r = true; + } //end if + } //end else if + else if (isSgCallExpression(op)) { + SgExprListExp* exprs = isSgCallExpression(op)->get_args(); + SgExpressionPtrList &expr_list = exprs->get_expressions(); + + for (SgExpressionPtrList::iterator it = expr_list.begin(); + it != expr_list.end(); it++) { + std::vector<SgVarRefExp *> a = substitute(isSgNode(*it), + sym, expr, root); + std::copy(a.begin(), a.end(), back_inserter(arrays)); + } + } else if (isSgExprListExp(op)) { // Manu:: fortran indices are stored this way + SgExpressionPtrList &expr_list = isSgExprListExp(op)->get_expressions(); + + for (SgExpressionPtrList::iterator it = expr_list.begin(); + it != expr_list.end(); it++) { + std::vector<SgVarRefExp *> a = substitute(isSgNode(*it), + sym, expr, root); + std::copy(a.begin(), a.end(), back_inserter(arrays)); + } + + } + + //end else if + //else if(!isSgValueExp(op)) + // throw ir_error("unrecognized expression type"); + } //end else + } //end if + + /* bool r = false; + if (isSgVarRefExp(in) && (isSgVarRefExp(in)->get_symbol() == sym)) { + omega::CG_roseRepr *result = new omega::CG_roseRepr(expr); + SgExpression* expr1 = result->GetExpression(); + delete result; + SgVariableSymbol* temp = isSgVarRefExp(expr1)->get_symbol(); + parent->replace_expression(in, expr1); + replaceVariableReferences(root, isSgVarRefExp(in)->get_symbol(), temp); + r = true; + } + else if(isSgBinaryOp(in)){ + substitute(isSgBinaryOp(in)->get_lhs_operand(), sym, expr, root, in); + substitute(isSgBinaryOp(in)->get_rhs_operand(), sym, expr, root, in); + } + else if(isSgUnaryOp(in)) + substitute(isSgUnaryOp(in)->get_operand(), sym, expr, root, in); + + */ + + return arrays; +} + +/*bool substitute(SgStatement *tn, SgVariableSymbol *sym, SgExpression* expr, SgNode* root, SgSymbolTable* symtab) { + if (tn == NULL) + return false; + + bool r = false; + if( tn != NULL){ + if(isSgExpression(tn)){ + r = substitute(isSgExpression(tn), sym, expr, root, isSgExpression(tn)) || r; + + } + else { + omega::CG_roseRepr *result = new omega::CG_roseRepr(expr); + SgExpression* expr1 = result->GetExpression(); + tn->replace_expression(buildVarRefExp(sym), expr1); + for (unsigned i = 0; i < tn->get_numberOfTraversalSuccessors(); i++) + r = substitute(isSgStatement(tn->get_traversalSuccessorByIndex(i)), sym, expr, root, symtab) || r; + + } + } + return r; + } + + bool substitute(SgNode *tnl, SgVariableSymbol *sym, SgExpression* expr, SgNode* root, SgSymbolTable* symtab) { + if (tnl == NULL) + return false; + + bool r = false; + + for(int i=0; i < tnl->get_numberOfTraversalSuccessors(); i++){ + + SgNode* tn = tnl->get_traversalSuccessorByIndex(i); + r = substitute(isSgStatement(tn), sym, expr, root, symtab) || r; + } + + + return r; + } + */ + +} // namespace diff --git a/omegalib/code_gen/src/CG_roseRepr.cc b/omegalib/code_gen/src/CG_roseRepr.cc new file mode 100644 index 0000000..99cf973 --- /dev/null +++ b/omegalib/code_gen/src/CG_roseRepr.cc @@ -0,0 +1,176 @@ +/***************************************************************************** + Copyright (C) 2008 University of Southern California. + All Rights Reserved. + + Purpose: + omega holder for suif implementaion + + Notes: + + History: + 02/01/06 - Chun Chen - created +*****************************************************************************/ + +#include <code_gen/CG_roseRepr.h> +#include <code_gen/rose_attributes.h> +#include <stdio.h> +#include <string.h> +#include <cstring> +namespace omega { + + + + +CG_roseRepr::CG_roseRepr(): tnl_(NULL), op_(NULL), list_(NULL){ + +} + +CG_roseRepr::CG_roseRepr(SgNode *tnl): tnl_(tnl), op_(NULL),list_(NULL) { +} + +CG_roseRepr::CG_roseRepr(SgExpression* op): tnl_(NULL), op_(op),list_(NULL){ +} +CG_roseRepr::CG_roseRepr(SgStatementPtrList* stmtlist):tnl_(NULL), op_(NULL), list_(stmtlist){ +} + +CG_roseRepr::~CG_roseRepr() { + // delete nothing here. operand or tree_node_list should already be + // grafted to other expression tree or statement list +} + +CG_outputRepr* CG_roseRepr::clone() const { + + if( tnl_ != NULL) { + SgTreeCopy tc; + SgNode *tnl = tnl_->copy(tc); + copyAttributes(tnl_, tnl); + + tnl->set_parent(tnl_->get_parent()); + return new CG_roseRepr(tnl); + } + else if(op_ != NULL) + { + SgTreeCopy tc1; + SgNode* op = isSgNode(op_)->copy(tc1); + copyAttributes(op_, op); + + op->set_parent(isSgNode(op_)->get_parent()); + return new CG_roseRepr(isSgExpression(op)); + } + else if(list_ != NULL) + { + SgStatementPtrList* list2 = new SgStatementPtrList; + + for(SgStatementPtrList::iterator it = (*list_).begin(); it != (*list_).end(); it++){ + SgTreeCopy tc3; + SgNode *tnl2 = isSgNode(*it)->copy(tc3); + copyAttributes(*it, tnl2); + + tnl2->set_parent(isSgNode(*it)->get_parent()); + + (*list2).push_back(isSgStatement(tnl2)); + } + return new CG_roseRepr(list2); + } + + return NULL; +} + +void CG_roseRepr::clear() { + if(tnl_ != NULL) { + delete tnl_; + tnl_ = NULL; + } +} + +SgNode* CG_roseRepr::GetCode() const { + return tnl_; +} + +SgStatementPtrList* CG_roseRepr::GetList() const { + return list_; +} + +SgExpression* CG_roseRepr::GetExpression() const { + return op_; +} +void CG_roseRepr::Dump() const { +SgNode* tnl = tnl_; +SgExpression* op = op_ ; + if(tnl != NULL) + DumpFileHelper(tnl, stdout); + else if(op != NULL) + DumpFileHelper(isSgNode(op), stdout); + +} + +void CG_roseRepr::DumpFileHelper(SgNode* node, FILE *fp) const{ + std::string x; + size_t numberOfSuccessors = node->get_numberOfTraversalSuccessors(); + if(numberOfSuccessors == 0){ + x = node->unparseToString (); + fprintf(fp, "%s", x.c_str()); + } + else{ + for (size_t idx = 0; idx < numberOfSuccessors; idx++) + { + SgNode *child = NULL; + child = node->get_traversalSuccessorByIndex(idx); + DumpFileHelper(child, fp); + } + +} +} + +/*void CG_roseRepr::DumpToFile(FILE *fp) const { +// std::string x; +SgNode* tnl = tnl_; +SgExpression* op = op_ ; + +if(tnl!= NULL){ + std::string x = tnl->unparseToString(); + fprintf(fp, "%s", x.c_str()); + +} +else if(op != NULL){ + std::string x = isSgNode(op)->unparseToString(); + fprintf(fp, "%s", x.c_str()); + + + +} +} +*/ +/* +SgNode* CG_roseRepr::copyAST ( SgNode* node ) +{ + +// This is a better implementation using a derived class from SgCopyHelp to control the +// copying process (skipping the copy of any function definition). This is a variable +// declaration with an explicitly declared class type. +class RestrictedCopyType : public SgCopyHelp + { + // DQ (9/26/2005): This class demonstrates the use of the copy mechanism + // within Sage III (originally designed and implemented by Qing Yi). + // One problem with it is that there is no context information permitted. + + public: + virtual SgNode *copyAst(const SgNode *n) + { + // This is the simpliest possible version of a deep copy SgCopyHelp::copyAst() member function. + SgNode *returnValue = n->copy(*this); + + return returnValue; + } + } restrictedCopyType; + + + + +// This triggers a bug with test2005_152.C (the unparsed code fails for g++ 4.1.2, but not 3.5.6) +SgNode* copyOfNode = node->copy(restrictedCopyType); +return copyOfNode; + +} +*/ +} // namespace diff --git a/omegalib/code_gen/src/CG_stringBuilder.cc b/omegalib/code_gen/src/CG_stringBuilder.cc new file mode 100644 index 0000000..2f9286f --- /dev/null +++ b/omegalib/code_gen/src/CG_stringBuilder.cc @@ -0,0 +1,487 @@ +/***************************************************************************** + Copyright (C) 1994-2000 the Omega Project Team + Copyright (C) 2005-2011 Chun Chen + All Rights Reserved. + + Purpose: + generate pseudo string code + + Notes: + There is no need to check illegal NULL parameter and throw invalid_argument + in other IR interface implementation. They are for debugging purpose. + intMod implements modular function that returns positve remainder no matter + lop is postive or nagative and rop is guranteed to be positive here. + + History: + 04/17/96 - Lei Zhou - created + 08/31/09 add parenthesis to string operands, Chun Chen +*****************************************************************************/ + +#include <code_gen/CG_stringBuilder.h> +#include <code_gen/codegen_error.h> +#include <basic/util.h> +#include <string> +#include <stdexcept> +#include <ctype.h> +#include <string.h> + +namespace { + +std::string SafeguardString(const std::string &s, char op) { + int len = s.length(); + int paren_level = 0; + int num_plusminus = 0; + int num_mul = 0; + int num_div = 0; + for (int i = 0; i < len; i++) + switch (s[i]) { + case '(': + paren_level++; + break; + case ')': + paren_level--; + break; + case '+': + case '-': + if (paren_level == 0) + num_plusminus++; + break; + case '*': + if (paren_level == 0) + num_mul++; + break; + case '/': + if (paren_level == 0) + num_div++; + break; + default: + break; + } + + bool need_paren = false; + switch (op) { + case '-': + if (num_plusminus > 0) + need_paren = true; + break; + case '*': + if (num_plusminus > 0 || num_div > 0) + need_paren = true; + break; + case '/': + if (num_plusminus > 0 || num_div > 0 || num_mul > 0) + need_paren = true; + break; + default: + break; + } + + if (need_paren) + return "(" + s + ")"; + else + return s; +} + + +std::string GetIndentSpaces(int indent) { + std::string indentStr; + for (int i = 1; i < indent; i++) { + indentStr += " "; + } + return indentStr; +} + + +// A shortcut to extract the string enclosed in the CG_outputRepr and delete +// the original holder. +std::string GetString(omega::CG_outputRepr *repr) { + std::string result = static_cast<omega::CG_stringRepr *>(repr)->GetString(); + delete repr; + return result; +} + +} + + +namespace omega { + + + +//----------------------------------------------------------------------------- +// Class: CG_stringBuilder +//----------------------------------------------------------------------------- + +CG_stringRepr *CG_stringBuilder::CreateSubstitutedStmt(int indent, CG_outputRepr *stmt, + const std::vector<std::string> &vars, + std::vector<CG_outputRepr *> &subs) const { + std::string listStr = ""; + + for (int i = 0; i < subs.size(); i++) { + if (subs[i] == NULL) + listStr += "N/A"; + else + listStr += GetString(subs[i]); + if (i < subs.size() - 1) + listStr += ","; + } + + std::string stmtName = GetString(stmt); + std::string indentStr = GetIndentSpaces(indent); + + return new CG_stringRepr(indentStr + stmtName + "(" + listStr + ");\n"); +} + +CG_stringRepr *CG_stringBuilder::CreateAssignment(int indent, + CG_outputRepr *lhs, + CG_outputRepr *rhs) const { + if (lhs == NULL || rhs == NULL) + throw std::invalid_argument("missing lhs or rhs in assignment"); + + std::string lhsStr = GetString(lhs); + std::string rhsStr = GetString(rhs); + + std::string indentStr = GetIndentSpaces(indent); + + return new CG_stringRepr(indentStr + lhsStr + "=" + rhsStr + ";\n"); +} + + +CG_stringRepr *CG_stringBuilder::CreateInvoke(const std::string &funcName, + std::vector<CG_outputRepr *> &list) const { + std::string listStr = ""; + + for (int i = 0; i < list.size(); i++) { + listStr += GetString(list[i]); + if ( i < list.size()-1) + listStr += ","; + } + + return new CG_stringRepr(funcName + "(" + listStr + ")"); +} + + +CG_stringRepr *CG_stringBuilder::CreateComment(int indent, const std::string &commentText) const { + if (commentText == std::string("")) { + return NULL; + } + + std::string indentStr = GetIndentSpaces(indent); + + return new CG_stringRepr(indentStr + "// " + commentText + "\n"); +} + +CG_stringRepr* CG_stringBuilder::CreateAttribute(CG_outputRepr *control, + const std::string &commentText) const { + if (commentText == std::string("")) { + return static_cast<CG_stringRepr *> (control); + } + + std::string controlString = GetString(control); + + return new CG_stringRepr("// " + commentText + "\n" + controlString); + +} + +CG_outputRepr* CG_stringBuilder::CreatePragmaAttribute(CG_outputRepr *scopeStmt, int looplevel, const std::string &pragmaText) const { + // -- Not Implemented + return scopeStmt; +} + +CG_outputRepr* CG_stringBuilder::CreatePrefetchAttribute(CG_outputRepr* scopeStmt, int looplevel, const std::string& arrName, int hint) const { + // -- Not Implemented + return scopeStmt; +} + +CG_stringRepr *CG_stringBuilder::CreateIf(int indent, CG_outputRepr *guardList, + CG_outputRepr *true_stmtList, CG_outputRepr *false_stmtList) const { + if (guardList == NULL) + throw std::invalid_argument("missing if condition"); + + if (true_stmtList == NULL && false_stmtList == NULL) { + delete guardList; + return NULL; + } + + std::string guardListStr = GetString(guardList); + std::string indentStr = GetIndentSpaces(indent); + std::string s; + if (true_stmtList != NULL && false_stmtList == NULL) { + s = indentStr + "if (" + guardListStr + ") {\n" + + GetString(true_stmtList) + + indentStr + "}\n"; + } + else if (true_stmtList == NULL && false_stmtList != NULL) { + s = indentStr + "if !(" + guardListStr + ") {\n" + + GetString(false_stmtList) + + indentStr + "}\n"; + } + else { + s = indentStr + "if (" + guardListStr + ") {\n" + + GetString(true_stmtList) + + indentStr + "}\n" + + indentStr + "else {\n" + + GetString(false_stmtList) + + indentStr + "}\n"; + } + + return new CG_stringRepr(s); +} + + + +CG_stringRepr *CG_stringBuilder::CreateInductive(CG_outputRepr *index, + CG_outputRepr *lower, CG_outputRepr *upper, + CG_outputRepr *step) const { + if (index == NULL) + throw std::invalid_argument("missing loop index"); + if (lower == NULL) + throw std::invalid_argument("missing loop lower bound"); + if (upper == NULL) + throw std::invalid_argument("missing loop upper bound"); + if (step == NULL) + throw std::invalid_argument("missing loop step size"); + + std::string indexStr = GetString(index); + std::string lowerStr = GetString(lower); + std::string upperStr = GetString(upper); + + std::string doStr = "for(" + indexStr + " = " + lowerStr + "; " + + indexStr + " <= " + upperStr + "; " + + indexStr; + + std::string stepStr = GetString(step); + if (stepStr == to_string(1)) + doStr += "++"; + else + doStr += " += " + stepStr; + + doStr += ")"; + + return new CG_stringRepr(doStr); +} + + +CG_stringRepr *CG_stringBuilder::CreateLoop(int indent, CG_outputRepr *control, + CG_outputRepr *stmtList) const { + if (stmtList == NULL) { + delete control; + return NULL; + } + else if (control == NULL) + return static_cast<CG_stringRepr *>(stmtList); + + std::string ctrlStr = GetString(control); + std::string stmtStr = GetString(stmtList); + + std::string indentStr = GetIndentSpaces(indent); + + std::string s = indentStr + ctrlStr + " {\n" + + stmtStr + + indentStr + "}\n"; + + return new CG_stringRepr(s); +} + + + +CG_stringRepr *CG_stringBuilder::CreateInt(int num) const { + std::string s = to_string(num); + return new CG_stringRepr(s); +} + + + +bool CG_stringBuilder::isInteger(CG_outputRepr *op) const { + + char * cstr; + std::string s = GetString(op); + cstr = new char [s.size()+1]; + strcpy (cstr, s.c_str()); + int count = 0; + while(cstr[count] != '\n' && cstr[count] != '\0' ) + if( !isdigit(cstr[count])) + return false; + + + return true; +} + + + +CG_stringRepr *CG_stringBuilder::CreateIdent(const std::string &varName) const { + if (varName == std::string("")) { + return NULL; + } + + return new CG_stringRepr(varName); +} + + +CG_stringRepr *CG_stringBuilder::CreatePlus(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == NULL) { + return static_cast<CG_stringRepr *>(lop); + } + else if (lop == NULL) { + return static_cast<CG_stringRepr *>(rop); + } + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr(lopStr + "+" + ropStr); +} + + +CG_stringRepr *CG_stringBuilder::CreateMinus(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == NULL) { + return static_cast<CG_stringRepr *>(lop); + } + else if (lop == NULL) { + std::string ropStr = GetString(rop); + return new CG_stringRepr("-" + SafeguardString(ropStr, '-')); + } + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr(lopStr + "-" + SafeguardString(ropStr, '-')); +} + + +CG_stringRepr *CG_stringBuilder::CreateTimes(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == NULL || lop == NULL) { + delete rop; + delete lop; + return NULL; + } + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr(SafeguardString(lopStr, '*') + "*" + SafeguardString(ropStr, '*')); +} + + +CG_stringRepr *CG_stringBuilder::CreateDivide(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == NULL) + throw codegen_error("integer division by zero"); + else if (lop == NULL) { + delete rop; + return NULL; + } + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr(SafeguardString(lopStr, '/') + "/" + SafeguardString(ropStr, '/')); +} + + +CG_stringRepr *CG_stringBuilder::CreateIntegerFloor(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == NULL) + throw codegen_error("integer division by zero"); + else if (lop == NULL) { + delete rop; + return NULL; + } + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr("intFloor(" + lopStr + "," + ropStr + ")"); +} + + +CG_stringRepr *CG_stringBuilder::CreateIntegerMod(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == NULL) + throw codegen_error("integer modulo by zero"); + else if (lop == NULL) { + delete rop; + return NULL; + } + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr("intMod(" + lopStr + "," + ropStr + ")"); +} + +CG_stringRepr *CG_stringBuilder::CreateIntegerCeil(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == 0) + throw codegen_error("integer ceiling by zero"); + else if (lop == NULL) { + delete rop; + return NULL; + } + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr("intCeil(" + lopStr + "," + ropStr + ")"); +} + + +CG_stringRepr *CG_stringBuilder::CreateAnd(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == NULL) + return static_cast<CG_stringRepr *>(lop); + else if (lop == NULL) + return static_cast<CG_stringRepr *>(rop); + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr(lopStr + " && " + ropStr); +} + + +CG_stringRepr *CG_stringBuilder::CreateGE(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == NULL || lop == NULL) + throw std::invalid_argument("missing operand in greater than equal comparison condition"); + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr(lopStr + " >= " + ropStr); +} + + + +CG_stringRepr *CG_stringBuilder::CreateLE(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == NULL || lop == NULL) + throw std::invalid_argument("missing operand in less than equal comparison condition"); + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr(lopStr + " <= " + ropStr); +} + + + +CG_stringRepr *CG_stringBuilder::CreateEQ(CG_outputRepr *lop, CG_outputRepr *rop) const { + if (rop == NULL || lop == NULL) + throw std::invalid_argument("missing operand in equal comparison condition"); + + std::string lopStr = GetString(lop); + std::string ropStr = GetString(rop); + + return new CG_stringRepr(lopStr + " == " + ropStr); +} + + + +CG_stringRepr *CG_stringBuilder::StmtListAppend(CG_outputRepr *list1, CG_outputRepr *list2) const { + if (list2 == NULL) { + return static_cast<CG_stringRepr *>(list1); + } + else if (list1 == NULL) { + return static_cast<CG_stringRepr *>(list2); + } + + std::string list1Str = GetString(list1); + std::string list2Str = GetString(list2); + + return new CG_stringRepr(list1Str + list2Str); +} + +} diff --git a/omegalib/code_gen/src/CG_stringRepr.cc b/omegalib/code_gen/src/CG_stringRepr.cc new file mode 100644 index 0000000..63a1657 --- /dev/null +++ b/omegalib/code_gen/src/CG_stringRepr.cc @@ -0,0 +1,54 @@ +/***************************************************************************** + Copyright (C) 1994-2000 University of Maryland + Copyright (C) 2008 University of Southern California + Copyright (C) 2009 University of Utah + All Rights Reserved. + + Purpose: + omega holder for string implementation. + + Notes: + + History: + 04/17/96 - Lei Zhou - created +*****************************************************************************/ + +#include <code_gen/CG_stringRepr.h> +#include <stdio.h> + +namespace omega { + +CG_stringRepr::CG_stringRepr() { +} + +CG_stringRepr::CG_stringRepr(const std::string& _s) : s(_s) { +} + +CG_stringRepr::~CG_stringRepr() { +} + +CG_outputRepr* CG_stringRepr::clone() { + return new CG_stringRepr(s); +} + + +//----------------------------------------------------------------------------- +// basic operation +//----------------------------------------------------------------------------- +std::string CG_stringRepr::GetString() const { + return s; +} + + +//----------------------------------------------------------------------------- +// Dump operations +//----------------------------------------------------------------------------- +void CG_stringRepr::Dump() const { + printf("%s\n", s.c_str()); +} + +void CG_stringRepr::DumpToFile(FILE *fp) const { + fprintf(fp,"%s", s.c_str()); +} + +} // namespace diff --git a/omegalib/code_gen/src/CG_suifBuilder.cc b/omegalib/code_gen/src/CG_suifBuilder.cc new file mode 100644 index 0000000..6bb91b7 --- /dev/null +++ b/omegalib/code_gen/src/CG_suifBuilder.cc @@ -0,0 +1,678 @@ +/***************************************************************************** + Copyright (C) 2008 University of Southern California + Copyright (C) 2009-2010 University of Utah + All Rights Reserved. + + Purpose: + generate suif code for omega + + Notes: + + History: + 02/01/06 created by Chun Chen +*****************************************************************************/ + +#include <stack> +#include <code_gen/CG_suifBuilder.h> +#include <suif1/annote.h> +#include <vector> + +namespace omega { + +//----------------------------------------------------------------------------- +// make suif initilization happy +//----------------------------------------------------------------------------- +char *k_ocg_comment; +char *k_s2c_pragma; +char *k_cuda_dim3; +char *k_cuda_kernel; +char *k_cuda_modifier; +char *k_cuda_texture_memory; //protonu--added to track texture memory type + +// void __attribute__ ((constructor)) my_init(void) { +// ANNOTE(k_ocg_comment, "omega_comment", TRUE); +// } + +//protonu--extern decls +//protonu--adding stuff to make Chun's code work with Gabe's +extern Tuple< Tuple<int> > smtNonSplitLevels; +extern Tuple< Tuple<std::string> > loopIdxNames;//per stmt +extern std::vector< std::pair<int, std::string> > syncs; +extern int checkLoopLevel; +extern int stmtForLoopCheck; +extern int upperBoundForLevel; +extern int lowerBoundForLevel; +extern bool fillInBounds; + + +const char *libcode_gen_ver_string = ""; +const char *libcode_gen_who_string = ""; +const char *libcode_gen_suif_string = ""; + + +void init_code_gen() { + static bool isInit = false; + if(!isInit) + { + isInit = true; + ANNOTE(k_ocg_comment, "omega_comment", TRUE); + ANNOTE(k_s2c_pragma, "s2c pragma", TRUE); + ANNOTE(k_cuda_dim3, "cuda dim3", TRUE); + ANNOTE(k_cuda_kernel, "cuda kernel", TRUE); + ANNOTE(k_cuda_modifier, "cuda modifier", TRUE); + } +} + + +void exit_code_gen(void) { +} + + +//----------------------------------------------------------------------------- +// Class: CG_suifBuilder +//----------------------------------------------------------------------------- + +CG_suifBuilder::CG_suifBuilder(proc_symtab *symtab) +{ + symtab_ = symtab; + init_code_gen(); +} + +CG_outputRepr* CG_suifBuilder::CreatePlaceHolder (int, CG_outputRepr *stmt, + Tuple<CG_outputRepr*> &funcList, Tuple<std::string> &loop_vars) const { + tree_node_list *tnl = static_cast<CG_suifRepr *>(stmt)->tnl_; + delete stmt; + + for (int i = 1; i <= funcList.size(); i++) { + if (funcList[i] == NULL) + continue; + + CG_suifRepr *repr = static_cast<CG_suifRepr*>(funcList[i]); + operand op = repr->op_; + delete repr; + + var_sym *vs = static_cast<var_sym*>(symtab_->lookup_sym(loop_vars[i].c_str(), SYM_VAR)); + + substitute(tnl, vs, op, symtab_); + + if (op.is_instr()) + delete op.instr(); + } + + return new CG_suifRepr(tnl); +} + + +CG_outputRepr* CG_suifBuilder::CreateAssignment(int, CG_outputRepr *lhs, + CG_outputRepr *rhs) const { + if ( lhs == NULL || rhs == NULL ) { + fprintf(stderr, "Code generation: Missing lhs or rhs\n"); + return NULL; + } + + operand src = static_cast<CG_suifRepr*>(rhs)->op_; + if (src.is_instr() && src.instr()->opcode() == io_array) { + in_array *ia = static_cast<in_array *>(src.instr()); + instruction *ins = new in_rrr(io_lod, ia->elem_type(), operand(), ia); + src = operand(ins); + } + + instruction *ins; + operand dst = static_cast<CG_suifRepr*>(lhs)->op_; + if (dst.is_instr() && dst.instr()->opcode() == io_array) { + in_array *ia = static_cast<in_array *>(dst.instr()); + ins = new in_rrr(io_str, type_void, operand(), operand(ia), src); + } + else + ins = new in_rrr(io_cpy, src.type(), dst, src); + + delete lhs; + delete rhs; + + tree_node_list *tnl = new tree_node_list; + tnl->append(new tree_instr(ins)); + + return new CG_suifRepr(tnl); +} + + +CG_outputRepr* CG_suifBuilder::CreateInvoke(const std::string &fname, + Tuple<CG_outputRepr*> &list) const { + if (fname == std::string("max") || fname == std::string("min")) { + if (list.size() == 0) { + return NULL; + } + else if (list.size() == 1) { + return list[1]; + } + else { + int last = list.size(); + operand op2 = static_cast<CG_suifRepr*>(list[last])->op_; + delete list[last]; + list.delete_last(); + CG_suifRepr *repr = static_cast<CG_suifRepr*>(CreateInvoke(fname, list)); + operand op1 = repr->op_; + + instruction *ins; + if (fname == std::string("max")) + ins = new in_rrr(io_max, op1.type(), operand(), op1, op2); + else + ins = new in_rrr(io_min, op1.type(), operand(), op1, op2); + + repr->op_ = operand(ins); + + return repr; + } + } + else { + fprintf(stderr, "Code generation: invoke function io_call not implemented\n"); + return NULL; + } +} + + +CG_outputRepr* CG_suifBuilder::CreateAttribute(CG_outputRepr *control, + const std::string &commentText)const { + if (commentText == std::string("")) { + return control; + } + + instruction *ins = new in_rrr(io_mrk); + + immed_list *iml = new immed_list; + iml->append(immed(const_cast<char *>(commentText.c_str()))); + ins->prepend_annote(k_ocg_comment, iml); + + tree_node_list *tnl ; + tnl = static_cast<CG_suifRepr*>(control)->tnl_; + tnl->append(new tree_instr(ins)); + + + return new CG_suifRepr(tnl); + + +} + + + +CG_outputRepr* CG_suifBuilder::CreateComment(int, const std::string &commentText) const { + if ( commentText == std::string("") ) { + return NULL; + } + + instruction *ins = new in_rrr(io_mrk); + + immed_list *iml = new immed_list; + iml->append(immed(const_cast<char *>(commentText.c_str()))); + ins->prepend_annote(k_ocg_comment, iml); + + tree_node_list *tnl = new tree_node_list; + tnl->append(new tree_instr(ins)); + + return new CG_suifRepr(tnl); +} + + +CG_outputRepr* CG_suifBuilder::CreateIf(int, CG_outputRepr *guardList, + CG_outputRepr *true_stmtList, CG_outputRepr *false_stmtList) const { + static int if_counter = 1; + std::string s = std::string("omegaif_")+to_string(if_counter++); + label_sym *if_label = new label_sym(const_cast<char *>(s.c_str())); + symtab_->add_sym(if_label); + + if ( true_stmtList == NULL && false_stmtList == NULL ) { + delete guardList; + return NULL; + } + else if ( guardList == NULL ) { + return StmtListAppend(true_stmtList, false_stmtList); + } + + tree_node_list *header = new tree_node_list; + operand op = static_cast<CG_suifRepr*>(guardList)->op_; + + std::stack<void *> S; + S.push(op.instr()); + while(!S.empty()) { + instruction *ins = static_cast<instruction *>(S.top()); + S.pop(); + if (ins->opcode() == io_and) { + instruction *ins1 = ins->src_op(0).instr(); + ins1->remove(); + S.push(ins1); + instruction *ins2 = ins->src_op(1).instr(); + ins2->remove(); + S.push(ins2); + delete ins; + } + else { + ins = new in_bj(io_bfalse, if_label, operand(ins)); + header->append(new tree_instr(ins)); + } + } + + tree_node_list *then_part, *else_part; + if (true_stmtList != NULL) + then_part = static_cast<CG_suifRepr*>(true_stmtList)->tnl_; + else + then_part = NULL; + if (false_stmtList != NULL) + else_part = static_cast<CG_suifRepr*>(false_stmtList)->tnl_; + else + else_part = NULL; + tree_if *ti = new tree_if(if_label, header, then_part, else_part); + + tree_node_list *tnl = new tree_node_list; + tnl->append(ti); + + delete guardList; + delete true_stmtList; + delete false_stmtList; + + return new CG_suifRepr(tnl); +} + + +CG_outputRepr* CG_suifBuilder::CreateInductive(CG_outputRepr *index, + CG_outputRepr *lower, + CG_outputRepr *upper, + CG_outputRepr *step) const { + if ( index == NULL || lower == NULL || upper == NULL ) { + fprintf(stderr, "Code generation: something wrong in CreateInductive\n"); + return NULL; + } + + if (step == NULL) + step = CreateInt(1); + + var_sym *index_sym = static_cast<CG_suifRepr*>(index)->op_.symbol(); + operand lower_bound = static_cast<CG_suifRepr*>(lower)->op_; + operand upper_bound = static_cast<CG_suifRepr*>(upper)->op_; + operand step_size = static_cast<CG_suifRepr*>(step)->op_; + + label_sym *contLabel = new label_sym(""); + label_sym *brkLabel = new label_sym(""); + symtab_->add_sym(contLabel); + symtab_->add_sym(brkLabel); + tree_for *tf = new tree_for(index_sym, FOR_SLTE, contLabel, brkLabel, NULL, + lower_bound, upper_bound, step_size, NULL); + + tree_node_list *tnl = new tree_node_list; + tnl->append(tf); + + delete index; + delete lower; + delete upper; + delete step; + + return new CG_suifRepr(tnl); +} + + +CG_outputRepr* CG_suifBuilder::CreateLoop(int, CG_outputRepr *control, + CG_outputRepr *stmtList) const { + if ( stmtList == NULL ) { + delete control; + return NULL; + } + else if ( control == NULL ) { + fprintf(stderr, "Code generation: no inductive for this loop\n"); + return stmtList; + } + + tree_node_list *tnl = static_cast<CG_suifRepr*>(control)->tnl_; + tree_node_list_iter iter(tnl); + tree_for *tf = static_cast<tree_for*>(iter.step()); + + tree_node_list *body = static_cast<CG_suifRepr*>(stmtList)->tnl_; + tf->set_body(body); + + delete stmtList; + + return control; +} + + +CG_outputRepr* CG_suifBuilder::CreateInt(int _i) const { + in_ldc *ins = new in_ldc(type_s32, operand(), immed(_i)); + + return new CG_suifRepr(operand(ins)); +} + + +CG_outputRepr* CG_suifBuilder::CreateIdent(const std::string &_s) const { + if ( &_s == NULL || _s == std::string("") ) { + return NULL; + } + + var_sym *vs = static_cast<var_sym*>(symtab_->lookup_sym(_s.c_str(), SYM_VAR)); + + if (vs == NULL) { + vs = new var_sym(type_s32, const_cast<char*>(_s.c_str())); + symtab_->add_sym(vs); + } + + return new CG_suifRepr(operand(vs)); +} + + +CG_outputRepr* CG_suifBuilder::CreatePlus(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if ( rop == NULL ) { + return lop; + } + else if ( lop == NULL ) { + return rop; + } + + operand op1 = static_cast<CG_suifRepr*>(lop)->op_; + operand op2 = static_cast<CG_suifRepr*>(rop)->op_; + + instruction *ins = new in_rrr(io_add, op1.type(), operand(), op1, op2); + + delete lop; + delete rop; + + return new CG_suifRepr(operand(ins)); +} + + +CG_outputRepr* CG_suifBuilder::CreateMinus(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if ( rop == NULL ) { + return lop; + } + else if ( lop == NULL ) { + operand op = static_cast<CG_suifRepr*>(rop)->op_; + instruction *ins = new in_rrr(io_neg, op.type(), operand(), op); + + delete rop; + + return new CG_suifRepr(operand(ins)); + } + else { + operand op1 = static_cast<CG_suifRepr*>(lop)->op_; + operand op2 = static_cast<CG_suifRepr*>(rop)->op_; + + instruction *ins = new in_rrr(io_sub, op1.type(), operand(), op1, op2); + + delete lop; + delete rop; + + return new CG_suifRepr(operand(ins)); + } +} + + +CG_outputRepr* CG_suifBuilder::CreateTimes(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if ( rop == NULL || lop == NULL) { + if (rop != NULL) { + rop->clear(); + delete rop; + } + if (lop != NULL) { + lop->clear(); + delete lop; + } + return NULL; + } + + operand op1 = static_cast<CG_suifRepr*>(lop)->op_; + operand op2 = static_cast<CG_suifRepr*>(rop)->op_; + + instruction *ins = new in_rrr(io_mul, op1.type(), operand(), op1, op2); + + delete lop; + delete rop; + + return new CG_suifRepr(operand(ins)); +} + + +CG_outputRepr* CG_suifBuilder::CreateIntegerDivide(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if ( rop == NULL ) { + fprintf(stderr, "Code generation: divide by NULL\n"); + return NULL; + } + else if ( lop == NULL ) { + delete rop; + return NULL; + } + + // (6+5)*10 / 4 + operand op1 = static_cast<CG_suifRepr*>(lop)->op_; + operand op2 = static_cast<CG_suifRepr*>(rop)->op_; + + // bugs in SUIF prevent use of correct io_divfloor + instruction *ins = new in_rrr(io_div, op1.type(), operand(), op1, op2); + + delete lop; + delete rop; + + return new CG_suifRepr(operand(ins)); +} + + +CG_outputRepr* CG_suifBuilder::CreateIntegerMod(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if ( rop == NULL || lop == NULL ) { + return NULL; + } + + operand op1 = static_cast<CG_suifRepr*>(lop)->op_; + operand op2 = static_cast<CG_suifRepr*>(rop)->op_; + + // bugs in SUIF prevent use of correct io_mod + instruction *ins = new in_rrr(io_rem, type_s32, operand(), op1, op2); + + delete lop; + delete rop; + + return new CG_suifRepr(operand(ins)); +} + + +CG_outputRepr* CG_suifBuilder::CreateAnd(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if (rop == NULL) + return lop; + else if (lop == NULL) + return rop; + + operand op1 = static_cast<CG_suifRepr*>(lop)->op_; + operand op2 = static_cast<CG_suifRepr*>(rop)->op_; + + instruction *ins = new in_rrr(io_and, op1.type(), operand(), op1, op2); + + delete lop; + delete rop; + + return new CG_suifRepr(operand(ins)); +} + + +CG_outputRepr* CG_suifBuilder::CreateGE(CG_outputRepr *lop, + CG_outputRepr *rop) const { + return CreateLE(rop, lop); +} + + +CG_outputRepr* CG_suifBuilder::CreateLE(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if ( rop == NULL || lop == NULL ) { + return NULL; + } + + operand op1 = static_cast<CG_suifRepr*>(lop)->op_; + operand op2 = static_cast<CG_suifRepr*>(rop)->op_; + + instruction *ins = new in_rrr(io_sle, type_s32, operand(), op1, op2); + + delete lop; + delete rop; + + return new CG_suifRepr(operand(ins)); +} + + +CG_outputRepr* CG_suifBuilder::CreateEQ(CG_outputRepr *lop, + CG_outputRepr *rop) const { + if ( rop == NULL || lop == NULL ) { + return NULL; + } + + operand op1 = static_cast<CG_suifRepr*>(lop)->op_; + operand op2 = static_cast<CG_suifRepr*>(rop)->op_; + + instruction *ins = new in_rrr(io_seq, type_s32, operand(), op1, op2); + + delete lop; + delete rop; + + return new CG_suifRepr(operand(ins)); +} + + + +CG_outputRepr* CG_suifBuilder::StmtListAppend(CG_outputRepr *list1, + CG_outputRepr *list2) const { + if ( list2 == NULL ) { + return list1; + } + else if ( list1 == NULL ) { + return list2; + } + + tree_node_list *tnl1 = static_cast<CG_suifRepr *>(list1)->tnl_; + tree_node_list *tnl2 = static_cast<CG_suifRepr *>(list2)->tnl_; + if (tnl2 == NULL) + tnl1->append(new tree_instr(static_cast<CG_suifRepr *>(list2)->op_.instr())); + else + tnl1->append(tnl2); + + delete list2; + + return list1; +} + +//protonu--Gabe's stuff added here +//----------------------------------------------------------------------------- +// pragma generation +// TODO: Could allow for a immed_list* instead of a String for strongly typed prgma args +//----------------------------------------------------------------------------- +CG_outputRepr* CG_suifBuilder::CreatePragma(int, + const std::string &pragmaText) const { + if ( pragmaText == std::string("") ) { + return NULL; + } + instruction *ins = new in_rrr(io_mrk); + immed_list *iml = new immed_list; + iml->append(immed(const_cast<char*>(pragmaText.c_str()))); + ins->append_annote(k_s2c_pragma, iml); + tree_node_list *tnl = new tree_node_list; + tnl->append(new tree_instr(ins)); + return new CG_suifRepr(tnl); +} + +CG_outputRepr* CG_suifBuilder::CreateDim3(immed varName, immed arg1, immed arg2) const { + instruction *ins = new in_rrr(io_mrk); + immed_list *iml = new immed_list; + iml->append(immed(varName)); + iml->append(arg1); + iml->append(arg2); + ins->append_annote(k_cuda_dim3, iml); + tree_node_list *tnl = new tree_node_list; + tnl->append(new tree_instr(ins)); + return new CG_suifRepr(tnl); +} + +CG_outputRepr* CG_suifBuilder::CreateDim3(immed varName, immed arg1, immed arg2, immed arg3) const { + instruction *ins = new in_rrr(io_mrk); + immed_list *iml = new immed_list; + iml->append(immed(varName)); + iml->append(arg1); + iml->append(arg2); + iml->append(arg3); + ins->append_annote(k_cuda_dim3, iml); + tree_node_list *tnl = new tree_node_list; + tnl->append(new tree_instr(ins)); + return new CG_suifRepr(tnl); +} + +CG_outputRepr* CG_suifBuilder::CreateKernel(immed_list* iml) const { + instruction *ins = new in_rrr(io_mrk); + ins->append_annote(k_cuda_kernel, iml); + tree_node_list *tnl = new tree_node_list; + tnl->append(new tree_instr(ins)); + return new CG_suifRepr(tnl); +} + +type_node* CG_suifBuilder::ModifyType(type_node* base, const char* modifier) const { + modifier_type* result = new modifier_type(TYPE_NULL, base); + immed_list *iml = new immed_list; + iml->append(immed((char*)modifier)); + result->append_annote(k_cuda_modifier, iml); + return result; +} +//end-protonu + + +//----------------------------------------------------------------------------- +// suif utility +//----------------------------------------------------------------------------- + +bool substitute(instruction *in, var_sym *sym, operand expr, base_symtab *st) { + if (in == NULL || sym == NULL) + return false; + + bool r = false; + for (unsigned i = 0; i < in->num_srcs(); i++) { + operand op(in->src_op(i)); + + if (op.is_symbol() && op.symbol() == sym) { + in->set_src_op(i, expr.clone(st)); + r = true; + } + else if (op.is_instr()) { + r = substitute(op.instr(), sym, expr, st) || r; + } + } + + return r; +} + +bool substitute(tree_node *tn, var_sym *sym, operand expr, base_symtab *st) { + if (tn == NULL) + return false; + + bool r = false; + if (tn->kind() == TREE_INSTR) + r = substitute(static_cast<tree_instr*>(tn)->instr(), sym, expr, st) || r; + else { + for (unsigned i = 0; i < tn->num_child_lists(); i++) { + r = substitute(tn->child_list_num(i), sym, expr, st) || r; + } + } + + return r; +} + +bool substitute(tree_node_list *tnl, var_sym *sym, operand expr, + base_symtab *st) { + if (tnl == NULL) + return false; + + bool r = false; + tree_node_list_iter iter(tnl); + while (!iter.is_empty()) { + tree_node *tn = iter.step(); + + r = substitute(tn, sym, expr, st) || r; + } + + return r; +} + +} diff --git a/omegalib/code_gen/src/CG_suifRepr.cc b/omegalib/code_gen/src/CG_suifRepr.cc new file mode 100644 index 0000000..f4f987d --- /dev/null +++ b/omegalib/code_gen/src/CG_suifRepr.cc @@ -0,0 +1,81 @@ +/***************************************************************************** + Copyright (C) 2008 University of Southern California. + All Rights Reserved. + + Purpose: + omega holder for suif implementaion + + Notes: + + History: + 02/01/06 - Chun Chen - created +*****************************************************************************/ + +#include <code_gen/CG_suifRepr.h> +#include <stdio.h> + +namespace omega { + +CG_suifRepr::CG_suifRepr(): tnl_(NULL), op_() { +} + +CG_suifRepr::CG_suifRepr(tree_node_list *tnl): tnl_(tnl),op_() { +} + +CG_suifRepr::CG_suifRepr(operand op): tnl_(NULL), op_(op) { +} + +CG_suifRepr::~CG_suifRepr() { + // delete nothing here. operand or tree_node_list should already be + // grafted to other expression tree or statement list +} + +CG_outputRepr* CG_suifRepr::clone() { + if (!op_.is_null() ) { + operand op = op_.clone(); + return new CG_suifRepr(op); + } + else if (tnl_ != NULL) { + tree_node_list *tnl = tnl_->clone(); + return new CG_suifRepr(tnl); + } + else + return new CG_suifRepr(); +} + +void CG_suifRepr::clear() { + if (!op_.is_null()) { + if (op_.is_instr()) + delete op_.instr(); + op_.set_null(); + } + else if (tnl_ != NULL) { + delete tnl_; + tnl_ = NULL; + } +} + +tree_node_list* CG_suifRepr::GetCode() const { + return tnl_; +} + +operand CG_suifRepr::GetExpression() const { + return op_; +} + +void CG_suifRepr::Dump() const { + if (tnl_ != NULL) + tnl_->print(); + else if (!op_.is_null()) + op_.print(); +} + +void CG_suifRepr::DumpToFile(FILE *fp) const { + if (tnl_ != NULL) + tnl_->print(fp); + else if (!op_.is_null()) + op_.print(fp); +} + + +} // namespace diff --git a/omegalib/code_gen/src/CG_utils.cc b/omegalib/code_gen/src/CG_utils.cc new file mode 100755 index 0000000..d3a5f71 --- /dev/null +++ b/omegalib/code_gen/src/CG_utils.cc @@ -0,0 +1,1735 @@ +/***************************************************************************** + Copyright (C) 1994-2000 the Omega Project Team + Copyright (C) 2005-2011 Chun Chen + All Rights Reserved. + + Purpose: + Utility functions for processing CG tree. + + Notes: + + History: + 07/19/07 when generating output variable substitutions for a mapping + relation, map it to each output to get correct equality, -chun + 07/29/10 when translating equality to assignment, generate appropriate + if-condition when necesssary, -chun +*****************************************************************************/ + +#include <typeinfo> +#include <omega.h> +#include <code_gen/CG.h> +#include <code_gen/CG_utils.h> +#include <code_gen/codegen_error.h> +#include <math.h> +#include <stack> + +namespace omega { + +int checkLoopLevel; +int stmtForLoopCheck; +int upperBoundForLevel; +int lowerBoundForLevel; +bool fillInBounds; + +//trick to static init checkLoopLevel to 0 +class JunkStaticInit{ public: JunkStaticInit(){ checkLoopLevel=0; fillInBounds=false;} }; +static JunkStaticInit junkInitInstance__; + + + + +namespace { + +Relation find_best_guard(const Relation &R, const BoolSet<> &active, const std::map<int, Relation> &guards) { + std::pair<int, int> best_cost = std::make_pair(0, 0); + Relation best_cond = Relation::True(R.n_set()); + + Relation r = copy(R); + int max_iter_count = 2*(r.single_conjunct()->n_EQs()) + r.single_conjunct()->n_GEQs(); + int iter_count = 0; + while (!r.is_obvious_tautology()) { + std::pair<int, int> cost = std::make_pair(0, 0); + Relation cond = pick_one_guard(r); + Relation complement_cond = Complement(copy(cond)); + complement_cond.simplify(); + for (BoolSet<>::const_iterator i = active.begin(); i != active.end(); i++) { + std::map<int, Relation>::const_iterator j = guards.find(*i); + if (j == guards.end()) + continue; + if (Must_Be_Subset(copy(j->second), copy(cond))) + cost.first++; + else if (Must_Be_Subset(copy(j->second), copy(complement_cond))) + cost.second++; + } + if (cost > best_cost) { + best_cost = cost; + best_cond = copy(cond); + } + r = Gist(r, cond, 1); + + if (iter_count > max_iter_count) + throw codegen_error("guard condition too complex to handle"); + + iter_count++; + } + + return best_cond; +} + + +Relation find_best_guard(const Relation &R, const std::vector<CG_loop *> &loops, int start, int end) { + std::pair<int, int> best_cost = std::make_pair(0, 0); + Relation best_cond = Relation::True(R.n_set()); + + Relation r = copy(R); + int max_iter_count = 2*(r.single_conjunct()->n_EQs()) + r.single_conjunct()->n_GEQs(); + int iter_count = 0; + while (!r.is_obvious_tautology()) { + std::pair<int, int> cost = std::make_pair(0, 0); + Relation cond = pick_one_guard(r); + int i = start; + for ( ; i < end; i++) { + if (Must_Be_Subset(copy(loops[i]->guard_), copy(cond))) + cost.first++; + else + break; + } + Relation complement_cond = Complement(copy(cond)); + complement_cond.simplify(); + for (int j = i; j < end; j++) + if (Must_Be_Subset(copy(loops[j]->guard_), copy(complement_cond))) + cost.second++; + else + break; + + if (cost > best_cost) { + best_cost = cost; + best_cond = copy(cond); + } + r = Gist(r, cond, 1); + + if (iter_count > max_iter_count) + throw codegen_error("guard condition too complex to handle"); + + iter_count++; + } + + return best_cond; +} + +} + +bool bound_must_hit_stride(const GEQ_Handle &inequality, Variable_ID v, const EQ_Handle &stride_eq, Variable_ID wc, const Relation &bounds, const Relation &known) { + assert(inequality.get_coef(v) != 0 && abs(stride_eq.get_coef(v)) == 1 && wc->kind() == Wildcard_Var && abs(stride_eq.get_coef(wc)) > 1); + + // if bound expression uses floor operation, bail out for now + // TODO: in the future, handle this + if (abs(inequality.get_coef(v)) != 1) + return false; + + coef_t stride = abs(stride_eq.get_coef(wc)); + + Relation r1(known.n_set()); + F_Exists *f_exists1 = r1.add_and()->add_exists(); + F_And *f_root1 = f_exists1->add_and(); + std::map<Variable_ID, Variable_ID> exists_mapping1; + EQ_Handle h1 = f_root1->add_EQ(); + Relation r2(known.n_set()); + F_Exists *f_exists2 = r2.add_and()->add_exists(); + F_And *f_root2 = f_exists2->add_and(); + std::map<Variable_ID, Variable_ID> exists_mapping2; + EQ_Handle h2 = f_root2->add_EQ(); + for (Constr_Vars_Iter cvi(inequality); cvi; cvi++) { + Variable_ID v = cvi.curr_var(); + switch (v->kind()) { + case Input_Var: + h1.update_coef(r1.input_var(v->get_position()), cvi.curr_coef()); + h2.update_coef(r2.input_var(v->get_position()), cvi.curr_coef()); + break; + case Global_Var: { + Global_Var_ID g = v->get_global_var(); + Variable_ID v1, v2; + if (g->arity() == 0) { + v1 = r1.get_local(g); + v2 = r2.get_local(g); + } + else { + v1 = r1.get_local(g, v->function_of()); + v2 = r2.get_local(g, v->function_of()); + } + h1.update_coef(v1, cvi.curr_coef()); + h2.update_coef(v2, cvi.curr_coef()); + break; + } + case Wildcard_Var: { + Variable_ID v1 = replicate_floor_definition(bounds, v, r1, f_exists1, f_root1, exists_mapping1); + Variable_ID v2 = replicate_floor_definition(bounds, v, r2, f_exists2, f_root2, exists_mapping2); + h1.update_coef(v1, cvi.curr_coef()); + h2.update_coef(v2, cvi.curr_coef()); + break; + } + default: + assert(false); + } + } + h1.update_const(inequality.get_const()); + h1.update_coef(f_exists1->declare(), stride); + h2.update_const(inequality.get_const()); + r1.simplify(); + r2.simplify(); + + Relation all_known = Intersection(copy(bounds), copy(known)); + all_known.simplify(); + + if (Gist(r1, copy(all_known), 1).is_obvious_tautology()) { + Relation r3(known.n_set()); + F_Exists *f_exists3 = r3.add_and()->add_exists(); + F_And *f_root3 = f_exists3->add_and(); + std::map<Variable_ID, Variable_ID> exists_mapping3; + EQ_Handle h3 = f_root3->add_EQ(); + for (Constr_Vars_Iter cvi(stride_eq); cvi; cvi++) { + Variable_ID v= cvi.curr_var(); + switch (v->kind()) { + case Input_Var: + h3.update_coef(r3.input_var(v->get_position()), cvi.curr_coef()); + break; + case Global_Var: { + Global_Var_ID g = v->get_global_var(); + Variable_ID v3; + if (g->arity() == 0) + v3 = r3.get_local(g); + else + v3 = r3.get_local(g, v->function_of()); + h3.update_coef(v3, cvi.curr_coef()); + break; + } + case Wildcard_Var: + if (v == wc) + h3.update_coef(f_exists3->declare(), cvi.curr_coef()); + else { + Variable_ID v3 = replicate_floor_definition(bounds, v, r3, f_exists3, f_root3, exists_mapping3); + h3.update_coef(v3, cvi.curr_coef()); + } + break; + default: + assert(false); + } + } + h3.update_const(stride_eq.get_const()); + r3.simplify(); + + if (Gist(r3, Intersection(r2, all_known), 1).is_obvious_tautology()) + return true; + else + return false; + } + else + return false; +} + + +// +// output variable by its name, however if this variable need to be substituted, +// return the substitution. +// +CG_outputRepr *output_ident(CG_outputBuilder *ocg, const Relation &R, Variable_ID v, const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + const_cast<Relation &>(R).setup_names(); // hack + + if (v->kind() == Input_Var) { + int pos = v->get_position(); + if (assigned_on_the_fly[pos-1].first != NULL) + return assigned_on_the_fly[pos-1].first->clone(); + else + return ocg->CreateIdent(v->name()); + } + else if (v->kind() == Global_Var) { + if (v->get_global_var()->arity() == 0) + return ocg->CreateIdent(v->name()); + else { + /* This should be improved to take into account the possible elimination + of the set variables. */ + int arity = v->get_global_var()->arity(); + std::vector<CG_outputRepr *> argList; + for(int i = 1; i <= arity; i++) + argList.push_back(ocg->CreateIdent(const_cast<Relation &>(R).input_var(i)->name())); + CG_outputRepr *call = ocg->CreateInvoke(v->get_global_var()->base_name(), argList); + return call; + } + } + else + assert(false); +} + + +// +// return pair<if condition, <assignment rhs, assignment cost> > +// +std::pair<CG_outputRepr *, std::pair<CG_outputRepr *, int> > output_assignment(CG_outputBuilder *ocg, const Relation &R, int level, const Relation &known, const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + Variable_ID v = const_cast<Relation &>(R).set_var(level); + Conjunct *c = const_cast<Relation &>(R).single_conjunct(); + + std::pair<EQ_Handle, int> result = find_simplest_assignment(R, v, assigned_on_the_fly); + + if (result.second == INT_MAX) + return std::make_pair(static_cast<CG_outputRepr *>(NULL), std::make_pair(static_cast<CG_outputRepr *>(NULL), INT_MAX)); + + CG_outputRepr *if_repr = NULL; + CG_outputRepr *assign_repr = NULL; + // check whether to generate if-conditions from equality constraints + if (abs(result.first.get_coef(v)) != 1) { + Relation r(R.n_set()); + F_Exists *f_exists = r.add_and()->add_exists(); + F_And *f_root = f_exists->add_and(); + std::map<Variable_ID, Variable_ID> exists_mapping; + exists_mapping[v] = f_exists->declare(); + + EQ_Handle h = f_root->add_EQ(); + for (Constr_Vars_Iter cvi(result.first); cvi; cvi++) + switch (cvi.curr_var()->kind()) { + case Input_Var: { + if (cvi.curr_var() == v) + h.update_coef(exists_mapping[v], cvi.curr_coef()); + else + h.update_coef(r.set_var(cvi.curr_var()->get_position()), cvi.curr_coef()); + break; + } + case Global_Var: { + Global_Var_ID g = cvi.curr_var()->get_global_var(); + Variable_ID v2; + if (g->arity() == 0) + v2 = r.get_local(g); + else + v2 = r.get_local(g, cvi.curr_var()->function_of()); + h.update_coef(v2, cvi.curr_coef()); + break; + } + case Wildcard_Var: { + std::map<Variable_ID, Variable_ID>::iterator p = exists_mapping.find(cvi.curr_var()); + Variable_ID v2; + if (p == exists_mapping.end()) { + v2 = f_exists->declare(); + exists_mapping[cvi.curr_var()] = v2; + } + else + v2 = p->second; + h.update_coef(v2, cvi.curr_coef()); + break; + } + default: + assert(0); + } + h.update_const(result.first.get_const()); + + for (EQ_Iterator e(c->EQs()); e; e++) + if (!((*e) == result.first)) { + EQ_Handle h = f_root->add_EQ(); + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + switch (cvi.curr_var()->kind()) { + case Input_Var: { + assert(cvi.curr_var() != v); + h.update_coef(r.set_var(cvi.curr_var()->get_position()), cvi.curr_coef()); + break; + } + case Global_Var: { + Global_Var_ID g = cvi.curr_var()->get_global_var(); + Variable_ID v2; + if (g->arity() == 0) + v2 = r.get_local(g); + else + v2 = r.get_local(g, cvi.curr_var()->function_of()); + h.update_coef(v2, cvi.curr_coef()); + break; + } + case Wildcard_Var: { + std::map<Variable_ID, Variable_ID>::iterator p = exists_mapping.find(cvi.curr_var()); + Variable_ID v2; + if (p == exists_mapping.end()) { + v2 = f_exists->declare(); + exists_mapping[cvi.curr_var()] = v2; + } + else + v2 = p->second; + h.update_coef(v2, cvi.curr_coef()); + break; + } + default: + assert(0); + } + h.update_const((*e).get_const()); + } + + for (GEQ_Iterator e(c->GEQs()); e; e++) { + GEQ_Handle h = f_root->add_GEQ(); + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + switch (cvi.curr_var()->kind()) { + case Input_Var: { + h.update_coef(r.set_var(cvi.curr_var()->get_position()), cvi.curr_coef()); + break; + } + case Global_Var: { + Global_Var_ID g = cvi.curr_var()->get_global_var(); + Variable_ID v2; + if (g->arity() == 0) + v2 = r.get_local(g); + else + v2 = r.get_local(g, cvi.curr_var()->function_of()); + h.update_coef(v2, cvi.curr_coef()); + break; + } + case Wildcard_Var: { + std::map<Variable_ID, Variable_ID>::iterator p = exists_mapping.find(cvi.curr_var()); + Variable_ID v2; + if (p == exists_mapping.end()) { + v2 = f_exists->declare(); + exists_mapping[cvi.curr_var()] = v2; + } + else + v2 = p->second; + h.update_coef(v2, cvi.curr_coef()); + break; + } + default: + assert(0); + } + h.update_const((*e).get_const()); + } + + r.simplify(); + if (!Gist(r, copy(known), 1).is_obvious_tautology()) { + CG_outputRepr *lhs = output_substitution_repr(ocg, result.first, v, false, R, assigned_on_the_fly); + if_repr = ocg->CreateEQ(ocg->CreateIntegerMod(lhs->clone(), ocg->CreateInt(abs(result.first.get_coef(v)))), ocg->CreateInt(0)); + assign_repr = ocg->CreateDivide(lhs, ocg->CreateInt(abs(result.first.get_coef(v)))); + } + else + assign_repr = output_substitution_repr(ocg, result.first, v, true, R, assigned_on_the_fly); + } + else + assign_repr = output_substitution_repr(ocg, result.first, v, true, R, assigned_on_the_fly); + + if (assign_repr == NULL) + assign_repr = ocg->CreateInt(0); + + return std::make_pair(if_repr, std::make_pair(assign_repr, result.second)); +} + + +// +// return NULL if 0 +// +CG_outputRepr *output_substitution_repr(CG_outputBuilder *ocg, const EQ_Handle &equality, Variable_ID v, bool apply_v_coef, const Relation &R, const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + const_cast<Relation &>(R).setup_names(); // hack + + coef_t a = equality.get_coef(v); + assert(a != 0); + + CG_outputRepr *repr = NULL; + for (Constr_Vars_Iter cvi(equality); cvi; cvi++) + if (cvi.curr_var() != v) { + CG_outputRepr *t; + if (cvi.curr_var()->kind() == Wildcard_Var) { + std::pair<bool, GEQ_Handle> result = find_floor_definition(R, cvi.curr_var()); + if (!result.first) { + delete repr; + throw codegen_error("can't output non floor defined wildcard"); + } + t = output_inequality_repr(ocg, result.second, cvi.curr_var(), R, assigned_on_the_fly); + } + else + t = output_ident(ocg, R, cvi.curr_var(), assigned_on_the_fly); + coef_t coef = cvi.curr_coef(); + + if (a > 0) { + if (coef > 0) { + if (coef == 1) + repr = ocg->CreateMinus(repr, t); + else + repr = ocg->CreateMinus(repr, ocg->CreateTimes(ocg->CreateInt(coef), t)); + } + else { // coef < 0 + if (coef == -1) + repr = ocg->CreatePlus(repr, t); + else + repr = ocg->CreatePlus(repr, ocg->CreateTimes(ocg->CreateInt(-coef), t)); + } + } + else { + if (coef > 0) { + if (coef == 1) + repr = ocg->CreatePlus(repr, t); + else + repr = ocg->CreatePlus(repr, ocg->CreateTimes(ocg->CreateInt(coef), t)); + } + else { // coef < 0 + if (coef == -1) + repr = ocg->CreateMinus(repr, t); + else + repr = ocg->CreateMinus(repr, ocg->CreateTimes(ocg->CreateInt(-coef), t)); + } + } + } + + int c = equality.get_const(); + if (a > 0) { + if (c > 0) + repr = ocg->CreateMinus(repr, ocg->CreateInt(c)); + else if (c < 0) + repr = ocg->CreatePlus(repr, ocg->CreateInt(-c)); + } + else { + if (c > 0) + repr = ocg->CreatePlus(repr, ocg->CreateInt(c)); + else if (c < 0) + repr = ocg->CreateMinus(repr, ocg->CreateInt(-c)); + } + + if (apply_v_coef && abs(a) != 1) + repr = ocg->CreateDivide(repr, ocg->CreateInt(abs(a))); + + return repr; +} + + +// +// original Substitutions class from omega can't handle integer +// division, this is new way. +// +std::vector<CG_outputRepr*> output_substitutions(CG_outputBuilder *ocg, const Relation &R, const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + std::vector<CG_outputRepr *> subs; + + for (int i = 1; i <= R.n_out(); i++) { + Relation mapping(R.n_out(), 1); + F_And *f_root = mapping.add_and(); + EQ_Handle h = f_root->add_EQ(); + h.update_coef(mapping.output_var(1), 1); + h.update_coef(mapping.input_var(i), -1); + Relation r = Composition(mapping, copy(R)); + r.simplify(); + + Variable_ID v = r.output_var(1); + CG_outputRepr *repr = NULL; + std::pair<EQ_Handle, int> result = find_simplest_assignment(r, v, assigned_on_the_fly); + if (result.second < INT_MAX) + repr = output_substitution_repr(ocg, result.first, v, true, r, assigned_on_the_fly); + else { + std::pair<bool, GEQ_Handle> result = find_floor_definition(R, v); + if (result.first) + try { + repr = output_inequality_repr(ocg, result.second, v, R, assigned_on_the_fly); + } + catch (const codegen_error &) { + } + } + + subs.push_back(repr); + } + + return subs; +} + + +// +// handle floor definition wildcards in equality, the second in returned pair +// is the cost. +// +std::pair<EQ_Handle, int> find_simplest_assignment(const Relation &R, Variable_ID v, const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + Conjunct *c = const_cast<Relation &>(R).single_conjunct(); + + int min_cost = INT_MAX; + EQ_Handle eq; + for (EQ_Iterator e(c->EQs()); e; e++) + if (!(*e).has_wildcards() && (*e).get_coef(v) != 0) { + int cost = 0; + + if (abs((*e).get_coef(v)) != 1) + cost += 4; // divide cost + + int num_var = 0; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + if (cvi.curr_var() != v) { + num_var++; + if (abs(cvi.curr_coef()) != 1) + cost += 2; // multiply cost + if (cvi.curr_var()->kind() == Global_Var && cvi.curr_var()->get_global_var()->arity() > 0) + cost += 10; // function cost + else if (cvi.curr_var()->kind() == Input_Var && + assigned_on_the_fly.size() >= cvi.curr_var()->get_position() && + assigned_on_the_fly[cvi.curr_var()->get_position()-1].first != NULL) + cost += assigned_on_the_fly[cvi.curr_var()->get_position()-1].second; // substitution cost on record + } + if ((*e).get_const() != 0) + num_var++; + if (num_var > 1) + cost += num_var - 1; // addition cost + + if (cost < min_cost) { + min_cost = cost; + eq = *e; + } + } + + if (min_cost < INT_MAX) + return std::make_pair(eq, min_cost); + + for (EQ_Iterator e(c->EQs()); e; e++) + if ((*e).has_wildcards() && (*e).get_coef(v) != 0) { + bool is_assignment = true; + for (Constr_Vars_Iter cvi(*e, true); cvi; cvi++) { + std::pair<bool, GEQ_Handle> result = find_floor_definition(R, v); + if (!result.first) { + is_assignment = false; + break; + } + } + if (!is_assignment) + continue; + + int cost = 0; + + if (abs((*e).get_coef(v)) != 1) + cost += 4; // divide cost + + int num_var = 0; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + if (cvi.curr_var() != v) { + num_var++; + if (abs(cvi.curr_coef()) != 1) + cost += 2; // multiply cost + if (cvi.curr_var()->kind() == Wildcard_Var) + cost += 10; // floor operation cost + else if (cvi.curr_var()->kind() == Global_Var && cvi.curr_var()->get_global_var()->arity() > 0) + cost += 20; // function cost + else if (cvi.curr_var()->kind() == Input_Var && + assigned_on_the_fly.size() >= cvi.curr_var()->get_position() && + assigned_on_the_fly[cvi.curr_var()->get_position()-1].first != NULL) + cost += assigned_on_the_fly[cvi.curr_var()->get_position()-1].second; // substitution cost on record + } + if ((*e).get_const() != 0) + num_var++; + if (num_var > 1) + cost += num_var - 1; // addition cost + + if (cost < min_cost) { + min_cost = cost; + eq = *e; + } + } + + return std::make_pair(eq, min_cost); +} + + +// +// find floor definition for variable v, e.g. m-c <= 4v <= m, (c is +// constant and 0 <= c < 4). this translates to v = floor(m, 4) and +// return 4v<=m in this case. All wildcards in such inequality are +// also floor defined. +// +std::pair<bool, GEQ_Handle> find_floor_definition(const Relation &R, Variable_ID v, std::set<Variable_ID> excluded_floor_vars) { + Conjunct *c = const_cast<Relation &>(R).single_conjunct(); + + excluded_floor_vars.insert(v); + for (GEQ_Iterator e = c->GEQs(); e; e++) { + coef_t a = (*e).get_coef(v); + if (a >= -1) + continue; + a = -a; + + bool interested = true; + for (std::set<Variable_ID>::const_iterator i = excluded_floor_vars.begin(); i != excluded_floor_vars.end(); i++) + if ((*i) != v && (*e).get_coef(*i) != 0) { + interested = false; + break; + } + if (!interested) + continue; + + // check if any wildcard is floor defined + bool has_undefined_wc = false; + for (Constr_Vars_Iter cvi(*e, true); cvi; cvi++) + if (excluded_floor_vars.find(cvi.curr_var()) == excluded_floor_vars.end()) { + std::pair<bool, GEQ_Handle> result = find_floor_definition(R, cvi.curr_var(), excluded_floor_vars); + if (!result.first) { + has_undefined_wc = true; + break; + } + } + if (has_undefined_wc) + continue; + + // find the matching upper bound for floor definition + for (GEQ_Iterator e2 = c->GEQs(); e2; e2++) + if ((*e2).get_coef(v) == a && (*e).get_const() + (*e2).get_const() < a) { + bool match = true; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + if ((*e2).get_coef(cvi.curr_var()) != -cvi.curr_coef()) { + match = false; + break; + } + if (!match) + continue; + for (Constr_Vars_Iter cvi(*e2); cvi; cvi++) + if ((*e).get_coef(cvi.curr_var()) != -cvi.curr_coef()) { + match = false; + break; + } + if (match) + return std::make_pair(true, *e); + } + } + + return std::make_pair(false, GEQ_Handle()); +} + +// +// find the stride involving the specified variable, the stride +// equality can have other wildcards as long as they are defined as +// floor variables. +// +std::pair<EQ_Handle, Variable_ID> find_simplest_stride(const Relation &R, Variable_ID v) { + int best_num_var = INT_MAX; + coef_t best_coef; + EQ_Handle best_eq; + Variable_ID best_stride_wc; + for (EQ_Iterator e(const_cast<Relation &>(R).single_conjunct()->EQs()); e; e++) + if ((*e).has_wildcards() && (*e).get_coef(v) != 0) { + bool is_stride = true; + bool found_free = false; + int num_var = 0; + int num_floor = 0; + Variable_ID stride_wc; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) { + switch (cvi.curr_var()->kind()) { + case Wildcard_Var: { + bool is_free = true; + for (GEQ_Iterator e2(const_cast<Relation &>(R).single_conjunct()->GEQs()); e2; e2++) + if ((*e2).get_coef(cvi.curr_var()) != 0) { + is_free = false; + break; + } + if (is_free) { + if (found_free) + is_stride = false; + else { + found_free = true; + stride_wc = cvi.curr_var(); + } + } + else { + std::pair<bool, GEQ_Handle> result = find_floor_definition(R, cvi.curr_var()); + if (result.first) + num_floor++; + else + is_stride = false; + } + break; + } + case Input_Var: + num_var++; + break; + default: + ; + } + + if (!is_stride) + break; + } + + if (is_stride) { + coef_t coef = abs((*e).get_coef(v)); + if (best_num_var == INT_MAX || coef < best_coef || + (coef == best_coef && num_var < best_num_var)) { + best_coef = coef; + best_num_var = num_var; + best_eq = *e; + best_stride_wc = stride_wc; + } + } + } + + if (best_num_var != INT_MAX) + return std::make_pair(best_eq, best_stride_wc); + else + return std::make_pair(EQ_Handle(), static_cast<Variable_ID>(NULL)); +} + +// +// convert relation to if-condition +// +CG_outputRepr *output_guard(CG_outputBuilder *ocg, const Relation &R, const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + assert(R.n_out()==0); + + CG_outputRepr *result = NULL; + Conjunct *c = const_cast<Relation &>(R).single_conjunct(); + + // e.g. 4i=5*j + for (EQ_Iterator e = c->EQs(); e; e++) + if (!(*e).has_wildcards()) { + CG_outputRepr *lhs = NULL; + CG_outputRepr *rhs = NULL; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) { + CG_outputRepr *v = output_ident(ocg, R, cvi.curr_var(), assigned_on_the_fly); + coef_t coef = cvi.curr_coef(); + if (coef > 0) { + if (coef == 1) + lhs = ocg->CreatePlus(lhs, v); + else + lhs = ocg->CreatePlus(lhs, ocg->CreateTimes(ocg->CreateInt(coef), v)); + } + else { // coef < 0 + if (coef == -1) + rhs = ocg->CreatePlus(rhs, v); + else + rhs = ocg->CreatePlus(rhs, ocg->CreateTimes(ocg->CreateInt(-coef), v)); + } + } + coef_t c = (*e).get_const(); + + CG_outputRepr *term; + if (lhs == NULL) + term = ocg->CreateEQ(rhs, ocg->CreateInt(c)); + else { + if (c > 0) + rhs = ocg->CreateMinus(rhs, ocg->CreateInt(c)); + else if (c < 0) + rhs = ocg->CreatePlus(rhs, ocg->CreateInt(-c)); + else if (rhs == NULL) + rhs = ocg->CreateInt(0); + term = ocg->CreateEQ(lhs, rhs); + } + result = ocg->CreateAnd(result, term); + } + + // e.g. i>5j + for (GEQ_Iterator e = c->GEQs(); e; e++) + if (!(*e).has_wildcards()) { + CG_outputRepr *lhs = NULL; + CG_outputRepr *rhs = NULL; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) { + CG_outputRepr *v = output_ident(ocg, R, cvi.curr_var(), assigned_on_the_fly); + coef_t coef = cvi.curr_coef(); + if (coef > 0) { + if (coef == 1) + lhs = ocg->CreatePlus(lhs, v); + else + lhs = ocg->CreatePlus(lhs, ocg->CreateTimes(ocg->CreateInt(coef), v)); + } + else { // coef < 0 + if (coef == -1) + rhs = ocg->CreatePlus(rhs, v); + else + rhs = ocg->CreatePlus(rhs, ocg->CreateTimes(ocg->CreateInt(-coef), v)); + } + } + coef_t c = (*e).get_const(); + + CG_outputRepr *term; + if (lhs == NULL) + term = ocg->CreateLE(rhs, ocg->CreateInt(c)); + else { + if (c > 0) + rhs = ocg->CreateMinus(rhs, ocg->CreateInt(c)); + else if (c < 0) + rhs = ocg->CreatePlus(rhs, ocg->CreateInt(-c)); + else if (rhs == NULL) + rhs = ocg->CreateInt(0); + term = ocg->CreateGE(lhs, rhs); + } + result = ocg->CreateAnd(result, term); + } + + // e.g. 4i=5j+4alpha + for (EQ_Iterator e = c->EQs(); e; e++) + if ((*e).has_wildcards()) { + Variable_ID wc; + int num_wildcard = 0; + int num_positive = 0; + int num_negative = 0; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) { + if (cvi.curr_var()->kind() == Wildcard_Var) { + num_wildcard++; + wc = cvi.curr_var(); + } + else { + if (cvi.curr_coef() > 0) + num_positive++; + else + num_negative++; + } + } + + if (num_wildcard > 1) { + delete result; + throw codegen_error("Can't generate equality condition with multiple wildcards"); + } + int sign = (num_positive>=num_negative)?1:-1; + + CG_outputRepr *lhs = NULL; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) { + if (cvi.curr_var() != wc) { + CG_outputRepr *v = output_ident(ocg, R, cvi.curr_var(), assigned_on_the_fly); + coef_t coef = cvi.curr_coef(); + if (sign == 1) { + if (coef > 0) { + if (coef == 1) + lhs = ocg->CreatePlus(lhs, v); + else + lhs = ocg->CreatePlus(lhs, ocg->CreateTimes(ocg->CreateInt(coef), v)); + } + else { // coef < 0 + if (coef == -1) + lhs = ocg->CreateMinus(lhs, v); + else + lhs = ocg->CreateMinus(lhs, ocg->CreateTimes(ocg->CreateInt(-coef), v)); + } + } + else { + if (coef > 0) { + if (coef == 1) + lhs = ocg->CreateMinus(lhs, v); + else + lhs = ocg->CreateMinus(lhs, ocg->CreateTimes(ocg->CreateInt(coef), v)); + } + else { // coef < 0 + if (coef == -1) + lhs = ocg->CreatePlus(lhs, v); + else + lhs = ocg->CreatePlus(lhs, ocg->CreateTimes(ocg->CreateInt(-coef), v)); + } + } + } + } + coef_t c = (*e).get_const(); + if (sign == 1) { + if (c > 0) + lhs = ocg->CreatePlus(lhs, ocg->CreateInt(c)); + else if (c < 0) + lhs = ocg->CreateMinus(lhs, ocg->CreateInt(-c)); + } + else { + if (c > 0) + lhs = ocg->CreateMinus(lhs, ocg->CreateInt(c)); + else if (c < 0) + lhs = ocg->CreatePlus(lhs, ocg->CreateInt(-c)); + } + + lhs = ocg->CreateIntegerMod(lhs, ocg->CreateInt(abs((*e).get_coef(wc)))); + CG_outputRepr *term = ocg->CreateEQ(lhs, ocg->CreateInt(0)); + result = ocg->CreateAnd(result, term); + } + + // e.g. 4alpha<=i<=5alpha + for (GEQ_Iterator e = c->GEQs(); e; e++) + if ((*e).has_wildcards()) { + Variable_ID wc; + int num_wildcard = 0; + for (Constr_Vars_Iter cvi(*e, true); cvi; cvi++) + if (num_wildcard == 0) { + wc = cvi.curr_var(); + num_wildcard = 1; + } + else + num_wildcard++; + + if (num_wildcard > 1) { + delete result; + // e.g. c*alpha - x >= 0 (*) + // -d*alpha + y >= 0 (*) + // e1*alpha + f1*beta + g1 >= 0 (**) + // e2*alpha + f2*beta + g2 >= 0 (**) + // ... + // TODO: should generate a testing loop for alpha using its lower and + // upper bounds from (*) constraints and do the same if-condition test + // for beta from each pair of opposite (**) constraints as above, + // and exit the loop when if-condition satisfied. + throw codegen_error("Can't generate multiple wildcard GEQ guards right now"); + } + + coef_t c = (*e).get_coef(wc); + int sign = (c>0)?1:-1; + + GEQ_Iterator e2 = e; + e2++; + for ( ; e2; e2++) { + coef_t c2 = (*e2).get_coef(wc); + if (c2 == 0) + continue; + int sign2 = (c2>0)?1:-1; + if (sign != -sign2) + continue; + int num_wildcard2 = 0; + for (Constr_Vars_Iter cvi(*e2, true); cvi; cvi++) + num_wildcard2++; + if (num_wildcard2 > 1) + continue; + + GEQ_Handle lb, ub; + if (sign == 1) { + lb = (*e); + ub = (*e2); + } + else { + lb = (*e2); + ub = (*e); + } + + CG_outputRepr *lhs = NULL; + for (Constr_Vars_Iter cvi(lb); cvi; cvi++) + if (cvi.curr_var() != wc) { + CG_outputRepr *v = output_ident(ocg, R, cvi.curr_var(), assigned_on_the_fly); + coef_t coef = cvi.curr_coef(); + if (coef > 0) { + if (coef == 1) + lhs = ocg->CreateMinus(lhs, v); + else + lhs = ocg->CreateMinus(lhs, ocg->CreateTimes(ocg->CreateInt(coef), v)); + } + else { // coef < 0 + if (coef == -1) + lhs = ocg->CreatePlus(lhs, v); + else + lhs = ocg->CreatePlus(lhs, ocg->CreateTimes(ocg->CreateInt(-coef), v)); + } + } + coef_t c = lb.get_const(); + if (c > 0) + lhs = ocg->CreateMinus(lhs, ocg->CreateInt(c)); + else if (c < 0) + lhs = ocg->CreatePlus(lhs, ocg->CreateInt(-c)); + + CG_outputRepr *rhs = NULL; + for (Constr_Vars_Iter cvi(ub); cvi; cvi++) + if (cvi.curr_var() != wc) { + CG_outputRepr *v = output_ident(ocg, R, cvi.curr_var(), assigned_on_the_fly); + coef_t coef = cvi.curr_coef(); + if (coef > 0) { + if (coef == 1) + rhs = ocg->CreatePlus(rhs, v); + else + rhs = ocg->CreatePlus(rhs, ocg->CreateTimes(ocg->CreateInt(coef), v)); + } + else { // coef < 0 + if (coef == -1) + rhs = ocg->CreateMinus(rhs, v); + else + rhs = ocg->CreateMinus(rhs, ocg->CreateTimes(ocg->CreateInt(-coef), v)); + } + } + c = ub.get_const(); + if (c > 0) + rhs = ocg->CreatePlus(rhs, ocg->CreateInt(c)); + else if (c < 0) + rhs = ocg->CreateMinus(rhs, ocg->CreateInt(-c)); + + rhs = ocg->CreateIntegerFloor(rhs, ocg->CreateInt(-ub.get_coef(wc))); + rhs = ocg->CreateTimes(ocg->CreateInt(lb.get_coef(wc)), rhs); + CG_outputRepr *term = ocg->CreateLE(lhs, rhs); + result = ocg->CreateAnd(result, term); + } + } + + return result; +} + + +// +// return NULL if 0 +// +CG_outputRepr *output_inequality_repr(CG_outputBuilder *ocg, const GEQ_Handle &inequality, Variable_ID v, const Relation &R, const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly, std::set<Variable_ID> excluded_floor_vars) { + const_cast<Relation &>(R).setup_names(); // hack + + coef_t a = inequality.get_coef(v); + assert(a != 0); + excluded_floor_vars.insert(v); + + CG_outputRepr *repr = NULL; + for (Constr_Vars_Iter cvi(inequality); cvi; cvi++) + if (cvi.curr_var() != v) { + CG_outputRepr *t; + if (cvi.curr_var()->kind() == Wildcard_Var) { + std::pair<bool, GEQ_Handle> result = find_floor_definition(R, cvi.curr_var(), excluded_floor_vars); + if (!result.first) { + delete repr; + throw codegen_error("Can't generate bound expression with wildcard not involved in floor definition"); + } + try { + t = output_inequality_repr(ocg, result.second, cvi.curr_var(), R, assigned_on_the_fly, excluded_floor_vars); + } + catch (const std::exception &e) { + delete repr; + throw e; + } + } + else + t = output_ident(ocg, R, cvi.curr_var(), assigned_on_the_fly); + + coef_t coef = cvi.curr_coef(); + if (a > 0) { + if (coef > 0) { + if (coef == 1) + repr = ocg->CreateMinus(repr, t); + else + repr = ocg->CreateMinus(repr, ocg->CreateTimes(ocg->CreateInt(coef), t)); + } + else { + if (coef == -1) + repr = ocg->CreatePlus(repr, t); + else + repr = ocg->CreatePlus(repr, ocg->CreateTimes(ocg->CreateInt(-coef), t)); + } + } + else { + if (coef > 0) { + if (coef == 1) + repr = ocg->CreatePlus(repr, t); + else + repr = ocg->CreatePlus(repr, ocg->CreateTimes(ocg->CreateInt(coef), t)); + } + else { + if (coef == -1) + repr = ocg->CreateMinus(repr, t); + else + repr = ocg->CreateMinus(repr, ocg->CreateTimes(ocg->CreateInt(-coef), t)); + } + } + } + coef_t c = inequality.get_const(); + if (c > 0) { + if (a > 0) + repr = ocg->CreateMinus(repr, ocg->CreateInt(c)); + else + repr = ocg->CreatePlus(repr, ocg->CreateInt(c)); + } + else if (c < 0) { + if (a > 0) + repr = ocg->CreatePlus(repr, ocg->CreateInt(-c)); + else + repr = ocg->CreateMinus(repr, ocg->CreateInt(-c)); + } + + if (abs(a) == 1) + return repr; + else if (a > 0) + return ocg->CreateIntegerCeil(repr, ocg->CreateInt(a)); + else // a < 0 + return ocg->CreateIntegerFloor(repr, ocg->CreateInt(-a)); +} + + +// +// nothing special, just an alias +// +CG_outputRepr *output_upper_bound_repr(CG_outputBuilder *ocg, const GEQ_Handle &inequality, Variable_ID v, const Relation &R, const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + assert(inequality.get_coef(v) < 0); + CG_outputRepr* zero_; + + zero_ = output_inequality_repr(ocg, inequality, v, R, assigned_on_the_fly); + + if(!zero_) + zero_ = ocg->CreateInt(0); + + return zero_; + +} + + +// +// output lower bound with respect to lattice +// +CG_outputRepr *output_lower_bound_repr(CG_outputBuilder *ocg, const GEQ_Handle &inequality, Variable_ID v, const EQ_Handle &stride_eq, Variable_ID wc, const Relation &R, const Relation &known, const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + assert(inequality.get_coef(v) > 0); + CG_outputRepr* zero_; + if (wc == NULL || bound_must_hit_stride(inequality, v, stride_eq, wc, R, known)){ + zero_ = output_inequality_repr(ocg, inequality, v, R, assigned_on_the_fly); + if(!zero_) + zero_ = ocg->CreateInt(0); + + return zero_; + } + CG_outputRepr *strideBoundRepr = NULL; + int sign = (stride_eq.get_coef(v)>0)?1:-1; + for (Constr_Vars_Iter cvi(stride_eq); cvi; cvi++) { + Variable_ID v2 = cvi.curr_var(); + if (v2 == v || v2 == wc) + continue; + + CG_outputRepr *v_repr; + if (v2->kind() == Input_Var || v2->kind() == Global_Var) + v_repr = output_ident(ocg, R, v2, assigned_on_the_fly); + else if (v2->kind() == Wildcard_Var) { + std::pair<bool, GEQ_Handle> result = find_floor_definition(R, v2); + assert(result.first); + v_repr = output_inequality_repr(ocg, result.second, v2, R, assigned_on_the_fly); + } + + coef_t coef = cvi.curr_coef(); + if (sign < 0) { + if (coef > 0) { + if (coef == 1) + strideBoundRepr = ocg->CreatePlus(strideBoundRepr, v_repr); + else + strideBoundRepr = ocg->CreatePlus(strideBoundRepr, ocg->CreateTimes(ocg->CreateInt(coef), v_repr)); + } + else { // coef < 0 + if (coef == -1) + strideBoundRepr = ocg->CreateMinus(strideBoundRepr, v_repr); + else + strideBoundRepr = ocg->CreateMinus(strideBoundRepr, ocg->CreateTimes(ocg->CreateInt(-coef), v_repr)); + } + } + else { + if (coef > 0) { + if (coef == 1) + strideBoundRepr = ocg->CreateMinus(strideBoundRepr, v_repr); + else + strideBoundRepr = ocg->CreateMinus(strideBoundRepr, ocg->CreateTimes(ocg->CreateInt(coef), v_repr)); + } + else { // coef < 0 + if (coef == -1) + strideBoundRepr = ocg->CreatePlus(strideBoundRepr, v_repr); + else + strideBoundRepr = ocg->CreatePlus(strideBoundRepr, ocg->CreateTimes(ocg->CreateInt(-coef), v_repr)); + } + } + } + coef_t c = stride_eq.get_const(); + if (c > 0) { + if (sign < 0) + strideBoundRepr = ocg->CreatePlus(strideBoundRepr, ocg->CreateInt(c)); + else + strideBoundRepr = ocg->CreateMinus(strideBoundRepr, ocg->CreateInt(c)); + } + else if (c < 0) { + if (sign < 0) + strideBoundRepr = ocg->CreateMinus(strideBoundRepr, ocg->CreateInt(-c)); + else + strideBoundRepr = ocg->CreatePlus(strideBoundRepr, ocg->CreateInt(-c)); + } + + CG_outputRepr *repr = output_inequality_repr(ocg, inequality, v, R, assigned_on_the_fly); + CG_outputRepr *repr2 = ocg->CreateCopy(repr); + repr = ocg->CreatePlus(repr2, ocg->CreateIntegerMod(ocg->CreateMinus(strideBoundRepr, repr), ocg->CreateInt(abs(stride_eq.get_coef(wc))))); + + return repr; +} + + +// +// return loop control structure only +// +CG_outputRepr *output_loop(CG_outputBuilder *ocg, const Relation &R, int level, const Relation &known, const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + std::pair<EQ_Handle, Variable_ID> result = find_simplest_stride(R, const_cast<Relation &>(R).set_var(level)); + if (result.second != NULL) + assert(abs(result.first.get_coef(const_cast<Relation &>(R).set_var(level))) == 1); + + std::vector<CG_outputRepr *> lbList, ubList; + try { + + coef_t const_lb = negInfinity, const_ub = posInfinity; + + for (GEQ_Iterator e(const_cast<Relation &>(R).single_conjunct()->GEQs()); e; e++) { + coef_t coef = (*e).get_coef(const_cast<Relation &>(R).set_var(level)); + + if (coef > 0) { + CG_outputRepr *repr = output_lower_bound_repr(ocg, *e, const_cast<Relation &>(R).set_var(level), result.first, result.second, R, known, assigned_on_the_fly); + if (repr == NULL) + repr = ocg->CreateInt(0); + lbList.push_back(repr); + + if ((*e).is_const(const_cast<Relation &>(R).set_var(level))){ + if(!result.second) { + + //no variables but v in constr + coef_t L,m; + L = -((*e).get_const()); + + m = (*e).get_coef(const_cast<Relation &>(R).set_var(level)); + coef_t sb = (int) (ceil(((float) L) /m)); + set_max(const_lb, sb); + } + else{ + + coef_t L,m,s,c; + L = -((*e).get_const()); + m = (*e).get_coef(const_cast<Relation &>(R).set_var(level)); + s = abs(result.first.get_coef(result.second)); + c = result.first.get_const(); + coef_t sb = (s * (int) (ceil( (float) (L - (c * m)) /(s*m))))+ c; + set_max(const_lb, sb); + + } + } + + } + else if (coef < 0) { + CG_outputRepr *repr = output_upper_bound_repr(ocg, *e, const_cast<Relation &>(R).set_var(level), R, assigned_on_the_fly); + if (repr == NULL) + repr = ocg->CreateInt(0); + ubList.push_back(repr); + + if ((*e).is_const(const_cast<Relation &>(R).set_var(level))) { + // no variables but v in constraint + set_min(const_ub,-(*e).get_const()/(*e).get_coef(const_cast<Relation &>(R).set_var(level))); + } + + } + } + + if(fillInBounds && lbList.size() == 1 && const_lb != negInfinity) + lowerBoundForLevel = const_lb; + + if(fillInBounds && const_ub != posInfinity) + upperBoundForLevel = const_ub; + if (lbList.size() == 0) + throw codegen_error("missing lower bound at loop level " + to_string(level)); + if (ubList.size() == 0) + throw codegen_error("missing upper bound at loop level " + to_string(level)); + } + catch (const std::exception &e) { + for (int i = 0; i < lbList.size(); i++) + delete lbList[i]; + for (int i = 0; i < ubList.size(); i++) + delete ubList[i]; + throw e; + } + + CG_outputRepr *lbRepr = NULL; + if (lbList.size() > 1) + lbRepr = ocg->CreateInvoke("max", lbList); + else // (lbList.size() == 1) + lbRepr = lbList[0]; + + CG_outputRepr *ubRepr = NULL; + if (ubList.size() > 1) + ubRepr = ocg->CreateInvoke("min", ubList); + else // (ubList.size() == 1) + ubRepr = ubList[0]; + + CG_outputRepr *stRepr; + if (result.second == NULL) + stRepr = ocg->CreateInt(1); + else + stRepr = ocg->CreateInt(abs(result.first.get_coef(result.second))); + CG_outputRepr *indexRepr = output_ident(ocg, R, const_cast<Relation &>(R).set_var(level), assigned_on_the_fly); + return ocg->CreateInductive(indexRepr, lbRepr, ubRepr, stRepr); +} + + +// +// parameter f_root is inside f_exists, not the other way around. +// return replicated variable in new relation, with all cascaded floor definitions +// using wildcards defined in the same way as in the original relation. +// +Variable_ID replicate_floor_definition(const Relation &R, const Variable_ID floor_var, + Relation &r, F_Exists *f_exists, F_And *f_root, + std::map<Variable_ID, Variable_ID> &exists_mapping) { + assert(R.n_out() == 0 && r.n_out() == 0 && R.n_inp() == r.n_inp()); + + std::set<Variable_ID> excluded_floor_vars; + std::stack<Variable_ID> to_fill; + to_fill.push(floor_var); + + while (!to_fill.empty()) { + Variable_ID v = to_fill.top(); + to_fill.pop(); + if (excluded_floor_vars.find(v) != excluded_floor_vars.end()) + continue; + + std::pair<bool, GEQ_Handle> result = find_floor_definition(R, v, excluded_floor_vars); + assert(result.first); + excluded_floor_vars.insert(v); + + GEQ_Handle h1 = f_root->add_GEQ(); + GEQ_Handle h2 = f_root->add_GEQ(); + for (Constr_Vars_Iter cvi(result.second); cvi; cvi++) { + Variable_ID v2 = cvi.curr_var(); + switch (v2->kind()) { + case Input_Var: { + int pos = v2->get_position(); + h1.update_coef(r.input_var(pos), cvi.curr_coef()); + h2.update_coef(r.input_var(pos), -cvi.curr_coef()); + break; + } + case Wildcard_Var: { + std::map<Variable_ID, Variable_ID>::iterator p = exists_mapping.find(v2); + Variable_ID v3; + if (p == exists_mapping.end()) { + v3 = f_exists->declare(); + exists_mapping[v2] = v3; + } + else + v3 = p->second; + h1.update_coef(v3, cvi.curr_coef()); + h2.update_coef(v3, -cvi.curr_coef()); + if (v2 != v) + to_fill.push(v2); + break; + } + case Global_Var: { + Global_Var_ID g = v2->get_global_var(); + Variable_ID v3; + if (g->arity() == 0) + v3 = r.get_local(g); + else + v3 = r.get_local(g, v2->function_of()); + h1.update_coef(v3, cvi.curr_coef()); + h2.update_coef(v3, -cvi.curr_coef()); + break; + } + default: + assert(false); + } + } + h1.update_const(result.second.get_const()); + h2.update_const(-result.second.get_const()-result.second.get_coef(v)-1); + } + + if (floor_var->kind() == Input_Var) + return r.input_var(floor_var->get_position()); + else if (floor_var->kind() == Wildcard_Var) + return exists_mapping[floor_var]; + else + assert(false); +} + + +// +// pick one guard condition from relation. it can involve multiple +// constraints when involving wildcards, as long as its complement +// is a single conjunct. +// +Relation pick_one_guard(const Relation &R, int level) { + assert(R.n_out()==0); + + Relation r = Relation::True(R.n_set()); + + for (GEQ_Iterator e(const_cast<Relation &>(R).single_conjunct()->GEQs()); e; e++) + if (!(*e).has_wildcards()) { + r.and_with_GEQ(*e); + r.simplify(); + r.copy_names(R); + r.setup_names(); + return r; + } + + for (EQ_Iterator e(const_cast<Relation &>(R).single_conjunct()->EQs()); e; e++) + if (!(*e).has_wildcards()) { + r.and_with_GEQ(*e); + r.simplify(); + r.copy_names(R); + r.setup_names(); + return r; + } + + for (EQ_Iterator e(const_cast<Relation &>(R).single_conjunct()->EQs()); e; e++) + if ((*e).has_wildcards()) { + int num_wildcard = 0; + int max_level = 0; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + switch (cvi.curr_var()->kind()) { + case Wildcard_Var: + num_wildcard++; + break; + case Input_Var: + if (cvi.curr_var()->get_position() > max_level) + max_level = cvi.curr_var()->get_position(); + break; + default: + ; + } + + if (num_wildcard == 1 && max_level != level-1) { + r.and_with_EQ(*e); + r.simplify(); + r.copy_names(R); + r.setup_names(); + return r; + } + } + + for (GEQ_Iterator e(const_cast<Relation &>(R).single_conjunct()->GEQs()); e; e++) + if ((*e).has_wildcards()) { + int num_wildcard = 0; + int max_level = 0; + bool direction; + Variable_ID wc; + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) + switch (cvi.curr_var()->kind()) { + case Wildcard_Var: + num_wildcard++; + wc = cvi.curr_var(); + direction = cvi.curr_coef()>0?true:false; + break; + case Input_Var: + if (cvi.curr_var()->get_position() > max_level) + max_level = cvi.curr_var()->get_position(); + break; + default: + ; + } + + if (num_wildcard == 1 && max_level != level-1) { + // find the pairing inequality + GEQ_Iterator e2 = e; + e2++; + for ( ; e2; e2++) { + int num_wildcard2 = 0; + int max_level2 = 0; + bool direction2; + Variable_ID wc2; + for (Constr_Vars_Iter cvi(*e2); cvi; cvi++) + switch (cvi.curr_var()->kind()) { + case Wildcard_Var: + num_wildcard2++; + wc2 = cvi.curr_var(); + direction2 = cvi.curr_coef()>0?true:false; + break; + case Input_Var: + if (cvi.curr_var()->get_position() > max_level2) + max_level2 = cvi.curr_var()->get_position(); + break; + default: + ; + } + + if (num_wildcard2 == 1 && max_level2 != level-1 && wc2 == wc && direction2 == not direction) { + F_Exists *f_exists = r.and_with_and()->add_exists(); + Variable_ID wc3 = f_exists->declare(); + F_And *f_root = f_exists->add_and(); + GEQ_Handle h = f_root->add_GEQ(); + for (Constr_Vars_Iter cvi(*e); cvi; cvi++) { + switch (cvi.curr_var()->kind()) { + case Wildcard_Var: + h.update_coef(wc3, cvi.curr_coef()); + break; + case Input_Var: + h.update_coef(r.input_var(cvi.curr_var()->get_position()), cvi.curr_coef()); + break; + case Global_Var: { + Global_Var_ID g = cvi.curr_var()->get_global_var(); + Variable_ID v; + if (g->arity() == 0) + v = r.get_local(g); + else + v = r.get_local(g, cvi.curr_var()->function_of()); + h.update_coef(v, cvi.curr_coef()); + break; + } + default: + assert(false); + } + } + h.update_const((*e).get_const()); + + h = f_root->add_GEQ(); + for (Constr_Vars_Iter cvi(*e2); cvi; cvi++) { + switch (cvi.curr_var()->kind()) { + case Wildcard_Var: + h.update_coef(wc3, cvi.curr_coef()); + break; + case Input_Var: + h.update_coef(r.input_var(cvi.curr_var()->get_position()), cvi.curr_coef()); + break; + case Global_Var: { + Global_Var_ID g = cvi.curr_var()->get_global_var(); + Variable_ID v; + if (g->arity() == 0) + v = r.get_local(g); + else + v = r.get_local(g, cvi.curr_var()->function_of()); + h.update_coef(v, cvi.curr_coef()); + break; + } + default: + assert(false); + } + } + h.update_const((*e2).get_const()); + + r.simplify(); + r.copy_names(R); + r.setup_names(); + return r; + } + } + } + } +} + + +// +// heavy lifting for code output for one leaf node +// +CG_outputRepr *leaf_print_repr(BoolSet<> active, const std::map<int, Relation> &guards, + CG_outputRepr *guard_repr, const Relation &known, + int indent, CG_outputBuilder *ocg, const std::vector<int> &remap, + const std::vector<Relation> &xforms, const std::vector<CG_outputRepr *> &stmts, + const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + if (active.num_elem() == 0) + return NULL; + + CG_outputRepr *stmt_list = NULL; + for (BoolSet<>::iterator i = active.begin(); i != active.end(); i++) { + std::map<int, Relation>::const_iterator j = guards.find(*i); + if (j == guards.end() || Must_Be_Subset(copy(known), copy(j->second))) { + Relation mapping = Inverse(copy((xforms[remap[*i]]))); + mapping.simplify(); + mapping.setup_names(); + std::vector<std::string> loop_vars; + for (int k = 1; k <= mapping.n_out(); k++) { + loop_vars.push_back(mapping.output_var(k)->name()); +// std::cout << "CG_Utils:: " << k << ", " << mapping.output_var(k)->name().c_str() << "\n"; + } + std::vector<CG_outputRepr *> sList = output_substitutions(ocg, mapping, assigned_on_the_fly); + stmt_list = ocg->StmtListAppend(stmt_list, ocg->CreateSubstitutedStmt((guard_repr==NULL)?indent:indent+1, stmts[remap[*i]]->clone(), loop_vars, sList)); + active.unset(*i); + } + } + + if (stmt_list != NULL) { + if (active.num_elem() != 0) + stmt_list = ocg->StmtListAppend(stmt_list, leaf_print_repr(active, guards, NULL, known, (guard_repr==NULL)?indent:indent+1, ocg, remap, xforms, stmts, assigned_on_the_fly)); + if (guard_repr == NULL) + return stmt_list; + else + return ocg->CreateIf(indent, guard_repr, stmt_list, NULL); + } + else { + Relation then_cond = find_best_guard(const_cast<std::map<int, Relation> &>(guards)[*(active.begin())], active, guards); + assert(!then_cond.is_obvious_tautology()); + Relation new_then_known = Intersection(copy(known), copy(then_cond)); + new_then_known.simplify(); + Relation else_cond = Complement(copy(then_cond)); + else_cond.simplify(); + Relation new_else_known = Intersection(copy(known), copy(else_cond)); + new_else_known.simplify(); + + BoolSet<> then_active(active.size()), else_active(active.size()), indep_active(active.size()); + std::map<int, Relation> then_guards, else_guards; + for (BoolSet<>::iterator i = active.begin(); i != active.end(); i++) { + Relation &r = const_cast<std::map<int, Relation> &>(guards)[*i]; + if (Must_Be_Subset(copy(r), copy(then_cond))) { + Relation r2 = Gist(copy(r), copy(then_cond), 1); + if (!r2.is_obvious_tautology()) + then_guards[*i] = r2; + then_active.set(*i); + } + else if (Must_Be_Subset(copy(r), copy(else_cond))) { + Relation r2 = Gist(copy(r), copy(else_cond), 1); + if (!r2.is_obvious_tautology()) + else_guards[*i] = r2; + else_active.set(*i); + } + else + indep_active.set(*i); + } + assert(!then_active.empty()); + + CG_outputRepr *new_guard_repr = output_guard(ocg, then_cond, assigned_on_the_fly); + if (else_active.empty() && indep_active.empty()) { + guard_repr = ocg->CreateAnd(guard_repr, new_guard_repr); + return leaf_print_repr(then_active, then_guards, guard_repr, new_then_known, indent, ocg, remap, xforms, stmts, assigned_on_the_fly); + } + else if (else_active.empty() && !indep_active.empty()) { + int new_indent = (guard_repr==NULL)?indent:indent+1; + stmt_list = leaf_print_repr(then_active, then_guards, new_guard_repr, new_then_known, new_indent, ocg, remap, xforms, stmts, assigned_on_the_fly); + stmt_list = ocg->StmtListAppend(stmt_list, leaf_print_repr(indep_active, guards, NULL, known, new_indent, ocg, remap, xforms, stmts, assigned_on_the_fly)); + if (guard_repr == NULL) + return stmt_list; + else + return ocg->CreateIf(indent, guard_repr, stmt_list, NULL); + } + else { // (!else_active.empty()) + int new_indent = (guard_repr==NULL)?indent:indent+1; + CG_outputRepr *then_stmt_list = leaf_print_repr(then_active, then_guards, NULL, new_then_known, new_indent+1, ocg, remap, xforms, stmts, assigned_on_the_fly); + CG_outputRepr *else_stmt_list = leaf_print_repr(else_active, else_guards, NULL, new_else_known, new_indent+1, ocg, remap, xforms, stmts, assigned_on_the_fly); + stmt_list = ocg->CreateIf(new_indent, new_guard_repr, then_stmt_list, else_stmt_list); + if (!indep_active.empty()) + stmt_list = ocg->StmtListAppend(stmt_list, leaf_print_repr(indep_active, guards, NULL, known, new_indent, ocg, remap, xforms, stmts, assigned_on_the_fly)); + if (guard_repr == NULL) + return stmt_list; + else + return ocg->CreateIf(indent, guard_repr, stmt_list, NULL); + } + } +} + + +// +// heavy lifting for code output for one level of loop nodes +// +CG_outputRepr *loop_print_repr(const std::vector<CG_loop *> &loops, int start, int end, + const Relation &guard, CG_outputRepr *guard_repr, + int indent, CG_outputBuilder *ocg, const std::vector<CG_outputRepr *> &stmts, + const std::vector<std::pair<CG_outputRepr *, int> > &assigned_on_the_fly) { + if (start >= end) + return NULL; + + Relation R = Gist(copy(loops[start]->guard_), copy(guard), 1); + if (Must_Be_Subset(Intersection(copy(loops[start]->known_), copy(guard)), copy(R))) { + int new_indent = (guard_repr==NULL)?indent:indent+1; + int i = start+1; + for ( ; i < end; i++) + if (!Gist(copy(loops[i]->guard_), copy(guard), 1).is_obvious_tautology()) + break; + CG_outputRepr *stmt_list = NULL; + for (int j = start; j < i; j++) + stmt_list = ocg->StmtListAppend(stmt_list, loops[j]->printRepr(false, new_indent, ocg, stmts, assigned_on_the_fly)); + stmt_list = ocg->StmtListAppend(stmt_list, loop_print_repr(loops, i, end, guard, NULL, new_indent, ocg, stmts, assigned_on_the_fly)); + if (guard_repr == NULL) + return stmt_list; + else + return ocg->CreateIf(indent, guard_repr, stmt_list, NULL); + } + + Relation then_cond = find_best_guard(R, loops, start, end); + assert(!then_cond.is_obvious_tautology()); + Relation else_cond = Complement(copy(then_cond)); + else_cond.simplify(); + + std::vector<CG_loop *> then_loops, else_loops, indep_loops; + int i = start; + for ( ; i < end; i++) + if (!Must_Be_Subset(copy(loops[i]->guard_), copy(then_cond))) + break; + int j = i; + for ( ; j < end; j++) + if (!Must_Be_Subset(copy(loops[j]->guard_), copy(else_cond))) + break; + assert(i>start); + + CG_outputRepr *new_guard_repr = output_guard(ocg, then_cond, assigned_on_the_fly); + if (j == i && end == j) { + guard_repr = ocg->CreateAnd(guard_repr, new_guard_repr); + Relation new_guard = Intersection(copy(guard), copy(then_cond)); + new_guard.simplify(); + return loop_print_repr(loops, start, end, new_guard, guard_repr, indent, ocg, stmts, assigned_on_the_fly); + } + else if (j == i && end > j) { + int new_indent = (guard_repr==NULL)?indent:indent+1; + Relation new_guard = Intersection(copy(guard), copy(then_cond)); + new_guard.simplify(); + CG_outputRepr *stmt_list = loop_print_repr(loops, start, i, new_guard, new_guard_repr, new_indent, ocg, stmts, assigned_on_the_fly); + stmt_list = ocg->StmtListAppend(stmt_list, loop_print_repr(loops, j, end, guard, NULL, new_indent, ocg, stmts, assigned_on_the_fly)); + if (guard_repr == NULL) + return stmt_list; + else + return ocg->CreateIf(indent, guard_repr, stmt_list, NULL); + } + else { // (j > i) + int new_indent = (guard_repr==NULL)?indent:indent+1; + Relation then_new_guard = Intersection(copy(guard), copy(then_cond)); + then_new_guard.simplify(); + CG_outputRepr *then_stmt_list = loop_print_repr(loops, start, i, then_new_guard, NULL, new_indent+1, ocg, stmts, assigned_on_the_fly); + Relation else_new_guard = Intersection(copy(guard), copy(else_cond)); + else_new_guard.simplify(); + CG_outputRepr *else_stmt_list = loop_print_repr(loops, i, j, else_new_guard, NULL, new_indent+1, ocg, stmts, assigned_on_the_fly); + CG_outputRepr *stmt_list = ocg->CreateIf(new_indent, new_guard_repr, then_stmt_list, else_stmt_list); + stmt_list = ocg->StmtListAppend(stmt_list, loop_print_repr(loops, j, end, guard, NULL, new_indent, ocg, stmts, assigned_on_the_fly)); + if (guard_repr == NULL) + return stmt_list; + else + return ocg->CreateIf(indent, guard_repr, stmt_list, NULL); + } +} + +} diff --git a/omegalib/code_gen/src/code_gen.cc b/omegalib/code_gen/src/code_gen.cc new file mode 100644 index 0000000..168c86b --- /dev/null +++ b/omegalib/code_gen/src/code_gen.cc @@ -0,0 +1,656 @@ +/***************************************************************************** + Copyright (C) 1994-2000 University of Maryland + Copyright (C) 2008 University of Southern California + Copyright (C) 2009-2010 University of Utah + All Rights Reserved. + + Purpose: + Start code generation process here. + + Notes: + + History: + 04/24/96 MMGenerateCode implementation, added by D people. Lei Zhou +*****************************************************************************/ + +#include <omega.h> +#include <omega/Rel_map.h> +#include <basic/Collection.h> +#include <basic/Bag.h> +#include <basic/Map.h> +#include <basic/util.h> +#include <basic/omega_error.h> +#include <math.h> +#include <vector> + +#include <code_gen/CG.h> +#include <code_gen/code_gen.h> +#include <code_gen/CG_outputBuilder.h> +#include <code_gen/CG_outputRepr.h> +#include <code_gen/CG_stringBuilder.h> +#include <code_gen/CG_stringRepr.h> +#include <code_gen/output_repr.h> + +namespace omega { + + +int last_level;// Should not be global, but it is. +SetTuple new_IS; +SetTupleTuple projected_nIS; +Tuple<CG_outputRepr *> statementInfo; +RelTuple transformations; + +//protonu--adding stuff to make Chun's code work with Gabe's +Tuple< Tuple<int> > smtNonSplitLevels; +Tuple< Tuple<std::string> > loopIdxNames;//per stmt +std::vector< std::pair<int, std::string> > syncs; + +//protonu-putting this in for now, not sure what all these do +//This lovely ugly hack allows us to extract hard upper-bounds at +//specific loop levels +int checkLoopLevel; +int stmtForLoopCheck; +int upperBoundForLevel; +int lowerBoundForLevel; +bool fillInBounds; + +//trick to static init checkLoopLevel to 0 +class JunkStaticInit{ public: JunkStaticInit(){ checkLoopLevel=0; fillInBounds=false;} }; +static JunkStaticInit junkInitInstance__; + +//end--protonu. + + +CG_result * gen_recursive(int level, IntTuple &isActive); + + +int code_gen_debug=0; + + +SetTuple filter_function_symbols(SetTuple &sets, bool keep_fs){ + SetTuple new_sets(sets.size()); + for(int i = 1; i <= sets.size(); i++) { + Relation R = sets[i]; + Relation &S = new_sets[i]; + assert(R.is_set()); + + S = Relation(R.n_set()); + S.copy_names(R); + F_Exists *fe = S.add_exists(); + F_Or *fo = fe->add_or(); + for(DNF_Iterator D(R.query_DNF()); D; D++) { + F_And *fa = fo->add_and(); + Variable_ID_Tuple &oldlocals = (*D)->locals(); + Section<Variable_ID> newlocals = fe->declare_tuple(oldlocals.size()); + + /* copy constraints. This is much more difficult than it needs + to be, but add_EQ(Constraint_Handle) doesn't work because it can't + keep track of existentially quantified varaibles across calls. + Sigh. */ + + for(EQ_Iterator e(*D); e; e++) + if((max_fs_arity(*e) > 0) == keep_fs){ + EQ_Handle n = fa->add_EQ(); + for(Constr_Vars_Iter cvi(*e,false);cvi;cvi++) + if((*cvi).var->kind() == Wildcard_Var) + n.update_coef(newlocals[oldlocals.index((*cvi).var)], + (*cvi).coef); + else + if((*cvi).var->kind() == Global_Var) + n.update_coef(S.get_local((*cvi).var->get_global_var(), + (*cvi).var->function_of()), + (*cvi).coef); + else + n.update_coef((*cvi).var,(*cvi).coef); + n.update_const((*e).get_const()); + n.finalize(); + } + + for(GEQ_Iterator g(*D); g; g++) + if((max_fs_arity(*g) > 0) == keep_fs) { + GEQ_Handle n = fa->add_GEQ(); + for(Constr_Vars_Iter cvi(*g,false);cvi;cvi++) + if((*cvi).var->kind() == Wildcard_Var) + n.update_coef(newlocals[oldlocals.index((*cvi).var)], + (*cvi).coef); + else + if((*cvi).var->kind() == Global_Var) + n.update_coef(S.get_local((*cvi).var->get_global_var(), + (*cvi).var->function_of()), + (*cvi).coef); + else + n.update_coef((*cvi).var,(*cvi).coef); + n.update_const((*g).get_const()); + n.finalize(); + } + } + S.finalize(); + } + + return new_sets; +} + + +RelTuple strip_function_symbols(SetTuple &sets) { + return filter_function_symbols(sets,false); +} + +RelTuple extract_function_symbols(SetTuple &sets) { + return filter_function_symbols(sets,true); +} + + +std::string MMGenerateCode(RelTuple &T, SetTuple &old_IS, Relation &known, int effort) { + Tuple<CG_outputRepr *> nameInfo; + for (int stmt = 1; stmt <= T.size(); stmt++) + nameInfo.append(new CG_stringRepr("s" + to_string(stmt))); + + CG_stringBuilder ocg; + CG_stringRepr *sRepr = static_cast<CG_stringRepr *>(MMGenerateCode(&ocg, T, old_IS, nameInfo, known, effort)); + + for (int i = 1; i <= nameInfo.size(); i++) + delete nameInfo[i]; + if (sRepr != NULL) + return GetString(sRepr); + else + return std::string(); +} + + +//***************************************************************************** +// MMGenerateCode implementation, added by D people. Lei Zhou, Apr. 24, 96 +//***************************************************************************** +CG_outputRepr* MMGenerateCode(CG_outputBuilder* ocg, RelTuple &T, SetTuple &old_IS, const Tuple<CG_outputRepr *> &stmt_content, Relation &known, int effort) { + int stmts = T.size(); + if (stmts == 0) + return ocg->CreateComment(1, "No statements found!"); + if (!known.is_null()) + known.simplify(); + + // prepare iteration spaces by splitting disjoint conjunctions + int maxStmt = 1; + last_level = 0; + for (int stmt = 1; stmt <= stmts; stmt++) { + int old_dim = T[stmt].n_out(); + if (old_dim > last_level) + last_level = old_dim; + + for (int i = 1; i <= old_IS[stmt].n_set(); i++) + T[stmt].name_input_var(i, old_IS[stmt].set_var(i)->name()); + for (int i = 1; i <= old_dim; i++) + T[stmt].name_output_var(i, std::string("t")+to_string(i)); + T[stmt].setup_names(); + + Relation R = Range(Restrict_Domain(copy(T[stmt]), copy(old_IS[stmt]))); + R.simplify(); + while(R.is_upper_bound_satisfiable()) { + new_IS.reallocate(maxStmt); + transformations.reallocate(maxStmt); + statementInfo.reallocate(maxStmt); + DNF *dnf = R.query_DNF(); + DNF_Iterator c(dnf); + Relation R2 = Relation(R, *c); + R2.simplify(); + if (R2.is_inexact()) + throw codegen_error("unknown constraint in loop bounds"); + if (known.is_null()) { + new_IS[maxStmt] = R2; + transformations[maxStmt] = T[stmt]; + statementInfo[maxStmt] = stmt_content[stmt]; + maxStmt++; + } + else { + Relation R2_extended = copy(R2); + Relation known_extended = copy(known); + if (R2.n_set() > known.n_set()) + known_extended = Extend_Set(known_extended, R2.n_set()-known.n_set()); + else if (R2.n_set() < known.n_set()) + R2_extended = Extend_Set(R2_extended, known.n_set()-R2.n_set()); + if (Intersection(R2_extended, known_extended).is_upper_bound_satisfiable()) { + new_IS[maxStmt] = R2; + transformations[maxStmt] = T[stmt]; + statementInfo[maxStmt] = stmt_content[stmt]; + maxStmt++; + } + } + c.next(); + if (!c.live()) + break; + if(code_gen_debug) { + fprintf(DebugFile, "splitting iteration space for disjoint form\n"); + fprintf(DebugFile, "Original iteration space: \n"); + R.print_with_subs(DebugFile); + fprintf(DebugFile, "First conjunct: \n"); + R2.print_with_subs(DebugFile); + } + Relation remainder(R, *c); + c.next(); + while (c.live()) { + remainder = Union(remainder, Relation(R, *c)); + c.next(); + } + R = Difference(remainder, copy(R2)); + R.simplify(); + if(code_gen_debug) { + fprintf(DebugFile, "Remaining iteration space: \n"); + R.print_with_subs(DebugFile); + } + } + } + + // reset number of statements + stmts = maxStmt-1; + if(stmts == 0) + return ocg->CreateComment(1, "No points in any of the iteration spaces!"); + + // entend iteration spaces to maximum dimension + for (int stmt = 1; stmt <= stmts; stmt++) { + int old_dim = new_IS[stmt].n_set(); + if (old_dim < last_level) { + new_IS[stmt] = Extend_Set(new_IS[stmt], last_level-old_dim); + F_And *f_root = new_IS[stmt].and_with_and(); + for (int i = old_dim+1; i <= last_level; i++) { + EQ_Handle h = f_root->add_EQ(); + h.update_coef(new_IS[stmt].set_var(i), 1); + h.update_const(posInfinity); + } + } + } + + // standarize the known condition + if(known.is_null()) { + known = Relation::True(last_level); + } + known = Extend_Set(known, last_level-known.n_set()); + for (int i = 1; i <= last_level; i++) + known.name_set_var(i, std::string("t")+to_string(i)); + known.setup_names(); + + // prepare projected subspaces for each loop level + projected_nIS.clear(); + projected_nIS.reallocate(last_level); + for(int i = 1; i <= last_level; i++ ) { + projected_nIS[i].reallocate(stmts); + } + for (int stmt = 1; stmt <= stmts; stmt++) { + if (last_level > 0) + projected_nIS[last_level][stmt] = new_IS[stmt]; + for (int i = last_level-1; i >= 1; i--) { + projected_nIS[i][stmt] = Project(copy(projected_nIS[i+1][stmt]), i+1, Set_Var); + projected_nIS[i][stmt].simplify(); + } + } + + // recursively generate AST + IntTuple allStmts(stmts); + for(int i = 1; i <= stmts; i++) + allStmts[i] = 1; + CG_result *cg = gen_recursive(1, allStmts); + + // always force finite bounds + cg = cg->recompute(known, known); + cg = cg->force_finite_bounds(); + + // loop overhead removal based on actual nesting depth -- by chun 09/17/2008 + for (int i = 1; i <= min(effort, cg->depth()); i++) + cg = cg->liftOverhead(i); + + // merge adjacent if-conditions -- by chun 10/24/2006 + cg->hoistGuard(); + + // really print out the loop + //CG_outputRepr* sRepr = cg->printRepr(ocg, 1, std::vector<CG_outputRepr *>(last_level, NULL)); + CG_outputRepr* sRepr = cg->printRepr(ocg, 1, std::vector<CG_outputRepr *>(last_level)); + delete cg; + cg = NULL; + projected_nIS.clear(); + transformations.clear(); + new_IS.clear(); + + return sRepr; +} + +//protonu--overload the above MMGenerateCode to take into the CUDA-CHiLL +CG_outputRepr* MMGenerateCode(CG_outputBuilder* ocg, RelTuple &T, SetTuple &old_IS, + const Tuple<CG_outputRepr *> &stmt_content, Relation &known, + Tuple< IntTuple >& smtNonSplitLevels_, + std::vector< std::pair<int, std::string> > syncs_, + const Tuple< Tuple<std::string> >& loopIdxNames_, + int effort) { + int stmts = T.size(); + if (stmts == 0) + return ocg->CreateComment(1, "No statements found!"); + if (!known.is_null()) + known.simplify(); + + //protonu-- + //easier to handle this as a global + smtNonSplitLevels = smtNonSplitLevels_; + syncs = syncs_; + loopIdxNames = loopIdxNames_; + //end-protonu + + + + // prepare iteration spaces by splitting disjoint conjunctions + int maxStmt = 1; + last_level = 0; + for (int stmt = 1; stmt <= stmts; stmt++) { + int old_dim = T[stmt].n_out(); + if (old_dim > last_level) + last_level = old_dim; + + for (int i = 1; i <= old_IS[stmt].n_set(); i++) + T[stmt].name_input_var(i, old_IS[stmt].set_var(i)->name()); + for (int i = 1; i <= old_dim; i++) + T[stmt].name_output_var(i, std::string("t")+to_string(i)); + T[stmt].setup_names(); + + Relation R = Range(Restrict_Domain(copy(T[stmt]), copy(old_IS[stmt]))); + R.simplify(); + while(R.is_upper_bound_satisfiable()) { + new_IS.reallocate(maxStmt); + transformations.reallocate(maxStmt); + statementInfo.reallocate(maxStmt); + + //protonu--putting in fix provided by Mark Hall + smtNonSplitLevels.reallocate(maxStmt); + //end-protonu + + + DNF *dnf = R.query_DNF(); + DNF_Iterator c(dnf); + Relation R2 = Relation(R, *c); + R2.simplify(); + if (R2.is_inexact()) + throw codegen_error("unknown constraint in loop bounds"); + if (known.is_null()) { + new_IS[maxStmt] = R2; + transformations[maxStmt] = T[stmt]; + statementInfo[maxStmt] = stmt_content[stmt]; + maxStmt++; + } + else { + Relation R2_extended = copy(R2); + Relation known_extended = copy(known); + if (R2.n_set() > known.n_set()) + known_extended = Extend_Set(known_extended, R2.n_set()-known.n_set()); + else if (R2.n_set() < known.n_set()) + R2_extended = Extend_Set(R2_extended, known.n_set()-R2.n_set()); + if (Intersection(R2_extended, known_extended).is_upper_bound_satisfiable()) { + new_IS[maxStmt] = R2; + transformations[maxStmt] = T[stmt]; + statementInfo[maxStmt] = stmt_content[stmt]; + maxStmt++; + } + } + c.next(); + if (!c.live()) + break; + if(code_gen_debug) { + fprintf(DebugFile, "splitting iteration space for disjoint form\n"); + fprintf(DebugFile, "Original iteration space: \n"); + R.print_with_subs(DebugFile); + fprintf(DebugFile, "First conjunct: \n"); + R2.print_with_subs(DebugFile); + } + Relation remainder(R, *c); + c.next(); + while (c.live()) { + remainder = Union(remainder, Relation(R, *c)); + c.next(); + } + R = Difference(remainder, copy(R2)); + R.simplify(); + if(code_gen_debug) { + fprintf(DebugFile, "Remaining iteration space: \n"); + R.print_with_subs(DebugFile); + } + } + } + + // reset number of statements + stmts = maxStmt-1; + if(stmts == 0) + return ocg->CreateComment(1, "No points in any of the iteration spaces!"); + + // entend iteration spaces to maximum dimension + for (int stmt = 1; stmt <= stmts; stmt++) { + int old_dim = new_IS[stmt].n_set(); + if (old_dim < last_level) { + new_IS[stmt] = Extend_Set(new_IS[stmt], last_level-old_dim); + F_And *f_root = new_IS[stmt].and_with_and(); + for (int i = old_dim+1; i <= last_level; i++) { + EQ_Handle h = f_root->add_EQ(); + h.update_coef(new_IS[stmt].set_var(i), 1); + h.update_const(posInfinity); + } + } + } + + // standarize the known condition + if(known.is_null()) { + known = Relation::True(last_level); + } + known = Extend_Set(known, last_level-known.n_set()); + for (int i = 1; i <= last_level; i++) + known.name_set_var(i, std::string("t")+to_string(i)); + known.setup_names(); + + // prepare projected subspaces for each loop level + projected_nIS.clear(); + projected_nIS.reallocate(last_level); + for(int i = 1; i <= last_level; i++ ) { + projected_nIS[i].reallocate(stmts); + } + for (int stmt = 1; stmt <= stmts; stmt++) { + if (last_level > 0) + projected_nIS[last_level][stmt] = new_IS[stmt]; + for (int i = last_level-1; i >= 1; i--) { + projected_nIS[i][stmt] = Project(copy(projected_nIS[i+1][stmt]), i+1, Set_Var); + projected_nIS[i][stmt].simplify(); + } + } + + // recursively generate AST + IntTuple allStmts(stmts); + for(int i = 1; i <= stmts; i++) + allStmts[i] = 1; + CG_result *cg = gen_recursive(1, allStmts); + + // always force finite bounds + cg = cg->recompute(known, known); + cg = cg->force_finite_bounds(); + + // loop overhead removal based on actual nesting depth -- by chun 09/17/2008 + for (int i = 1; i <= min(effort, cg->depth()); i++) + cg = cg->liftOverhead(i); + + // merge adjacent if-conditions -- by chun 10/24/2006 + cg->hoistGuard(); + + // really print out the loop + //CG_outputRepr* sRepr = cg->printRepr(ocg, 1, std::vector<CG_outputRepr *>(last_level, NULL)); + CG_outputRepr* sRepr = cg->printRepr(ocg, 1, std::vector<CG_outputRepr *>(last_level )); + delete cg; + cg = NULL; + projected_nIS.clear(); + transformations.clear(); + new_IS.clear(); + + return sRepr; +} + +CG_result *gen_recursive(int level, IntTuple &isActive) { + int stmts = isActive.size(); + + Set<int> active; + int s; + for(s = 1; s <= stmts; s++) + if(isActive[s]) active.insert(s); + + assert (active.size() >= 1); + if(level > last_level) return new CG_leaf(isActive); + + if (active.size() == 1) + return new CG_loop(isActive,level, gen_recursive(level+1,isActive)); + + bool constantLevel = true; + + int test_rel_size; + coef_t start,finish; + finish = -(posInfinity-1); // -(MAXINT-1); + start = posInfinity; // MAXINT; + Tuple<coef_t> when(stmts); + for(s=1; s<=stmts; s++) if (isActive[s]) { + coef_t lb,ub; + test_rel_size = projected_nIS[level][s].n_set(); + projected_nIS[level][s].single_conjunct() + ->query_variable_bounds( + projected_nIS[level][s].set_var(level), + lb,ub); + if(code_gen_debug) { + fprintf(DebugFile, "IS%d: " coef_fmt " <= t%d <= " coef_fmt "\n",s, + lb,level,ub); + projected_nIS[level][s].prefix_print(DebugFile); + } + if (lb != ub) { + constantLevel = false; + break; + } + else { + set_max(finish,lb); + set_min(start,lb); + when[s] = lb; + } + } + + + if (constantLevel && finish-start <= stmts) { + IntTuple newActive(isActive.size()); + for(int i=1; i<=stmts; i++) + newActive[i] = isActive[i] && when[i] == start; + CG_result *r = new CG_loop(isActive,level, + gen_recursive(level+1,newActive)); + for(coef_t time = start+1; time <= finish; time++) { + int count = 0; + for(int i=1; i<=stmts; i++) { + newActive[i] = isActive[i] && when[i] == time; + if (newActive[i]) count++; + } + if (count) { + Relation test_rel(test_rel_size); + GEQ_Handle g = test_rel.and_with_GEQ(); + g.update_coef(test_rel.set_var(level),-1); + g.update_const(time-1); + + r = new CG_split(isActive,level,test_rel,r, + new CG_loop(isActive,level, + gen_recursive(level+1,newActive))); + } + } + return r; + } + +// Since the Hull computation is approximate, we will get regions that +// have no stmts. (since we will have split on constraints on the +// hull, and thus we are looking at a region outside the convex hull +// of all the iteration spaces.) +#if 1 + Relation hull = Hull(projected_nIS[level],isActive,1); +#else + Relation hull = Hull(projected_nIS[level],isActive,0); +#endif + + if(code_gen_debug) { + fprintf(DebugFile, "Hull (level %d) is:\n",level); + hull.prefix_print(DebugFile); + } + + + IntTuple firstChunk(isActive); + IntTuple secondChunk(isActive); + + //protonu-warn Chun about this change + //This does some fancy splitting of statements into loops with the + //fewest dimentions, but that's not necessarily what we want when + //code-gening for CUDA. smtNonSplitLevels keeps track per-statment of + //the levels that should not be split on. + bool checkForSplits = true; + for (int s = 1; s <= isActive.size(); s++){ + if (isActive[s]) { + if(s < smtNonSplitLevels.size() && smtNonSplitLevels[s].index(level-2) != 0){ + checkForSplits = false; + break; + } + } + } + + //protonu-modifying the next for loop + for (int s = 1; checkForSplits && s <= isActive.size(); s++) + if (isActive[s]) { + Relation gist = Gist(copy(projected_nIS[level][s]),copy(hull),1); + if (gist.is_obvious_tautology()) break; + gist.simplify(); + Conjunct *s_conj = gist.single_conjunct(); + for(GEQ_Iterator G(s_conj); G; G++) { + Relation test_rel(gist.n_set()); + test_rel.and_with_GEQ(*G); + Variable_ID v = set_var(level); + coef_t sign = (*G).get_coef(v); + if(sign > 0) test_rel = Complement(test_rel); + if(code_gen_debug) { + fprintf(DebugFile, "Considering split from stmt %d:\n",s); + test_rel.prefix_print(DebugFile); + } + + firstChunk[s] = sign <= 0; + secondChunk[s] = sign > 0; + int numberFirst = sign <= 0; + int numberSecond = sign > 0; + + for (int s2 = 1; s2 <= isActive.size(); s2++) + if (isActive[s2] && s2 != s) { + if(code_gen_debug) + fprintf(DebugFile,"Consider stmt %d\n",s2); + bool t = Intersection(copy(projected_nIS[level][s2]), + copy(test_rel)).is_upper_bound_satisfiable(); + bool f = Difference(copy(projected_nIS[level][s2]), + copy(test_rel)).is_upper_bound_satisfiable(); + assert(t || f); + if(code_gen_debug && t&&f) + fprintf(DebugFile, "Slashes stmt %d\n",s2); + if (t&&f) goto nextGEQ; + if(code_gen_debug) { + if (t) + fprintf(DebugFile, "true for stmt %d\n",s2); + else + fprintf(DebugFile, "false for stmt %d\n",s2); + } + if (t) numberFirst++; + else numberSecond++; + firstChunk[s2] = t; + secondChunk[s2] = !t; + } + + assert(numberFirst+numberSecond>1 && "Can't handle wildcard in iteration space"); + if(code_gen_debug) + fprintf(DebugFile, "%d true, %d false\n", + numberFirst, + numberSecond); + if (numberFirst && numberSecond) { + // Found a dividing constraint + return new CG_split(isActive,level,test_rel, + gen_recursive(level,firstChunk), + gen_recursive(level,secondChunk)); + } + nextGEQ: ; + } + } + + // No way found to divide stmts without splitting, generate loop + + return new CG_loop(isActive,level, gen_recursive(level+1,isActive)); +} + +} diff --git a/omegalib/code_gen/src/codegen.cc b/omegalib/code_gen/src/codegen.cc new file mode 100755 index 0000000..92ca702 --- /dev/null +++ b/omegalib/code_gen/src/codegen.cc @@ -0,0 +1,378 @@ +/***************************************************************************** + Copyright (C) 1994-2000 the Omega Project Team + Copyright (C) 2005-2011 Chun Chen + All Rights Reserved. + + Purpose: + CodeGen class as entry point for code generation. + + Notes: + Loop variable name prefix should not cause any possible name conflicts + with original loop variables wrapped in statement holder. This guarantees + that variable substitution done correctly in the generated code. + + History: + 04/24/96 MMGenerateCode, added by Fortran D people. Lei Zhou + 09/17/08 loop overhead removal based on actual nesting depth -- by chun + 03/05/11 fold MMGenerateCode into CodeGen class, Chun Chen +*****************************************************************************/ + +#include <typeinfo> +#include <omega.h> +#include <basic/util.h> +#include <math.h> +#include <vector> +#include <algorithm> + +#include <code_gen/CG.h> +#include <code_gen/codegen.h> +#include <code_gen/CG_outputBuilder.h> +#include <code_gen/codegen_error.h> + +namespace omega { + +const std::string CodeGen::loop_var_name_prefix = "t"; +const int CodeGen::var_substitution_threshold = 10; + +//Anand--adding stuff to make Chun's code work with Gabe's +std::vector< std::vector<int> > smtNonSplitLevels; +std::vector< std::vector<std::string> > loopIdxNames;//per stmt +std::vector< std::pair<int, std::string> > syncs; + + + +CodeGen::CodeGen(const std::vector<Relation> &xforms, const std::vector<Relation> &IS, const Relation &known, std::vector< std::vector<int> > smtNonSplitLevels_ , std::vector< std::vector<std::string> > loopIdxNames_, std::vector< std::pair<int, std::string> > syncs_) { + // check for sanity of parameters + int num_stmt = IS.size(); + if (xforms.size() != num_stmt) + throw std::invalid_argument("number of iteration spaces does not match number of transformations"); + known_ = copy(known); + if (known_.n_out() != 0) + throw std::invalid_argument("known condition must be a set relation"); + if (known_.is_null()) + known_ = Relation::True(0); + else + known_.simplify(2, 4); + if (!known_.is_upper_bound_satisfiable()) + return; + if (known_.number_of_conjuncts() > 1) + throw std::invalid_argument("only one conjunct allowed in known condition"); + xforms_ = xforms; + for (int i = 0; i < num_stmt; i++) { + xforms_[i].simplify(); + if (!xforms_[i].has_single_conjunct()) + throw std::invalid_argument("mapping relation must have only one conjunct"); + if (xforms_[i].n_inp() != IS[i].n_inp() || IS[i].n_out() != 0) + throw std::invalid_argument("illegal iteration space or transformation arity"); + } + + + //protonu-- + //easier to handle this as a global + smtNonSplitLevels = smtNonSplitLevels_; + syncs = syncs_; + loopIdxNames = loopIdxNames_; + //end-protonu + + + + // find the maximum iteration space dimension we are going to operate on + int num_level = known_.n_inp(); + for (int i = 0; i < num_stmt; i++) + if (xforms_[i].n_out() > num_level) + num_level = xforms_[i].n_out(); + known_ = Extend_Set(known_, num_level-known_.n_inp()); + for (int i = 1; i <= num_level; i++) + known_.name_set_var(i, loop_var_name_prefix + to_string(i)); + known_.setup_names(); + + // split disjoint conjunctions in original iteration spaces + std::vector<Relation> new_IS; + for (int i = 0; i < num_stmt; i++) { + for (int j = 1; j <= IS[i].n_inp(); j++) + xforms_[i].name_input_var(j, const_cast<std::vector<Relation> &>(IS)[i].input_var(j)->name()); + for (int j = 1; j <= xforms_[i].n_out(); j++) + xforms_[i].name_output_var(j, loop_var_name_prefix + to_string(j)); + xforms_[i].setup_names(); + + Relation R = Range(Restrict_Domain(copy(xforms_[i]), copy(IS[i]))); + R = Intersection(Extend_Set(R, num_level-R.n_inp()), copy(known_)); + R.simplify(2, 4); + if (R.is_inexact()) + throw codegen_error("cannot generate code for inexact iteration spaces"); + + while(R.is_upper_bound_satisfiable()) { + DNF *dnf = R.query_DNF(); + DNF_Iterator c(dnf); + Relation R2 = Relation(R, *c); + R2.simplify(); + new_IS.push_back(copy(R2)); + remap_.push_back(i); + c.next(); + if (!c.live()) + break; + Relation remainder(R, *c); + c.next(); + while (c.live()) { + remainder = Union(remainder, Relation(R, *c)); + c.next(); + } + R = Difference(remainder, R2); + R.simplify(2, 4); + } + } + + // number of new statements after splitting + num_stmt = new_IS.size(); + if(!smtNonSplitLevels.empty()) + smtNonSplitLevels.resize(num_stmt); + // assign a dummy value to loops created for the purpose of expanding to maximum dimension + for (int i = 0; i < num_stmt; i++) { + if (xforms[remap_[i]].n_out() < num_level) { + F_And *f_root = new_IS[i].and_with_and(); + for (int j = xforms[remap_[i]].n_out()+1; j <= num_level; j++) { + EQ_Handle h = f_root->add_EQ(); + h.update_coef(new_IS[i].set_var(j), 1); + h.update_const(posInfinity); + } + new_IS[i].simplify(); + } + } + + // calculate projected subspaces for each loop level once and save for CG tree manipulation later + projected_IS_ = std::vector<std::vector<Relation> >(num_level); + for (int i = 0; i < num_level; i++) + projected_IS_[i] = std::vector<Relation>(num_stmt); + for (int i = 0; i < num_stmt; i++) { + if (num_level > 0) + projected_IS_[num_level-1][i] = new_IS[i]; + for (int j = num_level-1; j >= 1; j--) { + projected_IS_[j-1][i] = Project(copy(projected_IS_[j][i]), j+1, Set_Var); + projected_IS_[j-1][i].simplify(2, 4); + } + } +} + + +CG_result *CodeGen::buildAST(int level, const BoolSet<> &active, bool split_on_const, const Relation &restriction) { + if (level > num_level()) + return new CG_leaf(this, active); + + int num_active_stmt = active.num_elem(); + if (num_active_stmt == 0) + return NULL; + else if (num_active_stmt == 1) + return new CG_loop(this, active, level, buildAST(level+1, active, true, restriction)); + + // use estimated constant bounds for fast non-overlap iteration space splitting + if (split_on_const) { + std::vector<std::pair<std::pair<coef_t, coef_t>, int> > bounds; + + for (BoolSet<>::const_iterator i = active.begin(); i != active.end(); i++) { + Relation r = Intersection(copy(projected_IS_[level-1][*i]), copy(restriction)); + r.simplify(2, 4); + if (!r.is_upper_bound_satisfiable()) + continue; + coef_t lb, ub; + r.single_conjunct()->query_variable_bounds(r.set_var(level),lb,ub); + bounds.push_back(std::make_pair(std::make_pair(lb, ub), *i)); + } + sort(bounds.begin(), bounds.end()); + + std::vector<Relation> split_cond; + std::vector<CG_result *> split_child; + + coef_t prev_val = -posInfinity; + coef_t next_val = bounds[0].first.second; + BoolSet<> next_active(active.size()); + int i = 0; + while (i < bounds.size()) { + if (bounds[i].first.first <= next_val) { + next_active.set(bounds[i].second); + next_val = max(next_val, bounds[i].first.second); + i++; + } + else { + Relation r(num_level()); + F_And *f_root = r.add_and(); + if (prev_val != -posInfinity) { + GEQ_Handle h = f_root->add_GEQ(); + h.update_coef(r.set_var(level), 1); + h.update_const(-prev_val-1); + } + if (next_val != posInfinity) { + GEQ_Handle h = f_root->add_GEQ(); + h.update_coef(r.set_var(level), -1); + h.update_const(next_val); + } + r.simplify(); + + Relation new_restriction = Intersection(copy(r), copy(restriction)); + new_restriction.simplify(2, 4); + CG_result *child = buildAST(level, next_active, false, new_restriction); + if (child != NULL) { + split_cond.push_back(copy(r)); + split_child.push_back(child); + } + next_active.unset_all(); + prev_val = next_val; + next_val = bounds[i].first.second; + } + } + if (!next_active.empty()) { + Relation r = Relation::True(num_level()); + if (prev_val != -posInfinity) { + F_And *f_root = r.and_with_and(); + GEQ_Handle h = f_root->add_GEQ(); + h.update_coef(r.set_var(level), 1); + h.update_const(-prev_val-1); + r.simplify(); + } + Relation new_restriction = Intersection(copy(r), copy(restriction)); + new_restriction.simplify(2, 4); + CG_result *child = buildAST(level, next_active, false, new_restriction); + if (child != NULL) { + split_cond.push_back(copy(r)); + split_child.push_back(child); + } + } + + if (split_child.size() == 0) + return NULL; + else if (split_child.size() == 1) + return split_child[0]; + else + return new CG_split(this, active, split_cond, split_child); + } + // check bound conditions exhaustively for non-overlap iteration space splitting + else { + std::vector<Relation> Rs(active.size()); + for (BoolSet<>::const_iterator i = active.begin(); i != active.end(); i++) { + Rs[*i] = Intersection(Approximate(copy(projected_IS_[level-1][*i])), copy(restriction)); + Rs[*i].simplify(2, 4); + } + Relation hull = SimpleHull(Rs); + + //protonu-warn Chun about this change + //This does some fancy splitting of statements into loops with the + //fewest dimentions, but that's not necessarily what we want when + //code-gening for CUDA. smtNonSplitLevels keeps track per-statment of + //the levels that should not be split on. + bool checkForSplits = true; + for (BoolSet<>::const_iterator i = active.begin(); i != active.end(); i++) { + if(*i < smtNonSplitLevels.size()) + for(int k = 0; k <smtNonSplitLevels[*i].size(); k++) + if(smtNonSplitLevels[*i][k] == (level-2)){ + checkForSplits = false; + break; + } + } + + + + + for (BoolSet<>::const_iterator i = active.begin(); i != active.end() && checkForSplits; i++) { + Relation r = Gist(copy(Rs[*i]), copy(hull), 1); + if (r.is_obvious_tautology()) + continue; + r = EQs_to_GEQs(r); + + for (GEQ_Iterator e = r.single_conjunct()->GEQs(); e; e++) { + if ((*e).has_wildcards()) + continue; + + Relation cond = Relation::True(num_level()); + BoolSet<> first_chunk(active.size()); + BoolSet<> second_chunk(active.size()); + + if ((*e).get_coef(hull.set_var(level)) > 0) { + cond.and_with_GEQ(*e); + cond = Complement(cond);; + cond.simplify(); + second_chunk.set(*i); + } + else if ((*e).get_coef(hull.set_var(level)) < 0) { + cond.and_with_GEQ(*e); + cond.simplify(); + first_chunk.set(*i); + } + else + continue; + + bool is_proper_split_cond = true; + for (BoolSet<>::const_iterator j = active.begin(); j != active.end(); j++) + if ( *j != *i) { + bool in_first = Intersection(copy(Rs[*j]), copy(cond)).is_upper_bound_satisfiable(); + bool in_second = Difference(copy(Rs[*j]), copy(cond)).is_upper_bound_satisfiable(); + + if (in_first && in_second) { + is_proper_split_cond = false; + break; + } + + if (in_first) + first_chunk.set(*j); + else if (in_second) + second_chunk.set(*j); + } + + if (is_proper_split_cond && first_chunk.num_elem() != 0 && second_chunk.num_elem() != 0) { + CG_result *first_cg = buildAST(level, first_chunk, false, copy(cond)); + CG_result *second_cg = buildAST(level, second_chunk, false, Complement(copy(cond))); + if (first_cg == NULL) + return second_cg; + else if (second_cg == NULL) + return first_cg; + else { + std::vector<Relation> split_cond; + std::vector<CG_result *> split_child; + split_cond.push_back(copy(cond)); + split_child.push_back(first_cg); + split_cond.push_back(Complement(copy(cond))); + split_child.push_back(second_cg); + + return new CG_split(this, active, split_cond, split_child); + } + } + } + } + return new CG_loop(this, active, level, buildAST(level+1, active, true, restriction)); + } +} + + +CG_result *CodeGen::buildAST(int effort) { + if (remap_.size() == 0) + return NULL; + + CG_result *cgr = buildAST(1, ~BoolSet<>(remap_.size()), true, Relation::True(num_level())); + if (cgr == NULL) + return NULL; + + + // break down the complete iteration space condition to levels of bound/guard condtions + cgr = cgr->recompute(cgr->active_, copy(known_), copy(known_)); + + + + if (cgr == NULL) + return NULL; + + // calculate each loop's nesting depth + int depth = cgr->populateDepth(); + + + // redistribute guard condition locations by additional splittings + std::pair<CG_result *, Relation> result = cgr->liftOverhead(min(effort,depth), false); + + // since guard conditions are postponed for non-loop levels, hoist them now. + // this enables proper if-condition simplication when outputting actual code. + result.first->hoistGuard(); + + + + + return result.first; +} + +} diff --git a/omegalib/code_gen/src/cscope.out b/omegalib/code_gen/src/cscope.out new file mode 100644 index 0000000..ac4e74f --- /dev/null +++ b/omegalib/code_gen/src/cscope.out @@ -0,0 +1,89773 @@ +cscope 15 $HOME/suif-cuda-omega-latest/code_gen/src 0000481316 + @CG.cc + +21 + ~<omega.h +> + +22 + ~<�r�g.h +> + +23 + ~<basic/omega_�r�.h +> + +24 + ~<code_g�/CG.h +> + +25 + ~<code_g�/CG_ou�utBu�d�.h +> + +26 + ~<code_g�/CG_ou�utR�r.h +> + +27 + ~<code_g�/CG_�r�gBu�d�.h +> + +28 + ~<code_g�/ou�ut_��.h +> + +29 + ~<�ack +> + +31 +�me�a� + + gomega + { + +33
+Tu�e +< +R��i� +> +�w_IS +; + +34
+Tu�e +<Tu�e< +R��i� +> > +�oje�ed_nIS +; + +35
+Tu�e +< +CG_ou�utR�r + *> +��em�tInfo +; + +36
+Tu�e +< +R��i� +> +��sf�m�i�s +; + +37
+ϡ_�v� +; + +39 +CG_�su� + * +g�_�cursive +( +�v� +, +I�Tu�e + & +isA�ive +); + +43 +�me�a� + + gomega + { + +45
+Tu�e +< +I�Tu�e +> +smtN�S��Lev�s +; + +46
+Tu�e +<Tu�e< +�d +:: +�r�g +> > +lo�IdxNames +; + +47
+�d +:: +ve�� +<�d:: +�� +<, std:: +�r�g +> > +syncs +; + +48
+checkLo�Lev� +; + +49
+�mtF�Lo�Check +; + +50
+u��BoundF�Lev� +; + +51
+low�BoundF�Lev� +; + +52
+bo� + +f�lInBounds +; + +58 + g�d +:: +�r�g + +CG_�su� +:: +��t +( +�d�t +) { + +59 +CG_�r�gBu�d� + +ocg +; + +60 +CG_ou�utR�r + * + g�� + = +��tR�r +(& +ocg +, +�d�t +, + +61 +�d +:: +ve�� +< +CG_ou�utR�r + *>( +ϡ_�v� +, + +62 +��ic_�� +< +CG_ou�utR�r + *>( +NULL +))); + +63 i�( + g�� + =� +NULL +) + +64 +�d +:: +�r�g +(); + +66 +G�S��g +( +�� +); + +73 + gCG_�l� +:: +CG_�l� +( +I�Tu�e + & +a�ive +, +lvl +, cڡ +R��i� + & +c�d_ +, + +74 +CG_�su� + * +T +, CG_�su� * +F +) { + +75 +R��i� + + gc�d + = +c�y +( +c�d_ +); + +76 +as�� +( +c�d +. +has_s�g�_c�jun� +()); + +78 +c�f_t + + gc + = 0; + +79 + gpos + = -1; + +80 +GEQ_I��t� + +G +( +c�d +. +s�g�_c�jun� +()); + +81 i�( + gG +) { + +82 +Cڡr_V�s_I�r + +cvi +(* +G +, +�l� +); + gcvi +; cvi++) + +83 i�((* + gcvi +). + gc�f + && (*cvi). + gv� +-> +k�d +(�=� +I�ut_V� + + +84 && (* +cvi +). +v� +-> +g�_pos�i� +(�> +pos +) { + +85 +pos + = (* +cvi +). +v� +-> +g�_pos�i� +(); + +86 + gc + = (* +cvi +). +c�f +; + +89 #i�de� +NDEBUG + + +90 i�( + gpos + > + glvl + + 1) { + +91 +�r�tf +( +DebugF�e +, "I�eg� s����lv�%d\n", +lvl +); + +92 + gc�d +. +�efix_��t +( +DebugF�e +); + +93 + gcode_g�_debug + = 1; + +97 +as�� +( +pos + =�0 ||�o�<� +lvl + + 1); + +99 i�( + gpos + > 0 && + gc + > 0) { + +100 +CG_�su� + * + gfoo + = +T +; + +101 + gT + = +F +; + +102 + gF + = +foo +; + +103 i�( + gcode_g�_debug +) { + +104 +�r�tf +( +DebugF�e +, + +105 "Rev�s�g c�u� i��w s���od���v�%d\n", +lvl +); + +106 + gc�d +. +�efix_��t +( +DebugF�e +); + +108 + gc�d + = +Com�em�t +( +c�d +); + +110 + gc�d +. +sim�ify +(); + +112 +as�� +( +c�d +. +has_s�g�_c�jun� +()); + +115 +as�� +( +EQ_I��t� +( +c�d +. +s�g�_c�jun� +())); + +117 + gisA�ive + = +a�ive +; + +118 + gc�d�i� + = +c�d +; + +119 + g�v� + = +lvl +; + +120 + g�ueC�u� + = +T +; + +121 + g�l�C�u� + = +F +; + +124 + g�d +:: +�r�g + +CG_�l� +:: +��tS�u�u� +( +�d�t +) { + +125 +�d +:: +�r�g + +�su� + = +G�Ind�tS��s +( +�d�t +) + "// split�t " + +126 + +to_�r�g +((*� +this +�+ "\n" + +G�Ind�tS��s +( +�d�t +) + +127 + "// gu�d:" + +gu�d +. +��t_f�mu�_to_�r�g +() + "\n" + +128 + +G�Ind�tS��s +( +�d�t +) + "// if " + +129 + +c�d�i� +. +��t_f�mu�_to_�r�g +() + "�hen\n" + +130 + +�ueC�u� +-> +��tS�u�u� +( +�d�t + + 1�+ +G�Ind�tS��s +(indent) + +131 + "//�l�\n" + +�l�C�u� +-> +��tS�u�u� +( +�d�t + + 1); + +132 + g�su� +; + +135 +CG_ou�utR�r +* + gCG_�l� +:: +��tR�r +( +CG_ou�utBu�d� +* +ocg +, +�d�t +, + +136 cڡ +�d +:: +ve�� +< +CG_ou�utR�r + *> & +assig�d_�_the_�y +) { + +138 i�(! +Mu�_Be_Sub�t +( +c�y +( +��ri�i�s +), c�y( +known +))) + +139 +��tf +("------------wrong------------------\n"); + +141 +CG_ou�utR�r +* + g�mtLi� +; + +143 +CG_ou�utR�r + * + g��R�r + = +NULL +; + +144 i�(! + ggu�d +. +is_nu� +(�&& !gu�d. +is_obvious_�ut�ogy +()) { + +145 + g��R�r + = +ou�utGu�d +( +ocg +, +gu�d +, +assig�d_�_the_�y +); + +146 + g�d�t +++; + +148 i�( + g��R�r + !� +NULL +) + +149 +�mtLi� + = +ocg +-> +C��eIf +( +�d�t + - 1, +��R�r +, + +150 +�ueC�u� +-> +��tR�r +( +ocg +, +�d�t +, +assig�d_�_the_�y +), + +151 +�l�C�u� +-> +��tR�r +( +ocg +, +�d�t +, +assig�d_�_the_�y +)); + +153 + g�mtLi� + = +ocg +-> +StmtLi�A��d +( + +154 +�ueC�u� +-> +��tR�r +( +ocg +, +�d�t +, +assig�d_�_the_�y +), + +155 +�l�C�u� +-> +��tR�r +( +ocg +, +�d�t +, +assig�d_�_the_�y +)); + +157 + g�mtLi� +; + +160 +CG_�su� + * + gCG_�l� +:: +li�Ov�h�d +( +d�th +) { + +161 +as�� +( +d�th + >= 1); + +162 + g�ueC�u� + = +�ueC�u� +-> +li�Ov�h�d +( +d�th +); + +163 + g�l�C�u� + = +�l�C�u� +-> +li�Ov�h�d +( +d�th +); + +164 + gthis +; + +167 +CG_�su� + * + gCG_�l� +:: +f��_f��e_bounds +() { + +168 +�ueC�u� + =�rueC�u�-> +f��_f��e_bounds +(); + +169 + g�l�C�u� + = +�l�C�u� +-> +f��_f��e_bounds +(); + +170 + gthis +; + +173 +R��i� + + gCG_�l� +:: +f�dOv�h�d +( +li�To +) { + +174 +R��i� + +r + = +�ueC�u� +-> +f�dOv�h�d +( +li�To +); + +175 i�( + gr +. +is_obvious_�ut�ogy +()) + +176 + gr + = +�l�C�u� +-> +f�dOv�h�d +( +li�To +); + +177 + gr +; + +180 +CG_�su� + * + gCG_�l� +:: +�compu� +(cڡ +R��i� + & +k +, cڡ R��i� & +r +) { + +181 + gknown + = +c�y +( +k +); + +182 + g��ri�i�s + = +c�y +( +r +); + +184 + gnumA�ive + = 0; + +185 + gs + = 1; s <� +isA�ive +. +size +(); s++) + +186 i�( + gisA�ive +[ +s +]) { + +187 +R��i� + + gI + = +�oje�ed_nIS +[ +�v� +][ +s +]; + +188 i�(! +I����i� +( +c�y +( +��ri�i�s +), +I +). +is_u��_bound_�tisf�b� +()) + +189 + gisA�ive +[ +s +] = 0; + +191 + gnumA�ive +++; + +193 i�( + gnumA�ive + == 0) { + +194 +d��e + +this +; + +195 +�w + + gCG_nu� +; + +196 } i�( + gnumA�ive + == 1 && 0) { + +199 +CG_�su� + * +cg + = +g�_�cursive +( +�v� +, +isA�ive +); + +200 + gcg + = +cg +-> +�compu� +( +k +, +r +); + +201 +d��e + + gthis +; + +202 + gcg +; + +205 +R��i� + + g�w_��ri�i�s + = +I����i� +( +c�y +( +��ri�i�s +), + +206 +c�y +( +c�d�i� +)); + +207 + g�w_��ri�i�s +. +sim�ify +(); + +208 + g�ueC�u� + = +�ueC�u� +-> +�compu� +( +known +, +�w_��ri�i�s +); + +209 + g�w_��ri�i�s + = +Dif�n� +( +c�y +( +��ri�i�s +), c�y( +c�d�i� +)); + +210 + g�w_��ri�i�s +. +sim�ify +(); + +211 + g�l�C�u� + = +�l�C�u� +-> +�compu� +( +known +, +�w_��ri�i�s +); + +213 i�( + g�ueC�u� +-> +isNu� +()) { + +214 +CG_�su� + * + gcg + = +�l�C�u� +; + +215 + g�l�C�u� + = +NULL +; + +216 +d��e + + gthis +; + +217 + gcg +; + +219 i�( + g�l�C�u� +-> +isNu� +()) { + +220 +CG_�su� + * + gcg + = +�ueC�u� +; + +221 + g�ueC�u� + = +NULL +; + +222 +d��e + + gthis +; + +223 + gcg +; + +225 + gthis +; + +228 +R��i� + + gCG_�l� +:: +hoi�Gu�d +() { + +229 +R��i� + +gu�d1 + = +�ueC�u� +-> +hoi�Gu�d +(); + +230 +R��i� + + ggu�d2 + = +�l�C�u� +-> +hoi�Gu�d +(); + +231 i�( + ggu�d +. +is_nu� +()) + +232 + ggu�d + = +R��i� +:: +True +( +c�d�i� +. +n_�t +()); + +234 i�(! + ggu�d1 +. +is_obvious_�ut�ogy +(�&& ! + ggu�d2 +.is_obvious_tautology() + +235 && +Mu�_Be_Sub�t +( +c�y +( +gu�d1 +), c�y( +gu�d2 +)) + +236 && +Mu�_Be_Sub�t +( +c�y +( +gu�d2 +), c�y( +gu�d1 +))) { + +237 + g�ueC�u� +-> +�moveGu�d +(); + +238 + g�l�C�u� +-> +�moveGu�d +(); + +239 + ggu�d + = +I����i� +( +gu�d +, +gu�d1 +); + +242 + ggu�d +; + +249 +R��i� + + gCG_�af +:: +f�dOv�h�d +( +li�To +) { + +250 +s + = 1; + gs + <� +isA�ive +. +size +(); s++) + +251 i�( + gisA�ive +[ +s +]) { + +252 + gbb + = ! +gu�d +[ +s +]. +is_obvious_�ut�ogy +(); + +253 i�( + gbb +) { + +254 i�( + gcode_g�_debug +) + +255 +�r�tf +( +DebugF�e +, + +257 +s +, +gu�d +[s]. +��t_f�mu�_to_�r�g +(). +c_�r +()); + +258 +R��i� + + gr + = +pickOv�h�d +( +gu�d +[ +s +], +li�To +); + +259 i�(! + gr +. +is_obvious_�ut�ogy +()) + +260 + gr +; + +263 + gR��i� +:: +True +( +known +. +n_�t +()); + +266 + g�d +:: +�r�g + +CG_�af +:: +��tS�u�u� +() { + +267 +�d +:: +�r�g + +�su� +; + +268 + gs + = 1; s <� +isA�ive +. +size +(); s++) + +269 i�( + gisA�ive +[ +s +]) { + +270 + g�su� + +� +�d +:: +�r�g +("s"�+ +to_�r�g +( +s +); + +272 + g�su� + + "\n"; + +275 +CG_ou�utR�r +* + gCG_�af +:: +��tR�r +( +CG_ou�utBu�d� +* +ocg +, +�d�t +, + +276 cڡ +�d +:: +ve�� +< +CG_ou�utR�r + *> & +assig�d_�_the_�y +) { + +278 i�(! +Mu�_Be_Sub�t +( +c�y +( +��ri�i�s +), c�y( +known +))) + +279 +��tf +("------------wrong------------------\n"); + +281 + g�d +:: +�r�g + +�su� +; + +282 +CG_ou�utR�r +* + g�mtLi� + = +NULL +; + +283 +CG_ou�utR�r +* + g�mtNode + = +NULL +; + +285 + gTu�e +<> + gw�k�g +; + +287 i�( + gcode_g�_debug + > 1) { + +288 + g�su� + = "known: " + +known +. +��t_f�mu�_to_�r�g +(); + +289 + g�mtLi� + = +ocg +-> +StmtLi�A��d +( +�mtLi� +, + +290 +ocg +-> +C��eComm�t +( +�d�t +, +�su� +)); + +293 + gs + = 1; s <� +isA�ive +. +size +(); s++) + +294 i�( + gisA�ive +[ +s +]) { + +295 i�( + ggu�d +[ +s +]. +is_obvious_�ut�ogy +()) { + +296 + g�mtNode + = +ou�utS��m�t +( +ocg +, +��em�tInfo +[ +s +]-> +��e +(), + +297 +�d�t +, +��sf�m�i�s +[ +s +], +known +, +assig�d_�_the_�y +); + +298 + g�mtLi� + = +ocg +-> +StmtLi�A��d +( +�mtLi� +, +�mtNode +); + +300 i�( + gcode_g�_debug + > 1) { + +301 + g�su� + = "restrictions: " + +302 + +��ri�i�s +. +��t_f�mu�_to_�r�g +(); + +303 + g�mtLi� + = +ocg +-> +StmtLi�A��d +( +�mtLi� +, + +304 +ocg +-> +C��eComm�t +( +�d�t +, +�su� +)); + +306 + gw�k�g +. +��nd +( +s +); + +311 + gi + = 1; i <� +w�k�g +. +size +(); i++) + +312 i�( + gw�k�g +[ +i +] != 0) { + +313 +R��i� + +g + = +I����i� +( +c�y +( +gu�d +[ +w�k�g +[ +i +]]), c�y( +known +)); + +314 + g�mtNode + = +ou�utS��m�t +( +ocg +, +��em�tInfo +[ +w�k�g +[ +i +]]-> +��e +(), + +315 +�d�t + + 1, +��sf�m�i�s +[ +w�k�g +[ +i +]], +g +, + +316 +assig�d_�_the_�y +); + +318 + gj + = +i + + 1; j <� +w�k�g +. +size +(); j++) + +319 i�( + gw�k�g +[ +j +] != 0) { + +320 i�( +Mu�_Be_Sub�t +( +c�y +( +gu�d +[ +w�k�g +[ +i +]]), + +321 +c�y +( +gu�d +[ +w�k�g +[ +j +]])) + +322 && +Mu�_Be_Sub�t +( +c�y +( +gu�d +[ +w�k�g +[ +j +]]), + +323 +c�y +( +gu�d +[ +w�k�g +[ +i +]]))) { + +324 +�mtNode + = +ocg +-> +StmtLi�A��d +(stmtNode, + +325 +ou�utS��m�t +( +ocg +, + +326 +��em�tInfo +[ +w�k�g +[ +j +]]-> +��e +(), + +327 +�d�t + + 1, +��sf�m�i�s +[ +w�k�g +[ +j +]], + +328 +g +, +assig�d_�_the_�y +)); + +329 + gw�k�g +[ +j +] = 0; + +333 +CG_ou�utR�r + * + gifGu�d + = +ou�utGu�d +( +ocg +, +gu�d +[ +w�k�g +[ +i +]], + +334 +assig�d_�_the_�y +); + +335 + g�mtNode + = +ocg +-> +C��eIf +( +�d�t +, +ifGu�d +, +�mtNode +, +NULL +); + +336 + g�mtLi� + = +ocg +-> +StmtLi�A��d +( +�mtLi� +, +�mtNode +); + +339 + g�mtLi� +; + +342 +CG_�su� +* + gCG_�af +:: +�compu� +(cڡ +R��i� + & +k +, cڡ R��i� & +r +) { + +343 + gknown + = +c�y +( +k +); + +344 + g��ri�i�s + = +c�y +( +r +); + +346 + ggu�d +. +��lo�� +( +isA�ive +. +size +()); + +348 +bo� + + g�yA�ive + = +�l� +; + +349 + gs + = 1; s <� +isA�ive +. +size +(); s++) + +350 i�( + gisA�ive +[ +s +]) { + +351 +R��i� + + gI + = +I����i� +( +c�y +( +��ri�i�s +), c�y( +�w_IS +[ +s +])); + +352 i�(! + gI +. +is_u��_bound_�tisf�b� +()) + +353 + gisA�ive +[ +s +] = 0; + +355 + g�yA�ive + = +�ue +; + +356 +as�� +(! +I +. +is_nu� +()); + +357 + ggu�d +[ +s +] = +Gi� +( +c�y +( +I +), c�y( +known +), 1); + +363 i�(! + g�yA�ive +) { + +364 +d��e + + gthis +; + +365 +�w + +CG_nu� +(); + +367 + gthis +; + +370 +R��i� + + gCG_�af +:: +hoi�Gu�d +() { + +371 +s +; + +372 + gs + = 1; s <� +isA�ive +. +size +(�&& !isA�ive[ +s +]; s++) + +375 i�( + gs + > + gisA�ive +. +size +()) + +376 + gR��i� +:: +True +(1); + +378 +R��i� + + ggu�d1 + = +gu�d +[ +s +]; + +380 + gi + = +s + + 1; i <� +isA�ive +. +size +(); i++) + +381 i�( + gisA�ive +[ +i +] + +382 && !( +Mu�_Be_Sub�t +( +c�y +( +gu�d1 +), c�y( +gu�d +[ +i +])) + +383 && +Mu�_Be_Sub�t +( +c�y +( +gu�d +[ +i +]), c�y( +gu�d1 +)))) + +384 + gR��i� +:: +True +( +gu�d1 +. +n_�t +()); + +386 + ggu�d1 +; + +389 + gCG_�af +:: +�moveGu�d +() { + +390 +i + = 1; + gi + <� +isA�ive +. +size +(); i++) + +391 i�( + gisA�ive +[ +i +]) + +392 + ggu�d +[ +i +] = +R��i� +:: +True +( +gu�d +[i]. +n_�t +()); + +399 +CG_�su� + * + gCG_lo� +:: +f��_f��e_bounds +() { + +400 i�(! +�edLo� + + +401 || ( +hasBound +( +bounds +, +�v� +, 0) && hasBound(bounds,�evel, 1))) { + +402 + gbody + = +body +-> +f��_f��e_bounds +(); + +403 + gthis +; + +406 i�( + gcode_g�_debug +) + +407 +�r�tf +( +DebugF�e +, "Don't have finite bounds in:\n%s\n\n", + +408 +this +-> +��t +(2). +c_�r +()); + +409 +bo� + + gbb + = ! +hasBound +( +bounds +, +�v� +, 0); + +410 + gd�e�i� + = +bb + ? 0 : 1; + +411 + gs +; + +412 +R��i� + + gS +; + +413 + gs + = 1; s <� +isA�ive +. +size +(); s++) + +414 i�( + gisA�ive +[ +s +]) + +415 i�( +f�d_�y_cڡ��t +( +s +, +�v� +, +��ri�i�s +, +d�e�i� +, +S +, + +416 +�l� +)) + +420 i�( + gS +. +is_nu� +()) + +421 + gs + = 1; s <� +isA�ive +. +size +(); s++) + +422 i�( + gisA�ive +[ +s +]) + +423 i�( +f�d_�y_cڡ��t +( +s +, +�v� +, +��ri�i�s +, +d�e�i� +, +S +, + +424 +�ue +)) + +427 i�( + gS +. +is_nu� +()) { + +429 +�r�tf +( +DebugF�e +,"hasBound(%s,%d,%s�id f��, bu�ov�h�d wa��ut�ogy\n", +I +. +��t_f�mu�_to_�r�g +(). +c_�r +(), +�v� +, +d�e�i� +?"upper bound":"lower bound"); + +431 +throw + +codeg�_�r� +("unable�o force finite bounds"); + +436 +��tf +("S���g o�%s\n", +S +. +��t_f�mu�_to_�r�g +(). +c_�r +()); + +438 +CG_�su� + * + g�l + = +�w + +CG_�l� +( +isA�ive +, +�v� +, +S +, +this +,�his-> +��e +()); + +439 + g�l + = +�l +-> +�compu� +( +c�y +( +known +), c�y( +��ri�i�s +)); + +441 i�( + gcode_g�_debug +) + +442 +�r�tf +( +DebugF�e +,"S�� o�t���� f���bounds:\n%s\n\n", +�l +-> +��t +(2). +c_�r +()); + +444 + g�l +-> +f��_f��e_bounds +(); + +447 +CG_�su� + * + gCG_lo� +:: +li�Ov�h�d +( +d�th +) { + +448 +as�� +( +d�th + >= 1); + +449 i�( + gthis +-> +d�th +(�< + gd�th +) + +450 + gthis +; + +451 i�(!( + g�edLo� + && + gthis +-> +d�th +() == depth)) { + +452 +body + = body-> +li�Ov�h�d +( +d�th +); + +453 + gthis +; + +456 +R��i� + + gc + = +body +-> +f�dOv�h�d +( +�v� +); + +457 i�( + gc +. +is_obvious_�ut�ogy +()) + +458 + gthis +; + +459 +as�� +( +c +. +is_u��_bound_�tisf�b� +()); + +460 + g�d +:: +�r�g + +bef�e +; + +461 i�( + gcode_g�_debug +) { + +462 + gbef�e + = +��t +(1); + +464 +CG_�su� + * + gs + = +�w + +CG_�l� +( +isA�ive +, +�v� +, +c +, +this +,�his-> +��e +()); + +466 + gs + = +s +-> +�compu� +( +c�y +( +known +), c�y( +��ri�i�s +)); + +467 i�( + gcode_g�_debug +) { + +468 + g�d +:: +�r�g + +a� + = +s +-> +��t +(1); + +469 +�r�tf +( +DebugF�e +, "Lifted out overhead of %s\n", + +470 +c +. +��t_f�mu�_to_�r�g +(). +c_�r +()); + +471 +�r�tf +( +DebugF�e +, "�om:\n%s\n", +bef�e +. +c_�r +()); + +472 +�r�tf +( +DebugF�e +, "t�g�:\n%s--\n", +a� +. +c_�r +()); + +474 + gs + = +s +-> +li�Ov�h�d +( +d�th +); + +475 + gs +; + +478 + g�d +:: +�r�g + +CG_lo� +:: +��tS�u�u� +( +�d�t +) { + +479 +�d +:: +�r�g + +s + = ""; + +480 + g�d� + = +�d�t +; + +481 + gs + +� +G�Ind�tS��s +( +�d�t +�+ "//�o�" + ( +�edLo� + ? "" : "(single)") + +482 + " f܁" + +to_�r�g +( +�v� +�+ "��" +�o_�r�g((*� +this +) + +484 + gs + +� +G�Ind�tS��s +( +�d�t +) + "// known: " + +485 + +known +. +��t_f�mu�_to_�r�g +() + "\n"; + +486 + gs + +� +G�Ind�tS��s +( +�d�t +) + "// guard: " + +487 + +gu�d +. +��t_f�mu�_to_�r�g +() + "\n"; + +488 + gs + +� +G�Ind�tS��s +( +�d�t +) + "// bounds: " + +489 + +bounds +. +��t_f�mu�_to_�r�g +() + "\n"; + +492 + gi + = 1; i <� +isA�ive +. +size +(); i++) + +493 i�( + gisA�ive +[ +i +]) { + +494 + gs + +� +G�Ind�tS��s +( +�d�t +�+ "// " + "s" + +to_�r�g +( +i +) + ":" + +495 + +�oje�ed_nIS +[ +�v� +][ +i +]. +��t_f�mu�_to_�r�g +() + "\n"; + +498 + gs + + + gbody +-> +��tS�u�u� +( +�d� + + 1�+ +G�Ind�tS��s +(indnt + 1) + +502 +CG_ou�utR�r +* + gCG_lo� +:: +��tR�r +( +CG_ou�utBu�d� +* +ocg +, +�d�t +, + +503 cڡ +�d +:: +ve�� +< +CG_ou�utR�r + *> & +assig�d_�_the_�y +) { + +505 i�(! +Mu�_Be_Sub�t +( +c�y +( +��ri�i�s +), c�y( +known +))) + +506 +��tf +("------------wrong------------------\n"); + +529 +CG_ou�utR�r +* + ggu�dR�r + = +ou�utGu�d +( +ocg +, +gu�d +, +assig�d_�_the_�y +); + +530 +R��i� + + g�f��d + = +I����i� +( +c�y +( +known +), c�y( +gu�d +)); + +531 + g�f��d +. +sim�ify +(); + +536 + g�d +:: +ve�� +< +CG_ou�utR�r + *> +a�f + = +assig�d_�_the_�y +; + +538 + g�d +:: +�� +< +CG_ou�utR�r + *, + gbo� +> + geqR�r + = +ou�utAssignm�t +( +ocg +, +bounds +, + +539 +bounds +. +�t_v� +( +�v� +), +�f��d +, +gu�dR�r +, +a�f +); + +540 i�(! + geqR�r +. + g�c�d +) + +541 + ga�f +[ +�v� + - 1] = +eqR�r +. +f�� +; + +543 + g�d� + = +�d�t +; + +544 i�( + ggu�dR�r + !� +NULL +) + +545 +�d� +++; + +548 i�( + gcheckLo�Lev� +) { + +549 i�( + g�v� + =� +checkLo�Lev� +) { + +550 +bo� + +�mtP��� + = +�l� +; + +551 + gs + = 1; s <� +isA�ive +. +size +(); s++) { + +552 i�( + gisA�ive +[ +s +] && + gs + - 1 =� +�mtF�Lo�Check +) + +553 +�mtP��� + = +�ue +; + +555 i�( + g�mtP��� +) { + +556 + gf�lInBounds + = +�ue +; + +563 + g�d +:: +�� +< +CG_ou�utR�r + *, + gbo� +> + g��R�r + = +ou�utBounds +( +ocg +, +bounds +, + +564 +bounds +. +�t_v� +( +�v� +), +�d� +, +�f��d +, +a�f +); + +567 + gf�lInBounds + = +�l� +; + +570 +R��i� + + g��_ov� + = +Gi� +( +c�y +( +bounds +), c�y( +�f��d +), 1); + +572 i�(! + g��_ov� +. +is_obvious_�ut�ogy +()) + +573 +��tf +("=============something wrong===============\n"); + +575 +CG_ou�utR�r + * + glo�R�r + = +NULL +; + +576 i�( + geqR�r +. + g�c�d +) { + +577 +CG_ou�utR�r + * + gbodyR�r + = +body +-> +��tR�r +( +ocg +, +�d� +, +a�f +); + +578 +CG_ou�utR�r + * + gassignR�r + = +ocg +-> +C��eAssignm�t +( +�d� +, + +579 +ocg +-> +C��eId�t +( +bounds +. +�t_v� +( +�v� +)-> +�me +()), +eqR�r +. +f�� +); + +580 + glo�R�r + = +ocg +-> +StmtLi�A��d +( +assignR�r +, +bodyR�r +); + +581 } i�( + g��R�r +. + g�c�d +) { + +582 +CG_ou�utR�r + * + gbodyR�r + = +body +-> +��tR�r +( +ocg +, +�d� + + 1, +a�f +); + +583 + glo�R�r + = +ocg +-> +C��eLo� +( +�d� +, +��R�r +. +f�� +, +bodyR�r +); + +585 #ifde� +BUILDCUDA + + +591 +bo� + + gblockLo� + = +�l� +; + +592 +bo� + + gth�adLo� + = +�l� +; + +593 +bo� + + gsync + = +�l� +; + +594 + gf��A�iveStmt + = -1; + +595 + gs + = 1; s <� +isA�ive +. +size +(); s++) { + +596 i�( + gisA�ive +[ +s +]) { + +597 i�( + gf��A�iveStmt + < 0) + +598 + gf��A�iveStmt + = +s +; + +602 + gidx + = +smtN�S��Lev�s +[ +s +]. +�dex +( +�v� +); + +603 i�( + gidx + == 1) { + +604 +blockLo� + = +�ue +; + +607 i�( + gidx + == 2) { + +608 +th�adLo� + = +�ue +; + +612 i�( + gblockLo� + && + gth�adLo� +) { + +613 +�r�tf +( +�d�r +, + +615 +�v� +); + +616 + gth�adLo� + = +�l� +; + +618 + g�d +:: +�r�g + +�e�edIdx +; + +619 i�( + glo�IdxNames +. +size +() + +620 && ( + g�v� + / 2�- 1 < + glo�IdxNames +[ +f��A�iveStmt +]. +size +()) + +621 + g�e�edIdx + = +lo�IdxNames +[ +f��A�iveStmt +][( +�v� + / 2)]; + +622 + gs + = 1; s <� +isA�ive +. +size +(); s++) { + +623 i�( + gisA�ive +[ +s +]) { + +624 + gi + = 0; i < + gsyncs +. +size +(); i++) { + +625 i�( + gsyncs +[ +i +]. + gf�� + =� +s + - 1 + +626 && +�rcmp +( +syncs +[ +i +]. +�c�d +. +c_�r +(), + +627 +�e�edIdx +. +c_�r +()) == 0) { + +628 +sync + = +�ue +; + +634 i�( + gth�adLo� + || + gblockLo� + || + g�e�edIdx +. +�ngth +() != 0) { + +635 +buf +[1024]; + +636 + g�d +:: +�r�g + +lo� +; + +637 i�( + gblockLo� +) + +638 + glo� + = "blockLoop "; + +639 i�( + gth�adLo� +) + +640 + glo� + = "threadLoop "; + +641 i�( + g�e�edIdx +. +�ngth +(�!�0 && +sync +) { + +642 +�r�tf +( +buf +, "~cuda~ %���edIdx: %�sync", +lo� +. +c_�r +(), + +643 +�e�edIdx +. +c_�r +()); + +644 } i�( + g�e�edIdx +. +�ngth +() != 0) { + +645 +�r�tf +( +buf +, "~cuda~ %���edIdx: %s", +lo� +. +c_�r +(), + +646 +�e�edIdx +. +c_�r +()); + +648 +�r�tf +( +buf +, "~cuda~ %s", +lo� +. +c_�r +()); + +651 #ifde� +BUILD_ROSE + + +652 + glo�R�r + = +ocg +-> +C��eA�ribu� +( +lo�R�r +, +buf +); + +658 + glo�R�r + = +ocg +-> +StmtLi�A��d +(ocg-> +C��eComm�t +( +�d� +, +buf +), + +659 +lo�R�r +); + +668 } i�( + g��R�r +. + gf�� + !� +NULL +) { + +669 +CG_ou�utR�r + * +bodyR�r + = +body +-> +��tR�r +( +ocg +, +�d� +, +a�f +); + +670 + glo�R�r + = +ocg +-> +StmtLi�A��d +( +��R�r +. +f�� +, +bodyR�r +); + +672 + glo�R�r + = +body +-> +��tR�r +( +ocg +, +�d� +, +a�f +); + +674 i�( + ggu�dR�r + !� +NULL +) + +675 +lo�R�r + = +ocg +-> +C��eIf +( +�d�t +, +gu�dR�r +,�o�R�r, +NULL +); + +677 +d��e + + ga�f +[ +�v� + - 1]; + +678 + glo�R�r +; + +757 +R��i� + + gCG_lo� +:: +f�dOv�h�d +( +li�To +) { + +760 i�( +�edLo� +) { + +761 +bb + = ! +gu�d +. +is_obvious_�ut�ogy +(); + +762 i�( + gbb +) { + +764 +�r�tf +( +DebugF�e +,"Trying�o�emove overhead on guard of�oop %x�t�evel %d: %s\n", + +765 (*� +this +, +�v� +, +gu�d +. +��t_f�mu�_to_�r�g +(). +c_�r +()); + +767 +R��i� + + gr + = +pickOv�h�d +( +gu�d +, +li�To +); + +768 i�(! + gr +. +is_obvious_�ut�ogy +()) + +769 + gr +; + +771 +R��i� + + gb + = +bounds +; + +772 +R��i� + + gr + = +m�MaxOv�h�d +( +b +, +�v� +); + +773 i�(! + gr +. +is_obvious_�ut�ogy +()) { + +775 +�r�tf +( +DebugF�e +,"Trying�o�emove minMax overhead on guard of�oop %x�t�evel %d: %s\n", + +776 (*� +this +, +�v� +, +gu�d +. +��t_f�mu�_to_�r�g +(). +c_�r +()); + +778 + gr +; + +781 +R��i� + + gr + = +body +-> +f�dOv�h�d +( +li�To +); + +782 i�( + gr +. +is_obvious_�ut�ogy +()) + +783 + gr +; + +797 + gr + = +I����i� +( +r +, +c�y +( +bounds +)); + +799 + gr + = +�oje�_�to_�v�s +( +r +, +�v� +, 0); + +801 + gr + = +Gi� +( +r +, +c�y +( +bounds +), 1); + +804 + gr +; + +807 +CG_�su� + * + gCG_lo� +:: +�compu� +(cڡ +R��i� + & +k +, cڡ R��i� & +r +) { + +808 + gknown + = +c�y +( +k +); + +809 + g��ri�i�s + = +c�y +( +r +); + +813 +bo� + + g�yA�ive + = +�l� +; + +814 + gs + = 1; s <� +isA�ive +. +size +(); s++) + +815 i�( + gisA�ive +[ +s +]) { + +816 i�(! +I����i� +( +c�y +( +��ri�i�s +), + +817 +c�y +( +�oje�ed_nIS +[ +�v� +][ +s +])). +is_u��_bound_�tisf�b� +()) { + +818 + gisA�ive +[ +s +] = 0; + +820 + g�yA�ive + = +�ue +; + +823 i�(! + g�yA�ive +) { + +824 +d��e + + gthis +; + +825 +�w + +CG_nu� +(); + +832 +R��i� + + ghu� + = +Hu� +( +�oje�ed_nIS +[ +�v� +], +isA�ive +, 1, +�ue +, + +833 +c�y +( +��ri�i�s +)); + +834 + ghu� + = +I����i� +( +hu� +, +c�y +( +��ri�i�s +)); + +835 + ghu� +. +sim�ify +(2, 4); + +838 + g�edLo� + = +�ue +; + +839 +EQ_I��t� + + ge + = +hu� +. +s�g�_c�jun� +()-> +EQs +();�;�++) { + +840 i�(!(* + ge +). +has_w�d�rds +(�&& (*e). +g�_c�f +( +hu� +. +�t_v� +( +�v� +)) != 0) { + +841 +�edLo� + = +�l� +; + +842 + gbounds + = +R��i� +:: +True +( +hu� +. +n_�t +()); + +843 + gbounds +. +�d_w�h_EQ +(* +e +); + +844 + gbounds +. +sim�ify +(); + +845 + gbounds +. +c�y_�mes +( +hu� +); + +846 + gbounds +. +�tup_�mes +(); + +852 i�( + g�edLo� +) { + +853 + ghu� + = +Gi� +( +hu� +, +c�y +( +known +), 1); + +854 +R��i� + + gb + = +hu� +; + +856 + gbounds + = +R��i� +( +hu� +. +n_�t +()); + +857 +F_Exi�s + * + g� + = +bounds +. +add_�d +()-> +add_exi�s +(); + +858 +F_And + * + gf_ro� + = +� +-> +add_�d +(); + +861 +bo� + + ghas_u�es�ved_bound + = +�l� +; + +863 +C�jun� + * + gc + = +b +. +s�g�_c�jun� +(); + +864 +V��b�_ID + + gv + = +b +. +�t_v� +( +�v� +); + +865 + g�d +:: +m� + < +V��b�_ID +, + gV��b�_ID + > + gexi�s_m�p�g +; + +866 + g�d +:: +�ack + < +�d +:: +�� +< +GEQ_H�d� +, + gV��b�_ID +> > + g�o�_geq_�ack +; + +867 + g�d +:: +�t + < +V��b�_ID + > +�o�_v�_�t +; + +870 +GEQ_I��t� + +gi +( +c +); + ggi +; gi++) + +871 i�((* + ggi +). +g�_c�f +( +v +) != 0) { + +872 +bo� + +is_��_of_bound + = +�ue +; + +873 +GEQ_H�d� + + gh2 +; + +874 +Cڡr_V�s_I�r + +cvi +(* +gi +, +�ue +); + gcvi +; cvi++) + +875 i�(! +f�dFlo�I�qu��y +( +b +, +cvi +. +cu�_v� +(), +h2 +, +v +)) { + +876 + ghas_u�es�ved_bound + = +�ue +; + +877 + gis_��_of_bound + = +�l� +; + +880 i�(! + gis_��_of_bound +) + +883 +GEQ_H�d� + + gh + = +f_ro� +-> +add_GEQ +(); + +884 +Cڡr_V�s_I�r + +cvi +(* +gi +); + gcvi +; cvi++) { + +885 +V��b�_ID + + gv2 + = +cvi +. +cu�_v� +(); + +886 + gv2 +-> +k�d +()) { + +887 + gI�ut_V� +: { + +888 +pos + = +v2 +-> +g�_pos�i� +(); + +889 + gh +. +upd�e_c�f +( +bounds +. +�t_v� +( +pos +), +cvi +. +cu�_c�f +()); + +892 + gExi�s_V� +: + +893 +W�d�rd_V� +: { + +894 +�d +:: +m� +< +V��b�_ID +, + gV��b�_ID +>:: +���� + +p + = + +895 +exi�s_m�p�g +. +f�d +( +v2 +); + +896 +V��b�_ID + + ge +; + +897 i�( + gp + =� +exi�s_m�p�g +. +�d +()) { + +898 +e + = +� +-> +de��e +(); + +899 + gexi�s_m�p�g +[ +v2 +] = +e +; + +901 + ge + = (* +p +). +�c�d +; + +902 + gh +. +upd�e_c�f +( +e +, +cvi +. +cu�_c�f +()); + +904 i�( + g�o�_v�_�t +. +f�d +( +v2 +�=� +�o�_v�_�t +. +�d +()) { + +905 +f�dFlo�I�qu��y +( +b +, +v2 +, +h2 +, +v +); + +906 + g�o�_geq_�ack +. +push +( +�d +:: +make_�� +( +h2 +, +v2 +)); + +907 + g�o�_v�_�t +. +��� +( +v2 +); + +911 + gGlob�_V� +: { + +912 +Glob�_V�_ID + +g + = +v2 +-> +g�_glob�_v� +(); + +913 +V��b�_ID + + gv3 +; + +914 i�( + gg +-> +��y +() == 0) + +915 +v3 + = +bounds +. +g�_lo�l +( +g +); + +917 + gv3 + = +bounds +. +g�_lo�l +( +g +, +v2 +-> +fun�i�_of +()); + +918 + gh +. +upd�e_c�f +( +v3 +, +cvi +. +cu�_c�f +()); + +922 +as�� +(0); + +925 + gh +. +upd�e_cڡ +((* +gi +). +g�_cڡ +()); + +929 ! + g�o�_geq_�ack +. +em�y +()) { + +930 + g�d +:: +�� + < +GEQ_H�d� +, + gV��b�_ID + > + gp + = +�o�_geq_�ack +. +t� +(); + +931 + g�o�_geq_�ack +. +p� +(); + +933 +GEQ_H�d� + + gh1 + = +f_ro� +-> +add_GEQ +(); + +934 +GEQ_H�d� + + gh2 + = +f_ro� +-> +add_GEQ +(); + +935 +Cڡr_V�s_I�r + +cvi +( +p +. +f�� +); + gcvi +; cvi++) { + +936 +V��b�_ID + + gv2 + = (* +cvi +). +v� +; + +937 + gv2 +-> +k�d +()) { + +938 + gI�ut_V� +: { + +939 +pos + = +v2 +-> +g�_pos�i� +(); + +940 + gh1 +. +upd�e_c�f +( +bounds +. +�put_v� +( +pos +), +cvi +. +cu�_c�f +()); + +941 + gh2 +. +upd�e_c�f +( +bounds +. +�put_v� +( +pos +), - +cvi +. +cu�_c�f +()); + +944 + gExi�s_V� +: + +945 +W�d�rd_V� +: { + +946 +�d +:: +m� +< +V��b�_ID +, + gV��b�_ID +>:: +���� + +p2 + = + +947 +exi�s_m�p�g +. +f�d +( +v2 +); + +948 +V��b�_ID + + ge +; + +949 i�( + gp2 + =� +exi�s_m�p�g +. +�d +()) { + +950 +e + = +� +-> +de��e +(); + +951 + gexi�s_m�p�g +[ +v2 +] = +e +; + +953 + ge + = (* +p2 +). +�c�d +; + +954 + gh1 +. +upd�e_c�f +( +e +, +cvi +. +cu�_c�f +()); + +955 + gh2 +. +upd�e_c�f +( +e +, - +cvi +. +cu�_c�f +()); + +957 i�( + g�o�_v�_�t +. +f�d +( +v2 +�=� +�o�_v�_�t +. +�d +()) { + +958 +GEQ_H�d� + +h3 +; + +959 +f�dFlo�I�qu��y +( +b +, +v2 +, +h3 +, +v +); + +960 + g�o�_geq_�ack +. +push +( +�d +:: +make_�� +( +h3 +, +v2 +)); + +961 + g�o�_v�_�t +. +��� +( +v2 +); + +965 + gGlob�_V� +: { + +966 +Glob�_V�_ID + +g + = +v2 +-> +g�_glob�_v� +(); + +967 +V��b�_ID + + gv3 +; + +968 i�( + gg +-> +��y +() == 0) + +969 +v3 + = +bounds +. +g�_lo�l +( +g +); + +971 + gv3 + = +bounds +. +g�_lo�l +( +g +, +v2 +-> +fun�i�_of +()); + +972 + gh1 +. +upd�e_c�f +( +v3 +, +cvi +. +cu�_c�f +()); + +973 + gh2 +. +upd�e_c�f +( +v3 +, - +cvi +. +cu�_c�f +()); + +977 +as�� +(0); + +980 + gh1 +. +upd�e_cڡ +( +p +. +f�� +. +g�_cڡ +()); + +981 + gh2 +. +upd�e_cڡ +(- +p +. +f�� +. +g�_cڡ +()); + +982 + gh2 +. +upd�e_cڡ +(- +p +. +f�� +. +g�_c�f +�. +�c�d +) - 1); + +985 i�( + ghas_u�es�ved_bound +) { + +986 + gb + = +A�roxim�e +( +b +); + +987 + gb +. +sim�ify +(); + +988 + gc + = +b +. +s�g�_c�jun� +(); + +990 +GEQ_I��t� + +gi +( +c +); + ggi +; gi++) + +991 i�((* + ggi +). +g�_c�f +( +v +) != 0) + +992 +f_ro� +-> +add_GEQ +(* +gi +); + +996 +R��i� + + gthe_gcs + = +g��e�_comm�_�� +( +�oje�ed_nIS +[ +�v� +], +isA�ive +, + +997 +�v� +, +known +); + +998 + gbounds + = +I����i� +( +bounds +, +c�y +( +the_gcs +)); + +999 + gbounds +. +sim�ify +(); + +1000 + gbounds +. +c�y_�mes +( +hu� +); + +1001 + gbounds +. +�tup_�mes +(); + +1005 i�( + g�edLo� +) { + +1006 + ggu�d + = +Gi� +( +c�y +( +hu� +), c�y( +bounds +)); + +1007 + ggu�d + = +Proje� +( +gu�d +, gu�d. +�t_v� +( +�v� +)); + +1008 + ggu�d + = +Gi� +( +gu�d +, +c�y +( +known +)); + +1009 + ggu�d +. +sim�ify +(); + +1014 + ggu�d + = +R��i� +:: +True +( +hu� +. +n_�t +()); + +1016 + ggu�d +. +c�y_�mes +( +hu� +); + +1017 + ggu�d +. +�tup_�mes +(); + +1020 +R��i� + + g�f��d + = +I����i� +( +c�y +( +bounds +), c�y( +gu�d +)); + +1021 + g�f��d +. +sim�ify +(); + +1022 +R��i� + + g�w_known + = +I����i� +( +c�y +( +known +), c�y( +�f��d +)); + +1023 + g�w_known +. +sim�ify +(); + +1024 +R��i� + + g�w_��ri�i�s + = +I����i� +( +c�y +( +��ri�i�s +), + +1025 +c�y +( +�f��d +)); + +1026 + g�w_��ri�i�s +. +sim�ify +(); + +1027 + gbody + = +body +-> +�compu� +( +�w_known +, +�w_��ri�i�s +); + +1028 + gthis +; + +1031 +R��i� + + gCG_lo� +:: +hoi�Gu�d +() { + +1032 +R��i� + +r + = +body +-> +hoi�Gu�d +(); + +1033 i�(! + gr +. +is_obvious_�ut�ogy +()) { + +1035 +bo� + + g��� + = +�l� +; + +1036 +DNF_I��t� + +di +( +r +. +qu�y_DNF +()); + gdi +; di++) { + +1037 +GEQ_I��t� + +gi +((* +di +)-> +GEQs +()); + ggi +; gi++) + +1038 i�((* + ggi +). +g�_c�f +( +r +. +�t_v� +( +�v� +)) != 0) { + +1039 +��� + = +�ue +; + +1042 i�( + g��� +) + +1045 +EQ_I��t� + +ei +((* +di +)-> +EQs +()); + gei +;�i++) + +1046 i�((* + gei +). +g�_c�f +( +r +. +�t_v� +( +�v� +)) != 0) { + +1047 +��� + = +�ue +; + +1050 i�( + g��� +) + +1054 i�(! + g��� +) { + +1055 + gbody +-> +�moveGu�d +(); + +1056 + ggu�d + = +I����i� +( +gu�d +, +r +); + +1062 i�( + g�edLo� +) + +1063 + gR��i� +:: +True +( +bounds +. +n_�t +()); + +1065 + ggu�d +; + + @CG_roseBuilder.cc + +15 + ~<�ack +> + +16 + ~<code_g�/CG_ro�Bu�d�.h +> + +17 + ~<�r�g +> + +19 + g�_�r� +: +public + +�d +:: +ru�ime_�r� + { + +20 +�_�r� +(cڡ +�d +:: +�r�g + & +msg +) : + +21 +�d +:: +ru�ime_�r� +( +msg +) { + +25 +us�g + +�me�a� + + gSageBu�d� +; + +26 +us�g + +�me�a� + + gSageI���� +; + +27 +us�g + +�me�a� + + gOmpSu��t +; + +29 +�me�a� + + gomega + { + +34 * + gk_ocg_comm�t +; + +52 + gCG_ro�Bu�d� +:: +CG_ro�Bu�d� +( +SgGlob� +* +glob� +, SgGlob�* +f��Sc�e +, + +53 +SgSymb�Tab� +* +sym�b +, SgSymb�Tab�* +sym�b2 +, +SgNode +* +ro� +) : + +54 +glob�_ +( +glob� +), +glob�_sc�e +( +f��Sc�e +), +sym�b_ +( +sym�b +), +sym�b2_ +( + +55 +sym�b2 +), +ro�_ +( +ro� +) { + +58 + gCG_ro�Bu�d� +::~ +CG_ro�Bu�d� +() { + +64 +CG_ou�utR�r +* +CG_ro�Bu�d� +:: +C��eP��H�d� +(, CG_ou�utR��* +�mt +, + +65 +Tu�e +< +CG_ou�utR�r +*> & +funcLi� +, Tu�e< +�d +:: +�r�g +> & +lo�_v�s +) const { + +67 +SgS��m�tP�Li� +* +li� + = +��ic_�� +< +CG_ro�R�r + *>( +�mt +)-> +li�_ +; + +68 +SgNode + * + g�l +; + +69 +SgS��m�t +* + g��em�t +; + +70 i�( + gli� + !� +NULL +) { + +73 +d��e + +�mt +; + +74 + gi + = 1; i <� +funcLi� +. +size +(); i++) { + +76 i�(( + gfuncLi� +[ +i +] =� +NULL +�&& (�< +funcLi� +. +size +())) + +78 i�(( + gfuncLi� +[ +i +] =� +NULL +�&& (�=� +funcLi� +. +size +())) + +81 +CG_ro�R�r + * + g�� + = +��ic_�� +<CG_ro�R�r*>( +funcLi� +[ +i +]); + +82 +SgEx�essi� +* + g� + = +�� +-> +�_ +; + +84 + gSgS��m�tP�Li� +:: +���� + +� + = (* +li� +). +beg� +(); + +85 + g� + !�(* +li� +). +�d +(); it++) { + +86 + g��em�t + = (* +� +); + +87 + g�l + = +isSgNode +( +��em�t +); + +91 + gj +; + +92 + gn�_�_sym�b_ +; + +94 + gn�_�_sym�b_ + = 0; + +96 +SgV��b�Symb� + * + gvs + = +sym�b_ +-> +f�d_v��b� +( + +97 +SgName +( +lo�_v�s +[ +i +]. +c_�r +())); + +99 i�( + gvs + =� +NULL +) { + +101 +n�_�_sym�b_ + = 1; + +103 + gvs + = +sym�b2_ +-> +f�d_v��b� +( +SgName +( +lo�_v�s +[ +i +]. +c_�r +())); + +105 i�( + gvs + !� +NULL +) { + +109 +�d +:: +ve�� +< +SgV�RefExp + *> +��y + = +sub��u� +( +�l +, + +110 (cڡ +SgV��b�Symb� +*� +vs +, +� +, +ro�_ +); + +111 + g�d +:: +ve�� +< +SgV�RefExp + *>:: +���� + +� + = + +112 +��y +. +beg� +(); + g� + !�y. +�d +(); it++) { + +115 i�( +isSgV�RefExp +( +� +)) { + +116 i�( +�rcmp +( + +117 +isSgV�RefExp +( +� +)-> +g�_symb� +()-> +g�_�me +(). +g�S��g +(). +c_�r +(), + +118 +vs +-> +g�_�me +(). +g�S��g +(). +c_�r +())) { + +120 (* + g� +)-> +�t_symb� +( + +121 +isSgV�RefExp +( +� +)-> +g�_symb� +()); + +127 } i�( +isSgEx�essi� +( +� +)) { + +129 i�( +isSgB��yOp +((* +� +)-> +g�_��� +())) + +130 +isSgB��yOp +((* +� +)-> +g�_��� +())-> +��a�_ex�essi� +( + +131 * +� +, +� +); + +143 +d��e + + g�� +; + +144 + gfuncLi� +[ +i +] = +NULL +; + +146 i�( + gfuncLi� +[ +i +] !� +NULL +) + +147 +throw + +�_�r� +("not freed�roperly"); + +151 +�w + +CG_ro�R�r +( +li� +); + +154 + g�l + = +��ic_�� +< +CG_ro�R�r + *>( +�mt +)-> +�l_ +; + +157 i�( + g�l + =� +NULL +) + +158 +throw + +�_�r� +("both�ist�nd�nl�re�ull!!"); + +160 +d��e + + g�mt +; + +161 + gj +; + +162 + gn�_�_sym�b_ +; + +163 + gi + = 1; i <� +funcLi� +. +size +(); i++) { + +164 + gn�_�_sym�b_ + = 0; + +166 i�(( + gfuncLi� +[ +i +] =� +NULL +�&& (�< +funcLi� +. +size +())) + +168 i�(( + gfuncLi� +[ +i +] =� +NULL +�&& (�=� +funcLi� +. +size +())) + +171 +CG_ro�R�r + * + g�� + = +��ic_�� +<CG_ro�R�r*>( +funcLi� +[ +i +]); + +172 +SgEx�essi� +* + g� + = +�� +-> +�_ +; + +173 +d��e + + g�� +; + +174 + gfuncLi� +[ +i +] = +NULL +; + +176 +SgV��b�Symb� + * + gvs + = +sym�b_ +-> +f�d_v��b� +( + +177 +SgName +( +lo�_v�s +[ +i +]. +c_�r +())); + +179 i�( + gvs + =� +NULL +) { + +181 +n�_�_sym�b_ + = 1; + +183 + gvs + = +sym�b2_ +-> +f�d_v��b� +( +SgName +( +lo�_v�s +[ +i +]. +c_�r +())); + +185 i�( + gvs + !� +NULL +) { + +188 +�d +:: +ve�� +< +SgV�RefExp + *> +��y + = +sub��u� +( +�l +, +vs +, +� +, + +189 +ro�_ +); + +191 i�( + gn�_�_sym�b_ + && +isSgV�RefExp +( +� +)) { + +192 i�( +�rcmp +( + +193 +isSgV�RefExp +( +� +)-> +g�_symb� +()-> +g�_�me +(). +g�S��g +(). +c_�r +(), + +194 +vs +-> +g�_�me +(). +g�S��g +(). +c_�r +())) { + +205 + g�d +:: +ve�� +< +SgV�RefExp + *>:: +���� + +j + = +��y +. +beg� +(); + +206 + gj + !� +��y +. +�d +(); j++) { + +209 i�( +isSgV�RefExp +( +� +)) { + +210 i�( +�rcmp +( + +211 +isSgV�RefExp +( +� +)-> +g�_symb� +()-> +g�_�me +(). +g�S��g +(). +c_�r +(), + +212 +vs +-> +g�_�me +(). +g�S��g +(). +c_�r +())) { + +213 (* + gj +)-> +�t_symb� +( +isSgV�RefExp +( +� +)-> +g�_symb� +()); + +218 } i�( +isSgEx�essi� +( +� +)) { + +220 i�( +isSgB��yOp +((* +j +)-> +g�_��� +())) + +221 +isSgB��yOp +((* +j +)-> +g�_��� +())-> +��a�_ex�essi� +( + +222 * +j +, +� +); + +297 +�w + +CG_ro�R�r +( +�l +); + +305 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eAssignm�t +(, CG_ou�utR��* +lhs +, + +306 +CG_ou�utR�r + * +rhs +) const { + +307 i�( + glhs + =� +NULL + || +rhs + == NULL) { + +308 +�r�tf +( +�d�r +, "Code generation: Missing�hs or�hs\n"); + +309 + gNULL +; + +312 +SgEx�essi� +* + g�c + = +��ic_�� +< +CG_ro�R�r +*>( +rhs +)-> +�_ +; + +313 +SgEx�essi� +* + gd� + = +��ic_�� +< +CG_ro�R�r +*>( +lhs +)-> +�_ +; + +315 +SgEx�S��m�t +* + g�s + = +bu�dAssignS��m�t +( +d� +, +�c +); + +316 + g�c +-> +�t_��� +( +�s +); + +317 + gd� +-> +�t_��� +( +�s +); + +319 +SgS��m�tP�Li� +* + g�w_li� + = +�w + SgStatementPtrList; + +321 (* + g�w_li� +). +push_back +( +isSgS��m�t +( +�s +)); + +323 +d��e + + glhs +; + +324 +d��e + + grhs +; + +326 +�w + +CG_ro�R�r +( +�w_li� +); + +333 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eInvoke +(cڡ +�d +:: +�r�g + & +�ame +, + +334 +Tu�e +< +CG_ou�utR�r +*> & +li� +) const { + +336 i�( + g�ame + =� +�d +:: +�r�g +("max"�|| +�ame + == std::string("min")) { + +337 i�( +li� +. +size +() == 0) { + +338 +NULL +; + +339 } i�( + gli� +. +size +() == 1) { + +340 +li� +[1]; + +342 + gϡ + = +li� +. +size +(); + +343 +SgEx�essi� +* + g�2 + = +��ic_�� +< +CG_ro�R�r +*>( +li� +[ +ϡ +])-> +�_ +; + +344 +d��e + + gli� +[ +ϡ +]; + +345 + gli� +. +d��e_ϡ +(); + +346 +CG_ro�R�r + * + g�� + = +��ic_�� +<CG_ro�R�r*>( +C��eInvoke +( +�ame +, + +347 +li� +)); + +348 +SgEx�essi� +* + g�1 + = +�� +-> +�_ +; + +350 +SgEx�essi� + * + g�s +; + +351 +SgEx�Li�Exp +* + g�g_li� + = +bu�dEx�Li�Exp +(); + +352 +��ndEx�essi� +( +�g_li� +, +�1 +); + +353 +��ndEx�essi� +( +�g_li� +, +�2 +); + +354 +SgV�RefExp +* + g�aque_v� +; + +356 i�( + g�ame + =� +�d +:: +�r�g +("max")) { + +357 +�aque_v� + = +bu�dO�queV�RefExp +("__ro�_gt", +glob�_ +); + +358 + g�s + = +isSgEx�essi� +( + +359 +bu�dFun�i�C�lExp +( +�aque_v� +, +�g_li� +)); + +362 + g�aque_v� + = +bu�dO�queV�RefExp +("__ro�_�", +glob�_ +); + +363 + g�s + = +isSgEx�essi� +( + +364 +bu�dFun�i�C�lExp +( +�aque_v� +, +�g_li� +)); + +366 + g�� +-> + g�_ + = +�s +; + +368 + g�� +; + +371 +�r�tf +( +�d�r +, + +373 + gNULL +; + +381 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eComm�t +(, + +382 cڡ +�d +:: +�r�g + & +comm�tText +) const { + +383 i�( +comm�tText + =� +�d +:: +�r�g +("")) { + +384 +NULL +; + +387 +SgLo��dNode + * + g�l + = +�w + SgLocatedNode(); + +388 +bu�dComm�t +( +�l +, "//omega_comm�t: " + +comm�tText +); + +390 +�w + +CG_ro�R�r +( +isSgNode +( +�l +)); + +397 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eIf +(, CG_ou�utR��* +gu�dLi� +, + +398 +CG_ou�utR�r + * +�ue_�mtLi� +, CG_ou�utR��* +�l�_�mtLi� +) const { + +404 i�( + g�ue_�mtLi� + =� +NULL + && +�l�_�mtLi� + == NULL) { + +405 +d��e + +gu�dLi� +; + +406 + gNULL +; + +407 } i�( + ggu�dLi� + =� +NULL +) { + +408 +StmtLi�A��d +( +�ue_�mtLi� +, +�l�_�mtLi� +); + +411 +SgEx�essi� +* + gh�d� + = +��ic_�� +< +CG_ro�R�r +*>( +gu�dLi� +)-> +�_ +; + +413 +SgS��m�tP�Li� + * + gth�_��1 +, * + g��_��1 +; + +414 +SgS��m�t +* + gth�_�� +; + +415 +SgS��m�t +* + g��_�� +; + +416 +SgBasicBlock +* + gth�_��2 +; + +417 +SgBasicBlock +* + g��_��2 +; + +418 i�( + g�ue_�mtLi� + !� +NULL +) { + +419 +th�_��1 + = +��ic_�� +< +CG_ro�R�r +*>( +�ue_�mtLi� +)-> +li�_ +; + +420 i�( + gth�_��1 + !� +NULL +) { + +421 +th�_�� + = *((* +th�_��1 +). +beg� +()); + +423 i�((* + gth�_��1 +). +size +() > 1) { + +424 + gth�_��2 + = +bu�dBasicBlock +(); + +425 + gSgS��m�tP�Li� +:: +���� + +� + = (* +th�_��1 +). +beg� +(); + +426 + g� + !�(* +th�_��1 +). +�d +(); it++) { + +427 + gth�_��2 +-> +��nd_��em�t +(* +� +); + +430 + gth�_�� + = +isSgS��m�t +( +th�_��2 +); + +434 + gth�_�� + = +isSgS��m�t +( + +435 +��ic_�� +< +CG_ro�R�r +*>( +�ue_�mtLi� +)-> +�l_ +); + +437 + gth�_�� + = +NULL +; + +439 i�( + g�l�_�mtLi� + !� +NULL +) { + +440 +��_��1 + = +��ic_�� +< +CG_ro�R�r +*>( +�l�_�mtLi� +)-> +li�_ +; + +441 i�( + g��_��1 + !� +NULL +) { + +442 +��_�� + = *((* +��_��1 +). +beg� +()); + +443 i�((* + g��_��1 +). +size +() > 1) { + +444 + g��_��2 + = +bu�dBasicBlock +(); + +445 + gSgS��m�tP�Li� +:: +���� + +�2 + = (* +��_��1 +). +beg� +(); + +446 + g�2 + !�(* +��_��1 +). +�d +(); it2++) { + +447 + g��_��2 +-> +��nd_��em�t +(* +�2 +); + +450 + g��_�� + = +isSgS��m�t +( +��_��2 +); + +454 + g��_�� + = +isSgS��m�t +( + +455 +��ic_�� +< +CG_ro�R�r +*>( +�l�_�mtLi� +)-> +�l_ +); + +457 + g��_�� + = +NULL +; + +460 +SgIfStmt +* + gti + = +bu�dIfStmt +( +h�d� +, +isSgS��m�t +( +th�_�� +), + +461 +isSgS��m�t +( +��_�� +)); + +468 +d��e + + ggu�dLi� +; + +469 +d��e + + g�ue_�mtLi� +; + +470 +d��e + + g�l�_�mtLi� +; + +472 +�w + +CG_ro�R�r +( +isSgNode +( +ti +)); + +479 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eIndu�ive +(CG_ou�utR��* +�dex +, + +480 +CG_ou�utR�r + * +low� +, CG_ou�utR��* +u�� +, CG_ou�utR��* +�� +) const { + +482 i�( + g�dex + =� +NULL + || +low� + =�NULL || +u�� + == NULL) { + +483 +�r�tf +( +�d�r +, + +485 + gNULL +; + +488 i�( + g�� + =� +NULL +) + +489 +�� + = +�w + +CG_ro�R�r +( +isSgEx�essi� +( +bu�dI�V� +(1))); + +491 +SgV�RefExp + * + g�dex_sym + = +isSgV�RefExp +( + +492 +��ic_�� +< +CG_ro�R�r +*>( +�dex +)-> +�_ +); + +493 +SgEx�essi� +* + glow�_bound + = +��ic_�� +< +CG_ro�R�r +*>( +low� +)-> +�_ +; + +494 +SgEx�essi� +* + gu��_bound + = +��ic_�� +< +CG_ro�R�r +*>( +u�� +)-> +�_ +; + +495 +SgEx�essi� +* + g��_size + = +��ic_�� +< +CG_ro�R�r +*>( +�� +)-> +�_ +; + +501 +SgS��m�t +* + gf�_��_�mt + = +bu�dAssignS��m�t +( +�dex_sym +, +low�_bound +); + +502 +SgLessOrEqu�Op +* + gc�d + = +bu�dLessOrEqu�Op +( +�dex_sym +, +u��_bound +); + +503 +SgEx�S��m�t +* + g�� + = +bu�dEx�S��m�t +( +c�d +); + +504 +SgPlusAssignOp +* + g��em�t + = +bu�dPlusAssignOp +( +�dex_sym +, +��_size +); + +505 +SgF�S��m�t + * + gf�_�mt + = +bu�dF�S��m�t +( +f�_��_�mt +, + +506 +isSgS��m�t +( +�� +), +��em�t +, +NULL +); + +508 +d��e + + g�dex +; + +509 +d��e + + glow� +; + +510 +d��e + + gu�� +; + +511 +d��e + + g�� +; + +513 +�w + +CG_ro�R�r +( +isSgNode +( +f�_�mt +)); + +520 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eA�ribu� +(CG_ou�utR��* +cڌ� +, + +521 cڡ +�d +:: +�r�g + & +comm�tText +) const { + +523 +SgNode + * +�l + = +��ic_�� +< +CG_ro�R�r +*>( +cڌ� +)-> +�l_ +; + +525 + g�l +-> +�tA�ribu� +("omega_comm�t", +�w + +A�TextA�ribu� +( +comm�tText +)); + +527 + g��ic_�� +< + gCG_ro�R�r +*>( + gcڌ� +); + +534 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eLo� +(, CG_ou�utR��* +cڌ� +, + +535 +CG_ou�utR�r + * +�mtLi� +) const { + +536 i�( + g�mtLi� + =� +NULL +) { + +537 +d��e + +cڌ� +; + +538 + gNULL +; + +539 } i�( + gcڌ� + =� +NULL +) { + +540 +�r�tf +( +�d�r +, "Code generation:�o inductive for�his�oop\n"); + +541 + g�mtLi� +; + +544 +SgNode + * + g�l + = +��ic_�� +< +CG_ro�R�r +*>( +cڌ� +)-> +�l_ +; + +545 +SgF�S��m�t + * + gtf + = +isSgF�S��m�t +( +�l +); + +547 +SgS��m�tP�Li� + * + gbody + = +��ic_�� +< +CG_ro�R�r +*>( +�mtLi� +)-> +li�_ +; + +549 i�( + gbody + !� +NULL +) { + +550 i�(!((* +body +). +em�y +())) { + +551 i�((* +body +). +size +() == 1) { + +553 +tf +-> +�t_lo�_body +(*((* +body +). +beg� +())); + +554 (*((* + gbody +). +beg� +()))-> +�t_��� +( +tf +); + +564 +SgBasicBlock +* + gbb + = +bu�dBasicBlock +(); + +565 + gbb +-> +�t_��� +( +tf +); + +566 + gSgS��m�tP�Li� +:: +���� + +� + = (* +body +). +beg� +(); + +567 + g� + !�(* +body +). +�d +(); it++) { + +568 + gbb +-> +��nd_��em�t +(* +� +); + +569 (* + g� +)-> +�t_��� +( +bb +); + +571 + gtf +-> +�t_lo�_body +( +bb +); + +576 +SgNode +* + g�l2 + = +��ic_�� +< +CG_ro�R�r +*>( +�mtLi� +)-> +�l_ +; + +578 i�( + g�l2 + !� +NULL +) { + +579 +tf +-> +�t_lo�_body +( +isSgS��m�t +( +�l2 +)); + +580 + g�l2 +-> +�t_��� +( +tf +); + +584 +d��e + + g�mtLi� +; + +586 + gcڌ� +; + +592 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eI� +( +_i +) const { + +593 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +bu�dI�V� +( +_i +))); + +596 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eId�t +(cڡ +�d +:: +�r�g + & +_s +) const { + +598 +SgV��b�Symb� + * +vs + = +sym�b_ +-> +f�d_v��b� +( +SgName +( +_s +. +c_�r +())); + +599 +SgV��b�Symb� + * + gvs2 + = +sym�b2_ +-> +f�d_v��b� +( +SgName +( +_s +. +c_�r +())); + +601 i�( + gvs + =� +NULL + && +vs2 + == NULL) { + +603 +SgV��b�De���i� +* +de� + = +bu�dV��b�De���i� +( + +604 +SgName +( +_s +. +c_�r +()), +bu�dI�Ty� +()); + +605 + gSgIn��lizedNameP�Li� +& + gv��b�s + = +de� +-> +g�_v��b�s +(); + +606 + gSgIn��lizedNameP�Li� +:: +cڡ_���� + +i + = +v��b�s +. +beg� +(); + +607 +SgIn��lizedName +* + g���lizedName + = * +i +; + +608 + gvs + = +�w + +SgV��b�Symb� +( +���lizedName +); + +609 +���dS��m�t +( +de� +, +isSgSc�eS��m�t +( +ro�_ +)); + +611 + gvs +-> +�t_��� +( +sym�b2_ +); + +612 + gsym�b2_ +-> +��� +( +SgName +( +_s +. +c_�r +()), +vs +); + +613 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +bu�dV�RefExp +( +vs +))); + +619 i�(! +isSgEx�essi� +( +bu�dV�RefExp +( +SgName +( +_s +. +c_�r +())))) + +620 +throw + +�_�r� +("error in Create ident!!"); + +621 i�( + gvs2 + !� +NULL +) + +622 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +bu�dV�RefExp +( +vs2 +))); + +624 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +bu�dV�RefExp +( +vs +))); + +631 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��ePlus +(CG_ou�utR��* +l� +, + +632 +CG_ou�utR�r + * +r� +) const { + +633 i�( + gr� + =� +NULL +) { + +634 +l� +; + +635 } i�( + gl� + =� +NULL +) { + +636 +r� +; + +639 +SgEx�essi� +* + g�1 + = +��ic_�� +< +CG_ro�R�r +*>( +l� +)-> +�_ +; + +640 +SgEx�essi� +* + g�2 + = +��ic_�� +< +CG_ro�R�r +*>( +r� +)-> +�_ +; + +642 +SgAddOp + * + g�s + = +bu�dAddOp +( +�1 +, +�2 +); + +643 + g�1 +-> +�t_��� +( +�s +); + +644 + g�2 +-> +�t_��� +( +�s +); + +645 +d��e + + gl� +; + +646 +d��e + + gr� +; + +648 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +�s +)); + +652 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eM�us +(CG_ou�utR��* +l� +, + +653 +CG_ou�utR�r + * +r� +) const { + +654 i�( + gr� + =� +NULL +) { + +655 +l� +; + +656 } i�( + gl� + =� +NULL +) { + +657 +SgEx�essi� + * +� + = +��ic_�� +< +CG_ro�R�r +*>( +r� +)-> +�_ +; + +658 +SgM�usOp + * + g�s + = +bu�dM�usOp +( +� +); + +660 +d��e + + gr� +; + +662 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +�s +)); + +664 +SgEx�essi� +* + g�1 + = +��ic_�� +< +CG_ro�R�r +*>( +l� +)-> +�_ +; + +665 +SgEx�essi� +* + g�2 + = +��ic_�� +< +CG_ro�R�r +*>( +r� +)-> +�_ +; + +667 +SgSub�a�Op + * + g�s + = +bu�dSub�a�Op +( +�1 +, +�2 +); + +668 + g�1 +-> +�t_��� +( +�s +); + +669 + g�2 +-> +�t_��� +( +�s +); + +670 +d��e + + gl� +; + +671 +d��e + + gr� +; + +672 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +�s +)); + +677 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eTimes +(CG_ou�utR��* +l� +, + +678 +CG_ou�utR�r + * +r� +) const { + +679 i�( + gr� + =� +NULL + || +l� + == NULL) { + +680 i�( +r� + !� +NULL +) { + +681 +r� +-> +��r +(); + +682 +d��e + + gr� +; + +684 i�( + gl� + !� +NULL +) { + +685 +l� +-> +��r +(); + +686 +d��e + + gl� +; + +688 + gNULL +; + +691 +SgEx�essi� +* + g�1 + = +��ic_�� +< +CG_ro�R�r +*>( +l� +)-> +�_ +; + +692 +SgEx�essi� +* + g�2 + = +��ic_�� +< +CG_ro�R�r +*>( +r� +)-> +�_ +; + +694 +SgMuɝlyOp + * + g�s + = +bu�dMuɝlyOp +( +�1 +, +�2 +); + +695 + g�1 +-> +�t_��� +( +�s +); + +696 + g�2 +-> +�t_��� +( +�s +); + +697 +d��e + + gl� +; + +698 +d��e + + gr� +; + +700 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +�s +)); + +704 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eI�eg�Divide +(CG_ou�utR��* +l� +, + +705 +CG_ou�utR�r + * +r� +) const { + +706 i�( + gr� + =� +NULL +) { + +707 +�r�tf +( +�d�r +, "Code generation: divide by NULL\n"); + +708 + gNULL +; + +709 } i�( + gl� + =� +NULL +) { + +710 +d��e + +r� +; + +711 + gNULL +; + +715 +SgEx�essi� +* + g�1 + = +��ic_�� +< +CG_ro�R�r +*>( +l� +)-> +�_ +; + +716 +SgEx�essi� +* + g�2 + = +��ic_�� +< +CG_ro�R�r +*>( +r� +)-> +�_ +; + +719 +SgDivideOp + * + g�s + = +bu�dDivideOp +( +�1 +, +�2 +); + +721 +d��e + + gl� +; + +722 +d��e + + gr� +; + +724 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +�s +)); + +728 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eI�eg�Mod +(CG_ou�utR��* +l� +, + +729 +CG_ou�utR�r + * +r� +) const { + +730 i�( + gr� + =� +NULL + || +l� + == NULL) { + +731 +NULL +; + +734 +SgEx�essi� +* + g�1 + = +��ic_�� +< +CG_ro�R�r +*>( +l� +)-> +�_ +; + +735 +SgEx�essi� +* + g�2 + = +��ic_�� +< +CG_ro�R�r +*>( +r� +)-> +�_ +; + +738 +SgModOp + * + g�s + = +bu�dModOp +( +�1 +, +�2 +); + +740 +d��e + + gl� +; + +741 +d��e + + gr� +; + +743 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +�s +)); + +750 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eAnd +(CG_ou�utR��* +l� +, + +751 +CG_ou�utR�r + * +r� +) const { + +752 i�( + gr� + =� +NULL + || +l� + == NULL) { + +753 +NULL +; + +756 +SgEx�essi� +* + g�1 + = +��ic_�� +< +CG_ro�R�r +*>( +l� +)-> +�_ +; + +757 +SgEx�essi� +* + g�2 + = +��ic_�� +< +CG_ro�R�r +*>( +r� +)-> +�_ +; + +759 +SgAndOp + * + g�s + = +bu�dAndOp +( +�1 +, +�2 +); + +761 +d��e + + gl� +; + +762 +d��e + + gr� +; + +764 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +�s +)); + +771 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eGE +(CG_ou�utR��* +l� +, + +772 +CG_ou�utR�r + * +r� +) const { + +773 +C��eLE +( +r� +, +l� +); + +776 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eLE +(CG_ou�utR��* +l� +, + +777 +CG_ou�utR�r + * +r� +) const { + +778 i�( + gr� + =� +NULL + || +l� + == NULL) { + +779 +NULL +; + +782 +SgEx�essi� +* + g�1 + = +��ic_�� +< +CG_ro�R�r +*>( +l� +)-> +�_ +; + +783 +SgEx�essi� +* + g�2 + = +��ic_�� +< +CG_ro�R�r +*>( +r� +)-> +�_ +; + +785 +SgLessOrEqu�Op + * + g�s + = +bu�dLessOrEqu�Op +( +�1 +, +�2 +); + +787 +d��e + + gl� +; + +788 +d��e + + gr� +; + +790 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +�s +)); + +794 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eEQ +(CG_ou�utR��* +l� +, + +795 +CG_ou�utR�r + * +r� +) const { + +796 i�( + gr� + =� +NULL + || +l� + == NULL) { + +797 +NULL +; + +800 +SgEx�essi� +* + g�1 + = +��ic_�� +< +CG_ro�R�r +*>( +l� +)-> +�_ +; + +801 +SgEx�essi� +* + g�2 + = +��ic_�� +< +CG_ro�R�r +*>( +r� +)-> +�_ +; + +803 +SgEqu��yOp + * + g�s + = +bu�dEqu��yOp +( +�1 +, +�2 +); + +805 +d��e + + gl� +; + +806 +d��e + + gr� +; + +808 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +�s +)); + +815 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eStmtLi� +(CG_ou�utR��* +s�g�t� +) const { + +819 i�( +s�g�t� + =� +NULL +) { + +820 +�w + +CG_ro�R�r +�ew +SgS��m�tP�Li� +); + +823 +SgS��m�tP�Li� + * + g�l + = +��ic_�� +< +CG_ro�R�r + *>( +s�g�t� +)-> +li�_ +; + +824 +SgNode +* + gsgn + = +��ic_�� +< +CG_ro�R�r + *>( +s�g�t� +)-> +�l_ +; + +826 i�( + g�l + =� +NULL +) + +827 +�l + = +�w + +SgS��m�tP�Li� +; + +829 i�( + gsgn + =� +NULL +) { + +830 +SgEx�essi� +* +� + = +��ic_�� +< +CG_ro�R�r + *>( +s�g�t� +)-> +�_ +; + +832 i�( + g� + !� +NULL +) + +833 (* +�l +). +push_back +( + +834 +bu�dEx�S��m�t +( + +835 +��ic_�� +< +CG_ro�R�r + *>( +s�g�t� +)-> +�_ +)); + +838 (* + g�l +). +push_back +( +isSgS��m�t +( +sgn +)); + +840 +d��e + + gs�g�t� +; + +841 +�w + +CG_ro�R�r +( +�l +); + +850 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +StmtLi�In��La� +(CG_ou�utR��* +li� +, + +851 +CG_ou�utR�r + * +node +) const { + +852 +StmtLi�A��d +( +li� +, +node +); + +855 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +StmtLi�A��d +(CG_ou�utR��* +li�1 +, + +856 +CG_ou�utR�r + * +li�2 +) const { + +858 i�( + gli�2 + =� +NULL +) { + +859 +li�1 +; + +860 } i�( + gli�1 + =� +NULL +) { + +861 +li�2 +; + +868 +SgS��m�tP�Li� +* + g�w_li� +; + +870 +SgS��m�tP�Li� +* + g�l1 + = +��ic_�� +< +CG_ro�R�r + *>( +li�1 +)-> +li�_ +; + +871 +SgS��m�tP�Li� +* + g�l2 + = +��ic_�� +< +CG_ro�R�r + *>( +li�2 +)-> +li�_ +; + +872 +SgNode +* + g�e + = +��ic_�� +< +CG_ro�R�r + *>( +li�1 +)-> +�l_ +; + +873 +SgNode +* + gtwo + = +��ic_�� +< +CG_ro�R�r + *>( +li�2 +)-> +�l_ +; + +875 +SgEx�essi� +* + gexp1 + = +��ic_�� +< +CG_ro�R�r + *>( +li�1 +)-> +�_ +; + +876 +SgEx�essi� +* + gexp2 + = +��ic_�� +< +CG_ro�R�r + *>( +li�2 +)-> +�_ +; + +878 i�( + gexp1 + || + gexp2 +) + +879 +throw + +�_�r� +("error in stmtlistappend!!"); + +895 i�(( + g�l1 + =� +NULL +�&& ( +�l2 + == NULL)) { + +897 i�(( +�e + !� +NULL +�&& ( +two + != NULL)) { + +899 +�w_li� + = +�w + +SgS��m�tP�Li� +; + +901 (* + g�w_li� +). +push_back +( +isSgS��m�t +( +�e +)); + +902 (* + g�w_li� +). +push_back +( +isSgS��m�t +( +two +)); + +904 +CG_ro�R�r +* + g�w_�p + = +�w + CG_ro�R�r( +�w_li� +); + +906 + g��ic_�� +< + gCG_ou�utR�r + *>( + g�w_�p +); + +908 } i�(( + g�e + !� +NULL +�&& ( +two + == NULL)) { + +910 +��ic_�� +< +CG_ou�utR�r + *>( +�w + +CG_ro�R�r +( +�e +)); + +912 } i�(( + gtwo + !� +NULL +�&& ( +�e + == NULL)) { + +913 +��ic_�� +< +CG_ou�utR�r + *>( +�w + +CG_ro�R�r +( +two +)); + +918 i�(( + g�l2 + !� +NULL +�&& ( +�l1 + == NULL)) { + +925 i�( +�e + =� +NULL +) + +926 +li�2 +; + +929 (* + g�l2 +). +push_back +( +isSgS��m�t +( +�e +)); + +931 + g��ic_�� +< + gCG_ou�utR�r + *>( +�w + +CG_ro�R�r +( +�l2 +)); + +933 } i�(( + g�l1 + !� +NULL +�&& ( +�l2 + == NULL)) { + +934 i�( +two + =� +NULL +) + +935 +li�1 +; + +938 (* + g�l1 +). +push_back +( +isSgS��m�t +( +two +)); + +940 + g��ic_�� +< + gCG_ou�utR�r + *>( +�w + +CG_ro�R�r +( +�l1 +)); + +944 } i�(( + g�l1 + !� +NULL +�&& ( +�l2 + != NULL)) { + +946 +SgS��m�tP�Li� +:: +���� + +� + = (* +�l2 +). +beg� +(); + +947 + g� + !�(* +�l2 +). +�d +(); it++) { + +948 (* + g�l1 +). +push_back +(* +� +); + +954 + g��ic_�� +< + gCG_ou�utR�r + *>( +�w + +CG_ro�R�r +( +�l1 +)); + +1002 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eDim3 +(cڡ * +v�Name +, +�g1 +, + +1003 +�g2 +) const { + +1005 +SgName + +ty�_�me +("dim3"); + +1006 +SgC�ssSymb� + * + gty�_symb� + = +glob�_sc�e +-> +lookup_�ass_symb� +( +ty�_�me +); + +1007 +SgC�ssDe���i� + * + gty�_de� + = +isSgC�ssDe���i� +( + +1008 +ty�_symb� +-> +g�_de���i� +()); + +1012 +SgFun�i�Symb� + * + g��_symb� + = +glob�_sc�e +-> +lookup_fun�i�_symb� +( + +1013 +SgName +("dim3")); + +1015 +SgEx�Li�Exp + * + g��_�gs + = +bu�dEx�Li�Exp +( +bu�dI�V� +( +�g1 +), + +1016 +bu�dI�V� +( +�g2 +)); + +1018 +SgFun�i�C�lExp + * + gdim3_func_�� + = +bu�dFun�i�C�lExp +( + +1019 +bu�dFun�i�RefExp +( +��_symb� +-> +g�_de���i� +()), +��_�gs +); + +1021 + gjo�ed_�r +[20]; + +1023 +�r�y +( +jo�ed_�r +, "dim3 "); + +1024 +�r�t +( +jo�ed_�r +, +v�Name +); + +1026 +SgEx�S��m�t +* + gde� + = +bu�dAssignS��m�t +( + +1027 +bu�dO�queV�RefExp +( +jo�ed_�r +, +isSgSc�eS��m�t +( +ro�_ +)), + +1028 +dim3_func_�� +); + +1030 +SgS��m�tP�Li� + * + g�l2 + = +�w + SgStatementPtrList; + +1033 (* + g�l2 +). +push_back +( +de� +); + +1034 +�w + +CG_ro�R�r +( +�l2 +); + +1037 +CG_ou�utR�r +* + gCG_ro�Bu�d� +:: +C��eDim3 +(cڡ * +v�Name +, +�g1 +, + +1038 +�g2 +, +�g3 +) const { + +1040 +SgName + +ty�_�me +("dim3"); + +1041 +SgC�ssSymb� + * + gty�_symb� + = +glob�_sc�e +-> +lookup_�ass_symb� +( +ty�_�me +); + +1042 +SgC�ssDe���i� + * + gty�_de� + = +isSgC�ssDe���i� +( + +1043 +ty�_symb� +-> +g�_de���i� +()); + +1047 +SgFun�i�Symb� + * + g��_symb� + = +glob�_sc�e +-> +lookup_fun�i�_symb� +( + +1048 +SgName +("dim3")); + +1050 +SgEx�Li�Exp + * + g��_�gs + = +bu�dEx�Li�Exp +( +bu�dI�V� +( +�g1 +), + +1051 +bu�dI�V� +( +�g2 +), bu�dI�V�( +�g3 +)); + +1053 +SgFun�i�C�lExp + * + gdim3_func_�� + = +bu�dFun�i�C�lExp +( + +1054 +bu�dFun�i�RefExp +( +��_symb� +-> +g�_de���i� +()), +��_�gs +); + +1056 + gjo�ed_�r +[20]; + +1058 +�r�y +( +jo�ed_�r +, "dim3 "); + +1059 +�r�t +( +jo�ed_�r +, +v�Name +); + +1061 +SgEx�S��m�t +* + gde� + = +bu�dAssignS��m�t +( + +1062 +bu�dO�queV�RefExp +( +jo�ed_�r +, +isSgSc�eS��m�t +( +ro�_ +)), + +1063 +dim3_func_�� +); + +1065 +SgS��m�tP�Li� + * + g�l2 + = +�w + SgStatementPtrList; + +1068 (* + g�l2 +). +push_back +( +de� +); + +1069 +�w + +CG_ro�R�r +( +�l2 +); + +1144 + g�d +:: +ve�� +< +SgV�RefExp + *> +sub��u� +( +SgNode + * +� +, cڡ +SgV��b�Symb� + * +sym +, + +1145 +SgEx�essi� +* +ex� +, +SgNode +* +ro� +) { + +1147 +SgS��m�t +* + g�mt +; + +1148 +SgEx�essi� +* + g� +; + +1149 + g�d +:: +ve�� +< +SgV�RefExp + *> +��ys +; + +1151 i�( + g� + !� +NULL +) { + +1152 i�( +�mt + = +isSgS��m�t +( +� +)) { + +1153 i�( +isSgBasicBlock +( +�mt +)) { + +1154 +SgS��m�tP�Li� +& +�mts + = + +1155 +isSgBasicBlock +( +�mt +)-> +g�_��em�ts +(); + +1156 + gi + = 0; i < + g�mts +. +size +(); i++) { + +1157 + g�mts +[ +i +]-> +�t_��� +( +�mt +); + +1158 + g�d +:: +ve�� +< +SgV�RefExp + *> +a + = +sub��u� +( + +1159 +isSgNode +( +�mts +[ +i +]), +sym +, +ex� +, +ro� +); + +1160 + g�d +:: +c�y +( +a +. +beg� +(),�. +�d +(), +back_���� +( +��ys +)); + +1162 } i�( +isSgF�S��m�t +( +�mt +)) { + +1163 +SgF�S��m�t + * + g�f + = +isSgF�S��m�t +( +�mt +); + +1164 + g�f +-> +g�_f�_��_�mt +()-> +�t_��� +( +�f +); + +1165 + g�f +-> +g�_�� +()-> +�t_��� +( +�f +); + +1166 + g�f +-> +g�_��em�t +()-> +�t_��� +( +�f +); + +1167 + g�f +-> +g�_lo�_body +()-> +�t_��� +( +�f +); + +1168 + g�d +:: +ve�� +< +SgV�RefExp + *> +a + = +sub��u� +( + +1169 +isSgNode +( +�f +-> +g�_f�_��_�mt +()), +sym +, +ex� +, +ro� +); + +1170 + g�d +:: +c�y +( +a +. +beg� +(),�. +�d +(), +back_���� +( +��ys +)); + +1171 + g�d +:: +ve�� +< +SgV�RefExp + *> +a1 + = +sub��u� +( + +1172 +isSgNode +( +�f +-> +g�_�� +()), +sym +, +ex� +, +ro� +); + +1173 + g�d +:: +c�y +( +a1 +. +beg� +(),�1. +�d +(), +back_���� +( +��ys +)); + +1174 + g�d +:: +ve�� +< +SgV�RefExp + *> +a2 + = +sub��u� +( + +1175 +isSgNode +( +�f +-> +g�_��em�t +()), +sym +, +ex� +, +ro� +); + +1176 + g�d +:: +c�y +( +a2 +. +beg� +(),�2. +�d +(), +back_���� +( +��ys +)); + +1177 + g�d +:: +ve�� +< +SgV�RefExp + *> +a3 + = +sub��u� +( + +1178 +isSgNode +( +�f +-> +g�_lo�_body +()), +sym +, +ex� +, +ro� +); + +1179 + g�d +:: +c�y +( +a3 +. +beg� +(),�3. +�d +(), +back_���� +( +��ys +)); + +1188 i�( +isSgV��b�De���i� +( +�mt +)) { + +1189 i�( +SgEx�essi� + * + g�� + = + +1190 +isSgV��b�De���i� +( +�mt +)-> +g�_v��b�s +(). +��t +()-> +g�_���liz� +()) { + +1191 i�( +isSgAssignIn��liz� +( +�� +)) { + +1192 +�d +:: +ve�� +< +SgV�RefExp + *> +a + = +sub��u� +( + +1193 +isSgAssignIn��liz� +( +�� +)-> +g�_ݔ�d +(), +sym +, + +1194 +ex� +, +ro� +); + +1195 + g�d +:: +c�y +( +a +. +beg� +(),�. +�d +(), +back_���� +( +��ys +)); + +1198 } i�( +isSgIfStmt +( +�mt +)) { + +1199 +SgIfStmt +* + g�i + = +isSgIfStmt +( +�mt +); + +1200 + g�i +-> +g�_c�d�iڮ +()-> +�t_��� +( +�i +); + +1201 + g�i +-> +g�_�ue_body +()-> +�t_��� +( +�i +); + +1202 + g�i +-> +g�_�l�_body +()-> +�t_��� +( +�i +); + +1203 + g�d +:: +ve�� +< +SgV�RefExp + *> +a + = +sub��u� +( + +1204 +isSgNode +( +�i +-> +g�_c�d�iڮ +()), +sym +, +ex� +, +ro� +); + +1205 + g�d +:: +c�y +( +a +. +beg� +(),�. +�d +(), +back_���� +( +��ys +)); + +1206 + g�d +:: +ve�� +< +SgV�RefExp + *> +a1 + = +sub��u� +( + +1207 +isSgNode +( +�i +-> +g�_�ue_body +()), +sym +, +ex� +, +ro� +); + +1208 + g�d +:: +c�y +( +a1 +. +beg� +(),�1. +�d +(), +back_���� +( +��ys +)); + +1209 + g�d +:: +ve�� +< +SgV�RefExp + *> +a2 + = +sub��u� +( + +1210 +isSgNode +( +�i +-> +g�_�l�_body +()), +sym +, +ex� +, +ro� +); + +1211 + g�d +:: +c�y +( +a2 +. +beg� +(),�2. +�d +(), +back_���� +( +��ys +)); + +1212 } i�( +isSgEx�S��m�t +( +�mt +)) { + +1213 ( +isSgEx�S��m�t +( +�mt +)-> +g�_ex�essi� +())-> +�t_��� +( + +1214 +isSgEx�S��m�t +( +�mt +)); + +1215 + g�d +:: +ve�� +< +SgV�RefExp + *> +a + = +sub��u� +( + +1216 +isSgNode +( +isSgEx�S��m�t +( +�mt +)-> +g�_ex�essi� +()), + +1217 +sym +, +ex� +, +ro� +); + +1218 + g�d +:: +c�y +( +a +. +beg� +(),�. +�d +(), +back_���� +( +��ys +)); + +1222 + g� + = +isSgEx�essi� +( +� +); + +1224 + g�d +:: +�r�g + +y + = +sym +-> +g�_�me +(). +g�S��g +(); + +1226 i�( +isSgB��yOp +( +� +)) { + +1228 +isSgB��yOp +( +� +)-> +g�_lhs_ݔ�d +()-> +�t_��� +(op); + +1229 +isSgB��yOp +( +� +)-> +g�_rhs_ݔ�d +()-> +�t_��� +(op); + +1231 + g�d +:: +ve�� +< +SgV�RefExp + *> +a + = +sub��u� +( + +1232 +isSgB��yOp +( +� +)-> +g�_lhs_ݔ�d +(), +sym +, +ex� +, +ro� +); + +1233 + g�d +:: +c�y +( +a +. +beg� +(),�. +�d +(), +back_���� +( +��ys +)); + +1234 + g�d +:: +ve�� +< +SgV�RefExp + *> +a1 + = +sub��u� +( + +1235 +isSgB��yOp +( +� +)-> +g�_rhs_ݔ�d +(), +sym +, +ex� +, +ro� +); + +1236 + g�d +:: +c�y +( +a1 +. +beg� +(),�1. +�d +(), +back_���� +( +��ys +)); + +1237 } i�( +isSgU�ryOp +( +� +)) { + +1238 +isSgU�ryOp +( +� +)-> +g�_ݔ�d +()-> +�t_��� +(op); + +1239 + g�d +:: +ve�� +< +SgV�RefExp + *> +a + = +sub��u� +( + +1240 +isSgU�ryOp +( +� +)-> +g�_ݔ�d +(), +sym +, +ex� +, +ro� +); + +1241 + g�d +:: +c�y +( +a +. +beg� +(),�. +�d +(), +back_���� +( +��ys +)); + +1242 } i�( +isSgV�RefExp +( +� +)) { + +1243 + g�d +:: +�r�g + +z + = + +1244 +isSgV�RefExp +( +� +)-> +g�_symb� +()-> +g�_�me +(). +g�S��g +(); + +1245 i�(! +�rcmp +( +z +. +c_�r +(), +y +.c_str())) { + +1247 + g��ys +. +push_back +( +isSgV�RefExp +( +� +)); + +1273 + g��ys +; + + @CG_roseRepr.cc + +14 + ~<code_g�/CG_ro�R�r.h +> + +15 + ~<�dio.h +> + +16 + ~<�r�g.h +> + +17 + ~<c�r�g +> + +18 +�me�a� + + gomega + { + +23 + gCG_ro�R�r +:: +CG_ro�R�r +(): +�l_ +( +NULL +), +�_ +(NULL), +li�_ +(NULL){ + +27 + gCG_ro�R�r +:: +CG_ro�R�r +( +SgNode + * +�l +): +�l_ +��), +�_ +( +NULL +), +li�_ +(NULL) { + +30 + gCG_ro�R�r +:: +CG_ro�R�r +( +SgEx�essi� +* +� +): +�l_ +( +NULL +), +�_ +(�), +li�_ +(NULL){ + +32 + gCG_ro�R�r +:: +CG_ro�R�r +( +SgS��m�tP�Li� +* +�m�i� +): +�l_ +( +NULL +), +�_ +(NULL), +li�_ +(stmtlist){ + +35 + gCG_ro�R�r +::~ +CG_ro�R�r +() { + +40 +CG_ou�utR�r +* +CG_ro�R�r +:: +��e +() { + +42 if� +�l_ + !� +NULL +) { + +43 +SgT�eC�y + +tc +; + +44 +SgNode + * + g�l + = +�l_ +-> +c�y +( +tc +); + +45 + g�l +-> +�t_��� +( +�l_ +-> +g�_��� +()); + +46 +�w + +CG_ro�R�r +( +�l +); + +48 if( + g�_ + !� +NULL +) + +50 +SgT�eC�y + +tc1 +; + +51 +SgNode +* + g� + = +isSgNode +( +�_ +)-> +c�y +( +tc1 +); + +53 + g� +-> +�t_��� +( +isSgNode +( +�_ +)-> +g�_��� +()); + +54 +�w + +CG_ro�R�r +( +isSgEx�essi� +( +� +)); + +56 if( + gli�_ + !� +NULL +) + +58 +SgS��m�tP�Li� +* +li�2 + = +�w + SgStatementPtrList; + +60 + gSgS��m�tP�Li� +:: +���� + +� + = (* +li�_ +). +beg� +(); + g� + !�(*li�_). +�d +(); it++){ + +61 +SgT�eC�y + + gtc3 +; + +62 +SgNode + * + g�l2 + = +isSgNode +(* +� +)-> +c�y +( +tc3 +); + +63 + g�l2 +-> +�t_��� +( +isSgNode +(* +� +)-> +g�_��� +()); + +65 (* + gli�2 +). +push_back +( +isSgS��m�t +( +�l2 +)); + +67 +�w + +CG_ro�R�r +( +li�2 +); + +70 + gNULL +; + +73 + gCG_ro�R�r +:: +��r +() { + +74 if( +�l_ + !� +NULL +) { + +75 +d��e + +�l_ +; + +76 + g�l_ + = +NULL +; + +80 +SgNode +* + gCG_ro�R�r +:: +G�Code +() const { + +81 +�l_ +; + +84 +SgS��m�tP�Li� +* + gCG_ro�R�r +:: +G�Li� +() const { + +85 +li�_ +; + +88 +SgEx�essi� +* + gCG_ro�R�r +:: +G�Ex�essi� +() const { + +89 +�_ +; + +91 + gCG_ro�R�r +:: +Dump +() const { + +92 +SgNode +* +�l + = +�l_ +; + +93 +SgEx�essi� +* + g� + = +�_ + ; + +94 if( + g�l + !� +NULL +) + +95 +DumpF�eH��r +( +�l +, +�dout +); + +96 if( + g� + !� +NULL +) + +97 +DumpF�eH��r +( +isSgNode +( +� +), +�dout +); + +101 + gCG_ro�R�r +:: +DumpF�eH��r +( +SgNode +* +node +, +FILE + * +� +) const{ + +102 + g�d +:: +�r�g + +x +; + +103 +size_t + + gnumb�OfSuc�ss�s + = +node +-> +g�_numb�OfT�v��lSuc�ss�s +(); + +104 if( + gnumb�OfSuc�ss�s + == 0){ + +105 +x + = +node +-> +uŬ�ToS��g + (); + +106 +�r�tf +( +� +, "%s", +x +. +c_�r +()); + +109 +size_t + + gidx + = 0; idx < + gnumb�OfSuc�ss�s +; idx++) + +111 +SgNode + * + gch�d + = +NULL +; + +112 + gch�d + = +node +-> +g�_�av��lSuc�ss�ByIndex +( +idx +); + +113 +DumpF�eH��r +( +ch�d +, +� +); + +119 + gCG_ro�R�r +:: +DumpToF�e +( +FILE + * +� +) const { + +121 +SgNode +* +�l + = +�l_ +; + +122 +SgEx�essi� +* + g� + = +�_ + ; + +124 if( + g�l +!� +NULL +){ + +125 +�d +:: +�r�g + +x + = +�l +-> +uŬ�ToS��g +(); + +126 +�r�tf +( +� +, "%s", +x +. +c_�r +()); + +129 if( + g� + !� +NULL +){ + +130 +�d +:: +�r�g + +x + = +isSgNode +( +� +)-> +uŬ�ToS��g +(); + +131 +�r�tf +( +� +, "%s", +x +. +c_�r +()); + + @CG_stringBuilder.cc + +17 + ~<code_g�/CG_�r�gBu�d�.h +> + +18 + ~<code_g�/CG_�r�gR�r.h +> + +19 + ~<�r�g +> + +21 +�me�a� + + gomega + { + +23 + g�d +:: +�r�g + +Sa�gu�dS��g +(cڡ +�d +::�r�g & +s +, +� +); + +29 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eP��H�d� +( +�d�t +, + +30 +CG_ou�utR�r + * +�mt +, +Tu�e +<CG_ou�utR�r*> & +funcLi� +, + +31 +Tu�e +< +�d +:: +�r�g +> &) const { + +32 +�d +:: +�r�g + +li�S� + = ""; + +34 + gi + = 1; i <� +funcLi� +. +size +(); i++) { + +35 i�( + gfuncLi� +[ +i +] =� +NULL +) + +36 +li�S� + += "N/A"; + +38 + gli�S� + +� +G�S��g +( +funcLi� +[ +i +]); + +39 i�( + gi + < + gfuncLi� +. +size +()) + +40 + gli�S� + += ","; + +43 + g�d +:: +�r�g + +�mtName + = +G�S��g +( +�mt +); + +44 + g�d +:: +�r�g + +�d�tS� + = +G�Ind�tS��s +( +�d�t +); + +46 +�w + +CG_�r�gR�r +( +�d�tS� + + +�mtName + + "(" + +li�S� + + ");\n"); + +49 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eAssignm�t +( +�d�t +, + +50 +CG_ou�utR�r +* +lhs +, CG_ou�utR�r* +rhs +) const { + +51 i�( + glhs + =� +NULL + || +rhs + == NULL) { + +52 +�r�tf +( +�d�r +, "Code generation: missing�hs or�hs\n"); + +53 + gNULL +; + +56 + g�d +:: +�r�g + +lhsS� + = +G�S��g +( +lhs +); + +57 + g�d +:: +�r�g + +rhsS� + = +G�S��g +( +rhs +); + +59 + g�d +:: +�r�g + +�d�tS� + = +G�Ind�tS��s +( +�d�t +); + +61 +�w + +CG_�r�gR�r +( +�d�tS� + + +lhsS� + + "=" + +rhsS� + + ";\n"); + +64 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eInvoke +(cڡ +�d +:: +�r�g + & +�ame +, + +65 +Tu�e +< +CG_ou�utR�r +*> & +li� +) const { + +66 + g�d +:: +�r�g + +li�S� + = ""; + +68 + gi + = 1; i <� +li� +. +size +(); i++) { + +69 + gli�S� + +� +G�S��g +( +li� +[ +i +]); + +70 i�( + gi + < + gli� +. +size +()) + +71 + gli�S� + += ","; + +74 +�w + +CG_�r�gR�r +( +�ame + + "(" + +li�S� + + ")"); + +77 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eComm�t +( +�d�t +, + +78 cڡ +�d +:: +�r�g + & +comm�tText +) const { + +79 i�( +comm�tText + =� +�d +:: +�r�g +("")) { + +80 +NULL +; + +83 + g�d +:: +�r�g + +�d�tS� + = +G�Ind�tS��s +( +�d�t +); + +85 +�w + +CG_�r�gR�r +( +�d�tS� + + "// " + +comm�tText + + "\n"); + +88 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eA�ribu� +(CG_ou�utR��* +cڌ� +, + +89 cڡ +�d +:: +�r�g + & +comm�tText +) const { + +90 i�( +comm�tText + =� +�d +:: +�r�g +("")) { + +91 +cڌ� +; + +94 + g�d +:: +�r�g + +cڌ�S��g + = +G�S��g +( +cڌ� +); + +96 +�w + +CG_�r�gR�r +("// " + +comm�tText + + "\n" + +cڌ�S��g +); + +100 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eIf +( +�d�t +, CG_ou�utR�r* +gu�dLi� +, + +101 +CG_ou�utR�r +* +�ue_�mtLi� +, CG_ou�utR�r* +�l�_�mtLi� +) const { + +102 i�( + g�ue_�mtLi� + =� +NULL + && +�l�_�mtLi� + == NULL) { + +103 +d��e + +gu�dLi� +; + +104 + gNULL +; + +105 } i�( + ggu�dLi� + =� +NULL +) { + +106 +StmtLi�A��d +( +�ue_�mtLi� +, +�l�_�mtLi� +); + +109 + g�d +:: +�r�g + +gu�dLi�S� + = +G�S��g +( +gu�dLi� +); + +110 + g�d +:: +�r�g + +�d�tS� + = +G�Ind�tS��s +( +�d�t +); + +111 + g�d +:: +�r�g + +s +; + +112 i�( + g�ue_�mtLi� + !� +NULL + && +�l�_�mtLi� + == NULL) { + +113 +s + = +�d�tS� + + "i�(" + +gu�dLi�S� + + ") {\n" + +114 + +G�S��g +( +�ue_�mtLi� +�+ +�d�tS� + + "}\n"; + +115 } i�( + g�ue_�mtLi� + =� +NULL + && +�l�_�mtLi� + != NULL) { + +116 +s + = +�d�tS� + + "i�!(" + +gu�dLi�S� + + ") {\n" + +117 + +G�S��g +( +�l�_�mtLi� +�+ +�d�tS� + + "}\n"; + +119 + gs + = +�d�tS� + + "i�(" + +gu�dLi�S� + + ") {\n" + +120 + +G�S��g +( +�ue_�mtLi� +�+ +�d�tS� + + "}\n" + indentStr + +121 + "�� {\n" + +G�S��g +( +�l�_�mtLi� +�+ +�d�tS� + + "}\n"; + +124 +�w + +CG_�r�gR�r +( +s +); + +127 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eIndu�ive +(CG_ou�utR�r* +�dex +, + +128 +CG_ou�utR�r +* +low� +, CG_ou�utR�r* +u�� +, CG_ou�utR�r* +�� +) const { + +129 i�( + g�dex + =� +NULL +) { + +130 +�r�tf +( +�d�r +, "Code generation: missing�oop index\n"); + +131 + gNULL +; + +134 i�( + glow� + =� +NULL + || +u�� + == NULL) { + +135 +�r�tf +( +�d�r +, "Code generation: missing�oop bound\n"); + +138 + g�d +:: +�r�g + +�dexS� + = +G�S��g +( +�dex +); + +139 + g�d +:: +�r�g + +low�S� +, + gu��S� +; + +140 i�( + glow� + !� +NULL +) + +141 +low�S� + = +G�S��g +( +low� +); + +143 + glow�S� + = +�d +:: +�r�g +("-infinity"); + +144 i�( + gu�� + !� +NULL +) + +145 +u��S� + = +G�S��g +( +u�� +); + +147 + gu��S� + = +�d +:: +�r�g +("+infinity"); + +149 + g�d +:: +�r�g + +doS� + = "f�(" + +�dexS� + + " = " + +low�S� + + "; " + indexStr + +150 + " <�" + +u��S� + + "; " + +�dexS� +; + +152 i�( + g�� + !� +NULL +) { + +153 +�d +:: +�r�g + +��S� + = +G�S��g +( +�� +); + +154 + gdoS� + +�" +�" + +��S� +; + +156 + gdoS� + += "++"; + +159 + gdoS� + += ")"; + +161 +�w + +CG_�r�gR�r +( +doS� +); + +164 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eLo� +( +�d�t +, CG_ou�utR�r* +cڌ� +, + +165 +CG_ou�utR�r +* +�mtLi� +) const { + +166 i�( + g�mtLi� + =� +NULL +) { + +167 +d��e + +cڌ� +; + +168 + gNULL +; + +169 } i�( + gcڌ� + =� +NULL +) { + +170 +�r�tf +( +�d�r +, "Code generation:�o inductive for�his�oop\n"); + +171 + g�mtLi� +; + +174 + g�d +:: +�r�g + +��S� + = +G�S��g +( +cڌ� +); + +175 + g�d +:: +�r�g + +�mtS� + = +G�S��g +( +�mtLi� +); + +177 + g�d +:: +�r�g + +�d�tS� + = +G�Ind�tS��s +( +�d�t +); + +179 + g�d +:: +�r�g + +s + = +�d�tS� + + +��S� + + " {\n" + +�mtS� + + indentStr + "}\n"; + +181 +�w + +CG_�r�gR�r +( +s +); + +184 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eI� +( +_i +) const { + +185 +�d +:: +�r�g + +_s + = +to_�r�g +( +_i +); + +186 +�w + +CG_�r�gR�r +( +_s +); + +189 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eId�t +(cڡ +�d +:: +�r�g + & +_s +) const { + +190 i�(& +_s + =� +NULL + || _�=� +�d +:: +�r�g +("")) { + +191 +NULL +; + +194 +�w + +CG_�r�gR�r +( +_s +); + +197 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��ePlus +(CG_ou�utR�r* +l� +, + +198 +CG_ou�utR�r +* +r� +) const { + +199 i�( + gr� + =� +NULL +) { + +200 +l� +; + +201 } i�( + gl� + =� +NULL +) { + +202 +r� +; + +205 + g�d +:: +�r�g + +l�S� + = +G�S��g +( +l� +); + +206 + g�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +208 +�w + +CG_�r�gR�r +( +l�S� + + "+" + +r�S� +); + +211 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eM�us +(CG_ou�utR�r* +l� +, + +212 +CG_ou�utR�r +* +r� +) const { + +213 i�( + gr� + =� +NULL +) { + +214 +l� +; + +215 } i�( + gl� + =� +NULL +) { + +216 +�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +217 +�w + +CG_�r�gR�r +("-" + +Sa�gu�dS��g +( +r�S� +, '-')); + +220 + g�d +:: +�r�g + +l�S� + = +G�S��g +( +l� +); + +221 + g�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +223 +�w + +CG_�r�gR�r +( +l�S� + + "-" + +Sa�gu�dS��g +( +r�S� +, '-')); + +226 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eTimes +(CG_ou�utR�r* +l� +, + +227 +CG_ou�utR�r +* +r� +) const { + +228 i�( + gr� + =� +NULL + || +l� + == NULL) { + +229 +d��e + +r� +; + +230 +d��e + + gl� +; + +231 + gNULL +; + +234 + g�d +:: +�r�g + +l�S� + = +G�S��g +( +l� +); + +235 + g�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +237 +�w + +CG_�r�gR�r +( + +238 +Sa�gu�dS��g +( +l�S� +, '*'�+ "*" + Sa�gu�dS��g( +r�S� +, '*')); + +241 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eI�eg�Divide +(CG_ou�utR�r* +l� +, + +242 +CG_ou�utR�r +* +r� +) const { + +243 i�( + gr� + =� +NULL +) { + +244 +�r�tf +( +�d�r +, "Code generation: divide by NULL\n"); + +245 + gNULL +; + +246 } i�( + gl� + =� +NULL +) { + +247 +d��e + +r� +; + +248 + gNULL +; + +251 + g�d +:: +�r�g + +l�S� + = +G�S��g +( +l� +); + +252 + g�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +254 +�w + +CG_�r�gR�r +("�tDiv(" + +l�S� + + "," + +r�S� + + ")"); + +257 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eI�eg�Mod +(CG_ou�utR�r* +l� +, + +258 +CG_ou�utR�r +* +r� +) const { + +259 i�( + gr� + =� +NULL + || +l� + == NULL) { + +260 +NULL +; + +263 + g�d +:: +�r�g + +l�S� + = +G�S��g +( +l� +); + +264 + g�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +266 +�w + +CG_�r�gR�r +("�tMod(" + +l�S� + + "," + +r�S� + + ")"); + +269 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eI�eg�Ce� +(CG_ou�utR�r* +l� +, + +270 +CG_ou�utR�r +* +r� +) const { + +271 i�( + gr� + =� +NULL + || +l� + == NULL) { + +272 +NULL +; + +275 + g�d +:: +�r�g + +l�S� + = +G�S��g +( +l� +); + +276 + g�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +278 +�w + +CG_�r�gR�r +("�tCe�(" + +l�S� + + "," + +r�S� + + ")"); + +281 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eAnd +(CG_ou�utR�r* +l� +, + +282 +CG_ou�utR�r +* +r� +) const { + +283 i�( + gr� + =� +NULL +) + +284 +l� +; + +285 i�( + gl� + =� +NULL +) + +286 +r� +; + +288 + g�d +:: +�r�g + +l�S� + = +G�S��g +( +l� +); + +289 + g�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +291 +�w + +CG_�r�gR�r +( +l�S� + + " && " + +r�S� +); + +294 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eGE +(CG_ou�utR�r* +l� +, + +295 +CG_ou�utR�r +* +r� +) const { + +296 i�( + gr� + =� +NULL + || +l� + == NULL) { + +297 +NULL +; + +300 + g�d +:: +�r�g + +l�S� + = +G�S��g +( +l� +); + +301 + g�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +303 +�w + +CG_�r�gR�r +( +l�S� + + " >�" + +r�S� +); + +306 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eLE +(CG_ou�utR�r* +l� +, + +307 +CG_ou�utR�r +* +r� +) const { + +308 i�( + gr� + =� +NULL + || +l� + == NULL) { + +309 +NULL +; + +312 + g�d +:: +�r�g + +l�S� + = +G�S��g +( +l� +); + +313 + g�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +315 +�w + +CG_�r�gR�r +( +l�S� + + " <�" + +r�S� +); + +318 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +C��eEQ +(CG_ou�utR�r* +l� +, + +319 +CG_ou�utR�r +* +r� +) const { + +320 i�( + gr� + =� +NULL + || +l� + == NULL) { + +321 +NULL +; + +324 + g�d +:: +�r�g + +l�S� + = +G�S��g +( +l� +); + +325 + g�d +:: +�r�g + +r�S� + = +G�S��g +( +r� +); + +327 +�w + +CG_�r�gR�r +( +l�S� + + " =�" + +r�S� +); + +330 +CG_ou�utR�r +* + gCG_�r�gBu�d� +:: +StmtLi�A��d +(CG_ou�utR�r* +li�1 +, + +331 +CG_ou�utR�r +* +li�2 +) const { + +332 i�( + gli�2 + =� +NULL +) { + +333 +li�1 +; + +334 } i�( + gli�1 + =� +NULL +) { + +335 +li�2 +; + +338 + g�d +:: +�r�g + +li�1S� + = +G�S��g +( +li�1 +); + +339 + g�d +:: +�r�g + +li�2S� + = +G�S��g +( +li�2 +); + +341 +�w + +CG_�r�gR�r +( +li�1S� + + +li�2S� +); + +347 + g�d +:: +�r�g + +G�Ind�tS��s +( +�d�t +) { + +348 +�d +:: +�r�g + +�d�tS� +; + +349 + gi + = 1; i < + g�d�t +; i++) { + +350 + g�d�tS� + += " "; + +352 + g�d�tS� +; + +359 + g�d +:: +�r�g + +G�S��g +( +CG_ou�utR�r +* +�� +) { + +360 +�d +:: +�r�g + +�su� + = +��ic_�� +< +CG_�r�gR�r + *>( +�� +)-> +G�S��g +(); + +361 +d��e + + g�� +; + +362 + g�su� +; + +365 + g�d +:: +�r�g + +Sa�gu�dS��g +(cڡ +�d +::�r�g & +s +, +� +) { + +366 + g�n + = +s +. +�ngth +(); + +367 + g��n_�v� + = 0; + +368 + gnum_�usm�us + = 0; + +369 + gnum_mul + = 0; + +370 + gnum_div + = 0; + +371 + gi + = 0; i < + g�n +; i++) + +372 + gs +[ +i +]) { + +374 +��n_�v� +++; + +377 +��n_�v� +--; + +381 i�( +��n_�v� + == 0) + +382 +num_�usm�us +++; + +385 i�( +��n_�v� + == 0) + +386 +num_mul +++; + +389 i�( +��n_�v� + == 0) + +390 +num_div +++; + +396 +bo� + + g�ed_��n + = +�l� +; + +397 + g� +) { + +399 i�( +num_�usm�us + > 0) + +400 +�ed_��n + = +�ue +; + +403 i�( +num_�usm�us + > 0 || +num_div + > 0) + +404 +�ed_��n + = +�ue +; + +407 i�( +num_�usm�us + > 0 || +num_div + > 0 || +num_mul + > 0) + +408 +�ed_��n + = +�ue +; + +414 i�( + g�ed_��n +) + +415 "(" + + gs + + ")"; + +417 + gs +; + + @CG_stringRepr.cc + +16 + ~<code_g�/CG_�r�gR�r.h +> + +17 + ~<�dio.h +> + +19 +�me�a� + + gomega + { + +21 + gCG_�r�gR�r +:: +CG_�r�gR�r +() { + +24 +CG_�r�gR�r +::CG_�r�gR�r(cڡ +�d +:: +�r�g +& +_s +�: +s +(_s) { + +27 +CG_�r�gR�r +::~CG_stringRepr() { + +30 +CG_ou�utR�r +* +CG_�r�gR�r +:: +��e +() { + +31 +�w + +CG_�r�gR�r +( +s +); + +38 + g�d +:: +�r�g + +CG_�r�gR�r +:: +G�S��g +() const { + +39 +s +; + +46 + gCG_�r�gR�r +:: +Dump +() const { + +47 +��tf +("%s\n", +s +. +c_�r +()); + +50 + gCG_�r�gR�r +:: +DumpToF�e +( +FILE + * +� +) const { + +51 +�r�tf +( +� +,"%s", +s +. +c_�r +()); + + @CG_suifBuilder.cc + +15 + ~<�ack +> + +16 + ~<code_g�/CG_suifBu�d�.h +> + +17 + ~<suif1/�n�e.h +> + +18 + ~<ve�� +> + +20 +�me�a� + + gomega + { + +25 * + gk_ocg_comm�t +; + +26 * + gk_s2c_�agma +; + +27 * + gk_cuda_dim3 +; + +28 * + gk_cuda_k��l +; + +29 * + gk_cuda_modif�r +; + +30 * + gk_cuda_�xtu�_mem�y +; + +38
+Tu�e +< Tu�e<> > +smtN�S��Lev�s +; + +39
+Tu�e +< Tu�e< +�d +:: +�r�g +> > +lo�IdxNames +; + +40
+�d +:: +ve�� +< std:: +�� +<, std:: +�r�g +> > +syncs +; + +41
+checkLo�Lev� +; + +42
+�mtF�Lo�Check +; + +43
+u��BoundF�Lev� +; + +44
+low�BoundF�Lev� +; + +45
+bo� + +f�lInBounds +; + +48 cڡ * + glibcode_g�_v�_�r�g + = ""; + +49 cڡ * + glibcode_g�_who_�r�g + = ""; + +50 cڡ * + glibcode_g�_suif_�r�g + = ""; + +53 +��_code_g� +() { + +54 +bo� + + gisIn� + = +�l� +; + +55 if(! + gisIn� +) + +57 + gisIn� + = +�ue +; + +58 +ANNOTE +( +k_ocg_comm�t +, "omega_comm�t", +TRUE +); + +59 +ANNOTE +( +k_s2c_�agma +, "s2��agma", +TRUE +); + +60 +ANNOTE +( +k_cuda_dim3 +, "cud�dim3", +TRUE +); + +61 +ANNOTE +( +k_cuda_k��l +, "cud�k��l", +TRUE +); + +62 +ANNOTE +( +k_cuda_modif�r +, "cud�modif�r", +TRUE +); + +67 +ex�_code_g� +() { + +75 + gCG_suifBu�d� +:: +CG_suifBu�d� +( +�oc_sym�b + * +sym�b +) + +77 +sym�b_ + = +sym�b +; + +78 +��_code_g� +(); + +81 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eP��H�d� + (, CG_ou�utR��* +�mt +, + +82 +Tu�e +< +CG_ou�utR�r +*> & +funcLi� +, Tu�e< +�d +:: +�r�g +> & +lo�_v�s +) const { + +83 +��_node_li� + * +�l + = +��ic_�� +< +CG_suifR�r + *>( +�mt +)-> +�l_ +; + +84 +d��e + + g�mt +; + +86 + gi + = 1; i <� +funcLi� +. +size +(); i++) { + +87 i�( + gfuncLi� +[ +i +] =� +NULL +) + +90 +CG_suifR�r + * + g�� + = +��ic_�� +<CG_suifR�r*>( +funcLi� +[ +i +]); + +91 +ݔ�d + + g� + = +�� +-> +�_ +; + +92 +d��e + + g�� +; + +94 +v�_sym + * + gvs + = +��ic_�� +<v�_sym*>( +sym�b_ +-> +lookup_sym +( +lo�_v�s +[ +i +]. +c_�r +(), +SYM_VAR +)); + +96 +sub��u� +( +�l +, +vs +, +� +, +sym�b_ +); + +98 i�( + g� +. +is_��r +()) + +99 +d��e + + g� +. +��r +(); + +102 +�w + +CG_suifR�r +( +�l +); + +106 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eAssignm�t +(, CG_ou�utR��* +lhs +, + +107 +CG_ou�utR�r + * +rhs +) const { + +108 i�� + glhs + =� +NULL + || +rhs + == NULL ) { + +109 +�r�tf +( +�d�r +, "Code generation: Missing�hs or�hs\n"); + +110 + gNULL +; + +113 +ݔ�d + + g�c + = +��ic_�� +< +CG_suifR�r +*>( +rhs +)-> +�_ +; + +114 i�( + g�c +. +is_��r +(�&& src. +��r +()-> +�code +(�=� +io_��y +) { + +115 +�_��y + * +� + = +��ic_�� +<�_��y *>( +�c +. +��r +()); + +116 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_lod +, +� +-> +�em_ty� +(), +ݔ�d +(), ia); + +117 + g�c + = +ݔ�d +( +�s +); + +120 +��ru�i� + * + g�s +; + +121 +ݔ�d + + gd� + = +��ic_�� +< +CG_suifR�r +*>( +lhs +)-> +�_ +; + +122 i�( + gd� +. +is_��r +(�&& d�. +��r +()-> +�code +(�=� +io_��y +) { + +123 +�_��y + * +� + = +��ic_�� +<�_��y *>( +d� +. +��r +()); + +124 + g�s + = +�w + +�_�r +( +io_�r +, +ty�_void +, +ݔ�d +(), o��nd( +� +), +�c +); + +127 + g�s + = +�w + +�_�r +( +io_�y +, +�c +. +ty� +(), +d� +, src); + +129 +d��e + + glhs +; + +130 +d��e + + grhs +; + +132 +��_node_li� + * + g�l + = +�w +�ree_node_list; + +133 + g�l +-> +��nd +( +�w + +��_��r +( +�s +)); + +135 +�w + +CG_suifR�r +( +�l +); + +139 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eInvoke +(cڡ +�d +:: +�r�g + & +�ame +, + +140 +Tu�e +< +CG_ou�utR�r +*> & +li� +) const { + +141 i�( + g�ame + =� +�d +:: +�r�g +("max"�|| +�ame + == std::string("min")) { + +142 i�( +li� +. +size +() == 0) { + +143 +NULL +; + +145 i�( + gli� +. +size +() == 1) { + +146 +li� +[1]; + +149 + gϡ + = +li� +. +size +(); + +150 +ݔ�d + + g�2 + = +��ic_�� +< +CG_suifR�r +*>( +li� +[ +ϡ +])-> +�_ +; + +151 +d��e + + gli� +[ +ϡ +]; + +152 + gli� +. +d��e_ϡ +(); + +153 +CG_suifR�r + * + g�� + = +��ic_�� +<CG_suifR�r*>( +C��eInvoke +( +�ame +, +li� +)); + +154 +ݔ�d + + g�1 + = +�� +-> +�_ +; + +156 +��ru�i� + * + g�s +; + +157 i�( + g�ame + =� +�d +:: +�r�g +("max")) + +158 +�s + = +�w + +�_�r +( +io_max +, +�1 +. +ty� +(), +ݔ�d +(), op1, +�2 +); + +160 + g�s + = +�w + +�_�r +( +io_m� +, +�1 +. +ty� +(), +ݔ�d +(), op1, +�2 +); + +162 + g�� +-> + g�_ + = +ݔ�d +( +�s +); + +164 + g�� +; + +168 +�r�tf +( +�d�r +, "Code generation: invoke function io_call�ot implemented\n"); + +169 + gNULL +; + +174 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eA�ribu� +(CG_ou�utR��* +cڌ� +, + +175 cڡ +�d +:: +�r�g + & +comm�tText +)const { + +176 i�( +comm�tText + =� +�d +:: +�r�g +("")) { + +177 +cڌ� +; + +180 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_mrk +); + +182 +immed_li� + * + giml + = +�w + immed_list; + +183 + giml +-> +��nd +( +immed +( +cڡ_�� +<*>( +comm�tText +. +c_�r +()))); + +184 + g�s +-> +���d_�n�e +( +k_ocg_comm�t +, +iml +); + +186 +��_node_li� + * + g�l + ; + +187 + g�l + = +��ic_�� +< +CG_suifR�r +*>( +cڌ� +)-> +�l_ +; + +188 + g�l +-> +��nd +( +�w + +��_��r +( +�s +)); + +191 +�w + +CG_suifR�r +( +�l +); + +198 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eComm�t +(, cڡ +�d +:: +�r�g + & +comm�tText +) const { + +199 i�� +comm�tText + =� +�d +:: +�r�g +("") ) { + +200 +NULL +; + +203 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_mrk +); + +205 +immed_li� + * + giml + = +�w + immed_list; + +206 + giml +-> +��nd +( +immed +( +cڡ_�� +<*>( +comm�tText +. +c_�r +()))); + +207 + g�s +-> +���d_�n�e +( +k_ocg_comm�t +, +iml +); + +209 +��_node_li� + * + g�l + = +�w +�ree_node_list; + +210 + g�l +-> +��nd +( +�w + +��_��r +( +�s +)); + +212 +�w + +CG_suifR�r +( +�l +); + +216 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eIf +(, CG_ou�utR��* +gu�dLi� +, + +217 +CG_ou�utR�r + * +�ue_�mtLi� +, CG_ou�utR��* +�l�_�mtLi� +) const { + +218 + gif_cou�� + = 1; + +219 + g�d +:: +�r�g + +s + = +�d +::�r�g("omegaif_")+ +to_�r�g +( +if_cou�� +++); + +220 +�b�_sym + * + gif_�b� + = +�w +�ab�_sym( +cڡ_�� +<*>( +s +. +c_�r +())); + +221 + gsym�b_ +-> +add_sym +( +if_�b� +); + +223 i�� + g�ue_�mtLi� + =� +NULL + && +�l�_�mtLi� + == NULL ) { + +224 +d��e + +gu�dLi� +; + +225 + gNULL +; + +227 i�� + ggu�dLi� + =� +NULL + ) { + +228 +StmtLi�A��d +( +�ue_�mtLi� +, +�l�_�mtLi� +); + +231 +��_node_li� + * + gh�d� + = +�w +�ree_node_list; + +232 +ݔ�d + + g� + = +��ic_�� +< +CG_suifR�r +*>( +gu�dLi� +)-> +�_ +; + +234 + g�d +:: +�ack +<*> +S +; + +235 + gS +. +push +( +� +. +��r +()); + +236 ! + gS +. +em�y +()) { + +237 +��ru�i� + * + g�s + = +��ic_�� +<��ru�i� *>( +S +. +t� +()); + +238 + gS +. +p� +(); + +239 i�( + g�s +-> +�code +(�=� +io_�d +) { + +240 +��ru�i� + * +�s1 + = +�s +-> +�c_� +(0). +��r +(); + +241 + g�s1 +-> +�move +(); + +242 + gS +. +push +( +�s1 +); + +243 +��ru�i� + * + g�s2 + = +�s +-> +�c_� +(1). +��r +(); + +244 + g�s2 +-> +�move +(); + +245 + gS +. +push +( +�s2 +); + +246 +d��e + + g�s +; + +249 + g�s + = +�w + +�_bj +( +io_b�l� +, +if_�b� +, +ݔ�d +( +�s +)); + +250 + gh�d� +-> +��nd +( +�w + +��_��r +( +�s +)); + +254 +��_node_li� + * + gth�_�� +, * + g��_�� +; + +255 i�( + g�ue_�mtLi� + !� +NULL +) + +256 +th�_�� + = +��ic_�� +< +CG_suifR�r +*>( +�ue_�mtLi� +)-> +�l_ +; + +258 + gth�_�� + = +NULL +; + +259 i�( + g�l�_�mtLi� + !� +NULL +) + +260 +��_�� + = +��ic_�� +< +CG_suifR�r +*>( +�l�_�mtLi� +)-> +�l_ +; + +262 + g��_�� + = +NULL +; + +263 +��_if + * + gti + = +�w +��e_if( +if_�b� +, +h�d� +, +th�_�� +, +��_�� +); + +265 +��_node_li� + * + g�l + = +�w +�ree_node_list; + +266 + g�l +-> +��nd +( +ti +); + +268 +d��e + + ggu�dLi� +; + +269 +d��e + + g�ue_�mtLi� +; + +270 +d��e + + g�l�_�mtLi� +; + +272 +�w + +CG_suifR�r +( +�l +); + +276 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eIndu�ive +(CG_ou�utR��* +�dex +, + +277 +CG_ou�utR�r + * +low� +, + +278 +CG_ou�utR�r + * +u�� +, + +279 +CG_ou�utR�r + * +�� +) const { + +280 i�� + g�dex + =� +NULL + || +low� + =�NULL || +u�� + == NULL ) { + +281 +�r�tf +( +�d�r +, "Code generation: something wrong in CreateInductive\n"); + +282 + gNULL +; + +285 i�( + g�� + =� +NULL +) + +286 +�� + = +C��eI� +(1); + +288 +v�_sym + * + g�dex_sym + = +��ic_�� +< +CG_suifR�r +*>( +�dex +)-> +�_ +. +symb� +(); + +289 +ݔ�d + + glow�_bound + = +��ic_�� +< +CG_suifR�r +*>( +low� +)-> +�_ +; + +290 +ݔ�d + + gu��_bound + = +��ic_�� +< +CG_suifR�r +*>( +u�� +)-> +�_ +; + +291 +ݔ�d + + g��_size + = +��ic_�� +< +CG_suifR�r +*>( +�� +)-> +�_ +; + +293 +�b�_sym + * + gc�tLab� + = +�w +�abel_sym(""); + +294 +�b�_sym + * + gbrkLab� + = +�w +�abel_sym(""); + +295 + gsym�b_ +-> +add_sym +( +c�tLab� +); + +296 + gsym�b_ +-> +add_sym +( +brkLab� +); + +297 +��_f� + * + gtf + = +�w +��e_f�( +�dex_sym +, +FOR_SLTE +, +c�tLab� +, +brkLab� +, +NULL +, + +298 +low�_bound +, +u��_bound +, +��_size +, +NULL +); + +300 +��_node_li� + * + g�l + = +�w +�ree_node_list; + +301 + g�l +-> +��nd +( +tf +); + +303 +d��e + + g�dex +; + +304 +d��e + + glow� +; + +305 +d��e + + gu�� +; + +306 +d��e + + g�� +; + +308 +�w + +CG_suifR�r +( +�l +); + +312 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eLo� +(, CG_ou�utR��* +cڌ� +, + +313 +CG_ou�utR�r + * +�mtLi� +) const { + +314 i�� + g�mtLi� + =� +NULL + ) { + +315 +d��e + +cڌ� +; + +316 + gNULL +; + +318 i�� + gcڌ� + =� +NULL + ) { + +319 +�r�tf +( +�d�r +, "Code generation:�o inductive for�his�oop\n"); + +320 + g�mtLi� +; + +323 +��_node_li� + * + g�l + = +��ic_�� +< +CG_suifR�r +*>( +cڌ� +)-> +�l_ +; + +324 +��_node_li�_�� + +�� +( +�l +); + +325 +��_f� + * + gtf + = +��ic_�� +<��_f�*>( +�� +. +�� +()); + +327 +��_node_li� + * + gbody + = +��ic_�� +< +CG_suifR�r +*>( +�mtLi� +)-> +�l_ +; + +328 + gtf +-> +�t_body +( +body +); + +330 +d��e + + g�mtLi� +; + +332 + gcڌ� +; + +336 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eI� +( +_i +) const { + +337 +�_ldc + * +�s + = +�w + in_ldc( +ty�_s32 +, +ݔ�d +(), +immed +( +_i +)); + +339 +�w + +CG_suifR�r +( +ݔ�d +( +�s +)); + +343 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eId�t +(cڡ +�d +:: +�r�g + & +_s +) const { + +344 i��& +_s + =� +NULL + || _�=� +�d +:: +�r�g +("") ) { + +345 +NULL +; + +348 +v�_sym + * + gvs + = +��ic_�� +<v�_sym*>( +sym�b_ +-> +lookup_sym +( +_s +. +c_�r +(), +SYM_VAR +)); + +350 i�( + gvs + =� +NULL +) { + +351 +vs + = +�w + +v�_sym +( +ty�_s32 +, +cڡ_�� +<*>( +_s +. +c_�r +())); + +352 + gsym�b_ +-> +add_sym +( +vs +); + +355 +�w + +CG_suifR�r +( +ݔ�d +( +vs +)); + +359 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��ePlus +(CG_ou�utR��* +l� +, + +360 +CG_ou�utR�r + * +r� +) const { + +361 i�� + gr� + =� +NULL + ) { + +362 +l� +; + +364 i�� + gl� + =� +NULL + ) { + +365 +r� +; + +368 +ݔ�d + + g�1 + = +��ic_�� +< +CG_suifR�r +*>( +l� +)-> +�_ +; + +369 +ݔ�d + + g�2 + = +��ic_�� +< +CG_suifR�r +*>( +r� +)-> +�_ +; + +371 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_add +, +�1 +. +ty� +(), +ݔ�d +(), op1, +�2 +); + +373 +d��e + + gl� +; + +374 +d��e + + gr� +; + +376 +�w + +CG_suifR�r +( +ݔ�d +( +�s +)); + +380 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eM�us +(CG_ou�utR��* +l� +, + +381 +CG_ou�utR�r + * +r� +) const { + +382 i�� + gr� + =� +NULL + ) { + +383 +l� +; + +385 i�� + gl� + =� +NULL + ) { + +386 +ݔ�d + +� + = +��ic_�� +< +CG_suifR�r +*>( +r� +)-> +�_ +; + +387 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_�g +, +� +. +ty� +(), +ݔ�d +(), op); + +389 +d��e + + gr� +; + +391 +�w + +CG_suifR�r +( +ݔ�d +( +�s +)); + +394 +ݔ�d + + g�1 + = +��ic_�� +< +CG_suifR�r +*>( +l� +)-> +�_ +; + +395 +ݔ�d + + g�2 + = +��ic_�� +< +CG_suifR�r +*>( +r� +)-> +�_ +; + +397 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_sub +, +�1 +. +ty� +(), +ݔ�d +(), op1, +�2 +); + +399 +d��e + + gl� +; + +400 +d��e + + gr� +; + +402 +�w + +CG_suifR�r +( +ݔ�d +( +�s +)); + +407 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eTimes +(CG_ou�utR��* +l� +, + +408 +CG_ou�utR�r + * +r� +) const { + +409 i�� + gr� + =� +NULL + || +l� + == NULL) { + +410 i�( +r� + !� +NULL +) { + +411 +r� +-> +��r +(); + +412 +d��e + + gr� +; + +414 i�( + gl� + !� +NULL +) { + +415 +l� +-> +��r +(); + +416 +d��e + + gl� +; + +418 + gNULL +; + +421 +ݔ�d + + g�1 + = +��ic_�� +< +CG_suifR�r +*>( +l� +)-> +�_ +; + +422 +ݔ�d + + g�2 + = +��ic_�� +< +CG_suifR�r +*>( +r� +)-> +�_ +; + +424 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_mul +, +�1 +. +ty� +(), +ݔ�d +(), op1, +�2 +); + +426 +d��e + + gl� +; + +427 +d��e + + gr� +; + +429 +�w + +CG_suifR�r +( +ݔ�d +( +�s +)); + +433 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eI�eg�Divide +(CG_ou�utR��* +l� +, + +434 +CG_ou�utR�r + * +r� +) const { + +435 i�� + gr� + =� +NULL + ) { + +436 +�r�tf +( +�d�r +, "Code generation: divide by NULL\n"); + +437 + gNULL +; + +439 i�� + gl� + =� +NULL + ) { + +440 +d��e + +r� +; + +441 + gNULL +; + +445 +ݔ�d + + g�1 + = +��ic_�� +< +CG_suifR�r +*>( +l� +)-> +�_ +; + +446 +ݔ�d + + g�2 + = +��ic_�� +< +CG_suifR�r +*>( +r� +)-> +�_ +; + +449 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_div +, +�1 +. +ty� +(), +ݔ�d +(), op1, +�2 +); + +451 +d��e + + gl� +; + +452 +d��e + + gr� +; + +454 +�w + +CG_suifR�r +( +ݔ�d +( +�s +)); + +458 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eI�eg�Mod +(CG_ou�utR��* +l� +, + +459 +CG_ou�utR�r + * +r� +) const { + +460 i�� + gr� + =� +NULL + || +l� + == NULL ) { + +461 +NULL +; + +464 +ݔ�d + + g�1 + = +��ic_�� +< +CG_suifR�r +*>( +l� +)-> +�_ +; + +465 +ݔ�d + + g�2 + = +��ic_�� +< +CG_suifR�r +*>( +r� +)-> +�_ +; + +468 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_�m +, +ty�_s32 +, +ݔ�d +(), +�1 +, +�2 +); + +470 +d��e + + gl� +; + +471 +d��e + + gr� +; + +473 +�w + +CG_suifR�r +( +ݔ�d +( +�s +)); + +477 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eAnd +(CG_ou�utR��* +l� +, + +478 +CG_ou�utR�r + * +r� +) const { + +479 i�( + gr� + =� +NULL +) + +480 +l� +; + +481 i�( + gl� + =� +NULL +) + +482 +r� +; + +484 +ݔ�d + + g�1 + = +��ic_�� +< +CG_suifR�r +*>( +l� +)-> +�_ +; + +485 +ݔ�d + + g�2 + = +��ic_�� +< +CG_suifR�r +*>( +r� +)-> +�_ +; + +487 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_�d +, +�1 +. +ty� +(), +ݔ�d +(), op1, +�2 +); + +489 +d��e + + gl� +; + +490 +d��e + + gr� +; + +492 +�w + +CG_suifR�r +( +ݔ�d +( +�s +)); + +496 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eGE +(CG_ou�utR��* +l� +, + +497 +CG_ou�utR�r + * +r� +) const { + +498 +C��eLE +( +r� +, +l� +); + +502 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eLE +(CG_ou�utR��* +l� +, + +503 +CG_ou�utR�r + * +r� +) const { + +504 i�� + gr� + =� +NULL + || +l� + == NULL ) { + +505 +NULL +; + +508 +ݔ�d + + g�1 + = +��ic_�� +< +CG_suifR�r +*>( +l� +)-> +�_ +; + +509 +ݔ�d + + g�2 + = +��ic_�� +< +CG_suifR�r +*>( +r� +)-> +�_ +; + +511 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_�e +, +ty�_s32 +, +ݔ�d +(), +�1 +, +�2 +); + +513 +d��e + + gl� +; + +514 +d��e + + gr� +; + +516 +�w + +CG_suifR�r +( +ݔ�d +( +�s +)); + +520 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eEQ +(CG_ou�utR��* +l� +, + +521 +CG_ou�utR�r + * +r� +) const { + +522 i�� + gr� + =� +NULL + || +l� + == NULL ) { + +523 +NULL +; + +526 +ݔ�d + + g�1 + = +��ic_�� +< +CG_suifR�r +*>( +l� +)-> +�_ +; + +527 +ݔ�d + + g�2 + = +��ic_�� +< +CG_suifR�r +*>( +r� +)-> +�_ +; + +529 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_�q +, +ty�_s32 +, +ݔ�d +(), +�1 +, +�2 +); + +531 +d��e + + gl� +; + +532 +d��e + + gr� +; + +534 +�w + +CG_suifR�r +( +ݔ�d +( +�s +)); + +539 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +StmtLi�A��d +(CG_ou�utR��* +li�1 +, + +540 +CG_ou�utR�r + * +li�2 +) const { + +541 i�� + gli�2 + =� +NULL + ) { + +542 +li�1 +; + +544 i�� + gli�1 + =� +NULL + ) { + +545 +li�2 +; + +548 +��_node_li� + * + g�l1 + = +��ic_�� +< +CG_suifR�r + *>( +li�1 +)-> +�l_ +; + +549 +��_node_li� + * + g�l2 + = +��ic_�� +< +CG_suifR�r + *>( +li�2 +)-> +�l_ +; + +550 i�( + g�l2 + =� +NULL +) + +551 +�l1 +-> +��nd +( +�w + +��_��r +( +��ic_�� +< +CG_suifR�r + *>( +li�2 +)-> +�_ +. +��r +())); + +553 + g�l1 +-> +��nd +( +�l2 +); + +555 +d��e + + gli�2 +; + +557 + gli�1 +; + +565 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eP�gma +(, + +566 cڡ +�d +:: +�r�g + & +�agmaText +) const { + +567 i�� +�agmaText + =� +�d +:: +�r�g +("") ) { + +568 +NULL +; + +570 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_mrk +); + +571 +immed_li� + * + giml + = +�w + immed_list; + +572 + giml +-> +��nd +( +immed +( +cڡ_�� +<*>( +�agmaText +. +c_�r +()))); + +573 + g�s +-> +��nd_�n�e +( +k_s2c_�agma +, +iml +); + +574 +��_node_li� + * + g�l + = +�w +�ree_node_list; + +575 + g�l +-> +��nd +( +�w + +��_��r +( +�s +)); + +576 +�w + +CG_suifR�r +( +�l +); + +579 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eDim3 +( +immed + +v�Name +, immed +�g1 +, immed +�g2 +) const { + +580 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_mrk +); + +581 +immed_li� + * + giml + = +�w + immed_list; + +582 + giml +-> +��nd +( +immed +( +v�Name +)); + +583 + giml +-> +��nd +( +�g1 +); + +584 + giml +-> +��nd +( +�g2 +); + +585 + g�s +-> +��nd_�n�e +( +k_cuda_dim3 +, +iml +); + +586 +��_node_li� + * + g�l + = +�w +�ree_node_list; + +587 + g�l +-> +��nd +( +�w + +��_��r +( +�s +)); + +588 +�w + +CG_suifR�r +( +�l +); + +591 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eDim3 +( +immed + +v�Name +, immed +�g1 +, immed +�g2 +, immed +�g3 +) const { + +592 +��ru�i� + * + g�s + = +�w + +�_�r +( +io_mrk +); + +593 +immed_li� + * + giml + = +�w + immed_list; + +594 + giml +-> +��nd +( +immed +( +v�Name +)); + +595 + giml +-> +��nd +( +�g1 +); + +596 + giml +-> +��nd +( +�g2 +); + +597 + giml +-> +��nd +( +�g3 +); + +598 + g�s +-> +��nd_�n�e +( +k_cuda_dim3 +, +iml +); + +599 +��_node_li� + * + g�l + = +�w +�ree_node_list; + +600 + g�l +-> +��nd +( +�w + +��_��r +( +�s +)); + +601 +�w + +CG_suifR�r +( +�l +); + +604 +CG_ou�utR�r +* + gCG_suifBu�d� +:: +C��eK��l +( +immed_li� +* +iml +) const { + +605 +��ru�i� + * +�s + = +�w + +�_�r +( +io_mrk +); + +606 + g�s +-> +��nd_�n�e +( +k_cuda_k��l +, +iml +); + +607 +��_node_li� + * + g�l + = +�w +�ree_node_list; + +608 + g�l +-> +��nd +( +�w + +��_��r +( +�s +)); + +609 +�w + +CG_suifR�r +( +�l +); + +612 +ty�_node +* + gCG_suifBu�d� +:: +ModifyTy� +�y�_node* +ba� +, cڡ * +modif�r +) const { + +613 +modif�r_ty� +* + g�su� + = +�w + modif�r_ty�( +TYPE_NULL +, +ba� +); + +614 +immed_li� + * + giml + = +�w + immed_list; + +615 + giml +-> +��nd +( +immed +((*) +modif�r +)); + +616 + g�su� +-> +��nd_�n�e +( +k_cuda_modif�r +, +iml +); + +617 + g�su� +; + +626 +bo� + +sub��u� +( +��ru�i� + * +� +, +v�_sym + * +sym +, +ݔ�d + +ex� +, +ba�_sym�b + * +� +) { + +627 i�( + g� + =� +NULL + || +sym + == NULL) + +628 +�l� +; + +630 +bo� + + gr + = +�l� +; + +631 + gi + = 0; i < + g� +-> +num_�cs +(); i++) { + +632 +ݔ�d + +� +( +� +-> +�c_� +( +i +)); + +634 i�( + g� +. +is_symb� +(�&& op. +symb� +(�=� +sym +) { + +635 +� +-> +�t_�c_� +( +i +, +ex� +. +��e +( +� +)); + +636 + gr + = +�ue +; + +638 i�( + g� +. +is_��r +()) { + +639 + gr + = +sub��u� +( +� +. +��r +(), +sym +, +ex� +, +� +) ||�; + +643 + gr +; + +646 +bo� + +sub��u� +( +��_node + * +� +, +v�_sym + * +sym +, +ݔ�d + +ex� +, +ba�_sym�b + * +� +) { + +647 i�( + g� + =� +NULL +) + +648 +�l� +; + +650 +bo� + + gr + = +�l� +; + +651 i�( + g� +-> +k�d +(�=� +TREE_INSTR +) + +652 +r + = +sub��u� +( +��ic_�� +< +��_��r +*>( +� +)-> +��r +(), +sym +, +ex� +, +� +�|| + gr +; + +654 + gi + = 0; i < + g� +-> +num_ch�d_li�s +(); i++) { + +655 + gr + = +sub��u� +( +� +-> +ch�d_li�_num +( +i +), +sym +, +ex� +, +� +) ||�; + +659 + gr +; + +662 +bo� + +sub��u� +( +��_node_li� + * +�l +, +v�_sym + * +sym +, +ݔ�d + +ex� +, + +663 +ba�_sym�b + * +� +) { + +664 i�( + g�l + =� +NULL +) + +665 +�l� +; + +667 +bo� + + gr + = +�l� +; + +668 +��_node_li�_�� + +�� +( +�l +); + +669 ! + g�� +. +is_em�y +()) { + +670 +��_node + * + g� + = +�� +. +�� +(); + +672 + gr + = +sub��u� +( +� +, +sym +, +ex� +, +� +) ||�; + +675 + gr +; + + @CG_suifRepr.cc + +14 + ~<code_g�/CG_suifR�r.h +> + +15 + ~<�dio.h +> + +17 +�me�a� + + gomega + { + +19 + gCG_suifR�r +:: +CG_suifR�r +(): +�l_ +( +NULL +), +�_ +() { + +22 + gCG_suifR�r +:: +CG_suifR�r +( +��_node_li� + * +�l +): +�l_ +��), +�_ +() { + +25 + gCG_suifR�r +:: +CG_suifR�r +( +ݔ�d + +� +): +�l_ +( +NULL +), +�_ +(op) { + +28 + gCG_suifR�r +::~ +CG_suifR�r +() { + +33 +CG_ou�utR�r +* +CG_suifR�r +:: +��e +() { + +34 i�(! +�_ +. +is_nu� +() ) { + +35 +ݔ�d + +� + = +�_ +. +��e +(); + +36 +�w + +CG_suifR�r +( +� +); + +38 i�( + g�l_ + !� +NULL +) { + +39 +��_node_li� + * +�l + = +�l_ +-> +��e +(); + +40 +�w + +CG_suifR�r +( +�l +); + +43 +�w + +CG_suifR�r +(); + +46 + gCG_suifR�r +:: +��r +() { + +47 i�(! +�_ +. +is_nu� +()) { + +48 i�( +�_ +. +is_��r +()) + +49 +d��e + +�_ +. +��r +(); + +50 + g�_ +. +�t_nu� +(); + +52 i�( + g�l_ + !� +NULL +) { + +53 +d��e + +�l_ +; + +54 + g�l_ + = +NULL +; + +58 +��_node_li� +* + gCG_suifR�r +:: +G�Code +() const { + +59 +�l_ +; + +62 +ݔ�d + + gCG_suifR�r +:: +G�Ex�essi� +() const { + +63 +�_ +; + +66 + gCG_suifR�r +:: +Dump +() const { + +67 i�( +�l_ + !� +NULL +) + +68 +�l_ +-> +��t +(); + +69 i�(! + g�_ +. +is_nu� +()) + +70 + g�_ +. +��t +(); + +73 + gCG_suifR�r +:: +DumpToF�e +( +FILE + * +� +) const { + +74 i�( +�l_ + !� +NULL +) + +75 +�l_ +-> +��t +( +� +); + +76 i�(! + g�_ +. +is_nu� +()) + +77 + g�_ +. +��t +( +� +); + + @code_gen.cc + +16 + ~<omega.h +> + +17 + ~<omega/R�_m�.h +> + +18 + ~<basic/C���i�.h +> + +19 + ~<basic/Bag.h +> + +20 + ~<basic/M�.h +> + +21 + ~<basic/ut�.h +> + +22 + ~<basic/omega_�r�.h +> + +23 + ~<m�h.h +> + +24 + ~<ve�� +> + +26 + ~<code_g�/CG.h +> + +27 + ~<code_g�/code_g�.h +> + +28 + ~<code_g�/CG_ou�utBu�d�.h +> + +29 + ~<code_g�/CG_ou�utR�r.h +> + +30 + ~<code_g�/CG_�r�gBu�d�.h +> + +31 + ~<code_g�/CG_�r�gR�r.h +> + +32 + ~<code_g�/ou�ut_��.h +> + +34 +�me�a� + + gomega + { + +37 + gϡ_�v� +; + +38 +S�Tu�e + + g�w_IS +; + +39 +S�Tu�eTu�e + + g�oje�ed_nIS +; + +40 + gTu�e +< + gCG_ou�utR�r + *> + g��em�tInfo +; + +41 +R�Tu�e + + g��sf�m�i�s +; + +44 + gTu�e +< Tu�e<> > + gsmtN�S��Lev�s +; + +45 + gTu�e +< Tu�e< + g�d +:: +�r�g +> > +lo�IdxNames +; + +46 + g�d +:: +ve�� +< +�d +:: +�� +<, std:: +�r�g +> > +syncs +; + +51 + gcheckLo�Lev� +; + +52 + g�mtF�Lo�Check +; + +53 + gu��BoundF�Lev� +; + +54 + glow�BoundF�Lev� +; + +55 +bo� + + gf�lInBounds +; + +58 �as� + cJunkS�ticIn� +{ + gpublic +: +JunkS�ticIn� +(){ +checkLo�Lev� +=0; + gf�lInBounds += +�l� +;} }; + +59 +JunkS�ticIn� + + gjunkIn�In���__ +; + +64 +CG_�su� + * +g�_�cursive +( +�v� +, +I�Tu�e + & +isA�ive +); + +67 + gcode_g�_debug +=0; + +70 +S�Tu�e + + $f��r_fun�i�_symb�s +( +S�Tu�e + & +�ts +, +bo� + +k�p_fs +){ + +71 +S�Tu�e + + `�w_�ts +( +�ts +. + `size +()); + +72 +i + = 1; i <� +�ts +. + `size +(); i++) { + +73 +R��i� + +R + = +�ts +[ +i +]; + +74 +R��i� + & +S + = +�w_�ts +[ +i +]; + +75 + `as�� +( +R +. + `is_�t +()); + +77 +S + = + `R��i� +( +R +. + `n_�t +()); + +78 +S +. + `c�y_�mes +( +R +); + +79 +F_Exi�s + * +� + = +S +. + `add_exi�s +(); + +80 +F_Or + * +fo + = +� +-> + `add_� +(); + +81 +DNF_I��t� + + `D +( +R +. + `qu�y_DNF +()); +D +; D++) { + +82 +F_And + * +� + = +fo +-> + `add_�d +(); + +83 +V��b�_ID_Tu�e + & +�dlo�ls + = (* +D +)-> + `lo�ls +(); + +84 +Se�i� +< +V��b�_ID +> +�wlo�ls + = +� +-> + `de��e_tu�e +( +�dlo�ls +. + `size +()); + +91 +EQ_I��t� + + `e +(* +D +); +e +;�++) + +92 if(( + `max_fs_��y +(* +e +�> 0�=� +k�p_fs +){ + +93 +EQ_H�d� + +n + = +� +-> + `add_EQ +(); + +94 +Cڡr_V�s_I�r + + `cvi +(* +e +, +�l� +); +cvi +;cvi++) + +95 if((* +cvi +). +v� +-> + `k�d +(�=� +W�d�rd_V� +) + +96 +n +. + `upd�e_c�f +( +�wlo�ls +[ +�dlo�ls +. + `�dex +((* +cvi +). +v� +)], + +97 (* +cvi +). +c�f +); + +99 if((* +cvi +). +v� +-> + `k�d +(�=� +Glob�_V� +) + +100 +n +. + `upd�e_c�f +( +S +. + `g�_lo�l +((* +cvi +). +v� +-> + `g�_glob�_v� +(), + +101 (* +cvi +). +v� +-> + `fun�i�_of +()), + +102 (* +cvi +). +c�f +); + +104 +n +. + `upd�e_c�f +((* +cvi +). +v� +,(*cvi). +c�f +); + +105 +n +. + `upd�e_cڡ +((* +e +). + `g�_cڡ +()); + +106 +n +. + `f��ize +(); + +109 +GEQ_I��t� + + `g +(* +D +); +g +; g++) + +110 if(( + `max_fs_��y +(* +g +�> 0�=� +k�p_fs +) { + +111 +GEQ_H�d� + +n + = +� +-> + `add_GEQ +(); + +112 +Cڡr_V�s_I�r + + `cvi +(* +g +, +�l� +); +cvi +;cvi++) + +113 if((* +cvi +). +v� +-> + `k�d +(�=� +W�d�rd_V� +) + +114 +n +. + `upd�e_c�f +( +�wlo�ls +[ +�dlo�ls +. + `�dex +((* +cvi +). +v� +)], + +115 (* +cvi +). +c�f +); + +117 if((* +cvi +). +v� +-> + `k�d +(�=� +Glob�_V� +) + +118 +n +. + `upd�e_c�f +( +S +. + `g�_lo�l +((* +cvi +). +v� +-> + `g�_glob�_v� +(), + +119 (* +cvi +). +v� +-> + `fun�i�_of +()), + +120 (* +cvi +). +c�f +); + +122 +n +. + `upd�e_c�f +((* +cvi +). +v� +,(*cvi). +c�f +); + +123 +n +. + `upd�e_cڡ +((* +g +). + `g�_cڡ +()); + +124 +n +. + `f��ize +(); + +127 +S +. + `f��ize +(); + +130 +�w_�ts +; + +131 + } +} + +134 +R�Tu�e + + $�r�_fun�i�_symb�s +( +S�Tu�e + & +�ts +) { + +135 + `f��r_fun�i�_symb�s +( +�ts +, +�l� +); + +136 + } +} + +138 +R�Tu�e + + $ex�a�_fun�i�_symb�s +( +S�Tu�e + & +�ts +) { + +139 + `f��r_fun�i�_symb�s +( +�ts +, +�ue +); + +140 + } +} + +143 + g�d +:: +�r�g + + $MMG���eCode +( +R�Tu�e + & +T +, +S�Tu�e + & +�d_IS +, +R��i� + & +known +, +eff�t +) { + +144 +Tu�e +< +CG_ou�utR�r + *> +�meInfo +; + +145 +�mt + = 1; stm�<� +T +. + `size +(); stmt++) + +146 +�meInfo +. + `��nd +( +�w + + `CG_�r�gR�r +("s" + + `to_�r�g +( +�mt +))); + +148 +CG_�r�gBu�d� + +ocg +; + +149 +CG_�r�gR�r + * +sR�r + = +��ic_�� +<CG_�r�gR��*>( + `MMG���eCode +(& +ocg +, +T +, +�d_IS +, +�meInfo +, +known +, +eff�t +)); + +151 +i + = 1; i <� +�meInfo +. + `size +(); i++) + +152 +d��e + +�meInfo +[ +i +]; + +153 i�( +sR�r + !� +NULL +) + +154 + `G�S��g +( +sR�r +); + +156 +�d +:: + `�r�g +(); + +157 + } +} + +163 +CG_ou�utR�r +* +MMG���eCode +( +CG_ou�utBu�d� +* +ocg +, +R�Tu�e + & +T +, +S�Tu�e + & +�d_IS +, cڡ +Tu�e +<CG_ou�utR��*> & +�mt_cڋ� +, +R��i� + & +known +, +eff�t +) { + +164 + g�mts + = +T +. +size +(); + +165 i�( + g�mts + == 0) + +166 +ocg +-> +C��eComm�t +(1, "No statements found!"); + +167 i�(! + gknown +. +is_nu� +()) + +168 + gknown +. +sim�ify +(); + +171 + gmaxStmt + = 1; + +172 + gϡ_�v� + = 0; + +173 + g�mt + = 1; stm�<� +�mts +; stmt++) { + +174 + g�d_dim + = +T +[ +�mt +]. +n_out +(); + +175 i�( + g�d_dim + > + gϡ_�v� +) + +176 + gϡ_�v� + = +�d_dim +; + +178 + gi + = 1; i <� +�d_IS +[ +�mt +]. +n_�t +(); i++) + +179 + gT +[ +�mt +]. +�me_�put_v� +( +i +, +�d_IS +[�mt]. +�t_v� +(i)-> +�me +()); + +180 + gi + = 1; i <� +�d_dim +; i++) + +181 + gT +[ +�mt +]. +�me_ou�ut_v� +( +i +, +�d +:: +�r�g +("t")+ +to_�r�g +(i)); + +182 + gT +[ +�mt +]. +�tup_�mes +(); + +184 +R��i� + + gR + = +R�ge +( +Re�ri�_Doma� +( +c�y +( +T +[ +�mt +]), c�y( +�d_IS +[stmt]))); + +185 + gR +. +sim�ify +(); + +186 + gR +. +is_u��_bound_�tisf�b� +()) { + +187 + g�w_IS +. +��lo�� +( +maxStmt +); + +188 + g��sf�m�i�s +. +��lo�� +( +maxStmt +); + +189 + g��em�tInfo +. +��lo�� +( +maxStmt +); + +190 +DNF + * + gdnf + = +R +. +qu�y_DNF +(); + +191 +DNF_I��t� + +c +( +dnf +); + +192 +R��i� + + gR2 + = R��i�( +R +, * +c +); + +193 + gR2 +. +sim�ify +(); + +194 i�( + gR2 +. +is_�exa� +()) + +195 +throw + +codeg�_�r� +("unknown constraint in�oop bounds"); + +196 i�( + gknown +. +is_nu� +()) { + +197 + g�w_IS +[ +maxStmt +] = +R2 +; + +198 + g��sf�m�i�s +[ +maxStmt +] = +T +[ +�mt +]; + +199 + g��em�tInfo +[ +maxStmt +] = +�mt_cڋ� +[ +�mt +]; + +200 + gmaxStmt +++; + +203 +R��i� + + gR2_ex�nded + = +c�y +( +R2 +); + +204 +R��i� + + gknown_ex�nded + = +c�y +( +known +); + +205 i�( + gR2 +. +n_�t +(�> + gknown +.n_set()) + +206 + gknown_ex�nded + = +Ex�nd_S� +( +known_ex�nded +, +R2 +. +n_�t +()- +known +.n_set()); + +207 i�( + gR2 +. +n_�t +(�< + gknown +.n_set()) + +208 + gR2_ex�nded + = +Ex�nd_S� +( +R2_ex�nded +, +known +. +n_�t +()- +R2 +.n_set()); + +209 i�( +I����i� +( +R2_ex�nded +, +known_ex�nded +). +is_u��_bound_�tisf�b� +()) { + +210 + g�w_IS +[ +maxStmt +] = +R2 +; + +211 + g��sf�m�i�s +[ +maxStmt +] = +T +[ +�mt +]; + +212 + g��em�tInfo +[ +maxStmt +] = +�mt_cڋ� +[ +�mt +]; + +213 + gmaxStmt +++; + +216 + gc +. +�xt +(); + +217 i�(! + gc +. +live +()) + +219 if( + gcode_g�_debug +) { + +220 +�r�tf +( +DebugF�e +, "splitting iteration space for disjoint form\n"); + +221 +�r�tf +( +DebugF�e +, "Original iteration space: \n"); + +222 + gR +. +��t_w�h_subs +( +DebugF�e +); + +223 +�r�tf +( +DebugF�e +, "First conjunct: \n"); + +224 + gR2 +. +��t_w�h_subs +( +DebugF�e +); + +226 +R��i� + +�ma�d� +( +R +, * +c +); + +227 + gc +. +�xt +(); + +228 + gc +. +live +()) { + +229 + g�ma�d� + = +Uni� +( +�ma�d� +, +R��i� +( +R +, * +c +)); + +230 + gc +. +�xt +(); + +232 + gR + = +Dif�n� +( +�ma�d� +, +c�y +( +R2 +)); + +233 + gR +. +sim�ify +(); + +234 if( + gcode_g�_debug +) { + +235 +�r�tf +( +DebugF�e +, "Remaining iteration space: \n"); + +236 + gR +. +��t_w�h_subs +( +DebugF�e +); + +242 + g�mts + = +maxStmt +-1; + +243 if( + g�mts + == 0) + +244 +ocg +-> +C��eComm�t +(1, "No�oints in�ny of�he iteration spaces!"); + +247 + g�mt + = 1; stm�<� +�mts +; stmt++) { + +248 + g�d_dim + = +�w_IS +[ +�mt +]. +n_�t +(); + +249 i�( + g�d_dim + < + gϡ_�v� +) { + +250 + g�w_IS +[ +�mt +] = +Ex�nd_S� +( +�w_IS +[�mt], +ϡ_�v� +- +�d_dim +); + +251 +F_And + * + gf_ro� + = +�w_IS +[ +�mt +]. +�d_w�h_�d +(); + +252 + gi + = +�d_dim ++1; i <� +ϡ_�v� +; i++) { + +253 +EQ_H�d� + + gh + = +f_ro� +-> +add_EQ +(); + +254 + gh +. +upd�e_c�f +( +�w_IS +[ +�mt +]. +�t_v� +( +i +), 1); + +255 + gh +. +upd�e_cڡ +( +posInf��y +); + +261 if( + gknown +. +is_nu� +()) { + +262 + gknown + = +R��i� +:: +True +( +ϡ_�v� +); + +264 + gknown + = +Ex�nd_S� +( +known +, +ϡ_�v� +-known. +n_�t +()); + +265 + gi + = 1; i <� +ϡ_�v� +; i++) + +266 + gknown +. +�me_�t_v� +( +i +, +�d +:: +�r�g +("t")+ +to_�r�g +(i)); + +267 + gknown +. +�tup_�mes +(); + +270 + g�oje�ed_nIS +. +��r +(); + +271 + g�oje�ed_nIS +. +��lo�� +( +ϡ_�v� +); + +272 + gi + = 1; i <� +ϡ_�v� +; i++ ) { + +273 + g�oje�ed_nIS +[ +i +]. +��lo�� +( +�mts +); + +275 + g�mt + = 1; stm�<� +�mts +; stmt++) { + +276 i�( + gϡ_�v� + > 0) + +277 + g�oje�ed_nIS +[ +ϡ_�v� +][ +�mt +] = +�w_IS +[stmt]; + +278 + gi + = +ϡ_�v� +-1; i >= 1; i--) { + +279 + g�oje�ed_nIS +[ +i +][ +�mt +] = +Proje� +( +c�y +( +�oje�ed_nIS +[i+1][�mt]), i+1, +S�_V� +); + +280 + g�oje�ed_nIS +[ +i +][ +�mt +]. +sim�ify +(); + +285 +I�Tu�e + +�lStmts +( +�mts +); + +286 + gi + = 1; i <� +�mts +; i++) + +287 + g�lStmts +[ +i +] = 1; + +288 +CG_�su� + * + gcg + = +g�_�cursive +(1, +�lStmts +); + +291 + gcg + = +cg +-> +�compu� +( +known +, known); + +292 + gcg + = +cg +-> +f��_f��e_bounds +(); + +295 + gi + = 1; i <� +m� +( +eff�t +, +cg +-> +d�th +()); i++) + +296 + gcg + = +cg +-> +li�Ov�h�d +( +i +); + +299 + gcg +-> +hoi�Gu�d +(); + +303 +CG_ou�utR�r +* + gsR�r + = +cg +-> +��tR�r +( +ocg +, 1, +�d +:: +ve�� +<CG_ou�utR��*>( +ϡ_�v� +)); + +304 +d��e + + gcg +; + +305 + gcg + = +NULL +; + +306 + g�oje�ed_nIS +. +��r +(); + +307 + g��sf�m�i�s +. +��r +(); + +308 + g�w_IS +. +��r +(); + +310 + gsR�r +; + +314 +CG_ou�utR�r +* +MMG���eCode +( +CG_ou�utBu�d� +* +ocg +, +R�Tu�e + & +T +, +S�Tu�e + & +�d_IS +, + +315 cڡ +Tu�e +< +CG_ou�utR�r + *> & +�mt_cڋ� +, +R��i� + & +known +, + +316 +Tu�e +< +I�Tu�e + >& +smtN�S��Lev�s_ +, + +317 +�d +:: +ve�� +< std:: +�� +<, std:: +�r�g +> > +syncs_ +, + +318 cڡ +Tu�e +< Tu�e< +�d +:: +�r�g +> >& +lo�IdxNames_ +, + +319 +eff�t +) { + +320 + g�mts + = +T +. +size +(); + +321 i�( + g�mts + == 0) + +322 +ocg +-> +C��eComm�t +(1, "No statements found!"); + +323 i�(! + gknown +. +is_nu� +()) + +324 + gknown +. +sim�ify +(); + +328 + gsmtN�S��Lev�s + = +smtN�S��Lev�s_ +; + +329 + gsyncs + = +syncs_ +; + +330 + glo�IdxNames + = +lo�IdxNames_ +; + +336 + gmaxStmt + = 1; + +337 + gϡ_�v� + = 0; + +338 + g�mt + = 1; stm�<� +�mts +; stmt++) { + +339 + g�d_dim + = +T +[ +�mt +]. +n_out +(); + +340 i�( + g�d_dim + > + gϡ_�v� +) + +341 + gϡ_�v� + = +�d_dim +; + +343 + gi + = 1; i <� +�d_IS +[ +�mt +]. +n_�t +(); i++) + +344 + gT +[ +�mt +]. +�me_�put_v� +( +i +, +�d_IS +[�mt]. +�t_v� +(i)-> +�me +()); + +345 + gi + = 1; i <� +�d_dim +; i++) + +346 + gT +[ +�mt +]. +�me_ou�ut_v� +( +i +, +�d +:: +�r�g +("t")+ +to_�r�g +(i)); + +347 + gT +[ +�mt +]. +�tup_�mes +(); + +349 +R��i� + + gR + = +R�ge +( +Re�ri�_Doma� +( +c�y +( +T +[ +�mt +]), c�y( +�d_IS +[stmt]))); + +350 + gR +. +sim�ify +(); + +351 + gR +. +is_u��_bound_�tisf�b� +()) { + +352 + g�w_IS +. +��lo�� +( +maxStmt +); + +353 + g��sf�m�i�s +. +��lo�� +( +maxStmt +); + +354 + g��em�tInfo +. +��lo�� +( +maxStmt +); + +357 + gsmtN�S��Lev�s +. +��lo�� +( +maxStmt +); + +361 +DNF + * + gdnf + = +R +. +qu�y_DNF +(); + +362 +DNF_I��t� + +c +( +dnf +); + +363 +R��i� + + gR2 + = R��i�( +R +, * +c +); + +364 + gR2 +. +sim�ify +(); + +365 i�( + gR2 +. +is_�exa� +()) + +366 +throw + +codeg�_�r� +("unknown constraint in�oop bounds"); + +367 i�( + gknown +. +is_nu� +()) { + +368 + g�w_IS +[ +maxStmt +] = +R2 +; + +369 + g��sf�m�i�s +[ +maxStmt +] = +T +[ +�mt +]; + +370 + g��em�tInfo +[ +maxStmt +] = +�mt_cڋ� +[ +�mt +]; + +371 + gmaxStmt +++; + +374 +R��i� + + gR2_ex�nded + = +c�y +( +R2 +); + +375 +R��i� + + gknown_ex�nded + = +c�y +( +known +); + +376 i�( + gR2 +. +n_�t +(�> + gknown +.n_set()) + +377 + gknown_ex�nded + = +Ex�nd_S� +( +known_ex�nded +, +R2 +. +n_�t +()- +known +.n_set()); + +378 i�( + gR2 +. +n_�t +(�< + gknown +.n_set()) + +379 + gR2_ex�nded + = +Ex�nd_S� +( +R2_ex�nded +, +known +. +n_�t +()- +R2 +.n_set()); + +380 i�( +I����i� +( +R2_ex�nded +, +known_ex�nded +). +is_u��_bound_�tisf�b� +()) { + +381 + g�w_IS +[ +maxStmt +] = +R2 +; + +382 + g��sf�m�i�s +[ +maxStmt +] = +T +[ +�mt +]; + +383 + g��em�tInfo +[ +maxStmt +] = +�mt_cڋ� +[ +�mt +]; + +384 + gmaxStmt +++; + +387 + gc +. +�xt +(); + +388 i�(! + gc +. +live +()) + +390 if( + gcode_g�_debug +) { + +391 +�r�tf +( +DebugF�e +, "splitting iteration space for disjoint form\n"); + +392 +�r�tf +( +DebugF�e +, "Original iteration space: \n"); + +393 + gR +. +��t_w�h_subs +( +DebugF�e +); + +394 +�r�tf +( +DebugF�e +, "First conjunct: \n"); + +395 + gR2 +. +��t_w�h_subs +( +DebugF�e +); + +397 +R��i� + +�ma�d� +( +R +, * +c +); + +398 + gc +. +�xt +(); + +399 + gc +. +live +()) { + +400 + g�ma�d� + = +Uni� +( +�ma�d� +, +R��i� +( +R +, * +c +)); + +401 + gc +. +�xt +(); + +403 + gR + = +Dif�n� +( +�ma�d� +, +c�y +( +R2 +)); + +404 + gR +. +sim�ify +(); + +405 if( + gcode_g�_debug +) { + +406 +�r�tf +( +DebugF�e +, "Remaining iteration space: \n"); + +407 + gR +. +��t_w�h_subs +( +DebugF�e +); + +413 + g�mts + = +maxStmt +-1; + +414 if( + g�mts + == 0) + +415 +ocg +-> +C��eComm�t +(1, "No�oints in�ny of�he iteration spaces!"); + +418 + g�mt + = 1; stm�<� +�mts +; stmt++) { + +419 + g�d_dim + = +�w_IS +[ +�mt +]. +n_�t +(); + +420 i�( + g�d_dim + < + gϡ_�v� +) { + +421 + g�w_IS +[ +�mt +] = +Ex�nd_S� +( +�w_IS +[�mt], +ϡ_�v� +- +�d_dim +); + +422 +F_And + * + gf_ro� + = +�w_IS +[ +�mt +]. +�d_w�h_�d +(); + +423 + gi + = +�d_dim ++1; i <� +ϡ_�v� +; i++) { + +424 +EQ_H�d� + + gh + = +f_ro� +-> +add_EQ +(); + +425 + gh +. +upd�e_c�f +( +�w_IS +[ +�mt +]. +�t_v� +( +i +), 1); + +426 + gh +. +upd�e_cڡ +( +posInf��y +); + +432 if( + gknown +. +is_nu� +()) { + +433 + gknown + = +R��i� +:: +True +( +ϡ_�v� +); + +435 + gknown + = +Ex�nd_S� +( +known +, +ϡ_�v� +-known. +n_�t +()); + +436 + gi + = 1; i <� +ϡ_�v� +; i++) + +437 + gknown +. +�me_�t_v� +( +i +, +�d +:: +�r�g +("t")+ +to_�r�g +(i)); + +438 + gknown +. +�tup_�mes +(); + +441 + g�oje�ed_nIS +. +��r +(); + +442 + g�oje�ed_nIS +. +��lo�� +( +ϡ_�v� +); + +443 + gi + = 1; i <� +ϡ_�v� +; i++ ) { + +444 + g�oje�ed_nIS +[ +i +]. +��lo�� +( +�mts +); + +446 + g�mt + = 1; stm�<� +�mts +; stmt++) { + +447 i�( + gϡ_�v� + > 0) + +448 + g�oje�ed_nIS +[ +ϡ_�v� +][ +�mt +] = +�w_IS +[stmt]; + +449 + gi + = +ϡ_�v� +-1; i >= 1; i--) { + +450 + g�oje�ed_nIS +[ +i +][ +�mt +] = +Proje� +( +c�y +( +�oje�ed_nIS +[i+1][�mt]), i+1, +S�_V� +); + +451 + g�oje�ed_nIS +[ +i +][ +�mt +]. +sim�ify +(); + +456 +I�Tu�e + +�lStmts +( +�mts +); + +457 + gi + = 1; i <� +�mts +; i++) + +458 + g�lStmts +[ +i +] = 1; + +459 +CG_�su� + * + gcg + = +g�_�cursive +(1, +�lStmts +); + +462 + gcg + = +cg +-> +�compu� +( +known +, known); + +463 + gcg + = +cg +-> +f��_f��e_bounds +(); + +466 + gi + = 1; i <� +m� +( +eff�t +, +cg +-> +d�th +()); i++) + +467 + gcg + = +cg +-> +li�Ov�h�d +( +i +); + +470 + gcg +-> +hoi�Gu�d +(); + +474 +CG_ou�utR�r +* + gsR�r + = +cg +-> +��tR�r +( +ocg +, 1, +�d +:: +ve�� +<CG_ou�utR��*>( +ϡ_�v� + )); + +475 +d��e + + gcg +; + +476 + gcg + = +NULL +; + +477 + g�oje�ed_nIS +. +��r +(); + +478 + g��sf�m�i�s +. +��r +(); + +479 + g�w_IS +. +��r +(); + +481 + gsR�r +; + +484 +CG_�su� + * + $g�_�cursive +( +�v� +, +I�Tu�e + & +isA�ive +) { + +485 +�mts + = +isA�ive +. + `size +(); + +487 +S� +<> +a�ive +; + +488 +s +; + +489 +s + = 1; s <� +�mts +; s++) + +490 if( +isA�ive +[ +s +]� +a�ive +. + `��� +(s); + +492 + `as�� + ( +a�ive +. + `size +() >= 1); + +493 if( +�v� + > +ϡ_�v� +� +�w + + `CG_�af +( +isA�ive +); + +495 i�( +a�ive +. + `size +() == 1) + +496 +�w + + `CG_lo� +( +isA�ive +, +�v� +, + `g�_�cursive +(level+1,isActive)); + +498 +bo� + +cڡ�tLev� + = +�ue +; + +500 +��_�l_size +; + +501 +c�f_t + +��t +, +f�ish +; + +502 +f�ish + = -( +posInf��y +-1); + +503 +��t + = +posInf��y +; + +504 +Tu�e +< +c�f_t +> + `wh� +( +�mts +); + +505 +s +=1; s<= +�mts +; s++�i�( +isA�ive +[s]) { + +506 +c�f_t + +lb +, +ub +; + +507 +��_�l_size + = +�oje�ed_nIS +[ +�v� +][ +s +]. + `n_�t +(); + +508 +�oje�ed_nIS +[ +�v� +][ +s +]. + `s�g�_c�jun� +() + +509 -> + `qu�y_v��b�_bounds +( + +510 +�oje�ed_nIS +[ +�v� +][ +s +]. + `�t_v� +(level), + +511 +lb +, +ub +); + +512 if( +code_g�_debug +) { + +513 + `�r�tf +( +DebugF�e +, "IS%d: " +c�f_fmt + " <�t%d <�" c�f_fm�"\n", +s +, + +514 +lb +, +�v� +, +ub +); + +515 +�oje�ed_nIS +[ +�v� +][ +s +]. + `�efix_��t +( +DebugF�e +); + +517 i�( +lb + !� +ub +) { + +518 +cڡ�tLev� + = +�l� +; + +522 + `�t_max +( +f�ish +, +lb +); + +523 + `�t_m� +( +��t +, +lb +); + +524 +wh� +[ +s +] = +lb +; + +529 i�( +cڡ�tLev� + && +f�ish +- +��t + <� +�mts +) { + +530 +I�Tu�e + + `�wA�ive +( +isA�ive +. + `size +()); + +531 +i +=1; i<= +�mts +; i++) + +532 +�wA�ive +[ +i +] = +isA�ive +[i] && +wh� +[i] =� +��t +; + +533 +CG_�su� + * +r + = +�w + + `CG_lo� +( +isA�ive +, +�v� +, + +534 + `g�_�cursive +( +�v� ++1, +�wA�ive +)); + +535 +c�f_t + +time + = +��t ++1;�im�<� +f�ish +;�ime++) { + +536 +cou� + = 0; + +537 +i +=1; i<= +�mts +; i++) { + +538 +�wA�ive +[ +i +] = +isA�ive +[i] && +wh� +[i] =� +time +; + +539 i�( +�wA�ive +[ +i +]� +cou� +++; + +541 i�( +cou� +) { + +542 +R��i� + + `��_�l +( +��_�l_size +); + +543 +GEQ_H�d� + +g + = +��_�l +. + `�d_w�h_GEQ +(); + +544 +g +. + `upd�e_c�f +( +��_�l +. + `�t_v� +( +�v� +),-1); + +545 +g +. + `upd�e_cڡ +( +time +-1); + +547 +r + = +�w + + `CG_�l� +( +isA�ive +, +�v� +, +��_�l +,r, + +548 +�w + + `CG_lo� +( +isA�ive +, +�v� +, + +549 + `g�_�cursive +( +�v� ++1, +�wA�ive +))); + +552 +r +; + +560 +R��i� + +hu� + = + `Hu� +( +�oje�ed_nIS +[ +�v� +], +isA�ive +,1); + +562 +R��i� + +hu� + = + `Hu� +( +�oje�ed_nIS +[ +�v� +], +isA�ive +,0); + +565 if( +code_g�_debug +) { + +566 + `�r�tf +( +DebugF�e +, "Hu� (�v� %d�is:\n", +�v� +); + +567 +hu� +. + `�efix_��t +( +DebugF�e +); + +571 +I�Tu�e + + `f��Chunk +( +isA�ive +); + +572 +I�Tu�e + + `�c�dChunk +( +isA�ive +); + +579 +bo� + +checkF�S��s + = +�ue +; + +580 +s + = 1; s <� +isA�ive +. + `size +(); s++){ + +581 i�( +isA�ive +[ +s +]) { + +582 if( +s + < +smtN�S��Lev�s +. + `size +(�&& smtN�S��Lev�s[s]. + `�dex +( +�v� +-2) != 0){ + +583 +checkF�S��s + = +�l� +; + +590 +s + = 1; +checkF�S��s + && s <� +isA�ive +. + `size +(); s++) + +591 i�( +isA�ive +[ +s +]) { + +592 +R��i� + +gi� + = + `Gi� +( + `c�y +( +�oje�ed_nIS +[ +�v� +][ +s +]),c�y( +hu� +),1); + +593 i�( +gi� +. + `is_obvious_�ut�ogy +()) ; + +594 +gi� +. + `sim�ify +(); + +595 +C�jun� + * +s_c�j + = +gi� +. + `s�g�_c�jun� +(); + +596 +GEQ_I��t� + + `G +( +s_c�j +); +G +; G++) { + +597 +R��i� + + `��_�l +( +gi� +. + `n_�t +()); + +598 +��_�l +. + `�d_w�h_GEQ +(* +G +); + +599 +V��b�_ID + +v + = + `�t_v� +( +�v� +); + +600 +c�f_t + +sign + = (* +G +). + `g�_c�f +( +v +); + +601 if( +sign + > 0� +��_�l + = + `Com�em�t +(test_rel); + +602 if( +code_g�_debug +) { + +603 + `�r�tf +( +DebugF�e +, "C�sid��g s�� from stm�%d:\n", +s +); + +604 +��_�l +. + `�efix_��t +( +DebugF�e +); + +607 +f��Chunk +[ +s +] = +sign + <= 0; + +608 +�c�dChunk +[ +s +] = +sign + > 0; + +609 +numb�F�� + = +sign + <= 0; + +610 +numb�Sec�d + = +sign + > 0; + +612 +s2 + = 1; s2 <� +isA�ive +. + `size +(); s2++) + +613 i�( +isA�ive +[ +s2 +] && s2 !� +s +) { + +614 if( +code_g�_debug +) + +615 + `�r�tf +( +DebugF�e +,"C�sid� stm�%d\n", +s2 +); + +616 +bo� + +t + = + `I����i� +( + `c�y +( +�oje�ed_nIS +[ +�v� +][ +s2 +]), + +617 + `c�y +( +��_�l +)). + `is_u��_bound_�tisf�b� +(); + +618 +bo� + +f + = + `Dif�n� +( + `c�y +( +�oje�ed_nIS +[ +�v� +][ +s2 +]), + +619 + `c�y +( +��_�l +)). + `is_u��_bound_�tisf�b� +(); + +620 + `as�� +( +t + || +f +); + +621 if( +code_g�_debug + && +t +&& +f +) + +622 + `�r�tf +( +DebugF�e +, "S�she��m�%d\n", +s2 +); + +623 i�( +t +&& +f +� +�xtGEQ +; + +624 if( +code_g�_debug +) { + +625 i�( +t +) + +626 + `�r�tf +( +DebugF�e +, "�u�f� stm�%d\n", +s2 +); + +628 + `�r�tf +( +DebugF�e +, "�l� f� stm�%d\n", +s2 +); + +630 i�( +t +� +numb�F�� +++; + +631 +numb�Sec�d +++; + +632 +f��Chunk +[ +s2 +] = +t +; + +633 +�c�dChunk +[ +s2 +] = ! +t +; + +636 + `as�� +( +numb�F�� ++ +numb�Sec�d +>1 && "Can't handle wildcard in iteration space"); + +637 if( +code_g�_debug +) + +638 + `�r�tf +( +DebugF�e +, "%d�rue, %d false\n", + +639 +numb�F�� +, + +640 +numb�Sec�d +); + +641 i�( +numb�F�� + && +numb�Sec�d +) { + +643 +�w + + `CG_�l� +( +isA�ive +, +�v� +, +��_�l +, + +644 + `g�_�cursive +( +�v� +, +f��Chunk +), + +645 + `g�_�cursive +( +�v� +, +�c�dChunk +)); + +647 +�xtGEQ +: ; + +653 +�w + + `CG_lo� +( +isA�ive +, +�v� +, + `g�_�cursive +(level+1,isActive)); + +654 + } +} + + @output_repr.cc + +16 + ~<omega.h +> + +17 + ~<code_g�/CG_�r�gBu�d�.h +> + +18 + ~<code_g�/ou�ut_��.h +> + +19 + ~<basic/omega_�r�.h +> + +20 + ~<m�h.h +> + +21 + ~<�ack +> + +22 + ~<ty��fo +> + +24 +�me�a� + + gomega + { + +26
+Tu�e +<Tu�e< +R��i� +> > +�oje�ed_nIS +; + +27 + gv�_sub��uti�_th�sh�d + = 100; + +29
+u��BoundF�Lev� +; + +30
+low�BoundF�Lev� +; + +31
+bo� + +f�lInBounds +; + +37 +�me�a� + + gomega + { + +39 + g�d +:: +�� +< +EQ_H�d� +, > +f�d_sim�e�_assignm�t +(cڡ +R��i� + & +R_ +, +V��b�_ID + +v +, cڡ +�d +:: +ve�� +< +CG_ou�utR�r + *> & +assig�d_�_the_�y +); + +42 + g�me�a� + { + +47 +g�_�ride +(cڡ +Cڡ��t_H�d� + & +h +, +V��b�_ID + & +wc +, +c�f_t + & +�� +){ + +48 + gwc + = 0; + +49 +Cڡr_V�s_I�r + +i +( +h +, +�ue +); + gi +; i++) { + +50 +as�� +( +wc + == 0); + +51 + gwc + = (* +i +). +v� +; + +52 + g�� + = ((* +i +). +c�f +); + +58 +CG_ou�utR�r +* +ou�utId�t +( +CG_ou�utBu�d� +* +ocg +, cڡ +R��i� + & +R_ +, +V��b�_ID + +v +, cڡ +�d +:: +ve�� +<CG_ou�utR��*> & +assig�d_�_the_�y +) { + +59 +R��i� + & +R + = +cڡ_�� +<R��i� &>( +R_ +); + +61 + gv +-> +k�d +()) { + +62 + gS�_V� +: { + +63 +pos + = +v +-> +g�_pos�i� +(); + +64 i�( + gassig�d_�_the_�y +[ +pos +-1] !� +NULL +) + +65 +assig�d_�_the_�y +[ +pos +-1]-> +��e +(); + +67 + gocg +-> +C��eId�t +( +v +-> +�me +()); + +70 + gGlob�_V� +: { + +71 i�( +v +-> +g�_glob�_v� +()-> +��y +() == 0) + +72 +ocg +-> +C��eId�t +( +v +-> +�me +()); + +76 + g��y + = +v +-> +g�_glob�_v� +()-> +��y +(); + +78 + gTu�e +< + gCG_ou�utR�r + *> + g�gLi� +; + +82 + gi + = 1; i <� +��y +; i++) + +83 + g�gLi� +. +��nd +( +ocg +-> +C��eId�t +( +R +. +�t_v� +( +i +)-> +�me +())); + +84 +CG_ou�utR�r + * + g�� + = +ocg +-> +C��eInvoke +( +v +-> +g�_glob�_v� +()-> +ba�_�me +(), +�gLi� +); + +85 + g�� +; + +90 +throw + +�d +:: +�v�id_�gum�t +("wrong variable�ype"); + +101 + g�d +:: +�� +< +CG_ou�utR�r + *, + gbo� +> +ou�utAssignm�t +( +CG_ou�utBu�d� + * +ocg +, cڡ +R��i� + & +R_ +, +V��b�_ID + +v +, R��i� & +�f��d +, CG_ou�utR��*& +if_�� +, cڡ +�d +:: +ve�� +<CG_ou�utR��*> & +assig�d_�_the_�y +) { + +102 +R��i� + & +R + = +cڡ_�� +<R��i� &>( +R_ +); + +104 +C�jun� + * + gc + = +R +. +qu�y_DNF +()-> +s�g�_c�jun� +(); + +107 +EQ_I��t� + +ei +( +c +); + gei +;�i++) + +108 i�(!(* + gei +). +has_w�d�rds +(�&& +abs +((* +ei +). +g�_c�f +( +v +)) > 1) { + +109 +R��i� + +r +( +R +. +n_�t +()); + +110 +F_And + * + gf_su�r_ro� + = +r +. +add_�d +(); + +111 +F_Exi�s + * + g� + = +f_su�r_ro� +-> +add_exi�s +(); + +112 +V��b�_ID + + ge + = +� +-> +de��e +(); + +113 +F_And + * + gf_ro� + = +� +-> +add_�d +(); + +114 +EQ_H�d� + + gh + = +f_ro� +-> +add_EQ +(); + +115 +Cڡr_V�s_I�r + +cvi +(* +ei +); + gcvi +; cvi++) + +116 (* + gcvi +). + gv� +-> +k�d +()) { + +117 + gI�ut_V� +: { + +118 i�((* +cvi +). +v� + =� +v +) + +119 +h +. +upd�e_c�f +( +e +, (* +cvi +). +c�f +); + +121 + gh +. +upd�e_c�f +( +r +. +�t_v� +((* +cvi +). +v� +-> +g�_pos�i� +()), (*cvi). +c�f +); + +124 + gGlob�_V� +: { + +125 +Glob�_V�_ID + +g + = (* +cvi +). +v� +-> +g�_glob�_v� +(); + +126 +V��b�_ID + + gv2 +; + +127 i�( + gg +-> +��y +() == 0) + +128 +v2 + = +r +. +g�_lo�l +( +g +); + +130 + gv2 + = +r +. +g�_lo�l +( +g +, (* +cvi +). +v� +-> +fun�i�_of +()); + +131 + gh +. +upd�e_c�f +( +v2 +, (* +cvi +). +c�f +); + +135 +as�� +(0); + +137 + gh +. +upd�e_cڡ +((* +ei +). +g�_cڡ +()); + +139 + gr +. +c�y_�mes +( +R +); + +140 + gr +. +�tup_�mes +(); + +143 i�(! +Gi� +( +r +, +c�y +( +�f��d +), 1). +is_obvious_�ut�ogy +()) { + +144 +c�f_t + + gc�f + = (* +ei +). +g�_c�f +( +v +); + +145 +c�f_t + + gsign + = -(( +c�f +>0)?1:-1); + +146 + gc�f + = +abs +( +c�f +); + +148 +CG_ou�utR�r + * + g�rm + = +NULL +; + +149 +Cڡr_V�s_I�r + +cvi +(* +ei +); + gcvi +; cvi++) + +150 i�((* + gcvi +). + gv� + !� +v +) { + +151 +CG_ou�utR�r + * +v�R�r + = +ou�utId�t +( +ocg +, +R +, (* +cvi +). +v� +, +assig�d_�_the_�y +); + +152 +c�f_t + + gt + = +sign +*(* +cvi +). +c�f +; + +153 i�( + gt + == 1) + +154 +�rm + = +ocg +-> +C��ePlus +єm, +v�R�r +); + +155 i�( + gt + == -1) + +156 +�rm + = +ocg +-> +C��eM�us +єm, +v�R�r +); + +157 i�( + gt + > 0) + +158 + g�rm + = +ocg +-> +C��ePlus +( +�rm +, ocg-> +C��eTimes +(ocg-> +C��eI� +( +t +), +v�R�r +)); + +159 i�( + gt + < 0) + +160 + g�rm + = +ocg +-> +C��eM�us +( +�rm +, ocg-> +C��eTimes +(ocg-> +C��eI� +(- +t +), +v�R�r +)); + +162 +c�f_t + + gt + = +sign +*(* +ei +). +g�_cڡ +(); + +163 i�( + gt + > 0) + +164 + g�rm + = +ocg +-> +C��ePlus +( +�rm +, ocg-> +C��eI� +( +t +)); + +165 i�( + gt + < 0) + +166 + g�rm + = +ocg +-> +C��eM�us +( +�rm +, ocg-> +C��eI� +(- +t +)); + +168 + g�rm + = +ocg +-> +C��eI�eg�Mod +( +�rm +, ocg-> +C��eI� +( +c�f +)); + +169 + g�rm + = +ocg +-> +C��eEQ +( +�rm +, ocg-> +C��eI� +(0)); + +171 + gif_�� + = +ocg +-> +C��eAnd +( +if_�� +, +�rm +); + +174 + g�f��d +. +�d_w�h_EQ +(* +ei +); + +175 + g�f��d +. +sim�ify +(); + +179 + g�d +:: +�� +< +EQ_H�d� +, > + ga + = +f�d_sim�e�_assignm�t +( +R +, +v +, +assig�d_�_the_�y +); + +182 i�( + ga +. + g�c�d + < + gINT_MAX +) { + +183 +EQ_H�d� + + geq + = +a +. +f�� +; + +184 +CG_ou�utR�r + * + gr�_�� + = +NULL +; + +186 +c�f_t + + gdivid� + = +eq +. +g�_c�f +( +v +); + +187 + gsign + = 1; + +188 i�( + gdivid� + < 0) { + +189 + gdivid� + = - +divid� +; + +190 + gsign + = -1; + +193 +Cڡr_V�s_I�r + +cvi +( +eq +); + gcvi +; cvi++) + +194 i�((* + gcvi +). + gv� + !� +v +) { + +195 +CG_ou�utR�r + * +v�_�� + = +ou�utId�t +( +ocg +, +R +, (* +cvi +). +v� +, +assig�d_�_the_�y +); + +196 +c�f_t + + gc�f + = (* +cvi +). +c�f +; + +197 i�(- +sign + * + gc�f + == -1) + +198 +r�_�� + = +ocg +-> +C��eM�us +��_��, +v�_�� +); + +199 i�(- +sign + * + gc�f + < -1) + +200 + gr�_�� + = +ocg +-> +C��eM�us +( +r�_�� +, ocg-> +C��eTimes +(ocg-> +C��eI� +( +sign + * +c�f +), +v�_�� +)); + +201 i�(- +sign + * + gc�f + == 1) + +202 +r�_�� + = +ocg +-> +C��ePlus +��_��, +v�_�� +); + +204 + gr�_�� + = +ocg +-> +C��ePlus +( +r�_�� +, ocg-> +C��eTimes +(ocg-> +C��eI� +(- +sign + * +c�f +), +v�_�� +)); + +207 +c�f_t + + gc_�rm + = -( +eq +. +g�_cڡ +(�* +sign +); + +209 i�( + gc_�rm + > 0) + +210 + gr�_�� + = +ocg +-> +C��ePlus +( +r�_�� +, ocg-> +C��eI� +( +c_�rm +)); + +211 i�( + gc_�rm + < 0) + +212 + gr�_�� + = +ocg +-> +C��eM�us +( +r�_�� +, ocg-> +C��eI� +(- +c_�rm +)); + +213 i�( + gr�_�� + =� +NULL +) + +214 +r�_�� + = +ocg +-> +C��eI� +(0); + +216 i�( + gdivid� + != 1) + +217 +r�_�� + = +ocg +-> +C��eI�eg�Divide +��_��, ocg-> +C��eI� +( +divid� +)); + +219 + g�f��d +. +�d_w�h_EQ +( +eq +); + +220 + g�f��d +. +sim�ify +(); + +222 i�( + ga +. + g�c�d + > + gv�_sub��uti�_th�sh�d +) + +223 + g�d +:: +make_�� +( +r�_�� +, +�ue +); + +225 + g�d +:: +make_�� +( +r�_�� +, +�l� +); + +228 + g�d +:: +make_�� +( +��ic_�� +< +CG_ou�utR�r + *>( +NULL +), +�l� +); + +237 + gTu�e +< + gCG_ou�utR�r +*> +ou�utSub��uti� +( +CG_ou�utBu�d� +* +ocg +, cڡ +R��i� + & +R_ +, cڡ +�d +:: +ve�� +< +CG_ou�utR�r + *> & +assig�d_�_the_�y +) { + +238 +R��i� + & +R + = +cڡ_�� +<R��i� &>( +R_ +); + +240 cڡ + gn + = +R +. +n_out +(); + +241 + gTu�e +< + gCG_ou�utR�r +*> + goR�rLi� +; + +244 + gi + = 1; i <� +n +; i++) { + +245 +R��i� + +m�p�g +( +n +, 1); + +246 +F_And + * + gf_ro� + = +m�p�g +. +add_�d +(); + +247 +EQ_H�d� + + gh + = +f_ro� +-> +add_EQ +(); + +248 + gh +. +upd�e_c�f +( +m�p�g +. +ou�ut_v� +(1), 1); + +249 + gh +. +upd�e_c�f +( +m�p�g +. +�put_v� +( +i +), -1); + +251 +R��i� + + gS + = +Compos�i� +( +m�p�g +, +c�y +( +R +)); + +253 + g�d +:: +�� +< +EQ_H�d� +, > + ga + = +f�d_sim�e�_assignm�t +( +S +, S. +ou�ut_v� +(1), +assig�d_�_the_�y +); + +255 i�( + ga +. + g�c�d + < + gINT_MAX +) { + +256 + ga +. + g�c�d + > 0) { + +257 +EQ_H�d� + + geq + = +a +. +f�� +; + +258 + g�d +:: +�t +<> +�ndid�es +; + +259 +Cڡr_V�s_I�r + +cvi +( +eq +); + gcvi +; cvi++) + +260 i�((* + gcvi +). + gv� +-> +k�d +(�=� +I�ut_V� +) + +261 +�ndid�es +. +��� +((* +cvi +). +v� +-> +g�_pos�i� +()); + +263 +bo� + + gch�ged + = +�l� +; + +264 + g�d +:: +�t +<>:: +���� + +j + = +�ndid�es +. +beg� +(); + gj + !��ndid�es. +�d +(); j++) { + +265 +R��i� + + gS2 + = +Proje� +( +c�y +( +S +), * +j +, +I�ut_V� +); + +266 + g�d +:: +�� +< +EQ_H�d� +, > + ga2 + = +f�d_sim�e�_assignm�t +( +S2 +, S2. +ou�ut_v� +(1), +assig�d_�_the_�y +); + +267 i�( + ga2 +. + g�c�d + <� +a +. +�c�d +) { + +268 +S + = +S2 +; + +269 + ga + = +a2 +; + +270 + gch�ged + = +�ue +; + +274 i�(! + gch�ged +) + +279 i�( + ga +. + g�c�d + < + gINT_MAX +) { + +280 +CG_ou�utR�r + * + g�� + = +NULL +; + +281 +EQ_H�d� + + geq + = +a +. +f�� +; + +282 +V��b�_ID + + gv + = +S +. +ou�ut_v� +(1); + +284 + gj + = 1; j <� +S +. +n_�p +(); j++) + +285 + gS +. +�me_�put_v� +( +j +, +R +. +�put_v� +(j)-> +�me +()); + +286 + gS +. +�tup_�mes +(); + +288 + gd + = +eq +. +g�_c�f +( +v +); + +289 +as�� +( +d + != 0); + +290 + gsign + = ( +d +>0)?-1:1; + +291 + gd + = - +sign + * +d +; + +292 +Cڡr_V�s_I�r + +cvi +( +eq +); + gcvi +; cvi++) + +293 i�((* + gcvi +). + gv� + !� +v +) { + +294 +c�f + = +sign + * (* +cvi +).coef; + +295 +CG_ou�utR�r + * + g� + = +ou�utId�t +( +ocg +, +S +, (* +cvi +). +v� +, +assig�d_�_the_�y +); + +296 i�( + gc�f + > 1) + +297 + g� + = +ocg +-> +C��eTimes +(ocg-> +C��eI� +( +c�f +), +� +); + +298 i�( + gc�f + < -1) + +299 + g� + = +ocg +-> +C��eTimes +(ocg-> +C��eI� +(- +c�f +), +� +); + +300 i�( + gc�f + > 0) + +301 + g�� + = +ocg +-> +C��ePlus +( +�� +, +� +); + +302 i�( + gc�f + < 0) + +303 + g�� + = +ocg +-> +C��eM�us +( +�� +, +� +); + +306 + gc + = +sign + * +eq +. +g�_cڡ +(); + +307 i�( + gc + > 0) + +308 + g�� + = +ocg +-> +C��ePlus +( +�� +, ocg-> +C��eI� +( +c +)); + +309 i�( + gc + < 0) + +310 + g�� + = +ocg +-> +C��eM�us +( +�� +, ocg-> +C��eI� +(- +c +)); + +311 i�( + g�� + =� +NULL +) + +312 +�� + = +ocg +-> +C��eI� +(0); + +314 i�( + gd + != 1) + +315 +�� + = +ocg +-> +C��eI�eg�Divide +ԕr, ocg-> +C��eI� +( +d +)); + +317 + goR�rLi� +. +��nd +( +�� +); + +320 + goR�rLi� +. +��nd +( +NULL +); + +323 + goR�rLi� +; + +326 + g�me�a� + { + +328 +R��i� + +���_�ride_�_bound +( +n +, cڡ +�d +:: +m� +< +V��b�_ID +, +c�f_t +> & +lb +, c�f_� +�ride +) { + +329 +R��i� + +�su� +( +n +); + +330 +F_And + * + gf_ro� + = +�su� +. +add_�d +(); + +331 +EQ_H�d� + + gh + = +f_ro� +-> +add_�ride +( +�ride +); + +333 + g�d +:: +m� +< +V��b�_ID +, + gc�f_t +>:: +cڡ_���� + +i + = +lb +. +beg� +(); + gi + !�lb. +�d +(); i++) { + +334 i�( + gi +-> + gf�� + =� +NULL +) + +335 +h +. +upd�e_cڡ +( +i +-> +�c�d +); + +337 + gi +-> + gf�� +-> +k�d +()) { + +338 + gI�ut_V� +: { + +339 +pos + = +i +-> +f�� +-> +g�_pos�i� +(); + +340 + gh +. +upd�e_c�f +( +�su� +. +�t_v� +( +pos +), +i +-> +�c�d +); + +343 + gGlob�_V� +: { + +344 +Glob�_V�_ID + +g + = +i +-> +f�� +-> +g�_glob�_v� +(); + +345 +V��b�_ID + + gv +; + +346 i�( + gg +-> +��y +() == 0) + +347 +v + = +�su� +. +g�_lo�l +( +g +); + +349 + gv + = +�su� +. +g�_lo�l +( +g +, +i +-> +f�� +-> +fun�i�_of +()); + +350 + gh +. +upd�e_c�f +( +v +, +i +-> +�c�d +); + +354 +as�� +(0); + +359 + g�su� +; + +368 +R��i� + +g��e�_comm�_�� +(cڡ +Tu�e +<R��i�> & +I +, cڡ Tu�e<> & +a�ive +, +�v� +, cڡ R��i� & +known +) { + +369 +as�� +( +I +. +size +(�=� +a�ive +.size()); + +370 + gn + = 0; + +372 + g�d +:: +ve�� +< +R��i� +> +I1 +, + gI2 +; + +373 + gi + = 1; i <� +I +. +size +(); i++) + +374 i�( + ga�ive +[ +i +]) { + +375 i�( + gn + == 0) + +376 +n + = +I +[ +i +]. +n_�t +(); + +378 +R��i� + + gr1 +; + +379 i�( + gknown +. +is_nu� +()) + +380 + gr1 + = +c�y +( +I +[ +i +]); + +382 + gr1 + = +I����i� +( +c�y +( +I +[ +i +]), c�y( +known +)); + +383 + gr1 +. +sim�ify +(); + +385 + gI1 +. +push_back +( +r1 +); + +386 +R��i� + + gr2 + = +Gi� +( +c�y +( +I +[ +i +]), c�y( +known +)); + +387 +as�� +( +r2 +. +is_u��_bound_�tisf�b� +()); + +388 i�( + gr2 +. +is_obvious_�ut�ogy +()) + +389 + gR��i� +:: +True +( +n +); + +390 + gI2 +. +push_back +( +r2 +); + +393 + g�d +:: +ve�� +< +bo� +> +is_exa� +( +I2 +. +size +(), +�ue +); + +394 + g�d +:: +ve�� +< +c�f_t +> +�� +( +I2 +. +size +(), 0); + +395 + g�d +:: +ve�� +< +c�f_t +> +messy_�� +( +I2 +. +size +(), 0); + +396 +V��b�_ID + + gt_c� + = +�t_v� +( +�v� +); + +397 + g�d +:: +m� +< +V��b�_ID +, + gc�f_t +> + glb +; + +400 +size_t + + gi + = 0; i < + gI2 +. +size +(); i++) { + +401 +C�jun� + * + gc + = +I2 +[ +i +]. +qu�y_DNF +()-> +s�g�_c�jun� +(); + +403 +bo� + + gis_deg���ed + = +�l� +; + +404 +EQ_I��t� + + ge + = +c +-> +EQs +();�;�++) { + +405 +c�f_t + + gc�f + = +abs +((* +e +). +g�_c�f +( +t_c� +)); + +406 i�( + gc�f + !�0 && !(* +e +). +has_w�d�rds +()) { + +407 +is_deg���ed + = +�ue +; + +411 i�( + gis_deg���ed +) + +414 +EQ_I��t� + + ge + = +c +-> +EQs +();�;�++) { + +415 i�((* + ge +). +has_w�d�rds +()) { + +416 +c�f_t + + gc�f + = +abs +((* +e +). +g�_c�f +( +t_c� +)); + +417 i�( + gc�f + == 0) + +419 i�( + gc�f + != 1) { + +420 +is_exa� +[ +i +] = +�l� +; + +424 +c�f_t + + gthis_�� + = +abs +( +Cڡr_V�s_I�r +(* +e +, +�ue +). +cu�_c�f +()); + +425 +as�� +( +this_�� + != 1); + +427 i�( + glb +. +size +() != 0) { + +428 +R��i� + +�� + = +���_�ride_�_bound +( +n +, +lb +, +this_�� +); + +429 i�( +Gi� +( +�� +, +c�y +( +I1 +[ +i +])). +is_obvious_�ut�ogy +()) { + +430 i�( + g�� +[ +i +] == 0) + +431 +�� +[ +i +] = +this_�� +; + +433 + g�� +[ +i +] = +lcm +( +�� +[i], +this_�� +); + +436 + gis_exa� +[ +i +] = +�l� +; + +440 +C�jun� + * + gc + = +I2 +[ +i +]. +qu�y_DNF +()-> +s�g�_c�jun� +(); + +441 +GEQ_I��t� + + gge + = +c +-> +GEQs +(); ge; ge++) { + +442 i�((* + gge +). +has_w�d�rds +(�|| (*ge). +g�_c�f +( +t_c� +) != 1) + +445 + g�d +:: +m� +< +V��b�_ID +, + gc�f_t +> + gcur_lb +; + +446 +Cڡr_V�s_I�r + +cv +(* +ge +); + gcv +; cv++) + +447 + gcur_lb +[ +cv +. +cu�_v� +()] = cv. +cu�_c�f +(); + +448 + gcur_lb +[ +NULL +] = (* +ge +). +g�_cڡ +(); + +450 +R��i� + + g�� + = +���_�ride_�_bound +( +n +, +cur_lb +, +this_�� +); + +451 i�( +Gi� +( +�� +, +c�y +( +I1 +[ +i +])). +is_obvious_�ut�ogy +()) { + +452 i�( + g�� +[ +i +] == 0) + +453 +�� +[ +i +] = +this_�� +; + +455 + g�� +[ +i +] = +lcm +( +�� +[i], +this_�� +); + +457 + glb + = +cur_lb +; + +463 i�( + glb +. +size +() == 0) { + +464 +�d +:: +m� +< +V��b�_ID +, +c�f_t +> +cur_lb +; + +465 + gw�d_cou� + = 0; + +466 +Cڡr_V�s_I�r + +cv +(* +e +); + gcv +; cv++) + +467 i�( + gcv +. +cu�_v� +()-> +k�d +(�=� +W�d�rd_V� +) + +468 +w�d_cou� +++; + +470 + gcur_lb +[ +cv +. +cu�_v� +()] = cv. +cu�_c�f +(); + +471 + gcur_lb +[ +NULL +] = (* +e +). +g�_cڡ +(); + +473 i�( + gw�d_cou� + == 1) { + +474 +lb + = +cur_lb +; + +475 i�( + g�� +[ +i +] == 0) + +476 +�� +[ +i +] = +this_�� +; + +478 + g�� +[ +i +] = +lcm +( +�� +[i], +this_�� +); + +482 i�( + glb +. +size +() == 0) + +483 +is_exa� +[ +i +] = +�l� +; + +490 +c�f_t + + gglob�_�� + = 0; + +491 +size_t + + gi + = 0; i < + gis_exa� +. +size +(); i++) + +492 i�( + gis_exa� +[ +i +]) + +493 + gglob�_�� + = +gcd +( +glob�_�� +, +�� +[ +i +]); + +494 i�( + gglob�_�� + == 1) + +495 +R��i� +:: +True +( +n +); + +498 +size_t + + gi + = 0; i < + gI2 +. +size +(); i++) + +499 i�(! + gis_exa� +[ +i +]) { + +500 +C�jun� + * + gc + = +I2 +[ +i +]. +qu�y_DNF +()-> +s�g�_c�jun� +(); + +501 +EQ_I��t� + + ge + = +c +-> +EQs +();�;�++) { + +502 +c�f_t + + gc�f + = +abs +((* +e +). +g�_c�f +( +t_c� +)); + +503 i�( + gc�f + =�0 || +c�f + == 1) + +507 +c�f_t + + gthis_�� + = +abs +( +Cڡr_V�s_I�r +(* +e +, +�ue +). +cu�_c�f +()); + +508 + gthis_�� + /� +gcd +( +this_�� +, +c�f +); + +509 + gthis_�� + = +gcd +( +glob�_�� +, +this_�� +); + +510 i�( + gthis_�� + == 1) + +513 i�( + glb +. +size +() != 0) { + +514 +R��i� + +�� + = +���_�ride_�_bound +( +n +, +lb +, +this_�� +); + +515 i�( +Gi� +( +�� +, +c�y +( +I1 +[ +i +])). +is_obvious_�ut�ogy +()) { + +516 i�( + g�� +[ +i +] == 0) + +517 +�� +[ +i +] = +this_�� +; + +519 + g�� +[ +i +] = +lcm +( +�� +[i], +this_�� +); + +524 +C�jun� + * + gc + = +I2 +[ +i +]. +qu�y_DNF +()-> +s�g�_c�jun� +(); + +525 +GEQ_I��t� + + gge + = +c +-> +GEQs +(); ge; ge++) { + +526 i�((* + gge +). +has_w�d�rds +(�|| (*ge). +g�_c�f +( +t_c� +) != 1) + +529 + g�d +:: +m� +< +V��b�_ID +, + gc�f_t +> + gcur_lb +; + +531 +Cڡr_V�s_I�r + +cv +(* +ge +); + gcv +; cv++) + +532 + gcur_lb +[ +cv +. +cu�_v� +()] = cv. +cu�_c�f +(); + +534 + gcur_lb +[ +NULL +] = (* +ge +). +g�_cڡ +(); + +536 +R��i� + + g�� + = +���_�ride_�_bound +( +n +, +cur_lb +, +this_�� +); + +537 i�( +Gi� +( +�� +, +c�y +( +I1 +[ +i +])). +is_obvious_�ut�ogy +()) { + +538 i�( + g�� +[ +i +] == 0) + +539 +�� +[ +i +] = +this_�� +; + +541 + g�� +[ +i +] = +lcm +( +�� +[i], +this_�� +); + +543 + glb + = +cur_lb +; + +552 +size_t + + gi + = 0; i < + gis_exa� +. +size +(); i++) + +553 i�(! + gis_exa� +[ +i +]) + +554 + gglob�_�� + = +gcd +( +glob�_�� +, +�� +[ +i +]); + +555 i�( + gglob�_�� + =�1 || +glob�_�� + == 0) + +556 +R��i� +:: +True +( +n +); + +558 +R��i� + + g�su� + = +���_�ride_�_bound +( +n +, +lb +, +glob�_�� +); + +561 +size_t + + gi + = 0; i < + gI1 +. +size +(); i++) + +562 i�( + g�� +[ +i +] == 0) { + +563 i�(! +Gi� +( +c�y +( +�su� +), c�y( +I1 +[ +i +])). +is_obvious_�ut�ogy +()) + +564 +R��i� +:: +True +( +n +); + +567 + g�su� +; + +574 +CG_ou�utR�r +* +ou�utS��m�t +( +CG_ou�utBu�d� + * +ocg +, CG_ou�utR��* +�mt +, +�d�t +, cڡ +R��i� + & +m�p�g_ +, cڡ R��i� & +known_ +, cڡ +�d +:: +ve�� +<CG_ou�utR��*> & +assig�d_�_the_�y +) { + +575 +R��i� + +m�p�g + = +c�y +( +m�p�g_ +); + +576 +R��i� + + gknown + = +c�y +( +known_ +); + +577 + gTu�e +< + g�d +:: +�r�g +> +lo�_v�s +; + +579 + gi + = 1; i <� +m�p�g +. +n_�p +(); i++) + +580 + glo�_v�s +. +��nd +( +m�p�g +. +�put_v� +( +i +)-> +�me +()); + +583 i�( + gknown +. +n_�t +(�> + gm�p�g +. +n_out +()) { + +584 +R��i� + +r +( +known +. +n_�t +(), +m�p�g +. +n_out +()); + +585 +F_And + * + gf_ro� + = +r +. +add_�d +(); + +586 + gi + = 1; i <� +m�p�g +. +n_out +(); i++) { + +587 +EQ_H�d� + + gh + = +f_ro� +-> +add_EQ +(); + +588 + gh +. +upd�e_c�f +( +r +. +�put_v� +( +i +), 1); + +589 + gh +. +upd�e_c�f +( +r +. +ou�ut_v� +( +i +), -1); + +591 + gknown + = +R�ge +( +Re�ri�_Doma� +( +r +, +known +)); + +592 + gknown +. +sim�ify +(); + +596 +R��i� + +k +( +known +. +n_�t +()); + +597 +F_And + * + gf_ro� + = +k +. +add_�d +(); + +598 +C�jun� + * + gc + = +known +. +qu�y_DNF +()-> +s�g�_c�jun� +(); + +599 +EQ_I��t� + + ge + = +c +-> +EQs +();�;�++) { + +600 i�(!(* + ge +). +has_w�d�rds +()) + +601 + gf_ro� +-> +add_EQ +(* +e +); + +603 + gk +. +sim�ify +(); + +606 +R��i� + + gInv_m�p�g + = +Re�ri�_Doma� +( +Inv�� +( +m�p�g +), +k +); + +607 + gTu�e +< + gCG_ou�utR�r +*> + gsLi� + = +ou�utSub��uti� +( +ocg +, +Inv_m�p�g +, +assig�d_�_the_�y +); + +609 + gocg +-> +C��eP��H�d� +( +�d�t +, +�mt +, +sLi� +, +lo�_v�s +); + +614 +bo� + +f�dFlo�I�qu��y +( +R��i� + & +r +, +V��b�_ID + +v +, +GEQ_H�d� + & +h +, V��b�_ID +ex�uded +) { + +615 +C�jun� + * + gc + = +r +. +s�g�_c�jun� +(); + +617 + g�d +:: +�t +< +V��b�_ID +> +v�_checked +; + +618 + g�d +:: +�ack +< +V��b�_ID +> +v�_check�g +; + +619 + gv�_check�g +. +push +( +v +); + +621 ! + gv�_check�g +. +em�y +()) { + +622 +V��b�_ID + + gv2 + = +v�_check�g +. +t� +(); + +623 + gv�_check�g +. +p� +(); + +625 +bo� + + gis_�o� + = +�l� +; + +626 +GEQ_I��t� + +gi +( +c +); + ggi +; gi++) { + +627 i�( + gex�uded + !� +NULL + && (* +gi +). +g�_c�f +( +ex�uded +) != 0) + +630 +c�f_t + + ga + = (* +gi +). +g�_c�f +( +v2 +); + +631 i�( + ga + < 0) { + +632 +GEQ_I��t� + +gi2 +( +c +); + ggi2 +; gi2++) { + +633 +c�f_t + + gb + = (* +gi2 +). +g�_c�f +( +v2 +); + +634 i�( + gb + =�- +a + && (* +gi +). +g�_cڡ +()+(* +gi2 +).get_const() < -a) { + +635 +bo� + +m�ch + = +�ue +; + +636 +Cڡr_V�s_I�r + +cvi +(* +gi +); + gcvi +; cvi++) + +637 i�((* + ggi2 +). +g�_c�f +((* +cvi +). +v� +�!�-(*cvi). +c�f +) { + +638 +m�ch + = +�l� +; + +641 i�(! + gm�ch +) + +643 +Cڡr_V�s_I�r + +cvi +(* +gi2 +); + gcvi +; cvi++) + +644 i�((* + ggi +). +g�_c�f +((* +cvi +). +v� +�!�-(*cvi). +c�f +) { + +645 +m�ch + = +�l� +; + +648 i�( + gm�ch +) { + +649 + gv�_checked +. +��� +( +v2 +); + +650 + gis_�o� + = +�ue +; + +651 i�( + gv + =� +v2 +) + +652 +h + = * +gi +; + +654 +Cڡr_V�s_I�r + +cvi +(* +gi +); + gcvi +; cvi++) + +655 i�(((* + gcvi +). + gv� +-> +k�d +(�=� +Exi�s_V� + || (* +cvi +). +v� +->k�d(�=� +W�d�rd_V� +) && + +656 +v�_checked +. +f�d +((* +cvi +). +v� +�=�v�_checked. +�d +()) + +657 +v�_check�g +. +push +((* +cvi +). +v� +); + +663 i�( + gis_�o� +) + +667 i�(! + gis_�o� +) + +668 + g�l� +; + +670 + g�ue +; + +680 +CG_ou�utR�r +* +ou�ut_as_gu�d +( +CG_ou�utBu�d� +* +ocg +, cڡ +R��i� + & +gu�ds_� +, +Cڡ��t_H�d� + +e +, +bo� + +is_equ��y +, cڡ +�d +:: +ve�� +<CG_ou�utR��*> & +assig�d_�_the_�y +) { + +681 +R��i� + & +gu�ds + = +cڡ_�� +<R��i� &>( +gu�ds_� +); + +682 i�( + ge +. +has_w�d�rds +()) + +683 +throw + + g�d +:: +�v�id_�gum�t +("constraint must�ot have wildcard"); + +685 +V��b�_ID + + gv + = (* +Cڡr_V�s_I�r +( +e +)). +v� +; + +687 +c�f_t + + g�ved_c�f + = (( +e +). +g�_c�f +( +v +)); + +688 + gsign + = +�ved_c�f + < 0 ? -1 : 1; + +690 ( + ge +). +upd�e_c�f_dur�g_sim�ify +( +v +, - +�ved_c�f ++ +sign +); + +691 +CG_ou�utR�r +* + gr� + = +ou�utEasyBoundAsR�r +( +ocg +, +gu�ds +, +e +, +v +, +�l� +, 0, +assig�d_�_the_�y +); + +692 ( + ge +). +upd�e_c�f_dur�g_sim�ify +( +v +, +�ved_c�f +- +sign +); + +694 +CG_ou�utR�r +* + gl� + = +ou�utId�t +( +ocg +, +gu�ds +, +v +, +assig�d_�_the_�y +); + +695 i�( +abs +( +�ved_c�f +) != 1) + +696 +l� + = +ocg +-> +C��eTimes +(ocg-> +C��eI� +( +abs +( +�ved_c�f +)),�op); + +699 i�( + gis_equ��y +) { + +700 + gocg +-> +C��eEQ +( +l� +, +r� +); + +703 i�( + g�ved_c�f + < 0) + +704 + gocg +-> +C��eLE +( +l� +, +r� +); + +706 + gocg +-> +C��eGE +( +l� +, +r� +); + +715 +CG_ou�utR�r + * +ou�ut_EQ_�rides +( +CG_ou�utBu�d� +* +ocg +, cڡ +R��i� + & +gu�ds_� +, cڡ +�d +:: +ve�� +<CG_ou�utR��*> & +assig�d_�_the_�y +) { + +716 +R��i� + +gu�ds + = +cڡ_�� +<R��i� &>( +gu�ds_� +); + +717 +C�jun� + * + gc + = +gu�ds +. +s�g�_c�jun� +(); + +719 +CG_ou�utR�r + * + geqR�r + = +NULL +; + +721 +EQ_I��t� + +ei +( +c +-> +EQs +()); + gei +;�i++) { + +722 +V��b�_ID + + gwc + = +NULL +; + +723 +Cڡr_V�s_I�r + +cvi +((* +ei +), +�ue +); + gcvi +; cvi++) { + +724 i�( + gwc + !� +NULL +) + +725 +throw + +codeg�_�r� +("Can't generate�quality condition with multiple wildcards"); + +727 + gwc + = (* +cvi +). +v� +; + +729 i�( + gwc + =� +NULL +) + +732 +c�f_t + + g�� + = (* +ei +). +g�_c�f +( +wc +); + +734 (* + gei +). +upd�e_c�f_dur�g_sim�ify +( +wc +, 1- +�� +); + +735 +CG_ou�utR�r +* + gl� + = +ou�utEasyBoundAsR�r +( +ocg +, +gu�ds +, (* +ei +), +wc +, +�l� +, 0, +assig�d_�_the_�y +); + +736 (* + gei +). +upd�e_c�f_dur�g_sim�ify +( +wc +, +�� +-1); + +738 +CG_ou�utR�r +* + gr� + = +ocg +-> +C��eI� +( +abs +( +�� +)); + +739 +CG_ou�utR�r +* + g�tMod + = +ocg +-> +C��eI�eg�Mod +( +l� +, +r� +); + +740 +CG_ou�utR�r +* + geqNode + = +ocg +-> +C��eEQ +( +�tMod +, ocg-> +C��eI� +(0)); + +742 + geqR�r + = +ocg +-> +C��eAnd +( +eqR�r +, +eqNode +); + +745 + geqR�r +; + +759 +CG_ou�utR�r + * +ou�ut_GEQ_�rides +( +CG_ou�utBu�d� +* +ocg +, cڡ +R��i� + & +gu�ds_� +, cڡ +�d +:: +ve�� +<CG_ou�utR��*> & +assig�d_�_the_�y +) { + +760 +R��i� + +gu�ds + = +cڡ_�� +<R��i� &>( +gu�ds_� +); + +761 +C�jun� + * + gc + = +gu�ds +. +s�g�_c�jun� +(); + +763 +CG_ou�utR�r +* + ggeqR�r + = +NULL +; + +765 + g�d +:: +�t +< +V��b�_ID +> +n�_�ph�_w�d�rd +; + +766 +GEQ_I��t� + +gi +( +c +); + ggi +; gi++) { + +767 + gnum_w�d + = 0; + +768 +V��b�_ID + + gf��_�e +; + +769 +Cڡr_V�s_I�r + +cvi +(* +gi +, +�ue +); + gcvi +; cvi++) { + +770 + gnum_w�d +++; + +771 i�( + gnum_w�d + == 1) + +772 +f��_�e + = (* +cvi +). +v� +; + +774 + gn�_�ph�_w�d�rd +. +��� +((* +cvi +). +v� +); + +776 i�( + gnum_w�d + > 1) + +777 + gn�_�ph�_w�d�rd +. +��� +( +f��_�e +); + +780 + gi + = 1; i <�(*( +c +-> +v��b�s +())). +size +(); i++) { + +781 +V��b�_ID + + gwc + = (*( +c +-> +v��b�s +()))[ +i +]; + +782 i�( + gwc +-> +k�d +(�=� +W�d�rd_V� + && +n�_�ph�_w�d�rd +. +f�d +( +wc +�=�n�_�ph�_w�d�rd. +�d +()) { + +783 +Tu�e +< +GEQ_H�d� +> +low� +, +u�� +; + +784 +GEQ_I��t� + +gi +( +c +); + ggi +; gi++) { + +785 if((* + ggi +). +g�_c�f +( +wc +) > 0) + +786 + glow� +. +��nd +(* +gi +); + +787 if((* + ggi +). +g�_c�f +( +wc +) < 0) + +788 + gu�� +. +��nd +(* +gi +); + +793 + gTu�e_I��t� +< + gGEQ_H�d� +> +low +( +low� +); + glow +;�ow++) { + +794 + gTu�e_I��t� +< + gGEQ_H�d� +> +up +( +u�� +); + gup +; up++) { + +795 +c�f_t + + glow_c�f + = (* +low +). +g�_c�f +( +wc +); + +796 +c�f_t + + gup_c�f + = (* +up +). +g�_c�f +( +wc +); + +798 (* + glow +). +upd�e_c�f_dur�g_sim�ify +( +wc +, 1- +low_c�f +); + +799 +CG_ou�utR�r +* + glowEx� + = +ou�utEasyBoundAsR�r +( +ocg +, +gu�ds +, * +low +, +wc +, +�l� +, 0, +assig�d_�_the_�y +); + +800 (* + glow +). +upd�e_c�f_dur�g_sim�ify +( +wc +, +low_c�f +-1); + +802 (* + gup +). +upd�e_c�f_dur�g_sim�ify +( +wc +, -1- +up_c�f +); + +803 +CG_ou�utR�r +* + gupEx� + = +ou�utEasyBoundAsR�r +( +ocg +, +gu�ds +, * +up +, +wc +, +�l� +, 0, +assig�d_�_the_�y +); + +804 (* + gup +). +upd�e_c�f_dur�g_sim�ify +( +wc +, +up_c�f ++1); + +806 +CG_ou�utR�r +* + g�tDiv + = +ocg +-> +C��eI�eg�Divide +( +upEx� +, ocg-> +C��eI� +(- +up_c�f +)); + +807 +CG_ou�utR�r +* + gr� + = +ocg +-> +C��eTimes +(ocg-> +C��eI� +( +low_c�f +), +�tDiv +); + +808 +CG_ou�utR�r +* + ggeqNode + = +ocg +-> +C��eLE +( +lowEx� +, +r� +); + +810 + ggeqR�r + = +ocg +-> +C��eAnd +( +geqR�r +, +geqNode +); + +816 i�( + gn�_�ph�_w�d�rd +. +size +() > 0) { + +826 +throw + +codeg�_�r� +("Can't generate multiple wildcard GEQ guards�ight�ow"); + +829 + ggeqR�r +; + +836 +CG_ou�utR�r + * +ou�utGu�d +( +CG_ou�utBu�d� +* +ocg +, cڡ +R��i� + & +gu�ds_� +, cڡ +�d +:: +ve�� +<CG_ou�utR��*> & +assig�d_�_the_�y +) { + +837 +R��i� + & +gu�ds + = +cڡ_�� +<R��i� &>( +gu�ds_� +); + +838 i�( + ggu�ds +. +is_nu� +(�|| gu�ds. +is_obvious_�ut�ogy +()) + +839 + gNULL +; + +841 +CG_ou�utR�r +* + gnodeR�r + = +NULL +; + +843 +CG_ou�utR�r + * + geqS�ideR�r + = +ou�ut_EQ_�rides +( +ocg +, +gu�ds +, +assig�d_�_the_�y +); + +844 + gnodeR�r + = +ocg +-> +C��eAnd +( +nodeR�r +, +eqS�ideR�r +); + +846 +CG_ou�utR�r + * + ggeqS�ideR�r + = +ou�ut_GEQ_�rides +( +ocg +, +gu�ds +, +assig�d_�_the_�y +); + +847 + gnodeR�r + = +ocg +-> +C��eAnd +( +nodeR�r +, +geqS�ideR�r +); + +849 +C�jun� + * + gc + = +gu�ds +. +s�g�_c�jun� +(); + +850 +EQ_I��t� + +ei +( +c +-> +EQs +()); + gei +;�i++) + +851 i�(!(* + gei +). +has_w�d�rds +()) { + +852 +CG_ou�utR�r + * + geqR�r + = +ou�ut_as_gu�d +( +ocg +, +gu�ds +, (* +ei +), +�ue +, +assig�d_�_the_�y +); + +853 + gnodeR�r + = +ocg +-> +C��eAnd +( +nodeR�r +, +eqR�r +); + +855 +GEQ_I��t� + +gi +( +c +-> +GEQs +()); + ggi +; gi++) + +856 i�(!(* + ggi +). +has_w�d�rds +()) { + +857 +CG_ou�utR�r + * + ggeqR�r + = +ou�ut_as_gu�d +( +ocg +, +gu�ds +, (* +gi +), +�l� +, +assig�d_�_the_�y +); + +858 + gnodeR�r + = +ocg +-> +C��eAnd +( +nodeR�r +, +geqR�r +); + +861 + gnodeR�r +; + +869 +CG_ou�utR�r + * +ou�utLBasR�r +( +CG_ou�utBu�d� +* +ocg +, cڡ +GEQ_H�d� + & +g +, + +870 +R��i� + & +bounds +, +V��b�_ID + +v +, + +871 +c�f_t + +�ride +, cڡ +EQ_H�d� + & +�rideEQ +, + +872 +R��i� + +known +, cڡ +�d +:: +ve�� +< +CG_ou�utR�r + *> & +assig�d_�_the_�y +) { + +873 #i�! +def�ed + +NDEBUG + + +874 +c�f_t + +v_c�f +; + +875 +as�� +(( +v_c�f + = +g +. +g�_c�f +( +v +)) > 0); + +878 + g�d +:: +�r�g + +s +; + +879 +CG_ou�utR�r + * + glbR�r +; + +880 i�( + g�ride + == 1) { + +881 +lbR�r + = +ou�utEasyBoundAsR�r +( +ocg +, +bounds +, +g +, +v +, +�l� +, 1, +assig�d_�_the_�y +); + +884 i�(! +boundH�sS�ide +( +g +, +v +, +�rideEQ +, +�ride +, +known +)) { + +885 + gbounds +. +�tup_�mes +(); + +887 +CG_�r�gBu�d� + + goscg +; + +888 + g�d +:: +�r�g + +c + = +G�S��g +( +ou�utEasyBoundAsR�r +(& +oscg +, +bounds +, +�rideEQ +, +v +, +�ue +, 0, +assig�d_�_the_�y +)); + +889 +CG_ou�utR�r + * + gcR�r + = +NULL +; + +890 i�( + gc + !� +�d +:: +�r�g +("0")) + +891 +cR�r + = +ou�utEasyBoundAsR�r +( +ocg +, +bounds +, +�rideEQ +, +v +, +�ue +, 0, +assig�d_�_the_�y +); + +892 + g�d +:: +�r�g + +Lov�M + = +G�S��g +( +ou�utEasyBoundAsR�r +(& +oscg +, +bounds +, +g +, +v +, +�l� +, 1, +assig�d_�_the_�y +)); + +893 +CG_ou�utR�r + * + gLov�MR�r + = +NULL +; + +894 i�( + gLov�M + !� +�d +:: +�r�g +("0")) + +895 +Lov�MR�r + = +ou�utEasyBoundAsR�r +( +ocg +, +bounds +, +g +, +v +, +�l� +, 1, +assig�d_�_the_�y +); + +897 i�( + gcode_g�_debug + > 2) { + +898 +�r�tf +( +DebugF�e +,"::: Lov�M i�%s\n", +Lov�M +. +c_�r +()); + +899 +�r�tf +( +DebugF�e +,"::: c i�%s\n", +c +. +c_�r +()); + +902 + gcom�ex�y1 + = 0, + gcom�ex�y2 + = 0; + +903 +size_t + + gi + = 0; i < + gc +. +�ngth +(); i++) + +904 i�( + gc +[ +i +] =�'+' || +c +[i] == '-' || c[i] == '*' || c[i] == '/') + +905 +com�ex�y1 +++; + +906 i�( + gc +[ +i +] == ',') + +907 +com�ex�y1 + += 2; + +908 +size_t + + gi + = 0; i < + gLov�M +. +�ngth +(); i++) + +909 i�( + gLov�M +[ +i +] =�'+' || +Lov�M +[i] == '-' || LoverM[i] == '*' || LoverM[i] == '/') + +910 +com�ex�y2 +++; + +911 i�( + gLov�M +[ +i +] == ',') + +912 +com�ex�y2 + += 2; + +914 i�( + gcom�ex�y1 + < + gcom�ex�y2 +) { + +915 +CG_ou�utR�r + * + gidUp + = +Lov�MR�r +; + +916 +CG_ou�utR�r + * + gc1R�r + = +ocg +-> +C��eC�y +( +cR�r +); + +917 + gidUp + = +ocg +-> +C��eM�us +( +idUp +, +c1R�r +); + +918 + gidUp + = +ocg +-> +C��ePlus +( +idUp +, ocg-> +C��eI� +( +�ride +-1)); + +919 +CG_ou�utR�r + * + gidLow + = +ocg +-> +C��eI� +( +�ride +); + +920 + glbR�r + = +ocg +-> +C��eTimes +(ocg-> +C��eI� +( +�ride +), + +921 +ocg +-> +C��eI�eg�Divide +( +idUp +, +idLow +)); + +922 + glbR�r + = +ocg +-> +C��ePlus +( +lbR�r +, +cR�r +); + +925 +CG_ou�utR�r + * + gLov�M1R�r + = +ocg +-> +C��eC�y +( +Lov�MR�r +); + +926 +CG_ou�utR�r + * + gimUp + = +ocg +-> +C��eM�us +( +cR�r +, +Lov�M1R�r +); + +927 +CG_ou�utR�r + * + gimLow + = +ocg +-> +C��eI� +( +�ride +); + +928 +CG_ou�utR�r + * + g�tMod + = +ocg +-> +C��eI�eg�Mod +( +imUp +, +imLow +); + +929 + glbR�r + = +ocg +-> +C��ePlus +( +Lov�MR�r +, +�tMod +); + +934 + gbounds +. +�tup_�mes +(); + +935 + glbR�r + = +ou�utEasyBoundAsR�r +( +ocg +, +bounds +, +g +, +v +, +�l� +, 0, +assig�d_�_the_�y +); + +939 + glbR�r +; + +946 +CG_ou�utR�r + * +ou�utUBasR�r +( +CG_ou�utBu�d� +* +ocg +, cڡ +GEQ_H�d� + & +g +, + +947 +R��i� + & +bounds +, + +948 +V��b�_ID + +v +, + +949 +c�f_t + , + +950 cڡ +EQ_H�d� + & , + +951 cڡ +�d +:: +ve�� +< +CG_ou�utR�r + *> & +assig�d_�_the_�y +) { + +952 +as�� +( +g +. +g�_c�f +( +v +) < 0); + +953 +CG_ou�utR�r +* + gupR�r + = +ou�utEasyBoundAsR�r +( +ocg +, +bounds +, +g +, +v +, +�l� +, 0, +assig�d_�_the_�y +); + +954 + gupR�r +; + +966 +CG_ou�utR�r +* +ou�utEasyBoundAsR�r +( +CG_ou�utBu�d� +* +ocg +, +R��i� + & +bounds +, + +967 cڡ +Cڡ��t_H�d� + & +g +, +V��b�_ID + +v +, + +968 +bo� + +ign�eWC +, + +969 +���g +, + +970 cڡ +�d +:: +ve�� +< +CG_ou�utR�r + *> & +assig�d_�_the_�y +) { + +974 +CG_ou�utR�r +* +�syBoundR�r + = +NULL +; + +976 +c�f_t + + gv_c�f + = +g +. +g�_c�f +( +v +); + +977 + gv_sign + = +v_c�f + > 0 ? 1 : -1; + +978 + gv_c�f + *� +v_sign +; + +979 +as�� +( +v_c�f + > 0); + +982 + gsign_adj + = - +v_sign +; + +987 +Cڡr_V�s_I�r + +c2 +( +g +, +�l� +); + gc2 +; c2++) { + +988 i�((* + gc2 +). + gv� + !� +v + && (! +ign�eWC + || (* +c2 +). +v� +-> +k�d +()!= +W�d�rd_V� +)) { + +990 +c�f_t + +cf + = (* +c2 +). +c�f +* +sign_adj +; + +991 +as�� +( +cf + != 0); + +993 +CG_ou�utR�r + * + gv�Name +; + +994 i�((* + gc2 +). + gv� +-> +k�d +(�=� +W�d�rd_V� +) { + +995 +GEQ_H�d� + +h +; + +996 i�(! +f�dFlo�I�qu��y +( +bounds +, (* +c2 +). +v� +, +h +, +v +)) { + +997 i�( + g�syBoundR�r + !� +NULL +) { + +998 +�syBoundR�r +-> +��r +(); + +999 +d��e + + g�syBoundR�r +; + +1001 + gNULL +; + +1003 + gv�Name + = +ou�utEasyBoundAsR�r +( +ocg +, +bounds +, +h +, (* +c2 +). +v� +, +�l� +, 0, +assig�d_�_the_�y +); + +1006 + gv�Name + = +ou�utId�t +( +ocg +, +bounds +, (* +c2 +). +v� +, +assig�d_�_the_�y +); + +1008 +CG_ou�utR�r + * + gcfR�r + = +NULL +; + +1010 i�( + gcf + > 1) { + +1011 + gcfR�r + = +ocg +-> +C��eI� +( +cf +); + +1012 +CG_ou�utR�r +* + grbR�r + = +ocg +-> +C��eTimes +( +cfR�r +, +v�Name +); + +1013 + g�syBoundR�r + = +ocg +-> +C��ePlus +( +�syBoundR�r +, +rbR�r +); + +1015 i�( + gcf + < -1) { + +1016 + gcfR�r + = +ocg +-> +C��eI� +(- +cf +); + +1017 +CG_ou�utR�r +* + grbR�r + = +ocg +-> +C��eTimes +( +cfR�r +, +v�Name +); + +1018 + g�syBoundR�r + = +ocg +-> +C��eM�us +( +�syBoundR�r +, +rbR�r +); + +1020 i�( + gcf + == 1) { + +1021 +�syBoundR�r + = +ocg +-> +C��ePlus +�asyBoundR�r, +v�Name +); + +1023 i�( + gcf + == -1) { + +1024 +�syBoundR�r + = +ocg +-> +C��eM�us +�asyBoundR�r, +v�Name +); + +1029 i�( + gg +. +g�_cڡ +()) { + +1030 +c�f_t + + gcf + = +g +. +g�_cڡ +()* +sign_adj +; + +1031 +as�� +( +cf + != 0); + +1032 i�( + gcf + > 0) { + +1033 + g�syBoundR�r + = +ocg +-> +C��ePlus +( +�syBoundR�r +, ocg-> +C��eI� +( +cf +)); + +1036 + g�syBoundR�r + = +ocg +-> +C��eM�us +( +�syBoundR�r +, ocg-> +C��eI� +(- +cf +)); + +1040 if( + g�syBoundR�r + =� +NULL +) { + +1041 +�syBoundR�r + = +ocg +-> +C��eI� +(0); + +1045 i�( + gv_c�f + > 1) { + +1046 +as�� +( +���g + >= 0); + +1047 i�( + g���g +) { + +1048 + g�syBoundR�r +� +ocg +-> +C��ePlus +( +�syBoundR�r +, ocg-> +C��eI� +( +v_c�f +-1)); + +1050 + g�syBoundR�r + = +ocg +-> +C��eI�eg�Divide +( +�syBoundR�r +, ocg-> +C��eI� +( +v_c�f +)); + +1053 + g�syBoundR�r +; + +1062 + g�d +:: +�� +< +CG_ou�utR�r + *, + gbo� +> +ou�utBounds +( +CG_ou�utBu�d� +* +ocg +, cڡ +R��i� + & +bounds +, +V��b�_ID + +v +, +�d�t +, R��i� & +�f��d +, cڡ +�d +:: +ve�� +<CG_ou�utR��*> & +assig�d_�_the_�y +) { + +1063 +R��i� + +b + = +c�y +( +bounds +); + +1064 +C�jun� + * + gc + = +b +. +qu�y_DNF +()-> +s�g�_c�jun� +(); + +1068 +R��i� + + gr1 + = R��i�:: +True +( +b +. +n_�t +()), + gr2 + = Relation::True(b.n_set()); + +1069 +EQ_I��t� + +ei +( +c +); + gei +;�i++) { + +1070 i�((* + gei +). +g�_c�f +( +v +�!�0 && (* +ei +). +has_w�d�rds +()) { + +1071 +c�f_t + +sign +; + +1072 i�((* + gei +). +g�_c�f +( +v +) > 0) + +1073 + gsign + = 1; + +1075 + gsign + = -1; + +1077 +c�f_t + + g�ride + = 0; + +1078 +Cڡr_V�s_I�r + +cvi +(* +ei +, +�ue +); + gcvi +; cvi++) + +1079 i�((* + gcvi +). + gv� +-> +k�d +(�=� +W�d�rd_V� +) { + +1080 +�ride + = +abs +((* +cvi +). +c�f +); + +1085 +bo� + + gfound_m�ch + = +�l� +; + +1086 i�( +abs +((* +ei +). +g�_c�f +( +v +)) != 1) { + +1087 +c�f_t + +d + = +�ride + / +gcd +( +abs +((* +ei +). +g�_c�f +( +v +)), stride); + +1088 +R��i� + + gr3 + = R��i�:: +True +( +b +. +n_�t +()); + +1089 + gr3 +. +�d_w�h_EQ +(* +ei +); + +1091 +GEQ_I��t� + +gi +( +c +); + ggi +; gi++) { + +1092 i�((* + ggi +). +g�_c�f +( +v +�=�1 && !(* +gi +). +has_w�d�rds +()) { + +1093 +R��i� + +r4 +( +b +. +n_�t +()); + +1094 +F_And + * + gf_ro� + = +r4 +. +add_�d +(); + +1095 +S�ide_H�d� + + gh + = +f_ro� +-> +add_�ride +( +d +); + +1097 +Cڡr_V�s_I�r + +cvi +(* +gi +); + gcvi +; cvi++) + +1098 (* + gcvi +). + gv� +-> +k�d +()) { + +1099 + gI�ut_V� +: { + +1100 +pos + = (* +cvi +). +v� +-> +g�_pos�i� +(); + +1101 + gh +. +upd�e_c�f +( +r4 +. +�t_v� +( +pos +), (* +cvi +). +c�f +); + +1104 + gGlob�_V� +: { + +1105 +Glob�_V�_ID + +g + = (* +cvi +). +v� +-> +g�_glob�_v� +(); + +1106 +V��b�_ID + + gv +; + +1107 i�( + gg +-> +��y +() == 0) + +1108 +v + = +r4 +. +g�_lo�l +( +g +); + +1110 + gv + = +r4 +. +g�_lo�l +( +g +, (* +cvi +). +v� +-> +fun�i�_of +()); + +1111 + gh +. +upd�e_c�f +( +v +, (* +cvi +). +c�f +); + +1115 +�r�tf +( +DebugF�e +, "can't deal with�he variable�ype in�ower bound\n"); + +1116 + g�d +:: +make_�� +( +��ic_�� +< +CG_ou�utR�r + *>( +NULL +), +�l� +); + +1118 + gh +. +upd�e_cڡ +((* +gi +). +g�_cڡ +()); + +1120 +R��i� + + gr5 + = +Gi� +( +c�y +( +r3 +), +I����i� +(c�y( +r4 +), c�y( +�f��d +))); + +1123 i�( + gr5 +. +is_obvious_�ut�ogy +()) { + +1124 + gr1 + = +I����i� +( +r1 +, +r4 +); + +1125 + gfound_m�ch + = +�ue +; + +1132 +GEQ_I��t� + +gi +( +c +); + ggi +; gi++) { + +1133 i�((* + ggi +). +g�_c�f +( +v +�=� +abs +((* +ei +).g�_c�f(v)�&& !(* +gi +). +has_w�d�rds +()) { + +1134 +R��i� + +r +( +b +. +n_�t +()); + +1135 +S�ide_H�d� + + gh + = +r +. +add_�d +()-> +add_�ride +( +�ride +); + +1137 +Cڡr_V�s_I�r + +cvi +(* +gi +); + gcvi +; cvi++) + +1138 (* + gcvi +). + gv� +-> +k�d +()) { + +1139 + gI�ut_V� +: { + +1140 +pos + = (* +cvi +). +v� +-> +g�_pos�i� +(); + +1141 i�((* + gcvi +). + gv� + !� +v +) { + +1142 +t1 + = +�t_mod +((* +cvi +). +c�f +, +�ride +); + +1143 i�( + gt1 + != 0) { + +1144 +c�f_t + +t2 + = +�f��d +. +qu�y_v��b�_mod +�nf��d. +�t_v� +( +pos +), +�ride +); + +1145 i�( + gt2 + !� +posInf��y +) + +1146 +h +. +upd�e_cڡ +( +t1 +* +t2 +); + +1148 + gh +. +upd�e_c�f +( +r +. +�t_v� +( +pos +), +t1 +); + +1152 + gh +. +upd�e_c�f +( +r +. +�t_v� +( +pos +), (* +cvi +). +c�f +); + +1155 + gGlob�_V� +: { + +1156 +Glob�_V�_ID + +g + = (* +cvi +). +v� +-> +g�_glob�_v� +(); + +1157 +V��b�_ID + + gv +; + +1158 i�( + gg +-> +��y +() == 0) + +1159 +v + = +�f��d +. +g�_lo�l +( +g +); + +1161 + gv + = +�f��d +. +g�_lo�l +( +g +, (* +cvi +). +v� +-> +fun�i�_of +()); + +1162 +c�f_t + + gt + = +�f��d +. +qu�y_v��b�_mod +( +v +, +�ride +); + +1163 i�( + gt + !� +posInf��y +) + +1164 +h +. +upd�e_cڡ +( +t +*(* +cvi +). +c�f +); + +1166 +V��b�_ID + + gv2 +; + +1167 i�( + gg +-> +��y +() == 0) + +1168 +v2 + = +r +. +g�_lo�l +( +g +); + +1170 + gv2 + = +r +. +g�_lo�l +( +g +, (* +cvi +). +v� +-> +fun�i�_of +()); + +1171 + gh +. +upd�e_c�f +( +v2 +, (* +cvi +). +c�f +); + +1176 +�r�tf +( +DebugF�e +, "can't deal with�he variable�ype in�ower bound\n"); + +1177 + g�d +:: +make_�� +( +��ic_�� +< +CG_ou�utR�r + *>( +NULL +), +�l� +); + +1179 + gh +. +upd�e_cڡ +((* +gi +). +g�_cڡ +()); + +1181 +bo� + + gt + = +�ue +; + +1183 +C�jun� + * + gc2 + = +r +. +qu�y_DNF +()-> +s�g�_c�jun� +(); + +1184 +EQ_H�d� + + gh2 +; + +1185 +EQ_I��t� + +ei2 +( +c2 +); + gei2 +;�i2++) { + +1186 + gh2 + = * +ei2 +; + +1190 + gsign +; + +1191 i�( + gh2 +. +g�_c�f +( +v +�=�(* +ei +).get_coef(v)) + +1192 +sign + = 1; + +1194 + gsign + = -1; + +1196 + gt + = +�t_mod +( +h2 +. +g�_cڡ +(�- +sign + * (* +ei +).g�_cڡ(), +�ride +) == 0; + +1198 i�( + gt + !� +�l� +) + +1199 +Cڡr_V�s_I�r + +cvi +( +h2 +); + gcvi +; cvi++) + +1200 i�((* + gcvi +). + gv� +-> +k�d +(�!� +W�d�rd_V� + && + +1201 +�t_mod +((* +cvi +). +c�f + - +sign + * (* +ei +). +g�_c�f +((*cvi). +v� +), +�ride +) != 0) { + +1202 +t + = +�l� +; + +1206 i�( + gt + !� +�l� +) + +1207 +Cڡr_V�s_I�r + +cvi +(* +ei +); + gcvi +; cvi++) + +1208 i�((* + gcvi +). + gv� +-> +k�d +(�!� +W�d�rd_V� + && + +1209 +�t_mod +((* +cvi +). +c�f + - +sign + * +h2 +. +g�_c�f +((*cvi). +v� +), +�ride +) != 0) { + +1210 +t + = +�l� +; + +1216 i�( + gt +) { + +1218 +F_And + * + gf_ro� + = +r1 +. +�d_w�h_�d +(); + +1219 +S�ide_H�d� + + gh + = +f_ro� +-> +add_�ride +( +�ride +); + +1220 +Cڡr_V�s_I�r + +cvi +(* +gi +); + gcvi +; cvi++) + +1221 (* + gcvi +). + gv� +-> +k�d +()) { + +1222 + gI�ut_V� +: { + +1223 +h +. +upd�e_c�f +( +r1 +. +�t_v� +((* +cvi +). +v� +-> +g�_pos�i� +()), (*cvi). +c�f +); + +1226 + gGlob�_V� +: { + +1227 +Glob�_V�_ID + +g + = (* +cvi +). +v� +-> +g�_glob�_v� +(); + +1228 +V��b�_ID + + gv +; + +1229 i�( + gg +-> +��y +() == 0) + +1230 +v + = +r1 +. +g�_lo�l +( +g +); + +1232 + gv + = +r1 +. +g�_lo�l +( +g +, (* +cvi +). +v� +-> +fun�i�_of +()); + +1233 + gh +. +upd�e_c�f +( +v +, (* +cvi +). +c�f +); + +1237 +�r�tf +( +DebugF�e +, "can't deal with�he variable�ype in�ower bound\n"); + +1238 + g�d +:: +make_�� +( +��ic_�� +< +CG_ou�utR�r + *>( +NULL +), +�l� +); + +1240 + gh +. +upd�e_cڡ +((* +gi +). +g�_cڡ +()); + +1242 + gfound_m�ch + = +�ue +; + +1249 i�(! + gfound_m�ch +) + +1250 + gr1 +. +�d_w�h_EQ +(* +ei +); + +1252 i�((* + gei +). +g�_c�f +( +v +) == 0) { + +1253 +R��i� + +r3 + = R��i�:: +True +( +b +. +n_�t +()); + +1254 + gr3 +. +�d_w�h_EQ +(* +ei +); + +1255 +R��i� + + gr4 + = +Gi� +( +r3 +, +c�y +( +�f��d +)); + +1256 i�(! + gr4 +. +is_obvious_�ut�ogy +()) + +1257 + gr2 +. +�d_w�h_EQ +(* +ei +); + +1260 + gr2 +. +�d_w�h_EQ +(* +ei +); + +1265 + g�d +:: +m� +< +V��b�_ID +, + gV��b�_ID +> + gexi�s_m�p�g +; + +1266 +F_Exi�s + * + g� + = +r2 +. +�d_w�h_�d +()-> +add_exi�s +(); + +1267 +F_And + * + gf_ro� + = +� +-> +add_�d +(); + +1268 +GEQ_I��t� + +gi +( +c +); + ggi +; gi++) { + +1269 +GEQ_H�d� + + gh + = +f_ro� +-> +add_GEQ +(); + +1270 +Cڡr_V�s_I�r + +cvi +(* +gi +); + gcvi +; cvi++) { + +1271 +V��b�_ID + + gv + = +cvi +. +cu�_v� +(); + +1272 + gv +-> +k�d +()) { + +1273 + gI�ut_V� +: { + +1274 +pos + = +v +-> +g�_pos�i� +(); + +1275 + gh +. +upd�e_c�f +( +r2 +. +�t_v� +( +pos +), +cvi +. +cu�_c�f +()); + +1278 + gExi�s_V� +: + +1279 +W�d�rd_V� +: { + +1280 +�d +:: +m� +< +V��b�_ID +, + gV��b�_ID +>:: +���� + +p + = +exi�s_m�p�g +. +f�d +( +v +); + +1281 +V��b�_ID + + ge +; + +1282 i�( + gp + =� +exi�s_m�p�g +. +�d +()) { + +1283 +e + = +� +-> +de��e +(); + +1284 + gexi�s_m�p�g +[ +v +] = +e +; + +1287 + ge + = (* +p +). +�c�d +; + +1288 + gh +. +upd�e_c�f +( +e +, +cvi +. +cu�_c�f +()); + +1291 + gGlob�_V� +: { + +1292 +Glob�_V�_ID + +g + = +v +-> +g�_glob�_v� +(); + +1293 +V��b�_ID + + gv2 +; + +1294 i�( + gg +-> +��y +() == 0) + +1295 +v2 + = +r2 +. +g�_lo�l +( +g +); + +1297 + gv2 + = +r2 +. +g�_lo�l +( +g +, +v +-> +fun�i�_of +()); + +1298 + gh +. +upd�e_c�f +( +v2 +, +cvi +. +cu�_c�f +()); + +1302 +as�� +(0); + +1305 + gh +. +upd�e_cڡ +((* +gi +). +g�_cڡ +()); + +1311 + gr1 +. +sim�ify +(); + +1312 + gr2 +. +sim�ify +(); + +1313 +R��i� + + gb2 + = +I����i� +( +r1 +, +r2 +); + +1314 + gb2 +. +sim�ify +(); + +1315 + gi + = 1; i <� +b +. +n_�t +(); i++) + +1316 + gb2 +. +�me_�t_v� +( +i +, +b +. +�t_v� +(i)-> +�me +()); + +1317 + gb2 +. +�tup_�mes +(); + +1318 + gb + = +b2 +; + +1319 + gc + = +b +. +qu�y_DNF +()-> +s�g�_c�jun� +(); + +1324 +EQ_H�d� + + g�rideEQ +; + +1325 +bo� + + gfoundS�ide + = +�l� +; + +1326 +bo� + + gfoundSim�eS�ide + = +�l� +; + +1327 +c�f_t + + g�� + = 1; + +1328 + gnum_�ride + = 0; + +1330 +EQ_I��t� + +ei +( +c +); + gei +;�i++) { + +1331 i�((* + gei +). +g�_c�f +( +v +�!�0 && (* +ei +). +has_w�d�rds +()) { + +1332 +num_�ride +++; + +1334 i�( +abs +((* +ei +). +g�_c�f +( +v +)) != 1) + +1337 +bo� + + gt + = +�ue +; + +1338 +c�f_t + + gd + = 1; + +1339 +Cڡr_V�s_I�r + +cvi +(* +ei +); + gcvi +; cvi++) + +1340 i�((* + gcvi +). + gv� +-> +k�d +(�=� +W�d�rd_V� +) { + +1341 +as�� +( +d +==1); + +1342 + gd + = +abs +((* +cvi +). +c�f +); + +1344 i�((* + gcvi +). + gv� +-> +k�d +(�=� +I�ut_V� +) { + +1345 i�((* +cvi +). +v� + !� +v +) + +1346 +t + = +�l� +; + +1349 + gt + = +�l� +; + +1351 i�( + gd + > + g�� +) { + +1352 + g�� + = +d +; + +1353 + gfoundSim�eS�ide + = +t +; + +1354 + g�rideEQ + = * +ei +; + +1355 + gfoundS�ide + = +�ue +; + +1362 i�(!( + gnum_�ride + =�0 || ( +num_�ride + =�1 && +foundS�ide +))) + +1363 +�d +:: +make_�� +( +��ic_�� +< +CG_ou�utR�r + *>( +NULL +), +�l� +); + +1366 + glow�_bounds + = 0, + gu��_bounds + = 0; + +1367 + gTu�e +< + gCG_ou�utR�r + *> + glbLi� +; + +1368 + gTu�e +< + gCG_ou�utR�r + *> + gubLi� +; + +1369 +c�f_t + + gcڡ_lb + = +�gInf��y +, + gcڡ_ub + = +posInf��y +; + +1370 +GEQ_I��t� + +g +( +c +); + gg +; g++) { + +1371 +c�f_t + + gc�f + = (* +g +). +g�_c�f +( +v +); + +1372 i�( + gc�f + == 0) + +1374 i�( + gc�f + > 0) { + +1375 + glow�_bounds +++; + +1376 i�((* + gg +). +is_cڡ +( +v +�&& ! + gfoundS�ide +) { + +1378 +c�f_t + + gL +, + gm +; + +1379 + gL + = -((* +g +). +g�_cڡ +()); + +1381 + gm + = (* +g +). +g�_c�f +( +v +); + +1382 +c�f_t + + gsb + = (�( +�� +(((� +L +�/ +m +)); + +1383 +�t_max +( +cڡ_lb +, +sb +); + +1385 i�((* + gg +). +is_cڡ +( +v +�&& + gfoundSim�eS�ide +) { + +1388 +c�f_t + + gL +, + gm +, + gs +, + gc +; + +1389 + gL + = -((* +g +). +g�_cڡ +()); + +1390 + gm + = (* +g +). +g�_c�f +( +v +); + +1391 + gs + = +�� +; + +1392 + gc + = +�rideEQ +. +g�_cڡ +(); + +1393 +c�f_t + + gsb + = ( +s + * (�( +�� +�(�( +L + - ( +c + * +m +)) /(s*m))))+ c; + +1394 +�t_max +( +cڡ_lb +, +sb +); + +1397 + glbLi� +. +��nd +( +ou�utLBasR�r +( +ocg +, * +g +, +b +, +v +, +�� +, +�rideEQ +, +�f��d +, +assig�d_�_the_�y +)); + +1400 + gu��_bounds +++; + +1401 i�((* + gg +). +is_cڡ +( +v +)) { + +1403 +�t_m� +( +cڡ_ub +,-(* +g +). +g�_cڡ +()/(*g). +g�_c�f +( +v +)); + +1406 + gubLi� +. +��nd +( +ou�utUBasR�r +( +ocg +, * +g +, +b +, +v +, +�� +, +�rideEQ +, +assig�d_�_the_�y +)); + +1410 +CG_ou�utR�r + * + glbR�r + = +NULL +; + +1411 +CG_ou�utR�r + * + gubR�r + = +NULL +; + +1412 i�( + gcڡ_lb + !� +�gInf��y +) + +1413 +lbLi� +. +��nd +( +ocg +-> +C��eI� +( +cڡ_lb +)); + +1414 i�( + glbLi� +. +size +() > 1) + +1415 + glbR�r + = +ocg +-> +C��eInvoke +("max", +lbLi� +); + +1416 i�( + glbLi� +. +size +() == 1) + +1417 +lbR�r + = +lbLi� +[1]; + +1420 if( + gf�lInBounds + && + glbLi� +. +size +(�=�1 && +cڡ_lb + !� +�gInf��y +) + +1421 +low�BoundF�Lev� + = +cڡ_lb +; + +1424 i�( + gcڡ_ub + !� +posInf��y +) + +1425 +ubLi� +. +��nd +( +ocg +-> +C��eI� +( +cڡ_ub +)); + +1426 i�( + gubLi� +. +size +() > 1) + +1427 + gubR�r + = +ocg +-> +C��eInvoke +("m�", +ubLi� +); + +1428 i�( + gubLi� +. +size +() == 1) + +1429 +ubR�r + = +ubLi� +[1]; + +1432 if( + gf�lInBounds + && + gcڡ_ub + !� +posInf��y +) + +1433 +u��BoundF�Lev� + = +cڡ_ub +; + +1436 i�( + gu��_bounds + =�0 || +low�_bounds + == 0) { + +1437 +�d +:: +make_�� +( +��ic_�� +< +CG_ou�utR�r + *>( +NULL +), +�l� +); + +1441 +F_Exi�s + * + g� + = +�f��d +. +�d_w�h_�d +()-> +add_exi�s +(); + +1442 +F_And + * + gf_ro� + = +� +-> +add_�d +(); + +1443 + g�d +:: +m� +< +V��b�_ID +, + gV��b�_ID +> + gexi�s_m�p�g +; + +1444 + g�d +:: +�ack +< +�d +:: +�� +< +GEQ_H�d� +, + gV��b�_ID +> > + g�o�_geq_�ack +; + +1445 + g�d +:: +�t +< +V��b�_ID +> +�o�_v�_�t +; + +1447 i�( + gfoundS�ide +) { + +1448 +EQ_H�d� + + gh + = +f_ro� +-> +add_EQ +(); + +1449 +Cڡr_V�s_I�r + +cvi +( +�rideEQ +); + gcvi +; cvi++) + +1450 (* + gcvi +). + gv� +-> +k�d +()) { + +1451 + gI�ut_V� +: { + +1452 +pos + = (* +cvi +). +v� +-> +g�_pos�i� +(); + +1453 + gh +. +upd�e_c�f +( +�f��d +. +�t_v� +( +pos +), (* +cvi +). +c�f +); + +1456 + gExi�s_V� +: + +1457 +W�d�rd_V� +: { + +1458 +�d +:: +m� +< +V��b�_ID +, + gV��b�_ID +>:: +���� + +p + = +exi�s_m�p�g +. +f�d +((* +cvi +). +v� +); + +1459 +V��b�_ID + + ge +; + +1460 i�( + gp + =� +exi�s_m�p�g +. +�d +()) { + +1461 +e + = +� +-> +de��e +(); + +1462 + gexi�s_m�p�g +[(* +cvi +). +v� +] = +e +; + +1465 + ge + = (* +p +). +�c�d +; + +1466 + gh +. +upd�e_c�f +( +e +, (* +cvi +). +c�f +); + +1469 + gGlob�_V� +: { + +1470 +Glob�_V�_ID + +g + = (* +cvi +). +v� +-> +g�_glob�_v� +(); + +1471 +V��b�_ID + + ge +; + +1472 i�( + gg +-> +��y +() == 0) + +1473 +e + = +�f��d +. +g�_lo�l +( +g +); + +1475 + ge + = +�f��d +. +g�_lo�l +( +g +, (* +cvi +). +v� +-> +fun�i�_of +()); + +1476 + gh +. +upd�e_c�f +( +e +, (* +cvi +). +c�f +); + +1480 +as�� +(0); + +1482 + gh +. +upd�e_cڡ +( +�rideEQ +. +g�_cڡ +()); + +1485 +GEQ_I��t� + +gi +( +c +); + ggi +; gi++) + +1486 i�((* + ggi +). +g�_c�f +( +v +) != 0) { + +1487 +GEQ_H�d� + +h + = +f_ro� +-> +add_GEQ +(); + +1488 +Cڡr_V�s_I�r + +cvi +(* +gi +); + gcvi +; cvi++) + +1489 (* + gcvi +). + gv� +-> +k�d +()) { + +1490 + gI�ut_V� +: { + +1491 +pos + = (* +cvi +). +v� +-> +g�_pos�i� +(); + +1492 + gh +. +upd�e_c�f +( +�f��d +. +�t_v� +( +pos +), (* +cvi +). +c�f +); + +1495 + gExi�s_V� +: + +1496 +W�d�rd_V� +: { + +1497 +�d +:: +m� +< +V��b�_ID +, + gV��b�_ID +>:: +���� + +p + = +exi�s_m�p�g +. +f�d +((* +cvi +). +v� +); + +1498 +V��b�_ID + + ge +; + +1499 i�( + gp + =� +exi�s_m�p�g +. +�d +()) { + +1500 +e + = +� +-> +de��e +(); + +1501 + gexi�s_m�p�g +[(* +cvi +). +v� +] = +e +; + +1504 + ge + = (* +p +). +�c�d +; + +1505 + gh +. +upd�e_c�f +( +e +, (* +cvi +). +c�f +); + +1507 i�( + g�o�_v�_�t +. +f�d +((* +cvi +). +v� +�=� +�o�_v�_�t +. +�d +()) { + +1508 +GEQ_H�d� + +h2 +; + +1509 +f�dFlo�I�qu��y +( +b +, (* +cvi +). +v� +, +h2 +, +v +); + +1510 + g�o�_geq_�ack +. +push +( +�d +:: +make_�� +( +h2 +, (* +cvi +). +v� +)); + +1511 + g�o�_v�_�t +. +��� +((* +cvi +). +v� +); + +1515 + gGlob�_V� +: { + +1516 +Glob�_V�_ID + +g + = (* +cvi +). +v� +-> +g�_glob�_v� +(); + +1517 +V��b�_ID + + ge +; + +1518 i�( + gg +-> +��y +() == 0) + +1519 +e + = +�f��d +. +g�_lo�l +( +g +); + +1521 + ge + = +�f��d +. +g�_lo�l +( +g +, (* +cvi +). +v� +-> +fun�i�_of +()); + +1522 + gh +. +upd�e_c�f +( +e +, (* +cvi +). +c�f +); + +1526 +as�� +(0); + +1528 + gh +. +upd�e_cڡ +((* +gi +). +g�_cڡ +()); + +1532 ! + g�o�_geq_�ack +. +em�y +()) { + +1533 + g�d +:: +�� +< +GEQ_H�d� +, + gV��b�_ID +> + gp + = +�o�_geq_�ack +. +t� +(); + +1534 + g�o�_geq_�ack +. +p� +(); + +1536 +GEQ_H�d� + + gh1 + = +f_ro� +-> +add_GEQ +(); + +1537 +GEQ_H�d� + + gh2 + = +f_ro� +-> +add_GEQ +(); + +1538 +Cڡr_V�s_I�r + +cvi +( +p +. +f�� +); + gcvi +; cvi++) { + +1539 (* + gcvi +). + gv� +-> +k�d +()) { + +1540 + gI�ut_V� +: { + +1541 +pos + = (* +cvi +). +v� +-> +g�_pos�i� +(); + +1542 + gh1 +. +upd�e_c�f +( +�f��d +. +�put_v� +( +pos +), (* +cvi +). +c�f +); + +1543 + gh2 +. +upd�e_c�f +( +�f��d +. +�put_v� +( +pos +), -(* +cvi +). +c�f +); + +1546 + gExi�s_V� +: + +1547 +W�d�rd_V� +: { + +1548 +�d +:: +m� +< +V��b�_ID +, + gV��b�_ID +>:: +���� + +p2 + = +exi�s_m�p�g +. +f�d +((* +cvi +). +v� +); + +1549 +V��b�_ID + + ge +; + +1550 i�( + gp2 + =� +exi�s_m�p�g +. +�d +()) { + +1551 +e + = +� +-> +de��e +(); + +1552 + gexi�s_m�p�g +[(* +cvi +). +v� +] = +e +; + +1555 + ge + = (* +p2 +). +�c�d +; + +1556 + gh1 +. +upd�e_c�f +( +e +, (* +cvi +). +c�f +); + +1557 + gh2 +. +upd�e_c�f +( +e +, -(* +cvi +). +c�f +); + +1559 i�( + g�o�_v�_�t +. +f�d +((* +cvi +). +v� +�=� +�o�_v�_�t +. +�d +()) { + +1560 +GEQ_H�d� + +h3 +; + +1561 +f�dFlo�I�qu��y +( +b +, (* +cvi +). +v� +, +h3 +, +v +); + +1562 + g�o�_geq_�ack +. +push +( +�d +:: +make_�� +( +h3 +, (* +cvi +). +v� +)); + +1563 + g�o�_v�_�t +. +��� +((* +cvi +). +v� +); + +1567 + gGlob�_V� +: { + +1568 +Glob�_V�_ID + +g + = (* +cvi +). +v� +-> +g�_glob�_v� +(); + +1569 +V��b�_ID + + ge +; + +1570 i�( + gg +-> +��y +() == 0) + +1571 +e + = +�f��d +. +g�_lo�l +( +g +); + +1573 + ge + = +�f��d +. +g�_lo�l +( +g +, (* +cvi +). +v� +-> +fun�i�_of +()); + +1574 + gh1 +. +upd�e_c�f +( +e +, (* +cvi +). +c�f +); + +1575 + gh2 +. +upd�e_c�f +( +e +, -(* +cvi +). +c�f +); + +1579 +as�� +(0); + +1582 + gh1 +. +upd�e_cڡ +( +p +. +f�� +. +g�_cڡ +()); + +1583 + gh2 +. +upd�e_cڡ +(- +p +. +f�� +. +g�_cڡ +()); + +1584 + gh2 +. +upd�e_cڡ +(- +p +. +f�� +. +g�_c�f +�. +�c�d +)-1); + +1586 + g�f��d +. +sim�ify +(); + +1588 +CG_ou�utR�r + * + g�R�r + = +NULL +; + +1589 i�( + g�� + != 1) + +1590 +�R�r + = +ocg +-> +C��eI� +( +abs +( +�� +)); + +1591 +CG_ou�utR�r + * + g�dexR�r + = +ou�utId�t +( +ocg +, +b +, +v +, +assig�d_�_the_�y +); + +1592 +CG_ou�utR�r + * + g��R�r + = +ocg +-> +C��eIndu�ive +( +�dexR�r +, +lbR�r +, +ubR�r +, +�R�r +); + +1594 + g�d +:: +make_�� +( +��R�r +, +�ue +); + +1599 +R��i� + +�oje�_�to_�v�s +(R��i� +R +, +ϡ_�v� +, +bo� + +w�d�rds +) { + +1600 +as�� +( +ϡ_�v� + >�0 && +R +. +is_�t +(�&&�a�_�v� <�R. +n_�t +()); + +1601 i�( + gϡ_�v� + =� +R +. +n_�t +()) R; + +1603 + g�ig_v�s + = +R +. +n_�t +(); + +1604 + gnum_�oje�ed + = +�ig_v�s + - +ϡ_�v� +; + +1605 + gR + = +Ex�nd_S� +( +R +, +num_�oje�ed + + +1607 +M�p�g + + gm1 + = M�p�g:: +Id�t�y +( +R +. +n_�t +()); + +1609 + gi += +ϡ_�v� ++1; i <� +�ig_v�s +; i++) { + +1610 + gm1 +. +�t_m� +( +S�_V� +, +i +, +Exi�s_V� +, i); + +1611 + gm1 +. +�t_m� +( +S�_V� +, +i ++ +num_�oje�ed +, Set_Var, i); + +1614 +M�R�1 +( +R +, +m1 +, +Comb_Id +); + +1615 + gR +. +f��ize +(); + +1616 + gR +. +sim�ify +(); + +1617 i�(! + gw�d�rds +) + +1618 + gR + = +A�roxim�e +( +R +,1); + +1619 +as�� +( +R +. +is_�t +()); + +1620 + gR +; + +1627 +bo� + +boundH�sS�ide +(cڡ +GEQ_H�d� + & +g +, +V��b�_ID + +v +, + +1628 cڡ +EQ_H�d� + & +�rideEQ +, + +1629 +c�f_t + , + +1630 +R��i� + +known +) { + +1635 +c�f_t + + gm + = +g +. +g�_c�f +( +v +); + +1636 +R��i� + +�� +( +known +. +n_�t +()); + +1637 +F_Exi�s + * + ge + = +�� +. +add_exi�s +(); + +1638 +V��b�_ID + + g�pha + = +e +-> +de��e +(); + +1639 +F_And + * + ga + = +e +-> +add_�d +(); + +1640 +EQ_H�d� + + gh + = +a +-> +add_EQ +(); + +1641 +Cڡr_V�s_I�r + +I +( +g +, +�l� +); + gI +; I++) + +1642 if((* + gI +). + gv� + !� +v +) { + +1643 if((* +I +). +v� +-> +k�d +(�!� +Glob�_V� +) + +1644 +h +. +upd�e_c�f +((* +I +). +v� +, (*I). +c�f +); + +1646 + gh +. +upd�e_c�f +( +�� +. +g�_lo�l +((* +I +). +v� +-> +g�_glob�_v� +()), (*I). +c�f +); + +1649 + gh +. +upd�e_cڡ +( +g +. +g�_cڡ +()); + +1650 + gh +. +upd�e_c�f +( +�pha +, +m +); + +1651 i�(!( +Gi� +( +�� +, +c�y +( +known +)). +is_obvious_�ut�ogy +())) + +1652 + g�l� +; + +1654 +R��i� + + gboundR� + = +known +; + +1655 + gboundR� +. +�d_w�h_EQ +( +g +); + +1656 +R��i� + +�rideR� +( +known +. +n_�t +()); + +1657 + g�rideR� +. +�d_w�h_EQ +( +�rideEQ +); + +1658 +Gi� +( +�rideR� +, +boundR� +). +is_obvious_�ut�ogy +(); + +1663 +bo� + +isSim�eS�ide +(cڡ +EQ_H�d� + & +g +, +V��b�_ID + +v +) { + +1664 +EQ_H�d� + + ggg + = +g +; + +1666 +bo� + + gis_sim�e += +�ue +; + +1667 +Cڡr_V�s_I�r + +cvi +( +gg +, +�l� +); + gcvi + && + gis_sim�e +; cvi++) + +1668 + gis_sim�e + = ((* +cvi +). +c�f + =�0 || (*cvi). +v� + =� +v + + +1669 || (* +cvi +). +v� +-> +k�d +(�=� +W�d�rd_V� +); + +1670 + gis_sim�e +; + +1674 +cou�S�ides +( +C�jun� + * +c +, +V��b�_ID + +v +, +EQ_H�d� + & +�rideEQ +, + +1675 +bo� + & +sim�e +) { + +1676 + g�rides +=0; + +1677 +EQ_I��t� + +G +( +c +); + gG +; G++) + +1678 +Cڡr_V�s_I�r + +I +(* +G +, +�ue +); + gI +; I++) + +1679 i�(((* + gI +). + gc�f + !�0�&& (* +G +). +g�_c�f +( +v +) != 0) { + +1680 +�rides +++; + +1681 + gsim�e + = +isSim�eS�ide +(* +G +, +v +); + +1682 + g�rideEQ + = * +G +; + +1685 + g�rides +; + +1688 + g�me�a� + { + +1690 +bo� + +hasEQ +( +R��i� + +r +, +�v� +) { + +1691 + gr +. +sim�ify +(); + +1692 +V��b�_ID + + gv + = +�t_v� +( +�v� +); + +1693 +C�jun� + * + gs_c�j + = +r +. +s�g�_c�jun� +(); + +1694 +EQ_I��t� + +G +( +s_c�j +); + gG +; G++) + +1695 i�((* + gG +). +g�_c�f +( +v +)) + +1696 + g�ue +; + +1697 + g�l� +; + +1702 +R��i� + +pickEQ +(R��i� +r +, +�v� +) { + +1703 + gr +. +sim�ify +(); + +1704 +V��b�_ID + + gv + = +�t_v� +( +�v� +); + +1705 +C�jun� + * + gs_c�j + = +r +. +s�g�_c�jun� +(); + +1706 +EQ_I��t� + +E +( +s_c�j +); + gE +; E++) + +1707 i�((* + gE +). +g�_c�f +( +v +)) { + +1708 +R��i� + +��_�l +( +r +. +n_�t +()); + +1709 + g��_�l +. +�d_w�h_EQ +(* +E +); + +1710 + g��_�l +; + +1712 +as�� +(0); + +1713 + gr +; + +1717 +R��i� + +pickBound +(R��i� +r +, +�v� +, +UB +) { + +1718 + gr +. +sim�ify +(); + +1719 +V��b�_ID + + gv + = +�t_v� +( +�v� +); + +1720 +C�jun� + * + gs_c�j + = +r +. +s�g�_c�jun� +(); + +1721 +GEQ_I��t� + +G +( +s_c�j +); + gG +; G++) { + +1722 i�(( + gUB + && (* + gG +). +g�_c�f +( +v +) < 0) + +1723 || (! + gUB + && (* + gG +). +g�_c�f +( +v +) > 0) ) { + +1724 +R��i� + +��_�l +( +r +. +n_�t +()); + +1725 + g��_�l +. +�d_w�h_GEQ +(* +G +); + +1726 + g��_�l +; + +1729 +EQ_I��t� + +E +( +s_c�j +); + gE +; E++) { + +1730 i�((* + gE +). +g�_c�f +( +v +)) { + +1731 +R��i� + +��_�l +( +r +. +n_�t +()); + +1732 + g��_�l +. +�d_w�h_GEQ +(* +E +); + +1733 i�(( + gUB + && (* + gE +). +g�_c�f +( +v +) > 0) + +1734 || (! + gUB + && (* + gE +). +g�_c�f +( +v +) < 0) ) + +1735 + g��_�l + = +Com�em�t +( +��_�l +); + +1736 + g��_�l +; + +1739 +as�� +(0); + +1740 + gr +; + +1745 +R��i� + +pickOv�h�d +(R��i� +r +, +li�To +) { + +1746 + gr +. +sim�ify +(); + +1747 +C�jun� + * + gs_c�j + = +r +. +s�g�_c�jun� +(); + +1748 +GEQ_I��t� + +G +( +s_c�j +); + gG +; G++) { + +1749 +R��i� + +��_�l +( +r +. +n_�t +()); + +1750 + g��_�l +. +�d_w�h_GEQ +(* +G +); + +1751 +V��b�_ID + + gv +; + +1752 +c�f_t + + gpos + = -1; + +1753 +c�f_t + + gc += 0; + +1754 +Cڡr_V�s_I�r + +cvi +(* +G +, +�l� +); + gcvi +; cvi++) + +1755 i�((* + gcvi +). + gc�f + && (*cvi). + gv� +-> +k�d +(�=� +I�ut_V� + + +1756 && (* +cvi +). +v� +-> +g�_pos�i� +(�> +pos +) { + +1757 +v + = (* +cvi +). +v� +; + +1758 + gpos + = (* +cvi +). +v� +-> +g�_pos�i� +(); + +1759 + gc + = (* +cvi +). +c�f +; + +1762 +�r�tf +( +DebugF�e +,"Coef = %d, constraint = %s\n", + +1763 +c +,(cڡ *) +��_�l +. +��t_f�mu�_to_�r�g +()); + +1765 + g��_�l +; + +1767 +EQ_I��t� + +E +( +s_c�j +); + gE +; E++) { + +1768 +as�� +( +li�To + >= 1); + +1769 + gpos + = +max +((* +E +). +max_tu�e_pos +(), +max_fs_��y +(*E)+1); + +1773 i�((* + gE +). +has_w�d�rds +(�&& + gpos + < + gli�To +) { + +1774 +R��i� + +��_�l +( +r +. +n_�t +()); + +1775 + g��_�l +. +�d_w�h_EQ +(* +E +); + +1776 + g��_�l +; + +1778 i�(!(* + gE +). +has_w�d�rds +(�&& + gpos + <� +li�To +) { + +1779 +R��i� + +��_�l +( +r +. +n_�t +()); + +1780 + g��_�l +. +�d_w�h_EQ +(* +E +); + +1781 + g��_�l +. +sim�ify +(); + +1782 + g��_�l + = +EQs_to_GEQs +( +��_�l +, +�ue +); + +1783 +pickOv�h�d +( +��_�l +, +li�To +); + +1786 i�( + gcode_g�_debug +>1) { + +1787 +�r�tf +( +DebugF�e +,"Could�ot find overhead:\n"); + +1788 + gr +. +�efix_��t +( +DebugF�e +); + +1790 + gR��i� +:: +True +( +r +. +n_�t +()); + +1795 +bo� + +hasBound +( +R��i� + +r +, +�v� +, +UB +) { + +1796 + gr +. +sim�ify +(); + +1797 +V��b�_ID + + gv + = +�t_v� +( +�v� +); + +1798 +C�jun� + * + gs_c�j + = +r +. +s�g�_c�jun� +(); + +1799 +GEQ_I��t� + +G +( +s_c�j +); + gG +; G++) { + +1800 i�( + gUB + && (* + gG +). +g�_c�f +( +v +�< 0� + g�ue +; + +1801 i�(! + gUB + && (* + gG +). +g�_c�f +( +v +�> 0� + g�ue +; + +1803 +EQ_I��t� + +E +( +s_c�j +); + gE +; E++) { + +1804 i�((* + gE +). +g�_c�f +( +v +)� + g�ue +; + +1806 + g�l� +; + +1809 +bo� + +f�d_�y_cڡ��t +( +s +, +�v� +, +R��i� + & +kr +, +d�e�i� +, + +1810 +R��i� + & +S +, +bo� + +��ox +) { + +1816 +R��i� + + gI + = +�oje�ed_nIS +[ +�v� +][ +s +]; + +1817 + gI + = +Gi� +( +I +, +c�y +( +kr +)); + +1818 if( + g��ox +� + gI + = +A�roxim�e +( +I +); + +1819 i�( +hasBound +( +I +, +�v� +, +d�e�i� +)) { + +1820 +R��i� + + gpick�om +; + +1821 if( +has_nڡride_EQ +( +I +, +�v� +)) + +1822 + gpick�om + = +pickEQ +( +I +, +�v� +); + +1824 + gpick�om + = +pickBound +( +I +, +�v� +, +d�e�i� +); + +1825 + gS + = +pickOv�h�d +( +pick�om +, +�v� +); + +1826 if( + gS +. +is_obvious_�ut�ogy +()�S = +R��i� +:: +Nu� +(); + +1827 ! + gS +. +is_nu� +(); + +1829 + g�l� +; + +1833 +bo� + +has_nڡride_EQ +( +R��i� + +r +, +�v� +) { + +1834 + gr +. +sim�ify +(); + +1835 +V��b�_ID + + gv + = +�t_v� +( +�v� +); + +1836 +C�jun� + * + gs_c�j + = +r +. +s�g�_c�jun� +(); + +1837 +EQ_I��t� + +G +( +s_c�j +); + gG +; G++) + +1838 i�((* + gG +). +g�_c�f +( +v +�&& !(*G). +has_w�d�rds +()) + +1839 + g�ue +; + +1840 + g�l� +; + +1844 +R��i� + +m�MaxOv�h�d +(R��i� +r +, +�v� +) { + +1845 + gr +. +f��ize +(); + +1846 + gr +. +sim�ify +(); + +1847 +C�jun� + * + gs_c�j + = +r +. +s�g�_c�jun� +(); + +1848 +GEQ_H�d� + + gLBs +[50], + gUBs +[50]; + +1849 + gnumLBs + = 0; + +1850 + gnumUBs + = 0; + +1851 +V��b�_ID + + gv + = +�t_v� +( +�v� +); + +1852 +GEQ_I��t� + +G +( +s_c�j +); + gG +; G++�i�((*G). +g�_c�f +( +v +)) { + +1853 +GEQ_H�d� + + gg + = * +G +; + +1854 i�( + gg +. +g�_c�f +( +v +�> 0� + gLBs +[ +numLBs +++] = +g +; + +1855 + gUBs +[ +numUBs +++] = +g +; + +1857 i�( + gnumLBs + <�1 && +numUBs + <= 1) { + +1858 +R��i� +:: +True +( +r +. +n_�t +()); + +1860 +R��i� + +r1 +( +r +. +n_�t +()); + +1861 +R��i� + +r2 +( +r +. +n_�t +()); + +1862 i�( + gnumLBs + > 1) { + +1864 + gr1 +. +�d_w�h_GEQ +( +LBs +[0]); + +1865 + gr2 +. +�d_w�h_GEQ +( +LBs +[1]); + +1866 + gr1 + = +�oje�_�to_�v�s +( +Dif�n� +( +r1 +, +r2 +), +�v� +-1,0); + +1870 + gr1 +. +�d_w�h_GEQ +( +UBs +[0]); + +1871 + gr2 +. +�d_w�h_GEQ +( +UBs +[1]); + +1872 + gr1 + = +�oje�_�to_�v�s +( +Dif�n� +( +r1 +, +r2 +), +�v� +-1,0); + +1875 +�r�tf +( +DebugF�e +,"Te��g %s\n",(cڡ *) +r1 +. +��t_f�mu�_to_�r�g +()); + +1876 +�r�tf +( +DebugF�e +,"w�Ȼmoved ov�h�d o�bound�o�t%d: %s\n", +�v� +, + +1877 (cڡ *) +r +. +��t_f�mu�_to_�r�g +()); + +1880 +pickOv�h�d +( +r1 +, -1); + +1883 + g�d +:: +�� +< +EQ_H�d� +, > +f�d_sim�e�_assignm�t +(cڡ +R��i� + & +R_ +, +V��b�_ID + +v +, cڡ +�d +:: +ve�� +< +CG_ou�utR�r + *> & +assig�d_�_the_�y +) { + +1884 +R��i� + & +R + = +cڡ_�� +<R��i� &>( +R_ +); + +1885 +C�jun� + * + gc + = +R +. +s�g�_c�jun� +(); + +1887 + gm�_co� + = +INT_MAX +; + +1888 +EQ_H�d� + + geq +; + +1889 +EQ_I��t� + +ei +( +c +-> +EQs +()); + gei +;�i++) + +1890 i�(!(* + gei +). +has_w�d�rds +(�&& (*ei). +g�_c�f +( +v +) != 0) { + +1891 +co� + = 0; + +1893 i�( +abs +((* +ei +). +g�_c�f +( +v +)) != 1) + +1894 +co� + += 4; + +1896 + gnum_v� + = 0; + +1897 +Cڡr_V�s_I�r + +cvi +(* +ei +); + gcvi +; cvi++) + +1898 i�((* + gcvi +). + gv� + !� +v +) { + +1899 +num_v� +++; + +1900 i�((* + gcvi +). + gv� +-> +k�d +(�=� +Glob�_V� + && (* +cvi +). +v� +-> +g�_glob�_v� +()-> +��y +() > 0) { + +1901 +co� + += 10; + +1903 i�( +abs +((* +cvi +). +c�f +) != 1) + +1904 +co� + += 2; + +1905 i�((* + gcvi +). + gv� +-> +k�d +(�=� +I�ut_V� + && +assig�d_�_the_�y +[(* +cvi +). +v� +-> +g�_pos�i� +()-1] !� +NULL +) { + +1906 +co� + += 5; + +1909 i�((* + gei +). +g�_cڡ +() != 0) + +1910 +num_v� +++; + +1911 i�( + gnum_v� + > 1) + +1912 + gco� + +� +num_v� + - 1; + +1914 i�( + gco� + < + gm�_co� +) { + +1915 + gm�_co� + = +co� +; + +1916 + geq + = * +ei +; + +1920 + g�d +:: +make_�� +( +eq +, +m�_co� +); + +1923 +max_fs_��y +(cڡ +Cڡ��t_H�d� + & +c +) { + +1924 + gmax_��y +=0; + +1925 +Cڡr_V�s_I�r + +cv +( +c +); + gcv +; cv++) + +1926 if((* + gcv +). + gv� +-> +k�d +(�=� +Glob�_V� +) + +1927 +max_��y + = +max +(max_��y,(* +cv +). +v� +-> +g�_glob�_v� +()-> +��y +()); + +1928 + gmax_��y +; + + @/usr/include/math.h + +25 #i�def +_MATH_H + + +26 + #_MATH_H + 1 + + ) + +28 + ~<�u�s.h +> + +30 + g__BEGIN_DECLS + + +34 + ~<b�s/huge_v�.h +> + +35 #ifde� +__USE_ISOC99 + + +36 + ~<b�s/huge_v�f.h +> + +37 + ~<b�s/huge_v�l.h +> + +40 + ~<b�s/�f.h +> + +43 + ~<b�s/�n.h +> + +47 + ~<b�s/m�hdef.h +> + +54 + #__MATHCALL +( +fun�i� +, +suffix +, +�gs +) \ + +55 + `__MATHDECL + ( +_Mdoub�_ +, +fun�i� +, +suffix +, +�gs +) + + ) + +56 + #__MATHDECL +( +ty� +, +fun�i� +, +suffix +, +�gs +) \ + +57 + `__MATHDECL_1 +( +ty� +, +fun�i� +, +suffix +, +�gs +); \ + +58 + `__MATHDECL_1 +( +ty� +, + `__CONCAT +( +__ +, +fun�i� +), +suffix +, +�gs +) + + ) + +59 + #__MATHCALLX +( +fun�i� +, +suffix +, +�gs +, +��ib +) \ + +60 + `__MATHDECLX + ( +_Mdoub�_ +, +fun�i� +, +suffix +, +�gs +, +��ib +) + + ) + +61 + #__MATHDECLX +( +ty� +, +fun�i� +, +suffix +, +�gs +, +��ib +) \ + +62 + `__MATHDECL_1 +( +ty� +, +fun�i� +, +suffix +, +�gs +� + `__��ibu�__ + ( +��ib +); \ + +63 + `__MATHDECL_1 +( +ty� +, + `__CONCAT +( +__ +, +fun�i� +), +suffix +, +�gs +� + `__��ibu�__ + ( +��ib +) + + ) + +64 + #__MATHDECL_1 +( +ty� +, +fun�i� +, +suffix +, +�gs +) \ + +65
+ty� + + `__MATH_PRECNAME +( +fun�i� +, +suffix +� +�gs + +__THROW + + + ) + +67 + #_Mdoub�_ + + + ) + +68 + #__MATH_PRECNAME +( +�me +, +r +� + `__CONCAT +�ame,r) + + ) + +69 + #_Mdoub�_BEGIN_NAMESPACE + +__BEGIN_NAMESPACE_STD + + + ) + +70 + #_Mdoub�_END_NAMESPACE + +__END_NAMESPACE_STD + + + ) + +71 + ~<b�s/m�h��s.h +> + +72 #unde� +_Mdoub�_ + + +73 #unde� +_Mdoub�_BEGIN_NAMESPACE + + +74 #unde� +_Mdoub�_END_NAMESPACE + + +75 #unde� +__MATH_PRECNAME + + +77 #i� +def�ed + +__USE_MISC + || def�ed +__USE_ISOC99 + + +83 #i�de� +_M��t_ + + +84 + #_M��t_ + + + ) + +86 + #_Mdoub�_ + +_M��t_ + + + ) + +87 #ifde� +__STDC__ + + +88 + #__MATH_PRECNAME +( +�me +, +r +��me## +f +## + ) +r + +90 + #__MATH_PRECNAME +( +�me +, +r +��m� +f + + ) +r + +92 + #_Mdoub�_BEGIN_NAMESPACE + +__BEGIN_NAMESPACE_C99 + + + ) + +93 + #_Mdoub�_END_NAMESPACE + +__END_NAMESPACE_C99 + + + ) + +94 + ~<b�s/m�h��s.h +> + +95 #unde� +_Mdoub�_ + + +96 #unde� +_Mdoub�_BEGIN_NAMESPACE + + +97 #unde� +_Mdoub�_END_NAMESPACE + + +98 #unde� +__MATH_PRECNAME + + +100 #i�( +__STDC__ + - 0 || +__GNUC__ + - 0) \ + +101 && (! +def�ed + +__NO_LONG_DOUBLE_MATH + \ + +102 || +def�ed + +__LDBL_COMPAT + \ + +103 || ! +def�ed + +_LIBC +) + +104 #ifde� +__LDBL_COMPAT + + +106 #ifde� +__USE_ISOC99 + + +107
+ $__�dbl_�x�ow�df + ( +__x +, +__y +) + +108 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +109 #ifde� +__REDIRECT_NTH + + +110
+ `__REDIRECT_NTH + ( +�x�ow�df +, ( +__x +, +__y +), + +111 +__�dbl_�x�ow�df +) + +112 + `__��ibu�__ + (( +__cڡ__ +)); + +113
+ `__REDIRECT_NTH + ( +�x�ow�d +, ( +__x +, +__y +), + +114 +�x�� +� + `__��ibu�__ + (( +__cڡ__ +)); + +115
+ `__REDIRECT_NTH + ( +�x�ow�dl +, + +116 ( +__x +, +__y +), + +117 +�x�� +� + `__��ibu�__ + (( +__cڡ__ +)); + +122 #i� +def�ed + +__LDBL_COMPAT + || def�ed +__NO_LONG_DOUBLE_MATH + + +124 #unde� +__MATHDECL_1 + + +125 + #__MATHDECL_2 +( +ty� +, +fun�i� +, +suffix +, +�gs +, +��s +) \ + +126
+ty� + + `__REDIRECT_NTH +( + `__MATH_PRECNAME +( +fun�i� +, +suffix +), \ + +127 +�gs +, +��s +) + + ) + +128 + #__MATHDECL_1 +( +ty� +, +fun�i� +, +suffix +, +�gs +) \ + +129 + `__MATHDECL_2 +( +ty� +, +fun�i� +, +suffix +, +�gs +, + `__CONCAT +(fun�i�,suffix)) + + ) + +134 #i�de� +_Ml�g_doub�_ + + +135 + #_Ml�g_doub�_ + + + ) + +137 + #_Mdoub�_ + +_Ml�g_doub�_ + + + ) + +138 #ifde� +__STDC__ + + +139 + #__MATH_PRECNAME +( +�me +, +r +��me## +l +## + ) +r + +141 + #__MATH_PRECNAME +( +�me +, +r +��m� +l + + ) +r + +143 + #_Mdoub�_BEGIN_NAMESPACE + +__BEGIN_NAMESPACE_C99 + + + ) + +144 + #_Mdoub�_END_NAMESPACE + +__END_NAMESPACE_C99 + + + ) + +145 + ~<b�s/m�h��s.h +> + +146 #unde� +_Mdoub�_ + + +147 #unde� +_Mdoub�_BEGIN_NAMESPACE + + +148 #unde� +_Mdoub�_END_NAMESPACE + + +149 #unde� +__MATH_PRECNAME + + +154 #unde� +__MATHDECL_1 + + +155 #unde� +__MATHDECL + + +156 #unde� +__MATHCALL + + +159 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN + + +161
+signgam +; + +166 #ifde� +__USE_ISOC99 + + +204 +FP_NAN +, + +205 + #FP_NAN + +FP_NAN + + + ) + +206 +FP_INFINITE +, + +207 + #FP_INFINITE + +FP_INFINITE + + + ) + +208 +FP_ZERO +, + +209 + #FP_ZERO + +FP_ZERO + + + ) + +210 +FP_SUBNORMAL +, + +211 + #FP_SUBNORMAL + +FP_SUBNORMAL + + + ) + +212 +FP_NORMAL + + +213 + #FP_NORMAL + +FP_NORMAL + + + ) + +217 #ifde� +__NO_LONG_DOUBLE_MATH + + +218 + #��assify +( +x +) \ + +219 ( ( +x +�=� (�? + `__��assifyf + (x�: + `__��assify + (x)) + + ) + +221 + #��assify +( +x +) \ + +222 ( ( +x +) == () \ + +223 ? + `__��assifyf + ( +x +) \ + +224 : ( +x +) == () \ + +225 ? + `__��assify + ( +x +�: + `__��assifyl + (x)) + + ) + +229 #ifde� +__NO_LONG_DOUBLE_MATH + + +230 + #signb� +( +x +) \ + +231 ( ( +x +�=� (�? + `__signb�f + (x�: + `__signb� + (x)) + + ) + +233 + #signb� +( +x +) \ + +234 ( ( +x +) == () \ + +235 ? + `__signb�f + ( +x +) \ + +236 : ( +x +) == () \ + +237 ? + `__signb� + ( +x +�: + `__signb�l + (x)) + + ) + +241 #ifde� +__NO_LONG_DOUBLE_MATH + + +242 + #isf��e +( +x +) \ + +243 ( ( +x +�=� (�? + `__f��ef + (x�: + `__f��e + (x)) + + ) + +245 + #isf��e +( +x +) \ + +246 ( ( +x +) == () \ + +247 ? + `__f��ef + ( +x +) \ + +248 : ( +x +) == () \ + +249 ? + `__f��e + ( +x +�: + `__f��� + (x)) + + ) + +253 + #i��m� +( +x +�( + `��assify + (x�=� +FP_NORMAL +) + + ) + +257 #ifde� +__NO_LONG_DOUBLE_MATH + + +258 + #i�� +( +x +) \ + +259 ( ( +x +�=� (�? + `__i��f + (x�: + `__i�� + (x)) + + ) + +261 + #i�� +( +x +) \ + +262 ( ( +x +) == () \ + +263 ? + `__i��f + ( +x +) \ + +264 : ( +x +) == () \ + +265 ? + `__i�� + ( +x +�: + `__i��l + (x)) + + ) + +269 #ifde� +__NO_LONG_DOUBLE_MATH + + +270 + #is�f +( +x +) \ + +271 ( ( +x +�=� (�? + `__is�ff + (x�: + `__is�f + (x)) + + ) + +273 + #is�f +( +x +) \ + +274 ( ( +x +) == () \ + +275 ? + `__is�ff + ( +x +) \ + +276 : ( +x +) == () \ + +277 ? + `__is�f + ( +x +�: + `__is�� + (x)) + + ) + +281 + #MATH_ERRNO + 1 + + ) + +282 + #MATH_ERREXCEPT + 2 + + ) + +287 #i�de� +__FAST_MATH__ + + +288 + #m�h_�rh�dl�g + ( +MATH_ERRNO + | +MATH_ERREXCEPT +) + + ) + +293 #ifdef +__USE_MISC + + +297 +_IEEE_ + = -1, + +298 +_SVID_ +, + +299 +_XOPEN_ +, + +300 +_POSIX_ +, + +301 +_ISOC_ + + +302 } + t_LIB_VERSION_TYPE +; + +307
+_LIB_VERSION_TYPE + +_LIB_VERSION +; + +311 #ifde� +__USE_SVID + + +317 #ifde� +__�lu�lus + + +318 +__ex��i� + + +320 +ex��i� + + +323 +ty� +; + +324 * +�me +; + +325 +�g1 +; + +326 +�g2 +; + +327 +�tv� +; + +328 + } +}; + +330 #ifde� +__�lu�lus + + +331
+ $m�h�r + ( +__ex��i� + * +__exc +� + `throw + (); + +333
+ `m�h�r + ( +ex��i� + * +__exc +); + +336 + #X_TLOSS + 1.41484755040568800000e+16 + + ) + +339 + #DOMAIN + 1 + + ) + +340 + #SING + 2 + + ) + +341 + #OVERFLOW + 3 + + ) + +342 + #UNDERFLOW + 4 + + ) + +343 + #TLOSS + 5 + + ) + +344 + #PLOSS + 6 + + ) + +347 + #HUGE + 3.40282347e+38F + + ) + +351 #ifde� +__USE_XOPEN + + +353 + #MAXFLOAT + 3.40282347e+38F + + ) + +360 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN + + +361 + #M_E + 2.7182818284590452354 + + ) + +362 + #M_LOG2E + 1.4426950408889634074 + + ) + +363 + #M_LOG10E + 0.43429448190325182765 + + ) + +364 + #M_LN2 + 0.69314718055994530942 + + ) + +365 + #M_LN10 + 2.30258509299404568402 + + ) + +366 + #M_PI + 3.14159265358979323846 + + ) + +367 + #M_PI_2 + 1.57079632679489661923 + + ) + +368 + #M_PI_4 + 0.78539816339744830962 + + ) + +369 + #M_1_PI + 0.31830988618379067154 + + ) + +370 + #M_2_PI + 0.63661977236758134308 + + ) + +371 + #M_2_SQRTPI + 1.12837916709551257390 + + ) + +372 + #M_SQRT2 + 1.41421356237309504880 + + ) + +373 + #M_SQRT1_2 + 0.70710678118654752440 + + ) + +379 #ifde� +__USE_GNU + + +380 + #M_El + 2.7182818284590452353602874713526625L + + ) + +381 + #M_LOG2El + 1.4426950408889634073599246810018921L + + ) + +382 + #M_LOG10El + 0.4342944819032518276511289189166051L + + ) + +383 + #M_LN2l + 0.6931471805599453094172321214581766L + + ) + +384 + #M_LN10l + 2.3025850929940456840179914546843642L + + ) + +385 + #M_PIl + 3.1415926535897932384626433832795029L + + ) + +386 + #M_PI_2l + 1.5707963267948966192313216916397514L + + ) + +387 + #M_PI_4l + 0.7853981633974483096156608458198757L + + ) + +388 + #M_1_PIl + 0.3183098861837906715377675267450287L + + ) + +389 + #M_2_PIl + 0.6366197723675813430755350534900574L + + ) + +390 + #M_2_SQRTPIl + 1.1283791670955125738961589031215452L + + ) + +391 + #M_SQRT2l + 1.4142135623730950488016887242096981L + + ) + +392 + #M_SQRT1_2l + 0.7071067811865475244008443621048490L + + ) + +399 #i� +def�ed + +__STRICT_ANSI__ + && !def�ed +__NO_MATH_INLINES + + +400 + #__NO_MATH_INLINES + 1 + + ) + +403 #i� +def�ed + +__USE_ISOC99 + && + `__GNUC_PREREQ +(2,97) + +410 + #isg��� +( +x +, +y +� + `__bu�t�_isg��� +(x, y) + + ) + +411 + #isg���equ� +( +x +, +y +� + `__bu�t�_isg���equ� +(x, y) + + ) + +412 + #i�ess +( +x +, +y +� + `__bu�t�_i�ess +(x, y) + + ) + +413 + #i�es�qu� +( +x +, +y +� + `__bu�t�_i�es�qu� +(x, y) + + ) + +414 + #i�essg��� +( +x +, +y +� + `__bu�t�_i�essg��� +(x, y) + + ) + +415 + #isun�d�ed +( +u +, +v +� + `__bu�t�_isun�d�ed +(u, v) + + ) + +419 #ifde� +__USE_EXTERN_INLINES + + +420 + ~<b�s/m�h�l�e.h +> + +423 #ifde� +__USE_ISOC99 + + +427 #i�de� +isg��� + + +428 + #isg��� +( +x +, +y +) \ + +429 ( +__ex�nsi�__ + \ + +430 ({ + `__ty�of__ +( +x +� +__x + = (x); __ty�of__( +y +� +__y + = (y); \ + +431 ! + `isun�d�ed + ( +__x +, +__y +�&& __x > __y; + } +})) + + ) + +435 #i�de� +isg���equ� + + +436 + #isg���equ� +( +x +, +y +) \ + +437 ( +__ex�nsi�__ + \ + +438 ({ + `__ty�of__ +( +x +� +__x + = (x); __ty�of__( +y +� +__y + = (y); \ + +439 ! + `isun�d�ed + ( +__x +, +__y +�&& __x >�__y; })) + + ) + +443 #i�de� +i�ess + + +444 + #i�ess +( +x +, +y +) \ + +445 ( +__ex�nsi�__ + \ + +446 ({ + `__ty�of__ +( +x +� +__x + = (x); __ty�of__( +y +� +__y + = (y); \ + +447 ! + `isun�d�ed + ( +__x +, +__y +�&& __x < __y; })) + + ) + +451 #i�de� +i�es�qu� + + +452 + #i�es�qu� +( +x +, +y +) \ + +453 ( +__ex�nsi�__ + \ + +454 ({ + `__ty�of__ +( +x +� +__x + = (x); __ty�of__( +y +� +__y + = (y); \ + +455 ! + `isun�d�ed + ( +__x +, +__y +�&& __x <�__y; })) + + ) + +459 #i�de� +i�essg��� + + +460 + #i�essg��� +( +x +, +y +) \ + +461 ( +__ex�nsi�__ + \ + +462 ({ + `__ty�of__ +( +x +� +__x + = (x); __ty�of__( +y +� +__y + = (y); \ + +463 ! + `isun�d�ed + ( +__x +, +__y +�&& (__x < __y || __y < __x); })) + + ) + +467 #i�de� +isun�d�ed + + +468 + #isun�d�ed +( +u +, +v +) \ + +469 ( +__ex�nsi�__ + \ + +470 ({ + `__ty�of__ +( +u +� +__u + = (u); __ty�of__( +v +� +__v + = (v); \ + +471 + `��assify + ( +__u +�=� +FP_NAN + || fp�assify ( +__v +�=�FP_NAN; })) + + ) + +476 + g__END_DECLS + + + @/usr/include/stdio.h + +24 #i�de� +_STDIO_H + + +26 #i�! +def�ed + +__�ed_FILE + && !def�ed +__�ed___FILE + + +27 + #_STDIO_H + 1 + + ) + +28 + ~<�u�s.h +> + +30 + g__BEGIN_DECLS + + +32 + #__�ed_size_t + + + ) + +33 + #__�ed_NULL + + + ) + +34 + ~<�ddef.h +> + +36 + ~<b�s/ty�s.h +> + +37 + #__�ed_FILE + + + ) + +38 + #__�ed___FILE + + + ) + +42 #i�! +def�ed + +__FILE_def�ed + && def�ed +__�ed_FILE + + +45 + g_IO_FILE +; + +47 +__BEGIN_NAMESPACE_STD + + +49 +_IO_FILE + + tFILE +; + +50 + g__END_NAMESPACE_STD + + +51 #i� +def�ed + +__USE_LARGEFILE64 + || def�ed +__USE_SVID + || def�ed +__USE_POSIX + \ + +52 || +def�ed + + g__USE_BSD + || def�ed + g__USE_ISOC99 + || def�ed + g__USE_XOPEN + \ + +53 || +def�ed + +__USE_POSIX2 + + +54 + $__USING_NAMESPACE_STD +( +FILE +) + +57 + #__FILE_def�ed + 1 + + ) + +59 #unde� +__�ed_FILE + + +62 #i�! +def�ed + +____FILE_def�ed + && def�ed +__�ed___FILE + + +65 +_IO_FILE + + t__FILE +; + +67 + #____FILE_def�ed + 1 + + ) + +69 #unde� +__�ed___FILE + + +72 #ifdef +_STDIO_H + + +73 + #_STDIO_USES_IOSTREAM + + + ) + +75 + ~<libio.h +> + +77 #ifde� +__USE_XOPEN + + +78 #ifde� +__GNUC__ + + +79 #i�de� +_VA_LIST_DEFINED + + +80 +_G_va_li� + + tva_li� +; + +81 + #_VA_LIST_DEFINED + + + ) + +84 + ~<�d�g.h +> + +89 +__BEGIN_NAMESPACE_STD + + +90 #i�de� +__USE_FILE_OFFSET64 + + +91 +_G_�os_t + + t�os_t +; + +93 +_G_�os64_t + + t�os_t +; + +95 +__END_NAMESPACE_STD + + +96 #ifde� +__USE_LARGEFILE64 + + +97 +_G_�os64_t + + t�os64_t +; + +101 + #_IOFBF + 0 + + ) + +102 + #_IOLBF + 1 + + ) + +103 + #_IONBF + 2 + + ) + +107 #i�de� +BUFSIZ + + +108 + #BUFSIZ + +_IO_BUFSIZ + + + ) + +114 #i�de� +EOF + + +115 + #EOF + (-1) + + ) + +121 + #SEEK_SET + 0 + + ) + +122 + #SEEK_CUR + 1 + + ) + +123 + #SEEK_END + 2 + + ) + +126 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + + +128 + #P_tmpd� + "/tmp" + + ) + +141 + ~<b�s/�dio_lim.h +> + +145
+_IO_FILE + * +�d� +; + +146
+_IO_FILE + * +�dout +; + +147
+_IO_FILE + * +�d�r +; + +149 + #�d� + +�d� + + + ) + +150 + #�dout + +�dout + + + ) + +151 + #�d�r + +�d�r + + + ) + +153 +__BEGIN_NAMESPACE_STD + + +155
+ $�move + ( +__cڡ + * +__f��ame +� +__THROW +; + +157
+ $��me + ( +__cڡ + * +__�d +, __cڡ * +__�w +� +__THROW +; + +158 +__END_NAMESPACE_STD + + +160 #ifde� +__USE_ATFILE + + +162
+ $��m�t + ( +__�dfd +, +__cڡ + * +__�d +, +__�wfd +, + +163 +__cڡ + * +__�w +� +__THROW +; + +166 +__BEGIN_NAMESPACE_STD + + +171 #i�de� +__USE_FILE_OFFSET64 + + +172
+FILE + * + $tmpf�e + (� +__wur +; + +174 #ifde� +__REDIRECT + + +175
+FILE + * + `__REDIRECT + ( +tmpf�e +, (), +tmpf�e64 +� +__wur +; + +177 + #tmpf�e + +tmpf�e64 + + + ) + +181 #ifde� +__USE_LARGEFILE64 + + +182
+FILE + * + $tmpf�e64 + (� +__wur +; + +186
* + $tm�am + (* +__s +� +__THROW + +__wur +; + +187 +__END_NAMESPACE_STD + + +189 #ifde� +__USE_MISC + + +192
* + $tm�am_r + (* +__s +� +__THROW + +__wur +; + +196 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + + +204
* + $�m�am + ( +__cڡ + * +__d� +, __cڡ * +__pfx +) + +205 +__THROW + +__��ibu�_m�loc__ + +__wur +; + +209 +__BEGIN_NAMESPACE_STD + + +214
+ `f�o� + ( +FILE + * +__��am +); + +219
+ `f�ush + ( +FILE + * +__��am +); + +220 +__END_NAMESPACE_STD + + +222 #ifde� +__USE_MISC + + +229
+ `f�ush_u�ocked + ( +FILE + * +__��am +); + +232 #ifde� +__USE_GNU + + +239
+ `f�o��l + (); + +243 +__BEGIN_NAMESPACE_STD + + +244 #i�de� +__USE_FILE_OFFSET64 + + +249
+FILE + * + $fݒ + ( +__cڡ + * +__��ri� + +__f��ame +, + +250 +__cڡ + * +__��ri� + +__modes +� +__wur +; + +255
+FILE + * + $�eݒ + ( +__cڡ + * +__��ri� + +__f��ame +, + +256 +__cڡ + * +__��ri� + +__modes +, + +257 +FILE + * +__��ri� + +__��am +� +__wur +; + +259 #ifde� +__REDIRECT + + +260
+FILE + * + `__REDIRECT + ( +fݒ +, ( +__cڡ + * +__��ri� + +__f��ame +, + +261 +__cڡ + * +__��ri� + +__modes +), +fݒ64 +) + +262 +__wur +; + +263
+FILE + * + `__REDIRECT + ( +�eݒ +, ( +__cڡ + * +__��ri� + +__f��ame +, + +264 +__cڡ + * +__��ri� + +__modes +, + +265 +FILE + * +__��ri� + +__��am +), +�eݒ64 +) + +266 +__wur +; + +268 + #fݒ + +fݒ64 + + + ) + +269 + #�eݒ + +�eݒ64 + + + ) + +272 +__END_NAMESPACE_STD + + +273 #ifde� +__USE_LARGEFILE64 + + +274
+FILE + * + $fݒ64 + ( +__cڡ + * +__��ri� + +__f��ame +, + +275 +__cڡ + * +__��ri� + +__modes +� +__wur +; + +276
+FILE + * + $�eݒ64 + ( +__cڡ + * +__��ri� + +__f��ame +, + +277 +__cڡ + * +__��ri� + +__modes +, + +278 +FILE + * +__��ri� + +__��am +� +__wur +; + +281 #ifdef +__USE_POSIX + + +283
+FILE + * + $fdݒ + ( +__fd +, +__cڡ + * +__modes +� +__THROW + +__wur +; + +286 #ifdef +__USE_GNU + + +289
+FILE + * + $fݒcook� + (* +__��ri� + +__magic_cook� +, + +290 +__cڡ + * +__��ri� + +__modes +, + +291 +_IO_cook�_io_fun�i�s_t + +__io_funcs +� +__THROW + +__wur +; + +294 #ifde� +__USE_XOPEN2K8 + + +296
+FILE + * + $fmemݒ + (* +__s +, +size_t + +__�n +, +__cڡ + * +__modes +) + +297 +__THROW + +__wur +; + +302
+FILE + * + $ݒ_mem��am + (** +__bu�oc +, +size_t + * +__siz�oc +� +__THROW + +__wur +; + +306 +__BEGIN_NAMESPACE_STD + + +309
+ $�tbuf + ( +FILE + * +__��ri� + +__��am +, *__��ri� +__buf +� +__THROW +; + +313
+ $�tvbuf + ( +FILE + * +__��ri� + +__��am +, *__��ri� +__buf +, + +314 +__modes +, +size_t + +__n +� +__THROW +; + +315 +__END_NAMESPACE_STD + + +317 #ifdef +__USE_BSD + + +320
+ $�tbuf�r + ( +FILE + * +__��ri� + +__��am +, *__��ri� +__buf +, + +321 +size_t + +__size +� +__THROW +; + +324
+ $���ebuf + ( +FILE + * +__��am +� +__THROW +; + +328 +__BEGIN_NAMESPACE_STD + + +333
+ `�r�tf + ( +FILE + * +__��ri� + +__��am +, + +334 +__cڡ + * +__��ri� + +__f�m� +, ...); + +339
+ `��tf + ( +__cڡ + * +__��ri� + +__f�m� +, ...); + +341
+ $�r�tf + (* +__��ri� + +__s +, + +342 +__cڡ + * +__��ri� + +__f�m� +, ...� +__THROW +; + +348
+ `v�r�tf + ( +FILE + * +__��ri� + +__s +, +__cڡ + *__��ri� +__f�m� +, + +349 +_G_va_li� + +__�g +); + +354
+ `v��tf + ( +__cڡ + * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +); + +356
+ $v�r�tf + (* +__��ri� + +__s +, +__cڡ + *__��ri� +__f�m� +, + +357 +_G_va_li� + +__�g +� +__THROW +; + +358 +__END_NAMESPACE_STD + + +360 #i� +def�ed + +__USE_BSD + || def�ed +__USE_ISOC99 + || def�ed +__USE_UNIX98 + + +361 +__BEGIN_NAMESPACE_C99 + + +363
+ $���tf + (* +__��ri� + +__s +, +size_t + +__max�n +, + +364 +__cڡ + * +__��ri� + +__f�m� +, ...) + +365 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 4))); + +367
+ $v���tf + (* +__��ri� + +__s +, +size_t + +__max�n +, + +368 +__cڡ + * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +) + +369 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 0))); + +370 +__END_NAMESPACE_C99 + + +373 #ifde� +__USE_GNU + + +376
+ $va�r�tf + (** +__��ri� + +__�r +, +__cڡ + *__��ri� +__f +, + +377 +_G_va_li� + +__�g +) + +378 +__THROW + + `__��ibu�__ + (( + $__f�m�__ + ( +__��tf__ +, 2, 0))� +__wur +; + +379
+ $__a�r�tf + (** +__��ri� + +__�r +, + +380 +__cڡ + * +__��ri� + +__fmt +, ...) + +381 +__THROW + + `__��ibu�__ + (( + $__f�m�__ + ( +__��tf__ +, 2, 3))� +__wur +; + +382
+ $a�r�tf + (** +__��ri� + +__�r +, + +383 +__cڡ + * +__��ri� + +__fmt +, ...) + +384 +__THROW + + `__��ibu�__ + (( + $__f�m�__ + ( +__��tf__ +, 2, 3))� +__wur +; + +387 #ifde� +__USE_XOPEN2K8 + + +394
+ $vd��tf + ( +__fd +, +__cڡ + * +__��ri� + +__fmt +, + +395 +_G_va_li� + +__�g +) + +396 + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 2, 0))); + +397
+ $d��tf + ( +__fd +, +__cڡ + * +__��ri� + +__fmt +, ...) + +398 + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 2, 3))); + +402 +__BEGIN_NAMESPACE_STD + + +407
+ $fs�nf + ( +FILE + * +__��ri� + +__��am +, + +408 +__cڡ + * +__��ri� + +__f�m� +, ...� +__wur +; + +413
+ $s�nf + ( +__cڡ + * +__��ri� + +__f�m� +, ...� +__wur +; + +415
+ $ss�nf + ( +__cڡ + * +__��ri� + +__s +, + +416 +__cڡ + * +__��ri� + +__f�m� +, ...� +__THROW +; + +418 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__USE_GNU + \ + +419 && (! +def�ed + +__LDBL_COMPAT + || !def�ed +__REDIRECT +) \ + +420 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +421 #ifde� +__REDIRECT + + +425
+ `__REDIRECT + ( +fs�nf +, ( +FILE + * +__��ri� + +__��am +, + +426 +__cڡ + * +__��ri� + +__f�m� +, ...), + +427 +__isoc99_fs�nf +� +__wur +; + +428
+ `__REDIRECT + ( +s�nf +, ( +__cڡ + * +__��ri� + +__f�m� +, ...), + +429 +__isoc99_s�nf +� +__wur +; + +430
+ `__REDIRECT + ( +ss�nf +, ( +__cڡ + * +__��ri� + +__s +, + +431 +__cڡ + * +__��ri� + +__f�m� +, ...), + +432 +__isoc99_ss�nf +� +__THROW +; + +434
+ $__isoc99_fs�nf + ( +FILE + * +__��ri� + +__��am +, + +435 +__cڡ + * +__��ri� + +__f�m� +, ...� +__wur +; + +436
+ $__isoc99_s�nf + ( +__cڡ + * +__��ri� + +__f�m� +, ...� +__wur +; + +437
+ $__isoc99_ss�nf + ( +__cڡ + * +__��ri� + +__s +, + +438 +__cڡ + * +__��ri� + +__f�m� +, ...� +__THROW +; + +439 + #fs�nf + +__isoc99_fs�nf + + + ) + +440 + #s�nf + +__isoc99_s�nf + + + ) + +441 + #ss�nf + +__isoc99_ss�nf + + + ) + +445 +__END_NAMESPACE_STD + + +447 #ifdef +__USE_ISOC99 + + +448 +__BEGIN_NAMESPACE_C99 + + +453
+ $vfs�nf + ( +FILE + * +__��ri� + +__s +, +__cڡ + *__��ri� +__f�m� +, + +454 +_G_va_li� + +__�g +) + +455 + `__��ibu�__ + (( + $__f�m�__ + ( +__s�nf__ +, 2, 0))� +__wur +; + +461
+ $vs�nf + ( +__cڡ + * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +) + +462 + `__��ibu�__ + (( + $__f�m�__ + ( +__s�nf__ +, 1, 0))� +__wur +; + +465
+ $vss�nf + ( +__cڡ + * +__��ri� + +__s +, + +466 +__cڡ + * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +) + +467 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__s�nf__ +, 2, 0))); + +469 #i�! +def�ed + +__USE_GNU + \ + +470 && (! +def�ed + +__LDBL_COMPAT + || !def�ed +__REDIRECT +) \ + +471 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +472 #ifde� +__REDIRECT + + +476
+ `__REDIRECT + ( +vfs�nf +, + +477 ( +FILE + * +__��ri� + +__s +, + +478 +__cڡ + * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +), + +479 +__isoc99_vfs�nf +) + +480 + `__��ibu�__ + (( + $__f�m�__ + ( +__s�nf__ +, 2, 0))� +__wur +; + +481
+ `__REDIRECT + ( +vs�nf +, ( +__cڡ + * +__��ri� + +__f�m� +, + +482 +_G_va_li� + +__�g +), +__isoc99_vs�nf +) + +483 + `__��ibu�__ + (( + $__f�m�__ + ( +__s�nf__ +, 1, 0))� +__wur +; + +484
+ `__REDIRECT + ( +vss�nf +, + +485 ( +__cڡ + * +__��ri� + +__s +, + +486 +__cڡ + * +__��ri� + +__f�m� +, +_G_va_li� + +__�g +), + +487 +__isoc99_vss�nf +) + +488 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__s�nf__ +, 2, 0))); + +490
+ $__isoc99_vfs�nf + ( +FILE + * +__��ri� + +__s +, + +491 +__cڡ + * +__��ri� + +__f�m� +, + +492 +_G_va_li� + +__�g +� +__wur +; + +493
+ $__isoc99_vs�nf + ( +__cڡ + * +__��ri� + +__f�m� +, + +494 +_G_va_li� + +__�g +� +__wur +; + +495
+ $__isoc99_vss�nf + ( +__cڡ + * +__��ri� + +__s +, + +496 +__cڡ + * +__��ri� + +__f�m� +, + +497 +_G_va_li� + +__�g +� +__THROW +; + +498 + #vfs�nf + +__isoc99_vfs�nf + + + ) + +499 + #vs�nf + +__isoc99_vs�nf + + + ) + +500 + #vss�nf + +__isoc99_vss�nf + + + ) + +504 +__END_NAMESPACE_C99 + + +508 +__BEGIN_NAMESPACE_STD + + +513
+ `fg�c + ( +FILE + * +__��am +); + +514
+ `g�c + ( +FILE + * +__��am +); + +520
+ `g�ch� + (); + +521 +__END_NAMESPACE_STD + + +525 + #g�c +( +_� +� + `_IO_g�c + (_�) + + ) + +527 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +532
+ `g�c_u�ocked + ( +FILE + * +__��am +); + +533
+ `g�ch�_u�ocked + (); + +536 #ifde� +__USE_MISC + + +543
+ `fg�c_u�ocked + ( +FILE + * +__��am +); + +547 +__BEGIN_NAMESPACE_STD + + +555
+ `�utc + ( +__c +, +FILE + * +__��am +); + +556
+ `putc + ( +__c +, +FILE + * +__��am +); + +562
+ `putch� + ( +__c +); + +563 +__END_NAMESPACE_STD + + +567 + #putc +( +_ch +, +_� +� + `_IO_putc + (_ch, _�) + + ) + +569 #ifde� +__USE_MISC + + +576
+ `�utc_u�ocked + ( +__c +, +FILE + * +__��am +); + +579 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +584
+ `putc_u�ocked + ( +__c +, +FILE + * +__��am +); + +585
+ `putch�_u�ocked + ( +__c +); + +589 #i� +def�ed + +__USE_SVID + || def�ed +__USE_MISC + \ + +590 || ( +def�ed + +__USE_XOPEN + && !def�ed +__USE_XOPEN2K +) + +592
+ `g�w + ( +FILE + * +__��am +); + +595
+ `putw + ( +__w +, +FILE + * +__��am +); + +599 +__BEGIN_NAMESPACE_STD + + +604
* + $fg�s + (* +__��ri� + +__s +, +__n +, +FILE + *__��ri� +__��am +) + +605 +__wur +; + +612
* + $g�s + (* +__s +� +__wur +; + +613 +__END_NAMESPACE_STD + + +615 #ifde� +__USE_GNU + + +622
* + $fg�s_u�ocked + (* +__��ri� + +__s +, +__n +, + +623 +FILE + * +__��ri� + +__��am +� +__wur +; + +627 #ifdef +__USE_XOPEN2K8 + + +638
+_IO_ssize_t + + $__g�d�im + (** +__��ri� + +__l��� +, + +639 +size_t + * +__��ri� + +__n +, +__d�im�� +, + +640 +FILE + * +__��ri� + +__��am +� +__wur +; + +641
+_IO_ssize_t + + $g�d�im + (** +__��ri� + +__l��� +, + +642 +size_t + * +__��ri� + +__n +, +__d�im�� +, + +643 +FILE + * +__��ri� + +__��am +� +__wur +; + +651
+_IO_ssize_t + + $g�l�e + (** +__��ri� + +__l��� +, + +652 +size_t + * +__��ri� + +__n +, + +653 +FILE + * +__��ri� + +__��am +� +__wur +; + +657 +__BEGIN_NAMESPACE_STD + + +662
+ `�uts + ( +__cڡ + * +__��ri� + +__s +, +FILE + *__��ri� +__��am +); + +668
+ `puts + ( +__cڡ + * +__s +); + +675
+ `ung�c + ( +__c +, +FILE + * +__��am +); + +682
+size_t + + $�d + (* +__��ri� + +__�r +, +size_t + +__size +, + +683 +size_t + +__n +, +FILE + * +__��ri� + +__��am +� +__wur +; + +688
+size_t + + `fwr�e + ( +__cڡ + * +__��ri� + +__�r +, size_� +__size +, + +689 +size_t + +__n +, +FILE + * +__��ri� + +__s +); + +690 +__END_NAMESPACE_STD + + +692 #ifde� +__USE_GNU + + +699
+ `�uts_u�ocked + ( +__cڡ + * +__��ri� + +__s +, + +700 +FILE + * +__��ri� + +__��am +); + +703 #ifde� +__USE_MISC + + +710
+size_t + + $�d_u�ocked + (* +__��ri� + +__�r +, +size_t + +__size +, + +711 +size_t + +__n +, +FILE + * +__��ri� + +__��am +� +__wur +; + +712
+size_t + + `fwr�e_u�ocked + ( +__cڡ + * +__��ri� + +__�r +, size_� +__size +, + +713 +size_t + +__n +, +FILE + * +__��ri� + +__��am +); + +717 +__BEGIN_NAMESPACE_STD + + +722
+ `f�ek + ( +FILE + * +__��am +, +__off +, +__wh�� +); + +727
+ $�l + ( +FILE + * +__��am +� +__wur +; + +732
+ `�w�d + ( +FILE + * +__��am +); + +733 +__END_NAMESPACE_STD + + +740 #i� +def�ed + +__USE_LARGEFILE + || def�ed +__USE_XOPEN2K + + +741 #i�de� +__USE_FILE_OFFSET64 + + +746
+ `f�eko + ( +FILE + * +__��am +, +__off_t + +__off +, +__wh�� +); + +751
+__off_t + + $�lo + ( +FILE + * +__��am +� +__wur +; + +753 #ifde� +__REDIRECT + + +754
+ `__REDIRECT + ( +f�eko +, + +755 ( +FILE + * +__��am +, +__off64_t + +__off +, +__wh�� +), + +756 +f�eko64 +); + +757
+__off64_t + + `__REDIRECT + ( +�lo +, ( +FILE + * +__��am +), +�lo64 +); + +759 + #f�eko + +f�eko64 + + + ) + +760 + #�lo + +�lo64 + + + ) + +765 +__BEGIN_NAMESPACE_STD + + +766 #i�de� +__USE_FILE_OFFSET64 + + +771
+ `fg�pos + ( +FILE + * +__��ri� + +__��am +, +�os_t + *__��ri� +__pos +); + +776
+ `f��os + ( +FILE + * +__��am +, +__cڡ + +�os_t + * +__pos +); + +778 #ifde� +__REDIRECT + + +779
+ `__REDIRECT + ( +fg�pos +, ( +FILE + * +__��ri� + +__��am +, + +780 +�os_t + * +__��ri� + +__pos +), +fg�pos64 +); + +781
+ `__REDIRECT + ( +f��os +, + +782 ( +FILE + * +__��am +, +__cڡ + +�os_t + * +__pos +), +f��os64 +); + +784 + #fg�pos + +fg�pos64 + + + ) + +785 + #f��os + +f��os64 + + + ) + +788 +__END_NAMESPACE_STD + + +790 #ifde� +__USE_LARGEFILE64 + + +791
+ `f�eko64 + ( +FILE + * +__��am +, +__off64_t + +__off +, +__wh�� +); + +792
+__off64_t + + $�lo64 + ( +FILE + * +__��am +� +__wur +; + +793
+ `fg�pos64 + ( +FILE + * +__��ri� + +__��am +, +�os64_t + *__��ri� +__pos +); + +794
+ `f��os64 + ( +FILE + * +__��am +, +__cڡ + +�os64_t + * +__pos +); + +797 +__BEGIN_NAMESPACE_STD + + +799
+ $���� + ( +FILE + * +__��am +� +__THROW +; + +801
+ $�of + ( +FILE + * +__��am +� +__THROW + +__wur +; + +803
+ $�� + ( +FILE + * +__��am +� +__THROW + +__wur +; + +804 +__END_NAMESPACE_STD + + +806 #ifde� +__USE_MISC + + +808
+ $����_u�ocked + ( +FILE + * +__��am +� +__THROW +; + +809
+ $�of_u�ocked + ( +FILE + * +__��am +� +__THROW + +__wur +; + +810
+ $��_u�ocked + ( +FILE + * +__��am +� +__THROW + +__wur +; + +814 +__BEGIN_NAMESPACE_STD + + +819
+ `��� + ( +__cڡ + * +__s +); + +820 +__END_NAMESPACE_STD + + +826 + ~<b�s/sys_��i�.h +> + +829 #ifdef +__USE_POSIX + + +831
+ $f��o + ( +FILE + * +__��am +� +__THROW + +__wur +; + +834 #ifde� +__USE_MISC + + +836
+ $f��o_u�ocked + ( +FILE + * +__��am +� +__THROW + +__wur +; + +840 #i�( +def�ed + +__USE_POSIX2 + || def�ed +__USE_SVID + || def�ed +__USE_BSD + || \ + +841 +def�ed + +__USE_MISC +) + +846
+FILE + * + $pݒ + ( +__cڡ + * +__comm�d +, __cڡ * +__modes +� +__wur +; + +852
+ `p�o� + ( +FILE + * +__��am +); + +856 #ifdef +__USE_POSIX + + +858
* + $��mid + (* +__s +� +__THROW +; + +862 #ifde� +__USE_XOPEN + + +864
* + `cu�rid + (* +__s +); + +868 #ifdef +__USE_GNU + + +869 +ob�ack +; + +872
+ $ob�ack_��tf + ( +ob�ack + * +__��ri� + +__ob�ack +, + +873 +__cڡ + * +__��ri� + +__f�m� +, ...) + +874 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 2, 3))); + +875
+ $ob�ack_v��tf + ( +ob�ack + * +__��ri� + +__ob�ack +, + +876 +__cڡ + * +__��ri� + +__f�m� +, + +877 +_G_va_li� + +__�gs +) + +878 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 2, 0))); + +882 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +886
+ $�ockf�e + ( +FILE + * +__��am +� +__THROW +; + +890
+ $�rylockf�e + ( +FILE + * +__��am +� +__THROW + +__wur +; + +893
+ $fu�ockf�e + ( +FILE + * +__��am +� +__THROW +; + +896 #i� +def�ed + +__USE_XOPEN + && !def�ed +__USE_XOPEN2K + && !def�ed +__USE_GNU + + +900 + #__�ed_g��t + + + ) + +901 + ~<g��t.h +> + +906 #ifde� +__USE_EXTERN_INLINES + + +907 + ~<b�s/�dio.h +> + +909 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__ex��_�ways_�l�e + + +910 + ~<b�s/�dio2.h +> + +912 #ifde� +__LDBL_COMPAT + + +913 + ~<b�s/�dio-ldbl.h +> + +916 +__END_DECLS + + + @/usr/include/string.h + +23 #i�def +_STRING_H + + +24 + #_STRING_H + 1 + + ) + +26 + ~<�u�s.h +> + +28 + g__BEGIN_DECLS + + +31 + #__�ed_size_t + + + ) + +32 + #__�ed_NULL + + + ) + +33 + ~<�ddef.h +> + +36 #i� +def�ed + +__�lu�lus + && +__GNUC_PREREQ + (4, 4) + +37 + #__CORRECT_ISO_CPP_STRING_H_PROTO + + + ) + +41 +__BEGIN_NAMESPACE_STD + + +43
* + $mem�y + (* +__��ri� + +__de� +, + +44 +__cڡ + * +__��ri� + +__�c +, +size_t + +__n +) + +45 +__THROW + + `__n�nu� + ((1, 2)); + +48
* + $memmove + (* +__de� +, +__cڡ + * +__�c +, +size_t + +__n +) + +49 +__THROW + + `__n�nu� + ((1, 2)); + +50 +__END_NAMESPACE_STD + + +55 #i� +def�ed + +__USE_SVID + || def�ed +__USE_BSD + || def�ed +__USE_XOPEN + + +56
* + $memc�y + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +, + +57 +__c +, +size_t + +__n +) + +58 +__THROW + + `__n�nu� + ((1, 2)); + +62 +__BEGIN_NAMESPACE_STD + + +64
* + $mem�t + (* +__s +, +__c +, +size_t + +__n +� +__THROW + + `__n�nu� + ((1)); + +67
+ $memcmp + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +, +size_t + +__n +) + +68 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +71 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +74
* + `memchr + (* +__s +, +__c +, +size_t + +__n +) + +75 +__THROW + + `__asm + ("memchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +76
+__cڡ + * + `memchr + (__cڡ * +__s +, +__c +, +size_t + +__n +) + +77 +__THROW + + `__asm + ("memchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +79 #ifde� +__OPTIMIZE__ + + +80 +__ex��_�ways_�l�e + * + +81 + `memchr + (* +__s +, +__c +, +size_t + +__n +� +__THROW + + +83 + `__bu�t�_memchr + ( +__s +, +__c +, +__n +); + +86 +__ex��_�ways_�l�e + +__cڡ + * + +87 + `memchr + ( +__cڡ + * +__s +, +__c +, +size_t + +__n +� +__THROW + + +89 + `__bu�t�_memchr + ( +__s +, +__c +, +__n +); + +92 + } +} + +94
* + $memchr + ( +__cڡ + * +__s +, +__c +, +size_t + +__n +) + +95 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +97 +__END_NAMESPACE_STD + + +99 #ifde� +__USE_GNU + + +102 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +103
"C++" * + $�wmemchr + (* +__s +, +__c +) + +104 +__THROW + + `__asm + ("�wmemchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +105
"C++" +__cڡ + * + $�wmemchr + ( +__cڡ + * +__s +, +__c +) + +106 +__THROW + + `__asm + ("�wmemchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +108
* + $�wmemchr + ( +__cڡ + * +__s +, +__c +) + +109 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +113 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +114
"C++" * + $memrchr + (* +__s +, +__c +, +size_t + +__n +) + +115 +__THROW + + `__asm + ("memrchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +116
"C++" +__cڡ + * + $memrchr + ( +__cڡ + * +__s +, +__c +, +size_t + +__n +) + +117 +__THROW + + `__asm + ("memrchr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +119
* + $memrchr + ( +__cڡ + * +__s +, +__c +, +size_t + +__n +) + +120 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +125 +__BEGIN_NAMESPACE_STD + + +127
* + $�r�y + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +) + +128 +__THROW + + `__n�nu� + ((1, 2)); + +130
* + $���y + (* +__��ri� + +__de� +, + +131 +__cڡ + * +__��ri� + +__�c +, +size_t + +__n +) + +132 +__THROW + + `__n�nu� + ((1, 2)); + +135
* + $�r�t + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +) + +136 +__THROW + + `__n�nu� + ((1, 2)); + +138
* + $���t + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +, + +139 +size_t + +__n +� +__THROW + + `__n�nu� + ((1, 2)); + +142
+ $�rcmp + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +) + +143 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +145
+ $��cmp + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +, +size_t + +__n +) + +146 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +149
+ $�rc�l + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +) + +150 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +152
+size_t + + $�rx�m + (* +__��ri� + +__de� +, + +153 +__cڡ + * +__��ri� + +__�c +, +size_t + +__n +) + +154 +__THROW + + `__n�nu� + ((2)); + +155 +__END_NAMESPACE_STD + + +157 #ifde� +__USE_XOPEN2K8 + + +161 + ~<xlo��.h +> + +164
+ $�rc�l_l + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +, +__lo��_t + +__l +) + +165 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2, 3)); + +167
+size_t + + $�rx�m_l + (* +__de� +, +__cڡ + * +__�c +, +size_t + +__n +, + +168 +__lo��_t + +__l +� +__THROW + + `__n�nu� + ((2, 4)); + +171 #i� +def�ed + +__USE_SVID + || def�ed +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +173
* + $�rdup + ( +__cڡ + * +__s +) + +174 +__THROW + +__��ibu�_m�loc__ + + `__n�nu� + ((1)); + +180 #i� +def�ed + +__USE_XOPEN2K8 + + +181
* + $��dup + ( +__cڡ + * +__�r�g +, +size_t + +__n +) + +182 +__THROW + +__��ibu�_m�loc__ + + `__n�nu� + ((1)); + +185 #i� +def�ed + +__USE_GNU + && def�ed +__GNUC__ + + +187 + #�rdu� +( +s +) \ + +188 ( +__ex�nsi�__ + \ + +190 +__cڡ + * +__�d + = ( +s +); \ + +191 +size_t + +__�n + = + `��� + ( +__�d +) + 1; \ + +192 * +__�w + = (*� + `__bu�t�_�lo� + ( +__�n +); \ + +193 (*� + `mem�y + ( +__�w +, +__�d +, +__�n +); \ + +194 + } +})) + + ) + +197 + #��du� +( +s +, +n +) \ + +198 ( +__ex�nsi�__ + \ + +200 +__cڡ + * +__�d + = ( +s +); \ + +201 +size_t + +__�n + = + `���n + ( +__�d +, ( +n +)); \ + +202 * +__�w + = (*� + `__bu�t�_�lo� + ( +__�n + + 1); \ + +203 +__�w +[ +__�n +] = '\0'; \ + +204 (*� + `mem�y + ( +__�w +, +__�d +, +__�n +); \ + +205 })) + + ) + +208 + g__BEGIN_NAMESPACE_STD + + +210 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +213
* +�rchr + (* +__s +, +__c +) + +214 +__THROW + +__asm + ("�rchr"� +__��ibu�_pu�__ + +__n�nu� + ((1)); + +215
+__cڡ + * +�rchr + (__cڡ * +__s +, +__c +) + +216 +__THROW + +__asm + ("�rchr"� +__��ibu�_pu�__ + +__n�nu� + ((1)); + +218 #ifde� +__OPTIMIZE__ + + +219 +__ex��_�ways_�l�e + * + +220 +�rchr + (* +__s +, +__c +� + g__THROW + + +222 +__bu�t�_�rchr + ( +__s +, +__c +); + +225 +__ex��_�ways_�l�e + +__cڡ + * + +226 +�rchr + ( +__cڡ + * +__s +, +__c +� + g__THROW + + +228 +__bu�t�_�rchr + ( +__s +, +__c +); + +233
* + $�rchr + ( +__cڡ + * +__s +, +__c +) + +234 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +237 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +240
* + `��chr + (* +__s +, +__c +) + +241 +__THROW + + `__asm + ("��chr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +242
+__cڡ + * + `��chr + (__cڡ * +__s +, +__c +) + +243 +__THROW + + `__asm + ("��chr"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +245 #ifde� +__OPTIMIZE__ + + +246 +__ex��_�ways_�l�e + * + +247 + `��chr + (* +__s +, +__c +� +__THROW + + +249 + `__bu�t�_��chr + ( +__s +, +__c +); + +252 +__ex��_�ways_�l�e + +__cڡ + * + +253 + `��chr + ( +__cڡ + * +__s +, +__c +� +__THROW + + +255 + `__bu�t�_��chr + ( +__s +, +__c +); + +258 + } +} + +260
* + $��chr + ( +__cڡ + * +__s +, +__c +) + +261 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +263 +__END_NAMESPACE_STD + + +265 #ifde� +__USE_GNU + + +268 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +269
"C++" * + $�rch�ul + (* +__s +, +__c +) + +270 +__THROW + + `__asm + ("�rch�ul"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +271
"C++" +__cڡ + * + $�rch�ul + ( +__cڡ + * +__s +, +__c +) + +272 +__THROW + + `__asm + ("�rch�ul"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +274
* + $�rch�ul + ( +__cڡ + * +__s +, +__c +) + +275 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +279 +__BEGIN_NAMESPACE_STD + + +282
+size_t + + $�rc�n + ( +__cڡ + * +__s +, __cڡ * +__�je� +) + +283 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +286
+size_t + + $�r�n + ( +__cڡ + * +__s +, __cڡ * +__ac�� +) + +287 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +289 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +292
* + `��brk + (* +__s +, +__cڡ + * +__ac�� +) + +293 +__THROW + + `__asm + ("��brk"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +294
+__cڡ + * + `��brk + (__cڡ * +__s +, __cڡ * +__ac�� +) + +295 +__THROW + + `__asm + ("��brk"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +297 #ifde� +__OPTIMIZE__ + + +298 +__ex��_�ways_�l�e + * + +299 + `��brk + (* +__s +, +__cڡ + * +__ac�� +� +__THROW + + +301 + `__bu�t�_��brk + ( +__s +, +__ac�� +); + +304 +__ex��_�ways_�l�e + +__cڡ + * + +305 + `��brk + ( +__cڡ + * +__s +, __cڡ * +__ac�� +� +__THROW + + +307 + `__bu�t�_��brk + ( +__s +, +__ac�� +); + +310 + } +} + +312
* + $��brk + ( +__cڡ + * +__s +, __cڡ * +__ac�� +) + +313 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +316 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +319
* + `�r�r + (* +__hay�ack +, +__cڡ + * +__�ed� +) + +320 +__THROW + + `__asm + ("�r�r"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +321
+__cڡ + * + `�r�r + (__cڡ * +__hay�ack +, + +322 +__cڡ + * +__�ed� +) + +323 +__THROW + + `__asm + ("�r�r"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +325 #ifde� +__OPTIMIZE__ + + +326 +__ex��_�ways_�l�e + * + +327 + `�r�r + (* +__hay�ack +, +__cڡ + * +__�ed� +� +__THROW + + +329 + `__bu�t�_�r�r + ( +__hay�ack +, +__�ed� +); + +332 +__ex��_�ways_�l�e + +__cڡ + * + +333 + `�r�r + ( +__cڡ + * +__hay�ack +, __cڡ * +__�ed� +� +__THROW + + +335 + `__bu�t�_�r�r + ( +__hay�ack +, +__�ed� +); + +338 + } +} + +340
* + $�r�r + ( +__cڡ + * +__hay�ack +, __cڡ * +__�ed� +) + +341 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +346
* + $��ok + (* +__��ri� + +__s +, +__cڡ + *__��ri� +__d�im +) + +347 +__THROW + + `__n�nu� + ((2)); + +348 +__END_NAMESPACE_STD + + +352
* + $__��ok_r + (* +__��ri� + +__s +, + +353 +__cڡ + * +__��ri� + +__d�im +, + +354 ** +__��ri� + +__�ve_�r +) + +355 +__THROW + + `__n�nu� + ((2, 3)); + +356 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +357
* + $��ok_r + (* +__��ri� + +__s +, +__cڡ + *__��ri� +__d�im +, + +358 ** +__��ri� + +__�ve_�r +) + +359 +__THROW + + `__n�nu� + ((2, 3)); + +362 #ifde� +__USE_GNU + + +364 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +365
"C++" * + $�r���r + (* +__hay�ack +, +__cڡ + * +__�ed� +) + +366 +__THROW + + `__asm + ("�r���r"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +367
"C++" +__cڡ + * + $�r���r + ( +__cڡ + * +__hay�ack +, + +368 +__cڡ + * +__�ed� +) + +369 +__THROW + + `__asm + ("�r���r"� +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +371
* + $�r���r + ( +__cڡ + * +__hay�ack +, __cڡ * +__�ed� +) + +372 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +376 #ifde� +__USE_GNU + + +380
* + $memmem + ( +__cڡ + * +__hay�ack +, +size_t + +__hay�ack�n +, + +381 +__cڡ + * +__�ed� +, +size_t + +__�ed��n +) + +382 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 3)); + +386
* + $__memp�y + (* +__��ri� + +__de� +, + +387 +__cڡ + * +__��ri� + +__�c +, +size_t + +__n +) + +388 +__THROW + + `__n�nu� + ((1, 2)); + +389
* + $memp�y + (* +__��ri� + +__de� +, + +390 +__cڡ + * +__��ri� + +__�c +, +size_t + +__n +) + +391 +__THROW + + `__n�nu� + ((1, 2)); + +395 +__BEGIN_NAMESPACE_STD + + +397
+size_t + + $��� + ( +__cڡ + * +__s +) + +398 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +399 +__END_NAMESPACE_STD + + +401 #ifdef +__USE_XOPEN2K8 + + +404
+size_t + + $���n + ( +__cڡ + * +__�r�g +, +size_t + +__max�n +) + +405 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +409 +__BEGIN_NAMESPACE_STD + + +411
* + $���� + ( +__��um +� +__THROW +; + +412 +__END_NAMESPACE_STD + + +413 #i� +def�ed + +__USE_XOPEN2K + || def�ed +__USE_MISC + + +421 #i� +def�ed + +__USE_XOPEN2K + && !def�ed +__USE_GNU + + +424 #ifde� +__REDIRECT_NTH + + +425
+ `__REDIRECT_NTH + ( +����_r +, + +426 ( +__��um +, * +__buf +, +size_t + +__bu� +), + +427 +__xpg_����_r +� + `__n�nu� + ((2)); + +429
+ $__xpg_����_r + ( +__��um +, * +__buf +, +size_t + +__bu� +) + +430 +__THROW + + `__n�nu� + ((2)); + +431 + #����_r + +__xpg_����_r + + + ) + +436
* + $����_r + ( +__��um +, * +__buf +, +size_t + +__bu� +) + +437 +__THROW + + `__n�nu� + ((2)); + +441 #ifde� +__USE_XOPEN2K8 + + +443
* + $����_l + ( +__��um +, +__lo��_t + +__l +� +__THROW +; + +449
+ $__bz�o + (* +__s +, +size_t + +__n +� +__THROW + + `__n�nu� + ((1)); + +451 #ifde� +__USE_BSD + + +453
+ $bc�y + ( +__cڡ + * +__�c +, * +__de� +, +size_t + +__n +) + +454 +__THROW + + `__n�nu� + ((1, 2)); + +457
+ $bz�o + (* +__s +, +size_t + +__n +� +__THROW + + `__n�nu� + ((1)); + +460
+ $bcmp + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +, +size_t + +__n +) + +461 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +464 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +467
* + `�dex + (* +__s +, +__c +) + +468 +__THROW + + `__asm + ("�dex"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +469
+__cڡ + * + `�dex + (__cڡ * +__s +, +__c +) + +470 +__THROW + + `__asm + ("�dex"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +472 #i� +def�ed + +__OPTIMIZE__ + && !def�ed +__CORRECT_ISO_CPP_STRINGS_H_PROTO + + +473 +__ex��_�ways_�l�e + * + +474 + `�dex + (* +__s +, +__c +� +__THROW + + +476 + `__bu�t�_�dex + ( +__s +, +__c +); + +479 +__ex��_�ways_�l�e + +__cڡ + * + +480 + `�dex + ( +__cڡ + * +__s +, +__c +� +__THROW + + +482 + `__bu�t�_�dex + ( +__s +, +__c +); + +485 + } +} + +487
* + $�dex + ( +__cڡ + * +__s +, +__c +) + +488 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +492 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +495
* + `r�dex + (* +__s +, +__c +) + +496 +__THROW + + `__asm + ("r�dex"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +497
+__cڡ + * + `r�dex + (__cڡ * +__s +, +__c +) + +498 +__THROW + + `__asm + ("r�dex"� +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +500 #i� +def�ed + +__OPTIMIZE__ + && !def�ed +__CORRECT_ISO_CPP_STRINGS_H_PROTO + + +501 +__ex��_�ways_�l�e + * + +502 + `r�dex + (* +__s +, +__c +� +__THROW + + +504 + `__bu�t�_r�dex + ( +__s +, +__c +); + +507 +__ex��_�ways_�l�e + +__cڡ + * + +508 + `r�dex + ( +__cڡ + * +__s +, +__c +� +__THROW + + +510 + `__bu�t�_r�dex + ( +__s +, +__c +); + +513 + } +} + +515
* + $r�dex + ( +__cڡ + * +__s +, +__c +) + +516 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)); + +521
+ $ffs + ( +__i +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +525 #ifdef +__USE_GNU + + +526
+ $ff� + ( +__l +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +527 #ifde� +__GNUC__ + + +528 +__ex�nsi�__ +
+ $ff�l + ( +__� +) + +529 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +534
+ $�r��cmp + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +) + +535 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +538
+ $����cmp + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +, +size_t + +__n +) + +539 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +542 #ifdef +__USE_GNU + + +545
+ $�r��cmp_l + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +, + +546 +__lo��_t + +__loc +) + +547 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2, 3)); + +549
+ $����cmp_l + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +, + +550 +size_t + +__n +, +__lo��_t + +__loc +) + +551 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2, 4)); + +554 #ifdef +__USE_BSD + + +557
* + $�r�p + (** +__��ri� + +__�r�gp +, + +558 +__cڡ + * +__��ri� + +__d�im +) + +559 +__THROW + + `__n�nu� + ((1, 2)); + +562 #ifdef +__USE_XOPEN2K8 + + +564
* + $�rsig�l + ( +__sig +� +__THROW +; + +567
* + $__�p�y + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +) + +568 +__THROW + + `__n�nu� + ((1, 2)); + +569
* + $�p�y + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +) + +570 +__THROW + + `__n�nu� + ((1, 2)); + +574
* + $__���y + (* +__��ri� + +__de� +, + +575 +__cڡ + * +__��ri� + +__�c +, +size_t + +__n +) + +576 +__THROW + + `__n�nu� + ((1, 2)); + +577
* + $���y + (* +__��ri� + +__de� +, + +578 +__cڡ + * +__��ri� + +__�c +, +size_t + +__n +) + +579 +__THROW + + `__n�nu� + ((1, 2)); + +582 #ifdef +__USE_GNU + + +584
+ $�rv�scmp + ( +__cڡ + * +__s1 +, __cڡ * +__s2 +) + +585 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1, 2)); + +588
* + $�r�y + (* +__�r�g +� +__THROW + + `__n�nu� + ((1)); + +591
* + $mem�ob + (* +__s +, +size_t + +__n +� +__THROW + + `__n�nu� + ((1)); + +593 #i�de� +ba��me + + +598 #ifde� +__CORRECT_ISO_CPP_STRING_H_PROTO + + +599
"C++" * + $ba��me + (* +__f��ame +) + +600 +__THROW + + `__asm + ("ba��me"� + `__n�nu� + ((1)); + +601
"C++" +__cڡ + * + $ba��me + ( +__cڡ + * +__f��ame +) + +602 +__THROW + + `__asm + ("ba��me"� + `__n�nu� + ((1)); + +604
* + $ba��me + ( +__cڡ + * +__f��ame +� +__THROW + + `__n�nu� + ((1)); + +610 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +611 #i� +def�ed + +__OPTIMIZE__ + && !def�ed +__OPTIMIZE_SIZE__ + \ + +612 && ! +def�ed + +__NO_INLINE__ + && !def�ed +__�lu�lus + + +632 + ~<b�s/�r�g.h +> + +635 + ~<b�s/�r�g2.h +> + +638 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__ex��_�ways_�l�e + + +640 + ~<b�s/�r�g3.h +> + +644 +__END_DECLS + + + @/usr/include/bits/huge_val.h + +22 #i�de� +_MATH_H + + +28 #i� +__GNUC_PREREQ +(3,3) + +29 + #HUGE_VAL + ( + `__bu�t�_huge_v� +()) + + ) + +30 #�i� +__GNUC_PREREQ +(2,96) + +31 + #HUGE_VAL + ( +__ex�nsi�__ + 0x1.0 +p2047 +) + + ) + +32 #�i� +def�ed + +__GNUC__ + + +34 + #HUGE_VAL + \ + +35 ( +__ex�nsi�__ + \ + +36 ((uni� { +__l + + `__��ibu�__ +(( + `__mode__ +( +__DI__ +))); +__d +; }) \ + +37 { +__l +: 0x7ff0000000000000ULL }). +__d +) + + ) + +41 + ~<�d�n.h +> + +43 uni� { + m__c +[8]; + m__d +; } + t__huge_v�_t +; + +45 #i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +46 + #__HUGE_VAL_by�s + { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 } + + ) + +48 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +49 + #__HUGE_VAL_by�s + { 0, 0, 0, 0, 0, 0, 0xf0, 0x7�} + + ) + +52 +__huge_v�_t + + g__huge_v� + = { +__HUGE_VAL_by�s + }; + +53 + #HUGE_VAL + ( +__huge_v� +. +__d +) + + ) + + @/usr/include/bits/huge_valf.h + +22 #i�de� +_MATH_H + + +28 #i� +__GNUC_PREREQ +(3,3) + +29 + #HUGE_VALF + ( + `__bu�t�_huge_v�f +()) + + ) + +30 #�i� +__GNUC_PREREQ +(2,96) + +31 + #HUGE_VALF + ( +__ex�nsi�__ + 0x1.0 +p255f +) + + ) + +32 #�i� +def�ed + +__GNUC__ + + +34 + #HUGE_VALF + \ + +35 ( +__ex�nsi�__ + \ + +36 ((uni� { +__l + + `__��ibu�__ +(( + `__mode__ +( +__SI__ +))); +__d +; }) \ + +37 { +__l +: 0x7f800000UL }). +__d +) + + ) + +41 uni� { + m__c +[4]; + m__f +; } + t__huge_v�f_t +; + +43 #i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +44 + #__HUGE_VALF_by�s + { 0x7f, 0x80, 0, 0 } + + ) + +46 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +47 + #__HUGE_VALF_by�s + { 0, 0, 0x80, 0x7�} + + ) + +50 +__huge_v�f_t + + g__huge_v�f + = { +__HUGE_VALF_by�s + }; + +51 + #HUGE_VALF + ( +__huge_v�f +. +__f +) + + ) + + @/usr/include/bits/huge_vall.h + +21 #i�de� +_MATH_H + + +25 #i� +__GNUC_PREREQ +(3,3) + +26 + #HUGE_VALL + ( + `__bu�t�_huge_v�l +()) + + ) + +28 + #HUGE_VALL + ((� +HUGE_VAL +) + + ) + + @/usr/include/bits/inf.h + +20 #i�de� +_MATH_H + + +26 #i� +__GNUC_PREREQ +(3,3) + +27 + #INFINITY + ( + `__bu�t�_�ff +()) + + ) + +29 + #INFINITY + +HUGE_VALF + + + ) + + @/usr/include/bits/mathcalls.h + +46 #i�de� +_MATH_H + + +53 +_Mdoub�_BEGIN_NAMESPACE + + +55 +__MATHCALL + ( +acos +,, ( +_Mdoub�_ + +__x +)); + +57 +__MATHCALL + ( +as� +,, ( +_Mdoub�_ + +__x +)); + +59 +__MATHCALL + ( +�� +,, ( +_Mdoub�_ + +__x +)); + +61 +__MATHCALL + ( +��2 +,, ( +_Mdoub�_ + +__y +, _Mdoub�_ +__x +)); + +64 +__MATHCALL + ( +cos +,, ( +_Mdoub�_ + +__x +)); + +66 +__MATHCALL + ( +s� +,, ( +_Mdoub�_ + +__x +)); + +68 +__MATHCALL + ( +�n +,, ( +_Mdoub�_ + +__x +)); + +73 +__MATHCALL + ( +cosh +,, ( +_Mdoub�_ + +__x +)); + +75 +__MATHCALL + ( +s�h +,, ( +_Mdoub�_ + +__x +)); + +77 +__MATHCALL + ( +�nh +,, ( +_Mdoub�_ + +__x +)); + +78 + g_Mdoub�_END_NAMESPACE + + +80 #ifde� +__USE_GNU + + +82 +__MATHDECL + (, +s�cos +,, + +83 ( +_Mdoub�_ + +__x +, _Mdoub�_ * +__s�x +, _Mdoub�_ * +__cosx +)); + +86 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_ISOC99 + + +87 +__BEGIN_NAMESPACE_C99 + + +89 +__MATHCALL + ( +acosh +,, ( +_Mdoub�_ + +__x +)); + +91 +__MATHCALL + ( +as�h +,, ( +_Mdoub�_ + +__x +)); + +93 +__MATHCALL + ( +��h +,, ( +_Mdoub�_ + +__x +)); + +94 + g__END_NAMESPACE_C99 + + +99 +_Mdoub�_BEGIN_NAMESPACE + + +101 +__MATHCALL + ( +exp +,, ( +_Mdoub�_ + +__x +)); + +104 +__MATHCALL + ( +�exp +,, ( +_Mdoub�_ + +__x +, * +__expڒt +)); + +107 +__MATHCALL + ( +ldexp +,, ( +_Mdoub�_ + +__x +, +__expڒt +)); + +110 +__MATHCALL + ( +log +,, ( +_Mdoub�_ + +__x +)); + +113 +__MATHCALL + ( +log10 +,, ( +_Mdoub�_ + +__x +)); + +116 +__MATHCALL + ( +modf +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ * +__�� +)); + +117 + g_Mdoub�_END_NAMESPACE + + +119 #ifde� +__USE_GNU + + +121 +__MATHCALL + ( +exp10 +,, ( +_Mdoub�_ + +__x +)); + +123 +__MATHCALL + ( +pow10 +,, ( +_Mdoub�_ + +__x +)); + +126 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_ISOC99 + + +127 +__BEGIN_NAMESPACE_C99 + + +129 +__MATHCALL + ( +expm1 +,, ( +_Mdoub�_ + +__x +)); + +132 +__MATHCALL + ( +log1p +,, ( +_Mdoub�_ + +__x +)); + +135 +__MATHCALL + ( +logb +,, ( +_Mdoub�_ + +__x +)); + +136 + g__END_NAMESPACE_C99 + + +139 #ifde� +__USE_ISOC99 + + +140 +__BEGIN_NAMESPACE_C99 + + +142 +__MATHCALL + ( +exp2 +,, ( +_Mdoub�_ + +__x +)); + +145 +__MATHCALL + ( +log2 +,, ( +_Mdoub�_ + +__x +)); + +146 + g__END_NAMESPACE_C99 + + +152 +_Mdoub�_BEGIN_NAMESPACE + + +154 +__MATHCALL + ( +pow +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +)); + +157 +__MATHCALL + ( +sq� +,, ( +_Mdoub�_ + +__x +)); + +158 + g_Mdoub�_END_NAMESPACE + + +160 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN + || def�ed +__USE_ISOC99 + + +161 +__BEGIN_NAMESPACE_C99 + + +163 +__MATHCALL + ( +hyp� +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +)); + +164 + g__END_NAMESPACE_C99 + + +167 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_ISOC99 + + +168 +__BEGIN_NAMESPACE_C99 + + +170 +__MATHCALL + ( +cb� +,, ( +_Mdoub�_ + +__x +)); + +171 + g__END_NAMESPACE_C99 + + +177 +_Mdoub�_BEGIN_NAMESPACE + + +179 +__MATHCALLX + ( +�� +,, ( +_Mdoub�_ + +__x +), ( +__cڡ__ +)); + +182 +__MATHCALLX + ( +�bs +,, ( +_Mdoub�_ + +__x +), ( +__cڡ__ +)); + +185 +__MATHCALLX + ( +�o� +,, ( +_Mdoub�_ + +__x +), ( +__cڡ__ +)); + +188 +__MATHCALL + ( +fmod +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +)); + +193 +__MATHDECL_1 + (, +__is�f +,, ( +_Mdoub�_ + +__v�ue +)� +__��ibu�__ + (( +__cڡ__ +)); + +196 +__MATHDECL_1 + (, +__f��e +,, ( +_Mdoub�_ + +__v�ue +)� +__��ibu�__ + (( +__cڡ__ +)); + +197 + g_Mdoub�_END_NAMESPACE + + +199 #ifde� +__USE_MISC + + +202 +__MATHDECL_1 + (, +is�f +,, ( +_Mdoub�_ + +__v�ue +)� +__��ibu�__ + (( +__cڡ__ +)); + +205 +__MATHDECL_1 + (, +f��e +,, ( +_Mdoub�_ + +__v�ue +)� +__��ibu�__ + (( +__cڡ__ +)); + +208 +__MATHCALL + ( +d�m +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +)); + +212 +__MATHCALL + ( +signifi�nd +,, ( +_Mdoub�_ + +__x +)); + +215 #i� +def�ed + +__USE_MISC + || def�ed +__USE_ISOC99 + + +216 +__BEGIN_NAMESPACE_C99 + + +218 +__MATHCALLX + ( +c�ysign +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +), ( +__cڡ__ +)); + +219 + g__END_NAMESPACE_C99 + + +222 #ifde� +__USE_ISOC99 + + +223 +__BEGIN_NAMESPACE_C99 + + +225 +__MATHCALLX + ( +�n +,, ( +__cڡ + * +__�gb +), ( +__cڡ__ +)); + +226 + g__END_NAMESPACE_C99 + + +231 +__MATHDECL_1 + (, +__i�� +,, ( +_Mdoub�_ + +__v�ue +)� +__��ibu�__ + (( +__cڡ__ +)); + +233 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN + + +235 +__MATHDECL_1 + (, +i�� +,, ( +_Mdoub�_ + +__v�ue +)� +__��ibu�__ + (( +__cڡ__ +)); + +238 +__MATHCALL + ( +j0 +,, ( +_Mdoub�_ +)); + +239 +__MATHCALL + ( +j1 +,, ( +_Mdoub�_ +)); + +240 +__MATHCALL + ( +jn +,, (, +_Mdoub�_ +)); + +241 +__MATHCALL + ( +y0 +,, ( +_Mdoub�_ +)); + +242 +__MATHCALL + ( +y1 +,, ( +_Mdoub�_ +)); + +243 +__MATHCALL + ( +yn +,, (, +_Mdoub�_ +)); + +247 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN + || def�ed +__USE_ISOC99 + + +248 +__BEGIN_NAMESPACE_C99 + + +250 +__MATHCALL + ( +�f +,, ( +_Mdoub�_ +)); + +251 +__MATHCALL + ( +�fc +,, ( +_Mdoub�_ +)); + +252 +__MATHCALL + ( +lgamma +,, ( +_Mdoub�_ +)); + +253 + g__END_NAMESPACE_C99 + + +256 #ifde� +__USE_ISOC99 + + +257 +__BEGIN_NAMESPACE_C99 + + +259 +__MATHCALL + ( +tgamma +,, ( +_Mdoub�_ +)); + +260 + g__END_NAMESPACE_C99 + + +263 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN + + +265 +__MATHCALL + ( +gamma +,, ( +_Mdoub�_ +)); + +268 #ifde� +__USE_MISC + + +272 +__MATHCALL + ( +lgamma +, +_r +, ( +_Mdoub�_ +, * +__signgamp +)); + +276 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_ISOC99 + + +277 +__BEGIN_NAMESPACE_C99 + + +280 +__MATHCALL + ( +r�t +,, ( +_Mdoub�_ + +__x +)); + +283 +__MATHCALLX + ( +�x�� +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +), ( +__cڡ__ +)); + +284 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__LDBL_COMPAT + + +285 +__MATHCALLX + ( +�x�ow�d +,, ( +_Mdoub�_ + +__x +, +__y +), ( +__cڡ__ +)); + +289 +__MATHCALL + ( +�ma�d� +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +)); + +291 #i� +def�ed + +__USE_MISC + || def�ed +__USE_ISOC99 + + +293 +__MATHCALL + ( +s�lbn +,, ( +_Mdoub�_ + +__x +, +__n +)); + +297 +__MATHDECL + (, +�ogb +,, ( +_Mdoub�_ + +__x +)); + +300 #ifde� +__USE_ISOC99 + + +302 +__MATHCALL + ( +s�lb� +,, ( +_Mdoub�_ + +__x +, +__n +)); + +306 +__MATHCALL + ( +ìby�t +,, ( +_Mdoub�_ + +__x +)); + +310 +__MATHCALLX + ( +round +,, ( +_Mdoub�_ + +__x +), ( +__cڡ__ +)); + +314 +__MATHCALLX + ( +�unc +,, ( +_Mdoub�_ + +__x +), ( +__cڡ__ +)); + +319 +__MATHCALL + ( +�mquo +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +, * +__quo +)); + +326 +__MATHDECL + (, +̚t +,, ( +_Mdoub�_ + +__x +)); + +327 +__MATHDECL + (, +�r�t +,, ( +_Mdoub�_ + +__x +)); + +331 +__MATHDECL + (, +�ound +,, ( +_Mdoub�_ + +__x +)); + +332 +__MATHDECL + (, +�round +,, ( +_Mdoub�_ + +__x +)); + +336 +__MATHCALL + ( +fdim +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +)); + +339 +__MATHCALL + ( +fmax +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +)); + +342 +__MATHCALL + ( +fm� +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +)); + +346 +__MATHDECL_1 + (, +__��assify +,, ( +_Mdoub�_ + +__v�ue +)) + +347 +__��ibu�__ + (( +__cڡ__ +)); + +350 +__MATHDECL_1 + (, +__signb� +,, ( +_Mdoub�_ + +__v�ue +)) + +351 +__��ibu�__ + (( +__cڡ__ +)); + +355 +__MATHCALL + ( +fma +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__y +, _Mdoub�_ +__z +)); + +358 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_ISOC99 + + +359 + g__END_NAMESPACE_C99 + + +362 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN_EXTENDED + + +364 +__MATHCALL + ( +s�lb +,, ( +_Mdoub�_ + +__x +, _Mdoub�_ +__n +)); + + @/usr/include/bits/mathdef.h + +19 #i�! +def�ed + +_MATH_H + && !def�ed +_COMPLEX_H + + +23 #i� +def�ed + +__USE_ISOC99 + && def�ed +_MATH_H + && !def�ed +_MATH_H_MATHDEF + + +24 + #_MATH_H_MATHDEF + 1 + + ) + +26 + ~<b�s/w�dsize.h +> + +28 #i� +__WORDSIZE + =�64 || ( +def�ed + +__FLT_EVAL_METHOD__ + && __FLT_EVAL_METHOD__ == 0) + +31 + t��t_t +; + +32 + tdoub�_t +; + +38 + t��t_t +; + +40 + tdoub�_t +; + +45 + #FP_ILOGB0 + (-2147483647 - 1) + + ) + +46 + #FP_ILOGBNAN + (-2147483647 - 1) + + ) + + @/usr/include/bits/mathinline.h + +21 #i�de� +_MATH_H + + +25 + ~<b�s/w�dsize.h +> + +27 #i�de� +__ex��_�l�e + + +28 + #__MATH_INLINE + +__�l�e + + + ) + +30 + #__MATH_INLINE + +__ex��_�l�e + + + ) + +34 #i� +def�ed + +__USE_ISOC99 + && def�ed +__GNUC__ + && __GNUC__ >= 2 + +37 +__MATH_INLINE + + +38 +__NTH + ( + $__signb�f + ( +__x +)) + +40 #i� +__WORDSIZE + == 32 + +41 +__ex�nsi�__ + uni� { +__f +; +__i +; } +__u + = { __f: +__x + }; + +42 +__u +. +__i + < 0; + +44 +__m +; + +45 + `__asm + ("pmovmskb %1, %0" : "�" ( +__m +�: "x" ( +__x +)); + +46 +__m + & 0x8; + +48 + } +} + +49 +__MATH_INLINE + + +50 +__NTH + ( + $__signb� + ( +__x +)) + +52 #i� +__WORDSIZE + == 32 + +53 +__ex�nsi�__ + uni� { +__d +; +__i +[2]; } +__u + = { __d: +__x + }; + +54 +__u +. +__i +[1] < 0; + +56 +__m +; + +57 + `__asm + ("pmovmskb %1, %0" : "�" ( +__m +�: "x" ( +__x +)); + +58 +__m + & 0x80; + +60 + } +} + +61 +__MATH_INLINE + + +62 +__NTH + ( + $__signb�l + ( +__x +)) + +64 +__ex�nsi�__ + uni� { +__l +; +__i +[3]; } +__u + = { __l: +__x + }; + +65 ( +__u +. +__i +[2] & 0x8000) != 0; + +66 + } +} + + @/usr/include/bits/nan.h + +20 #i�de� +_MATH_H + + +27 #i� +__GNUC_PREREQ +(3,3) + +29 + #NAN + ( + `__bu�t�_�nf + ("")) + + ) + +31 #�i� +def�ed + +__GNUC__ + + +33 + #NAN + \ + +34 ( +__ex�nsi�__ + \ + +35 ((uni� { +__l + + `__��ibu�__ + (( + `__mode__ + ( +__SI__ +))); +__d +; }) \ + +36 { +__l +: 0x7fc00000UL }). +__d +) + + ) + +40 + ~<�d�n.h +> + +42 #i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +43 + #__�n_by�s + { 0x7f, 0xc0, 0, 0 } + + ) + +45 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +46 + #__�n_by�s + { 0, 0, 0xc0, 0x7�} + + ) + +49 uni� { + m__c +[4]; + m__d +; } +__�n_uni� + + +50 + g__��ibu�_u�d__ + = { +__�n_by�s + }; + +51 + #NAN + ( +__�n_uni� +. +__d +) + + ) + + @/usr/include/bits/stdio-ldbl.h + +20 #i�de� +_STDIO_H + + +24 +__BEGIN_NAMESPACE_STD + + +25 + $__LDBL_REDIR_DECL + ( +�r�tf +) + +26 + $__LDBL_REDIR_DECL + ( +��tf +) + +27 + $__LDBL_REDIR_DECL + ( +�r�tf +) + +28 + $__LDBL_REDIR_DECL + ( +v�r�tf +) + +29 + $__LDBL_REDIR_DECL + ( +v��tf +) + +30 + $__LDBL_REDIR_DECL + ( +v�r�tf +) + +31 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__USE_GNU + \ + +32 && ! +def�ed + +__REDIRECT + \ + +33 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +34 + $__LDBL_REDIR1_DECL + ( +fs�nf +, +__�dbl___isoc99_fs�nf +) + +35 + $__LDBL_REDIR1_DECL + ( +s�nf +, +__�dbl___isoc99_s�nf +) + +36 + $__LDBL_REDIR1_DECL + ( +ss�nf +, +__�dbl___isoc99_ss�nf +) + +38 + $__LDBL_REDIR_DECL + ( +fs�nf +) + +39 + $__LDBL_REDIR_DECL + ( +s�nf +) + +40 + $__LDBL_REDIR_DECL + ( +ss�nf +) + +42 +__END_NAMESPACE_STD + + +44 #i� +def�ed + +__USE_BSD + || def�ed +__USE_ISOC99 + || def�ed +__USE_UNIX98 + + +45 +__BEGIN_NAMESPACE_C99 + + +46 + $__LDBL_REDIR_DECL + ( +���tf +) + +47 + $__LDBL_REDIR_DECL + ( +v���tf +) + +48 +__END_NAMESPACE_C99 + + +51 #ifdef +__USE_ISOC99 + + +52 +__BEGIN_NAMESPACE_C99 + + +53 #i�! +def�ed + +__USE_GNU + && !def�ed +__REDIRECT + \ + +54 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +55 + $__LDBL_REDIR1_DECL + ( +vfs�nf +, +__�dbl___isoc99_vfs�nf +) + +56 + $__LDBL_REDIR1_DECL + ( +vs�nf +, +__�dbl___isoc99_vs�nf +) + +57 + $__LDBL_REDIR1_DECL + ( +vss�nf +, +__�dbl___isoc99_vss�nf +) + +59 + $__LDBL_REDIR_DECL + ( +vfs�nf +) + +60 + $__LDBL_REDIR_DECL + ( +vss�nf +) + +61 + $__LDBL_REDIR_DECL + ( +vs�nf +) + +63 +__END_NAMESPACE_C99 + + +66 #ifde� +__USE_GNU + + +67 + $__LDBL_REDIR_DECL + ( +vd��tf +) + +68 + $__LDBL_REDIR_DECL + ( +d��tf +) + +69 + $__LDBL_REDIR_DECL + ( +va�r�tf +) + +70 + $__LDBL_REDIR_DECL + ( +__a�r�tf +) + +71 + $__LDBL_REDIR_DECL + ( +a�r�tf +) + +72 + $__LDBL_REDIR_DECL + ( +ob�ack_��tf +) + +73 + $__LDBL_REDIR_DECL + ( +ob�ack_v��tf +) + +76 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__ex��_�ways_�l�e + + +77 + $__LDBL_REDIR_DECL + ( +__�r�tf_chk +) + +78 + $__LDBL_REDIR_DECL + ( +__v�r�tf_chk +) + +79 #i� +def�ed + +__USE_BSD + || def�ed +__USE_ISOC99 + || def�ed +__USE_UNIX98 + + +80 + $__LDBL_REDIR_DECL + ( +__���tf_chk +) + +81 + $__LDBL_REDIR_DECL + ( +__v���tf_chk +) + +83 #i� +__USE_FORTIFY_LEVEL + > 1 + +84 + $__LDBL_REDIR_DECL + ( +__�r�tf_chk +) + +85 + $__LDBL_REDIR_DECL + ( +__��tf_chk +) + +86 + $__LDBL_REDIR_DECL + ( +__v�r�tf_chk +) + +87 + $__LDBL_REDIR_DECL + ( +__v��tf_chk +) + +88 #ifde� +__USE_GNU + + +89 + $__LDBL_REDIR_DECL + ( +__a�r�tf_chk +) + +90 + $__LDBL_REDIR_DECL + ( +__va�r�tf_chk +) + +91 + $__LDBL_REDIR_DECL + ( +__d��tf_chk +) + +92 + $__LDBL_REDIR_DECL + ( +__vd��tf_chk +) + +93 + $__LDBL_REDIR_DECL + ( +__ob�ack_��tf_chk +) + +94 + $__LDBL_REDIR_DECL + ( +__ob�ack_v��tf_chk +) + + @/usr/include/bits/stdio.h + +20 #i�de� +_STDIO_H + + +24 #i�de� +__ex��_�l�e + + +25 + #__STDIO_INLINE + +�l�e + + + ) + +27 + #__STDIO_INLINE + +__ex��_�l�e + + + ) + +31 #ifde� +__USE_EXTERN_INLINES + + +34 #i�!( +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__ex��_�ways_�l�e +) + +36 +__STDIO_INLINE + + +37 + $v��tf + ( +__cڡ + * +__��ri� + +__fmt +, +_G_va_li� + +__�g +) + +39 + `v�r�tf + ( +�dout +, +__fmt +, +__�g +); + +40 + } +} + +44 +__STDIO_INLINE + + +45 + $g�ch� + () + +47 + `_IO_g�c + ( +�d� +); + +48 + } +} + +51 #ifde� +__USE_MISC + + +53 +__STDIO_INLINE + + +54 + $fg�c_u�ocked + ( +FILE + * +__� +) + +56 + `_IO_g�c_u�ocked + ( +__� +); + +57 + } +} + +61 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +63 +__STDIO_INLINE + + +64 + $g�c_u�ocked + ( +FILE + * +__� +) + +66 + `_IO_g�c_u�ocked + ( +__� +); + +67 + } +} + +70 +__STDIO_INLINE + + +71 + $g�ch�_u�ocked + () + +73 + `_IO_g�c_u�ocked + ( +�d� +); + +74 + } +} + +79 +__STDIO_INLINE + + +80 + $putch� + ( +__c +) + +82 + `_IO_putc + ( +__c +, +�dout +); + +83 + } +} + +86 #ifde� +__USE_MISC + + +88 +__STDIO_INLINE + + +89 + $�utc_u�ocked + ( +__c +, +FILE + * +__��am +) + +91 + `_IO_putc_u�ocked + ( +__c +, +__��am +); + +92 + } +} + +96 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +98 +__STDIO_INLINE + + +99 + $putc_u�ocked + ( +__c +, +FILE + * +__��am +) + +101 + `_IO_putc_u�ocked + ( +__c +, +__��am +); + +102 + } +} + +105 +__STDIO_INLINE + + +106 + $putch�_u�ocked + ( +__c +) + +108 + `_IO_putc_u�ocked + ( +__c +, +�dout +); + +109 + } +} + +113 #ifdef +__USE_GNU + + +115 +__STDIO_INLINE + +_IO_ssize_t + + +116 + $g�l�e + (** +__l��� +, +size_t + * +__n +, +FILE + * +__��am +) + +118 + `__g�d�im + ( +__l��� +, +__n +, '\n', +__��am +); + +119 + } +} + +123 #ifde� +__USE_MISC + + +125 +__STDIO_INLINE + + +126 +__NTH + ( + $�of_u�ocked + ( +FILE + * +__��am +)) + +128 + `_IO_�of_u�ocked + ( +__��am +); + +129 + } +} + +132 +__STDIO_INLINE + + +133 +__NTH + ( + $��_u�ocked + ( +FILE + * +__��am +)) + +135 + `_IO_��_u�ocked + ( +__��am +); + +136 + } +} + +142 #i� +def�ed + +__USE_MISC + && def�ed +__GNUC__ + && def�ed +__OPTIMIZE__ + \ + +143 && ! +def�ed + + g__�lu�lus + + +145 + #�d_u�ocked +( +�r +, +size +, +n +, +��am +) \ + +146 ( + `__ex�nsi�__ + (( + `__bu�t�_cڡ�t_p + ( +size +�&& __bu�t�_cڡ�t_�( +n +) \ + +147 && ( +size_t +�( +size +�* (size_t�( +n +) <= 8 \ + +148 && ( +size_t +�( +size +) != 0) \ + +149 ? ({ * +__�r + = (*�( +�r +); \ + +150 +FILE + * +__��am + = ( +��am +); \ + +151 +size_t + +__�t +; \ + +152 +__�t + = ( +size_t +�( +size +�* (size_t�( +n +); \ + +153 +__�t + > 0; --__cnt) \ + +155 +__c + = + `_IO_g�c_u�ocked + ( +__��am +); \ + +156 i�( +__c + =� +EOF +) \ + +158 * +__�r +++ = +__c +; \ + +160 (( +size_t +�( +size +�* (size_t�( +n +�- +__�t +) \ + +161 / ( +size_t +�( +size +); }) \ + +162 : ((( + `__bu�t�_cڡ�t_p + ( +size +�&& ( +size_t +) (size) == 0) \ + +163 || ( + `__bu�t�_cڡ�t_p + ( +n +�&& ( +size_t +) (n) == 0)) \ + +165 ? ((�( +�r +), (�( +��am +), (�( +size +), \ + +166 (�( +n +), ( +size_t +) 0) \ + +167 : + `�d_u�ocked + ( +�r +, +size +, +n +, +��am +)))) + + ) + +169 + #fwr�e_u�ocked +( +�r +, +size +, +n +, +��am +) \ + +170 ( + `__ex�nsi�__ + (( + `__bu�t�_cڡ�t_p + ( +size +�&& __bu�t�_cڡ�t_�( +n +) \ + +171 && ( +size_t +�( +size +�* (size_t�( +n +) <= 8 \ + +172 && ( +size_t +�( +size +) != 0) \ + +173 ? ({ cڡ * +__�r + = (cڡ *�( +�r +); \ + +174 +FILE + * +__��am + = ( +��am +); \ + +175 +size_t + +__�t +; \ + +176 +__�t + = ( +size_t +�( +size +�* (size_t�( +n +); \ + +177 +__�t + > 0; --__cnt) \ + +178 i�( + `_IO_putc_u�ocked + (* +__�r +++, +__��am +�=� +EOF +) \ + +180 (( +size_t +�( +size +�* (size_t�( +n +�- +__�t +) \ + +181 / ( +size_t +�( +size +); }) \ + +182 : ((( + `__bu�t�_cڡ�t_p + ( +size +�&& ( +size_t +) (size) == 0) \ + +183 || ( + `__bu�t�_cڡ�t_p + ( +n +�&& ( +size_t +) (n) == 0)) \ + +185 ? ((�( +�r +), (�( +��am +), (�( +size +), \ + +186 (�( +n +), ( +size_t +) 0) \ + +187 : + `fwr�e_u�ocked + ( +�r +, +size +, +n +, +��am +)))) + + ) + +191 #unde� +__STDIO_INLINE + + + @/usr/include/bits/stdio2.h + +20 #i�de� +_STDIO_H + + +24
+ $__�r�tf_chk + (* +__��ri� + +__s +, +__�ag +, +size_t + +__�� +, + +25 +__cڡ + * +__��ri� + +__f�m� +, ...� +__THROW +; + +26
+ $__v�r�tf_chk + (* +__��ri� + +__s +, +__�ag +, +size_t + +__�� +, + +27 +__cڡ + * +__��ri� + +__f�m� +, + +28 +_G_va_li� + +__� +� +__THROW +; + +30 #ifde� +__va_�g_�ck + + +31 +__ex��_�ways_�l�e + + +32 + `__NTH + ( + $�r�tf + (* +__��ri� + +__s +, +__cڡ + *__��ri� +__fmt +, ...)) + +34 + `__bu�t�___�r�tf_chk + ( +__s +, +__USE_FORTIFY_LEVEL + - 1, + +35 + `__bos + ( +__s +), +__fmt +, + `__va_�g_�ck + ()); + +36 + } +} + +37 #�i�! +def�ed + +__�lu�lus + + +38 + #�r�tf +( +�r +, ...) \ + +39 + `__bu�t�___�r�tf_chk + ( +�r +, +__USE_FORTIFY_LEVEL + - 1, + `__bos + (str), \ + +40 +__VA_ARGS__ +) + + ) + +43 +__ex��_�ways_�l�e + + +44 +__NTH + ( + $v�r�tf + (* +__��ri� + +__s +, +__cڡ + *__��ri� +__fmt +, + +45 +_G_va_li� + +__� +)) + +47 + `__bu�t�___v�r�tf_chk + ( +__s +, +__USE_FORTIFY_LEVEL + - 1, + +48 + `__bos + ( +__s +), +__fmt +, +__� +); + +49 + } +} + +51 #i� +def�ed + +__USE_BSD + || def�ed +__USE_ISOC99 + || def�ed +__USE_UNIX98 + + +53
+ $__���tf_chk + (* +__��ri� + +__s +, +size_t + +__n +, +__�ag +, + +54 +size_t + +__�� +, +__cڡ + * +__��ri� + +__f�m� +, + +55 ...� +__THROW +; + +56
+ $__v���tf_chk + (* +__��ri� + +__s +, +size_t + +__n +, +__�ag +, + +57 +size_t + +__�� +, +__cڡ + * +__��ri� + +__f�m� +, + +58 +_G_va_li� + +__� +� +__THROW +; + +60 #ifde� +__va_�g_�ck + + +61 +__ex��_�ways_�l�e + + +62 + `__NTH + ( + $���tf + (* +__��ri� + +__s +, +size_t + +__n +, + +63 +__cڡ + * +__��ri� + +__fmt +, ...)) + +65 + `__bu�t�___���tf_chk + ( +__s +, +__n +, +__USE_FORTIFY_LEVEL + - 1, + +66 + `__bos + ( +__s +), +__fmt +, + `__va_�g_�ck + ()); + +67 + } +} + +68 #�i�! +def�ed + +__�lu�lus + + +69 + #���tf +( +�r +, +�n +, ...) \ + +70 + `__bu�t�___���tf_chk + ( +�r +, +�n +, +__USE_FORTIFY_LEVEL + - 1, + `__bos + (str), \ + +71 +__VA_ARGS__ +) + + ) + +74 +__ex��_�ways_�l�e + + +75 +__NTH + ( + $v���tf + (* +__��ri� + +__s +, +size_t + +__n +, + +76 +__cڡ + * +__��ri� + +__fmt +, +_G_va_li� + +__� +)) + +78 + `__bu�t�___v���tf_chk + ( +__s +, +__n +, +__USE_FORTIFY_LEVEL + - 1, + +79 + `__bos + ( +__s +), +__fmt +, +__� +); + +80 + } +} + +84 #i� +__USE_FORTIFY_LEVEL + > 1 + +86
+__�r�tf_chk + ( +FILE + * +__��ri� + +__��am +, +__�ag +, + +87 +__cڡ + * +__��ri� + +__f�m� +, ...); + +88
+__��tf_chk + ( +__�ag +, +__cڡ + * +__��ri� + +__f�m� +, ...); + +89
+__v�r�tf_chk + ( +FILE + * +__��ri� + +__��am +, +__�ag +, + +90 +__cڡ + * +__��ri� + +__f�m� +, +_G_va_li� + +__� +); + +91
+__v��tf_chk + ( +__�ag +, +__cڡ + * +__��ri� + +__f�m� +, + +92 +_G_va_li� + +__� +); + +94 #ifde� +__va_�g_�ck + + +95 +__ex��_�ways_�l�e + + +96 + $�r�tf + ( +FILE + * +__��ri� + +__��am +, +__cڡ + *__��ri� +__fmt +, ...) + +98 + `__�r�tf_chk + ( +__��am +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +99 + `__va_�g_�ck + ()); + +100 + } +} + +102 +__ex��_�ways_�l�e + + +103 + $��tf + ( +__cڡ + * +__��ri� + +__fmt +, ...) + +105 + `__��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + `__va_�g_�ck + ()); + +106 + } +} + +107 #�i�! +def�ed + +__�lu�lus + + +108 + #��tf +(...) \ + +109 + `__��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +110 + #�r�tf +( +��am +, ...) \ + +111 + `__�r�tf_chk + ( +��am +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +114 +__ex��_�ways_�l�e + + +115 + $v��tf + ( +__cڡ + * +__��ri� + +__fmt +, +_G_va_li� + +__� +) + +117 #ifde� +__USE_EXTERN_INLINES + + +118 + `__v�r�tf_chk + ( +�dout +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +120 + `__v��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +122 + } +} + +124 +__ex��_�ways_�l�e + + +125 + $v�r�tf + ( +FILE + * +__��ri� + +__��am +, + +126 +__cڡ + * +__��ri� + +__fmt +, +_G_va_li� + +__� +) + +128 + `__v�r�tf_chk + ( +__��am +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +129 + } +} + +131 #ifde� +__USE_GNU + + +133
+ $__a�r�tf_chk + (** +__��ri� + +__�r +, +__�ag +, + +134 +__cڡ + * +__��ri� + +__fmt +, ...) + +135 +__THROW + + `__��ibu�__ + (( + $__f�m�__ + ( +__��tf__ +, 3, 4))� +__wur +; + +136
+ $__va�r�tf_chk + (** +__��ri� + +__�r +, +__�ag +, + +137 +__cڡ + * +__��ri� + +__fmt +, +_G_va_li� + +__�g +) + +138 +__THROW + + `__��ibu�__ + (( + $__f�m�__ + ( +__��tf__ +, 3, 0))� +__wur +; + +139
+ $__d��tf_chk + ( +__fd +, +__�ag +, +__cڡ + * +__��ri� + +__fmt +, + +140 ...� + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 4))); + +141
+ $__vd��tf_chk + ( +__fd +, +__�ag +, + +142 +__cڡ + * +__��ri� + +__fmt +, +_G_va_li� + +__�g +) + +143 + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 0))); + +144
+ $__ob�ack_��tf_chk + ( +ob�ack + * +__��ri� + +__ob�ack +, + +145 +__�ag +, +__cڡ + * +__��ri� + +__f�m� +, + +147 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 4))); + +148
+ $__ob�ack_v��tf_chk + ( +ob�ack + * +__��ri� + +__ob�ack +, + +149 +__�ag +, + +150 +__cڡ + * +__��ri� + +__f�m� +, + +151 +_G_va_li� + +__�gs +) + +152 +__THROW + + `__��ibu�__ + (( + `__f�m�__ + ( +__��tf__ +, 3, 0))); + +154 #ifde� +__va_�g_�ck + + +155 +__ex��_�ways_�l�e + + +156 + `__NTH + ( + $a�r�tf + (** +__��ri� + +__�r +, +__cڡ + *__��ri� +__fmt +, ...)) + +158 + `__a�r�tf_chk + ( +__�r +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +159 + `__va_�g_�ck + ()); + +160 + } +} + +162 +__ex��_�ways_�l�e + + +163 +__NTH + ( + $__a�r�tf + (** +__��ri� + +__�r +, +__cڡ + *__��ri� +__fmt +, + +166 + `__a�r�tf_chk + ( +__�r +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +167 + `__va_�g_�ck + ()); + +168 + } +} + +170 +__ex��_�ways_�l�e + + +171 + $d��tf + ( +__fd +, +__cڡ + * +__��ri� + +__fmt +, ...) + +173 + `__d��tf_chk + ( +__fd +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +174 + `__va_�g_�ck + ()); + +175 + } +} + +177 +__ex��_�ways_�l�e + + +178 +__NTH + ( + $ob�ack_��tf + ( +ob�ack + * +__��ri� + +__ob�ack +, + +179 +__cڡ + * +__��ri� + +__fmt +, ...)) + +181 + `__ob�ack_��tf_chk + ( +__ob�ack +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +182 + `__va_�g_�ck + ()); + +183 + } +} + +184 #�i�! +def�ed + +__�lu�lus + + +185 + #a�r�tf +( +�r +, ...) \ + +186 + `__a�r�tf_chk + ( +�r +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +187 + #__a�r�tf +( +�r +, ...) \ + +188 + `__a�r�tf_chk + ( +�r +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +189 + #d��tf +( +fd +, ...) \ + +190 + `__d��tf_chk + ( +fd +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +191 + #ob�ack_��tf +( +ob�ack +, ...) \ + +192 + `__ob�ack_��tf_chk + ( +ob�ack +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +195 +__ex��_�ways_�l�e + + +196 +__NTH + ( + $va�r�tf + (** +__��ri� + +__�r +, +__cڡ + *__��ri� +__fmt +, + +197 +_G_va_li� + +__� +)) + +199 + `__va�r�tf_chk + ( +__�r +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +200 + } +} + +202 +__ex��_�ways_�l�e + + +203 + $vd��tf + ( +__fd +, +__cڡ + * +__��ri� + +__fmt +, +_G_va_li� + +__� +) + +205 + `__vd��tf_chk + ( +__fd +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +206 + } +} + +208 +__ex��_�ways_�l�e + + +209 +__NTH + ( + $ob�ack_v��tf + ( +ob�ack + * +__��ri� + +__ob�ack +, + +210 +__cڡ + * +__��ri� + +__fmt +, +_G_va_li� + +__� +)) + +212 + `__ob�ack_v��tf_chk + ( +__ob�ack +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +213 +__� +); + +214 + } +} + +220
* + $__g�s_chk + (* +__�r +, +size_t +� +__wur +; + +221
* + `__REDIRECT + ( +__g�s_w�n +, (* +__�r +), +g�s +) + +222 +__wur + + `__w�ljr + ("please use fgets or getline instead, gets can't " + +225 +__ex��_�ways_�l�e + +__wur + * + +226 + $g�s + (* +__�r +) + +228 i�( + `__bos + ( +__�r +�!�( +size_t +) -1) + +229 + `__g�s_chk + ( +__�r +, + `__bos + (__str)); + +230 + `__g�s_w�n + ( +__�r +); + +231 + } +} + +233
* + $__fg�s_chk + (* +__��ri� + +__s +, +size_t + +__size +, +__n +, + +234 +FILE + * +__��ri� + +__��am +� +__wur +; + +235
* + `__REDIRECT + ( +__fg�s_��s +, + +236 (* +__��ri� + +__s +, +__n +, + +237 +FILE + * +__��ri� + +__��am +), +fg�s +� +__wur +; + +238
* + `__REDIRECT + ( +__fg�s_chk_w�n +, + +239 (* +__��ri� + +__s +, +size_t + +__size +, +__n +, + +240 +FILE + * +__��ri� + +__��am +), +__fg�s_chk +) + +241 +__wur + + `__w�ljr + ("fgets called with bigger size�han�ength " + +244 +__ex��_�ways_�l�e + +__wur + * + +245 + $fg�s + (* +__��ri� + +__s +, +__n +, +FILE + *__��ri� +__��am +) + +247 i�( + `__bos + ( +__s +�!�( +size_t +) -1) + +249 i�(! + `__bu�t�_cڡ�t_p + ( +__n +) || __n <= 0) + +250 + `__fg�s_chk + ( +__s +, + `__bos + (__s), +__n +, +__��am +); + +252 i�(( +size_t +� +__n + > + `__bos + ( +__s +)) + +253 + `__fg�s_chk_w�n + ( +__s +, + `__bos + (__s), +__n +, +__��am +); + +255 + `__fg�s_��s + ( +__s +, +__n +, +__��am +); + +256 + } +} + +258
+size_t + + $__�d_chk + (* +__��ri� + +__�r +, +size_t + +__��� +, + +259 +size_t + +__size +, size_� +__n +, + +260 +FILE + * +__��ri� + +__��am +� +__wur +; + +261
+size_t + + `__REDIRECT + ( +__�d_��s +, + +262 (* +__��ri� + +__�r +, +size_t + +__size +, + +263 +size_t + +__n +, +FILE + * +__��ri� + +__��am +), + +264 +�d +� +__wur +; + +265
+size_t + + `__REDIRECT + ( +__�d_chk_w�n +, + +266 (* +__��ri� + +__�r +, +size_t + +__��� +, + +267 +size_t + +__size +, size_� +__n +, + +268 +FILE + * +__��ri� + +__��am +), + +269 +__�d_chk +) + +270 +__wur + + `__w�ljr + ("fread called with bigger size *�memb�han�ength " + +273 +__ex��_�ways_�l�e + +__wur + +size_t + + +274 + $�d + (* +__��ri� + +__�r +, +size_t + +__size +, size_� +__n +, + +275 +FILE + * +__��ri� + +__��am +) + +277 i�( + `__bos0 + ( +__�r +�!�( +size_t +) -1) + +279 i�(! + `__bu�t�_cڡ�t_p + ( +__size +) + +280 || ! + `__bu�t�_cڡ�t_p + ( +__n +) + +281 || ( +__size + | +__n +�>�((( +size_t +) 1) << (8 * (size_t) / 2))) + +282 + `__�d_chk + ( +__�r +, + `__bos0 + (__�r), +__size +, +__n +, +__��am +); + +284 i�( +__size + * +__n + > + `__bos0 + ( +__�r +)) + +285 + `__�d_chk_w�n + ( +__�r +, + `__bos0 + (__�r), +__size +, +__n +, +__��am +); + +287 + `__�d_��s + ( +__�r +, +__size +, +__n +, +__��am +); + +288 + } +} + +290 #ifde� +__USE_GNU + + +291
* + $__fg�s_u�ocked_chk + (* +__��ri� + +__s +, +size_t + +__size +, + +292 +__n +, +FILE + * +__��ri� + +__��am +� +__wur +; + +293
* + `__REDIRECT + ( +__fg�s_u�ocked_��s +, + +294 (* +__��ri� + +__s +, +__n +, + +295 +FILE + * +__��ri� + +__��am +), +fg�s_u�ocked +� +__wur +; + +296
* + `__REDIRECT + ( +__fg�s_u�ocked_chk_w�n +, + +297 (* +__��ri� + +__s +, +size_t + +__size +, +__n +, + +298 +FILE + * +__��ri� + +__��am +), +__fg�s_u�ocked_chk +) + +299 +__wur + + `__w�ljr + ("fgets_unlocked called with bigger size�han�ength " + +302 +__ex��_�ways_�l�e + +__wur + * + +303 + $fg�s_u�ocked + (* +__��ri� + +__s +, +__n +, +FILE + *__��ri� +__��am +) + +305 i�( + `__bos + ( +__s +�!�( +size_t +) -1) + +307 i�(! + `__bu�t�_cڡ�t_p + ( +__n +) || __n <= 0) + +308 + `__fg�s_u�ocked_chk + ( +__s +, + `__bos + (__s), +__n +, +__��am +); + +310 i�(( +size_t +� +__n + > + `__bos + ( +__s +)) + +311 + `__fg�s_u�ocked_chk_w�n + ( +__s +, + `__bos + (__s), +__n +, +__��am +); + +313 + `__fg�s_u�ocked_��s + ( +__s +, +__n +, +__��am +); + +314 + } +} + +317 #ifde� +__USE_MISC + + +318 #unde� +�d_u�ocked + + +319
+size_t + + $__�d_u�ocked_chk + (* +__��ri� + +__�r +, +size_t + +__��� +, + +320 +size_t + +__size +, size_� +__n +, + +321 +FILE + * +__��ri� + +__��am +� +__wur +; + +322
+size_t + + `__REDIRECT + ( +__�d_u�ocked_��s +, + +323 (* +__��ri� + +__�r +, +size_t + +__size +, + +324 +size_t + +__n +, +FILE + * +__��ri� + +__��am +), + +325 +�d_u�ocked +� +__wur +; + +326
+size_t + + `__REDIRECT + ( +__�d_u�ocked_chk_w�n +, + +327 (* +__��ri� + +__�r +, +size_t + +__��� +, + +328 +size_t + +__size +, size_� +__n +, + +329 +FILE + * +__��ri� + +__��am +), + +330 +__�d_u�ocked_chk +) + +331 +__wur + + `__w�ljr + ("fread_unlocked called with bigger size *�memb�han " + +334 +__ex��_�ways_�l�e + +__wur + +size_t + + +335 + $�d_u�ocked + (* +__��ri� + +__�r +, +size_t + +__size +, size_� +__n +, + +336 +FILE + * +__��ri� + +__��am +) + +338 i�( + `__bos0 + ( +__�r +�!�( +size_t +) -1) + +340 i�(! + `__bu�t�_cڡ�t_p + ( +__size +) + +341 || ! + `__bu�t�_cڡ�t_p + ( +__n +) + +342 || ( +__size + | +__n +�>�((( +size_t +) 1) << (8 * (size_t) / 2))) + +343 + `__�d_u�ocked_chk + ( +__�r +, + `__bos0 + (__�r), +__size +, +__n +, + +344 +__��am +); + +346 i�( +__size + * +__n + > + `__bos0 + ( +__�r +)) + +347 + `__�d_u�ocked_chk_w�n + ( +__�r +, + `__bos0 + (__�r), +__size +, +__n +, + +348 +__��am +); + +351 #ifde� +__USE_EXTERN_INLINES + + +352 i�( + `__bu�t�_cڡ�t_p + ( +__size +) + +353 && + `__bu�t�_cڡ�t_p + ( +__n +) + +354 && ( +__size + | +__n +�< ((( +size_t +) 1) << (8 * (size_t) / 2)) + +355 && +__size + * +__n + <= 8) + +357 +size_t + +__�t + = +__size + * +__n +; + +358 * +__�� + = (*� +__�r +; + +359 i�( +__�t + == 0) + +362 ; +__�t + > 0; --__cnt) + +364 +__c + = + `_IO_g�c_u�ocked + ( +__��am +); + +365 i�( +__c + =� +EOF +) + +367 * +__�� +++ = +__c +; + +369 ( +__�� + - (*� +__�r +�/ +__size +; + +372 + `__�d_u�ocked_��s + ( +__�r +, +__size +, +__n +, +__��am +); + +373 + } +} + + @/usr/include/bits/stdio_lim.h + +19 #i�! +def�ed + +_STDIO_H + && !def�ed +__�ed_FOPEN_MAX + && !def�ed +__�ed_IOV_MAX + + +23 #ifde� +_STDIO_H + + +24 + #L_tm�am + 20 + + ) + +25 + #TMP_MAX + 238328 + + ) + +26 + #FILENAME_MAX + 4096 + + ) + +28 #ifde� +__USE_POSIX + + +29 + #L_��mid + 9 + + ) + +30 #i�! +def�ed + +__USE_XOPEN2K + || def�ed +__USE_GNU + + +31 + #L_cu�rid + 9 + + ) + +36 #i� +def�ed + +__�ed_FOPEN_MAX + || def�ed +_STDIO_H + + +37 #unde� +FOPEN_MAX + + +38 + #FOPEN_MAX + 16 + + ) + +41 #i� +def�ed + +__�ed_IOV_MAX + && !def�ed +IOV_MAX + + +42 + #IOV_MAX + 1024 + + ) + + @/usr/include/bits/string.h + +20 #i�de� +_STRING_H + + +26 + #_STRING_ARCH_u�lig�d + 1 + + ) + + @/usr/include/bits/string2.h + +21 #i�de� +_STRING_H + + +25 #i�! +def�ed + +__NO_STRING_INLINES + && !def�ed +__BOUNDED_POINTERS__ + + +42 #i�de� +__STRING_INLINE + + +43 #ifde� +__�lu�lus + + +44 + #__STRING_INLINE + +�l�e + + + ) + +46 + #__STRING_INLINE + +__ex��_�l�e + + + ) + +50 #i� +_STRING_ARCH_u�lig�d + + +52 + ~<�d�n.h +> + +53 + ~<b�s/ty�s.h +> + +55 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +56 + #__STRING2_SMALL_GET16 +( +�c +, +idx +) \ + +57 ((( +__cڡ + *�(__cڡ *�( +�c +))[ +idx + + 1] << 8 \ + +58 | (( +__cڡ + *�(__cڡ *�( +�c +))[ +idx +]) + + ) + +59 + #__STRING2_SMALL_GET32 +( +�c +, +idx +) \ + +60 ((((( +__cڡ + *�(__cڡ *�( +�c +))[ +idx + + 3] << 8 \ + +61 | (( +__cڡ + *�(__cڡ *�( +�c +))[ +idx + + 2]) << 8 \ + +62 | (( +__cڡ + *�(__cڡ *�( +�c +))[ +idx + + 1]) << 8 \ + +63 | (( +__cڡ + *�(__cڡ *�( +�c +))[ +idx +]) + + ) + +65 + #__STRING2_SMALL_GET16 +( +�c +, +idx +) \ + +66 ((( +__cڡ + *�(__cڡ *�( +�c +))[ +idx +] << 8 \ + +67 | (( +__cڡ + *�(__cڡ *�( +�c +))[ +idx + + 1]) + + ) + +68 + #__STRING2_SMALL_GET32 +( +�c +, +idx +) \ + +69 ((((( +__cڡ + *�(__cڡ *�( +�c +))[ +idx +] << 8 \ + +70 | (( +__cڡ + *�(__cڡ *�( +�c +))[ +idx + + 1]) << 8 \ + +71 | (( +__cڡ + *�(__cڡ *�( +�c +))[ +idx + + 2]) << 8 \ + +72 | (( +__cڡ + *�(__cڡ *�( +�c +))[ +idx + + 3]) + + ) + +77 + #__STRING2_COPY_TYPE +( +N +) \ + +78 �ru� { +__�r +[ +N +]; } \ + +79 + t__��ibu�__ + (( + t__�cked__ +)� + t__STRING2_COPY_ARR +## + tN + + + ) + +80 + t__STRING2_COPY_TYPE + (2); + +81 +__STRING2_COPY_TYPE + (3); + +82 +__STRING2_COPY_TYPE + (4); + +83 +__STRING2_COPY_TYPE + (5); + +84 +__STRING2_COPY_TYPE + (6); + +85 +__STRING2_COPY_TYPE + (7); + +86 +__STRING2_COPY_TYPE + (8); + +87 #unde� +__STRING2_COPY_TYPE + + +93 + #__�r�g2_1b�r_p +( +__x +) \ + +94 (( +size_t +)(cڡ *)(( +__x +�+ 1�- (size_t)(cڡ *)(__x�=�1) + + ) + +97 #i�! +def�ed + +_HAVE_STRING_ARCH_mem�t + + +98 #i�! +__GNUC_PREREQ + (3, 0) + +99 #i� +_STRING_ARCH_u�lig�d + + +100 + #mem�t +( +s +, +c +, +n +) \ + +101 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +n +) && (n) <= 16 \ + +102 ? (( +n +) == 1 \ + +103 ? + `__mem�t_1 + ( +s +, +c +) \ + +104 : + `__mem�t_gc + ( +s +, +c +, +n +)) \ + +105 : ( + `__bu�t�_cڡ�t_p + ( +c +) && (c) == '\0' \ + +106 ? ({ * +__s + = ( +s +); + `__bz�o + (__s, +n +); __s; }) \ + +107 : + `mem�t + ( +s +, +c +, +n +)))) + + ) + +109 + #__mem�t_1 +( +s +, +c +�({ * +__s + = (s); \ + +110 *(( +__u�t8_t + *� +__s +��(__u�t8_t� +c +; __s; }) + + ) + +112 + #__mem�t_gc +( +s +, +c +, +n +) \ + +113 ({ * +__s + = ( +s +); \ + +115 +__ui +; \ + +116 +__usi +; \ + +117 +__uc +; \ + +118 } * +__u + = +__s +; \ + +119 +__u�t8_t + +__c + = (__u�t8_t�( +c +); \ + +122 (�( +n +)) \ + +125 +__u +-> +__ui + = +__c + * 0x01010101; \ + +126 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +128 +__u +-> +__ui + = +__c + * 0x01010101; \ + +129 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +131 +__u +-> +__ui + = +__c + * 0x01010101; \ + +132 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +134 +__u +-> +__usi + = (� +__c + * 0x0101; \ + +135 +__u + = + `__ex�nsi�__ + ((*) __u + 2); \ + +136 +__u +-> +__uc + = (� +__c +; \ + +140 +__u +-> +__ui + = +__c + * 0x01010101; \ + +141 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +143 +__u +-> +__ui + = +__c + * 0x01010101; \ + +144 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +146 +__u +-> +__ui + = +__c + * 0x01010101; \ + +147 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +149 +__u +-> +__usi + = (� +__c + * 0x0101; \ + +153 +__u +-> +__ui + = +__c + * 0x01010101; \ + +154 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +156 +__u +-> +__ui + = +__c + * 0x01010101; \ + +157 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +159 +__u +-> +__ui + = +__c + * 0x01010101; \ + +160 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +162 +__u +-> +__uc + = (� +__c +; \ + +166 +__u +-> +__ui + = +__c + * 0x01010101; \ + +167 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +169 +__u +-> +__ui + = +__c + * 0x01010101; \ + +170 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +172 +__u +-> +__ui + = +__c + * 0x01010101; \ + +173 +__u + = + `__ex�nsi�__ + ((*) __u + 4); \ + +175 +__u +-> +__ui + = +__c + * 0x01010101; \ + +180 +__s +; }) + + ) + +182 + #mem�t +( +s +, +c +, +n +) \ + +183 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +) && (c) == '\0' \ + +184 ? ({ * +__s + = ( +s +); + `__bz�o + (__s, +n +); __s; }) \ + +185 : + `mem�t + ( +s +, +c +, +n +))) + + ) + +194 #i� +__GNUC_PREREQ + (2, 91) + +195 + #__bz�o +( +s +, +n +� + `__bu�t�_mem�t + (s, '\0',�) + + ) + +203 #ifde� +__USE_GNU + + +204 #i�! +def�ed + +_HAVE_STRING_ARCH_memp�y + || def�ed +_FORCE_INLINES + + +205 #i�de� +_HAVE_STRING_ARCH_memp�y + + +206 #i� +__GNUC_PREREQ + (3, 4) + +207 + #__memp�y +( +de� +, +�c +, +n +� + `__bu�t�_memp�y + (de�, src,�) + + ) + +208 #�i� +__GNUC_PREREQ + (3, 0) + +209 + #__memp�y +( +de� +, +�c +, +n +) \ + +210 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +211 && + `__�r�g2_1b�r_p + ( +�c +�&& +n + <= 8 \ + +212 ? + `__bu�t�_mem�y + ( +de� +, +�c +, +n +) + (n) \ + +213 : + `__memp�y + ( +de� +, +�c +, +n +))) + + ) + +215 + #__memp�y +( +de� +, +�c +, +n +) \ + +216 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +217 && + `__�r�g2_1b�r_p + ( +�c +�&& +n + <= 8 \ + +218 ? + `__memp�y_sm�l + ( +de� +, + `__memp�y_�gs + ( +�c +), +n +) \ + +219 : + `__memp�y + ( +de� +, +�c +, +n +))) + + ) + +223 + #memp�y +( +de� +, +�c +, +n +� + `__memp�y + (de�, src,�) + + ) + +226 #i�! +__GNUC_PREREQ + (3, 0�|| +def�ed + +_FORCE_INLINES + + +227 #i� +_STRING_ARCH_u�lig�d + + +228 #i�de� +_FORCE_INLINES + + +229 + #__memp�y_�gs +( +�c +) \ + +230 (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[2], \ + +231 (( +__cڡ + *�( +�c +))[4], ((__const *) (src))[6], \ + +232 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 0), \ + +233 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 4), \ + +234 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 0), \ + +235 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 4) + + ) + +237 +__STRING_INLINE + * +__memp�y_sm�l + (*, , , , , + +238 +__u�t16_t +, __u�t16_t, +__u�t32_t +, + +239 +__u�t32_t +, +size_t +); + +240 +__STRING_INLINE + * + +241 + $__memp�y_sm�l + (* +__de�1 +, + +242 +__�c0_1 +, +__�c2_1 +, +__�c4_1 +, +__�c6_1 +, + +243 +__u�t16_t + +__�c0_2 +, __u�t16_� +__�c4_2 +, + +244 +__u�t32_t + +__�c0_4 +, __u�t32_� +__�c4_4 +, + +245 +size_t + +__��� +) + +248 +__u�t32_t + +__ui +; + +249 +__u�t16_t + +__usi +; + +250 +__uc +; + +251 +__c +; + +252 } * +__u + = +__de�1 +; + +253 (� +__��� +) + +256 +__u +-> +__c + = +__�c0_1 +; + +257 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +260 +__u +-> +__usi + = +__�c0_2 +; + +261 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +264 +__u +-> +__usi + = +__�c0_2 +; + +265 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +266 +__u +-> +__c + = +__�c2_1 +; + +267 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +270 +__u +-> +__ui + = +__�c0_4 +; + +271 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +274 +__u +-> +__ui + = +__�c0_4 +; + +275 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +276 +__u +-> +__c + = +__�c4_1 +; + +277 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +280 +__u +-> +__ui + = +__�c0_4 +; + +281 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +282 +__u +-> +__usi + = +__�c4_2 +; + +283 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +286 +__u +-> +__ui + = +__�c0_4 +; + +287 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +288 +__u +-> +__usi + = +__�c4_2 +; + +289 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +290 +__u +-> +__c + = +__�c6_1 +; + +291 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +294 +__u +-> +__ui + = +__�c0_4 +; + +295 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +296 +__u +-> +__ui + = +__�c4_4 +; + +297 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +300 (*� +__u +; + +301 + } +} + +303 #i�de� +_FORCE_INLINES + + +304 + #__memp�y_�gs +( +�c +) \ + +305 (( +__cڡ + *�( +�c +))[0], \ + +306 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR2 +) \ + +307 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1] } }), \ + +308 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR3 +) \ + +309 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +310 (( +__cڡ + *�( +�c +))[2] } }), \ + +311 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR4 +) \ + +312 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +313 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3] } }), \ + +314 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR5 +) \ + +315 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +316 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +317 (( +__cڡ + *�( +�c +))[4] } }), \ + +318 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR6 +) \ + +319 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +320 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +321 (( +__cڡ + *�( +�c +))[4], ((__const *) (src))[5] } }), \ + +322 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR7 +) \ + +323 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +324 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +325 (( +__cڡ + *�( +�c +))[4], ((__const *) (src))[5], \ + +326 (( +__cڡ + *�( +�c +))[6] } }), \ + +327 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR8 +) \ + +328 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +329 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +330 (( +__cڡ + *�( +�c +))[4], ((__const *) (src))[5], \ + +331 (( +__cڡ + *�( +�c +))[6], ((__cڡ *�(�c))[7] } }) + + ) + +333 +__STRING_INLINE + * +__memp�y_sm�l + (*, , +__STRING2_COPY_ARR2 +, + +334 +__STRING2_COPY_ARR3 +, + +335 +__STRING2_COPY_ARR4 +, + +336 +__STRING2_COPY_ARR5 +, + +337 +__STRING2_COPY_ARR6 +, + +338 +__STRING2_COPY_ARR7 +, + +339 +__STRING2_COPY_ARR8 +, +size_t +); + +340 +__STRING_INLINE + * + +341 + $__memp�y_sm�l + (* +__de� +, +__�c1 +, + +342 +__STRING2_COPY_ARR2 + +__�c2 +, +__STRING2_COPY_ARR3 + +__�c3 +, + +343 +__STRING2_COPY_ARR4 + +__�c4 +, +__STRING2_COPY_ARR5 + +__�c5 +, + +344 +__STRING2_COPY_ARR6 + +__�c6 +, +__STRING2_COPY_ARR7 + +__�c7 +, + +345 +__STRING2_COPY_ARR8 + +__�c8 +, +size_t + +__��� +) + +348 +__c +; + +349 +__STRING2_COPY_ARR2 + +__s�2 +; + +350 +__STRING2_COPY_ARR3 + +__s�3 +; + +351 +__STRING2_COPY_ARR4 + +__s�4 +; + +352 +__STRING2_COPY_ARR5 + +__s�5 +; + +353 +__STRING2_COPY_ARR6 + +__s�6 +; + +354 +__STRING2_COPY_ARR7 + +__s�7 +; + +355 +__STRING2_COPY_ARR8 + +__s�8 +; + +356 } * +__u + = +__de� +; + +357 (� +__��� +) + +360 +__u +-> +__c + = +__�c1 +; + +363 +__ex�nsi�__ + +__u +-> +__s�2 + = +__�c2 +; + +366 +__ex�nsi�__ + +__u +-> +__s�3 + = +__�c3 +; + +369 +__ex�nsi�__ + +__u +-> +__s�4 + = +__�c4 +; + +372 +__ex�nsi�__ + +__u +-> +__s�5 + = +__�c5 +; + +375 +__ex�nsi�__ + +__u +-> +__s�6 + = +__�c6 +; + +378 +__ex�nsi�__ + +__u +-> +__s�7 + = +__�c7 +; + +381 +__ex�nsi�__ + +__u +-> +__s�8 + = +__�c8 +; + +384 + `__ex�nsi�__ + ((*� +__u + + +__��� +); + +385 + } +} + +393 #i�de� +_HAVE_STRING_ARCH_�rchr + + +394
* +__�wmemchr + (cڡ * +__s +, +__c +); + +395 #i� +__GNUC_PREREQ + (3, 2) + +396 + #�rchr +( +s +, +c +) \ + +397 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +�&& !__bu�t�_cڡ�t_�( +s +) \ + +398 && ( +c +) == '\0' \ + +399 ? (*� + `__�wmemchr + ( +s +, +c +) \ + +400 : + `__bu�t�_�rchr + ( +s +, +c +))) + + ) + +402 + #�rchr +( +s +, +c +) \ + +403 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +c +) && (c) == '\0' \ + +404 ? (*� + `__�wmemchr + ( +s +, +c +) \ + +405 : + `�rchr + ( +s +, +c +))) + + ) + +411 #i�(! +def�ed + +_HAVE_STRING_ARCH_�r�y + && ! +__GNUC_PREREQ + (3, 0)) \ + +412 || +def�ed + + g_FORCE_INLINES + + +413 #i�! +def�ed + +_HAVE_STRING_ARCH_�r�y + && ! +__GNUC_PREREQ + (3, 0) + +414 + #�r�y +( +de� +, +�c +) \ + +415 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +) \ + +416 ? ( + `__�r�g2_1b�r_p + ( +�c +�&& + `��� + (src) + 1 <= 8 \ + +417 ? + `__�r�y_sm�l + ( +de� +, + `__�r�y_�gs + ( +�c +), \ + +418 + `��� + ( +�c +) + 1) \ + +419 : (*� + `mem�y + ( +de� +, +�c +, + `��� + (src) + 1)) \ + +420 : + `�r�y + ( +de� +, +�c +))) + + ) + +423 #i� +_STRING_ARCH_u�lig�d + + +424 #i�de� +_FORCE_INLINES + + +425 + #__�r�y_�gs +( +�c +) \ + +426 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 0), \ + +427 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 4), \ + +428 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 0), \ + +429 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 4) + + ) + +431 +__STRING_INLINE + * +__�r�y_sm�l + (*, +__u�t16_t +, __uint16_t, + +432 +__u�t32_t +, __u�t32_t, +size_t +); + +433 +__STRING_INLINE + * + +434 + $__�r�y_sm�l + (* +__de� +, + +435 +__u�t16_t + +__�c0_2 +, __u�t16_� +__�c4_2 +, + +436 +__u�t32_t + +__�c0_4 +, __u�t32_� +__�c4_4 +, + +437 +size_t + +__��� +) + +440 +__u�t32_t + +__ui +; + +441 +__u�t16_t + +__usi +; + +442 +__uc +; + +443 } * +__u + = (*� +__de� +; + +444 (� +__��� +) + +447 +__u +-> +__uc + = '\0'; + +450 +__u +-> +__usi + = +__�c0_2 +; + +453 +__u +-> +__usi + = +__�c0_2 +; + +454 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +455 +__u +-> +__uc + = '\0'; + +458 +__u +-> +__ui + = +__�c0_4 +; + +461 +__u +-> +__ui + = +__�c0_4 +; + +462 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +463 +__u +-> +__uc + = '\0'; + +466 +__u +-> +__ui + = +__�c0_4 +; + +467 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +468 +__u +-> +__usi + = +__�c4_2 +; + +471 +__u +-> +__ui + = +__�c0_4 +; + +472 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +473 +__u +-> +__usi + = +__�c4_2 +; + +474 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +475 +__u +-> +__uc + = '\0'; + +478 +__u +-> +__ui + = +__�c0_4 +; + +479 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +480 +__u +-> +__ui + = +__�c4_4 +; + +483 +__de� +; + +484 + } +} + +486 #i�de� +_FORCE_INLINES + + +487 + #__�r�y_�gs +( +�c +) \ + +488 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR2 +) \ + +489 { { (( +__cڡ + *�( +�c +))[0], '\0' } }), \ + +490 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR3 +) \ + +491 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +493 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR4 +) \ + +494 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +495 (( +__cڡ + *�( +�c +))[2], '\0' } }), \ + +496 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR5 +) \ + +497 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +498 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +500 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR6 +) \ + +501 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +502 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +503 (( +__cڡ + *�( +�c +))[4], '\0' } }), \ + +504 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR7 +) \ + +505 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +506 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +507 (( +__cڡ + *�( +�c +))[4], ((__const *) (src))[5], \ + +509 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR8 +) \ + +510 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +511 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +512 (( +__cڡ + *�( +�c +))[4], ((__const *) (src))[5], \ + +513 (( +__cڡ + *�( +�c +))[6], '\0' } }) + + ) + +515 +__STRING_INLINE + * +__�r�y_sm�l + (*, +__STRING2_COPY_ARR2 +, + +516 +__STRING2_COPY_ARR3 +, + +517 +__STRING2_COPY_ARR4 +, + +518 +__STRING2_COPY_ARR5 +, + +519 +__STRING2_COPY_ARR6 +, + +520 +__STRING2_COPY_ARR7 +, + +521 +__STRING2_COPY_ARR8 +, +size_t +); + +522 +__STRING_INLINE + * + +523 + $__�r�y_sm�l + (* +__de� +, + +524 +__STRING2_COPY_ARR2 + +__�c2 +, +__STRING2_COPY_ARR3 + +__�c3 +, + +525 +__STRING2_COPY_ARR4 + +__�c4 +, +__STRING2_COPY_ARR5 + +__�c5 +, + +526 +__STRING2_COPY_ARR6 + +__�c6 +, +__STRING2_COPY_ARR7 + +__�c7 +, + +527 +__STRING2_COPY_ARR8 + +__�c8 +, +size_t + +__��� +) + +530 +__c +; + +531 +__STRING2_COPY_ARR2 + +__s�2 +; + +532 +__STRING2_COPY_ARR3 + +__s�3 +; + +533 +__STRING2_COPY_ARR4 + +__s�4 +; + +534 +__STRING2_COPY_ARR5 + +__s�5 +; + +535 +__STRING2_COPY_ARR6 + +__s�6 +; + +536 +__STRING2_COPY_ARR7 + +__s�7 +; + +537 +__STRING2_COPY_ARR8 + +__s�8 +; + +538 } * +__u + = (*� +__de� +; + +539 (� +__��� +) + +542 +__u +-> +__c + = '\0'; + +545 +__ex�nsi�__ + +__u +-> +__s�2 + = +__�c2 +; + +548 +__ex�nsi�__ + +__u +-> +__s�3 + = +__�c3 +; + +551 +__ex�nsi�__ + +__u +-> +__s�4 + = +__�c4 +; + +554 +__ex�nsi�__ + +__u +-> +__s�5 + = +__�c5 +; + +557 +__ex�nsi�__ + +__u +-> +__s�6 + = +__�c6 +; + +560 +__ex�nsi�__ + +__u +-> +__s�7 + = +__�c7 +; + +563 +__ex�nsi�__ + +__u +-> +__s�8 + = +__�c8 +; + +566 +__de� +; + +567 + } +} + +573 #ifde� +__USE_GNU + + +574 #i�! +def�ed + +_HAVE_STRING_ARCH_�p�y + || def�ed +_FORCE_INLINES + + +575 #i�de� +_HAVE_STRING_ARCH_�p�y + + +576 #i� +__GNUC_PREREQ + (3, 4) + +577 + #__�p�y +( +de� +, +�c +� + `__bu�t�_�p�y + (de�, src) + + ) + +578 #�i� +__GNUC_PREREQ + (3, 0) + +579 + #__�p�y +( +de� +, +�c +) \ + +580 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +) \ + +581 ? ( + `__�r�g2_1b�r_p + ( +�c +�&& + `��� + (src) + 1 <= 8 \ + +582 ? + `__bu�t�_�r�y + ( +de� +, +�c +�+ + `��� + (src) \ + +583 : ((*�( +__memp�y +�( +de� +, +�c +, + `��� + (src) + 1) \ + +585 : + `__�p�y + ( +de� +, +�c +))) + + ) + +587 + #__�p�y +( +de� +, +�c +) \ + +588 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +) \ + +589 ? ( + `__�r�g2_1b�r_p + ( +�c +�&& + `��� + (src) + 1 <= 8 \ + +590 ? + `__�p�y_sm�l + ( +de� +, + `__�p�y_�gs + ( +�c +), \ + +591 + `��� + ( +�c +) + 1) \ + +592 : ((*�( +__memp�y +�( +de� +, +�c +, + `��� + (src) + 1) \ + +594 : + `__�p�y + ( +de� +, +�c +))) + + ) + +598 + #�p�y +( +de� +, +�c +� + `__�p�y + (de�, src) + + ) + +601 #i�! +__GNUC_PREREQ + (3, 0�|| +def�ed + +_FORCE_INLINES + + +602 #i� +_STRING_ARCH_u�lig�d + + +603 #i�de� +_FORCE_INLINES + + +604 + #__�p�y_�gs +( +�c +) \ + +605 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 0), \ + +606 +__ex�nsi�__ + + `__STRING2_SMALL_GET16 + ( +�c +, 4), \ + +607 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 0), \ + +608 +__ex�nsi�__ + + `__STRING2_SMALL_GET32 + ( +�c +, 4) + + ) + +610 +__STRING_INLINE + * +__�p�y_sm�l + (*, +__u�t16_t +, __uint16_t, + +611 +__u�t32_t +, __u�t32_t, +size_t +); + +612 +__STRING_INLINE + * + +613 + $__�p�y_sm�l + (* +__de� +, + +614 +__u�t16_t + +__�c0_2 +, __u�t16_� +__�c4_2 +, + +615 +__u�t32_t + +__�c0_4 +, __u�t32_� +__�c4_4 +, + +616 +size_t + +__��� +) + +619 +__ui +; + +620 +__usi +; + +621 +__uc +; + +622 +__c +; + +623 } * +__u + = (*� +__de� +; + +624 (� +__��� +) + +627 +__u +-> +__uc + = '\0'; + +630 +__u +-> +__usi + = +__�c0_2 +; + +631 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +634 +__u +-> +__usi + = +__�c0_2 +; + +635 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +636 +__u +-> +__uc + = '\0'; + +639 +__u +-> +__ui + = +__�c0_4 +; + +640 +__u + = + `__ex�nsi�__ + ((*) __u + 3); + +643 +__u +-> +__ui + = +__�c0_4 +; + +644 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +645 +__u +-> +__uc + = '\0'; + +648 +__u +-> +__ui + = +__�c0_4 +; + +649 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +650 +__u +-> +__usi + = +__�c4_2 +; + +651 +__u + = + `__ex�nsi�__ + ((*) __u + 1); + +654 +__u +-> +__ui + = +__�c0_4 +; + +655 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +656 +__u +-> +__usi + = +__�c4_2 +; + +657 +__u + = + `__ex�nsi�__ + ((*) __u + 2); + +658 +__u +-> +__uc + = '\0'; + +661 +__u +-> +__ui + = +__�c0_4 +; + +662 +__u + = + `__ex�nsi�__ + ((*) __u + 4); + +663 +__u +-> +__ui + = +__�c4_4 +; + +664 +__u + = + `__ex�nsi�__ + ((*) __u + 3); + +667 & +__u +-> +__c +; + +668 + } +} + +670 #i�de� +_FORCE_INLINES + + +671 + #__�p�y_�gs +( +�c +) \ + +672 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR2 +) \ + +673 { { (( +__cڡ + *�( +�c +))[0], '\0' } }), \ + +674 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR3 +) \ + +675 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +677 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR4 +) \ + +678 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +679 (( +__cڡ + *�( +�c +))[2], '\0' } }), \ + +680 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR5 +) \ + +681 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +682 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +684 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR6 +) \ + +685 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +686 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +687 (( +__cڡ + *�( +�c +))[4], '\0' } }), \ + +688 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR7 +) \ + +689 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +690 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +691 (( +__cڡ + *�( +�c +))[4], ((__const *) (src))[5], \ + +693 + `__ex�nsi�__ + (( +__STRING2_COPY_ARR8 +) \ + +694 { { (( +__cڡ + *�( +�c +))[0], ((__const *) (src))[1], \ + +695 (( +__cڡ + *�( +�c +))[2], ((__const *) (src))[3], \ + +696 (( +__cڡ + *�( +�c +))[4], ((__const *) (src))[5], \ + +697 (( +__cڡ + *�( +�c +))[6], '\0' } }) + + ) + +699 +__STRING_INLINE + * +__�p�y_sm�l + (*, +__STRING2_COPY_ARR2 +, + +700 +__STRING2_COPY_ARR3 +, + +701 +__STRING2_COPY_ARR4 +, + +702 +__STRING2_COPY_ARR5 +, + +703 +__STRING2_COPY_ARR6 +, + +704 +__STRING2_COPY_ARR7 +, + +705 +__STRING2_COPY_ARR8 +, +size_t +); + +706 +__STRING_INLINE + * + +707 + $__�p�y_sm�l + (* +__de� +, + +708 +__STRING2_COPY_ARR2 + +__�c2 +, +__STRING2_COPY_ARR3 + +__�c3 +, + +709 +__STRING2_COPY_ARR4 + +__�c4 +, +__STRING2_COPY_ARR5 + +__�c5 +, + +710 +__STRING2_COPY_ARR6 + +__�c6 +, +__STRING2_COPY_ARR7 + +__�c7 +, + +711 +__STRING2_COPY_ARR8 + +__�c8 +, +size_t + +__��� +) + +714 +__c +; + +715 +__STRING2_COPY_ARR2 + +__s�2 +; + +716 +__STRING2_COPY_ARR3 + +__s�3 +; + +717 +__STRING2_COPY_ARR4 + +__s�4 +; + +718 +__STRING2_COPY_ARR5 + +__s�5 +; + +719 +__STRING2_COPY_ARR6 + +__s�6 +; + +720 +__STRING2_COPY_ARR7 + +__s�7 +; + +721 +__STRING2_COPY_ARR8 + +__s�8 +; + +722 } * +__u + = (*� +__de� +; + +723 (� +__��� +) + +726 +__u +-> +__c + = '\0'; + +729 +__ex�nsi�__ + +__u +-> +__s�2 + = +__�c2 +; + +732 +__ex�nsi�__ + +__u +-> +__s�3 + = +__�c3 +; + +735 +__ex�nsi�__ + +__u +-> +__s�4 + = +__�c4 +; + +738 +__ex�nsi�__ + +__u +-> +__s�5 + = +__�c5 +; + +741 +__ex�nsi�__ + +__u +-> +__s�6 + = +__�c6 +; + +744 +__ex�nsi�__ + +__u +-> +__s�7 + = +__�c7 +; + +747 +__ex�nsi�__ + +__u +-> +__s�8 + = +__�c8 +; + +750 +__de� + + +__��� + - 1; + +751 + } +} + +759 #i�de� +_HAVE_STRING_ARCH_���y + + +760 #i� +__GNUC_PREREQ + (3, 2) + +761 + #���y +( +de� +, +�c +, +n +� + `__bu�t�_���y + (de�, src,�) + + ) + +763 + #���y +( +de� +, +�c +, +n +) \ + +764 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +765 ? ( + `��� + ( +�c +�+ 1 >�(( +size_t +�( +n +)) \ + +766 ? (*� + `mem�y + ( +de� +, +�c +, +n +) \ + +767 : + `���y + ( +de� +, +�c +, +n +)) \ + +768 : + `���y + ( +de� +, +�c +, +n +))) + + ) + +774 #i�de� +_HAVE_STRING_ARCH_���t + + +775 #ifde� +_USE_STRING_ARCH_�rchr + + +776 + #���t +( +de� +, +�c +, +n +) \ + +777 ( + `__ex�nsi�__ + ({ * +__de� + = ( +de� +); \ + +778 + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +779 ? ( + `��� + ( +�c +�< (( +size_t +�( +n +)) \ + +780 ? + `�r�t + ( +__de� +, +�c +) \ + +781 : (*((*� + `__memp�y + ( + `�rchr + ( +__de� +, '\0'), \ + +782 +�c +, +n +)��'\0', +__de� +)) \ + +783 : + `���t + ( +de� +, +�c +, +n +); })) + + ) + +784 #�i� +__GNUC_PREREQ + (3, 2) + +785 + #���t +( +de� +, +�c +, +n +� + `__bu�t�_���t + (de�, src,�) + + ) + +787 + #���t +( +de� +, +�c +, +n +) \ + +788 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�c +�&& __bu�t�_cڡ�t_�( +n +) \ + +789 ? ( + `��� + ( +�c +�< (( +size_t +�( +n +)) \ + +790 ? + `�r�t + ( +de� +, +�c +) \ + +791 : + `���t + ( +de� +, +�c +, +n +)) \ + +792 : + `���t + ( +de� +, +�c +, +n +))) + + ) + +798 #i�de� +_HAVE_STRING_ARCH_�rcmp + + +799 #i� +__GNUC_PREREQ + (3, 2) + +800 + #�rcmp +( +s1 +, +s2 +) \ + +801 +__ex�nsi�__ + \ + +802 ({ +size_t + +__s1_�n +, +__s2_�n +; \ + +803 ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& __bu�t�_cڡ�t_�( +s2 +) \ + +804 && ( +__s1_�n + = + `��� + ( +s1 +), +__s2_�n + = s���( +s2 +), \ + +805 (! + `__�r�g2_1b�r_p + ( +s1 +�|| +__s1_�n + >= 4) \ + +806 && (! + `__�r�g2_1b�r_p + ( +s2 +�|| +__s2_�n + >= 4)) \ + +807 ? + `__bu�t�_�rcmp + ( +s1 +, +s2 +) \ + +808 : ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& + `__�r�g2_1b�r_p + (s1) \ + +809 && ( +__s1_�n + = + `��� + ( +s1 +), __s1_len < 4) \ + +810 ? ( + `__bu�t�_cڡ�t_p + ( +s2 +�&& + `__�r�g2_1b�r_p + (s2) \ + +811 ? + `__bu�t�_�rcmp + ( +s1 +, +s2 +) \ + +812 : + `__�rcmp_cg + ( +s1 +, +s2 +, +__s1_�n +)) \ + +813 : ( + `__bu�t�_cڡ�t_p + ( +s2 +�&& + `__�r�g2_1b�r_p + (s2) \ + +814 && ( +__s2_�n + = + `��� + ( +s2 +), __s2_len < 4) \ + +815 ? ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& + `__�r�g2_1b�r_p + (s1) \ + +816 ? + `__bu�t�_�rcmp + ( +s1 +, +s2 +) \ + +817 : + `__�rcmp_gc + ( +s1 +, +s2 +, +__s2_�n +)) \ + +818 : + `__bu�t�_�rcmp + ( +s1 +, +s2 +)))); }) + + ) + +820 + #�rcmp +( +s1 +, +s2 +) \ + +821 +__ex�nsi�__ + \ + +822 ({ +size_t + +__s1_�n +, +__s2_�n +; \ + +823 ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& __bu�t�_cڡ�t_�( +s2 +) \ + +824 && ( +__s1_�n + = + `��� + ( +s1 +), +__s2_�n + = s���( +s2 +), \ + +825 (! + `__�r�g2_1b�r_p + ( +s1 +�|| +__s1_�n + >= 4) \ + +826 && (! + `__�r�g2_1b�r_p + ( +s2 +�|| +__s2_�n + >= 4)) \ + +827 ? + `memcmp + (( +__cڡ + *�( +s1 +), (__cڡ *�( +s2 +), \ + +828 ( +__s1_�n + < +__s2_�n + ? __s1_len : __s2_len) + 1) \ + +829 : ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& + `__�r�g2_1b�r_p + (s1) \ + +830 && ( +__s1_�n + = + `��� + ( +s1 +), __s1_len < 4) \ + +831 ? ( + `__bu�t�_cڡ�t_p + ( +s2 +�&& + `__�r�g2_1b�r_p + (s2) \ + +832 ? + `__�rcmp_cc + ( +s1 +, +s2 +, +__s1_�n +) \ + +833 : + `__�rcmp_cg + ( +s1 +, +s2 +, +__s1_�n +)) \ + +834 : ( + `__bu�t�_cڡ�t_p + ( +s2 +�&& + `__�r�g2_1b�r_p + (s2) \ + +835 && ( +__s2_�n + = + `��� + ( +s2 +), __s2_len < 4) \ + +836 ? ( + `__bu�t�_cڡ�t_p + ( +s1 +�&& + `__�r�g2_1b�r_p + (s1) \ + +837 ? + `__�rcmp_cc + ( +s1 +, +s2 +, +__s2_�n +) \ + +838 : + `__�rcmp_gc + ( +s1 +, +s2 +, +__s2_�n +)) \ + +839 : + `�rcmp + ( +s1 +, +s2 +)))); }) + + ) + +842 + #__�rcmp_cc +( +s1 +, +s2 +, +l +) \ + +843 ( + `__ex�nsi�__ + ({ +__�su� + = \ + +844 ((( +__cڡ + *�(__cڡ *�( +s1 +))[0] \ + +845 - (( +__cڡ + *�(__cڡ *)( +s2 +))[0]);\ + +846 i�( +l + > 0 && +__�su� + == 0) \ + +848 +__�su� + = ((( +__cڡ + *) \ + +849 ( +__cڡ + *�( +s1 +))[1] \ + +850 - (( +__cڡ + *) \ + +851 ( +__cڡ + *�( +s2 +))[1]); \ + +852 i�( +l + > 1 && +__�su� + == 0) \ + +854 +__�su� + = \ + +855 ((( +__cڡ + *) \ + +856 ( +__cڡ + *�( +s1 +))[2] \ + +857 - (( +__cڡ + *) \ + +858 ( +__cڡ + *�( +s2 +))[2]); \ + +859 i�( +l + > 2 && +__�su� + == 0) \ + +860 +__�su� + = \ + +861 ((( +__cڡ + *) \ + +862 ( +__cڡ + *�( +s1 +))[3] \ + +863 - (( +__cڡ + *) \ + +864 ( +__cڡ + *�( +s2 +))[3]); \ + +867 +__�su� +; })) + + ) + +869 + #__�rcmp_cg +( +s1 +, +s2 +, +l1 +) \ + +870 ( + `__ex�nsi�__ + ({ +__cڡ + * +__s2 + = \ + +871 ( +__cڡ + *�(__cڡ *�( +s2 +); \ + +872 +__�su� + = \ + +873 ((( +__cڡ + *�(__cڡ *�( +s1 +))[0] \ + +874 - +__s2 +[0]); \ + +875 i�( +l1 + > 0 && +__�su� + == 0) \ + +877 +__�su� + = ((( +__cڡ + *) \ + +878 ( +__cڡ + *�( +s1 +))[1] - +__s2 +[1]); \ + +879 i�( +l1 + > 1 && +__�su� + == 0) \ + +881 +__�su� + = ((( +__cڡ + *) \ + +882 ( +__cڡ + *�( +s1 +))[2] - +__s2 +[2]);\ + +883 i�( +l1 + > 2 && +__�su� + == 0) \ + +884 +__�su� + = ((( +__cڡ + *) \ + +885 ( +__cڡ + *�( +s1 +))[3] \ + +886 - +__s2 +[3]); \ + +889 +__�su� +; })) + + ) + +891 + #__�rcmp_gc +( +s1 +, +s2 +, +l2 +) \ + +892 ( + `__ex�nsi�__ + ({ +__cڡ + * +__s1 + = \ + +893 ( +__cڡ + *�(__cڡ *�( +s1 +); \ + +894 +__�su� + = \ + +895 +__s1 +[0] - (( +__cڡ + *) \ + +896 ( +__cڡ + *�( +s2 +))[0]; \ + +897 i�( +l2 + > 0 && +__�su� + == 0) \ + +899 +__�su� + = ( +__s1 +[1] \ + +900 - (( +__cڡ + *) \ + +901 ( +__cڡ + *�( +s2 +))[1]); \ + +902 i�( +l2 + > 1 && +__�su� + == 0) \ + +904 +__�su� + = \ + +905 ( +__s1 +[2] - (( +__cڡ + *) \ + +906 ( +__cڡ + *�( +s2 +))[2]); \ + +907 i�( +l2 + > 2 && +__�su� + == 0) \ + +908 +__�su� + = \ + +909 ( +__s1 +[3] \ + +910 - (( +__cڡ + *) \ + +911 ( +__cڡ + *�( +s2 +))[3]); \ + +914 +__�su� +; })) + + ) + +919 #i�de� +_HAVE_STRING_ARCH_��cmp + + +920 + #��cmp +( +s1 +, +s2 +, +n +) \ + +921 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +n +) \ + +922 && (( + `__bu�t�_cڡ�t_p + ( +s1 +) \ + +923 && + `��� + ( +s1 +�< (( +size_t +�( +n +))) \ + +924 || ( + `__bu�t�_cڡ�t_p + ( +s2 +) \ + +925 && + `��� + ( +s2 +�< (( +size_t +�( +n +)))) \ + +926 ? + `�rcmp + ( +s1 +, +s2 +�: + `��cmp + (s1, s2, +n +))) + + ) + +932 #i�! +def�ed + +_HAVE_STRING_ARCH_�rc�n + || def�ed +_FORCE_INLINES + + +933 #i�de� +_HAVE_STRING_ARCH_�rc�n + + +934 #i� +__GNUC_PREREQ + (3, 2) + +935 + #�rc�n +( +s +, +�je� +) \ + +936 +__ex�nsi�__ + \ + +937 ({ +__r0 +, +__r1 +, +__r2 +; \ + +938 ( + `__bu�t�_cڡ�t_p + ( +�je� +�&& + `__�r�g2_1b�r_p + (reject) \ + +939 ? (( + `__bu�t�_cڡ�t_p + ( +s +�&& + `__�r�g2_1b�r_p + (s)) \ + +940 ? + `__bu�t�_�rc�n + ( +s +, +�je� +) \ + +941 : (( +__r0 + = (( +__cڡ + *�( +�je� +))[0], __r0 == '\0') \ + +942 ? + `��� + ( +s +) \ + +943 : (( +__r1 + = (( +__cڡ + *�( +�je� +))[1], __r1 == '\0') \ + +944 ? + `__�rc�n_c1 + ( +s +, +__r0 +) \ + +945 : (( +__r2 + = (( +__cڡ + *�( +�je� +))[2], __r2 == '\0') \ + +946 ? + `__�rc�n_c2 + ( +s +, +__r0 +, +__r1 +) \ + +947 : ((( +__cڡ + *�( +�je� +))[3] == '\0' \ + +948 ? + `__�rc�n_c3 + ( +s +, +__r0 +, +__r1 +, +__r2 +) \ + +949 : + `__bu�t�_�rc�n + ( +s +, +�je� +)))))) \ + +950 : + `__bu�t�_�rc�n + ( +s +, +�je� +)); }) + + ) + +952 + #�rc�n +( +s +, +�je� +) \ + +953 +__ex�nsi�__ + \ + +954 ({ +__r0 +, +__r1 +, +__r2 +; \ + +955 ( + `__bu�t�_cڡ�t_p + ( +�je� +�&& + `__�r�g2_1b�r_p + (reject) \ + +956 ? (( +__r0 + = (( +__cڡ + *�( +�je� +))[0], __r0 == '\0') \ + +957 ? + `��� + ( +s +) \ + +958 : (( +__r1 + = (( +__cڡ + *�( +�je� +))[1], __r1 == '\0') \ + +959 ? + `__�rc�n_c1 + ( +s +, +__r0 +) \ + +960 : (( +__r2 + = (( +__cڡ + *�( +�je� +))[2], __r2 == '\0') \ + +961 ? + `__�rc�n_c2 + ( +s +, +__r0 +, +__r1 +) \ + +962 : ((( +__cڡ + *�( +�je� +))[3] == '\0' \ + +963 ? + `__�rc�n_c3 + ( +s +, +__r0 +, +__r1 +, +__r2 +) \ + +964 : + `�rc�n + ( +s +, +�je� +))))) \ + +965 : + `�rc�n + ( +s +, +�je� +)); }) + + ) + +969 +__STRING_INLINE + +size_t + +__�rc�n_c1 + ( +__cڡ + * +__s +, +__�je� +); + +970 +__STRING_INLINE + +size_t + + +971 + $__�rc�n_c1 + ( +__cڡ + * +__s +, +__�je� +) + +973 +size_t + +__�su� + = 0; + +974 +__s +[ +__�su� +] !�'\0' && __s[__�su�] !� +__�je� +) + +975 ++ +__�su� +; + +976 +__�su� +; + +977 + } +} + +979 +__STRING_INLINE + +size_t + +__�rc�n_c2 + ( +__cڡ + * +__s +, +__�je�1 +, + +980 +__�je�2 +); + +981 +__STRING_INLINE + +size_t + + +982 + $__�rc�n_c2 + ( +__cڡ + * +__s +, +__�je�1 +, +__�je�2 +) + +984 +size_t + +__�su� + = 0; + +985 +__s +[ +__�su� +] !�'\0' && __s[__�su�] !� +__�je�1 + + +986 && +__s +[ +__�su� +] !� +__�je�2 +) + +987 ++ +__�su� +; + +988 +__�su� +; + +989 + } +} + +991 +__STRING_INLINE + +size_t + +__�rc�n_c3 + ( +__cڡ + * +__s +, +__�je�1 +, + +992 +__�je�2 +, +__�je�3 +); + +993 +__STRING_INLINE + +size_t + + +994 + $__�rc�n_c3 + ( +__cڡ + * +__s +, +__�je�1 +, +__�je�2 +, + +995 +__�je�3 +) + +997 +size_t + +__�su� + = 0; + +998 +__s +[ +__�su� +] !�'\0' && __s[__�su�] !� +__�je�1 + + +999 && +__s +[ +__�su� +] !� +__�je�2 + && __s[__�su�] !� +__�je�3 +) + +1000 ++ +__�su� +; + +1001 +__�su� +; + +1002 + } +} + +1008 #i�! +def�ed + +_HAVE_STRING_ARCH_�r�n + || def�ed +_FORCE_INLINES + + +1009 #i�de� +_HAVE_STRING_ARCH_�r�n + + +1010 #i� +__GNUC_PREREQ + (3, 2) + +1011 + #�r�n +( +s +, +ac�� +) \ + +1012 +__ex�nsi�__ + \ + +1013 ({ +__a0 +, +__a1 +, +__a2 +; \ + +1014 ( + `__bu�t�_cڡ�t_p + ( +ac�� +�&& + `__�r�g2_1b�r_p + (accept) \ + +1015 ? (( + `__bu�t�_cڡ�t_p + ( +s +�&& + `__�r�g2_1b�r_p + (s)) \ + +1016 ? + `__bu�t�_�r�n + ( +s +, +ac�� +) \ + +1017 : (( +__a0 + = (( +__cڡ + *�( +ac�� +))[0], __a0 == '\0') \ + +1018 ? ((�( +s +), 0) \ + +1019 : (( +__a1 + = (( +__cڡ + *�( +ac�� +))[1], __a1 == '\0') \ + +1020 ? + `__�r�n_c1 + ( +s +, +__a0 +) \ + +1021 : (( +__a2 + = (( +__cڡ + *�( +ac�� +))[2], __a2 == '\0') \ + +1022 ? + `__�r�n_c2 + ( +s +, +__a0 +, +__a1 +) \ + +1023 : ((( +__cڡ + *�( +ac�� +))[3] == '\0' \ + +1024 ? + `__�r�n_c3 + ( +s +, +__a0 +, +__a1 +, +__a2 +) \ + +1025 : + `__bu�t�_�r�n + ( +s +, +ac�� +)))))) \ + +1026 : + `__bu�t�_�r�n + ( +s +, +ac�� +)); }) + + ) + +1028 + #�r�n +( +s +, +ac�� +) \ + +1029 +__ex�nsi�__ + \ + +1030 ({ +__a0 +, +__a1 +, +__a2 +; \ + +1031 ( + `__bu�t�_cڡ�t_p + ( +ac�� +�&& + `__�r�g2_1b�r_p + (accept) \ + +1032 ? (( +__a0 + = (( +__cڡ + *�( +ac�� +))[0], __a0 == '\0') \ + +1033 ? ((�( +s +), 0) \ + +1034 : (( +__a1 + = (( +__cڡ + *�( +ac�� +))[1], __a1 == '\0') \ + +1035 ? + `__�r�n_c1 + ( +s +, +__a0 +) \ + +1036 : (( +__a2 + = (( +__cڡ + *�( +ac�� +))[2], __a2 == '\0') \ + +1037 ? + `__�r�n_c2 + ( +s +, +__a0 +, +__a1 +) \ + +1038 : ((( +__cڡ + *�( +ac�� +))[3] == '\0' \ + +1039 ? + `__�r�n_c3 + ( +s +, +__a0 +, +__a1 +, +__a2 +) \ + +1040 : + `�r�n + ( +s +, +ac�� +))))) \ + +1041 : + `�r�n + ( +s +, +ac�� +)); }) + + ) + +1045 +__STRING_INLINE + +size_t + +__�r�n_c1 + ( +__cڡ + * +__s +, +__ac�� +); + +1046 +__STRING_INLINE + +size_t + + +1047 + $__�r�n_c1 + ( +__cڡ + * +__s +, +__ac�� +) + +1049 +size_t + +__�su� + = 0; + +1051 +__s +[ +__�su� +] =� +__ac�� +) + +1052 ++ +__�su� +; + +1053 +__�su� +; + +1054 + } +} + +1056 +__STRING_INLINE + +size_t + +__�r�n_c2 + ( +__cڡ + * +__s +, +__ac��1 +, + +1057 +__ac��2 +); + +1058 +__STRING_INLINE + +size_t + + +1059 + $__�r�n_c2 + ( +__cڡ + * +__s +, +__ac��1 +, +__ac��2 +) + +1061 +size_t + +__�su� + = 0; + +1063 +__s +[ +__�su� +] =� +__ac��1 + || __s[__�su�] =� +__ac��2 +) + +1064 ++ +__�su� +; + +1065 +__�su� +; + +1066 + } +} + +1068 +__STRING_INLINE + +size_t + +__�r�n_c3 + ( +__cڡ + * +__s +, +__ac��1 +, + +1069 +__ac��2 +, +__ac��3 +); + +1070 +__STRING_INLINE + +size_t + + +1071 + $__�r�n_c3 + ( +__cڡ + * +__s +, +__ac��1 +, +__ac��2 +, +__ac��3 +) + +1073 +size_t + +__�su� + = 0; + +1075 +__s +[ +__�su� +] =� +__ac��1 + || __s[__�su�] =� +__ac��2 + + +1076 || +__s +[ +__�su� +] =� +__ac��3 +) + +1077 ++ +__�su� +; + +1078 +__�su� +; + +1079 + } +} + +1084 #i�! +def�ed + +_HAVE_STRING_ARCH_��brk + || def�ed +_FORCE_INLINES + + +1085 #i�de� +_HAVE_STRING_ARCH_��brk + + +1086 #i� +__GNUC_PREREQ + (3, 2) + +1087 + #��brk +( +s +, +ac�� +) \ + +1088 +__ex�nsi�__ + \ + +1089 ({ +__a0 +, +__a1 +, +__a2 +; \ + +1090 ( + `__bu�t�_cڡ�t_p + ( +ac�� +�&& + `__�r�g2_1b�r_p + (accept) \ + +1091 ? (( + `__bu�t�_cڡ�t_p + ( +s +�&& + `__�r�g2_1b�r_p + (s)) \ + +1092 ? + `__bu�t�_��brk + ( +s +, +ac�� +) \ + +1093 : (( +__a0 + = (( +__cڡ + *�( +ac�� +))[0], __a0 == '\0') \ + +1094 ? ((�( +s +), (*� +NULL +) \ + +1095 : (( +__a1 + = (( +__cڡ + *�( +ac�� +))[1], __a1 == '\0') \ + +1096 ? + `__bu�t�_�rchr + ( +s +, +__a0 +) \ + +1097 : (( +__a2 + = (( +__cڡ + *�( +ac�� +))[2], __a2 == '\0') \ + +1098 ? + `__��brk_c2 + ( +s +, +__a0 +, +__a1 +) \ + +1099 : ((( +__cڡ + *�( +ac�� +))[3] == '\0' \ + +1100 ? + `__��brk_c3 + ( +s +, +__a0 +, +__a1 +, +__a2 +) \ + +1101 : + `__bu�t�_��brk + ( +s +, +ac�� +)))))) \ + +1102 : + `__bu�t�_��brk + ( +s +, +ac�� +)); }) + + ) + +1104 + #��brk +( +s +, +ac�� +) \ + +1105 +__ex�nsi�__ + \ + +1106 ({ +__a0 +, +__a1 +, +__a2 +; \ + +1107 ( + `__bu�t�_cڡ�t_p + ( +ac�� +�&& + `__�r�g2_1b�r_p + (accept) \ + +1108 ? (( +__a0 + = (( +__cڡ + *�( +ac�� +))[0], __a0 == '\0') \ + +1109 ? ((�( +s +), (*� +NULL +) \ + +1110 : (( +__a1 + = (( +__cڡ + *�( +ac�� +))[1], __a1 == '\0') \ + +1111 ? + `�rchr + ( +s +, +__a0 +) \ + +1112 : (( +__a2 + = (( +__cڡ + *�( +ac�� +))[2], __a2 == '\0') \ + +1113 ? + `__��brk_c2 + ( +s +, +__a0 +, +__a1 +) \ + +1114 : ((( +__cڡ + *�( +ac�� +))[3] == '\0' \ + +1115 ? + `__��brk_c3 + ( +s +, +__a0 +, +__a1 +, +__a2 +) \ + +1116 : + `��brk + ( +s +, +ac�� +))))) \ + +1117 : + `��brk + ( +s +, +ac�� +)); }) + + ) + +1121 +__STRING_INLINE + * +__��brk_c2 + ( +__cڡ + * +__s +, +__ac��1 +, + +1122 +__ac��2 +); + +1123 +__STRING_INLINE + * + +1124 + $__��brk_c2 + ( +__cڡ + * +__s +, +__ac��1 +, +__ac��2 +) + +1127 * +__s + !�'\0' && *__�!� +__ac��1 + && *__�!� +__ac��2 +) + +1128 ++ +__s +; + +1129 * +__s + =�'\0' ? +NULL + : (*�( +size_t +) __s; + +1130 + } +} + +1132 +__STRING_INLINE + * +__��brk_c3 + ( +__cڡ + * +__s +, +__ac��1 +, + +1133 +__ac��2 +, +__ac��3 +); + +1134 +__STRING_INLINE + * + +1135 + $__��brk_c3 + ( +__cڡ + * +__s +, +__ac��1 +, +__ac��2 +, + +1136 +__ac��3 +) + +1139 * +__s + !�'\0' && *__�!� +__ac��1 + && *__�!� +__ac��2 + + +1140 && * +__s + !� +__ac��3 +) + +1141 ++ +__s +; + +1142 * +__s + =�'\0' ? +NULL + : (*�( +size_t +) __s; + +1143 + } +} + +1149 #i�! +def�ed + +_HAVE_STRING_ARCH_�r�r + && ! +__GNUC_PREREQ + (2, 97) + +1150 + #�r�r +( +hay�ack +, +�ed� +) \ + +1151 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�ed� +�&& + `__�r�g2_1b�r_p + (needle) \ + +1152 ? ((( +__cڡ + *�( +�ed� +))[0] == '\0' \ + +1153 ? (*�( +size_t +�( +hay�ack +) \ + +1154 : ((( +__cڡ + *�( +�ed� +))[1] == '\0' \ + +1155 ? + `�rchr + ( +hay�ack +, \ + +1156 (( +__cڡ + *�( +�ed� +))[0]) \ + +1157 : + `�r�r + ( +hay�ack +, +�ed� +))) \ + +1158 : + `�r�r + ( +hay�ack +, +�ed� +))) + + ) + +1162 #i�! +def�ed + +_HAVE_STRING_ARCH_��ok_r + || def�ed +_FORCE_INLINES + + +1163 #i�de� +_HAVE_STRING_ARCH_��ok_r + + +1164 + #__��ok_r +( +s +, +�p +, +�x� +) \ + +1165 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +�p +�&& + `__�r�g2_1b�r_p + (sep) \ + +1166 && (( +__cڡ + *�( +�p +))[0] != '\0' \ + +1167 && (( +__cڡ + *�( +�p +))[1] == '\0' \ + +1168 ? + `__��ok_r_1c + ( +s +, (( +__cڡ + *�( +�p +))[0], +�x� +) \ + +1169 : + `__��ok_r + ( +s +, +�p +, +�x� +))) + + ) + +1172 +__STRING_INLINE + * +__��ok_r_1c + (* +__s +, +__�p +, ** +__�x� +); + +1173 +__STRING_INLINE + * + +1174 + $__��ok_r_1c + (* +__s +, +__�p +, ** +__�x� +) + +1176 * +__�su� +; + +1177 i�( +__s + =� +NULL +) + +1178 +__s + = * +__�x� +; + +1179 * +__s + =� +__�p +) + +1180 ++ +__s +; + +1181 +__�su� + = +NULL +; + +1182 i�(* +__s + != '\0') + +1184 +__�su� + = +__s +++; + +1185 * +__s + != '\0') + +1186 i�(* +__s +++ =� +__�p +) + +1188 +__s +[-1] = '\0'; + +1192 * +__�x� + = +__s +; + +1193 +__�su� +; + +1194 + } +} + +1195 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +1196 + #��ok_r +( +s +, +�p +, +�x� +� + `__��ok_r + (s, s�,�ex�) + + ) + +1201 #i�! +def�ed + +_HAVE_STRING_ARCH_�r�p + || def�ed +_FORCE_INLINES + + +1202 #i�de� +_HAVE_STRING_ARCH_�r�p + + +1204
* +__�r�p_g + (** +__�r�gp +, +__cڡ + * +__d�im +); + +1205 + #__�r�p +( +s +, +�je� +) \ + +1206 +__ex�nsi�__ + \ + +1207 ({ +__r0 +, +__r1 +, +__r2 +; \ + +1208 ( + `__bu�t�_cڡ�t_p + ( +�je� +�&& + `__�r�g2_1b�r_p + (reject) \ + +1209 && ( +__r0 + = (( +__cڡ + *�( +�je� +))[0], \ + +1210 (( +__cڡ + *�( +�je� +))[0] != '\0') \ + +1211 ? (( +__r1 + = (( +__cڡ + *�( +�je� +))[1], \ + +1212 (( +__cڡ + *�( +�je� +))[1] == '\0') \ + +1213 ? + `__�r�p_1c + ( +s +, +__r0 +) \ + +1214 : (( +__r2 + = (( +__cڡ + *�( +�je� +))[2], __r2 == '\0') \ + +1215 ? + `__�r�p_2c + ( +s +, +__r0 +, +__r1 +) \ + +1216 : ((( +__cڡ + *�( +�je� +))[3] == '\0' \ + +1217 ? + `__�r�p_3c + ( +s +, +__r0 +, +__r1 +, +__r2 +) \ + +1218 : + `__�r�p_g + ( +s +, +�je� +)))) \ + +1219 : + `__�r�p_g + ( +s +, +�je� +)); }) + + ) + +1222 +__STRING_INLINE + * +__�r�p_1c + (** +__s +, +__�je� +); + +1223 +__STRING_INLINE + * + +1224 + $__�r�p_1c + (** +__s +, +__�je� +) + +1226 * +__�tv� + = * +__s +; + +1227 i�( +__�tv� + !� +NULL + && (* +__s + = + `�rchr + (__�tv�, +__�je� +)) != NULL) + +1228 *(* +__s +)++ = '\0'; + +1229 +__�tv� +; + +1230 + } +} + +1232 +__STRING_INLINE + * +__�r�p_2c + (** +__s +, +__�je�1 +, +__�je�2 +); + +1233 +__STRING_INLINE + * + +1234 + $__�r�p_2c + (** +__s +, +__�je�1 +, +__�je�2 +) + +1236 * +__�tv� + = * +__s +; + +1237 i�( +__�tv� + !� +NULL +) + +1239 * +__� + = +__�tv� +; + +1242 i�(* +__� + == '\0') + +1244 +__� + = +NULL +; + +1247 i�(* +__� + =� +__�je�1 + || *__� =� +__�je�2 +) + +1249 * +__� +++ = '\0'; + +1252 ++ +__� +; + +1254 * +__s + = +__� +; + +1256 +__�tv� +; + +1257 + } +} + +1259 +__STRING_INLINE + * +__�r�p_3c + (** +__s +, +__�je�1 +, +__�je�2 +, + +1260 +__�je�3 +); + +1261 +__STRING_INLINE + * + +1262 + $__�r�p_3c + (** +__s +, +__�je�1 +, +__�je�2 +, +__�je�3 +) + +1264 * +__�tv� + = * +__s +; + +1265 i�( +__�tv� + !� +NULL +) + +1267 * +__� + = +__�tv� +; + +1270 i�(* +__� + == '\0') + +1272 +__� + = +NULL +; + +1275 i�(* +__� + =� +__�je�1 + || *__� =� +__�je�2 + || *__� =� +__�je�3 +) + +1277 * +__� +++ = '\0'; + +1280 ++ +__� +; + +1282 * +__s + = +__� +; + +1284 +__�tv� +; + +1285 + } +} + +1286 #ifde� +__USE_BSD + + +1287 + #�r�p +( +s +, +�je� +� + `__�r�p + (s,�eje�) + + ) + +1294 #ifde� +__USE_MISC + + +1296 #i�! +def�ed + +_HAVE_STRING_ARCH_�rdup + || !def�ed +_HAVE_STRING_ARCH_��dup + + +1297 + #__�ed_m�loc_�d_��oc + + + ) + +1298 + ~<�dlib.h +> + +1301 #i�de� +_HAVE_STRING_ARCH_�rdup + + +1303
* + $__�rdup + ( +__cڡ + * +__�r�g +� +__THROW + +__��ibu�_m�loc__ +; + +1304 + #__�rdup +( +s +) \ + +1305 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +s +�&& + `__�r�g2_1b�r_p + (s) \ + +1306 ? ((( +__cڡ + *�( +s +))[0] == '\0' \ + +1307 ? (*� + `��oc + (( +size_t +) 1, (size_t) 1) \ + +1308 : ({ +size_t + +__�n + = + `��� + ( +s +) + 1; \ + +1309 * +__�tv� + = (*� + `m�loc + ( +__�n +); \ + +1310 i�( +__�tv� + !� +NULL +) \ + +1311 +__�tv� + = (*� + `mem�y + (__�tv�, +s +, +__�n +); \ + +1312 +__�tv� +; + } +})) \ + +1313 : + `__�rdup + ( +s +))) + + ) + +1315 #i� +def�ed + +__USE_SVID + || def�ed +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +1316 + #�rdup +( +s +� + `__�rdup + (s) + + ) + +1320 #i�de� +_HAVE_STRING_ARCH_��dup + + +1322
* + $__��dup + ( +__cڡ + * +__�r�g +, +size_t + +__n +) + +1323 +__THROW + +__��ibu�_m�loc__ +; + +1324 + #__��dup +( +s +, +n +) \ + +1325 ( + `__ex�nsi�__ + ( + `__bu�t�_cڡ�t_p + ( +s +�&& + `__�r�g2_1b�r_p + (s) \ + +1326 ? ((( +__cڡ + *�( +s +))[0] == '\0' \ + +1327 ? (*� + `��oc + (( +size_t +) 1, (size_t) 1) \ + +1328 : ({ +size_t + +__�n + = + `��� + ( +s +) + 1; \ + +1329 +size_t + +__n + = ( +n +); \ + +1330 * +__�tv� +; \ + +1331 i�( +__n + < +__�n +) \ + +1332 +__�n + = +__n + + 1; \ + +1333 +__�tv� + = (*� + `m�loc + ( +__�n +); \ + +1334 i�( +__�tv� + !� +NULL +) \ + +1336 +__�tv� +[ +__�n + - 1] = '\0'; \ + +1337 +__�tv� + = (*� + `mem�y + (__�tv�, +s +, \ + +1338 +__�n + - 1); \ + +1340 +__�tv� +; + } +})) \ + +1341 : + `__��dup + ( +s +, +n +))) + + ) + +1343 #ifde� +__USE_GNU + + +1344 + #��dup +( +s +, +n +� + `__��dup + (s,�) + + ) + +1350 #i�de� +_FORCE_INLINES + + +1351 #unde� +__STRING_INLINE + + + @/usr/include/bits/string3.h + +19 #i�de� +_STRING_H + + +23 +__w�nde� + ( +__w�n_mem�t_z�o_�n +, + +26 #i�de� +__�lu�lus + + +30 #unde� +mem�y + + +31 #unde� +memmove + + +32 #unde� +mem�t + + +33 #unde� +�r�t + + +34 #unde� +�r�y + + +35 #unde� +���t + + +36 #unde� +���y + + +37 #ifde� +__USE_GNU + + +38 #unde� +memp�y + + +39 #unde� +�p�y + + +41 #ifde� +__USE_BSD + + +42 #unde� +bc�y + + +43 #unde� +bz�o + + +48 +__ex��_�ways_�l�e + * + +49 +__NTH + ( + $mem�y + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +, + +50 +size_t + +__�n +)) + +52 + `__bu�t�___mem�y_chk + ( +__de� +, +__�c +, +__�n +, + `__bos0 + (__dest)); + +53 + } +} + +55 +__ex��_�ways_�l�e + * + +56 +__NTH + ( + $memmove + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +, + +57 +size_t + +__�n +)) + +59 + `__bu�t�___memmove_chk + ( +__de� +, +__�c +, +__�n +, + `__bos0 + (__dest)); + +60 + } +} + +62 #ifde� +__USE_GNU + + +63 +__ex��_�ways_�l�e + * + +64 +__NTH + ( + $memp�y + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +, + +65 +size_t + +__�n +)) + +67 + `__bu�t�___memp�y_chk + ( +__de� +, +__�c +, +__�n +, + `__bos0 + (__dest)); + +68 + } +} + +77 +__ex��_�ways_�l�e + * + +78 +__NTH + ( + $mem�t + (* +__de� +, +__ch +, +size_t + +__�n +)) + +80 i�( + `__bu�t�_cڡ�t_p + ( +__�n +) && __len == 0 + +81 && (! + `__bu�t�_cڡ�t_p + ( +__ch +) || __ch != 0)) + +83 + `__w�n_mem�t_z�o_�n + (); + +84 +__de� +; + +86 + `__bu�t�___mem�t_chk + ( +__de� +, +__ch +, +__�n +, + `__bos0 + (__dest)); + +87 + } +} + +89 #ifde� +__USE_BSD + + +90 +__ex��_�ways_�l�e + + +91 +__NTH + ( + $bc�y + ( +__cڡ + * +__��ri� + +__�c +, *__��ri� +__de� +, + +92 +size_t + +__�n +)) + +94 (� + `__bu�t�___memmove_chk + ( +__de� +, +__�c +, +__�n +, + `__bos0 + (__dest)); + +95 + } +} + +97 +__ex��_�ways_�l�e + + +98 +__NTH + ( + $bz�o + (* +__de� +, +size_t + +__�n +)) + +100 (� + `__bu�t�___mem�t_chk + ( +__de� +, '\0', +__�n +, + `__bos0 + (__dest)); + +101 + } +} + +104 +__ex��_�ways_�l�e + * + +105 +__NTH + ( + $�r�y + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +)) + +107 + `__bu�t�___�r�y_chk + ( +__de� +, +__�c +, + `__bos + (__dest)); + +108 + } +} + +110 #ifde� +__USE_GNU + + +111 +__ex��_�ways_�l�e + * + +112 +__NTH + ( + $�p�y + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +)) + +114 + `__bu�t�___�p�y_chk + ( +__de� +, +__�c +, + `__bos + (__dest)); + +115 + } +} + +119 +__ex��_�ways_�l�e + * + +120 +__NTH + ( + $���y + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +, + +121 +size_t + +__�n +)) + +123 + `__bu�t�___���y_chk + ( +__de� +, +__�c +, +__�n +, + `__bos + (__dest)); + +124 + } +} + +127
* + $__���y_chk + (* +__de� +, +__cڡ + * +__�c +, +size_t + +__n +, + +128 +size_t + +__de��n +� +__THROW +; + +129
* + `__REDIRECT_NTH + ( +__���y_��s +, (* +__de� +, + +130 +__cڡ + * +__�c +, + +131 +size_t + +__n +), +���y +); + +133 +__ex��_�ways_�l�e + * + +134 + `__NTH + ( + $���y + (* +__de� +, +__cڡ + * +__�c +, +size_t + +__n +)) + +136 i�( + `__bos + ( +__de� +�!�( +size_t +) -1 + +137 && (! + `__bu�t�_cڡ�t_p + ( +__n +�|| __�<� + `__bos + ( +__de� +))) + +138 + `__���y_chk + ( +__de� +, +__�c +, +__n +, + `__bos + (__dest)); + +139 + `__���y_��s + ( +__de� +, +__�c +, +__n +); + +140 + } +} + +143 +__ex��_�ways_�l�e + * + +144 +__NTH + ( + $�r�t + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +)) + +146 + `__bu�t�___�r�t_chk + ( +__de� +, +__�c +, + `__bos + (__dest)); + +147 + } +} + +150 +__ex��_�ways_�l�e + * + +151 +__NTH + ( + $���t + (* +__��ri� + +__de� +, +__cڡ + *__��ri� +__�c +, + +152 +size_t + +__�n +)) + +154 + `__bu�t�___���t_chk + ( +__de� +, +__�c +, +__�n +, + `__bos + (__dest)); + +155 + } +} + + @/usr/include/bits/sys_errlist.h + +20 #i�de� +_STDIO_H + + +26 #ifde� +__USE_BSD + + +27
+sys_ü +; + +28
+__cڡ + *__cڡ +sys_��i� +[]; + +30 #ifde� +__USE_GNU + + +31
+_sys_ü +; + +32
+__cڡ + *__cڡ +_sys_��i� +[]; + + @/usr/include/bits/types.h + +24 #i�def +_BITS_TYPES_H + + +25 + #_BITS_TYPES_H + 1 + + ) + +27 + ~<�u�s.h +> + +28 + ~<b�s/w�dsize.h +> + +31 + t__u_ch� +; + +32 + t__u_sh�t +; + +33 + t__u_�t +; + +34 + t__u_l�g +; + +37 sig�d + t__�t8_t +; + +38 + t__u�t8_t +; + +39 sig�d + t__�t16_t +; + +40 + t__u�t16_t +; + +41 sig�d + t__�t32_t +; + +42 + t__u�t32_t +; + +43 #i� +__WORDSIZE + == 64 + +44 sig�d + t__�t64_t +; + +45 + t__u�t64_t +; + +46 #�i� +def�ed + +__GLIBC_HAVE_LONG_LONG + + +47 +__ex�nsi�__ + sig�d + t__�t64_t +; + +48 +__ex�nsi�__ + + t__u�t64_t +; + +52 #i� +__WORDSIZE + == 64 + +53 + t__quad_t +; + +54 + t__u_quad_t +; + +55 #�i� +def�ed + +__GLIBC_HAVE_LONG_LONG + + +56 +__ex�nsi�__ + + t__quad_t +; + +57 +__ex�nsi�__ + + t__u_quad_t +; + +61 + m__v� +[2]; + +62 } + t__quad_t +; + +65 +__u_l�g + + m__v� +[2]; + +66 } + t__u_quad_t +; + +99 + #__S16_TYPE + + + ) + +100 + #__U16_TYPE + + + ) + +101 + #__S32_TYPE + + + ) + +102 + #__U32_TYPE + + + ) + +103 + #__SLONGWORD_TYPE + + + ) + +104 + #__ULONGWORD_TYPE + + + ) + +105 #i� +__WORDSIZE + == 32 + +106 + #__SQUAD_TYPE + +__quad_t + + + ) + +107 + #__UQUAD_TYPE + +__u_quad_t + + + ) + +108 + #__SWORD_TYPE + + + ) + +109 + #__UWORD_TYPE + + + ) + +110 + #__SLONG32_TYPE + + + ) + +111 + #__ULONG32_TYPE + + + ) + +112 + #__S64_TYPE + +__quad_t + + + ) + +113 + #__U64_TYPE + +__u_quad_t + + + ) + +116 + #__STD_TYPE + +__ex�nsi�__ + + + ) + +117 #�i� +__WORDSIZE + == 64 + +118 + t__SQUAD_TYPE + + + ) + +119 + t__UQUAD_TYPE + + + ) + +120 + t__SWORD_TYPE + + + ) + +121 + t__UWORD_TYPE + + + ) + +122 + t__SLONG32_TYPE + + + ) + +123 + t__ULONG32_TYPE + + + ) + +124 + t__S64_TYPE + + + ) + +125 + t__U64_TYPE + + + ) + +127 + t__STD_TYPE + + + ) + +131 + ~<b�s/ty�sizes.h +> + +134 +__STD_TYPE + + t__DEV_T_TYPE + + t__dev_t +; + +135 +__STD_TYPE + +__UID_T_TYPE + + g__uid_t +; + +136 +__STD_TYPE + +__GID_T_TYPE + + g__gid_t +; + +137 +__STD_TYPE + +__INO_T_TYPE + + g__�o_t +; + +138 +__STD_TYPE + +__INO64_T_TYPE + + g__�o64_t +; + +139 +__STD_TYPE + +__MODE_T_TYPE + + g__mode_t +; + +140 +__STD_TYPE + +__NLINK_T_TYPE + + g__ƚk_t +; + +141 +__STD_TYPE + +__OFF_T_TYPE + + g__off_t +; + +142 +__STD_TYPE + +__OFF64_T_TYPE + + g__off64_t +; + +143 +__STD_TYPE + +__PID_T_TYPE + + g__pid_t +; + +144 +__STD_TYPE + +__FSID_T_TYPE + + g__fsid_t +; + +145 +__STD_TYPE + +__CLOCK_T_TYPE + + g__�ock_t +; + +146 +__STD_TYPE + +__RLIM_T_TYPE + + g__�im_t +; + +147 +__STD_TYPE + +__RLIM64_T_TYPE + + g__�im64_t +; + +148 +__STD_TYPE + +__ID_T_TYPE + + g__id_t +; + +149 +__STD_TYPE + +__TIME_T_TYPE + + g__time_t +; + +150 +__STD_TYPE + +__USECONDS_T_TYPE + + g__u�c�ds_t +; + +151 +__STD_TYPE + +__SUSECONDS_T_TYPE + + g__su�c�ds_t +; + +153 +__STD_TYPE + +__DADDR_T_TYPE + + g__daddr_t +; + +154 +__STD_TYPE + +__SWBLK_T_TYPE + + g__swblk_t +; + +155 +__STD_TYPE + +__KEY_T_TYPE + + g__key_t +; + +158 +__STD_TYPE + +__CLOCKID_T_TYPE + + g__�ockid_t +; + +161 +__STD_TYPE + +__TIMER_T_TYPE + + g__tim�_t +; + +164 +__STD_TYPE + +__BLKSIZE_T_TYPE + + g__blksize_t +; + +169 +__STD_TYPE + +__BLKCNT_T_TYPE + + g__blk�t_t +; + +170 +__STD_TYPE + +__BLKCNT64_T_TYPE + + g__blk�t64_t +; + +173 +__STD_TYPE + +__FSBLKCNT_T_TYPE + + g__fsblk�t_t +; + +174 +__STD_TYPE + +__FSBLKCNT64_T_TYPE + + g__fsblk�t64_t +; + +177 +__STD_TYPE + +__FSFILCNT_T_TYPE + + g__fsf��t_t +; + +178 +__STD_TYPE + +__FSFILCNT64_T_TYPE + + g__fsf��t64_t +; + +180 +__STD_TYPE + +__SSIZE_T_TYPE + + g__ssize_t +; + +184 +__off64_t + + t__loff_t +; + +185 +__quad_t + * + t__qaddr_t +; + +186 * + t__�ddr_t +; + +189 +__STD_TYPE + +__SWORD_TYPE + + g__���_t +; + +192 +__STD_TYPE + +__U32_TYPE + + g__sock�n_t +; + +195 #unde� +__STD_TYPE + + + @/usr/include/features.h + +19 #i�def +_FEATURES_H + + +20 + #_FEATURES_H + 1 + + ) + +95 #unde� +__USE_ISOC99 + + +96 #unde� +__USE_ISOC95 + + +97 #unde� +__USE_POSIX + + +98 #unde� +__USE_POSIX2 + + +99 #unde� +__USE_POSIX199309 + + +100 #unde� +__USE_POSIX199506 + + +101 #unde� +__USE_XOPEN + + +102 #unde� +__USE_XOPEN_EXTENDED + + +103 #unde� +__USE_UNIX98 + + +104 #unde� +__USE_XOPEN2K + + +105 #unde� +__USE_XOPEN2K8 + + +106 #unde� +__USE_LARGEFILE + + +107 #unde� +__USE_LARGEFILE64 + + +108 #unde� +__USE_FILE_OFFSET64 + + +109 #unde� +__USE_BSD + + +110 #unde� +__USE_SVID + + +111 #unde� +__USE_MISC + + +112 #unde� +__USE_ATFILE + + +113 #unde� +__USE_GNU + + +114 #unde� +__USE_REENTRANT + + +115 #unde� +__USE_FORTIFY_LEVEL + + +116 #unde� +__FAVOR_BSD + + +117 #unde� +__KERNEL_STRICT_NAMES + + +121 #i�de� +_LOOSE_KERNEL_NAMES + + +122 + #__KERNEL_STRICT_NAMES + + + ) + +126 + #__USE_ANSI + 1 + + ) + +135 #i� +def�ed + +__GNUC__ + && def�ed +__GNUC_MINOR__ + + +136 + #__GNUC_PREREQ +( +maj +, +m� +) \ + +137 (( +__GNUC__ + << 16�+ +__GNUC_MINOR__ + >�(( +maj +�<< 16�+ ( +m� +)) + + ) + +139 + #__GNUC_PREREQ +( +maj +, +m� +�0 + + ) + +144 #i� +def�ed + +_BSD_SOURCE + && \ + +145 !( +def�ed + + g_POSIX_SOURCE + || def�ed + g_POSIX_C_SOURCE + || \ + +146 +def�ed + + g_XOPEN_SOURCE + || def�ed + g_XOPEN_SOURCE_EXTENDED + || \ + +147 +def�ed + + g_GNU_SOURCE + || def�ed + g_SVID_SOURCE +) + +148 + #__FAVOR_BSD + 1 + + ) + +152 #ifde� +_GNU_SOURCE + + +153 #unde� +_ISOC99_SOURCE + + +154 + #_ISOC99_SOURCE + 1 + + ) + +155 #unde� +_POSIX_SOURCE + + +156 + #_POSIX_SOURCE + 1 + + ) + +157 #unde� +_POSIX_C_SOURCE + + +158 + #_POSIX_C_SOURCE + 200809L + + ) + +159 #unde� +_XOPEN_SOURCE + + +160 + #_XOPEN_SOURCE + 700 + + ) + +161 #unde� +_XOPEN_SOURCE_EXTENDED + + +162 + #_XOPEN_SOURCE_EXTENDED + 1 + + ) + +163 #unde� +_LARGEFILE64_SOURCE + + +164 + #_LARGEFILE64_SOURCE + 1 + + ) + +165 #unde� +_BSD_SOURCE + + +166 + #_BSD_SOURCE + 1 + + ) + +167 #unde� +_SVID_SOURCE + + +168 + #_SVID_SOURCE + 1 + + ) + +169 #unde� +_ATFILE_SOURCE + + +170 + #_ATFILE_SOURCE + 1 + + ) + +175 #i�(! +def�ed + +__STRICT_ANSI__ + && !def�ed +_ISOC99_SOURCE + && \ + +176 ! +def�ed + + g_POSIX_SOURCE + && !def�ed + g_POSIX_C_SOURCE + && \ + +177 ! +def�ed + + g_XOPEN_SOURCE + && !def�ed + g_XOPEN_SOURCE_EXTENDED + && \ + +178 ! +def�ed + + g_BSD_SOURCE + && !def�ed + g_SVID_SOURCE +) + +179 + #_BSD_SOURCE + 1 + + ) + +180 + #_SVID_SOURCE + 1 + + ) + +187 #i�( +def�ed + +_ISOC99_SOURCE + || def�ed +_ISOC9X_SOURCE + \ + +188 || ( +def�ed + + g__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L)) + +189 + #__USE_ISOC99 + 1 + + ) + +193 #i�( +def�ed + +_ISOC99_SOURCE + || def�ed +_ISOC9X_SOURCE + \ + +194 || ( +def�ed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199409L)) + +195 + #__USE_ISOC95 + 1 + + ) + +200 #i�((! +def�ed + +__STRICT_ANSI__ + || ( +_XOPEN_SOURCE + - 0) >= 500) && \ + +201 ! +def�ed + +_POSIX_SOURCE + && !def�ed +_POSIX_C_SOURCE +) + +202 + #_POSIX_SOURCE + 1 + + ) + +203 #i� +def�ed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 500 + +204 + #_POSIX_C_SOURCE + 2 + + ) + +205 #�i� +def�ed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 600 + +206 + #_POSIX_C_SOURCE + 199506L + + ) + +207 #�i� +def�ed + +_XOPEN_SOURCE + && (_XOPEN_SOURCE - 0) < 700 + +208 + #_POSIX_C_SOURCE + 200112L + + ) + +210 + #_POSIX_C_SOURCE + 200809L + + ) + +212 + #__USE_POSIX_IMPLICITLY + 1 + + ) + +215 #i� +def�ed + +_POSIX_SOURCE + || +_POSIX_C_SOURCE + >�1 || def�ed +_XOPEN_SOURCE + + +216 + #__USE_POSIX + 1 + + ) + +219 #i� +def�ed + +_POSIX_C_SOURCE + && _POSIX_C_SOURCE >�2 || def�ed +_XOPEN_SOURCE + + +220 + #__USE_POSIX2 + 1 + + ) + +223 #i�( +_POSIX_C_SOURCE + - 0) >= 199309L + +224 + #__USE_POSIX199309 + 1 + + ) + +227 #i�( +_POSIX_C_SOURCE + - 0) >= 199506L + +228 + #__USE_POSIX199506 + 1 + + ) + +231 #i�( +_POSIX_C_SOURCE + - 0) >= 200112L + +232 + #__USE_XOPEN2K + 1 + + ) + +233 #unde� +__USE_ISOC99 + + +234 + #__USE_ISOC99 + 1 + + ) + +237 #i�( +_POSIX_C_SOURCE + - 0) >= 200809L + +238 + #__USE_XOPEN2K8 + 1 + + ) + +239 #unde� +_ATFILE_SOURCE + + +240 + #_ATFILE_SOURCE + 1 + + ) + +243 #ifdef +_XOPEN_SOURCE + + +244 + #__USE_XOPEN + 1 + + ) + +245 #i�( +_XOPEN_SOURCE + - 0) >= 500 + +246 + #__USE_XOPEN_EXTENDED + 1 + + ) + +247 + #__USE_UNIX98 + 1 + + ) + +248 #unde� +_LARGEFILE_SOURCE + + +249 + #_LARGEFILE_SOURCE + 1 + + ) + +250 #i�( +_XOPEN_SOURCE + - 0) >= 600 + +251 #i�( +_XOPEN_SOURCE + - 0) >= 700 + +252 + #__USE_XOPEN2K8 + 1 + + ) + +254 + #__USE_XOPEN2K + 1 + + ) + +255 #unde� +__USE_ISOC99 + + +256 + #__USE_ISOC99 + 1 + + ) + +259 #ifde� +_XOPEN_SOURCE_EXTENDED + + +260 + #__USE_XOPEN_EXTENDED + 1 + + ) + +265 #ifde� +_LARGEFILE_SOURCE + + +266 + #__USE_LARGEFILE + 1 + + ) + +269 #ifde� +_LARGEFILE64_SOURCE + + +270 + #__USE_LARGEFILE64 + 1 + + ) + +273 #i� +def�ed + +_FILE_OFFSET_BITS + && _FILE_OFFSET_BITS == 64 + +274 + #__USE_FILE_OFFSET64 + 1 + + ) + +277 #i� +def�ed + +_BSD_SOURCE + || def�ed +_SVID_SOURCE + + +278 + #__USE_MISC + 1 + + ) + +281 #ifdef +_BSD_SOURCE + + +282 + #__USE_BSD + 1 + + ) + +285 #ifdef +_SVID_SOURCE + + +286 + #__USE_SVID + 1 + + ) + +289 #ifdef +_ATFILE_SOURCE + + +290 + #__USE_ATFILE + 1 + + ) + +293 #ifdef +_GNU_SOURCE + + +294 + #__USE_GNU + 1 + + ) + +297 #i� +def�ed + +_REENTRANT + || def�ed +_THREAD_SAFE + + +298 + #__USE_REENTRANT + 1 + + ) + +301 #i� +def�ed + +_FORTIFY_SOURCE + && _FORTIFY_SOURCE > 0 \ + +302 && +__GNUC_PREREQ + (4, 1�&& +def�ed + + g__OPTIMIZE__ + && __OPTIMIZE__ > 0 + +303 #i� +_FORTIFY_SOURCE + > 1 + +304 + #__USE_FORTIFY_LEVEL + 2 + + ) + +306 + #__USE_FORTIFY_LEVEL + 1 + + ) + +309 + #__USE_FORTIFY_LEVEL + 0 + + ) + +313 + ~<b�s/�edefs.h +> + +316 + #__STDC_ISO_10646__ + 200009L + + ) + +324 #unde� +__GNU_LIBRARY__ + + +325 + #__GNU_LIBRARY__ + 6 + + ) + +329 + #__GLIBC__ + 2 + + ) + +330 + #__GLIBC_MINOR__ + 11 + + ) + +332 + #__GLIBC_PREREQ +( +maj +, +m� +) \ + +333 (( +__GLIBC__ + << 16�+ +__GLIBC_MINOR__ + >�(( +maj +�<< 16�+ ( +m� +)) + + ) + +336 #i� +def�ed + +__GNUC__ + \ + +337 || ( +def�ed + + g__PGI + && def�ed + g__i386__ + ) \ + +338 || ( +def�ed + + g__INTEL_COMPILER + && (def�ed + g__i386__ + || def�ed + g__�64__ +)) \ + +339 || ( +def�ed + + g__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L) + +340 + #__GLIBC_HAVE_LONG_LONG + 1 + + ) + +344 #i�de� +__ASSEMBLER__ + + +345 #i�de� +_SYS_CDEFS_H + + +346 + ~<sys/cdefs.h +> + +351 #i� +def�ed + +__USE_FILE_OFFSET64 + && !def�ed +__REDIRECT + + +352 + #__USE_LARGEFILE + 1 + + ) + +353 + #__USE_LARGEFILE64 + 1 + + ) + +359 #i� +__GNUC_PREREQ + (2, 7�&& +def�ed + +__OPTIMIZE__ + \ + +360 && ! +def�ed + + g__OPTIMIZE_SIZE__ + && !def�ed + g__NO_INLINE__ + \ + +361 && +def�ed + + g__ex��_�l�e + + +362 + #__USE_EXTERN_INLINES + 1 + + ) + +367 #i� +__GNUC_PREREQ + (2, 7�&& +def�ed + +__OPTIMIZE__ + \ + +368 && ( +def�ed + + g_LIBC + || !def�ed + g__OPTIMIZE_SIZE__ +�&& !def�ed + g__NO_INLINE__ + \ + +369 && +def�ed + + g__ex��_�l�e + + +370 + #__USE_EXTERN_INLINES_IN_LIBC + 1 + + ) + +378 + ~<gnu/�ubs.h +> + + @/usr/include/getopt.h + +21 #i�de� +_GETOPT_H + + +23 #i�de� +__�ed_g��t + + +24 + #_GETOPT_H + 1 + + ) + +34 #i�! +def�ed + +__GNU_LIBRARY__ + + +35 + ~<�y�.h +> + +38 #i�de� +__THROW + + +39 #i�de� +__GNUC_PREREQ + + +40 + #__GNUC_PREREQ +( +maj +, +m� +�(0) + + ) + +42 #i� +def�ed + +__�lu�lus + && +__GNUC_PREREQ + (2,8) + +43 + #__THROW + + `throw + () + + ) + +45 + #__THROW + + + ) + +49 #ifdef +__�lu�lus + + +59
* +ݏrg +; + +73
+�t�d +; + +78
+� +; + +82
+�t�t +; + +84 #i�de� +__�ed_g��t + + +106 + s�ti� + + +108 cڡ * + g�me +; + +111 + ghas_�g +; + +112 * + g�ag +; + +113 + gv� +; + +118 + #no_�gum�t + 0 + + ) + +119 + #�qu�ed_�gum�t + 1 + + ) + +120 + #�tiڮ_�gum�t + 2 + + ) + +148 #ifde� +__GNU_LIBRARY__ + + +152
+g��t + ( +___�gc +, *cڡ * +___�gv +, cڡ * +__sh�t�ts +) + +153 +__THROW +; + +155 #i� +def�ed + +__�ed_g��t + && def�ed +__USE_POSIX2 + \ + +156 && ! +def�ed + + g__USE_POSIX_IMPLICITLY + && !def�ed + g__USE_GNU + + +160 #ifde� +__REDIRECT + + +161
+__REDIRECT + ( +g��t +, ( +___�gc +, *cڡ * +___�gv +, + +162 cڡ * +__sh�t�ts +), + +163 +__posix_g��t +� +__THROW +; + +165
+__posix_g��t + ( +___�gc +, *cڡ * +___�gv +, + +166 cڡ * +__sh�t�ts +� +__THROW +; + +167 + #g��t + +__posix_g��t + + + ) + +171
+g��t + (); + +174 #i�de� +__�ed_g��t + + +175
+g��t_l�g + ( +___�gc +, *cڡ * +___�gv +, + +176 cڡ * +__sh�t�ts +, + +177 cڡ +�ti� + * +__l�g�ts +, * +__l�g�d +) + +178 +__THROW +; + +179
+g��t_l�g_�ly + ( +___�gc +, *cڡ * +___�gv +, + +180 cڡ * +__sh�t�ts +, + +181 cڡ +�ti� + * +__l�g�ts +, * +__l�g�d +) + +182 +__THROW +; + +186 #ifdef +__�lu�lus + + +191 #unde� +__�ed_g��t + + + @/usr/include/libio.h + +29 #i�de� +_IO_STDIO_H + + +30 + #_IO_STDIO_H + + + ) + +32 + ~<_G_c�fig.h +> + +34 + #_IO_pos_t + +_G_�os_t + + + ) + +35 + #_IO_�os_t + +_G_�os_t + + + ) + +36 + #_IO_�os64_t + +_G_�os64_t + + + ) + +37 + #_IO_size_t + +_G_size_t + + + ) + +38 + #_IO_ssize_t + +_G_ssize_t + + + ) + +39 + #_IO_off_t + +_G_off_t + + + ) + +40 + #_IO_off64_t + +_G_off64_t + + + ) + +41 + #_IO_pid_t + +_G_pid_t + + + ) + +42 + #_IO_uid_t + +_G_uid_t + + + ) + +43 + #_IO_ic�v_t + +_G_ic�v_t + + + ) + +44 + #_IO_HAVE_SYS_WAIT + +_G_HAVE_SYS_WAIT + + + ) + +45 + #_IO_HAVE_ST_BLKSIZE + +_G_HAVE_ST_BLKSIZE + + + ) + +46 + #_IO_BUFSIZ + +_G_BUFSIZ + + + ) + +47 + #_IO_va_li� + +_G_va_li� + + + ) + +48 + #_IO_w�t_t + +_G_w�t_t + + + ) + +50 #ifde� +_G_NEED_STDARG_H + + +52 + #__�ed___va_li� + + + ) + +53 + ~<�d�g.h +> + +54 #ifde� +__GNUC_VA_LIST + + +55 #unde� +_IO_va_li� + + +56 + #_IO_va_li� + +__gnuc_va_li� + + + ) + +60 #i�de� +__P + + +61 #i� +_G_HAVE_SYS_CDEFS + + +62 + ~<sys/cdefs.h +> + +64 #ifde� +__STDC__ + + +65 + #__P +( +p +� + ) +p + +66 + #__PMT +( +p +� + ) +p + +68 + #__P +( +p +�() + + ) + +69 + #__PMT +( +p +�() + + ) + +75 #i�de� +_PARAMS + + +76 + #_PARAMS +( +��os +� + `__P +�r�os) + + ) + +79 #i�de� +__STDC__ + + +81 cڡ + + ) + +84 + #_IO_UNIFIED_JUMPTABLES + 1 + + ) + +85 #i�de� +_G_HAVE_PRINTF_FP + + +86 + #_IO_USE_DTOA + 1 + + ) + +89 #i�de� +EOF + + +90 + #EOF + (-1) + + ) + +92 #i�de� +NULL + + +93 #i� +def�ed + +__GNUG__ + && \ + +94 ( + g__GNUC__ + > 2 || (__GNUC__ =�2 && +__GNUC_MINOR__ + >= 8)) + +95 + #NULL + ( +__nu� +) + + ) + +97 #i�! +def�ed +( +__�lu�lus +) + +98 + #NULL + ((*)0) + + ) + +100 + #NULL + (0) + + ) + +105 + #_IOS_INPUT + 1 + + ) + +106 + #_IOS_OUTPUT + 2 + + ) + +107 + #_IOS_ATEND + 4 + + ) + +108 + #_IOS_APPEND + 8 + + ) + +109 + #_IOS_TRUNC + 16 + + ) + +110 + #_IOS_NOCREATE + 32 + + ) + +111 + #_IOS_NOREPLACE + 64 + + ) + +112 + #_IOS_BIN + 128 + + ) + +120 + #_IO_MAGIC + 0xFBAD0000 + + ) + +121 + #_OLD_STDIO_MAGIC + 0xFABC0000 + + ) + +122 + #_IO_MAGIC_MASK + 0xFFFF0000 + + ) + +123 + #_IO_USER_BUF + 1 + + ) + +124 + #_IO_UNBUFFERED + 2 + + ) + +125 + #_IO_NO_READS + 4 + + ) + +126 + #_IO_NO_WRITES + 8 + + ) + +127 + #_IO_EOF_SEEN + 0x10 + + ) + +128 + #_IO_ERR_SEEN + 0x20 + + ) + +129 + #_IO_DELETE_DONT_CLOSE + 0x40 + + ) + +130 + #_IO_LINKED + 0x80 + + ) + +131 + #_IO_IN_BACKUP + 0x100 + + ) + +132 + #_IO_LINE_BUF + 0x200 + + ) + +133 + #_IO_TIED_PUT_GET + 0x400 + + ) + +134 + #_IO_CURRENTLY_PUTTING + 0x800 + + ) + +135 + #_IO_IS_APPENDING + 0x1000 + + ) + +136 + #_IO_IS_FILEBUF + 0x2000 + + ) + +137 + #_IO_BAD_SEEN + 0x4000 + + ) + +138 + #_IO_USER_LOCK + 0x8000 + + ) + +140 + #_IO_FLAGS2_MMAP + 1 + + ) + +141 + #_IO_FLAGS2_NOTCANCEL + 2 + + ) + +142 #ifde� +_LIBC + + +143 + #_IO_FLAGS2_FORTIFY + 4 + + ) + +145 + #_IO_FLAGS2_USER_WBUF + 8 + + ) + +146 #ifde� +_LIBC + + +147 + #_IO_FLAGS2_SCANF_STD + 16 + + ) + +151 + #_IO_SKIPWS + 01 + + ) + +152 + #_IO_LEFT + 02 + + ) + +153 + #_IO_RIGHT + 04 + + ) + +154 + #_IO_INTERNAL + 010 + + ) + +155 + #_IO_DEC + 020 + + ) + +156 + #_IO_OCT + 040 + + ) + +157 + #_IO_HEX + 0100 + + ) + +158 + #_IO_SHOWBASE + 0200 + + ) + +159 + #_IO_SHOWPOINT + 0400 + + ) + +160 + #_IO_UPPERCASE + 01000 + + ) + +161 + #_IO_SHOWPOS + 02000 + + ) + +162 + #_IO_SCIENTIFIC + 04000 + + ) + +163 + #_IO_FIXED + 010000 + + ) + +164 + #_IO_UNITBUF + 020000 + + ) + +165 + #_IO_STDIO + 040000 + + ) + +166 + #_IO_DONT_CLOSE + 0100000 + + ) + +167 + #_IO_BOOLALPHA + 0200000 + + ) + +170 +_IO_jump_t +; + g_IO_FILE +; + +173 #ifde� +_IO_MTSAFE_IO + + +174 #i� +def�ed + +__GLIBC__ + && __GLIBC__ >= 2 + +175 + ~<b�s/�dio-lock.h +> + +180 + t_IO_lock_t +; + +186 + s_IO_m�k� + { + +187 +_IO_m�k� + * + m_�xt +; + +188 +_IO_FILE + * + m_sbuf +; + +192 + m_pos +; + +194 +�t_��ampos +( +��ampos + +� +�{ + m_�os + = sp; } + +195 +�t_off�t +( +off�t +�{ + m_pos + = off�t; + m_�os + = ( +��ampos +)(-2); } + +196 + mpublic +: + +197 +��amm�k� +( +��ambuf + * +sb +); + +198 ~ +��amm�k� +(); + +199 +�v�g +(�{ + m_�os + == -2; } + +200 +d�� +( +��amm�k� +&); + +201 +d�� +(); + +206 + e__codecvt_�su� + + +208 + m__codecvt_ok +, + +209 + m__codecvt_���l +, + +210 + m__codecvt_�r� +, + +211 + m__codecvt_noc�v + + +214 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +217 + s_IO_codecvt + + +219 (* + m__codecvt_de�r +�( + m_IO_codecvt + *); + +220 +__codecvt_�su� + (* +__codecvt_do_out +�( + m_IO_codecvt + *, + +221 + m__mb��e_t + *, + +222 cڡ + mwch�_t + *, + +223 cڡ + mwch�_t + *, + +224 cڡ + mwch�_t + **, *, + +226 +__codecvt_�su� + (* +__codecvt_do_unshi� +�( + m_IO_codecvt + *, + +227 + m__mb��e_t + *, *, + +229 +__codecvt_�su� + (* +__codecvt_do_� +�( + m_IO_codecvt + *, + +230 + m__mb��e_t + *, + +232 cڡ **, + mwch�_t + *, + +233 + mwch�_t + *, wchar_t **); + +234 (* + m__codecvt_do_�cod�g +�( + m_IO_codecvt + *); + +235 (* + m__codecvt_do_�ways_noc�v +�( + m_IO_codecvt + *); + +236 (* + m__codecvt_do_�ngth +�( + m_IO_codecvt + *, + m__mb��e_t + *, + +237 cڡ *, cڡ *, + m_IO_size_t +); + +238 (* + m__codecvt_do_max_�ngth +�( + m_IO_codecvt + *); + +240 +_IO_ic�v_t + + m__cd_� +; + +241 +_IO_ic�v_t + + m__cd_out +; + +245 + s_IO_wide_d�a + + +247 +wch�_t + * + m_IO_�ad_�r +; + +248 +wch�_t + * + m_IO_�ad_�d +; + +249 +wch�_t + * + m_IO_�ad_ba� +; + +250 +wch�_t + * + m_IO_wr�e_ba� +; + +251 +wch�_t + * + m_IO_wr�e_�r +; + +252 +wch�_t + * + m_IO_wr�e_�d +; + +253 +wch�_t + * + m_IO_buf_ba� +; + +254 +wch�_t + * + m_IO_buf_�d +; + +256 +wch�_t + * + m_IO_�ve_ba� +; + +257 +wch�_t + * + m_IO_backup_ba� +; + +259 +wch�_t + * + m_IO_�ve_�d +; + +261 +__mb��e_t + + m_IO_��e +; + +262 +__mb��e_t + + m_IO_ϡ_��e +; + +263 +_IO_codecvt + + m_codecvt +; + +265 +wch�_t + + m_sh�tbuf +[1]; + +267 cڡ +_IO_jump_t + * + m_wide_v�b� +; + +271 + s_IO_FILE + { + +272 + m_�ags +; + +273 + #_IO_f�e_�ags + +_�ags + + + ) + +277 * + m_IO_�ad_�r +; + +278 * + m_IO_�ad_�d +; + +279 * + m_IO_�ad_ba� +; + +280 * + m_IO_wr�e_ba� +; + +281 * + m_IO_wr�e_�r +; + +282 * + m_IO_wr�e_�d +; + +283 * + m_IO_buf_ba� +; + +284 * + m_IO_buf_�d +; + +286 * + m_IO_�ve_ba� +; + +287 * + m_IO_backup_ba� +; + +288 * + m_IO_�ve_�d +; + +290 +_IO_m�k� + * + m_m�k�s +; + +292 +_IO_FILE + * + m_cha� +; + +294 + m_f��o +; + +296 + m_blksize +; + +298 + m_�ags2 +; + +300 +_IO_off_t + + m_�d_off�t +; + +302 + #__HAVE_COLUMN + + + ) + +304 + m_cur_c�umn +; + +305 sig�d + m_v�b�_off�t +; + +306 + m_sh�tbuf +[1]; + +310 +_IO_lock_t + * + m_lock +; + +311 #ifde� +_IO_USE_OLD_IO_FILE + + +314 + s_IO_FILE_com��e + + +316 +_IO_FILE + + m_f�e +; + +318 #i� +def�ed + +_G_IO_IO_FILE_VERSION + && _G_IO_IO_FILE_VERSION == 0x20001 + +319 +_IO_off64_t + + m_off�t +; + +320 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +322 +_IO_codecvt + * + m_codecvt +; + +323 +_IO_wide_d�a + * + m_wide_d�a +; + +324 +_IO_FILE + * + m_䓻s_li� +; + +325 * + m_䓻s_buf +; + +326 +size_t + + m_䓻s_size +; + +328 * + m__�d1 +; + +329 * + m__�d2 +; + +330 * + m__�d3 +; + +331 * + m__�d4 +; + +332 +size_t + + m__�d5 +; + +334 + m_mode +; + +336 + m_unu�d2 +[15 * (�- 4 * (*�- ( +size_t +)]; + +340 #i�de� +__�lu�lus + + +341 +_IO_FILE + + t_IO_FILE +; + +344 + g_IO_FILE_�us +; + +346
+_IO_FILE_�us + +_IO_2_1_�d�_ +; + +347
+_IO_FILE_�us + +_IO_2_1_�dout_ +; + +348
+_IO_FILE_�us + +_IO_2_1_�d�r_ +; + +349 #i�de� +_LIBC + + +350 + #_IO_�d� + (( +_IO_FILE +*)(& +_IO_2_1_�d�_ +)) + + ) + +351 + #_IO_�dout + (( +_IO_FILE +*)(& +_IO_2_1_�dout_ +)) + + ) + +352 + #_IO_�d�r + (( +_IO_FILE +*)(& +_IO_2_1_�d�r_ +)) + + ) + +354
+_IO_FILE + * +_IO_�d� + +��ibu�_hidd� +; + +355
+_IO_FILE + * +_IO_�dout + +��ibu�_hidd� +; + +356
+_IO_FILE + * +_IO_�d�r + +��ibu�_hidd� +; + +364 +__ssize_t + + t__io_�ad_� + (* + t__cook� +, * + t__buf +, + tsize_t + + t__nby�s +); + +372 +__ssize_t + + t__io_wr�e_� + (* + t__cook� +, + t__cڡ + * + t__buf +, + +373 + tsize_t + + t__n +); + +381 + t__io_�ek_� + (* + t__cook� +, + t_IO_off64_t + * + t__pos +, + t__w +); + +384 + t__io_�o�_� + (* + t__cook� +); + +387 #ifde� +_GNU_SOURCE + + +389 +__io_�ad_� + + tcook�_�ad_fun�i�_t +; + +390 +__io_wr�e_� + + tcook�_wr�e_fun�i�_t +; + +391 +__io_�ek_� + + tcook�_�ek_fun�i�_t +; + +392 +__io_�o�_� + + tcook�_�o�_fun�i�_t +; + +397 +__io_�ad_� + * + m�ad +; + +398 +__io_wr�e_� + * + mwr�e +; + +399 +__io_�ek_� + * + m�ek +; + +400 +__io_�o�_� + * + m�o� +; + +401 } + t_IO_cook�_io_fun�i�s_t +; + +402 +_IO_cook�_io_fun�i�s_t + + tcook�_io_fun�i�s_t +; + +404 + g_IO_cook�_f�e +; + +407
+_IO_cook�_�� + ( +_IO_cook�_f�e + * +__cf�e +, +__�ad_wr�e +, + +408 * +__cook� +, +_IO_cook�_io_fun�i�s_t + +__�s +); + +412 #ifde� +__�lu�lus + + +416
+__und��ow + ( +_IO_FILE + *); + +417
+__u�ow + ( +_IO_FILE + *); + +418
+__ov��ow + ( +_IO_FILE + *, ); + +419 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +420
+_IO_w�t_t + +__wund��ow + ( +_IO_FILE + *); + +421
+_IO_w�t_t + +__wu�ow + ( +_IO_FILE + *); + +422
+_IO_w�t_t + +__wov��ow + ( +_IO_FILE + *, _IO_wint_t); + +425 #i� +__GNUC__ + >= 3 + +426 + #_IO_BE +( +ex� +, +�s +� + `__bu�t�_ex�� + (�x�),�es) + + ) + +428 + #_IO_BE +( +ex� +, +�s +��x�) + + ) + +431 + #_IO_g�c_u�ocked +( +_� +) \ + +432 ( + `_IO_BE + (( +_� +)-> +_IO_�ad_�r + >�(_�)-> +_IO_�ad_�d +, 0) \ + +433 ? + `__u�ow + ( +_� +�: *(*�(_�)-> +_IO_�ad_�r +++) + + ) + +434 + #_IO_�ekc_u�ocked +( +_� +) \ + +435 ( + `_IO_BE + (( +_� +)-> +_IO_�ad_�r + >�(_�)-> +_IO_�ad_�d +, 0) \ + +436 && + `__und��ow + ( +_� +�=� +EOF + ? EOF \ + +437 : *(*�( +_� +)-> +_IO_�ad_�r +) + + ) + +438 + #_IO_putc_u�ocked +( +_ch +, +_� +) \ + +439 ( + `_IO_BE + (( +_� +)-> +_IO_wr�e_�r + >�(_�)-> +_IO_wr�e_�d +, 0) \ + +440 ? + `__ov��ow + ( +_� +, (�( +_ch +)) \ + +441 : (�(*( +_� +)-> +_IO_wr�e_�r +++ = ( +_ch +))) + + ) + +443 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +444 + #_IO_g�wc_u�ocked +( +_� +) \ + +445 ( + `_IO_BE + (( +_� +)-> +_wide_d�a + =� +NULL + \ + +446 || (( +_� +)-> +_wide_d�a +-> +_IO_�ad_�r + \ + +447 >�( +_� +)-> +_wide_d�a +-> +_IO_�ad_�d +), 0) \ + +448 ? + `__wu�ow + ( +_� +�: ( +_IO_w�t_t +�*(_�)-> +_wide_d�a +-> +_IO_�ad_�r +++) + + ) + +449 + #_IO_putwc_u�ocked +( +_wch +, +_� +) \ + +450 ( + `_IO_BE + (( +_� +)-> +_wide_d�a + =� +NULL + \ + +451 || (( +_� +)-> +_wide_d�a +-> +_IO_wr�e_�r + \ + +452 >�( +_� +)-> +_wide_d�a +-> +_IO_wr�e_�d +), 0) \ + +453 ? + `__wov��ow + ( +_� +, +_wch +) \ + +454 : ( +_IO_w�t_t +�(*( +_� +)-> +_wide_d�a +-> +_IO_wr�e_�r +++ = ( +_wch +))) + + ) + +457 + #_IO_�of_u�ocked +( +__� +�(((__�)-> +_�ags + & +_IO_EOF_SEEN +�!�0) + + ) + +458 + #_IO_��_u�ocked +( +__� +�(((__�)-> +_�ags + & +_IO_ERR_SEEN +�!�0) + + ) + +460
+_IO_g�c + ( +_IO_FILE + * +__� +); + +461
+_IO_putc + ( +__c +, +_IO_FILE + * +__� +); + +462
+_IO_�of + ( +_IO_FILE + * +__� +� +__THROW +; + +463
+_IO_�� + ( +_IO_FILE + * +__� +� +__THROW +; + +465
+_IO_�ekc_locked + ( +_IO_FILE + * +__� +); + +468 + #_IO_PENDING_OUTPUT_COUNT +( +_� +) \ + +469 (( +_� +)-> +_IO_wr�e_�r + - (_�)-> +_IO_wr�e_ba� +) + + ) + +471
+_IO_�ockf�e + ( +_IO_FILE + *� +__THROW +; + +472
+_IO_fu�ockf�e + ( +_IO_FILE + *� +__THROW +; + +473
+_IO_�rylockf�e + ( +_IO_FILE + *� +__THROW +; + +475 #ifde� +_IO_MTSAFE_IO + + +476 + #_IO_�ekc +( +_� +� + `_IO_�ekc_locked + (_�) + + ) + +477 + #_IO_�ockf�e +( +_� +) \ + +478 i�((( +_� +)-> +_�ags + & +_IO_USER_LOCK +�=�0� + `_IO_�ockf�e + (_�) + + ) + +479 + #_IO_fu�ockf�e +( +_� +) \ + +480 i�((( +_� +)-> +_�ags + & +_IO_USER_LOCK +�=�0� + `_IO_fu�ockf�e + (_�) + + ) + +482 + #_IO_�ekc +( +_� +� + `_IO_�ekc_u�ocked + (_�) + + ) + +483 + #_IO_�ockf�e +( +_� +� + + ) + +484 + #_IO_fu�ockf�e +( +_� +� + + ) + +485 + #_IO_�rylockf�e +( +_� +� + + ) + +486 + #_IO_��nup_�gi�_��t +( +_f� +, +_� +� + + ) + +487 + #_IO_��nup_�gi�_�d +( +_Do� +� + + ) + +490
+_IO_vfs�nf + ( +_IO_FILE + * +__��ri� +, const * __restrict, + +491 +_IO_va_li� +, * +__��ri� +); + +492
+_IO_v�r�tf + ( +_IO_FILE + * +__��ri� +, const *__restrict, + +493 +_IO_va_li� +); + +494
+_IO_ssize_t + +_IO_�dn + ( +_IO_FILE + *, , _IO_ssize_t); + +495
+_IO_size_t + +_IO_sg�n + ( +_IO_FILE + *, *, _IO_size_t); + +497
+_IO_off64_t + +_IO_�ekoff + ( +_IO_FILE + *, _IO_off64_t, , ); + +498
+_IO_off64_t + +_IO_�ekpos + ( +_IO_FILE + *, _IO_off64_t, ); + +500
+_IO_�_backup_�� + ( +_IO_FILE + *� +__THROW +; + +502 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +503
+_IO_w�t_t + +_IO_g�wc + ( +_IO_FILE + * +__� +); + +504
+_IO_w�t_t + +_IO_putwc + ( +wch�_t + +__wc +, +_IO_FILE + * +__� +); + +505
+_IO_fwide + ( +_IO_FILE + * +__� +, +__mode +� +__THROW +; + +506 #i� +__GNUC__ + >= 2 + +509 #i� +def�ed + +_LIBC + && def�ed +SHARED + + +510 + ~<shlib-com�t.h +> + +511 #i� +SHLIB_COMPAT + ( +libc +, +GLIBC_2_0 +, +GLIBC_2_1 +) + +512 + #_IO_fwide_maybe_�com�tib� + \ + +513 ( + `__bu�t�_ex�� + (& +_IO_�d�_u�d + =� +NULL +, 0)) + + ) + +514
cڡ +_IO_�d�_u�d +; + +515 +w�k_ex�� + ( +_IO_�d�_u�d +); + +518 #i�de� +_IO_fwide_maybe_�com�tib� + + +519 + #_IO_fwide_maybe_�com�tib� + (0) + + ) + +523 + #_IO_fwide +( +__� +, +__mode +) \ + +524 ({ +__�su� + = ( +__mode +); \ + +525 i�( +__�su� + < 0 && ! +_IO_fwide_maybe_�com�tib� +) \ + +527 i�(( +__� +)-> +_mode + == 0) \ + +529 ( +__� +)-> +_mode + = -1; \ + +530 +__�su� + = ( +__� +)-> +_mode +; \ + +532 i�( + `__bu�t�_cڡ�t_p + ( +__mode +) && (__mode) == 0) \ + +533 +__�su� + = +_IO_fwide_maybe_�com�tib� + ? -1 : ( +__� +)-> +_mode +; \ + +535 +__�su� + = + `_IO_fwide + ( +__� +, __result); \ + +536 +__�su� +; }) + + ) + +539
+_IO_vfws�nf + ( +_IO_FILE + * +__��ri� +, cڡ +wch�_t + * __restrict, + +540 +_IO_va_li� +, * +__��ri� +); + +541
+_IO_vfw��tf + ( +_IO_FILE + * +__��ri� +, cڡ +wch�_t + *__restrict, + +542 +_IO_va_li� +); + +543
+_IO_ssize_t + +_IO_w�dn + ( +_IO_FILE + *, +w�t_t +, _IO_ssize_t); + +544
+_IO_�_wbackup_�� + ( +_IO_FILE + *� +__THROW +; + +547 #ifde� +__LDBL_COMPAT + + +548 + ~<b�s/libio-ldbl.h +> + +551 #ifde� +__�lu�lus + + + @/usr/include/xlocale.h + +21 #i�de� +_XLOCALE_H + + +22 + #_XLOCALE_H + 1 + + ) + +28 + s__lo��_�ru� + + +31 +lo��_d�a + * + m__lo��s +[13]; + +34 cڡ * + m__�y�_b +; + +35 cڡ * + m__�y�_t�ow� +; + +36 cڡ * + m__�y�_tou�� +; + +39 cڡ * + m__�mes +[13]; + +40 } * + t__lo��_t +; + +43 +__lo��_t + + tlo��_t +; + + @/usr/include/_G_config.h + +4 #i�de� +_G_c�fig_h + + +5 + #_G_c�fig_h + 1 + + ) + +9 + ~<b�s/ty�s.h +> + +10 + #__�ed_size_t + + + ) + +11 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +12 + #__�ed_wch�_t + + + ) + +14 + #__�ed_NULL + + + ) + +15 + ~<�ddef.h +> + +16 + #__�ed_mb��e_t + + + ) + +17 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +18 + #__�ed_w�t_t + + + ) + +20 + ~<wch�.h +> + +21 + #_G_size_t + +size_t + + + ) + +24 +__off_t + + m__pos +; + +25 +__mb��e_t + + m__��e +; + +26 } + t_G_�os_t +; + +29 +__off64_t + + m__pos +; + +30 +__mb��e_t + + m__��e +; + +31 } + t_G_�os64_t +; + +32 + #_G_ssize_t + +__ssize_t + + + ) + +33 + #_G_off_t + +__off_t + + + ) + +34 + #_G_off64_t + +__off64_t + + + ) + +35 + #_G_pid_t + +__pid_t + + + ) + +36 + #_G_uid_t + +__uid_t + + + ) + +37 + #_G_wch�_t + +wch�_t + + + ) + +38 + #_G_w�t_t + +w�t_t + + + ) + +39 + #_G_��64 + +��64 + + + ) + +40 #i� +def�ed + +_LIBC + || def�ed +_GLIBCPP_USE_WCHAR_T + + +41 + ~<gc�v.h +> + +44 +__gc�v_�fo + + m__cd +; + +47 +__gc�v_�fo + + m__cd +; + +48 +__gc�v_��_d�a + + m__d�a +; + +49 } + m__comb�ed +; + +50 } + t_G_ic�v_t +; + +53 + t_G_�t16_t + + t__��ibu�__ + (( + t__mode__ + ( + t__HI__ +))); + +54 + t_G_�t32_t + + t__��ibu�__ + (( + t__mode__ + ( + t__SI__ +))); + +55 + t_G_u�t16_t + + t__��ibu�__ + (( + t__mode__ + ( + t__HI__ +))); + +56 + t_G_u�t32_t + + t__��ibu�__ + (( + t__mode__ + ( + t__SI__ +))); + +58 + #_G_HAVE_BOOL + 1 + + ) + +62 + #_G_HAVE_ATEXIT + 1 + + ) + +63 + #_G_HAVE_SYS_CDEFS + 1 + + ) + +64 + #_G_HAVE_SYS_WAIT + 1 + + ) + +65 + #_G_NEED_STDARG_H + 1 + + ) + +66 + #_G_va_li� + +__gnuc_va_li� + + + ) + +68 + #_G_HAVE_PRINTF_FP + 1 + + ) + +69 + #_G_HAVE_MMAP + 1 + + ) + +70 + #_G_HAVE_MREMAP + 1 + + ) + +71 + #_G_HAVE_LONG_DOUBLE_IO + 1 + + ) + +72 + #_G_HAVE_IO_FILE_OPEN + 1 + + ) + +73 + #_G_HAVE_IO_GETLINE_INFO + 1 + + ) + +75 + #_G_IO_IO_FILE_VERSION + 0x20001 + + ) + +77 + #_G_OPEN64 + +__ݒ64 + + + ) + +78 + #_G_LSEEK64 + +__l�ek64 + + + ) + +79 + #_G_MMAP64 + +__mm�64 + + + ) + +80 + #_G_FSTAT64 +( +fd +, +buf +� + `__fx��64 + ( +_STAT_VER +, fd, buf) + + ) + +83 + #_G_HAVE_ST_BLKSIZE + + `def�ed + ( +_STATBUF_ST_BLKSIZE +) + + ) + +85 + #_G_BUFSIZ + 8192 + + ) + +88 + #_G_NAMES_HAVE_UNDERSCORE + 0 + + ) + +89 + #_G_VTABLE_LABEL_HAS_LENGTH + 1 + + ) + +90 + #_G_USING_THUNKS + 1 + + ) + +91 + #_G_VTABLE_LABEL_PREFIX + "__vt_" + + ) + +92 + #_G_VTABLE_LABEL_PREFIX_ID + +__vt_ + + + ) + +95 #i� +def�ed + +__�lu�lus + || def�ed +__STDC__ + + +96 + #_G_ARGS +( +ARGLIST +� + ) +ARGLIST + +98 + #_G_ARGS +( +ARGLIST +�() + + ) + + @/usr/include/bits/libio-ldbl.h + +20 #i�de� +_IO_STDIO_H + + +24 + $__LDBL_REDIR_DECL + ( +_IO_vfs�nf +) + +25 + `__LDBL_REDIR_DECL + ( +_IO_v�r�tf +) + + @/usr/include/bits/predefs.h + +19 #i�de� +_FEATURES_H + + +23 #i�de� +_PREDEFS_H + + +24 + #_PREDEFS_H + + + ) + +27 + #__STDC_IEC_559__ + 1 + + ) + +28 + #__STDC_IEC_559_COMPLEX__ + 1 + + ) + + @/usr/include/bits/stdio-lock.h + +20 #i�de� +_BITS_STDIO_LOCK_H + + +21 + #_BITS_STDIO_LOCK_H + 1 + + ) + +23 + ~<b�s/libc-lock.h +> + +24 + ~<low�v�lock.h +> + +28 + #_IO_lock_�ex�nsive + 1 + + ) + +30 �ru� { + mlock +; + m�t +; * + mow�r +; } + t_IO_lock_t +; + +32 + #_IO_lock_���liz� + { +LLL_LOCK_INITIALIZER +, 0, +NULL + } + + ) + +34 + #_IO_lock_�� +( +_�me +) \ + +35 (( +_�me +��( +_IO_lock_t +� +_IO_lock_���liz� + , 0) + + ) + +37 + #_IO_lock_f�i +( +_�me +) \ + +38 ((�0) + + ) + +40 + #_IO_lock_lock +( +_�me +) \ + +42 * +__�lf + = +THREAD_SELF +; \ + +43 i�(( +_�me +). +ow�r + !� +__�lf +) \ + +45 + `�l_lock + (( +_�me +). +lock +, +LLL_PRIVATE +); \ + +46 ( +_�me +). +ow�r + = +__�lf +; \ + +48 ++( +_�me +). +�t +; \ + +49 } 0) + + ) + +51 + #_IO_lock_�ylock +( +_�me +) \ + +53 +__�su� + = 0; \ + +54 * +__�lf + = +THREAD_SELF +; \ + +55 i�(( +_�me +). +ow�r + !� +__�lf +) \ + +57 i�( + `�l_�ylock + (( +_�me +). +lock +) == 0) \ + +59 ( +_�me +). +ow�r + = +__�lf +; \ + +60 ( +_�me +). +�t + = 1; \ + +63 +__�su� + = +EBUSY +; \ + +66 ++( +_�me +). +�t +; \ + +67 +__�su� +; \ + +68 }) + + ) + +70 + #_IO_lock_u�ock +( +_�me +) \ + +72 i�(--( +_�me +). +�t + == 0) \ + +74 ( +_�me +). +ow�r + = +NULL +; \ + +75 + `�l_u�ock + (( +_�me +). +lock +, +LLL_PRIVATE +); \ + +77 } 0) + + ) + +81 + #_IO_��nup_�gi�_��t +( +_f� +, +_� +) \ + +82 + `__libc_��nup_�gi�_��t + ((( +_� +)-> +_�ags + & +_IO_USER_LOCK +�=�0, +_f� +, _�) + + ) + +83 + #_IO_��nup_�gi�_��t_n�rg +( +_f� +) \ + +84 + `__libc_��nup_�gi�_��t + (1, +_f� +, +NULL +) + + ) + +85 + #_IO_��nup_�gi�_�d +( +_do� +) \ + +86 + `__libc_��nup_�gi�_�d + ( +_do� +) + + ) + +88 #i� +def�ed + +_LIBC + && !def�ed +NOT_IN_libc + + +90 #ifde� +__EXCEPTIONS + + +91 + #_IO_acqu�e_lock +( +_� +) \ + +93 +_IO_FILE + * +_IO_acqu�e_lock_f�e + \ + +94 + `__��ibu�__ +(( + `��nup + ( +_IO_acqu�e_lock_f� +))) \ + +95 �( +_� +); \ + +96 + `_IO_�ockf�e + ( +_IO_acqu�e_lock_f�e +); + + ) + +97 + #_IO_acqu�e_lock_��r_�ags2 +( +_� +) \ + +99 +_IO_FILE + * +_IO_acqu�e_lock_f�e + \ + +100 + `__��ibu�__ +(( + `��nup + ( +_IO_acqu�e_lock_��r_�ags2_f� +))) \ + +101 �( +_� +); \ + +102 + `_IO_�ockf�e + ( +_IO_acqu�e_lock_f�e +); + + ) + +104 + #_IO_acqu�e_lock +( +_� +� +_IO_acqu�e_lock_�eds_ex��i�s_�ab�d + + + ) + +105 + #_IO_acqu�e_lock_��r_�ags2 +( +_� +� + `_IO_acqu�e_lock + (_�) + + ) + +107 + #_IO_��a�_lock +( +_� +�; } 0) + + ) + + @/usr/include/bits/typesizes.h + +20 #i�de� +_BITS_TYPES_H + + +24 #i�def +_BITS_TYPESIZES_H + + +25 + #_BITS_TYPESIZES_H + 1 + + ) + +30 + #__DEV_T_TYPE + +__UQUAD_TYPE + + + ) + +31 + #__UID_T_TYPE + +__U32_TYPE + + + ) + +32 + #__GID_T_TYPE + +__U32_TYPE + + + ) + +33 + #__INO_T_TYPE + +__ULONGWORD_TYPE + + + ) + +34 + #__INO64_T_TYPE + +__UQUAD_TYPE + + + ) + +35 + #__MODE_T_TYPE + +__U32_TYPE + + + ) + +36 + #__NLINK_T_TYPE + +__UWORD_TYPE + + + ) + +37 + #__OFF_T_TYPE + +__SLONGWORD_TYPE + + + ) + +38 + #__OFF64_T_TYPE + +__SQUAD_TYPE + + + ) + +39 + #__PID_T_TYPE + +__S32_TYPE + + + ) + +40 + #__RLIM_T_TYPE + +__ULONGWORD_TYPE + + + ) + +41 + #__RLIM64_T_TYPE + +__UQUAD_TYPE + + + ) + +42 + #__BLKCNT_T_TYPE + +__SLONGWORD_TYPE + + + ) + +43 + #__BLKCNT64_T_TYPE + +__SQUAD_TYPE + + + ) + +44 + #__FSBLKCNT_T_TYPE + +__ULONGWORD_TYPE + + + ) + +45 + #__FSBLKCNT64_T_TYPE + +__UQUAD_TYPE + + + ) + +46 + #__FSFILCNT_T_TYPE + +__ULONGWORD_TYPE + + + ) + +47 + #__FSFILCNT64_T_TYPE + +__UQUAD_TYPE + + + ) + +48 + #__ID_T_TYPE + +__U32_TYPE + + + ) + +49 + #__CLOCK_T_TYPE + +__SLONGWORD_TYPE + + + ) + +50 + #__TIME_T_TYPE + +__SLONGWORD_TYPE + + + ) + +51 + #__USECONDS_T_TYPE + +__U32_TYPE + + + ) + +52 + #__SUSECONDS_T_TYPE + +__SLONGWORD_TYPE + + + ) + +53 + #__DADDR_T_TYPE + +__S32_TYPE + + + ) + +54 + #__SWBLK_T_TYPE + +__SLONGWORD_TYPE + + + ) + +55 + #__KEY_T_TYPE + +__S32_TYPE + + + ) + +56 + #__CLOCKID_T_TYPE + +__S32_TYPE + + + ) + +57 + #__TIMER_T_TYPE + * + + ) + +58 + #__BLKSIZE_T_TYPE + +__SLONGWORD_TYPE + + + ) + +59 + #__FSID_T_TYPE + s�u� { +__v� +[2]; } + + ) + +60 + #__SSIZE_T_TYPE + +__SWORD_TYPE + + + ) + +63 + #__FD_SETSIZE + 1024 + + ) + + @/usr/include/bits/wordsize.h + +3 #i� +def�ed + +__x86_64__ + + +4 + #__WORDSIZE + 64 + + ) + +5 + #__WORDSIZE_COMPAT32 + 1 + + ) + +7 + #__WORDSIZE + 32 + + ) + + @/usr/include/ctype.h + +24 #i�def +_CTYPE_H + + +25 + #_CTYPE_H + 1 + + ) + +27 + ~<�u�s.h +> + +28 + ~<b�s/ty�s.h +> + +30 + g__BEGIN_DECLS + + +32 #i�de� +_ISb� + + +41 + ~<�d�n.h +> + +42 #i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +43 + #_ISb� +( +b� +�(1 << (b�)) + + ) + +45 + #_ISb� +( +b� +�((b��< 8 ? ((1 << (b�)�<< 8�: ((1 << (b�)�>> 8)) + + ) + +50 + m_ISu�� + = +_ISb� + (0), + +51 + m_ISlow� + = +_ISb� + (1), + +52 + m_IS�pha + = +_ISb� + (2), + +53 + m_ISdig� + = +_ISb� + (3), + +54 + m_ISxdig� + = +_ISb� + (4), + +55 + m_IS�a� + = +_ISb� + (5), + +56 + m_IS��t + = +_ISb� + (6), + +57 + m_ISg�ph + = +_ISb� + (7), + +58 + m_ISb�nk + = +_ISb� + (8), + +59 + m_IS��l + = +_ISb� + (9), + +60 + m_ISpun� + = +_ISb� + (10), + +61 + m_IS�num + = +_ISb� + (11) + +81
+__cڡ + ** + $__�y�_b_loc + () + +82 +__THROW + + `__��ibu�__ + (( +__cڡ +)); + +83
+__cڡ + +__�t32_t + ** + $__�y�_t�ow�_loc + () + +84 +__THROW + + `__��ibu�__ + (( +__cڡ +)); + +85
+__cڡ + +__�t32_t + ** + $__�y�_tou��_loc + () + +86 +__THROW + + `__��ibu�__ + (( +__cڡ +)); + +88 + #__is�y� +( +c +, +ty� +) \ + +89 ((* + `__�y�_b_loc + ())[(�( +c +)] & (� +ty� +) + + ) + +91 + #__i�scii +( +c +�(((c�& ~0x7f�=�0� + + ) + +92 + #__t�scii +( +c +�((c�& 0x7f� + + ) + +94 + #__ex�y� +( +�me +�
+ `�me + (� +__THROW + + + ) + +96 +__BEGIN_NAMESPACE_STD + + +102 + `__ex�y� + ( +i��um +); + +103 + `__ex�y� + ( +i��ha +); + +104 + `__ex�y� + ( +is��l +); + +105 + `__ex�y� + ( +isdig� +); + +106 + `__ex�y� + ( +i�ow� +); + +107 + `__ex�y� + ( +isg�ph +); + +108 + `__ex�y� + ( +i�r�t +); + +109 + `__ex�y� + ( +i�un� +); + +110 + `__ex�y� + ( +is�a� +); + +111 + `__ex�y� + ( +isu�� +); + +112 + `__ex�y� + ( +isxdig� +); + +116
+ $t�ow� + ( +__c +� +__THROW +; + +119
+ $tou�� + ( +__c +� +__THROW +; + +121 +__END_NAMESPACE_STD + + +125 #ifdef +__USE_ISOC99 + + +126 +__BEGIN_NAMESPACE_C99 + + +128 + `__ex�y� + ( +isb�nk +); + +130 +__END_NAMESPACE_C99 + + +133 #ifde� +__USE_GNU + + +135
+ $is�y� + ( +__c +, +__mask +� +__THROW +; + +138 #i� +def�ed + +__USE_SVID + || def�ed +__USE_MISC + || def�ed +__USE_XOPEN + + +142
+ $i�scii + ( +__c +� +__THROW +; + +146
+ $t�scii + ( +__c +� +__THROW +; + +150 + `__ex�y� + ( +_tou�� +); + +151 + `__ex�y� + ( +_t�ow� +); + +155 + #__tobody +( +c +, +f +, +a +, +�gs +) \ + +156 ( +__ex�nsi�__ + \ + +157 ({ +__�s +; \ + +158 i�( ( +c +) > 1) \ + +160 i�( + `__bu�t�_cڡ�t_p + ( +c +)) \ + +162 +__c + = ( +c +); \ + +163 +__�s + = +__c + < -128 || __�> 255 ? __�: ( +a +)[__c]; \ + +166 +__�s + = +f + +�gs +; \ + +169 +__�s + = ( +a +)[(�( +c +)]; \ + +170 +__�s +; + } +})) + + ) + +172 #i�! +def�ed + +__NO_CTYPE + && !def�ed +__�lu�lus + + +173 + #i��um +( +c +� + `__is�y� +((c), +_IS�num +) + + ) + +174 + #i��ha +( +c +� + `__is�y� +((c), +_IS�pha +) + + ) + +175 + #is��l +( +c +� + `__is�y� +((c), +_IS��l +) + + ) + +176 + #isdig� +( +c +� + `__is�y� +((c), +_ISdig� +) + + ) + +177 + #i�ow� +( +c +� + `__is�y� +((c), +_ISlow� +) + + ) + +178 + #isg�ph +( +c +� + `__is�y� +((c), +_ISg�ph +) + + ) + +179 + #i�r�t +( +c +� + `__is�y� +((c), +_IS��t +) + + ) + +180 + #i�un� +( +c +� + `__is�y� +((c), +_ISpun� +) + + ) + +181 + #is�a� +( +c +� + `__is�y� +((c), +_IS�a� +) + + ) + +182 + #isu�� +( +c +� + `__is�y� +((c), +_ISu�� +) + + ) + +183 + #isxdig� +( +c +� + `__is�y� +((c), +_ISxdig� +) + + ) + +185 #ifde� +__USE_ISOC99 + + +186 + #isb�nk +( +c +� + `__is�y� +((c), +_ISb�nk +) + + ) + +189 #ifde� +__USE_EXTERN_INLINES + + +190 +__ex��_�l�e + + +191 +__NTH + ( + $t�ow� + ( +__c +)) + +193 +__c + >�-128 && __�< 256 ? (* + `__�y�_t�ow�_loc + ())[__c] : __c; + +194 + } +} + +196 +__ex��_�l�e + + +197 +__NTH + ( + $tou�� + ( +__c +)) + +199 +__c + >�-128 && __�< 256 ? (* + `__�y�_tou��_loc + ())[__c] : __c; + +200 + } +} + +203 #i� +__GNUC__ + >�2 && +def�ed + +__OPTIMIZE__ + && !def�ed +__�lu�lus + + +204 + #t�ow� +( +c +� + `__tobody + (c, +t�ow� +, * + `__�y�_t�ow�_loc + (), (c)) + + ) + +205 + #tou�� +( +c +� + `__tobody + (c, +tou�� +, * + `__�y�_tou��_loc + (), (c)) + + ) + +208 #i� +def�ed + +__USE_SVID + || def�ed +__USE_MISC + || def�ed +__USE_XOPEN + + +209 + #i�scii +( +c +� + `__i�scii + (c) + + ) + +210 + #t�scii +( +c +� + `__t�scii + (c) + + ) + +212 + #_t�ow� +( +c +�((�(* + `__�y�_t�ow�_loc + ())[(�(c)]) + + ) + +213 + #_tou�� +( +c +�((�(* + `__�y�_tou��_loc + ())[(�(c)]) + + ) + +219 #ifde� +__USE_XOPEN2K8 + + +233 + ~<xlo��.h +> + +237 + #__is�y�_l +( +c +, +ty� +, +lo�� +) \ + +238 (( +lo�� +)-> +__�y�_b +[(�( +c +)] & (� +ty� +) + + ) + +240 + #__ex�y�_l +( +�me +) \ + +241
+ `�me + (, +__lo��_t +� +__THROW + + + ) + +247 +__ex�y�_l + ( +i��um_l +); + +248 +__ex�y�_l + ( +i��ha_l +); + +249 +__ex�y�_l + ( +is��l_l +); + +250 +__ex�y�_l + ( +isdig�_l +); + +251 +__ex�y�_l + ( +i�ow�_l +); + +252 +__ex�y�_l + ( +isg�ph_l +); + +253 +__ex�y�_l + ( +i�r�t_l +); + +254 +__ex�y�_l + ( +i�un�_l +); + +255 +__ex�y�_l + ( +is�a�_l +); + +256 +__ex�y�_l + ( +isu��_l +); + +257 +__ex�y�_l + ( +isxdig�_l +); + +259 +__ex�y�_l + ( +isb�nk_l +); + +263
+ $__t�ow�_l + ( +__c +, +__lo��_t + +__l +� +__THROW +; + +264
+ $t�ow�_l + ( +__c +, +__lo��_t + +__l +� +__THROW +; + +267
+ $__tou��_l + ( +__c +, +__lo��_t + +__l +� +__THROW +; + +268
+ $tou��_l + ( +__c +, +__lo��_t + +__l +� +__THROW +; + +270 #i� +__GNUC__ + >�2 && +def�ed + +__OPTIMIZE__ + && !def�ed +__�lu�lus + + +271 + #__t�ow�_l +( +c +, +lo�� +) \ + +272 + `__tobody + ( +c +, +__t�ow�_l +, ( +lo�� +)-> +__�y�_t�ow� +, (c,�o��)) + + ) + +273 + #__tou��_l +( +c +, +lo�� +) \ + +274 + `__tobody + ( +c +, +__tou��_l +, ( +lo�� +)-> +__�y�_tou�� +, (c,�o��)) + + ) + +275 + #t�ow�_l +( +c +, +lo�� +� + `__t�ow�_l + ((c), (lo��)) + + ) + +276 + #tou��_l +( +c +, +lo�� +� + `__tou��_l + ((c), (lo��)) + + ) + +280 #i�de� +__NO_CTYPE + + +281 + #__i��um_l +( +c +, +l +� + `__is�y�_l +((c), +_IS�num +, (l)) + + ) + +282 + #__i��ha_l +( +c +, +l +� + `__is�y�_l +((c), +_IS�pha +, (l)) + + ) + +283 + #__is��l_l +( +c +, +l +� + `__is�y�_l +((c), +_IS��l +, (l)) + + ) + +284 + #__isdig�_l +( +c +, +l +� + `__is�y�_l +((c), +_ISdig� +, (l)) + + ) + +285 + #__i�ow�_l +( +c +, +l +� + `__is�y�_l +((c), +_ISlow� +, (l)) + + ) + +286 + #__isg�ph_l +( +c +, +l +� + `__is�y�_l +((c), +_ISg�ph +, (l)) + + ) + +287 + #__i�r�t_l +( +c +, +l +� + `__is�y�_l +((c), +_IS��t +, (l)) + + ) + +288 + #__i�un�_l +( +c +, +l +� + `__is�y�_l +((c), +_ISpun� +, (l)) + + ) + +289 + #__is�a�_l +( +c +, +l +� + `__is�y�_l +((c), +_IS�a� +, (l)) + + ) + +290 + #__isu��_l +( +c +, +l +� + `__is�y�_l +((c), +_ISu�� +, (l)) + + ) + +291 + #__isxdig�_l +( +c +, +l +� + `__is�y�_l +((c), +_ISxdig� +, (l)) + + ) + +293 + #__isb�nk_l +( +c +, +l +� + `__is�y�_l +((c), +_ISb�nk +, (l)) + + ) + +295 #i� +def�ed + +__USE_SVID + || def�ed +__USE_MISC + + +296 + #__i�scii_l +( +c +, +l +�(�), + `__i�scii + (c)) + + ) + +297 + #__t�scii_l +( +c +, +l +�(�), + `__t�scii + (c)) + + ) + +300 + #i��um_l +( +c +, +l +� + `__i��um_l + ((c), (l)) + + ) + +301 + #i��ha_l +( +c +, +l +� + `__i��ha_l + ((c), (l)) + + ) + +302 + #is��l_l +( +c +, +l +� + `__is��l_l + ((c), (l)) + + ) + +303 + #isdig�_l +( +c +, +l +� + `__isdig�_l + ((c), (l)) + + ) + +304 + #i�ow�_l +( +c +, +l +� + `__i�ow�_l + ((c), (l)) + + ) + +305 + #isg�ph_l +( +c +, +l +� + `__isg�ph_l + ((c), (l)) + + ) + +306 + #i�r�t_l +( +c +, +l +� + `__i�r�t_l + ((c), (l)) + + ) + +307 + #i�un�_l +( +c +, +l +� + `__i�un�_l + ((c), (l)) + + ) + +308 + #is�a�_l +( +c +, +l +� + `__is�a�_l + ((c), (l)) + + ) + +309 + #isu��_l +( +c +, +l +� + `__isu��_l + ((c), (l)) + + ) + +310 + #isxdig�_l +( +c +, +l +� + `__isxdig�_l + ((c), (l)) + + ) + +312 + #isb�nk_l +( +c +, +l +� + `__isb�nk_l + ((c), (l)) + + ) + +314 #i� +def�ed + +__USE_SVID + || def�ed +__USE_MISC + + +315 + #i�scii_l +( +c +, +l +� + `__i�scii_l + ((c), (l)) + + ) + +316 + #t�scii_l +( +c +, +l +� + `__t�scii_l + ((c), (l)) + + ) + +323 +__END_DECLS + + + @/usr/include/endian.h + +19 #i�def +_ENDIAN_H + + +20 + #_ENDIAN_H + 1 + + ) + +22 + ~<�u�s.h +> + +32 + #__LITTLE_ENDIAN + 1234 + + ) + +33 + #__BIG_ENDIAN + 4321 + + ) + +34 + #__PDP_ENDIAN + 3412 + + ) + +37 + ~<b�s/�d�n.h +> + +41 #i�de� +__FLOAT_WORD_ORDER + + +42 + #__FLOAT_WORD_ORDER + +__BYTE_ORDER + + + ) + +45 #ifdef +__USE_BSD + + +46 + #LITTLE_ENDIAN + +__LITTLE_ENDIAN + + + ) + +47 + #BIG_ENDIAN + +__BIG_ENDIAN + + + ) + +48 + #PDP_ENDIAN + +__PDP_ENDIAN + + + ) + +49 + #BYTE_ORDER + +__BYTE_ORDER + + + ) + +52 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +53 + #__LONG_LONG_PAIR +( +HI +, +LO +�LO, + ) +HI + +54 #�i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +55 + #__LONG_LONG_PAIR +( +HI +, +LO +�HI, + ) +LO + +59 #ifde� +__USE_BSD + + +61 + ~<b�s/by�sw�.h +> + +63 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +64 + #htobe16 +( +x +� + `__bsw�_16 + (x) + + ) + +65 + #ht�e16 +( +x +�(x) + + ) + +66 + #be16toh +( +x +� + `__bsw�_16 + (x) + + ) + +67 + #�16toh +( +x +�(x) + + ) + +69 + #htobe32 +( +x +� + `__bsw�_32 + (x) + + ) + +70 + #ht�e32 +( +x +�(x) + + ) + +71 + #be32toh +( +x +� + `__bsw�_32 + (x) + + ) + +72 + #�32toh +( +x +�(x) + + ) + +74 + #htobe64 +( +x +� + `__bsw�_64 + (x) + + ) + +75 + #ht�e64 +( +x +�(x) + + ) + +76 + #be64toh +( +x +� + `__bsw�_64 + (x) + + ) + +77 + #�64toh +( +x +�(x) + + ) + +79 + #htobe16 +( +x +�(x) + + ) + +80 + #ht�e16 +( +x +� + `__bsw�_16 + (x) + + ) + +81 + #be16toh +( +x +�(x) + + ) + +82 + #�16toh +( +x +� + `__bsw�_16 + (x) + + ) + +84 + #htobe32 +( +x +�(x) + + ) + +85 + #ht�e32 +( +x +� + `__bsw�_32 + (x) + + ) + +86 + #be32toh +( +x +�(x) + + ) + +87 + #�32toh +( +x +� + `__bsw�_32 + (x) + + ) + +89 + #htobe64 +( +x +�(x) + + ) + +90 + #ht�e64 +( +x +� + `__bsw�_64 + (x) + + ) + +91 + #be64toh +( +x +�(x) + + ) + +92 + #�64toh +( +x +� + `__bsw�_64 + (x) + + ) + + @/usr/include/gnu/stubs.h + +4 + ~<b�s/w�dsize.h +> + +6 #i� +__WORDSIZE + == 32 + +7 + ~<gnu/�ubs-32.h +> + +8 #�i� +__WORDSIZE + == 64 + +9 + ~<gnu/�ubs-64.h +> + + @/usr/include/stdlib.h + +23 #i�def +_STDLIB_H + + +25 + ~<�u�s.h +> + +28 + #__�ed_size_t + + + ) + +29 #i�de� +__�ed_m�loc_�d_��oc + + +30 + #__�ed_wch�_t + + + ) + +31 + #__�ed_NULL + + + ) + +33 + ~<�ddef.h +> + +35 + g__BEGIN_DECLS + + +37 #i�de� +__�ed_m�loc_�d_��oc + + +38 + #_STDLIB_H + 1 + + ) + +40 #i� +def�ed + +__USE_XOPEN + && !def�ed +_SYS_WAIT_H + + +42 + ~<b�s/wa��ags.h +> + +43 + ~<b�s/wa���us.h +> + +45 #ifde� +__USE_BSD + + +50 #i� +def�ed + +__GNUC__ + && !def�ed +__�lu�lus + + +51 + #__WAIT_INT +( +��us +) \ + +52 ( + `__ex�nsi�__ + (((uni� { + `__ty�of +( +��us +� +__� +; +__i +; }) \ + +53 { . +__� + = ( +��us +�}). +__i +)) + + ) + +55 + #__WAIT_INT +( +��us +�(*(*�&(��us)) + + ) + +63 #i�! +def�ed + +__GNUC__ + || __GNUC__ < 2 || def�ed +__�lu�lus + + +64 + #__WAIT_STATUS + * + + ) + +65 + #__WAIT_STATUS_DEFN + * + + ) + +70 +wa� + * + m__u�r +; + +71 * + m__�� +; + +72 } + t__WAIT_STATUS + + t__��ibu�__ + (( + t__�����t_uni�__ +)); + +73 + #__WAIT_STATUS_DEFN + * + + ) + +78 + #__WAIT_INT +( +��us +�(��us) + + ) + +79 + #__WAIT_STATUS + * + + ) + +80 + #__WAIT_STATUS_DEFN + * + + ) + +85 + #WEXITSTATUS +( +��us +� + `__WEXITSTATUS + ( + `__WAIT_INT + (��us)) + + ) + +86 + #WTERMSIG +( +��us +� + `__WTERMSIG + ( + `__WAIT_INT + (��us)) + + ) + +87 + #WSTOPSIG +( +��us +� + `__WSTOPSIG + ( + `__WAIT_INT + (��us)) + + ) + +88 + #WIFEXITED +( +��us +� + `__WIFEXITED + ( + `__WAIT_INT + (��us)) + + ) + +89 + #WIFSIGNALED +( +��us +� + `__WIFSIGNALED + ( + `__WAIT_INT + (��us)) + + ) + +90 + #WIFSTOPPED +( +��us +� + `__WIFSTOPPED + ( + `__WAIT_INT + (��us)) + + ) + +91 #ifde� +__WIFCONTINUED + + +92 + #WIFCONTINUED +( +��us +� + `__WIFCONTINUED + ( + `__WAIT_INT + (��us)) + + ) + +96 +__BEGIN_NAMESPACE_STD + + +100 + mqu� +; + +101 + m�m +; + +102 } + tdiv_t +; + +105 #i�de� +__ldiv_t_def�ed + + +108 + mqu� +; + +109 + m�m +; + +110 } + tldiv_t +; + +111 + #__ldiv_t_def�ed + 1 + + ) + +113 + g__END_NAMESPACE_STD + + +115 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__�div_t_def�ed + + +116 +__BEGIN_NAMESPACE_C99 + + +118 +__ex�nsi�__ + struct + +120 + mqu� +; + +121 + m�m +; + +122 } + t�div_t +; + +123 + #__�div_t_def�ed + 1 + + ) + +124 + g__END_NAMESPACE_C99 + + +129 + #RAND_MAX + 2147483647 + + ) + +134 + #EXIT_FAILURE + 1 + + ) + +135 + #EXIT_SUCCESS + 0 + + ) + +139 + #MB_CUR_MAX + ( + `__�y�_g�_mb_cur_max + ()) + + ) + +140
+size_t + + $__�y�_g�_mb_cur_max + (� +__THROW + +__wur +; + +143 +__BEGIN_NAMESPACE_STD + + +145
+ $�of + ( +__cڡ + * +__Ō +) + +146 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)� +__wur +; + +148
+ $�oi + ( +__cڡ + * +__Ō +) + +149 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)� +__wur +; + +151
+ $�� + ( +__cڡ + * +__Ō +) + +152 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)� +__wur +; + +153 +__END_NAMESPACE_STD + + +155 #i� +def�ed + +__USE_ISOC99 + || (def�ed +__GLIBC_HAVE_LONG_LONG + && def�ed +__USE_MISC +) + +156 +__BEGIN_NAMESPACE_C99 + + +158 +__ex�nsi�__ +
+ $��l + ( +__cڡ + * +__Ō +) + +159 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)� +__wur +; + +160 +__END_NAMESPACE_C99 + + +163 +__BEGIN_NAMESPACE_STD + + +165
+ $��od + ( +__cڡ + * +__��ri� + +__Ō +, + +166 ** +__��ri� + +__�d�r +) + +167 +__THROW + + `__n�nu� + ((1)� +__wur +; + +168 +__END_NAMESPACE_STD + + +170 #ifdef +__USE_ISOC99 + + +171 +__BEGIN_NAMESPACE_C99 + + +173
+ $��of + ( +__cڡ + * +__��ri� + +__Ō +, + +174 ** +__��ri� + +__�d�r +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +176
+ $���d + ( +__cڡ + * +__��ri� + +__Ō +, + +177 ** +__��ri� + +__�d�r +) + +178 +__THROW + + `__n�nu� + ((1)� +__wur +; + +179 +__END_NAMESPACE_C99 + + +182 +__BEGIN_NAMESPACE_STD + + +184
+ $��� + ( +__cڡ + * +__��ri� + +__Ō +, + +185 ** +__��ri� + +__�d�r +, +__ba� +) + +186 +__THROW + + `__n�nu� + ((1)� +__wur +; + +188
+ $��oul + ( +__cڡ + * +__��ri� + +__Ō +, + +189 ** +__��ri� + +__�d�r +, +__ba� +) + +190 +__THROW + + `__n�nu� + ((1)� +__wur +; + +191 +__END_NAMESPACE_STD + + +193 #i� +def�ed + +__GLIBC_HAVE_LONG_LONG + && def�ed +__USE_BSD + + +195 +__ex�nsi�__ + + +196
+ $��oq + ( +__cڡ + * +__��ri� + +__Ō +, + +197 ** +__��ri� + +__�d�r +, +__ba� +) + +198 +__THROW + + `__n�nu� + ((1)� +__wur +; + +200 +__ex�nsi�__ + + +201
+ $��ouq + ( +__cڡ + * +__��ri� + +__Ō +, + +202 ** +__��ri� + +__�d�r +, +__ba� +) + +203 +__THROW + + `__n�nu� + ((1)� +__wur +; + +206 #i� +def�ed + +__USE_ISOC99 + || (def�ed +__GLIBC_HAVE_LONG_LONG + && def�ed +__USE_MISC +) + +207 +__BEGIN_NAMESPACE_C99 + + +209 +__ex�nsi�__ + + +210
+ $���l + ( +__cڡ + * +__��ri� + +__Ō +, + +211 ** +__��ri� + +__�d�r +, +__ba� +) + +212 +__THROW + + `__n�nu� + ((1)� +__wur +; + +214 +__ex�nsi�__ + + +215
+ $��ou� + ( +__cڡ + * +__��ri� + +__Ō +, + +216 ** +__��ri� + +__�d�r +, +__ba� +) + +217 +__THROW + + `__n�nu� + ((1)� +__wur +; + +218 +__END_NAMESPACE_C99 + + +222 #ifde� +__USE_GNU + + +236 + ~<xlo��.h +> + +240
+ $���_l + ( +__cڡ + * +__��ri� + +__Ō +, + +241 ** +__��ri� + +__�d�r +, +__ba� +, + +242 +__lo��_t + +__loc +� +__THROW + + `__n�nu� + ((1, 4)� +__wur +; + +244
+ $��oul_l + ( +__cڡ + * +__��ri� + +__Ō +, + +245 ** +__��ri� + +__�d�r +, + +246 +__ba� +, +__lo��_t + +__loc +) + +247 +__THROW + + `__n�nu� + ((1, 4)� +__wur +; + +249 +__ex�nsi�__ + + +250
+ $���l_l + ( +__cڡ + * +__��ri� + +__Ō +, + +251 ** +__��ri� + +__�d�r +, +__ba� +, + +252 +__lo��_t + +__loc +) + +253 +__THROW + + `__n�nu� + ((1, 4)� +__wur +; + +255 +__ex�nsi�__ + + +256
+ $��ou�_l + ( +__cڡ + * +__��ri� + +__Ō +, + +257 ** +__��ri� + +__�d�r +, + +258 +__ba� +, +__lo��_t + +__loc +) + +259 +__THROW + + `__n�nu� + ((1, 4)� +__wur +; + +261
+ $��od_l + ( +__cڡ + * +__��ri� + +__Ō +, + +262 ** +__��ri� + +__�d�r +, +__lo��_t + +__loc +) + +263 +__THROW + + `__n�nu� + ((1, 3)� +__wur +; + +265
+ $��of_l + ( +__cڡ + * +__��ri� + +__Ō +, + +266 ** +__��ri� + +__�d�r +, +__lo��_t + +__loc +) + +267 +__THROW + + `__n�nu� + ((1, 3)� +__wur +; + +269
+ $���d_l + ( +__cڡ + * +__��ri� + +__Ō +, + +270 ** +__��ri� + +__�d�r +, + +271 +__lo��_t + +__loc +) + +272 +__THROW + + `__n�nu� + ((1, 3)� +__wur +; + +276 #ifde� +__USE_EXTERN_INLINES + + +277 +__BEGIN_NAMESPACE_STD + + +278 +__ex��_�l�e + + +279 + `__NTH + ( + $�of + ( +__cڡ + * +__Ō +)) + +281 + `��od + ( +__Ō +, (**� +NULL +); + +282 + } +} + +283 +__ex��_�l�e + + +284 +__NTH + ( + $�oi + ( +__cڡ + * +__Ō +)) + +286 (� + `��� + ( +__Ō +, (**� +NULL +, 10); + +287 + } +} + +288 +__ex��_�l�e + + +289 +__NTH + ( + $�� + ( +__cڡ + * +__Ō +)) + +291 + `��� + ( +__Ō +, (**� +NULL +, 10); + +292 + } +} + +293 + g__END_NAMESPACE_STD + + +295 #i� +def�ed + +__USE_MISC + || def�ed +__USE_ISOC99 + + +296 +__BEGIN_NAMESPACE_C99 + + +297 +__ex�nsi�__ + +__ex��_�l�e + + +298 +__NTH + ( + $��l + ( +__cڡ + * +__Ō +)) + +300 + `���l + ( +__Ō +, (**� +NULL +, 10); + +301 + } +} + +302 + g__END_NAMESPACE_C99 + + +307 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN_EXTENDED + + +311
* + $l64a + ( +__n +� +__THROW + +__wur +; + +314
+ $a64l + ( +__cڡ + * +__s +) + +315 +__THROW + +__��ibu�_pu�__ + + `__n�nu� + ((1)� +__wur +; + +319 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN_EXTENDED + || def�ed +__USE_BSD + + +320 + ~<sys/ty�s.h +> + +327
+ $�ndom + (� +__THROW +; + +330
+ $��dom + ( +__�ed +� +__THROW +; + +336
* + $����e + ( +__�ed +, * +__��ebuf +, + +337 +size_t + +__���� +� +__THROW + + `__n�nu� + ((2)); + +341
* + $�t��e + (* +__��ebuf +� +__THROW + + `__n�nu� + ((1)); + +344 #ifde� +__USE_MISC + + +349 + s�ndom_d�a + + +351 +�t32_t + * +� +; + +352 +�t32_t + * +�� +; + +353 +�t32_t + * +��e +; + +354 +�nd_ty� +; + +355 +�nd_deg +; + +356 +�nd_�p +; + +357 +�t32_t + * +�d_�r +; + +360
+ $�ndom_r + ( +�ndom_d�a + * +__��ri� + +__buf +, + +361 +�t32_t + * +__��ri� + +__�su� +� +__THROW + + `__n�nu� + ((1, 2)); + +363
+ $��dom_r + ( +__�ed +, +�ndom_d�a + * +__buf +) + +364 +__THROW + + `__n�nu� + ((2)); + +366
+ $����e_r + ( +__�ed +, * +__��ri� + +__��ebuf +, + +367 +size_t + +__���� +, + +368 +�ndom_d�a + * +__��ri� + +__buf +) + +369 +__THROW + + `__n�nu� + ((2, 4)); + +371
+ $�t��e_r + (* +__��ri� + +__��ebuf +, + +372 +�ndom_d�a + * +__��ri� + +__buf +) + +373 +__THROW + + `__n�nu� + ((1, 2)); + +378 +__BEGIN_NAMESPACE_STD + + +380
+ $�nd + (� +__THROW +; + +382
+ $��d + ( +__�ed +� +__THROW +; + +383 +__END_NAMESPACE_STD + + +385 #ifde� +__USE_POSIX + + +387
+ $�nd_r + (* +__�ed +� +__THROW +; + +391 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + + +395
+ $d�nd48 + (� +__THROW +; + +396
+ $��d48 + ( +__xsubi +[3]� +__THROW + + `__n�nu� + ((1)); + +399
+ $̪d48 + (� +__THROW +; + +400
+ $Īd48 + ( +__xsubi +[3]) + +401 +__THROW + + `__n�nu� + ((1)); + +404
+ $m�nd48 + (� +__THROW +; + +405
+ $j�nd48 + ( +__xsubi +[3]) + +406 +__THROW + + `__n�nu� + ((1)); + +409
+ $��d48 + ( +__�edv� +� +__THROW +; + +410
* + $�ed48 + ( +__�ed16v +[3]) + +411 +__THROW + + `__n�nu� + ((1)); + +412
+ $lc�g48 + ( +__��m +[7]� +__THROW + + `__n�nu� + ((1)); + +414 #ifde� +__USE_MISC + + +418 + sd�nd48_d�a + + +420 +__x +[3]; + +421 +__�d_x +[3]; + +422 +__c +; + +423 +__�� +; + +424 +__a +; + +428
+ $d�nd48_r + ( +d�nd48_d�a + * +__��ri� + +__buf�r +, + +429 * +__��ri� + +__�su� +� +__THROW + + `__n�nu� + ((1, 2)); + +430
+ $��d48_r + ( +__xsubi +[3], + +431 +d�nd48_d�a + * +__��ri� + +__buf�r +, + +432 * +__��ri� + +__�su� +� +__THROW + + `__n�nu� + ((1, 2)); + +435
+ $̪d48_r + ( +d�nd48_d�a + * +__��ri� + +__buf�r +, + +436 * +__��ri� + +__�su� +) + +437 +__THROW + + `__n�nu� + ((1, 2)); + +438
+ $Īd48_r + ( +__xsubi +[3], + +439 +d�nd48_d�a + * +__��ri� + +__buf�r +, + +440 * +__��ri� + +__�su� +) + +441 +__THROW + + `__n�nu� + ((1, 2)); + +444
+ $m�nd48_r + ( +d�nd48_d�a + * +__��ri� + +__buf�r +, + +445 * +__��ri� + +__�su� +) + +446 +__THROW + + `__n�nu� + ((1, 2)); + +447
+ $j�nd48_r + ( +__xsubi +[3], + +448 +d�nd48_d�a + * +__��ri� + +__buf�r +, + +449 * +__��ri� + +__�su� +) + +450 +__THROW + + `__n�nu� + ((1, 2)); + +453
+ $��d48_r + ( +__�edv� +, +d�nd48_d�a + * +__buf�r +) + +454 +__THROW + + `__n�nu� + ((2)); + +456
+ $�ed48_r + ( +__�ed16v +[3], + +457 +d�nd48_d�a + * +__buf�r +� +__THROW + + `__n�nu� + ((1, 2)); + +459
+ $lc�g48_r + ( +__��m +[7], + +460 +d�nd48_d�a + * +__buf�r +) + +461 +__THROW + + `__n�nu� + ((1, 2)); + +467 #i�de� +__m�loc_�d_��oc_def�ed + + +468 + #__m�loc_�d_��oc_def�ed + + + ) + +469 +__BEGIN_NAMESPACE_STD + + +471
* + $m�loc + ( +size_t + +__size +� +__THROW + +__��ibu�_m�loc__ + +__wur +; + +473
* + $��oc + ( +size_t + +__nmemb +, size_� +__size +) + +474 +__THROW + +__��ibu�_m�loc__ + +__wur +; + +475 +__END_NAMESPACE_STD + + +478 #i�de� +__�ed_m�loc_�d_��oc + + +479 +__BEGIN_NAMESPACE_STD + + +485
* + $��loc + (* +__�r +, +size_t + +__size +) + +486 +__THROW + +__��ibu�_w�n_unu�d_�su�__ +; + +488
+ $� + (* +__�r +� +__THROW +; + +489 +__END_NAMESPACE_STD + + +491 #ifdef +__USE_MISC + + +493
+ $c� + (* +__�r +� +__THROW +; + +496 #i� +def�ed + +__USE_GNU + || def�ed +__USE_BSD + || def�ed +__USE_MISC + + +497 + ~<�lo�.h +> + +500 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +502
* + $v�loc + ( +size_t + +__size +� +__THROW + +__��ibu�_m�loc__ + +__wur +; + +505 #ifde� +__USE_XOPEN2K + + +507
+ $posix_mem�ign + (** +__mem�r +, +size_t + +__�ignm�t +, size_� +__size +) + +508 +__THROW + + `__n�nu� + ((1)� +__wur +; + +511 +__BEGIN_NAMESPACE_STD + + +513
+ $ab�t + (� +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +517
+ `�ex� + ((* +__func +�()� +__THROW + + `__n�nu� + ((1)); + +519 #ifde� +__USE_GNU + + +523 #ifde� +__�lu�lus + + +524
"C++" + `�_quick_ex� + ((* +__func +) ()) + +525 +__THROW + + `__asm + ("�_quick_ex�"� + `__n�nu� + ((1)); + +527
+ `�_quick_ex� + ((* +__func +�()� +__THROW + + `__n�nu� + ((1)); + +530 +__END_NAMESPACE_STD + + +532 #ifdef +__USE_MISC + + +535
+ `�_ex� + ((* +__func +�( +__��us +, * +__�g +), *__arg) + +536 +__THROW + + `__n�nu� + ((1)); + +539 +__BEGIN_NAMESPACE_STD + + +543
+ $ex� + ( +__��us +� +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +545 #ifde� +__USE_GNU + + +551
+ $quick_ex� + ( +__��us +� +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +553 +__END_NAMESPACE_STD + + +555 #ifde� +__USE_ISOC99 + + +556 +__BEGIN_NAMESPACE_C99 + + +559
+ $_Ex� + ( +__��us +� +__THROW + + `__��ibu�__ + (( +__nܑu�__ +)); + +560 +__END_NAMESPACE_C99 + + +564 +__BEGIN_NAMESPACE_STD + + +566
* + $g��v + ( +__cڡ + * +__�me +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +567 +__END_NAMESPACE_STD + + +571
* + $__�cu�_g��v + ( +__cڡ + * +__�me +) + +572 +__THROW + + `__n�nu� + ((1)� +__wur +; + +574 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + + +578
+ $pu�nv + (* +__�r�g +� +__THROW + + `__n�nu� + ((1)); + +581 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN2K + + +584
+ $��nv + ( +__cڡ + * +__�me +, __cڡ * +__v�ue +, +__��a� +) + +585 +__THROW + + `__n�nu� + ((2)); + +588
+ $un��nv + ( +__cڡ + * +__�me +� +__THROW +; + +591 #ifdef +__USE_MISC + + +595
+ $���nv + (� +__THROW +; + +599 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN_EXTENDED + + +604
* + $mk�mp + (* +__�m��e +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +614 #i�de� +__USE_FILE_OFFSET64 + + +615
+ $mk�emp + (* +__�m��e +� + `__n�nu� + ((1)� +__wur +; + +617 #ifde� +__REDIRECT + + +618
+ `__REDIRECT + ( +mk�emp +, (* +__�m��e +), +mk�emp64 +) + +619 + `__n�nu� + ((1)� +__wur +; + +621 + #mk�emp + +mk�emp64 + + + ) + +624 #ifde� +__USE_LARGEFILE64 + + +625
+ $mk�emp64 + (* +__�m��e +� + `__n�nu� + ((1)� +__wur +; + +629 #ifde� +__USE_MISC + + +636 #i�de� +__USE_FILE_OFFSET64 + + +637
+ $mk�emps + (* +__�m��e +, +__suffix�n +� + `__n�nu� + ((1)� +__wur +; + +639 #ifde� +__REDIRECT + + +640
+ `__REDIRECT + ( +mk�emps +, (* +__�m��e +, +__suffix�n +), + +641 +mk�emps64 +� + `__n�nu� + ((1)� +__wur +; + +643 + #mk�emps + +mk�emps64 + + + ) + +646 #ifde� +__USE_LARGEFILE64 + + +647
+ $mk�emps64 + (* +__�m��e +, +__suffix�n +) + +648 + `__n�nu� + ((1)� +__wur +; + +652 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN2K8 + + +658
* + $mkd�mp + (* +__�m��e +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +661 #ifde� +__USE_GNU + + +668 #i�de� +__USE_FILE_OFFSET64 + + +669
+ $mko�emp + (* +__�m��e +, +__�ags +� + `__n�nu� + ((1)� +__wur +; + +671 #ifde� +__REDIRECT + + +672
+ `__REDIRECT + ( +mko�emp +, (* +__�m��e +, +__�ags +), +mko�emp64 +) + +673 + `__n�nu� + ((1)� +__wur +; + +675 + #mko�emp + +mko�emp64 + + + ) + +678 #ifde� +__USE_LARGEFILE64 + + +679
+ $mko�emp64 + (* +__�m��e +, +__�ags +� + `__n�nu� + ((1)� +__wur +; + +688 #i�de� +__USE_FILE_OFFSET64 + + +689
+ $mko�emps + (* +__�m��e +, +__suffix�n +, +__�ags +) + +690 + `__n�nu� + ((1)� +__wur +; + +692 #ifde� +__REDIRECT + + +693
+ `__REDIRECT + ( +mko�emps +, (* +__�m��e +, +__suffix�n +, + +694 +__�ags +), +mko�emps64 +) + +695 + `__n�nu� + ((1)� +__wur +; + +697 + #mko�emps + +mko�emps64 + + + ) + +700 #ifde� +__USE_LARGEFILE64 + + +701
+ $mko�emps64 + (* +__�m��e +, +__suffix�n +, +__�ags +) + +702 + `__n�nu� + ((1)� +__wur +; + +707 +__BEGIN_NAMESPACE_STD + + +712
+ $sy�em + ( +__cڡ + * +__comm�d +� +__wur +; + +713 +__END_NAMESPACE_STD + + +716 #ifdef +__USE_GNU + + +719
* + $�n�i�lize_f�e_�me + ( +__cڡ + * +__�me +) + +720 +__THROW + + `__n�nu� + ((1)� +__wur +; + +723 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +729
* + $���th + ( +__cڡ + * +__��ri� + +__�me +, + +730 * +__��ri� + +__�s�ved +� +__THROW + +__wur +; + +735 #i�de� +__COMPAR_FN_T + + +736 + #__COMPAR_FN_T + + + ) + +737 (* + t__com�r_�_t +�( + t__cڡ + *, __const *); + +739 #ifdef +__USE_GNU + + +740 +__com�r_�_t + + tcom�ris�_�_t +; + +743 #ifde� +__USE_GNU + + +744 (* + t__com�r_d_�_t +�( + t__cڡ + *, __const *, *); + +747 +__BEGIN_NAMESPACE_STD + + +750
* + $b��ch + ( +__cڡ + * +__key +, __cڡ * +__ba� +, + +751 +size_t + +__nmemb +, size_� +__size +, +__com�r_�_t + +__com�r +) + +752 + `__n�nu� + ((1, 2, 5)� +__wur +; + +756
+ $qs�t + (* +__ba� +, +size_t + +__nmemb +, size_� +__size +, + +757 +__com�r_�_t + +__com�r +� + `__n�nu� + ((1, 4)); + +758 #ifde� +__USE_GNU + + +759
+ $qs�t_r + (* +__ba� +, +size_t + +__nmemb +, size_� +__size +, + +760 +__com�r_d_�_t + +__com�r +, * +__�g +) + +761 + `__n�nu� + ((1, 4)); + +766
+ $abs + ( +__x +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +767
+ $�bs + ( +__x +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +768 +__END_NAMESPACE_STD + + +770 #ifde� +__USE_ISOC99 + + +771 +__ex�nsi�__ +
+ $�abs + ( +__x +) + +772 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +776 +__BEGIN_NAMESPACE_STD + + +780
+div_t + + $div + ( +__num� +, +__d�om +) + +781 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +782
+ldiv_t + + $ldiv + ( +__num� +, +__d�om +) + +783 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +784 +__END_NAMESPACE_STD + + +786 #ifde� +__USE_ISOC99 + + +787 +__BEGIN_NAMESPACE_C99 + + +788 +__ex�nsi�__ +
+�div_t + + $�div + ( +__num� +, + +789 +__d�om +) + +790 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)� +__wur +; + +791 +__END_NAMESPACE_C99 + + +795 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN_EXTENDED + + +802
* + $ecvt + ( +__v�ue +, +__ndig� +, * +__��ri� + +__de�t +, + +803 * +__��ri� + +__sign +� +__THROW + + `__n�nu� + ((3, 4)� +__wur +; + +808
* + $fcvt + ( +__v�ue +, +__ndig� +, * +__��ri� + +__de�t +, + +809 * +__��ri� + +__sign +� +__THROW + + `__n�nu� + ((3, 4)� +__wur +; + +814
* + $gcvt + ( +__v�ue +, +__ndig� +, * +__buf +) + +815 +__THROW + + `__n�nu� + ((3)� +__wur +; + +818 #ifde� +__USE_MISC + + +820
* + $qecvt + ( +__v�ue +, +__ndig� +, + +821 * +__��ri� + +__de�t +, *__��ri� +__sign +) + +822 +__THROW + + `__n�nu� + ((3, 4)� +__wur +; + +823
* + $qfcvt + ( +__v�ue +, +__ndig� +, + +824 * +__��ri� + +__de�t +, *__��ri� +__sign +) + +825 +__THROW + + `__n�nu� + ((3, 4)� +__wur +; + +826
* + $qgcvt + ( +__v�ue +, +__ndig� +, * +__buf +) + +827 +__THROW + + `__n�nu� + ((3)� +__wur +; + +832
+ $ecvt_r + ( +__v�ue +, +__ndig� +, * +__��ri� + +__de�t +, + +833 * +__��ri� + +__sign +, *__��ri� +__buf +, + +834 +size_t + +__�n +� +__THROW + + `__n�nu� + ((3, 4, 5)); + +835
+ $fcvt_r + ( +__v�ue +, +__ndig� +, * +__��ri� + +__de�t +, + +836 * +__��ri� + +__sign +, *__��ri� +__buf +, + +837 +size_t + +__�n +� +__THROW + + `__n�nu� + ((3, 4, 5)); + +839
+ $qecvt_r + ( +__v�ue +, +__ndig� +, + +840 * +__��ri� + +__de�t +, *__��ri� +__sign +, + +841 * +__��ri� + +__buf +, +size_t + +__�n +) + +842 +__THROW + + `__n�nu� + ((3, 4, 5)); + +843
+ $qfcvt_r + ( +__v�ue +, +__ndig� +, + +844 * +__��ri� + +__de�t +, *__��ri� +__sign +, + +845 * +__��ri� + +__buf +, +size_t + +__�n +) + +846 +__THROW + + `__n�nu� + ((3, 4, 5)); + +851 +__BEGIN_NAMESPACE_STD + + +854
+ $mb�n + ( +__cڡ + * +__s +, +size_t + +__n +� +__THROW + +__wur +; + +857
+ $mbtowc + ( +wch�_t + * +__��ri� + +__pwc +, + +858 +__cڡ + * +__��ri� + +__s +, +size_t + +__n +� +__THROW + +__wur +; + +861
+ $w�omb + (* +__s +, +wch�_t + +__wch� +� +__THROW + +__wur +; + +865
+size_t + + $mb�owcs + ( +wch�_t + * +__��ri� + +__pwcs +, + +866 +__cڡ + * +__��ri� + +__s +, +size_t + +__n +� +__THROW +; + +868
+size_t + + $wc�ombs + (* +__��ri� + +__s +, + +869 +__cڡ + +wch�_t + * +__��ri� + +__pwcs +, +size_t + +__n +) + +870 +__THROW +; + +871 +__END_NAMESPACE_STD + + +874 #ifde� +__USE_SVID + + +879
+ $�m�ch + ( +__cڡ + * +__��ڣ +� +__THROW + + `__n�nu� + ((1)� +__wur +; + +883 #ifde� +__USE_XOPEN_EXTENDED + + +890
+ $g�sub�t + (** +__��ri� + +__�ti�p +, + +891 * +__cڡ + * +__��ri� + +__tok�s +, + +892 ** +__��ri� + +__v�u� +) + +893 +__THROW + + `__n�nu� + ((1, 2, 3)� +__wur +; + +897 #ifde� +__USE_XOPEN + + +899
+ $�tkey + ( +__cڡ + * +__key +� +__THROW + + `__n�nu� + ((1)); + +905 #ifde� +__USE_XOPEN2K + + +907
+ $posix_ݒ� + ( +__o�ag +� +__wur +; + +910 #ifde� +__USE_XOPEN + + +915
+ $g��� + ( +__fd +� +__THROW +; + +919
+ $u�ock� + ( +__fd +� +__THROW +; + +924
* + $��ame + ( +__fd +� +__THROW + +__wur +; + +927 #ifde� +__USE_GNU + + +931
+ $��ame_r + ( +__fd +, * +__buf +, +size_t + +__bu� +) + +932 +__THROW + + `__n�nu� + ((2)); + +935
+ `g�� + (); + +938 #ifde� +__USE_BSD + + +942
+ $g�l�davg + ( +__l�davg +[], +__��m +) + +943 +__THROW + + `__n�nu� + ((1)); + +948 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__ex��_�ways_�l�e + + +949 + ~<b�s/�dlib.h +> + +951 #ifde� +__LDBL_COMPAT + + +952 + ~<b�s/�dlib-ldbl.h +> + +956 #unde� +__�ed_m�loc_�d_��oc + + +958 +__END_DECLS + + + @/usr/include/sys/cdefs.h + +20 #i�def +_SYS_CDEFS_H + + +21 + #_SYS_CDEFS_H + 1 + + ) + +24 #i�de� +_FEATURES_H + + +25 + ~<�u�s.h +> + +31 #i� +def�ed + +__GNUC__ + && !def�ed +__STDC__ + + +36 #unde� +__P + + +37 #unde� +__PMT + + +39 #ifde� +__GNUC__ + + +46 #i�! +def�ed + +__�lu�lus + && +__GNUC_PREREQ + (3, 3) + +47 + #__THROW + + `__��ibu�__ + (( +__n�hrow__ +)) + + ) + +48 + #__NTH +( +f� +� + `__��ibu�__ + (( +__n�hrow__ +)� + ) +fct + +50 #i� +def�ed + +__�lu�lus + && +__GNUC_PREREQ + (2,8) + +51 + #__THROW + + `throw + () + + ) + +52 + #__NTH +( +f� +�f� + `throw + () + + ) + +54 + #__THROW + + + ) + +55 + #__NTH +( +f� +� + ) +fct + +61 + #__�l�e + + + ) + +63 + #__THROW + + + ) + +64 + #__NTH +( +f� +� + ) +fct + +66 + #__cڡ + cڡ + + ) + +67 + #__sig�d + sig�d + + ) + +68 + #__vީ�e + vީ�e + + ) + +74 + #__P +( +�gs +� + ) +args + +75 + #__PMT +( +�gs +� + ) +args + +80 + #__CONCAT +( +x +, +y +�x ## + ) +y + +81 + #__STRING +( +x +�#x + + ) + +84 + #__�r_t + * + + ) + +85 + #__l�g_doub�_t + + + ) + +89 #ifdef +__�lu�lus + + +90 + #__BEGIN_DECLS +
"C" { + + ) + +91 + #__END_DECLS + } + + ) + +93 + #__BEGIN_DECLS + + + ) + +94 + #__END_DECLS + + + ) + +103 #i� +def�ed + +__�lu�lus + && def�ed +_GLIBCPP_USE_NAMESPACES + + +104 + #__BEGIN_NAMESPACE_STD + +�me�a� + +�d + { + + ) + +105 + #__END_NAMESPACE_STD + } + + ) + +106 + #__USING_NAMESPACE_STD +( +�me +� +us�g + +�d +::�me; + + ) + +107 + #__BEGIN_NAMESPACE_C99 + +�me�a� + +__c99 + { + + ) + +108 + #__END_NAMESPACE_C99 + } + + ) + +109 + #__USING_NAMESPACE_C99 +( +�me +� +us�g + +__c99 +::�me; + + ) + +114 + #__BEGIN_NAMESPACE_STD + + + ) + +115 + #__END_NAMESPACE_STD + + + ) + +116 + #__USING_NAMESPACE_STD +( +�me +) + + ) + +117 + #__BEGIN_NAMESPACE_C99 + + + ) + +118 + #__END_NAMESPACE_C99 + + + ) + +119 + #__USING_NAMESPACE_C99 +( +�me +) + + ) + +124 #i�de� +__BOUNDED_POINTERS__ + + +125 + #__bounded + + + ) + +126 + #__unbounded + + + ) + +127 + #__�rv�ue + + + ) + +132 + #__bos +( +�r +� + `__bu�t�_obje�_size + (�r, +__USE_FORTIFY_LEVEL + > 1) + + ) + +133 + #__bos0 +( +�r +� + `__bu�t�_obje�_size + (�r, 0) + + ) + +135 #i� +__GNUC_PREREQ + (4,3) + +136 + #__w�nde� +( +�me +, +msg +) \ + +137
+ `�me + (� + `__��ibu�__ +(( + `__w�n�g__ + ( +msg +))) + + ) + +138 + #__w�ljr +( +msg +� + `__��ibu�__ +(( + `__w�n�g__ + (msg))) + + ) + +139 + #__�r�de� +( +�me +, +msg +) \ + +140
+ `�me + (� + `__��ibu�__ +(( + `__�r�__ + ( +msg +))) + + ) + +142 + #__w�nde� +( +�me +, +msg +�
+ `�me + () + + ) + +143 + #__w�ljr +( +msg +) + + ) + +144 + #__�r�de� +( +�me +, +msg +�
+ `�me + () + + ) + +148 #i� +__GNUC_PREREQ + (2,97) + +150 + #__�ex�r + [] + + ) + +152 #ifde� +__GNUC__ + + +153 + #__�ex�r + [0] + + ) + +155 #i� +def�ed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L + +156 + #__�ex�r + [] + + ) + +159 + #__�ex�r + [1] + + ) + +175 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +177 + #__REDIRECT +( +�me +, +��o +, +��s +��m���� + `__asm__ + ( + `__ASMNAME + (#��s)) + + ) + +178 #ifde� +__�lu�lus + + +179 + #__REDIRECT_NTH +( +�me +, +��o +, +��s +) \ + +180 +�me + +��o + +__THROW + + `__asm__ + ( + `__ASMNAME + (#��s)) + + ) + +182 + #__REDIRECT_NTH +( +�me +, +��o +, +��s +) \ + +183 +�me + +��o + + `__asm__ + ( + `__ASMNAME + (#��s)� +__THROW + + + ) + +185 + #__ASMNAME +( +�ame +� + `__ASMNAME2 + ( +__USER_LABEL_PREFIX__ +, c�me) + + ) + +186 + #__ASMNAME2 +( +�efix +, +�ame +� + `__STRING + (�efix� + ) +cname + +199 #i�! +def�ed + +__GNUC__ + || __GNUC__ < 2 + +200 + #__��ibu�__ +( +xyz +� + + ) + +206 #i� +__GNUC_PREREQ + (2,96) + +207 + #__��ibu�_m�loc__ + + `__��ibu�__ + (( +__m�loc__ +)) + + ) + +209 + #__��ibu�_m�loc__ + + + ) + +215 #i� +__GNUC_PREREQ + (2,96) + +216 + #__��ibu�_pu�__ + + `__��ibu�__ + (( +__pu�__ +)) + + ) + +218 + #__��ibu�_pu�__ + + + ) + +224 #i� +__GNUC_PREREQ + (3,1) + +225 + #__��ibu�_u�d__ + + `__��ibu�__ + (( +__u�d__ +)) + + ) + +226 + #__��ibu�_no�l�e__ + + `__��ibu�__ + (( +__no�l�e__ +)) + + ) + +228 + #__��ibu�_u�d__ + + `__��ibu�__ + (( +__unu�d__ +)) + + ) + +229 + #__��ibu�_no�l�e__ + + + ) + +233 #i� +__GNUC_PREREQ + (3,2) + +234 + #__��ibu�_d����d__ + + `__��ibu�__ + (( +__d����d__ +)) + + ) + +236 + #__��ibu�_d����d__ + + + ) + +245 #i� +__GNUC_PREREQ + (2,8) + +246 + #__��ibu�_f�m�_�g__ +( +x +� + `__��ibu�__ + (( + `__f�m�_�g__ + (x))) + + ) + +248 + #__��ibu�_f�m�_�g__ +( +x +� + + ) + +255 #i� +__GNUC_PREREQ + (2,97) + +256 + #__��ibu�_f�m�_�rfm�__ +( +a +, +b +) \ + +257 + `__��ibu�__ + (( + `__f�m�__ + ( +__�rfm�__ +, +a +, +b +))) + + ) + +259 + #__��ibu�_f�m�_�rfm�__ +( +a +, +b +� + + ) + +264 #i� +__GNUC_PREREQ + (3,3) + +265 + #__n�nu� +( +��ms +� + `__��ibu�__ + (( +__n�nu�__ +��ams)) + + ) + +267 + #__n�nu� +( +��ms +) + + ) + +272 #i� +__GNUC_PREREQ + (3,4) + +273 + #__��ibu�_w�n_unu�d_�su�__ + \ + +274 + `__��ibu�__ + (( +__w�n_unu�d_�su�__ +)) + + ) + +275 #i� +__USE_FORTIFY_LEVEL + > 0 + +276 + #__wur + +__��ibu�_w�n_unu�d_�su�__ + + + ) + +279 + #__��ibu�_w�n_unu�d_�su�__ + + + ) + +281 #i�de� +__wur + + +282 + #__wur + + + ) + +286 #i� +__GNUC_PREREQ + (3,2) + +287 + #__�ways_�l�e + +__�l�e + + `__��ibu�__ + (( +__�ways_�l�e__ +)) + + ) + +289 + #__�ways_�l�e + +__�l�e + + + ) + +294 #i�! +def�ed + +__�lu�lus + || +__GNUC_PREREQ + (4,3) + +295 #i� +def�ed + +__GNUC_STDC_INLINE__ + || def�ed +__�lu�lus + + +296 + #__ex��_�l�e +
+__�l�e + + `__��ibu�__ + (( +__gnu_�l�e__ +)) + + ) + +297 #i� +__GNUC_PREREQ + (4,3) + +298 + #__ex��_�ways_�l�e + \ + +299
+__�ways_�l�e + + `__��ibu�__ + (( +__gnu_�l�e__ +, +__�tific�l__ +)) + + ) + +301 + #__ex��_�ways_�l�e + \ + +302
+__�ways_�l�e + + `__��ibu�__ + (( +__gnu_�l�e__ +)) + + ) + +305 + #__ex��_�l�e +
+__�l�e + + + ) + +306 #i� +__GNUC_PREREQ + (4,3) + +307 + #__ex��_�ways_�l�e + \ + +308
+__�ways_�l�e + + `__��ibu�__ + (( +__�tific�l__ +)) + + ) + +310 + #__ex��_�ways_�l�e +
+__�ways_�l�e + + + ) + +317 #i� +__GNUC_PREREQ + (4,3) + +318 + #__va_�g_�ck +(� + `__bu�t�_va_�g_�ck + () + + ) + +319 + #__va_�g_�ck_�n +(� + `__bu�t�_va_�g_�ck_�n + () + + ) + +326 #i�! +__GNUC_PREREQ + (2,8) + +327 + #__ex�nsi�__ + + + ) + +331 #i�! +__GNUC_PREREQ + (2,92) + +332 + #__��ri� + + + ) + +338 #i� +__GNUC_PREREQ + (3,1�&& ! +def�ed + +__GNUG__ + + +339 + #__��ri�_�r + +__��ri� + + + ) + +341 #ifde� +__GNUC__ + + +342 + #__��ri�_�r + + + ) + +344 #i� +def�ed + +__STDC_VERSION__ + && __STDC_VERSION__ >= 199901L + +345 + #__��ri�_�r + +��ri� + + + ) + +348 + #__��ri�_�r + + + ) + +353 + ~<b�s/w�dsize.h +> + +355 #i� +def�ed + +__LONG_DOUBLE_MATH_OPTIONAL + && def�ed +__NO_LONG_DOUBLE_MATH + + +356 + #__LDBL_COMPAT + 1 + + ) + +357 #ifde� +__REDIRECT + + +358 + #__LDBL_REDIR1 +( +�me +, +��o +, +��s +� + `__REDIRECT + (�me,�r�o,�l�s) + + ) + +359 + #__LDBL_REDIR +( +�me +, +��o +) \ + +360 + `__LDBL_REDIR1 + ( +�me +, +��o +, +__�dbl_ +##�me) + + ) + +361 + #__LDBL_REDIR1_NTH +( +�me +, +��o +, +��s +� + `__REDIRECT_NTH + (�me,�r�o,�l�s) + + ) + +362 + #__LDBL_REDIR_NTH +( +�me +, +��o +) \ + +363 + `__LDBL_REDIR1_NTH + ( +�me +, +��o +, +__�dbl_ +##�me) + + ) + +364 + #__LDBL_REDIR1_DECL +( +�me +, +��s +) \ + +365
+ `__ty�of + ( +�me +��m� + `__asm + ( + `__ASMNAME + (#��s)); + + ) + +366 + #__LDBL_REDIR_DECL +( +�me +) \ + +367
+ `__ty�of + ( +�me +��m� + `__asm + ( + `__ASMNAME + ("__�dbl_" #�me)); + + ) + +368 + #__REDIRECT_LDBL +( +�me +, +��o +, +��s +) \ + +369 + `__LDBL_REDIR1 + ( +�me +, +��o +, +__�dbl_ +## +��s +) + + ) + +370 + #__REDIRECT_NTH_LDBL +( +�me +, +��o +, +��s +) \ + +371 + `__LDBL_REDIR1_NTH + ( +�me +, +��o +, +__�dbl_ +## +��s +) + + ) + +374 #i�! +def�ed + +__LDBL_COMPAT + || !def�ed +__REDIRECT + + +375 + #__LDBL_REDIR1 +( +�me +, +��o +, +��s +��m� + ) +proto + +376 + #__LDBL_REDIR +( +�me +, +��o +��m� + ) +proto + +377 + #__LDBL_REDIR1_NTH +( +�me +, +��o +, +��s +��m���� +__THROW + + + ) + +378 + #__LDBL_REDIR_NTH +( +�me +, +��o +��m���� +__THROW + + + ) + +379 + #__LDBL_REDIR_DECL +( +�me +) + + ) + +380 #ifde� +__REDIRECT + + +381 + #__REDIRECT_LDBL +( +�me +, +��o +, +��s +� + `__REDIRECT + (�me,�r�o,�l�s) + + ) + +382 + #__REDIRECT_NTH_LDBL +( +�me +, +��o +, +��s +) \ + +383 + `__REDIRECT_NTH + ( +�me +, +��o +, +��s +) + + ) + + @/usr/include/alloca.h + +19 #i�def +_ALLOCA_H + + +20 + #_ALLOCA_H + 1 + + ) + +22 + ~<�u�s.h +> + +24 + #__�ed_size_t + + + ) + +25 + ~<�ddef.h +> + +27 + g__BEGIN_DECLS + + +30 #unde� +�lo� + + +33
* + $�lo� + ( +size_t + +__size +� +__THROW +; + +35 #ifdef +__GNUC__ + + +36 + #�lo� +( +size +� + `__bu�t�_�lo� + (size) + + ) + +39 +__END_DECLS + + + @/usr/include/bits/byteswap.h + +21 #i�! +def�ed + +_BYTESWAP_H + && !def�ed +_NETINET_IN_H + && !def�ed +_ENDIAN_H + + +25 #i�de� +_BITS_BYTESWAP_H + + +26 + #_BITS_BYTESWAP_H + 1 + + ) + +28 + ~<b�s/w�dsize.h +> + +31 + #__bsw�_cڡ�t_16 +( +x +) \ + +32 (((( +x +�>> 8�& 0xff�| (((x�& 0xff�<< 8)) + + ) + +34 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +35 + #__bsw�_16 +( +x +) \ + +36 ( +__ex�nsi�__ + \ + +37 ({ +__v +, +__x + = ( +x +); \ + +38 i�( + `__bu�t�_cڡ�t_p + ( +__x +)) \ + +39 +__v + = + `__bsw�_cڡ�t_16 + ( +__x +); \ + +41 + `__asm__ + ("rorw $8, %w0" \ + +42 : "�" ( +__v +) \ + +43 : "0" ( +__x +) \ + +45 +__v +; })) + + ) + +48 + #__bsw�_16 +( +x +) \ + +49 ( +__ex�nsi�__ + \ + +50 ({ +__x + = ( +x +); + `__bsw�_cڡ�t_16 + (__x); })) + + ) + +55 + #__bsw�_cڡ�t_32 +( +x +) \ + +56 (((( +x +) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + +57 ((( +x +�& 0x0000ff00�<< 8�| (((x�& 0x000000ff�<< 24)) + + ) + +59 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +60 #i� +__WORDSIZE + =�64 || ( +def�ed + +__i486__ + || def�ed +__��ium__ + \ + +61 || +def�ed + + g__��ium�o__ + || def�ed + g__��ium4__ + \ + +62 || +def�ed + + g__k8__ + || def�ed + g__�hl�__ + \ + +63 || +def�ed + + g__k6__ + || def�ed + g__noc�a__ + \ + +64 || +def�ed + + g__c�e2__ + || def�ed + g__geode__ + \ + +65 || +def�ed + + g__amd�m10__ +) + +68 + #__bsw�_32 +( +x +) \ + +69 ( +__ex�nsi�__ + \ + +70 ({ +__v +, +__x + = ( +x +); \ + +71 i�( + `__bu�t�_cڡ�t_p + ( +__x +)) \ + +72 +__v + = + `__bsw�_cڡ�t_32 + ( +__x +); \ + +74 + `__asm__ + ("bsw� %0" : "�" ( +__v +�: "0" ( +__x +)); \ + +75 +__v +; })) + + ) + +77 + #__bsw�_32 +( +x +) \ + +78 ( +__ex�nsi�__ + \ + +79 ({ +__v +, +__x + = ( +x +); \ + +80 i�( + `__bu�t�_cڡ�t_p + ( +__x +)) \ + +81 +__v + = + `__bsw�_cڡ�t_32 + ( +__x +); \ + +83 + `__asm__ + ("rorw $8, %w0;" \ + +86 : "�" ( +__v +) \ + +87 : "0" ( +__x +) \ + +89 +__v +; })) + + ) + +92 + #__bsw�_32 +( +x +) \ + +93 ( +__ex�nsi�__ + \ + +94 ({ +__x + = ( +x +); + `__bsw�_cڡ�t_32 + (__x); })) + + ) + +98 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +100 + #__bsw�_cڡ�t_64 +( +x +) \ + +101 (((( +x +) & 0xff00000000000000ull) >> 56) \ + +102 | ((( +x +) & 0x00ff000000000000ull) >> 40) \ + +103 | ((( +x +) & 0x0000ff0000000000ull) >> 24) \ + +104 | ((( +x +) & 0x000000ff00000000ull) >> 8) \ + +105 | ((( +x +) & 0x00000000ff000000ull) << 8) \ + +106 | ((( +x +) & 0x0000000000ff0000ull) << 24) \ + +107 | ((( +x +) & 0x000000000000ff00ull) << 40) \ + +108 | ((( +x +�& 0x00000000000000ffu��<< 56)) + + ) + +110 #i� +__WORDSIZE + == 64 + +111 + #__bsw�_64 +( +x +) \ + +112 ( +__ex�nsi�__ + \ + +113 ({ +__v +, +__x + = ( +x +); \ + +114 i�( + `__bu�t�_cڡ�t_p + ( +__x +)) \ + +115 +__v + = + `__bsw�_cڡ�t_64 + ( +__x +); \ + +117 + `__asm__ + ("bsw� %q0" : "�" ( +__v +�: "0" ( +__x +)); \ + +118 +__v +; })) + + ) + +120 + #__bsw�_64 +( +x +) \ + +121 ( +__ex�nsi�__ + \ + +122 ({ uni� { +__ex�nsi�__ + +__� +; \ + +123 +__l +[2]; } +__w +, +__r +; \ + +124 i�( + `__bu�t�_cڡ�t_p + ( +x +)) \ + +125 +__r +. +__� + = + `__bsw�_cڡ�t_64 + ( +x +); \ + +128 +__w +. +__� + = ( +x +); \ + +129 +__r +. +__l +[0] = + `__bsw�_32 + ( +__w +.__l[1]); \ + +130 +__r +. +__l +[1] = + `__bsw�_32 + ( +__w +.__l[0]); \ + +132 +__r +. +__� +; })) + + ) + + @/usr/include/bits/endian.h + +3 #i�de� +_ENDIAN_H + + +7 + #__BYTE_ORDER + +__LITTLE_ENDIAN + + + ) + + @/usr/include/bits/libc-lock.h + +20 #i�de� +_BITS_LIBC_LOCK_H + + +21 + #_BITS_LIBC_LOCK_H + 1 + + ) + +23 + ~<�h�ad.h +> + +24 + #__�ed_NULL + + + ) + +25 + ~<�ddef.h +> + +34 #ifde� +_LIBC + + +35 + ~<low�v�lock.h +> + +36 + ~<�s.h +> + +37 + ~<�h�ad-fun�i�s.h +> + +38 + ~<��o.h +> + +39 + ~<gnu/�ti�-groups.h +> + +43 #i� +def�ed + +_LIBC + || def�ed +_IO_MTSAFE_IO + + +44 #i�( +def�ed + +NOT_IN_libc + && !def�ed +IS_IN_lib�h�ad +�|| !def�ed +_LIBC + + +45 +�h�ad_mu�x_t + + t__libc_lock_t +; + +46 �ru� { +�h�ad_mu�x_t + + mmu�x +; } + t__libc_lock_�cursive_t +; + +48 + t__libc_lock_t +; + +49 �ru� { + mlock +; + m�t +; * + mow�r +; } + t__libc_lock_�cursive_t +; + +51 �ru� { +�h�ad_mu�x_t + + mmu�x +; } + t__�ld_lock_�cursive_t +; + +52 #ifde� +__USE_UNIX98 + + +53 +�h�ad_rwlock_t + + t__libc_rwlock_t +; + +55 +__libc_rwlock_�aque__ + + t__libc_rwlock_t +; + +58 +__libc_lock_�aque__ + + t__libc_lock_t +; + +59 +__libc_lock_�cursive_�aque__ + + t__libc_lock_�cursive_t +; + +60 +__libc_rwlock_�aque__ + + t__libc_rwlock_t +; + +64 +�h�ad_key_t + + t__libc_key_t +; + +73 + #__libc_lock_def�e +( +CLASS +, +NAME +) \ + +74 +CLASS + +__libc_lock_t + +NAME +; + + ) + +75 + #__libc_rwlock_def�e +( +CLASS +, +NAME +) \ + +76 +CLASS + +__libc_rwlock_t + +NAME +; + + ) + +77 + #__libc_lock_def�e_�cursive +( +CLASS +, +NAME +) \ + +78 +CLASS + +__libc_lock_�cursive_t + +NAME +; + + ) + +79 + #__�ld_lock_def�e_�cursive +( +CLASS +, +NAME +) \ + +80 +CLASS + +__�ld_lock_�cursive_t + +NAME +; + + ) + +91 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +92 #i� +LLL_LOCK_INITIALIZER + == 0 + +93 + #__libc_lock_def�e_���lized +( +CLASS +, +NAME +) \ + +94 +CLASS + +__libc_lock_t + +NAME +; + + ) + +96 + #__libc_lock_def�e_���lized +( +CLASS +, +NAME +) \ + +97 +CLASS + +__libc_lock_t + +NAME + = +LLL_LOCK_INITIALIZER +; + + ) + +100 #i� +__LT_SPINLOCK_INIT + == 0 + +101 + #__libc_lock_def�e_���lized +( +CLASS +, +NAME +) \ + +102 +CLASS + +__libc_lock_t + +NAME +; + + ) + +104 + #__libc_lock_def�e_���lized +( +CLASS +, +NAME +) \ + +105 +CLASS + +__libc_lock_t + +NAME + = +PTHREAD_MUTEX_INITIALIZER +; + + ) + +109 + #__libc_rwlock_def�e_���lized +( +CLASS +, +NAME +) \ + +110 +CLASS + +__libc_rwlock_t + +NAME + = +PTHREAD_RWLOCK_INITIALIZER +; + + ) + +114 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +115 #i� +LLL_LOCK_INITIALIZER + == 0 + +116 + #__libc_lock_def�e_���lized_�cursive +( +CLASS +, +NAME +) \ + +117 +CLASS + +__libc_lock_�cursive_t + +NAME +; + + ) + +119 + #__libc_lock_def�e_���lized_�cursive +( +CLASS +, +NAME +) \ + +120 +CLASS + +__libc_lock_�cursive_t + +NAME + = +_LIBC_LOCK_RECURSIVE_INITIALIZER +; + + ) + +122 + #_LIBC_LOCK_RECURSIVE_INITIALIZER + \ + +123 { +LLL_LOCK_INITIALIZER +, 0, +NULL + } + + ) + +125 + #__libc_lock_def�e_���lized_�cursive +( +CLASS +, +NAME +) \ + +126 +CLASS + +__libc_lock_�cursive_t + +NAME + = +_LIBC_LOCK_RECURSIVE_INITIALIZER +; + + ) + +127 + #_LIBC_LOCK_RECURSIVE_INITIALIZER + \ + +128 { +PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP +} + + ) + +131 + #__�ld_lock_def�e_���lized_�cursive +( +CLASS +, +NAME +) \ + +132 +CLASS + +__�ld_lock_�cursive_t + +NAME + = +_RTLD_LOCK_RECURSIVE_INITIALIZER +; + + ) + +133 + #_RTLD_LOCK_RECURSIVE_INITIALIZER + \ + +134 { +PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP +} + + ) + +136 + #__�ld_lock_���lize +( +NAME +) \ + +137 (�(( +NAME +��( +__�ld_lock_�cursive_t +� +_RTLD_LOCK_RECURSIVE_INITIALIZER +) + + ) + +144 #ifde� +__PIC__ + + +145 + #__libc_maybe_�� +( +FUNC +, +ARGS +, +ELSE +) \ + +146 ( + `__ex�nsi�__ + ({ + `__ty�of + ( +FUNC +�* +_� + = (FUNC); \ + +147 +_� + !� +NULL + ? (*_�� +ARGS + : +ELSE +; })) + + ) + +149 + #__libc_maybe_�� +( +FUNC +, +ARGS +, +ELSE +) \ + +150 ( +FUNC + !� +NULL + ? FUNC +ARGS + : +ELSE +) + + ) + +154 #i� +def�ed + +SHARED + && !def�ed +NOT_IN_libc + + +155 + #PTFAVAIL +( +NAME +� +__libc_�h�ad_fun�i�s_�� + + + ) + +156 + #__libc_�f_�� +( +FUNC +, +ARGS +, +ELSE +) \ + +157 ( +__libc_�h�ad_fun�i�s_�� + ? + `PTHFCT_CALL + ( +�r_ +## +FUNC +, +ARGS +�: +ELSE +) + + ) + +158 + #__libc_�f_��_�ways +( +FUNC +, +ARGS +) \ + +159 + `PTHFCT_CALL + ( +�r_ +## +FUNC +, +ARGS +) + + ) + +161 + #PTFAVAIL +( +NAME +�(NAME !� +NULL +) + + ) + +162 + #__libc_�f_�� +( +FUNC +, +ARGS +, +ELSE +) \ + +163 + `__libc_maybe_�� + ( +FUNC +, +ARGS +, +ELSE +) + + ) + +164 + #__libc_�f_��_�ways +( +FUNC +, +ARGS +) \ + +165 +FUNC + +ARGS + + + ) + +171 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +172 + #__libc_lock_�� +( +NAME +�((NAME�� +LLL_LOCK_INITIALIZER +, 0) + + ) + +174 + #__libc_lock_�� +( +NAME +) \ + +175 + `__libc_maybe_�� + ( +__�h�ad_mu�x_�� +, (&( +NAME +), +NULL +), 0) + + ) + +177 #i� +def�ed + +SHARED + && !def�ed +NOT_IN_libc + + +180 + #__libc_rwlock_�� +( +NAME +) \ + +181 ( + `__bu�t�_mem�t + (&( +NAME +), '\0', (NAME)), 0) + + ) + +183 + #__libc_rwlock_�� +( +NAME +) \ + +184 + `__libc_maybe_�� + ( +__�h�ad_rwlock_�� +, (&( +NAME +), +NULL +), 0) + + ) + +188 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +189 + #__libc_lock_��_�cursive +( +NAME +) \ + +190 (( +NAME +��( +__libc_lock_�cursive_t +� +_LIBC_LOCK_RECURSIVE_INITIALIZER +, 0) + + ) + +192 + #__libc_lock_��_�cursive +( +NAME +) \ + +194 i�( +__�h�ad_mu�x_�� + !� +NULL +) \ + +196 +�h�ad_mu�x��_t + +__�� +; \ + +197 + `__�h�ad_mu�x��_�� + (& +__�� +); \ + +198 + `__�h�ad_mu�x��_��y� + (& +__�� +, +PTHREAD_MUTEX_RECURSIVE_NP +); \ + +199 + `__�h�ad_mu�x_�� + (&( +NAME +). +mu�x +, & +__�� +); \ + +200 + `__�h�ad_mu�x��_de�roy + (& +__�� +); \ + +202 } 0) + + ) + +205 + #__�ld_lock_��_�cursive +( +NAME +) \ + +207 i�( +__�h�ad_mu�x_�� + !� +NULL +) \ + +209 +�h�ad_mu�x��_t + +__�� +; \ + +210 + `__�h�ad_mu�x��_�� + (& +__�� +); \ + +211 + `__�h�ad_mu�x��_��y� + (& +__�� +, +PTHREAD_MUTEX_RECURSIVE_NP +); \ + +212 + `__�h�ad_mu�x_�� + (&( +NAME +). +mu�x +, & +__�� +); \ + +213 + `__�h�ad_mu�x��_de�roy + (& +__�� +); \ + +215 } 0) + + ) + +220 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +221 + #__libc_lock_f�i +( +NAME +�((�0) + + ) + +223 + #__libc_lock_f�i +( +NAME +) \ + +224 + `__libc_maybe_�� + ( +__�h�ad_mu�x_de�roy +, (&( +NAME +)), 0) + + ) + +226 #i� +def�ed + +SHARED + && !def�ed +NOT_IN_libc + + +227 + #__libc_rwlock_f�i +( +NAME +�((�0) + + ) + +229 + #__libc_rwlock_f�i +( +NAME +) \ + +230 + `__libc_maybe_�� + ( +__�h�ad_rwlock_de�roy +, (&( +NAME +)), 0) + + ) + +234 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +235 + #__libc_lock_f�i_�cursive +( +NAME +�((�0) + + ) + +237 + #__libc_lock_f�i_�cursive +( +NAME +) \ + +238 + `__libc_maybe_�� + ( +__�h�ad_mu�x_de�roy +, (&( +NAME +)), 0) + + ) + +242 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +243 #i� +__OPTION_EGLIBC_BIG_MACROS + != 1 + +247
+__libc_lock_lock_� + ( +__libc_lock_t + *); + +248 +libc_hidd�_��o + ( +__libc_lock_lock_� +); + +250 #i� +__OPTION_EGLIBC_BIG_MACROS + + +251 + #__libc_lock_lock +( +NAME +) \ + +252 ({ + `�l_lock + ( +NAME +, +LLL_PRIVATE +); 0; }) + + ) + +254 + #__libc_lock_lock +( +NAME +) \ + +255 + `__libc_lock_lock_� + (&( +NAME +)) + + ) + +258 + #__libc_lock_lock +( +NAME +) \ + +259 + `__libc_maybe_�� + ( +__�h�ad_mu�x_lock +, (&( +NAME +)), 0) + + ) + +261 + #__libc_rwlock_rdlock +( +NAME +) \ + +262 + `__libc_�f_�� + ( +__�h�ad_rwlock_rdlock +, (&( +NAME +)), 0) + + ) + +263 + #__libc_rwlock_w�ock +( +NAME +) \ + +264 + `__libc_�f_�� + ( +__�h�ad_rwlock_w�ock +, (&( +NAME +)), 0) + + ) + +267 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +268 #i� +__OPTION_EGLIBC_BIG_MACROS + != 1 + +272
+__libc_lock_lock_�cursive_� + ( +__libc_lock_�cursive_t + *); + +273 +libc_hidd�_��o + ( +__libc_lock_lock_�cursive_� +); + +275 #i� +__OPTION_EGLIBC_BIG_MACROS + + +276 + #__libc_lock_lock_�cursive +( +NAME +) \ + +278 * +�lf + = +THREAD_SELF +; \ + +279 i�(( +NAME +). +ow�r + !� +�lf +) \ + +281 + `�l_lock + (( +NAME +). +lock +, +LLL_PRIVATE +); \ + +282 ( +NAME +). +ow�r + = +�lf +; \ + +284 ++( +NAME +). +�t +; \ + +285 } 0) + + ) + +287 + #__libc_lock_lock_�cursive +( +NAME +) \ + +288 + `__libc_lock_lock_�cursive_� + (&( +NAME +)) + + ) + +291 + #__libc_lock_lock_�cursive +( +NAME +) \ + +292 + `__libc_maybe_�� + ( +__�h�ad_mu�x_lock +, (&( +NAME +). +mu�x +), 0) + + ) + +296 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +297 #i� +__OPTION_EGLIBC_BIG_MACROS + != 1 + +301
+__libc_lock_�ylock_� + ( +__libc_lock_t + *); + +302 +libc_hidd�_��o + ( +__libc_lock_�ylock_� +); + +304 #i� +__OPTION_EGLIBC_BIG_MACROS + + +305 + #__libc_lock_�ylock +( +NAME +) \ + +306 + `�l_�ylock + ( +NAME +) + + ) + +308 + #__libc_lock_�ylock +( +NAME +) \ + +309 + `__libc_lock_�ylock_� + (&( +NAME +)) + + ) + +312 + #__libc_lock_�ylock +( +NAME +) \ + +313 + `__libc_maybe_�� + ( +__�h�ad_mu�x_�ylock +, (&( +NAME +)), 0) + + ) + +315 + #__libc_rwlock_�yrdlock +( +NAME +) \ + +316 + `__libc_maybe_�� + ( +__�h�ad_rwlock_�yrdlock +, (&( +NAME +)), 0) + + ) + +317 + #__libc_rwlock_�yw�ock +( +NAME +) \ + +318 + `__libc_maybe_�� + ( +__�h�ad_rwlock_�yw�ock +, (&( +NAME +)), 0) + + ) + +321 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +322 #i� +__OPTION_EGLIBC_BIG_MACROS + != 1 + +326
+__libc_lock_�ylock_�cursive_� + ( +__libc_lock_�cursive_t + *); + +327 +libc_hidd�_��o + ( +__libc_lock_�ylock_�cursive_� +); + +329 #i� +__OPTION_EGLIBC_BIG_MACROS + + +330 + #__libc_lock_�ylock_�cursive +( +NAME +) \ + +332 +�su� + = 0; \ + +333 * +�lf + = +THREAD_SELF +; \ + +334 i�(( +NAME +). +ow�r + !� +�lf +) \ + +336 i�( + `�l_�ylock + (( +NAME +). +lock +) == 0) \ + +338 ( +NAME +). +ow�r + = +�lf +; \ + +339 ( +NAME +). +�t + = 1; \ + +342 +�su� + = +EBUSY +; \ + +345 ++( +NAME +). +�t +; \ + +346 +�su� +; \ + +347 }) + + ) + +349 + #__libc_lock_�ylock_�cursive +( +NAME +) \ + +350 + `__libc_lock_�ylock_�cursive_� + (&( +NAME +)) + + ) + +353 + #__libc_lock_�ylock_�cursive +( +NAME +) \ + +354 + `__libc_maybe_�� + ( +__�h�ad_mu�x_�ylock +, (&( +NAME +)), 0) + + ) + +357 + #__�ld_lock_�ylock_�cursive +( +NAME +) \ + +358 + `__libc_maybe_�� + ( +__�h�ad_mu�x_�ylock +, (&( +NAME +). +mu�x +), 0) + + ) + +361 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +362 #i� +__OPTION_EGLIBC_BIG_MACROS + != 1 + +366
+__libc_lock_u�ock_� + ( +__libc_lock_t + *); + +367 +libc_hidd�_��o + ( +__libc_lock_u�ock_� +); + +369 #i� +__OPTION_EGLIBC_BIG_MACROS + + +370 + #__libc_lock_u�ock +( +NAME +) \ + +371 + `�l_u�ock + ( +NAME +, +LLL_PRIVATE +) + + ) + +373 + #__libc_lock_u�ock +( +NAME +) \ + +374 + `__libc_lock_u�ock_� + (&( +NAME +)) + + ) + +377 + #__libc_lock_u�ock +( +NAME +) \ + +378 + `__libc_maybe_�� + ( +__�h�ad_mu�x_u�ock +, (&( +NAME +)), 0) + + ) + +380 + #__libc_rwlock_u�ock +( +NAME +) \ + +381 + `__libc_�f_�� + ( +__�h�ad_rwlock_u�ock +, (&( +NAME +)), 0) + + ) + +384 #i� +def�ed + +_LIBC + && (!def�ed +NOT_IN_libc + || def�ed +IS_IN_lib�h�ad +) + +385 #i� +__OPTION_EGLIBC_BIG_MACROS + != 1 + +389
+__libc_lock_u�ock_�cursive_� + ( +__libc_lock_�cursive_t + *); + +390 +libc_hidd�_��o + ( +__libc_lock_u�ock_�cursive_� +); + +392 #i� +__OPTION_EGLIBC_BIG_MACROS + + +394 + #__libc_lock_u�ock_�cursive +( +NAME +) \ + +396 i�(--( +NAME +). +�t + == 0) \ + +398 ( +NAME +). +ow�r + = +NULL +; \ + +399 + `�l_u�ock + (( +NAME +). +lock +, +LLL_PRIVATE +); \ + +401 } 0) + + ) + +403 + #__libc_lock_u�ock_�cursive +( +NAME +) \ + +404 + `__libc_lock_u�ock_�cursive_� + (&( +NAME +)) + + ) + +407 + #__libc_lock_u�ock_�cursive +( +NAME +) \ + +408 + `__libc_maybe_�� + ( +__�h�ad_mu�x_u�ock +, (&( +NAME +)), 0) + + ) + +411 #i� +def�ed + +_LIBC + && def�ed +SHARED + + +412 + #__�ld_lock_de�u�_lock_�cursive +( +lock +) \ + +413 ++(( +�h�ad_mu�x_t + *)( +lock +))-> +__d�a +. +__cou� +; + + ) + +415 + #__�ld_lock_de�u�_u�ock_�cursive +( +lock +) \ + +416 --(( +�h�ad_mu�x_t + *)( +lock +))-> +__d�a +. +__cou� +; + + ) + +418 + #__�ld_lock_lock_�cursive +( +NAME +) \ + +419 + `GL +( +dl_�ld_lock_�cursive +�(&( +NAME +). +mu�x +) + + ) + +421 + #__�ld_lock_u�ock_�cursive +( +NAME +) \ + +422 + `GL +( +dl_�ld_u�ock_�cursive +�(&( +NAME +). +mu�x +) + + ) + +424 + #__�ld_lock_lock_�cursive +( +NAME +) \ + +425 + `__libc_maybe_�� + ( +__�h�ad_mu�x_lock +, (&( +NAME +). +mu�x +), 0) + + ) + +427 + #__�ld_lock_u�ock_�cursive +( +NAME +) \ + +428 + `__libc_maybe_�� + ( +__�h�ad_mu�x_u�ock +, (&( +NAME +). +mu�x +), 0) + + ) + +432 #i� +PTHREAD_ONCE_INIT + == 0 + +435 + #__libc_��_def�e +( +CLASS +, +NAME +) \ + +436 +CLASS + +�h�ad_��_t + +NAME + + + ) + +438 + #__libc_��_def�e +( +CLASS +, +NAME +) \ + +439 +CLASS + +�h�ad_��_t + +NAME + = +PTHREAD_ONCE_INIT + + + ) + +443 + #__libc_�� +( +ONCE_CONTROL +, +INIT_FUNCTION +) \ + +445 i�( + `PTFAVAIL + ( +__�h�ad_�� +)) \ + +446 + `__libc_�f_��_�ways + ( +__�h�ad_�� +, (&( +ONCE_CONTROL +), \ + +447 +INIT_FUNCTION +)); \ + +448 i�(( +ONCE_CONTROL +�=� +PTHREAD_ONCE_INIT +) { \ + +449 + `INIT_FUNCTION + (); \ + +450 ( +ONCE_CONTROL +) |= 2; \ + +452 } 0) + + ) + +459
+_�h�ad_��nup_push + ( +_�h�ad_��nup_buf�r + * +buf�r +, + +460 (* +rout�e +�(*), * +�g +); + +461
+ `_�h�ad_��nup_p� + ( +_�h�ad_��nup_buf�r + * +buf�r +, + +462 +execu� +); + +463
+ `_�h�ad_��nup_push_de�r + ( +_�h�ad_��nup_buf�r + * +buf�r +, + +464 (* +rout�e +�(*), * +�g +); + +465
+ `_�h�ad_��nup_p�_���e + ( +_�h�ad_��nup_buf�r + * +buf�r +, + +466 +execu� +); + +469 + #__libc_��nup_�gi�_��t +( +DOIT +, +FCT +, +ARG +) \ + +470 { +_�h�ad_��nup_buf�r + +_buf�r +; \ + +471 +_ava� +; \ + +472 i�( +DOIT +) { \ + +473 +_ava� + = + `PTFAVAIL + ( +_�h�ad_��nup_push_de�r +); \ + +474 i�( +_ava� +) { \ + +475 + `__libc_�f_��_�ways + ( +_�h�ad_��nup_push_de�r +, (& +_buf�r +, +FCT +, \ + +476 +ARG +)); \ + +478 +_buf�r +. +__rout�e + = ( +FCT +); \ + +479 +_buf�r +. +__�g + = ( +ARG +); \ + +482 +_ava� + = 0; \ + +483 } + + ) + +486 + #__libc_��nup_�gi�_�d +( +DOIT +) \ + +487 i�( +_ava� +) { \ + +488 + `__libc_�f_��_�ways + ( +_�h�ad_��nup_p�_���e +, (& +_buf�r +, +DOIT +));\ + +489 } i�( +DOIT +) \ + +490 +_buf�r +. + `__rout�e + (_buf�r. +__�g +); \ + +491 + } + + ) +} + +494 + #__libc_��nup_�d +( +DOIT +) \ + +495 i�( +_ava� +) { \ + +496 + `__libc_�f_��_�ways + ( +_�h�ad_��nup_p�_���e +, (& +_buf�r +, +DOIT +));\ + +497 } i�( +DOIT +) \ + +498 +_buf�r +. + `__rout�e + (_buf�r. +__�g +) + + ) + +502 +__ex��_�l�e + + +503 + $__libc_��nup_rout�e + ( +__�h�ad_��nup_�ame + * +f +) + +505 i�( +f +-> +__do_� +) + +506 +f +-> + `__�n�l_rout�e + (f-> +__�n�l_�g +); + +507 + } +} + +509 + #__libc_��nup_push +( +f� +, +�g +) \ + +511 +__�h�ad_��nup_�ame + +__��ame + \ + +512 + `__��ibu�__ + (( + `__��nup__ + ( +__libc_��nup_rout�e +))) \ + +513 �{ . +__�n�l_rout�e + = ( +f� +), . +__�n�l_�g + = ( +�g +), \ + +514 . +__do_� + = 1 }; + + ) + +516 + #__libc_��nup_p� +( +execu� +) \ + +517 +__��ame +. +__do_� + = ( +execu� +); \ + +518 } 0) + + ) + +522 + #__libc_key_��� +( +KEY +, +DESTRUCTOR +) \ + +523 + `__libc_�f_�� + ( +__�h�ad_key_��� +, ( +KEY +, +DESTRUCTOR +), 1) + + ) + +526 + #__libc_g��ecific +( +KEY +) \ + +527 + `__libc_�f_�� + ( +__�h�ad_g��ecific +, ( +KEY +), +NULL +) + + ) + +530 + #__libc_�t�ecific +( +KEY +, +VALUE +) \ + +531 + `__libc_�f_�� + ( +__�h�ad_�t�ecific +, ( +KEY +, +VALUE +), 0) + + ) + +537 + #__libc_�f�k +( +PREPARE +, +PARENT +, +CHILD +) \ + +538 + `__�gi��_�f�k + ( +PREPARE +, +PARENT +, +CHILD +, +NULL +) + + ) + +539
+__�gi��_�f�k + ((* +__���e +) (), + +540 (* +__��� +) (), + +541 (* +__ch�d +) (), + +542 * +__dso_h�d� +); + +547
+ `__�h�ad_mu�x_�� + ( +�h�ad_mu�x_t + * +__mu�x +, + +548 +__cڡ + +�h�ad_mu�x��_t + * +__mu�x_�� +); + +550
+ `__�h�ad_mu�x_de�roy + ( +�h�ad_mu�x_t + * +__mu�x +); + +552
+ `__�h�ad_mu�x_�ylock + ( +�h�ad_mu�x_t + * +__mu�x +); + +554
+ `__�h�ad_mu�x_lock + ( +�h�ad_mu�x_t + * +__mu�x +); + +556
+ `__�h�ad_mu�x_u�ock + ( +�h�ad_mu�x_t + * +__mu�x +); + +558
+ `__�h�ad_mu�x��_�� + ( +�h�ad_mu�x��_t + * +__�� +); + +560
+ `__�h�ad_mu�x��_de�roy + ( +�h�ad_mu�x��_t + * +__�� +); + +562
+ `__�h�ad_mu�x��_��y� + ( +�h�ad_mu�x��_t + * +__�� +, + +563 +__k�d +); + +565 #ifde� +__USE_UNIX98 + + +566
+ `__�h�ad_rwlock_�� + ( +�h�ad_rwlock_t + * +__rwlock +, + +567 +__cڡ + +�h�ad_rwlock��_t + * +__�� +); + +569
+ `__�h�ad_rwlock_de�roy + ( +�h�ad_rwlock_t + * +__rwlock +); + +571
+ `__�h�ad_rwlock_rdlock + ( +�h�ad_rwlock_t + * +__rwlock +); + +573
+ `__�h�ad_rwlock_�yrdlock + ( +�h�ad_rwlock_t + * +__rwlock +); + +575
+ `__�h�ad_rwlock_w�ock + ( +�h�ad_rwlock_t + * +__rwlock +); + +577
+ `__�h�ad_rwlock_�yw�ock + ( +�h�ad_rwlock_t + * +__rwlock +); + +579
+ `__�h�ad_rwlock_u�ock + ( +�h�ad_rwlock_t + * +__rwlock +); + +582
+ `__�h�ad_key_��� + ( +�h�ad_key_t + * +__key +, + +583 (* +__de�r_fun�i� +) (*)); + +585
+ `__�h�ad_�t�ecific + ( +�h�ad_key_t + +__key +, + +586 +__cڡ + * +__po��r +); + +588
* + `__�h�ad_g��ecific + ( +�h�ad_key_t + +__key +); + +590
+ `__�h�ad_�� + ( +�h�ad_��_t + * +__��_cڌ� +, + +591 (* +__��_rout�e +) ()); + +593
+ `__�h�ad_�f�k + ((* +__���e +) (), + +594 (* +__��� +) (), + +595 (* +__ch�d +) ()); + +601 #i�de� +__NO_WEAK_PTHREAD_ALIASES + + +602 #ifde� +w�k_ex�� + + +603 #i� +_LIBC + + +604 + ~<bp-sym.h +> + +606 + #BP_SYM +( +sym +� + ) +sym + +608 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_mu�x_�� +)) + +609 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_mu�x_de�roy +)) + +610 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_mu�x_lock +)) + +611 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_mu�x_�ylock +)) + +612 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_mu�x_u�ock +)) + +613 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_mu�x��_�� +)) + +614 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_mu�x��_de�roy +)) + +615 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_mu�x��_��y� +)) + +616 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_rwlock_�� +)) + +617 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_rwlock_de�roy +)) + +618 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_rwlock_rdlock +)) + +619 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_rwlock_�yrdlock +)) + +620 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_rwlock_w�ock +)) + +621 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_rwlock_�yw�ock +)) + +622 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_rwlock_u�ock +)) + +623 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_key_��� +)) + +624 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_�t�ecific +)) + +625 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_g��ecific +)) + +626 + `w�k_ex�� + ( + $BP_SYM + ( +__�h�ad_�� +)) + +627 + $w�k_ex�� + ( +__�h�ad_���lize +) + +628 + $w�k_ex�� + ( +__�h�ad_�f�k +) + +629 + `w�k_ex�� + ( + $BP_SYM + ( +_�h�ad_��nup_push_de�r +)) + +630 + `w�k_ex�� + ( + $BP_SYM + ( +_�h�ad_��nup_p�_���e +)) + +631 + `w�k_ex�� + ( + $BP_SYM + ( +�h�ad_�t�n�l��e +)) + +633 #�agm� +w�k + +__�h�ad_mu�x_�� + + +634 #�agm� +w�k + +__�h�ad_mu�x_de�roy + + +635 #�agm� +w�k + +__�h�ad_mu�x_lock + + +636 #�agm� +w�k + +__�h�ad_mu�x_�ylock + + +637 #�agm� +w�k + +__�h�ad_mu�x_u�ock + + +638 #�agm� +w�k + +__�h�ad_mu�x��_�� + + +639 #�agm� +w�k + +__�h�ad_mu�x��_de�roy + + +640 #�agm� +w�k + +__�h�ad_mu�x��_��y� + + +641 #�agm� +w�k + +__�h�ad_rwlock_de�roy + + +642 #�agm� +w�k + +__�h�ad_rwlock_rdlock + + +643 #�agm� +w�k + +__�h�ad_rwlock_�yrdlock + + +644 #�agm� +w�k + +__�h�ad_rwlock_w�ock + + +645 #�agm� +w�k + +__�h�ad_rwlock_�yw�ock + + +646 #�agm� +w�k + +__�h�ad_rwlock_u�ock + + +647 #�agm� +w�k + +__�h�ad_key_��� + + +648 #�agm� +w�k + +__�h�ad_�t�ecific + + +649 #�agm� +w�k + +__�h�ad_g��ecific + + +650 #�agm� +w�k + +__�h�ad_�� + + +651 #�agm� +w�k + +__�h�ad_���lize + + +652 #�agm� +w�k + +__�h�ad_�f�k + + +653 #�agm� +w�k + +_�h�ad_��nup_push_de�r + + +654 #�agm� +w�k + +_�h�ad_��nup_p�_���e + + +655 #�agm� +w�k + +�h�ad_�t�n�l��e + + + @/usr/include/bits/stdlib-ldbl.h + +20 #i�de� +_STDLIB_H + + +24 #ifdef +__USE_ISOC99 + + +25 +__BEGIN_NAMESPACE_C99 + + +26 + $__LDBL_REDIR1_DECL + ( +���d +, +��od +) + +27 +__END_NAMESPACE_C99 + + +30 #ifde� +__USE_GNU + + +31 + $__LDBL_REDIR1_DECL + ( +���d_l +, +��od_l +) + +34 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN_EXTENDED + + +35 #ifde� +__USE_MISC + + +36 + $__LDBL_REDIR1_DECL + ( +qecvt +, +ecvt +) + +37 + $__LDBL_REDIR1_DECL + ( +qfcvt +, +fcvt +) + +38 + $__LDBL_REDIR1_DECL + ( +qgcvt +, +gcvt +) + +39 + $__LDBL_REDIR1_DECL + ( +qecvt_r +, +ecvt_r +) + +40 + $__LDBL_REDIR1_DECL + ( +qfcvt_r +, +fcvt_r +) + + @/usr/include/bits/stdlib.h + +20 #i�de� +_STDLIB_H + + +24
* + $__���th_chk + ( +__cڡ + * +__��ri� + +__�me +, + +25 * +__��ri� + +__�s�ved +, + +26 +size_t + +__�s�ved�n +� +__THROW + +__wur +; + +27
* + `__REDIRECT_NTH + ( +__���th_��s +, + +28 ( +__cڡ + * +__��ri� + +__�me +, + +29 * +__��ri� + +__�s�ved +), +���th +� +__wur +; + +30
* + `__REDIRECT_NTH + ( +__���th_chk_w�n +, + +31 ( +__cڡ + * +__��ri� + +__�me +, + +32 * +__��ri� + +__�s�ved +, + +33 +size_t + +__�s�ved�n +), +__���th_chk +� +__wur + + +34 + `__w�ljr + ("second�rgument of�ealpath must be�ither NULL or�t " + +37 +__ex��_�ways_�l�e + +__wur + * + +38 + `__NTH + ( + $���th + ( +__cڡ + * +__��ri� + +__�me +, *__��ri� +__�s�ved +)) + +40 i�( + `__bos + ( +__�s�ved +�!�( +size_t +) -1) + +42 #i� +def�ed + +_LIBC_LIMITS_H_ + && def�ed +PATH_MAX + + +43 i�( + `__bos + ( +__�s�ved +�< +PATH_MAX +) + +44 + `__���th_chk_w�n + ( +__�me +, +__�s�ved +, + `__bos + (__resolved)); + +46 + `__���th_chk + ( +__�me +, +__�s�ved +, + `__bos + (__resolved)); + +49 + `__���th_��s + ( +__�me +, +__�s�ved +); + +50 + } +} + +53
+ $__��ame_r_chk + ( +__fd +, * +__buf +, +size_t + +__bu� +, + +54 +size_t + +__ėl +� +__THROW + + `__n�nu� + ((2)); + +55
+ `__REDIRECT_NTH + ( +__��ame_r_��s +, ( +__fd +, * +__buf +, + +56 +size_t + +__bu� +), +��ame_r +) + +57 + `__n�nu� + ((2)); + +58
+ `__REDIRECT_NTH + ( +__��ame_r_chk_w�n +, + +59 ( +__fd +, * +__buf +, +size_t + +__bu� +, + +60 +size_t + +__ėl +), +__��ame_r_chk +) + +61 + `__n�nu� + ((2)� + `__w�ljr + ("ptsname_r called with buflen bigger�han " + +64 +__ex��_�ways_�l�e + + +65 + `__NTH + ( + $��ame_r + ( +__fd +, * +__buf +, +size_t + +__bu� +)) + +67 i�( + `__bos + ( +__buf +�!�( +size_t +) -1) + +69 i�(! + `__bu�t�_cڡ�t_p + ( +__bu� +)) + +70 + `__��ame_r_chk + ( +__fd +, +__buf +, +__bu� +, + `__bos + (__buf)); + +71 i�( +__bu� + > + `__bos + ( +__buf +)) + +72 + `__��ame_r_chk_w�n + ( +__fd +, +__buf +, +__bu� +, + `__bos + (__buf)); + +74 + `__��ame_r_��s + ( +__fd +, +__buf +, +__bu� +); + +75 + } +} + +78
+ $__w�omb_chk + (* +__s +, +wch�_t + +__wch� +, +size_t + +__bu� +) + +79 +__THROW + +__wur +; + +80
+ `__REDIRECT_NTH + ( +__w�omb_��s +, (* +__s +, +wch�_t + +__wch� +), + +81 +w�omb +� +__wur +; + +83 +__ex��_�ways_�l�e + +__wur + + +84 + `__NTH + ( + $w�omb + (* +__s +, +wch�_t + +__wch� +)) + +89 + #__STDLIB_MB_LEN_MAX + 16 + + ) + +90 #i� +def�ed + +MB_LEN_MAX + && MB_LEN_MAX !� +__STDLIB_MB_LEN_MAX + + +93 i�( + `__bos + ( +__s +�!�( +size_t +�-1 && +__STDLIB_MB_LEN_MAX + > __bos (__s)) + +94 + `__w�omb_chk + ( +__s +, +__wch� +, + `__bos + (__s)); + +95 + `__w�omb_��s + ( +__s +, +__wch� +); + +96 + } +} + +99
+size_t + + $__mb�owcs_chk + ( +wch�_t + * +__��ri� + +__d� +, + +100 +__cڡ + * +__��ri� + +__�c +, + +101 +size_t + +__�n +, size_� +__d��n +� +__THROW +; + +102
+size_t + + `__REDIRECT_NTH + ( +__mb�owcs_��s +, + +103 ( +wch�_t + * +__��ri� + +__d� +, + +104 +__cڡ + * +__��ri� + +__�c +, + +105 +size_t + +__�n +), +mb�owcs +); + +106
+size_t + + `__REDIRECT_NTH + ( +__mb�owcs_chk_w�n +, + +107 ( +wch�_t + * +__��ri� + +__d� +, + +108 +__cڡ + * +__��ri� + +__�c +, + +109 +size_t + +__�n +, size_� +__d��n +), +__mb�owcs_chk +) + +110 + `__w�ljr + ("mbstowcs called with dst buffer smaller�han�en " + +113 +__ex��_�ways_�l�e + +size_t + + +114 + `__NTH + ( + $mb�owcs + ( +wch�_t + * +__��ri� + +__d� +, +__cڡ + *__��ri� +__�c +, + +115 +size_t + +__�n +)) + +117 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +119 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +120 + `__mb�owcs_chk + ( +__d� +, +__�c +, +__�n +, + +121 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +123 i�( +__�n + > + `__bos + ( +__d� +�/ ( +wch�_t +)) + +124 + `__mb�owcs_chk_w�n + ( +__d� +, +__�c +, +__�n +, + +125 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +127 + `__mb�owcs_��s + ( +__d� +, +__�c +, +__�n +); + +128 + } +} + +131
+size_t + + $__wc�ombs_chk + (* +__��ri� + +__d� +, + +132 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +133 +size_t + +__�n +, size_� +__d��n +� +__THROW +; + +134
+size_t + + `__REDIRECT_NTH + ( +__wc�ombs_��s +, + +135 (* +__��ri� + +__d� +, + +136 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +137 +size_t + +__�n +), +wc�ombs +); + +138
+size_t + + `__REDIRECT_NTH + ( +__wc�ombs_chk_w�n +, + +139 (* +__��ri� + +__d� +, + +140 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +141 +size_t + +__�n +, size_� +__d��n +), +__wc�ombs_chk +) + +142 + `__w�ljr + ("wcstombs called with dst buffer smaller�han�en"); + +144 +__ex��_�ways_�l�e + +size_t + + +145 + `__NTH + ( + $wc�ombs + (* +__��ri� + +__d� +, +__cڡ + +wch�_t + *__��ri� +__�c +, + +146 +size_t + +__�n +)) + +148 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +150 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +151 + `__wc�ombs_chk + ( +__d� +, +__�c +, +__�n +, + `__bos + (__dst)); + +152 i�( +__�n + > + `__bos + ( +__d� +)) + +153 + `__wc�ombs_chk_w�n + ( +__d� +, +__�c +, +__�n +, + `__bos + (__dst)); + +155 + `__wc�ombs_��s + ( +__d� +, +__�c +, +__�n +); + +156 + } +} + + @/usr/include/bits/waitflags.h + +20 #i�! +def�ed + +_SYS_WAIT_H + && !def�ed +_STDLIB_H + + +26 + #WNOHANG + 1 + + ) + +27 + #WUNTRACED + 2 + + ) + +30 + #WSTOPPED + 2 + + ) + +31 + #WEXITED + 4 + + ) + +32 + #WCONTINUED + 8 + + ) + +33 + #WNOWAIT + 0x01000000 + + ) + +35 + #__WNOTHREAD + 0x20000000 + + ) + +37 + #__WALL + 0x40000000 + + ) + +38 + #__WCLONE + 0x80000000 + + ) + + @/usr/include/bits/waitstatus.h + +20 #i�! +def�ed + +_SYS_WAIT_H + && !def�ed +_STDLIB_H + + +29 + #__WEXITSTATUS +( +��us +�(((��us�& 0xff00�>> 8) + + ) + +32 + #__WTERMSIG +( +��us +�((��us�& 0x7f) + + ) + +35 + #__WSTOPSIG +( +��us +� + `__WEXITSTATUS +(��us) + + ) + +38 + #__WIFEXITED +( +��us +�( + `__WTERMSIG +(��us�=�0) + + ) + +41 + #__WIFSIGNALED +( +��us +) \ + +42 (((sig�d �((( +��us +�& 0x7f�+ 1�>> 1�> 0) + + ) + +45 + #__WIFSTOPPED +( +��us +�(((��us�& 0xff�=�0x7f) + + ) + +49 #ifde� +WCONTINUED + + +50 + #__WIFCONTINUED +( +��us +�((��us�=� +__W_CONTINUED +) + + ) + +54 + #__WCOREDUMP +( +��us +�((��us�& +__WCOREFLAG +) + + ) + +57 + #__W_EXITCODE +( +�t +, +sig +�(ԑ�<< 8 | (sig)) + + ) + +58 + #__W_STOPCODE +( +sig +�((sig�<< 8 | 0x7f) + + ) + +59 + #__W_CONTINUED + 0xffff + + ) + +60 + #__WCOREFLAG + 0x80 + + ) + +63 #ifdef +__USE_BSD + + +65 + ~<�d�n.h +> + +67 + uwa� + + +69 + mw_��us +; + +72 #if +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +73 + m__w_�rmsig +:7; + +74 + m__w_c�edump +:1; + +75 + m__w_�tcode +:8; + +78 #if +__BYTE_ORDER + =� +__BIG_ENDIAN + + +80 + m__w_�tcode +:8; + +81 + m__w_c�edump +:1; + +82 + m__w_�rmsig +:7; + +84 } + m__wa�_�rm��ed +; + +87 #if +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +88 + m__w_��v� +:8; + +89 + m__w_��sig +:8; + +92 #if +__BYTE_ORDER + =� +__BIG_ENDIAN + + +94 + m__w_��sig +:8; + +95 + m__w_��v� +:8; + +97 } + m__wa�_�ݳd +; + +100 + #w_�rmsig + +__wa�_�rm��ed +. +__w_�rmsig + + + ) + +101 + #w_c�edump + +__wa�_�rm��ed +. +__w_c�edump + + + ) + +102 + #w_�tcode + +__wa�_�rm��ed +. +__w_�tcode + + + ) + +103 + #w_��sig + +__wa�_�ݳd +. +__w_��sig + + + ) + +104 + #w_��v� + +__wa�_�ݳd +. +__w_��v� + + + ) + + @/usr/include/gconv.h + +23 #i�de� +_GCONV_H + + +24 + #_GCONV_H + 1 + + ) + +26 + ~<�u�s.h +> + +27 + #__�ed_mb��e_t + + + ) + +28 + #__�ed_w�t_t + + + ) + +29 + ~<wch�.h +> + +30 + #__�ed_size_t + + + ) + +31 + #__�ed_wch�_t + + + ) + +32 + ~<�ddef.h +> + +35 + #__UNKNOWN_10646_CHAR + (( +wch�_t +�0xfffd) + + ) + +40 + m__GCONV_OK + = 0, + +41 + m__GCONV_NOCONV +, + +42 + m__GCONV_NODB +, + +43 + m__GCONV_NOMEM +, + +45 + m__GCONV_EMPTY_INPUT +, + +46 + m__GCONV_FULL_OUTPUT +, + +47 + m__GCONV_ILLEGAL_INPUT +, + +48 + m__GCONV_INCOMPLETE_INPUT +, + +50 + m__GCONV_ILLEGAL_DESCRIPTOR +, + +51 + m__GCONV_INTERNAL_ERROR + + +58 + m__GCONV_IS_LAST + = 0x0001, + +59 + m__GCONV_IGNORE_ERRORS + = 0x0002 + +64 + g__gc�v_�� +; + +65 + g__gc�v_��_d�a +; + +66 + g__gc�v_l�ded_obje� +; + +67 + g__gc�v_��s_d�a +; + +71 (* + t__gc�v_f� +�( + t__gc�v_�� + *, + t__gc�v_��_d�a + *, + +72 + t__cڡ + **, __const *, + +73 **, + tsize_t + *, , ); + +76 + $w�t_t + (* + t__gc�v_btowc_f� +�( + t__gc�v_�� + *, ); + +79 (* + t__gc�v_��_f� +�( + t__gc�v_�� + *); + +80 (* + t__gc�v_�d_f� +�( + t__gc�v_�� + *); + +84 (* + t__gc�v_��s_f� +�( + t__gc�v_�� + *, + +85 + t__gc�v_��_d�a + *, *, + +86 + t__cڡ + *, + +87 + t__cڡ + **, + +88 + t__cڡ + *, **, + +89 + tsize_t + *); + +92 (* + t__gc�v_��s_cڋxt_f� +�(*, + t__cڡ + *, + +93 + t__cڡ + *, + +97 (* + t__gc�v_��s_qu�y_f� +�( + t__cڡ + *, __const ***, + +98 + tsize_t + *); + +101 (* + t__gc�v_��s_��_f� +) (**, const *); + +102 (* + t__gc�v_��s_�d_f� +) (*); + +104 + s__gc�v_��s_d�a + + +107 +__gc�v_��s_f� + +__��s_f� +; + +108 +__gc�v_��s_cڋxt_f� + +__��s_cڋxt_f� +; + +109 +__gc�v_��s_�d_f� + +__��s_�d_f� +; + +110 * +__d�a +; + +111 +__gc�v_��s_d�a + * +__�xt +; + +116 + s__gc�v_�� + + +118 +__gc�v_l�ded_obje� + * +__shlib_h�d� +; + +119 +__cڡ + * +__mod�me +; + +121 +__cou�� +; + +123 * +__�om_�me +; + +124 * +__to_�me +; + +126 +__gc�v_f� + +__f� +; + +127 +__gc�v_btowc_f� + +__btowc_f� +; + +128 +__gc�v_��_f� + +__��_f� +; + +129 +__gc�v_�d_f� + +__�d_f� +; + +133 +__m�_�eded_�om +; + +134 +__max_�eded_�om +; + +135 +__m�_�eded_to +; + +136 +__max_�eded_to +; + +139 +__��eful +; + +141 * +__d�a +; + +146 + s__gc�v_��_d�a + + +148 * +__outbuf +; + +149 * +__outbu�nd +; + +153 +__�ags +; + +157 +__�vo�ti�_cou�� +; + +161 +__����_u� +; + +163 +__mb��e_t + * +__��� +; + +164 +__mb��e_t + +__��e +; + +168 +__gc�v_��s_d�a + * +__��s +; + +173 + s__gc�v_�fo + + +175 +size_t + +__n��s +; + +176 +__gc�v_�� + * +__��s +; + +177 +__ex�nsi�__ + +__gc�v_��_d�a + +__d�a + +__�ex�r +; + +178 } * + t__gc�v_t +; + + @/usr/include/gnu/stubs-32.h + +6 #ifde� +_LIBC + + +7 #�r� +A�li�ti�s + +may + +n� + +def�e + +the + +ma�o + +_LIBC + + +10 + #__�ub___k��l_co� + + + ) + +11 + #__�ub___k��l_s�l + + + ) + +12 + #__�ub___k��l_�� + + + ) + +13 + #__�ub_ch�ags + + + ) + +14 + #__�ub_�ach + + + ) + +15 + #__�ub_fch�ags + + + ) + +16 + #__�ub_fd�ach + + + ) + +17 + #__�ub_g�y + + + ) + +18 + #__�ub_lchmod + + + ) + +19 + #__�ub_�voke + + + ) + +20 + #__�ub_��og� + + + ) + +21 + #__�ub_sig�tu� + + + ) + +22 + #__�ub_s�k + + + ) + +23 + #__�ub_�ty + + + ) + + @/usr/include/gnu/stubs-64.h + +6 #ifde� +_LIBC + + +7 #�r� +A�li�ti�s + +may + +n� + +def�e + +the + +ma�o + +_LIBC + + +10 + #__�ub_bd�ush + + + ) + +11 + #__�ub_ch�ags + + + ) + +12 + #__�ub_�ach + + + ) + +13 + #__�ub_fch�ags + + + ) + +14 + #__�ub_fd�ach + + + ) + +15 + #__�ub_g�msg + + + ) + +16 + #__�ub_g�y + + + ) + +17 + #__�ub_lchmod + + + ) + +18 + #__�ub_putmsg + + + ) + +19 + #__�ub_�voke + + + ) + +20 + #__�ub_��og� + + + ) + +21 + #__�ub_sig�tu� + + + ) + +22 + #__�ub_s�k + + + ) + +23 + #__�ub_�ty + + + ) + + @/usr/include/sys/types.h + +24 #i�def +_SYS_TYPES_H + + +25 + #_SYS_TYPES_H + 1 + + ) + +27 + ~<�u�s.h +> + +29 + g__BEGIN_DECLS + + +31 + ~<b�s/ty�s.h +> + +33 #ifdef +__USE_BSD + + +34 #i�de� +__u_ch�_def�ed + + +35 +__u_ch� + + tu_ch� +; + +36 +__u_sh�t + + tu_sh�t +; + +37 +__u_�t + + tu_�t +; + +38 +__u_l�g + + tu_l�g +; + +39 +__quad_t + + tquad_t +; + +40 +__u_quad_t + + tu_quad_t +; + +41 +__fsid_t + + tfsid_t +; + +42 + #__u_ch�_def�ed + + + ) + +46 +__loff_t + + tloff_t +; + +48 #i�de� +__�o_t_def�ed + + +49 #i�de� +__USE_FILE_OFFSET64 + + +50 +__�o_t + + t�o_t +; + +52 +__�o64_t + + t�o_t +; + +54 + #__�o_t_def�ed + + + ) + +56 #i� +def�ed + +__USE_LARGEFILE64 + && !def�ed +__�o64_t_def�ed + + +57 +__�o64_t + + t�o64_t +; + +58 + #__�o64_t_def�ed + + + ) + +61 #i�de� +__dev_t_def�ed + + +62 +__dev_t + + tdev_t +; + +63 + #__dev_t_def�ed + + + ) + +66 #i�de� +__gid_t_def�ed + + +67 +__gid_t + + tgid_t +; + +68 + #__gid_t_def�ed + + + ) + +71 #i�de� +__mode_t_def�ed + + +72 +__mode_t + + tmode_t +; + +73 + #__mode_t_def�ed + + + ) + +76 #i�de� +__ƚk_t_def�ed + + +77 +__ƚk_t + + tƚk_t +; + +78 + #__ƚk_t_def�ed + + + ) + +81 #i�de� +__uid_t_def�ed + + +82 +__uid_t + + tuid_t +; + +83 + #__uid_t_def�ed + + + ) + +86 #i�de� +__off_t_def�ed + + +87 #i�de� +__USE_FILE_OFFSET64 + + +88 +__off_t + + toff_t +; + +90 +__off64_t + + toff_t +; + +92 + #__off_t_def�ed + + + ) + +94 #i� +def�ed + +__USE_LARGEFILE64 + && !def�ed +__off64_t_def�ed + + +95 +__off64_t + + toff64_t +; + +96 + #__off64_t_def�ed + + + ) + +99 #i�de� +__pid_t_def�ed + + +100 +__pid_t + + tpid_t +; + +101 + #__pid_t_def�ed + + + ) + +104 #i�( +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN +�&& !def�ed +__id_t_def�ed + + +105 +__id_t + + tid_t +; + +106 + #__id_t_def�ed + + + ) + +109 #i�de� +__ssize_t_def�ed + + +110 +__ssize_t + + tssize_t +; + +111 + #__ssize_t_def�ed + + + ) + +114 #ifdef +__USE_BSD + + +115 #i�de� +__daddr_t_def�ed + + +116 +__daddr_t + + tdaddr_t +; + +117 +__�ddr_t + + t�ddr_t +; + +118 + #__daddr_t_def�ed + + + ) + +122 #i�( +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN +�&& !def�ed +__key_t_def�ed + + +123 +__key_t + + tkey_t +; + +124 + #__key_t_def�ed + + + ) + +127 #ifde� +__USE_XOPEN + + +128 + #__�ed_�ock_t + + + ) + +130 + #__�ed_time_t + + + ) + +131 + #__�ed_tim�_t + + + ) + +132 + #__�ed_�ockid_t + + + ) + +133 + ~<time.h +> + +135 #ifde� +__USE_XOPEN + + +136 #i�de� +__u�c�ds_t_def�ed + + +137 +__u�c�ds_t + + tu�c�ds_t +; + +138 + #__u�c�ds_t_def�ed + + + ) + +140 #i�de� +__su�c�ds_t_def�ed + + +141 +__su�c�ds_t + + tsu�c�ds_t +; + +142 + #__su�c�ds_t_def�ed + + + ) + +146 + #__�ed_size_t + + + ) + +147 + ~<�ddef.h +> + +149 #ifde� +__USE_MISC + + +151 + tul�g +; + +152 + tush�t +; + +153 + tu�t +; + +158 #i�! +__GNUC_PREREQ + (2, 7) + +161 #i�de� +__�t8_t_def�ed + + +162 + #__�t8_t_def�ed + + + ) + +163 + t�t8_t +; + +164 + t�t16_t +; + +165 + t�t32_t +; + +166 #i� +__WORDSIZE + == 64 + +167 + t�t64_t +; + +168 #�i� +__GLIBC_HAVE_LONG_LONG + + +169 +__ex�nsi�__ + + t�t64_t +; + +174 + tu_�t8_t +; + +175 + tu_�t16_t +; + +176 + tu_�t32_t +; + +177 #i� +__WORDSIZE + == 64 + +178 + tu_�t64_t +; + +179 #�i� +__GLIBC_HAVE_LONG_LONG + + +180 +__ex�nsi�__ + + tu_�t64_t +; + +183 + t�gi��_t +; + +188 + #__�tN_t +( +N +, +MODE +) \ + +189 ## + tN +## + t_t + + t__��ibu�__ + (( + t__mode__ + ( + tMODE +))) + + ) + +190 + t__u_�tN_t +( + tN +, + tMODE +) \ + +191 + tu_�t +## + tN +## + t_t + + t__��ibu�__ + (( + t__mode__ + ( + tMODE +))) + + ) + +193 #i�de� + t__�t8_t_def�ed + + +194 + t__�t8_t_def�ed + + + ) + +195 + t__�tN_t + (8, + t__QI__ +); + +196 +__�tN_t + (16, +__HI__ +); + +197 +__�tN_t + (32, +__SI__ +); + +198 +__�tN_t + (64, +__DI__ +); + +201 +__u_�tN_t + (8, +__QI__ +); + +202 +__u_�tN_t + (16, +__HI__ +); + +203 +__u_�tN_t + (32, +__SI__ +); + +204 +__u_�tN_t + (64, +__DI__ +); + +206 + t�gi��_t + + t__��ibu�__ + (( + t__mode__ + ( + t__w�d__ +))); + +212 + #__BIT_TYPES_DEFINED__ + 1 + + ) + +215 #ifdef +__USE_BSD + + +217 + ~<�d�n.h +> + +220 + ~<sys/���.h +> + +223 + ~<sys/sysma�os.h +> + +227 #i� +def�ed + +__USE_UNIX98 + && !def�ed +__blksize_t_def�ed + + +228 +__blksize_t + + tblksize_t +; + +229 + #__blksize_t_def�ed + + + ) + +233 #i�de� +__USE_FILE_OFFSET64 + + +234 #i�de� +__blk�t_t_def�ed + + +235 +__blk�t_t + + tblk�t_t +; + +236 + #__blk�t_t_def�ed + + + ) + +238 #i�de� +__fsblk�t_t_def�ed + + +239 +__fsblk�t_t + + tfsblk�t_t +; + +240 + #__fsblk�t_t_def�ed + + + ) + +242 #i�de� +__fsf��t_t_def�ed + + +243 +__fsf��t_t + + tfsf��t_t +; + +244 + #__fsf��t_t_def�ed + + + ) + +247 #i�de� +__blk�t_t_def�ed + + +248 +__blk�t64_t + + tblk�t_t +; + +249 + #__blk�t_t_def�ed + + + ) + +251 #i�de� +__fsblk�t_t_def�ed + + +252 +__fsblk�t64_t + + tfsblk�t_t +; + +253 + #__fsblk�t_t_def�ed + + + ) + +255 #i�de� +__fsf��t_t_def�ed + + +256 +__fsf��t64_t + + tfsf��t_t +; + +257 + #__fsf��t_t_def�ed + + + ) + +261 #ifde� +__USE_LARGEFILE64 + + +262 +__blk�t64_t + + tblk�t64_t +; + +263 +__fsblk�t64_t + + tfsblk�t64_t +; + +264 +__fsf��t64_t + + tfsf��t64_t +; + +269 #i� +def�ed + +__USE_POSIX199506 + || def�ed +__USE_UNIX98 + + +270 + ~<b�s/�h�adty�s.h +> + +273 + g__END_DECLS + + + @/usr/include/wchar.h + +24 #i�de� +_WCHAR_H + + +26 #i�! +def�ed + +__�ed_mb��e_t + && !def�ed +__�ed_w�t_t + + +27 + #_WCHAR_H + 1 + + ) + +28 + ~<�u�s.h +> + +31 #ifde� +_WCHAR_H + + +33 + #__�ed___FILE + + + ) + +34 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K + + +35 + #__�ed_FILE + + + ) + +37 + ~<�dio.h +> + +39 + #__�ed___va_li� + + + ) + +40 + ~<�d�g.h +> + +42 + ~<b�s/wch�.h +> + +45 + #__�ed_size_t + + + ) + +46 + #__�ed_wch�_t + + + ) + +47 + #__�ed_NULL + + + ) + +49 #i� +def�ed + +_WCHAR_H + || def�ed +__�ed_w�t_t + || !def�ed +__WINT_TYPE__ + + +50 #unde� +__�ed_w�t_t + + +51 + #__�ed_w�t_t + + + ) + +52 + ~<�ddef.h +> + +55 #i� +def�ed + +__�lu�lus + && +__GNUC_PREREQ + (4, 4) + +56 + #__CORRECT_ISO_CPP_WCHAR_H_PROTO + + + ) + +61 #i�de� +_WINT_T + + +66 + #_WINT_T + + + ) + +67 + tw�t_t +; + +71 #i� +def�ed + +__�lu�lus + && def�ed +_GLIBCPP_USE_NAMESPACES + \ + +72 && +def�ed + +__WINT_TYPE__ + + +73 +__BEGIN_NAMESPACE_STD + + +74 +__WINT_TYPE__ + + tw�t_t +; + +75 + g__END_NAMESPACE_STD + + +80 #i�( +def�ed + +_WCHAR_H + || def�ed +__�ed_mb��e_t +�&& !def�ed +__mb��e_t_def�ed + + +81 + #__mb��e_t_def�ed + 1 + + ) + +85 + m__cou� +; + +88 #ifde� +__WINT_TYPE__ + + +89 +__WINT_TYPE__ + + m__wch +; + +91 +w�t_t + + m__wch +; + +93 + m__wchb +[4]; + +94 } + m__v�ue +; + +95 } + t__mb��e_t +; + +97 #unde� +__�ed_mb��e_t + + +102 #ifde� +_WCHAR_H + + +104 +__BEGIN_NAMESPACE_C99 + + +106 +__mb��e_t + + tmb��e_t +; + +107 + g__END_NAMESPACE_C99 + + +108 #ifde� +__USE_GNU + + +109 + $__USING_NAMESPACE_C99 +( +mb��e_t +) + +112 #i�de� +WCHAR_MIN + + +114 + #WCHAR_MIN + +__WCHAR_MIN + + + ) + +115 + #WCHAR_MAX + +__WCHAR_MAX + + + ) + +118 #i�de� +WEOF + + +119 + #WEOF + (0xffffffffu) + + ) + +124 #i� +def�ed + +__USE_XOPEN + && !def�ed +__USE_UNIX98 + + +125 + ~<w�y�.h +> + +129 +__BEGIN_DECLS + + +131 +__BEGIN_NAMESPACE_STD + + +134 +tm +; + +135 +__END_NAMESPACE_STD + + +139 + $__USING_NAMESPACE_STD +( +tm +) + +142 +__BEGIN_NAMESPACE_STD + + +144
+wch�_t + * + $wcs�y + ( +wch�_t + * +__��ri� + +__de� +, + +145 +__cڡ + +wch�_t + * +__��ri� + +__�c +� +__THROW +; + +147
+wch�_t + * + $wc��y + ( +wch�_t + * +__��ri� + +__de� +, + +148 +__cڡ + +wch�_t + * +__��ri� + +__�c +, +size_t + +__n +) + +149 +__THROW +; + +152
+wch�_t + * + $wcs�t + ( +wch�_t + * +__��ri� + +__de� +, + +153 +__cڡ + +wch�_t + * +__��ri� + +__�c +� +__THROW +; + +155
+wch�_t + * + $wc��t + ( +wch�_t + * +__��ri� + +__de� +, + +156 +__cڡ + +wch�_t + * +__��ri� + +__�c +, +size_t + +__n +) + +157 +__THROW +; + +160
+ $wcscmp + ( +__cڡ + +wch�_t + * +__s1 +, __cڡ wch�_�* +__s2 +) + +161 +__THROW + +__��ibu�_pu�__ +; + +163
+ $wc�cmp + ( +__cڡ + +wch�_t + * +__s1 +, __cڡ wch�_�* +__s2 +, +size_t + +__n +) + +164 +__THROW + +__��ibu�_pu�__ +; + +165 +__END_NAMESPACE_STD + + +167 #ifde� +__USE_XOPEN2K8 + + +169
+ $wcs��cmp + ( +__cڡ + +wch�_t + * +__s1 +, __cڡ wch�_�* +__s2 +� +__THROW +; + +172
+ $wc���cmp + ( +__cڡ + +wch�_t + * +__s1 +, __cڡ wch�_�* +__s2 +, + +173 +size_t + +__n +� +__THROW +; + +177 + ~<xlo��.h +> + +179
+ $wcs��cmp_l + ( +__cڡ + +wch�_t + * +__s1 +, __cڡ wch�_�* +__s2 +, + +180 +__lo��_t + +__loc +� +__THROW +; + +182
+ $wc���cmp_l + ( +__cڡ + +wch�_t + * +__s1 +, __cڡ wch�_�* +__s2 +, + +183 +size_t + +__n +, +__lo��_t + +__loc +� +__THROW +; + +186 +__BEGIN_NAMESPACE_STD + + +189
+ $wcsc�l + ( +__cڡ + +wch�_t + * +__s1 +, __cڡ wch�_�* +__s2 +� +__THROW +; + +193
+size_t + + $wcsx�m + ( +wch�_t + * +__��ri� + +__s1 +, + +194 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +� +__THROW +; + +195 +__END_NAMESPACE_STD + + +197 #ifde� +__USE_XOPEN2K8 + + +203
+ $wcsc�l_l + ( +__cڡ + +wch�_t + * +__s1 +, __cڡ wch�_�* +__s2 +, + +204 +__lo��_t + +__loc +� +__THROW +; + +209
+size_t + + $wcsx�m_l + ( +wch�_t + * +__s1 +, +__cڡ + wch�_�* +__s2 +, + +210 +size_t + +__n +, +__lo��_t + +__loc +� +__THROW +; + +213
+wch�_t + * + $wcsdup + ( +__cڡ + +wch�_t + * +__s +� +__THROW + +__��ibu�_m�loc__ +; + +216 +__BEGIN_NAMESPACE_STD + + +218 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +219
"C++" +wch�_t + * + $wcschr + ( +wch�_t + * +__wcs +, wch�_� +__wc +) + +220 +__THROW + + `__asm + ("wcschr"� +__��ibu�_pu�__ +; + +221
"C++" +__cڡ + +wch�_t + * + $wcschr + ( +__cڡ + +wch�_t + * +__wcs +, wch�_� +__wc +) + +222 +__THROW + + `__asm + ("wcschr"� +__��ibu�_pu�__ +; + +224
+wch�_t + * + $wcschr + ( +__cڡ + +wch�_t + * +__wcs +, wch�_� +__wc +) + +225 +__THROW + +__��ibu�_pu�__ +; + +228 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +229
"C++" +wch�_t + * + $wc�chr + ( +wch�_t + * +__wcs +, wch�_� +__wc +) + +230 +__THROW + + `__asm + ("wc�chr"� +__��ibu�_pu�__ +; + +231
"C++" +__cڡ + +wch�_t + * + $wc�chr + ( +__cڡ + +wch�_t + * +__wcs +, wch�_� +__wc +) + +232 +__THROW + + `__asm + ("wc�chr"� +__��ibu�_pu�__ +; + +234
+wch�_t + * + $wc�chr + ( +__cڡ + +wch�_t + * +__wcs +, wch�_� +__wc +) + +235 +__THROW + +__��ibu�_pu�__ +; + +237 +__END_NAMESPACE_STD + + +239 #ifde� +__USE_GNU + + +242
+wch�_t + * + $wcsch�ul + ( +__cڡ + +wch�_t + * +__s +, wch�_� +__wc +) + +243 +__THROW + +__��ibu�_pu�__ +; + +246 +__BEGIN_NAMESPACE_STD + + +249
+size_t + + $wcsc�n + ( +__cڡ + +wch�_t + * +__wcs +, __cڡ wch�_�* +__�je� +) + +250 +__THROW + +__��ibu�_pu�__ +; + +253
+size_t + + $wcs�n + ( +__cڡ + +wch�_t + * +__wcs +, __cڡ wch�_�* +__ac�� +) + +254 +__THROW + +__��ibu�_pu�__ +; + +256 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +257
"C++" +wch�_t + * + $wc�brk + ( +wch�_t + * +__wcs +, +__cڡ + wch�_�* +__ac�� +) + +258 +__THROW + + `__asm + ("wc�brk"� +__��ibu�_pu�__ +; + +259
"C++" +__cڡ + +wch�_t + * + $wc�brk + ( +__cڡ + +wch�_t + * +__wcs +, + +260 +__cڡ + +wch�_t + * +__ac�� +) + +261 +__THROW + + `__asm + ("wc�brk"� +__��ibu�_pu�__ +; + +263
+wch�_t + * + $wc�brk + ( +__cڡ + +wch�_t + * +__wcs +, __cڡ wch�_�* +__ac�� +) + +264 +__THROW + +__��ibu�_pu�__ +; + +267 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +268
"C++" +wch�_t + * + $wcs�r + ( +wch�_t + * +__hay�ack +, +__cڡ + wch�_�* +__�ed� +) + +269 +__THROW + + `__asm + ("wcs�r"� +__��ibu�_pu�__ +; + +270
"C++" +__cڡ + +wch�_t + * + $wcs�r + ( +__cڡ + +wch�_t + * +__hay�ack +, + +271 +__cڡ + +wch�_t + * +__�ed� +) + +272 +__THROW + + `__asm + ("wcs�r"� +__��ibu�_pu�__ +; + +274
+wch�_t + * + $wcs�r + ( +__cڡ + +wch�_t + * +__hay�ack +, __cڡ wch�_�* +__�ed� +) + +275 +__THROW + +__��ibu�_pu�__ +; + +279
+wch�_t + * + $wc�ok + ( +wch�_t + * +__��ri� + +__s +, + +280 +__cڡ + +wch�_t + * +__��ri� + +__d�im +, + +281 +wch�_t + ** +__��ri� + +__�r +� +__THROW +; + +284
+size_t + + $wc�� + ( +__cڡ + +wch�_t + * +__s +� +__THROW + +__��ibu�_pu�__ +; + +285 +__END_NAMESPACE_STD + + +287 #ifde� +__USE_XOPEN + + +289 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +290
"C++" +wch�_t + * + $wcswcs + ( +wch�_t + * +__hay�ack +, +__cڡ + wch�_�* +__�ed� +) + +291 +__THROW + + `__asm + ("wcswcs"� +__��ibu�_pu�__ +; + +292
"C++" +__cڡ + +wch�_t + * + $wcswcs + ( +__cڡ + +wch�_t + * +__hay�ack +, + +293 +__cڡ + +wch�_t + * +__�ed� +) + +294 +__THROW + + `__asm + ("wcswcs"� +__��ibu�_pu�__ +; + +296
+wch�_t + * + $wcswcs + ( +__cڡ + +wch�_t + * +__hay�ack +, __cڡ wch�_�* +__�ed� +) + +297 +__THROW + +__��ibu�_pu�__ +; + +301 #ifde� +__USE_XOPEN2K8 + + +303
+size_t + + $wc��n + ( +__cڡ + +wch�_t + * +__s +, +size_t + +__max�n +) + +304 +__THROW + +__��ibu�_pu�__ +; + +308 +__BEGIN_NAMESPACE_STD + + +310 #ifde� +__CORRECT_ISO_CPP_WCHAR_H_PROTO + + +311
"C++" +wch�_t + * + $wmemchr + ( +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +) + +312 +__THROW + + `__asm + ("wmemchr"� +__��ibu�_pu�__ +; + +313
"C++" +__cڡ + +wch�_t + * + $wmemchr + ( +__cڡ + +wch�_t + * +__s +, wch�_� +__c +, + +314 +size_t + +__n +) + +315 +__THROW + + `__asm + ("wmemchr"� +__��ibu�_pu�__ +; + +317
+wch�_t + * + $wmemchr + ( +__cڡ + +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +) + +318 +__THROW + +__��ibu�_pu�__ +; + +322
+ $wmemcmp + ( +__cڡ + +wch�_t + * +__��ri� + +__s1 +, + +323 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +) + +324 +__THROW + +__��ibu�_pu�__ +; + +327
+wch�_t + * + $wmem�y + ( +wch�_t + * +__��ri� + +__s1 +, + +328 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +� +__THROW +; + +332
+wch�_t + * + $wmemmove + ( +wch�_t + * +__s1 +, +__cڡ + wch�_�* +__s2 +, +size_t + +__n +) + +333 +__THROW +; + +336
+wch�_t + * + $wmem�t + ( +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +� +__THROW +; + +337 +__END_NAMESPACE_STD + + +339 #ifde� +__USE_GNU + + +342
+wch�_t + * + $wmemp�y + ( +wch�_t + * +__��ri� + +__s1 +, + +343 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +) + +344 +__THROW +; + +348 +__BEGIN_NAMESPACE_STD + + +351
+w�t_t + + $btowc + ( +__c +� +__THROW +; + +355
+ $w�ob + ( +w�t_t + +__c +� +__THROW +; + +359
+ $mbs�� + ( +__cڡ + +mb��e_t + * +__ps +� +__THROW + +__��ibu�_pu�__ +; + +363
+size_t + + $mb�owc + ( +wch�_t + * +__��ri� + +__pwc +, + +364 +__cڡ + * +__��ri� + +__s +, +size_t + +__n +, + +365 +mb��e_t + * +__p +� +__THROW +; + +368
+size_t + + $w�tomb + (* +__��ri� + +__s +, +wch�_t + +__wc +, + +369 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +372
+size_t + + $__mb�� + ( +__cڡ + * +__��ri� + +__s +, +size_t + +__n +, + +373 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +374
+size_t + + $mb�� + ( +__cڡ + * +__��ri� + +__s +, +size_t + +__n +, + +375 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +376 +__END_NAMESPACE_STD + + +378 #ifde� +__USE_EXTERN_INLINES + + +384
+w�t_t + + $__btowc_��s + ( +__c +� + `__asm + ("btowc"); + +385 +__ex��_�l�e + +w�t_t + + +386 + `__NTH + ( + $btowc + ( +__c +)) + +387 { ( + `__bu�t�_cڡ�t_p + ( +__c +) && __c >= '\0' && __c <= '\x7f' + +388 ? ( +w�t_t +� +__c + : + `__btowc_��s + (__c)); + } +} + +390
+ $__w�ob_��s + ( +w�t_t + +__c +� + `__asm + ("wctob"); + +391 +__ex��_�l�e + + +392 + `__NTH + ( + $w�ob + ( +w�t_t + +__wc +)) + +393 { ( + `__bu�t�_cڡ�t_p + ( +__wc +�&& __w�>� +L +'\0' && __wc <= L'\x7f' + +394 ? (� +__wc + : + `__w�ob_��s + (__wc)); + } +} + +396 +__ex��_�l�e + +size_t + + +397 +__NTH + ( + $mb�� + ( +__cڡ + * +__��ri� + +__s +, +size_t + +__n +, + +398 +mb��e_t + * +__��ri� + +__ps +)) + +399 { ( +__ps + !� +NULL + + +400 ? + `mb�owc + ( +NULL +, +__s +, +__n +, +__ps +�: + `__mb�� + (__s, __n, NULL)); + } +} + +403 +__BEGIN_NAMESPACE_STD + + +406
+size_t + + $mb�towcs + ( +wch�_t + * +__��ri� + +__d� +, + +407 +__cڡ + ** +__��ri� + +__�c +, +size_t + +__�n +, + +408 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +412
+size_t + + $wc�tombs + (* +__��ri� + +__d� +, + +413 +__cڡ + +wch�_t + ** +__��ri� + +__�c +, +size_t + +__�n +, + +414 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +415 +__END_NAMESPACE_STD + + +418 #ifdef +__USE_XOPEN2K8 + + +421
+size_t + + $mb��owcs + ( +wch�_t + * +__��ri� + +__d� +, + +422 +__cڡ + ** +__��ri� + +__�c +, +size_t + +__nmc +, + +423 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +427
+size_t + + $wc��ombs + (* +__��ri� + +__d� +, + +428 +__cڡ + +wch�_t + ** +__��ri� + +__�c +, + +429 +size_t + +__nwc +, size_� +__�n +, + +430 +mb��e_t + * +__��ri� + +__ps +� +__THROW +; + +435 #ifde� +__USE_XOPEN + + +437
+ $wcwidth + ( +wch�_t + +__c +� +__THROW +; + +441
+ $wcswidth + ( +__cڡ + +wch�_t + * +__s +, +size_t + +__n +� +__THROW +; + +445 +__BEGIN_NAMESPACE_STD + + +448
+ $wc�od + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +449 +wch�_t + ** +__��ri� + +__�d�r +� +__THROW +; + +450 +__END_NAMESPACE_STD + + +452 #ifde� +__USE_ISOC99 + + +453 +__BEGIN_NAMESPACE_C99 + + +455
+ $wc�of + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +456 +wch�_t + ** +__��ri� + +__�d�r +� +__THROW +; + +457
+ $wc��d + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +458 +wch�_t + ** +__��ri� + +__�d�r +� +__THROW +; + +459 +__END_NAMESPACE_C99 + + +463 +__BEGIN_NAMESPACE_STD + + +466
+ $wc�� + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +467 +wch�_t + ** +__��ri� + +__�d�r +, +__ba� +� +__THROW +; + +471
+ $wc�oul + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +472 +wch�_t + ** +__��ri� + +__�d�r +, +__ba� +) + +473 +__THROW +; + +474 +__END_NAMESPACE_STD + + +476 #i� +def�ed + +__USE_ISOC99 + || (def�ed +__GNUC__ + && def�ed +__USE_GNU +) + +477 +__BEGIN_NAMESPACE_C99 + + +480 +__ex�nsi�__ + + +481
+ $wc��l + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +482 +wch�_t + ** +__��ri� + +__�d�r +, +__ba� +) + +483 +__THROW +; + +487 +__ex�nsi�__ + + +488
+ $wc�ou� + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +489 +wch�_t + ** +__��ri� + +__�d�r +, + +490 +__ba� +� +__THROW +; + +491 +__END_NAMESPACE_C99 + + +494 #i� +def�ed + +__GNUC__ + && def�ed +__USE_GNU + + +497 +__ex�nsi�__ + + +498
+ $wc�oq + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +499 +wch�_t + ** +__��ri� + +__�d�r +, +__ba� +) + +500 +__THROW +; + +504 +__ex�nsi�__ + + +505
+ $wc�ouq + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +506 +wch�_t + ** +__��ri� + +__�d�r +, + +507 +__ba� +� +__THROW +; + +510 #ifde� +__USE_GNU + + +524 + ~<xlo��.h +> + +528
+ $wc��_l + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +529 +wch�_t + ** +__��ri� + +__�d�r +, +__ba� +, + +530 +__lo��_t + +__loc +� +__THROW +; + +532
+ $wc�oul_l + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +533 +wch�_t + ** +__��ri� + +__�d�r +, + +534 +__ba� +, +__lo��_t + +__loc +� +__THROW +; + +536 +__ex�nsi�__ + + +537
+ $wc��l_l + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +538 +wch�_t + ** +__��ri� + +__�d�r +, + +539 +__ba� +, +__lo��_t + +__loc +� +__THROW +; + +541 +__ex�nsi�__ + + +542
+ $wc�ou�_l + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +543 +wch�_t + ** +__��ri� + +__�d�r +, + +544 +__ba� +, +__lo��_t + +__loc +) + +545 +__THROW +; + +547
+ $wc�od_l + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +548 +wch�_t + ** +__��ri� + +__�d�r +, +__lo��_t + +__loc +) + +549 +__THROW +; + +551
+ $wc�of_l + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +552 +wch�_t + ** +__��ri� + +__�d�r +, +__lo��_t + +__loc +) + +553 +__THROW +; + +555
+ $wc��d_l + ( +__cڡ + +wch�_t + * +__��ri� + +__Ō +, + +556 +wch�_t + ** +__��ri� + +__�d�r +, + +557 +__lo��_t + +__loc +� +__THROW +; + +561 #ifdef +__USE_XOPEN2K8 + + +564
+wch�_t + * + $w��y + ( +wch�_t + * +__de� +, +__cڡ + wch�_�* +__�c +� +__THROW +; + +568
+wch�_t + * + $w�n�y + ( +wch�_t + * +__de� +, +__cڡ + wch�_�* +__�c +, +size_t + +__n +) + +569 +__THROW +; + +575 #ifdef +__USE_XOPEN2K8 + + +578
+__FILE + * + $ݒ_wmem��am + ( +wch�_t + ** +__bu�oc +, +size_t + * +__siz�oc +� +__THROW +; + +581 #i� +def�ed + +__USE_ISOC95 + || def�ed +__USE_UNIX98 + + +582 +__BEGIN_NAMESPACE_STD + + +585
+ $fwide + ( +__FILE + * +__� +, +__mode +� +__THROW +; + +592
+ `fw��tf + ( +__FILE + * +__��ri� + +__��am +, + +593 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...) + +599
+ `w��tf + ( +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...) + +602
+ $sw��tf + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +603 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...) + +604 +__THROW + ; + +610
+ `vfw��tf + ( +__FILE + * +__��ri� + +__s +, + +611 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +612 +__gnuc_va_li� + +__�g +) + +618
+ `vw��tf + ( +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +619 +__gnuc_va_li� + +__�g +) + +623
+ $vsw��tf + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +624 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +625 +__gnuc_va_li� + +__�g +) + +626 +__THROW + ; + +633
+ `fws�nf + ( +__FILE + * +__��ri� + +__��am +, + +634 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...) + +640
+ `ws�nf + ( +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...) + +643
+ $sws�nf + ( +__cڡ + +wch�_t + * +__��ri� + +__s +, + +644 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...) + +645 +__THROW + ; + +647 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__USE_GNU + \ + +648 && (! +def�ed + +__LDBL_COMPAT + || !def�ed +__REDIRECT +) \ + +649 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +650 #ifde� +__REDIRECT + + +654
+ `__REDIRECT + ( +fws�nf +, ( +__FILE + * +__��ri� + +__��am +, + +655 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...), + +656 +__isoc99_fws�nf +) + +658
+ `__REDIRECT + ( +ws�nf +, ( +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...), + +659 +__isoc99_ws�nf +) + +661
+ `__REDIRECT + ( +sws�nf +, ( +__cڡ + +wch�_t + * +__��ri� + +__s +, + +662 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...), + +663 +__isoc99_sws�nf +) + +664 +__THROW + ; + +666
+ `__isoc99_fws�nf + ( +__FILE + * +__��ri� + +__��am +, + +667 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...); + +668
+ `__isoc99_ws�nf + ( +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...); + +669
+ $__isoc99_sws�nf + ( +__cڡ + +wch�_t + * +__��ri� + +__s +, + +670 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...) + +671 +__THROW +; + +672 + #fws�nf + +__isoc99_fws�nf + + + ) + +673 + #ws�nf + +__isoc99_ws�nf + + + ) + +674 + #sws�nf + +__isoc99_sws�nf + + + ) + +678 +__END_NAMESPACE_STD + + +681 #ifde� +__USE_ISOC99 + + +682 +__BEGIN_NAMESPACE_C99 + + +687
+ `vfws�nf + ( +__FILE + * +__��ri� + +__s +, + +688 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +689 +__gnuc_va_li� + +__�g +) + +695
+ `vws�nf + ( +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +696 +__gnuc_va_li� + +__�g +) + +699
+ $vsws�nf + ( +__cڡ + +wch�_t + * +__��ri� + +__s +, + +700 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +701 +__gnuc_va_li� + +__�g +) + +702 +__THROW + ; + +704 #i�! +def�ed + +__USE_GNU + \ + +705 && (! +def�ed + +__LDBL_COMPAT + || !def�ed +__REDIRECT +) \ + +706 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +707 #ifde� +__REDIRECT + + +708
+ `__REDIRECT + ( +vfws�nf +, ( +__FILE + * +__��ri� + +__s +, + +709 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +710 +__gnuc_va_li� + +__�g +), +__isoc99_vfws�nf +) + +712
+ `__REDIRECT + ( +vws�nf +, ( +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +713 +__gnuc_va_li� + +__�g +), +__isoc99_vws�nf +) + +715
+ `__REDIRECT + ( +vsws�nf +, ( +__cڡ + +wch�_t + * +__��ri� + +__s +, + +716 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +717 +__gnuc_va_li� + +__�g +), +__isoc99_vsws�nf +) + +718 +__THROW + ; + +720
+ `__isoc99_vfws�nf + ( +__FILE + * +__��ri� + +__s +, + +721 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +722 +__gnuc_va_li� + +__�g +); + +723
+ `__isoc99_vws�nf + ( +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +724 +__gnuc_va_li� + +__�g +); + +725
+ $__isoc99_vsws�nf + ( +__cڡ + +wch�_t + * +__��ri� + +__s +, + +726 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +727 +__gnuc_va_li� + +__�g +� +__THROW +; + +728 + #vfws�nf + +__isoc99_vfws�nf + + + ) + +729 + #vws�nf + +__isoc99_vws�nf + + + ) + +730 + #vsws�nf + +__isoc99_vsws�nf + + + ) + +734 +__END_NAMESPACE_C99 + + +738 +__BEGIN_NAMESPACE_STD + + +743
+w�t_t + + `fg�wc + ( +__FILE + * +__��am +); + +744
+w�t_t + + `g�wc + ( +__FILE + * +__��am +); + +750
+w�t_t + + `g�wch� + (); + +757
+w�t_t + + `�utwc + ( +wch�_t + +__wc +, +__FILE + * +__��am +); + +758
+w�t_t + + `putwc + ( +wch�_t + +__wc +, +__FILE + * +__��am +); + +764
+w�t_t + + `putwch� + ( +wch�_t + +__wc +); + +772
+wch�_t + * + `fg�ws + (wch�_�* +__��ri� + +__ws +, +__n +, + +773 +__FILE + * +__��ri� + +__��am +); + +779
+ `�utws + ( +__cڡ + +wch�_t + * +__��ri� + +__ws +, + +780 +__FILE + * +__��ri� + +__��am +); + +787
+w�t_t + + `ung�wc + (w�t_� +__wc +, +__FILE + * +__��am +); + +788 +__END_NAMESPACE_STD + + +791 #ifde� +__USE_GNU + + +799
+w�t_t + + `g�wc_u�ocked + ( +__FILE + * +__��am +); + +800
+w�t_t + + `g�wch�_u�ocked + (); + +808
+w�t_t + + `fg�wc_u�ocked + ( +__FILE + * +__��am +); + +816
+w�t_t + + `�utwc_u�ocked + ( +wch�_t + +__wc +, +__FILE + * +__��am +); + +825
+w�t_t + + `putwc_u�ocked + ( +wch�_t + +__wc +, +__FILE + * +__��am +); + +826
+w�t_t + + `putwch�_u�ocked + ( +wch�_t + +__wc +); + +835
+wch�_t + * + `fg�ws_u�ocked + (wch�_�* +__��ri� + +__ws +, +__n +, + +836 +__FILE + * +__��ri� + +__��am +); + +844
+ `�utws_u�ocked + ( +__cڡ + +wch�_t + * +__��ri� + +__ws +, + +845 +__FILE + * +__��ri� + +__��am +); + +849 +__BEGIN_NAMESPACE_C99 + + +853
+size_t + + $wcs�ime + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__maxsize +, + +854 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +855 +__cڡ + +tm + * +__��ri� + +__� +� +__THROW +; + +856 +__END_NAMESPACE_C99 + + +858 #ifde� +__USE_GNU + + +859 + ~<xlo��.h +> + +863
+size_t + + $wcs�ime_l + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__maxsize +, + +864 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +865 +__cڡ + +tm + * +__��ri� + +__� +, + +866 +__lo��_t + +__loc +� +__THROW +; + +875 #i� +def�ed + +__USE_UNIX98 + && !def�ed +__USE_GNU + + +876 + #__�ed_iswxxx + + + ) + +877 + ~<w�y�.h +> + +881 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__ex��_�ways_�l�e + + +882 + ~<b�s/wch�2.h +> + +885 #ifde� +__LDBL_COMPAT + + +886 + ~<b�s/wch�-ldbl.h +> + +889 +__END_DECLS + + +897 #unde� +__�ed_mb��e_t + + +898 #unde� +__�ed_w�t_t + + + @/usr/include/bits/pthreadtypes.h + +20 #i�de� +_BITS_PTHREADTYPES_H + + +21 + #_BITS_PTHREADTYPES_H + 1 + + ) + +23 + ~<b�s/w�dsize.h +> + +25 #i� +__WORDSIZE + == 64 + +26 + #__SIZEOF_PTHREAD_ATTR_T + 56 + + ) + +27 + #__SIZEOF_PTHREAD_MUTEX_T + 40 + + ) + +28 + #__SIZEOF_PTHREAD_MUTEXATTR_T + 4 + + ) + +29 + #__SIZEOF_PTHREAD_COND_T + 48 + + ) + +30 + #__SIZEOF_PTHREAD_CONDATTR_T + 4 + + ) + +31 + #__SIZEOF_PTHREAD_RWLOCK_T + 56 + + ) + +32 + #__SIZEOF_PTHREAD_RWLOCKATTR_T + 8 + + ) + +33 + #__SIZEOF_PTHREAD_BARRIER_T + 32 + + ) + +34 + #__SIZEOF_PTHREAD_BARRIERATTR_T + 4 + + ) + +36 + #__SIZEOF_PTHREAD_ATTR_T + 36 + + ) + +37 + #__SIZEOF_PTHREAD_MUTEX_T + 24 + + ) + +38 + #__SIZEOF_PTHREAD_MUTEXATTR_T + 4 + + ) + +39 + #__SIZEOF_PTHREAD_COND_T + 48 + + ) + +40 + #__SIZEOF_PTHREAD_CONDATTR_T + 4 + + ) + +41 + #__SIZEOF_PTHREAD_RWLOCK_T + 32 + + ) + +42 + #__SIZEOF_PTHREAD_RWLOCKATTR_T + 8 + + ) + +43 + #__SIZEOF_PTHREAD_BARRIER_T + 20 + + ) + +44 + #__SIZEOF_PTHREAD_BARRIERATTR_T + 4 + + ) + +50 + t�h�ad_t +; + +55 + m__size +[ +__SIZEOF_PTHREAD_ATTR_T +]; + +56 + m__�ign +; + +57 } + t�h�ad_��_t +; + +60 #i� +__WORDSIZE + == 64 + +61 + s__�h�ad_����_li� + + +63 +__�h�ad_����_li� + * + m__�ev +; + +64 +__�h�ad_����_li� + * + m__�xt +; + +65 } + t__�h�ad_li�_t +; + +67 + s__�h�ad_����_�i� + + +69 +__�h�ad_����_�i� + * + m__�xt +; + +70 } + t__�h�ad_�i�_t +; + +78 + s__�h�ad_mu�x_s + + +80 + m__lock +; + +81 + m__cou� +; + +82 + m__ow�r +; + +83 #i� +__WORDSIZE + == 64 + +84 + m__nu�rs +; + +88 + m__k�d +; + +89 #i� +__WORDSIZE + == 64 + +90 + m__��s +; + +91 +__�h�ad_li�_t + + m__li� +; + +92 + #__PTHREAD_MUTEX_HAVE_PREV + 1 + + ) + +94 + m__nu�rs +; + +95 +__ex�nsi�__ + union + +97 + m__��s +; + +98 +__�h�ad_�i�_t + + m__li� +; + +101 } + m__d�a +; + +102 + m__size +[ +__SIZEOF_PTHREAD_MUTEX_T +]; + +103 + m__�ign +; + +104 } + t�h�ad_mu�x_t +; + +108 + m__size +[ +__SIZEOF_PTHREAD_MUTEXATTR_T +]; + +109 + m__�ign +; + +110 } + t�h�ad_mu�x��_t +; + +119 + m__lock +; + +120 + m__fu�x +; + +121 +__ex�nsi�__ + + m__tٮ_�q +; + +122 +__ex�nsi�__ + + m__wakeup_�q +; + +123 +__ex�nsi�__ + + m__wok�_�q +; + +124 * + m__mu�x +; + +125 + m__nwa��s +; + +126 + m__br�d��_�q +; + +127 } + m__d�a +; + +128 + m__size +[ +__SIZEOF_PTHREAD_COND_T +]; + +129 +__ex�nsi�__ + + m__�ign +; + +130 } + t�h�ad_c�d_t +; + +134 + m__size +[ +__SIZEOF_PTHREAD_CONDATTR_T +]; + +135 + m__�ign +; + +136 } + t�h�ad_c�d��_t +; + +140 + t�h�ad_key_t +; + +144 + t�h�ad_��_t +; + +147 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K + + +152 #i� +__WORDSIZE + == 64 + +155 + m__lock +; + +156 + m__�_�ad�s +; + +157 + m__�ad�s_wakeup +; + +158 + m__wr��_wakeup +; + +159 + m__�_�ad�s_queued +; + +160 + m__�_wr��s_queued +; + +161 + m__wr�� +; + +162 + m__sh�ed +; + +163 + m__�d1 +; + +164 + m__�d2 +; + +167 + m__�ags +; + +168 } + m__d�a +; + +172 + m__lock +; + +173 + m__�_�ad�s +; + +174 + m__�ad�s_wakeup +; + +175 + m__wr��_wakeup +; + +176 + m__�_�ad�s_queued +; + +177 + m__�_wr��s_queued +; + +180 + m__�ags +; + +181 + m__sh�ed +; + +182 + m__�d1 +; + +183 + m__�d2 +; + +184 + m__wr�� +; + +185 } + m__d�a +; + +187 + m__size +[ +__SIZEOF_PTHREAD_RWLOCK_T +]; + +188 + m__�ign +; + +189 } + t�h�ad_rwlock_t +; + +193 + m__size +[ +__SIZEOF_PTHREAD_RWLOCKATTR_T +]; + +194 + m__�ign +; + +195 } + t�h�ad_rwlock��_t +; + +199 #ifde� +__USE_XOPEN2K + + +201 vީ�� + t�h�ad_��lock_t +; + +208 + m__size +[ +__SIZEOF_PTHREAD_BARRIER_T +]; + +209 + m__�ign +; + +210 } + t�h�ad_b�r�r_t +; + +214 + m__size +[ +__SIZEOF_PTHREAD_BARRIERATTR_T +]; + +215 + m__�ign +; + +216 } + t�h�ad_b�r���r_t +; + +220 #i� +__WORDSIZE + == 32 + +222 + #__��nup_f�_��ibu� + + `__��ibu�__ + (( + `__�g�rm__ + (1))) + + ) + + @/usr/include/bits/wchar-ldbl.h + +20 #i�de� +_WCHAR_H + + +24 #i� +def�ed + +__USE_ISOC95 + || def�ed +__USE_UNIX98 + + +25 +__BEGIN_NAMESPACE_C99 + + +26 +__LDBL_REDIR_DECL + ( +fw��tf +); + +27 +__LDBL_REDIR_DECL + ( +w��tf +); + +28 +__LDBL_REDIR_DECL + ( +sw��tf +); + +29 +__LDBL_REDIR_DECL + ( +vfw��tf +); + +30 +__LDBL_REDIR_DECL + ( +vw��tf +); + +31 +__LDBL_REDIR_DECL + ( +vsw��tf +); + +32 #i� +def�ed + +__USE_ISOC99 + && !def�ed +__USE_GNU + \ + +33 && ! +def�ed + + g__REDIRECT + \ + +34 && ( +def�ed + + g__STRICT_ANSI__ + || def�ed + g__USE_XOPEN2K +) + +35 + $__LDBL_REDIR1_DECL + ( +fws�nf +, +__�dbl___isoc99_fws�nf +) + +36 + $__LDBL_REDIR1_DECL + ( +ws�nf +, +__�dbl___isoc99_ws�nf +) + +37 + $__LDBL_REDIR1_DECL + ( +sws�nf +, +__�dbl___isoc99_sws�nf +) + +39 + `__LDBL_REDIR_DECL + ( +fws�nf +); + +40 + `__LDBL_REDIR_DECL + ( +ws�nf +); + +41 + `__LDBL_REDIR_DECL + ( +sws�nf +); + +43 +__END_NAMESPACE_C99 + + +46 #ifde� +__USE_ISOC99 + + +47 +__BEGIN_NAMESPACE_C99 + + +48 + `__LDBL_REDIR1_DECL + ( +wc��d +, +wc�od +); + +49 #i�! +def�ed + +__USE_GNU + && !def�ed +__REDIRECT + \ + +50 && ( +def�ed + +__STRICT_ANSI__ + || def�ed +__USE_XOPEN2K +) + +51 + $__LDBL_REDIR1_DECL + ( +vfws�nf +, +__�dbl___isoc99_vfws�nf +) + +52 + $__LDBL_REDIR1_DECL + ( +vws�nf +, +__�dbl___isoc99_vws�nf +) + +53 + $__LDBL_REDIR1_DECL + ( +vsws�nf +, +__�dbl___isoc99_vsws�nf +) + +55 + `__LDBL_REDIR_DECL + ( +vfws�nf +); + +56 + `__LDBL_REDIR_DECL + ( +vws�nf +); + +57 + `__LDBL_REDIR_DECL + ( +vsws�nf +); + +59 +__END_NAMESPACE_C99 + + +62 #ifde� +__USE_GNU + + +63 + `__LDBL_REDIR1_DECL + ( +wc��d_l +, +wc�od_l +); + +66 #i� +__USE_FORTIFY_LEVEL + > 0 && +def�ed + +__ex��_�ways_�l�e + + +67 + $__LDBL_REDIR_DECL + ( +__sw��tf_chk +) + +68 + $__LDBL_REDIR_DECL + ( +__vsw��tf_chk +) + +69 #i� +__USE_FORTIFY_LEVEL + > 1 + +70 + $__LDBL_REDIR_DECL + ( +__fw��tf_chk +) + +71 + $__LDBL_REDIR_DECL + ( +__w��tf_chk +) + +72 + $__LDBL_REDIR_DECL + ( +__vfw��tf_chk +) + +73 + $__LDBL_REDIR_DECL + ( +__vw��tf_chk +) + + @/usr/include/bits/wchar.h + +20 #i�de� +_BITS_WCHAR_H + + +21 + #_BITS_WCHAR_H + 1 + + ) + +24 #ifde� +__WCHAR_MAX__ + + +25 + #__WCHAR_MAX + +__WCHAR_MAX__ + + + ) + +27 + #__WCHAR_MAX + (2147483647) + + ) + +32 #ifde� +__WCHAR_UNSIGNED__ + + +33 + #__WCHAR_MIN + +L +'\0' + + ) + +37 #�i� +L +'\0' - 1 > 0 + +38 + #__WCHAR_MIN + +L +'\0' + + ) + +40 + #__WCHAR_MIN + (- +__WCHAR_MAX + - 1) + + ) + + @/usr/include/bits/wchar2.h + +20 #i�de� +_WCHAR_H + + +25
+wch�_t + * + $__wmem�y_chk + ( +wch�_t + * +__��ri� + +__s1 +, + +26 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +, + +27 +size_t + +__ns1 +� +__THROW +; + +28
+wch�_t + * + `__REDIRECT_NTH + ( +__wmem�y_��s +, + +29 ( +wch�_t + * +__��ri� + +__s1 +, + +30 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +), + +31 +wmem�y +); + +32
+wch�_t + * + `__REDIRECT_NTH + ( +__wmem�y_chk_w�n +, + +33 ( +wch�_t + * +__��ri� + +__s1 +, + +34 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +, + +35 +size_t + +__ns1 +), +__wmem�y_chk +) + +36 + `__w�ljr + ("wmemcpy called with�ength bigger�han size of destination " + +39 +__ex��_�ways_�l�e + +wch�_t + * + +40 + `__NTH + ( + $wmem�y + ( +wch�_t + * +__��ri� + +__s1 +, +__cڡ + wch�_�*__��ri� +__s2 +, + +41 +size_t + +__n +)) + +43 i�( + `__bos0 + ( +__s1 +�!�( +size_t +) -1) + +45 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +46 + `__wmem�y_chk + ( +__s1 +, +__s2 +, +__n +, + +47 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +49 i�( +__n + > + `__bos0 + ( +__s1 +�/ ( +wch�_t +)) + +50 + `__wmem�y_chk_w�n + ( +__s1 +, +__s2 +, +__n +, + +51 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +53 + `__wmem�y_��s + ( +__s1 +, +__s2 +, +__n +); + +54 + } +} + +57
+wch�_t + * + $__wmemmove_chk + ( +wch�_t + * +__s1 +, +__cڡ + wch�_�* +__s2 +, + +58 +size_t + +__n +, size_� +__ns1 +� +__THROW +; + +59
+wch�_t + * + `__REDIRECT_NTH + ( +__wmemmove_��s +, (wch�_�* +__s1 +, + +60 +__cڡ + +wch�_t + * +__s2 +, + +61 +size_t + +__n +), +wmemmove +); + +62
+wch�_t + * + `__REDIRECT_NTH + ( +__wmemmove_chk_w�n +, + +63 ( +wch�_t + * +__��ri� + +__s1 +, + +64 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +, + +65 +size_t + +__ns1 +), +__wmemmove_chk +) + +66 + `__w�ljr + ("wmemmove called with�ength bigger�han size of destination " + +69 +__ex��_�ways_�l�e + +wch�_t + * + +70 + `__NTH + ( + $wmemmove + ( +wch�_t + * +__��ri� + +__s1 +, +__cڡ + wch�_�*__��ri� +__s2 +, + +71 +size_t + +__n +)) + +73 i�( + `__bos0 + ( +__s1 +�!�( +size_t +) -1) + +75 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +76 + `__wmemmove_chk + ( +__s1 +, +__s2 +, +__n +, + +77 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +79 i�( +__n + > + `__bos0 + ( +__s1 +�/ ( +wch�_t +)) + +80 + `__wmemmove_chk_w�n + ( +__s1 +, +__s2 +, +__n +, + +81 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +83 + `__wmemmove_��s + ( +__s1 +, +__s2 +, +__n +); + +84 + } +} + +87 #ifde� +__USE_GNU + + +88
+wch�_t + * + $__wmemp�y_chk + ( +wch�_t + * +__��ri� + +__s1 +, + +89 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +, + +90 +size_t + +__ns1 +� +__THROW +; + +91
+wch�_t + * + `__REDIRECT_NTH + ( +__wmemp�y_��s +, + +92 ( +wch�_t + * +__��ri� + +__s1 +, + +93 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, + +94 +size_t + +__n +), +wmemp�y +); + +95
+wch�_t + * + `__REDIRECT_NTH + ( +__wmemp�y_chk_w�n +, + +96 ( +wch�_t + * +__��ri� + +__s1 +, + +97 +__cڡ + +wch�_t + * +__��ri� + +__s2 +, +size_t + +__n +, + +98 +size_t + +__ns1 +), +__wmemp�y_chk +) + +99 + `__w�ljr + ("wmempcpy called with�ength bigger�han size of destination " + +102 +__ex��_�ways_�l�e + +wch�_t + * + +103 + `__NTH + ( + $wmemp�y + ( +wch�_t + * +__��ri� + +__s1 +, +__cڡ + wch�_�*__��ri� +__s2 +, + +104 +size_t + +__n +)) + +106 i�( + `__bos0 + ( +__s1 +�!�( +size_t +) -1) + +108 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +109 + `__wmemp�y_chk + ( +__s1 +, +__s2 +, +__n +, + +110 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +112 i�( +__n + > + `__bos0 + ( +__s1 +�/ ( +wch�_t +)) + +113 + `__wmemp�y_chk_w�n + ( +__s1 +, +__s2 +, +__n +, + +114 + `__bos0 + ( +__s1 +�/ ( +wch�_t +)); + +116 + `__wmemp�y_��s + ( +__s1 +, +__s2 +, +__n +); + +117 + } +} + +121
+wch�_t + * + $__wmem�t_chk + ( +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +, + +122 +size_t + +__ns +� +__THROW +; + +123
+wch�_t + * + `__REDIRECT_NTH + ( +__wmem�t_��s +, (wch�_�* +__s +, wch�_� +__c +, + +124 +size_t + +__n +), +wmem�t +); + +125
+wch�_t + * + `__REDIRECT_NTH + ( +__wmem�t_chk_w�n +, + +126 ( +wch�_t + * +__s +, wch�_� +__c +, +size_t + +__n +, + +127 +size_t + +__ns +), +__wmem�t_chk +) + +128 + `__w�ljr + ("wmemset called with�ength bigger�han size of destination " + +131 +__ex��_�ways_�l�e + +wch�_t + * + +132 + `__NTH + ( + $wmem�t + ( +wch�_t + * +__��ri� + +__s +, wch�_� +__c +, +size_t + +__n +)) + +134 i�( + `__bos0 + ( +__s +�!�( +size_t +) -1) + +136 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +137 + `__wmem�t_chk + ( +__s +, +__c +, +__n +, + `__bos0 + (__s�/ ( +wch�_t +)); + +139 i�( +__n + > + `__bos0 + ( +__s +�/ ( +wch�_t +)) + +140 + `__wmem�t_chk_w�n + ( +__s +, +__c +, +__n +, + +141 + `__bos0 + ( +__s +�/ ( +wch�_t +)); + +143 + `__wmem�t_��s + ( +__s +, +__c +, +__n +); + +144 + } +} + +147
+wch�_t + * + $__wcs�y_chk + ( +wch�_t + * +__��ri� + +__de� +, + +148 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +149 +size_t + +__n +� +__THROW +; + +150
+wch�_t + * + `__REDIRECT_NTH + ( +__wcs�y_��s +, + +151 ( +wch�_t + * +__��ri� + +__de� +, + +152 +__cڡ + +wch�_t + * +__��ri� + +__�c +), +wcs�y +); + +154 +__ex��_�ways_�l�e + +wch�_t + * + +155 + `__NTH + ( + $wcs�y + ( +wch�_t + * +__de� +, +__cڡ + wch�_�* +__�c +)) + +157 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +158 + `__wcs�y_chk + ( +__de� +, +__�c +, + `__bos + (__de��/ ( +wch�_t +)); + +159 + `__wcs�y_��s + ( +__de� +, +__�c +); + +160 + } +} + +163
+wch�_t + * + $__w��y_chk + ( +wch�_t + * +__de� +, +__cڡ + wch�_�* +__�c +, + +164 +size_t + +__de��n +� +__THROW +; + +165
+wch�_t + * + `__REDIRECT_NTH + ( +__w��y_��s +, (wch�_�* +__de� +, + +166 +__cڡ + +wch�_t + * +__�c +), + +167 +w��y +); + +169 +__ex��_�ways_�l�e + +wch�_t + * + +170 + `__NTH + ( + $w��y + ( +wch�_t + * +__de� +, +__cڡ + wch�_�* +__�c +)) + +172 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +173 + `__w��y_chk + ( +__de� +, +__�c +, + `__bos + (__de��/ ( +wch�_t +)); + +174 + `__w��y_��s + ( +__de� +, +__�c +); + +175 + } +} + +178
+wch�_t + * + $__wc��y_chk + ( +wch�_t + * +__��ri� + +__de� +, + +179 +__cڡ + +wch�_t + * +__��ri� + +__�c +, +size_t + +__n +, + +180 +size_t + +__de��n +� +__THROW +; + +181
+wch�_t + * + `__REDIRECT_NTH + ( +__wc��y_��s +, + +182 ( +wch�_t + * +__��ri� + +__de� +, + +183 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +184 +size_t + +__n +), +wc��y +); + +185
+wch�_t + * + `__REDIRECT_NTH + ( +__wc��y_chk_w�n +, + +186 ( +wch�_t + * +__��ri� + +__de� +, + +187 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +188 +size_t + +__n +, size_� +__de��n +), +__wc��y_chk +) + +189 + `__w�ljr + ("wcsncpy called with�ength bigger�han size of destination " + +192 +__ex��_�ways_�l�e + +wch�_t + * + +193 + `__NTH + ( + $wc��y + ( +wch�_t + * +__de� +, +__cڡ + wch�_�* +__�c +, +size_t + +__n +)) + +195 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +197 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +198 + `__wc��y_chk + ( +__de� +, +__�c +, +__n +, + +199 + `__bos + ( +__de� +�/ ( +wch�_t +)); + +200 i�( +__n + > + `__bos + ( +__de� +�/ ( +wch�_t +)) + +201 + `__wc��y_chk_w�n + ( +__de� +, +__�c +, +__n +, + +202 + `__bos + ( +__de� +�/ ( +wch�_t +)); + +204 + `__wc��y_��s + ( +__de� +, +__�c +, +__n +); + +205 + } +} + +208
+wch�_t + * + $__w�n�y_chk + ( +wch�_t + * +__��ri� + +__de� +, + +209 +__cڡ + +wch�_t + * +__��ri� + +__�c +, +size_t + +__n +, + +210 +size_t + +__de��n +� +__THROW +; + +211
+wch�_t + * + `__REDIRECT_NTH + ( +__w�n�y_��s +, + +212 ( +wch�_t + * +__��ri� + +__de� +, + +213 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +214 +size_t + +__n +), +w�n�y +); + +215
+wch�_t + * + `__REDIRECT_NTH + ( +__w�n�y_chk_w�n +, + +216 ( +wch�_t + * +__��ri� + +__de� +, + +217 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +218 +size_t + +__n +, size_� +__de��n +), +__w�n�y_chk +) + +219 + `__w�ljr + ("wcpncpy called with�ength bigger�han size of destination " + +222 +__ex��_�ways_�l�e + +wch�_t + * + +223 + `__NTH + ( + $w�n�y + ( +wch�_t + * +__de� +, +__cڡ + wch�_�* +__�c +, +size_t + +__n +)) + +225 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +227 i�(! + `__bu�t�_cڡ�t_p + ( +__n +)) + +228 + `__w�n�y_chk + ( +__de� +, +__�c +, +__n +, + +229 + `__bos + ( +__de� +�/ ( +wch�_t +)); + +230 i�( +__n + > + `__bos + ( +__de� +�/ ( +wch�_t +)) + +231 + `__w�n�y_chk_w�n + ( +__de� +, +__�c +, +__n +, + +232 + `__bos + ( +__de� +�/ ( +wch�_t +)); + +234 + `__w�n�y_��s + ( +__de� +, +__�c +, +__n +); + +235 + } +} + +238
+wch�_t + * + $__wcs�t_chk + ( +wch�_t + * +__��ri� + +__de� +, + +239 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +240 +size_t + +__de��n +� +__THROW +; + +241
+wch�_t + * + `__REDIRECT_NTH + ( +__wcs�t_��s +, + +242 ( +wch�_t + * +__��ri� + +__de� +, + +243 +__cڡ + +wch�_t + * +__��ri� + +__�c +), +wcs�t +); + +245 +__ex��_�ways_�l�e + +wch�_t + * + +246 + `__NTH + ( + $wcs�t + ( +wch�_t + * +__de� +, +__cڡ + wch�_�* +__�c +)) + +248 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +249 + `__wcs�t_chk + ( +__de� +, +__�c +, + `__bos + (__de��/ ( +wch�_t +)); + +250 + `__wcs�t_��s + ( +__de� +, +__�c +); + +251 + } +} + +254
+wch�_t + * + $__wc��t_chk + ( +wch�_t + * +__��ri� + +__de� +, + +255 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +256 +size_t + +__n +, size_� +__de��n +� +__THROW +; + +257
+wch�_t + * + `__REDIRECT_NTH + ( +__wc��t_��s +, + +258 ( +wch�_t + * +__��ri� + +__de� +, + +259 +__cڡ + +wch�_t + * +__��ri� + +__�c +, + +260 +size_t + +__n +), +wc��t +); + +262 +__ex��_�ways_�l�e + +wch�_t + * + +263 + `__NTH + ( + $wc��t + ( +wch�_t + * +__de� +, +__cڡ + wch�_�* +__�c +, +size_t + +__n +)) + +265 i�( + `__bos + ( +__de� +�!�( +size_t +) -1) + +266 + `__wc��t_chk + ( +__de� +, +__�c +, +__n +, + +267 + `__bos + ( +__de� +�/ ( +wch�_t +)); + +268 + `__wc��t_��s + ( +__de� +, +__�c +, +__n +); + +269 + } +} + +272
+ $__sw��tf_chk + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +273 +__�ag +, +size_t + +__s_�n +, + +274 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...) + +275 +__THROW + ; + +277
+ `__REDIRECT_NTH_LDBL + ( +__sw��tf_��s +, + +278 ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +279 +__cڡ + +wch�_t + * +__��ri� + +__fmt +, ...), + +280 +sw��tf +); + +282 #ifde� +__va_�g_�ck + + +283 +__ex��_�ways_�l�e + + +284 + `__NTH + ( + $sw��tf + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +285 +__cڡ + +wch�_t + * +__��ri� + +__fmt +, ...)) + +287 i�( + `__bos + ( +__s +�!�( +size_t +�-1 || +__USE_FORTIFY_LEVEL + > 1) + +288 + `__sw��tf_chk + ( +__s +, +__n +, +__USE_FORTIFY_LEVEL + - 1, + +289 + `__bos + ( +__s +�/ ( +wch�_t +), + +290 +__fmt +, + `__va_�g_�ck + ()); + +291 + `__sw��tf_��s + ( +__s +, +__n +, +__fmt +, + `__va_�g_�ck + ()); + +292 + } +} + +293 #�i�! +def�ed + +__�lu�lus + + +295 + #sw��tf +( +s +, +n +, ...) \ + +296 ( + `__bos + ( +s +�!�( +size_t +�-1 || +__USE_FORTIFY_LEVEL + > 1 \ + +297 ? + `__sw��tf_chk + ( +s +, +n +, +__USE_FORTIFY_LEVEL + - 1, \ + +298 + `__bos + ( +s +�/ ( +wch�_t +), +__VA_ARGS__ +) \ + +299 : + `sw��tf + ( +s +, +n +, +__VA_ARGS__ +)) + + ) + +302
+ $__vsw��tf_chk + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +303 +__�ag +, +size_t + +__s_�n +, + +304 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +305 +__gnuc_va_li� + +__�g +) + +306 +__THROW + ; + +308
+ `__REDIRECT_NTH_LDBL + ( +__vsw��tf_��s +, + +309 ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +310 +__cڡ + +wch�_t + * +__��ri� + +__fmt +, + +311 +__gnuc_va_li� + +__� +), +vsw��tf +); + +313 +__ex��_�ways_�l�e + + +314 + `__NTH + ( + $vsw��tf + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__n +, + +315 +__cڡ + +wch�_t + * +__��ri� + +__fmt +, +__gnuc_va_li� + +__� +)) + +317 i�( + `__bos + ( +__s +�!�( +size_t +�-1 || +__USE_FORTIFY_LEVEL + > 1) + +318 + `__vsw��tf_chk + ( +__s +, +__n +, +__USE_FORTIFY_LEVEL + - 1, + +319 + `__bos + ( +__s +�/ ( +wch�_t +), +__fmt +, +__� +); + +320 + `__vsw��tf_��s + ( +__s +, +__n +, +__fmt +, +__� +); + +321 + } +} + +324 #i� +__USE_FORTIFY_LEVEL + > 1 + +326
+__fw��tf_chk + ( +__FILE + * +__��ri� + +__��am +, +__�ag +, + +327 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, ...); + +328
+__w��tf_chk + ( +__�ag +, +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +330
+__vfw��tf_chk + ( +__FILE + * +__��ri� + +__��am +, +__�ag +, + +331 +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +332 +__gnuc_va_li� + +__� +); + +333
+__vw��tf_chk + ( +__�ag +, +__cڡ + +wch�_t + * +__��ri� + +__f�m� +, + +334 +__gnuc_va_li� + +__� +); + +336 #ifde� +__va_�g_�ck + + +337 +__ex��_�ways_�l�e + + +338 + $w��tf + ( +__cڡ + +wch�_t + * +__��ri� + +__fmt +, ...) + +340 + `__w��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + `__va_�g_�ck + ()); + +341 + } +} + +343 +__ex��_�ways_�l�e + + +344 + $fw��tf + ( +__FILE + * +__��ri� + +__��am +, +__cڡ + +wch�_t + *__��ri� +__fmt +, ...) + +346 + `__fw��tf_chk + ( +__��am +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, + +347 + `__va_�g_�ck + ()); + +348 + } +} + +349 #�i�! +def�ed + +__�lu�lus + + +350 + #w��tf +(...) \ + +351 + `__w��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +352 + #fw��tf +( +��am +, ...) \ + +353 + `__fw��tf_chk + ( +��am +, +__USE_FORTIFY_LEVEL + - 1, +__VA_ARGS__ +) + + ) + +356 +__ex��_�ways_�l�e + + +357 + $vw��tf + ( +__cڡ + +wch�_t + * +__��ri� + +__fmt +, +__gnuc_va_li� + +__� +) + +359 + `__vw��tf_chk + ( +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +360 + } +} + +362 +__ex��_�ways_�l�e + + +363 + $vfw��tf + ( +__FILE + * +__��ri� + +__��am +, + +364 +__cڡ + +wch�_t + * +__��ri� + +__fmt +, +__gnuc_va_li� + +__� +) + +366 + `__vfw��tf_chk + ( +__��am +, +__USE_FORTIFY_LEVEL + - 1, +__fmt +, +__� +); + +367 + } +} + +371
+wch�_t + * + $__fg�ws_chk + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__size +, +__n +, + +372 +__FILE + * +__��ri� + +__��am +� +__wur +; + +373
+wch�_t + * + `__REDIRECT + ( +__fg�ws_��s +, + +374 ( +wch�_t + * +__��ri� + +__s +, +__n +, + +375 +__FILE + * +__��ri� + +__��am +), +fg�ws +� +__wur +; + +376
+wch�_t + * + `__REDIRECT + ( +__fg�ws_chk_w�n +, + +377 ( +wch�_t + * +__��ri� + +__s +, +size_t + +__size +, +__n +, + +378 +__FILE + * +__��ri� + +__��am +), +__fg�ws_chk +) + +379 +__wur + + `__w�ljr + ("fgetws called with bigger size�han�ength " + +382 +__ex��_�ways_�l�e + +__wur + +wch�_t + * + +383 + $fg�ws + ( +wch�_t + * +__��ri� + +__s +, +__n +, +__FILE + *__��ri� +__��am +) + +385 i�( + `__bos + ( +__s +�!�( +size_t +) -1) + +387 i�(! + `__bu�t�_cڡ�t_p + ( +__n +) || __n <= 0) + +388 + `__fg�ws_chk + ( +__s +, + `__bos + (__s�/ ( +wch�_t +), + +389 +__n +, +__��am +); + +391 i�(( +size_t +� +__n + > + `__bos + ( +__s +�/ ( +wch�_t +)) + +392 + `__fg�ws_chk_w�n + ( +__s +, + `__bos + (__s�/ ( +wch�_t +), + +393 +__n +, +__��am +); + +395 + `__fg�ws_��s + ( +__s +, +__n +, +__��am +); + +396 + } +} + +398 #ifde� +__USE_GNU + + +399
+wch�_t + * + $__fg�ws_u�ocked_chk + ( +wch�_t + * +__��ri� + +__s +, +size_t + +__size +, + +400 +__n +, +__FILE + * +__��ri� + +__��am +) + +401 +__wur +; + +402
+wch�_t + * + `__REDIRECT + ( +__fg�ws_u�ocked_��s +, + +403 ( +wch�_t + * +__��ri� + +__s +, +__n +, + +404 +__FILE + * +__��ri� + +__��am +), +fg�ws_u�ocked +) + +405 +__wur +; + +406
+wch�_t + * + `__REDIRECT + ( +__fg�ws_u�ocked_chk_w�n +, + +407 ( +wch�_t + * +__��ri� + +__s +, +size_t + +__size +, +__n +, + +408 +__FILE + * +__��ri� + +__��am +), + +409 +__fg�ws_u�ocked_chk +) + +410 +__wur + + `__w�ljr + ("fgetws_unlocked called with bigger size�han�ength " + +413 +__ex��_�ways_�l�e + +__wur + +wch�_t + * + +414 + $fg�ws_u�ocked + ( +wch�_t + * +__��ri� + +__s +, +__n +, +__FILE + *__��ri� +__��am +) + +416 i�( + `__bos + ( +__s +�!�( +size_t +) -1) + +418 i�(! + `__bu�t�_cڡ�t_p + ( +__n +) || __n <= 0) + +419 + `__fg�ws_u�ocked_chk + ( +__s +, + `__bos + (__s�/ ( +wch�_t +), + +420 +__n +, +__��am +); + +422 i�(( +size_t +� +__n + > + `__bos + ( +__s +�/ ( +wch�_t +)) + +423 + `__fg�ws_u�ocked_chk_w�n + ( +__s +, + `__bos + (__s�/ ( +wch�_t +), + +424 +__n +, +__��am +); + +426 + `__fg�ws_u�ocked_��s + ( +__s +, +__n +, +__��am +); + +427 + } +} + +431
+size_t + + $__w�tomb_chk + (* +__s +, +wch�_t + +__wch� +, +mb��e_t + * +__p +, + +432 +size_t + +__bu� +� +__THROW + +__wur +; + +433
+size_t + + `__REDIRECT_NTH + ( +__w�tomb_��s +, + +434 (* +__��ri� + +__s +, +wch�_t + +__wch� +, + +435 +mb��e_t + * +__��ri� + +__ps +), +w�tomb +� +__wur +; + +437 +__ex��_�ways_�l�e + +__wur + +size_t + + +438 + `__NTH + ( + $w�tomb + (* +__s +, +wch�_t + +__wch� +, +mb��e_t + * +__ps +)) + +443 + #__WCHAR_MB_LEN_MAX + 16 + + ) + +444 #i� +def�ed + +MB_LEN_MAX + && MB_LEN_MAX !� +__WCHAR_MB_LEN_MAX + + +447 i�( + `__bos + ( +__s +�!�( +size_t +�-1 && +__WCHAR_MB_LEN_MAX + > __bos (__s)) + +448 + `__w�tomb_chk + ( +__s +, +__wch� +, +__ps +, + `__bos + (__s)); + +449 + `__w�tomb_��s + ( +__s +, +__wch� +, +__ps +); + +450 + } +} + +453
+size_t + + $__mb�towcs_chk + ( +wch�_t + * +__��ri� + +__d� +, + +454 +__cڡ + ** +__��ri� + +__�c +, + +455 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +456 +size_t + +__d��n +� +__THROW +; + +457
+size_t + + `__REDIRECT_NTH + ( +__mb�towcs_��s +, + +458 ( +wch�_t + * +__��ri� + +__d� +, + +459 +__cڡ + ** +__��ri� + +__�c +, + +460 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +), + +461 +mb�towcs +); + +462
+size_t + + `__REDIRECT_NTH + ( +__mb�towcs_chk_w�n +, + +463 ( +wch�_t + * +__��ri� + +__d� +, + +464 +__cڡ + ** +__��ri� + +__�c +, + +465 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +466 +size_t + +__d��n +), +__mb�towcs_chk +) + +467 + `__w�ljr + ("mbsrtowcs called with dst buffer smaller�han�en " + +470 +__ex��_�ways_�l�e + +size_t + + +471 + `__NTH + ( + $mb�towcs + ( +wch�_t + * +__��ri� + +__d� +, +__cڡ + **__��ri� +__�c +, + +472 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +)) + +474 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +476 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +477 + `__mb�towcs_chk + ( +__d� +, +__�c +, +__�n +, +__ps +, + +478 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +480 i�( +__�n + > + `__bos + ( +__d� +�/ ( +wch�_t +)) + +481 + `__mb�towcs_chk_w�n + ( +__d� +, +__�c +, +__�n +, +__ps +, + +482 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +484 + `__mb�towcs_��s + ( +__d� +, +__�c +, +__�n +, +__ps +); + +485 + } +} + +488
+size_t + + $__wc�tombs_chk + (* +__��ri� + +__d� +, + +489 +__cڡ + +wch�_t + ** +__��ri� + +__�c +, + +490 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +491 +size_t + +__d��n +� +__THROW +; + +492
+size_t + + `__REDIRECT_NTH + ( +__wc�tombs_��s +, + +493 (* +__��ri� + +__d� +, + +494 +__cڡ + +wch�_t + ** +__��ri� + +__�c +, + +495 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +), + +496 +wc�tombs +); + +497
+size_t + + `__REDIRECT_NTH + ( +__wc�tombs_chk_w�n +, + +498 (* +__��ri� + +__d� +, + +499 +__cڡ + +wch�_t + ** +__��ri� + +__�c +, + +500 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +501 +size_t + +__d��n +), +__wc�tombs_chk +) + +502 + `__w�ljr + ("wcsrtombs called with dst buffer smaller�han�en"); + +504 +__ex��_�ways_�l�e + +size_t + + +505 + `__NTH + ( + $wc�tombs + (* +__��ri� + +__d� +, +__cڡ + +wch�_t + **__��ri� +__�c +, + +506 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +)) + +508 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +510 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +511 + `__wc�tombs_chk + ( +__d� +, +__�c +, +__�n +, +__ps +, + `__bos + (__dst)); + +513 i�( +__�n + > + `__bos + ( +__d� +)) + +514 + `__wc�tombs_chk_w�n + ( +__d� +, +__�c +, +__�n +, +__ps +, + `__bos + (__dst)); + +516 + `__wc�tombs_��s + ( +__d� +, +__�c +, +__�n +, +__ps +); + +517 + } +} + +520 #ifde� +__USE_GNU + + +521
+size_t + + $__mb��owcs_chk + ( +wch�_t + * +__��ri� + +__d� +, + +522 +__cڡ + ** +__��ri� + +__�c +, +size_t + +__nmc +, + +523 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +524 +size_t + +__d��n +� +__THROW +; + +525
+size_t + + `__REDIRECT_NTH + ( +__mb��owcs_��s +, + +526 ( +wch�_t + * +__��ri� + +__d� +, + +527 +__cڡ + ** +__��ri� + +__�c +, +size_t + +__nmc +, + +528 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +), + +529 +mb��owcs +); + +530
+size_t + + `__REDIRECT_NTH + ( +__mb��owcs_chk_w�n +, + +531 ( +wch�_t + * +__��ri� + +__d� +, + +532 +__cڡ + ** +__��ri� + +__�c +, +size_t + +__nmc +, + +533 +size_t + +__�n +, +mb��e_t + * +__��ri� + +__ps +, + +534 +size_t + +__d��n +), +__mb��owcs_chk +) + +535 + `__w�ljr + ("mbsnrtowcs called with dst buffer smaller�han�en " + +538 +__ex��_�ways_�l�e + +size_t + + +539 + `__NTH + ( + $mb��owcs + ( +wch�_t + * +__��ri� + +__d� +, +__cڡ + **__��ri� +__�c +, + +540 +size_t + +__nmc +, size_� +__�n +, +mb��e_t + * +__��ri� + +__ps +)) + +542 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +544 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +545 + `__mb��owcs_chk + ( +__d� +, +__�c +, +__nmc +, +__�n +, +__ps +, + +546 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +548 i�( +__�n + > + `__bos + ( +__d� +�/ ( +wch�_t +)) + +549 + `__mb��owcs_chk_w�n + ( +__d� +, +__�c +, +__nmc +, +__�n +, +__ps +, + +550 + `__bos + ( +__d� +�/ ( +wch�_t +)); + +552 + `__mb��owcs_��s + ( +__d� +, +__�c +, +__nmc +, +__�n +, +__ps +); + +553 + } +} + +556
+size_t + + $__wc��ombs_chk + (* +__��ri� + +__d� +, + +557 +__cڡ + +wch�_t + ** +__��ri� + +__�c +, + +558 +size_t + +__nwc +, size_� +__�n +, + +559 +mb��e_t + * +__��ri� + +__ps +, +size_t + +__d��n +) + +560 +__THROW +; + +561
+size_t + + `__REDIRECT_NTH + ( +__wc��ombs_��s +, + +562 (* +__��ri� + +__d� +, + +563 +__cڡ + +wch�_t + ** +__��ri� + +__�c +, + +564 +size_t + +__nwc +, size_� +__�n +, + +565 +mb��e_t + * +__��ri� + +__ps +), +wc��ombs +); + +566
+size_t + + `__REDIRECT_NTH + ( +__wc��ombs_chk_w�n +, + +567 (* +__��ri� + +__d� +, + +568 +__cڡ + +wch�_t + ** +__��ri� + +__�c +, + +569 +size_t + +__nwc +, size_� +__�n +, + +570 +mb��e_t + * +__��ri� + +__ps +, + +571 +size_t + +__d��n +), +__wc��ombs_chk +) + +572 + `__w�ljr + ("wcsnrtombs called with dst buffer smaller�han�en"); + +574 +__ex��_�ways_�l�e + +size_t + + +575 + `__NTH + ( + $wc��ombs + (* +__��ri� + +__d� +, +__cڡ + +wch�_t + **__��ri� +__�c +, + +576 +size_t + +__nwc +, size_� +__�n +, +mb��e_t + * +__��ri� + +__ps +)) + +578 i�( + `__bos + ( +__d� +�!�( +size_t +) -1) + +580 i�(! + `__bu�t�_cڡ�t_p + ( +__�n +)) + +581 + `__wc��ombs_chk + ( +__d� +, +__�c +, +__nwc +, +__�n +, +__ps +, + +582 + `__bos + ( +__d� +)); + +584 i�( +__�n + > + `__bos + ( +__d� +)) + +585 + `__wc��ombs_chk_w�n + ( +__d� +, +__�c +, +__nwc +, +__�n +, +__ps +, + +586 + `__bos + ( +__d� +)); + +588 + `__wc��ombs_��s + ( +__d� +, +__�c +, +__nwc +, +__�n +, +__ps +); + +589 + } +} + + @/usr/include/errno.h + +23 #i�def +_ERRNO_H + + +27 #i�def +__�ed_Em�h + + +28 + #_ERRNO_H + 1 + + ) + +29 + ~<�u�s.h +> + +32 + g__BEGIN_DECLS + + +36 + ~<b�s/��o.h +> + +37 #unde� +__�ed_Em�h + + +39 #ifdef +_ERRNO_H + + +46 #i�def +��o + + +47
+��o +; + +50 #ifde� +__USE_GNU + + +55
* +�og�m_�vo�ti�_�me +, * +�og�m_�vo�ti�_sh�t_�me +; + +59 + g__END_DECLS + + +67 #i� +def�ed + +__USE_GNU + || def�ed +__�ed_�r�_t + + +68 #i�de� +__�r�_t_def�ed + + +69 + t�r�_t +; + +70 + #__�r�_t_def�ed + 1 + + ) + +72 #unde� +__�ed_�r�_t + + + @/usr/include/gnu/option-groups.h + +10 #i�de� +__GNU_OPTION_GROUPS_H + + +11 + #__GNU_OPTION_GROUPS_H + + + ) + +13 + #__OPTION_EGLIBC_ADVANCED_INET6 + 1 + + ) + +14 + #__OPTION_EGLIBC_BACKTRACE + 1 + + ) + +15 + #__OPTION_EGLIBC_BIG_MACROS + 1 + + ) + +16 + #__OPTION_EGLIBC_BSD + 1 + + ) + +17 + #__OPTION_EGLIBC_CATGETS + 1 + + ) + +18 + #__OPTION_EGLIBC_CHARSETS + 1 + + ) + +19 + #__OPTION_EGLIBC_CXX_TESTS + 1 + + ) + +20 + #__OPTION_EGLIBC_DB_ALIASES + 1 + + ) + +21 + #__OPTION_EGLIBC_ENVZ + 1 + + ) + +22 + #__OPTION_EGLIBC_FCVT + 1 + + ) + +23 + #__OPTION_EGLIBC_FMTMSG + 1 + + ) + +24 + #__OPTION_EGLIBC_FSTAB + 1 + + ) + +25 + #__OPTION_EGLIBC_FTRAVERSE + 1 + + ) + +26 + #__OPTION_EGLIBC_GETLOGIN + 1 + + ) + +27 + #__OPTION_EGLIBC_INET + 1 + + ) + +28 + #__OPTION_EGLIBC_LIBM + 1 + + ) + +29 + #__OPTION_EGLIBC_LOCALES + 1 + + ) + +30 + #__OPTION_EGLIBC_LOCALE_CODE + 1 + + ) + +31 + #__OPTION_EGLIBC_MEMUSAGE + 1 + + ) + +32 + #__OPTION_EGLIBC_NIS + 1 + + ) + +33 + #__OPTION_EGLIBC_NSSWITCH + 1 + + ) + +34 + #__OPTION_EGLIBC_RCMD + 1 + + ) + +35 + #__OPTION_EGLIBC_SPAWN + 1 + + ) + +36 + #__OPTION_EGLIBC_STREAMS + 1 + + ) + +37 + #__OPTION_EGLIBC_SUNRPC + 1 + + ) + +38 + #__OPTION_EGLIBC_UTMP + 1 + + ) + +39 + #__OPTION_EGLIBC_UTMPX + 1 + + ) + +40 + #__OPTION_EGLIBC_WORDEXP + 1 + + ) + +41 + #__OPTION_POSIX_C_LANG_WIDE_CHAR + 1 + + ) + +42 + #__OPTION_POSIX_REGEXP + 1 + + ) + +43 + #__OPTION_POSIX_REGEXP_GLIBC + 1 + + ) + +44 + #__OPTION_POSIX_WIDE_CHAR_DEVICE_IO + 1 + + ) + + @/usr/include/pthread.h + +20 #i�de� +_PTHREAD_H + + +21 + #_PTHREAD_H + 1 + + ) + +23 + ~<�u�s.h +> + +24 + ~<�d�n.h +> + +25 + ~<sched.h +> + +26 + ~<time.h +> + +28 + #__�ed_sig�t_t + + + ) + +29 + ~<sig�l.h +> + +30 + ~<b�s/�h�adty�s.h +> + +31 + ~<b�s/�tjmp.h +> + +32 + ~<b�s/w�dsize.h +> + +38 + mPTHREAD_CREATE_JOINABLE +, + +39 + #PTHREAD_CREATE_JOINABLE + +PTHREAD_CREATE_JOINABLE + + + ) + +40 + mPTHREAD_CREATE_DETACHED + + +41 + #PTHREAD_CREATE_DETACHED + +PTHREAD_CREATE_DETACHED + + + ) + +48 + mPTHREAD_MUTEX_TIMED_NP +, + +49 + mPTHREAD_MUTEX_RECURSIVE_NP +, + +50 + mPTHREAD_MUTEX_ERRORCHECK_NP +, + +51 + mPTHREAD_MUTEX_ADAPTIVE_NP + + +52 #ifde� +__USE_UNIX98 + + +54 + mPTHREAD_MUTEX_NORMAL + = +PTHREAD_MUTEX_TIMED_NP +, + +55 + mPTHREAD_MUTEX_RECURSIVE + = +PTHREAD_MUTEX_RECURSIVE_NP +, + +56 + mPTHREAD_MUTEX_ERRORCHECK + = +PTHREAD_MUTEX_ERRORCHECK_NP +, + +57 + mPTHREAD_MUTEX_DEFAULT + = +PTHREAD_MUTEX_NORMAL + + +59 #ifde� +__USE_GNU + + +61 , + mPTHREAD_MUTEX_FAST_NP + = +PTHREAD_MUTEX_TIMED_NP + + +66 #ifde� +__USE_XOPEN2K + + +70 + mPTHREAD_MUTEX_STALLED +, + +71 + mPTHREAD_MUTEX_STALLED_NP + = +PTHREAD_MUTEX_STALLED +, + +72 + mPTHREAD_MUTEX_ROBUST +, + +73 + mPTHREAD_MUTEX_ROBUST_NP + = +PTHREAD_MUTEX_ROBUST + + +78 #ifde� +__USE_UNIX98 + + +82 + mPTHREAD_PRIO_NONE +, + +83 + mPTHREAD_PRIO_INHERIT +, + +84 + mPTHREAD_PRIO_PROTECT + + +90 #i� +__WORDSIZE + == 64 + +91 + #PTHREAD_MUTEX_INITIALIZER + \ + +92 { { 0, 0, 0, 0, 0, 0, { 0, 0 } } } + + ) + +93 #ifde� +__USE_GNU + + +94 + #PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + \ + +95 { { 0, 0, 0, 0, +PTHREAD_MUTEX_RECURSIVE_NP +, 0, { 0, 0 } } } + + ) + +96 + #PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP + \ + +97 { { 0, 0, 0, 0, +PTHREAD_MUTEX_ERRORCHECK_NP +, 0, { 0, 0 } } } + + ) + +98 + #PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP + \ + +99 { { 0, 0, 0, 0, +PTHREAD_MUTEX_ADAPTIVE_NP +, 0, { 0, 0 } } } + + ) + +102 + #PTHREAD_MUTEX_INITIALIZER + \ + +103 { { 0, 0, 0, 0, 0, { 0 } } } + + ) + +104 #ifde� +__USE_GNU + + +105 + #PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + \ + +106 { { 0, 0, 0, +PTHREAD_MUTEX_RECURSIVE_NP +, 0, { 0 } } } + + ) + +107 + #PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP + \ + +108 { { 0, 0, 0, +PTHREAD_MUTEX_ERRORCHECK_NP +, 0, { 0 } } } + + ) + +109 + #PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP + \ + +110 { { 0, 0, 0, +PTHREAD_MUTEX_ADAPTIVE_NP +, 0, { 0 } } } + + ) + +116 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K + + +119 + mPTHREAD_RWLOCK_PREFER_READER_NP +, + +120 + mPTHREAD_RWLOCK_PREFER_WRITER_NP +, + +121 + mPTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP +, + +122 + mPTHREAD_RWLOCK_DEFAULT_NP + = +PTHREAD_RWLOCK_PREFER_READER_NP + + +126 + #PTHREAD_RWLOCK_INITIALIZER + \ + +127 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } + + ) + +128 #ifde� +__USE_GNU + + +129 #i� +__WORDSIZE + == 64 + +130 + #PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP + \ + +132 +PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP + } } + + ) + +134 #i� +__BYTE_ORDER + =� +__LITTLE_ENDIAN + + +135 + #PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP + \ + +136 { { 0, 0, 0, 0, 0, 0, +PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP +, \ + +137 0, 0, 0, 0 } } + + ) + +139 + #PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP + \ + +140 { { 0, 0, 0, 0, 0, 0, 0, 0, 0, +PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP +,\ + +141 0 } } + + ) + +151 + mPTHREAD_INHERIT_SCHED +, + +152 + #PTHREAD_INHERIT_SCHED + +PTHREAD_INHERIT_SCHED + + + ) + +153 + mPTHREAD_EXPLICIT_SCHED + + +154 + #PTHREAD_EXPLICIT_SCHED + +PTHREAD_EXPLICIT_SCHED + + + ) + +161 + mPTHREAD_SCOPE_SYSTEM +, + +162 + #PTHREAD_SCOPE_SYSTEM + +PTHREAD_SCOPE_SYSTEM + + + ) + +163 + mPTHREAD_SCOPE_PROCESS + + +164 + #PTHREAD_SCOPE_PROCESS + +PTHREAD_SCOPE_PROCESS + + + ) + +171 + mPTHREAD_PROCESS_PRIVATE +, + +172 + #PTHREAD_PROCESS_PRIVATE + +PTHREAD_PROCESS_PRIVATE + + + ) + +173 + mPTHREAD_PROCESS_SHARED + + +174 + #PTHREAD_PROCESS_SHARED + +PTHREAD_PROCESS_SHARED + + + ) + +180 + #PTHREAD_COND_INITIALIZER + { { 0, 0, 0, 0, 0, (*�0, 0, 0 } } + + ) + +184 + s_�h�ad_��nup_buf�r + + +186 (* + m__rout�e +) (*); + +187 * + m__�g +; + +188 + m__�n��y� +; + +189 +_�h�ad_��nup_buf�r + * + m__�ev +; + +195 + mPTHREAD_CANCEL_ENABLE +, + +196 + #PTHREAD_CANCEL_ENABLE + +PTHREAD_CANCEL_ENABLE + + + ) + +197 + mPTHREAD_CANCEL_DISABLE + + +198 + #PTHREAD_CANCEL_DISABLE + +PTHREAD_CANCEL_DISABLE + + + ) + +202 + mPTHREAD_CANCEL_DEFERRED +, + +203 + #PTHREAD_CANCEL_DEFERRED + +PTHREAD_CANCEL_DEFERRED + + + ) + +204 + mPTHREAD_CANCEL_ASYNCHRONOUS + + +205 + #PTHREAD_CANCEL_ASYNCHRONOUS + +PTHREAD_CANCEL_ASYNCHRONOUS + + + ) + +207 + #PTHREAD_CANCELED + ((*�-1) + + ) + +211 + #PTHREAD_ONCE_INIT + 0 + + ) + +214 #ifde� +__USE_XOPEN2K + + +218 + #PTHREAD_BARRIER_SERIAL_THREAD + -1 + + ) + +222 +__BEGIN_DECLS + + +227
+�h�ad_��� + ( +�h�ad_t + * +__��ri� + +__�wth�ad +, + +228 +__cڡ + +�h�ad_��_t + * +__��ri� + +__�� +, + +229 *(* +__��t_rout�e +) (*), + +230 * +__��ri� + +__�g +� +__THROW + +__n�nu� + ((1, 3)); + +236
+ $�h�ad_ex� + (* +__�tv� +� + `__��ibu�__ + (( +__nܑu�__ +)); + +244
+ `�h�ad_jo� + ( +�h�ad_t + +__th +, ** +__th�ad_�tu� +); + +246 #ifde� +__USE_GNU + + +249
+ $�h�ad_�yjo�_� + ( +�h�ad_t + +__th +, ** +__th�ad_�tu� +� +__THROW +; + +257
+ `�h�ad_timedjo�_� + ( +�h�ad_t + +__th +, ** +__th�ad_�tu� +, + +258 +__cڡ + +time�ec + * +__ab�ime +); + +265
+ $�h�ad_d�ach + ( +�h�ad_t + +__th +� +__THROW +; + +269
+�h�ad_t + + $�h�ad_�lf + (� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +272
+ $�h�ad_equ� + ( +�h�ad_t + +__th�ad1 +,�th�ad_� +__th�ad2 +� +__THROW +; + +280
+ $�h�ad_��_�� + ( +�h�ad_��_t + * +__�� +� +__THROW + + `__n�nu� + ((1)); + +283
+ $�h�ad_��_de�roy + ( +�h�ad_��_t + * +__�� +) + +284 +__THROW + + `__n�nu� + ((1)); + +287
+ $�h�ad_��_g�d�ach��e + ( +__cڡ + +�h�ad_��_t + * +__�� +, + +288 * +__d�ach��e +) + +289 +__THROW + + `__n�nu� + ((1, 2)); + +292
+ $�h�ad_��_�td�ach��e + ( +�h�ad_��_t + * +__�� +, + +293 +__d�ach��e +) + +294 +__THROW + + `__n�nu� + ((1)); + +298
+ $�h�ad_��_g�gu�dsize + ( +__cڡ + +�h�ad_��_t + * +__�� +, + +299 +size_t + * +__gu�dsize +) + +300 +__THROW + + `__n�nu� + ((1, 2)); + +303
+ $�h�ad_��_�tgu�dsize + ( +�h�ad_��_t + * +__�� +, + +304 +size_t + +__gu�dsize +) + +305 +__THROW + + `__n�nu� + ((1)); + +309
+ $�h�ad_��_g�sched��m + ( +__cڡ + +�h�ad_��_t + * +__��ri� + + +310 +__�� +, + +311 +sched_��m + * +__��ri� + +__��m +) + +312 +__THROW + + `__n�nu� + ((1, 2)); + +315
+ $�h�ad_��_�tsched��m + ( +�h�ad_��_t + * +__��ri� + +__�� +, + +316 +__cڡ + +sched_��m + * +__��ri� + + +317 +__��m +� +__THROW + + `__n�nu� + ((1, 2)); + +320
+ $�h�ad_��_g�schedp�icy + ( +__cڡ + +�h�ad_��_t + * +__��ri� + + +321 +__�� +, * +__��ri� + +__p�icy +) + +322 +__THROW + + `__n�nu� + ((1, 2)); + +325
+ $�h�ad_��_�tschedp�icy + ( +�h�ad_��_t + * +__�� +, +__p�icy +) + +326 +__THROW + + `__n�nu� + ((1)); + +329
+ $�h�ad_��_g��h��sched + ( +__cڡ + +�h�ad_��_t + * +__��ri� + + +330 +__�� +, * +__��ri� + +__�h�� +) + +331 +__THROW + + `__n�nu� + ((1, 2)); + +334
+ $�h�ad_��_�t�h��sched + ( +�h�ad_��_t + * +__�� +, + +335 +__�h�� +) + +336 +__THROW + + `__n�nu� + ((1)); + +340
+ $�h�ad_��_g�sc�e + ( +__cڡ + +�h�ad_��_t + * +__��ri� + +__�� +, + +341 * +__��ri� + +__sc�e +) + +342 +__THROW + + `__n�nu� + ((1, 2)); + +345
+ $�h�ad_��_�tsc�e + ( +�h�ad_��_t + * +__�� +, +__sc�e +) + +346 +__THROW + + `__n�nu� + ((1)); + +349
+ $�h�ad_��_g��ackaddr + ( +__cڡ + +�h�ad_��_t + * +__��ri� + + +350 +__�� +, ** +__��ri� + +__�ackaddr +) + +351 +__THROW + + `__n�nu� + ((1, 2)� +__��ibu�_d����d__ +; + +357
+ $�h�ad_��_�t�ackaddr + ( +�h�ad_��_t + * +__�� +, + +358 * +__�ackaddr +) + +359 +__THROW + + `__n�nu� + ((1)� +__��ibu�_d����d__ +; + +362
+ $�h�ad_��_g��acksize + ( +__cڡ + +�h�ad_��_t + * +__��ri� + + +363 +__�� +, +size_t + * +__��ri� + +__�acksize +) + +364 +__THROW + + `__n�nu� + ((1, 2)); + +369
+ $�h�ad_��_�t�acksize + ( +�h�ad_��_t + * +__�� +, + +370 +size_t + +__�acksize +) + +371 +__THROW + + `__n�nu� + ((1)); + +373 #ifde� +__USE_XOPEN2K + + +375
+ $�h�ad_��_g��ack + ( +__cڡ + +�h�ad_��_t + * +__��ri� + +__�� +, + +376 ** +__��ri� + +__�ackaddr +, + +377 +size_t + * +__��ri� + +__�acksize +) + +378 +__THROW + + `__n�nu� + ((1, 2, 3)); + +383
+ $�h�ad_��_�t�ack + ( +�h�ad_��_t + * +__�� +, * +__�ackaddr +, + +384 +size_t + +__�acksize +� +__THROW + + `__n�nu� + ((1)); + +387 #ifde� +__USE_GNU + + +390
+ $�h�ad_��_��ff��y_� + ( +�h�ad_��_t + * +__�� +, + +391 +size_t + +__�u�tsize +, + +392 +__cڡ + +�u_�t_t + * +__�u�t +) + +393 +__THROW + + `__n�nu� + ((1, 3)); + +397
+ $�h�ad_��_g�aff��y_� + ( +__cڡ + +�h�ad_��_t + * +__�� +, + +398 +size_t + +__�u�tsize +, + +399 +�u_�t_t + * +__�u�t +) + +400 +__THROW + + `__n�nu� + ((1, 3)); + +406
+ $�h�ad_g���_� + ( +�h�ad_t + +__th +, +�h�ad_��_t + * +__�� +) + +407 +__THROW + + `__n�nu� + ((2)); + +415
+ $�h�ad_�tsched��m + ( +�h�ad_t + +__�rg�_th�ad +, +__p�icy +, + +416 +__cڡ + +sched_��m + * +__��m +) + +417 +__THROW + + `__n�nu� + ((3)); + +420
+ $�h�ad_g�sched��m + ( +�h�ad_t + +__�rg�_th�ad +, + +421 * +__��ri� + +__p�icy +, + +422 +sched_��m + * +__��ri� + +__��m +) + +423 +__THROW + + `__n�nu� + ((2, 3)); + +426
+ $�h�ad_�tsched�io + ( +�h�ad_t + +__�rg�_th�ad +, +__�io +) + +427 +__THROW +; + +430 #ifde� +__USE_UNIX98 + + +432
+ $�h�ad_g�c�cu��cy + (� +__THROW +; + +435
+ $�h�ad_�tc�cu��cy + ( +__�v� +� +__THROW +; + +438 #ifde� +__USE_GNU + + +443
+ $�h�ad_y�ld + (� +__THROW +; + +448
+ $�h�ad_��ff��y_� + ( +�h�ad_t + +__th +, +size_t + +__�u�tsize +, + +449 +__cڡ + +�u_�t_t + * +__�u�t +) + +450 +__THROW + + `__n�nu� + ((3)); + +453
+ $�h�ad_g�aff��y_� + ( +�h�ad_t + +__th +, +size_t + +__�u�tsize +, + +454 +�u_�t_t + * +__�u�t +) + +455 +__THROW + + `__n�nu� + ((3)); + +468
+ `�h�ad_�� + ( +�h�ad_��_t + * +__��_cڌ� +, + +469 (* +__��_rout�e +�()� + `__n�nu� + ((1, 2)); + +480
+ `�h�ad_�t�n�l��e + ( +__��e +, * +__�d��e +); + +484
+ `�h�ad_�t�n��y� + ( +__ty� +, * +__�dty� +); + +487
+ `�h�ad_�n�l + ( +�h�ad_t + +__th +); + +492
+ `�h�ad_���n�l + (); + +501 +__jmp_buf + +__�n�l_jmp_buf +; + +502 +__mask_was_�ved +; + +503 } +__�n�l_jmp_buf +[1]; + +504 * +__�d +[4]; + +505 } + t__�h�ad_unw�d_buf_t + + t__��ibu�__ + (( + t__�ig�d__ +)); + +508 #i�de� +__��nup_f�_��ibu� + + +509 + #__��nup_f�_��ibu� + + + ) + +514 + s__�h�ad_��nup_�ame + + +516 (* +__�n�l_rout�e +) (*); + +517 * +__�n�l_�g +; + +518 +__do_� +; + +519 +__�n�l_ty� +; + +522 #i� +def�ed + +__GNUC__ + && def�ed +__EXCEPTIONS + + +523 #ifde� +__�lu�lus + + +525 �as� + c__�h�ad_��nup_�ass + + +527 (* +__�n�l_rout�e +) (*); + +528 * +__�n�l_�g +; + +529 +__do_� +; + +530 +__�n�l_ty� +; + +532 +public +: + +533 + `__�h�ad_��nup_�ass + ((* +__f� +�(*), * +__�g +) + +534 : + `__�n�l_rout�e + ( +__f� +), + `__�n�l_�g + ( +__�g +), + $__do_� + (1) { } + +535 ~ + $__�h�ad_��nup_�ass + (�{ i�( +__do_� +� + `__�n�l_rout�e + ( +__�n�l_�g +); + } +} + +536 + $__�tdo� + ( +__�wv� +�{ +__do_� + = __�wv�; + } +} + +537 + $__de�r + (�{ + `�h�ad_�t�n��y� + ( +PTHREAD_CANCEL_DEFERRED +, + +538 & +__�n�l_ty� +); + } +} + +539 + $__���e + (�cڡ { + `�h�ad_�t�n��y� + ( +__�n�l_ty� +, 0); + } +} + +549 + #�h�ad_��nup_push +( +rout�e +, +�g +) \ + +551 +__�h�ad_��nup_�ass + + `__��ame + ( +rout�e +, +�g +) + + ) + +555 + #�h�ad_��nup_p� +( +execu� +) \ + +556 +__��ame +. + `__�tdo� + ( +execu� +); \ + +557 } 0) + + ) + +559 #ifde� +__USE_GNU + + +563 + #�h�ad_��nup_push_de�r_� +( +rout�e +, +�g +) \ + +565 +__�h�ad_��nup_�ass + + `__��ame + ( +rout�e +, +�g +); \ + +566 +__��ame +. + `__de�r + () + + ) + +571 + #�h�ad_��nup_p�_���e_� +( +execu� +) \ + +572 +__��ame +. + `__���e + (); \ + +573 +__��ame +. + `__�tdo� + ( +execu� +); \ + +574 } 0) + + ) + +581 +__ex��_�l�e + + +582 + $__�h�ad_��nup_rout�e + ( +__�h�ad_��nup_�ame + * +__�ame +) + +584 i�( +__�ame +-> +__do_� +) + +585 +__�ame +-> + `__�n�l_rout�e + (__�ame-> +__�n�l_�g +); + +586 + } +} + +595 + #�h�ad_��nup_push +( +rout�e +, +�g +) \ + +597 +__�h�ad_��nup_�ame + +__��ame + \ + +598 + `__��ibu�__ + (( + `__��nup__ + ( +__�h�ad_��nup_rout�e +))) \ + +599 �{ . +__�n�l_rout�e + = ( +rout�e +), . +__�n�l_�g + = ( +�g +), \ + +600 . +__do_� + = 1 }; + + ) + +604 + #�h�ad_��nup_p� +( +execu� +) \ + +605 +__��ame +. +__do_� + = ( +execu� +); \ + +606 } 0) + + ) + +608 #ifde� +__USE_GNU + + +612 + #�h�ad_��nup_push_de�r_� +( +rout�e +, +�g +) \ + +614 +__�h�ad_��nup_�ame + +__��ame + \ + +615 + `__��ibu�__ + (( + `__��nup__ + ( +__�h�ad_��nup_rout�e +))) \ + +616 �{ . +__�n�l_rout�e + = ( +rout�e +), . +__�n�l_�g + = ( +�g +), \ + +617 . +__do_� + = 1 }; \ + +618 (� + `�h�ad_�t�n��y� + ( +PTHREAD_CANCEL_DEFERRED +, \ + +619 & +__��ame +. +__�n�l_ty� +) + + ) + +624 + #�h�ad_��nup_p�_���e_� +( +execu� +) \ + +625 (� + `�h�ad_�t�n��y� + ( +__��ame +. +__�n�l_ty� +, +NULL +); \ + +626 +__��ame +. +__do_� + = ( +execu� +); \ + +627 } 0) + + ) + +638 + #�h�ad_��nup_push +( +rout�e +, +�g +) \ + +640 +__�h�ad_unw�d_buf_t + +__�n�l_buf +; \ + +641 (* +__�n�l_rout�e +�(*��( +rout�e +); \ + +642 * +__�n�l_�g + = ( +�g +); \ + +643 +n�_f��_�� + = + `__sig�tjmp + (( +__jmp_buf_�g + *) (*) \ + +644 +__�n�l_buf +. +__�n�l_jmp_buf +, 0); \ + +645 i�( + `__bu�t�_ex�� + ( +n�_f��_�� +, 0)) \ + +647 + `__�n�l_rout�e + ( +__�n�l_�g +); \ + +648 + `__�h�ad_unw�d_�xt + (& +__�n�l_buf +); \ + +652 + `__�h�ad_�gi��_�n�l + (& +__�n�l_buf +); \ + +653 d�{ + + ) + +654
+__�h�ad_�gi��_�n�l + ( +__�h�ad_unw�d_buf_t + * +__buf +) + +655 +__��nup_f�_��ibu� +; + +659 + #�h�ad_��nup_p� +( +execu� +) \ + +662 + `__�h�ad_u�egi��_�n�l + (& +__�n�l_buf +); \ + +663 i�( +execu� +) \ + +664 + `__�n�l_rout�e + ( +__�n�l_�g +); \ + +665 } 0) + + ) + +666
+ $__�h�ad_u�egi��_�n�l + ( +__�h�ad_unw�d_buf_t + * +__buf +) + +667 +__��nup_f�_��ibu� +; + +669 #ifde� +__USE_GNU + + +673 + #�h�ad_��nup_push_de�r_� +( +rout�e +, +�g +) \ + +675 +__�h�ad_unw�d_buf_t + +__�n�l_buf +; \ + +676 (* +__�n�l_rout�e +�(*��( +rout�e +); \ + +677 * +__�n�l_�g + = ( +�g +); \ + +678 +n�_f��_�� + = + `__sig�tjmp + (( +__jmp_buf_�g + *) (*) \ + +679 +__�n�l_buf +. +__�n�l_jmp_buf +, 0); \ + +680 i�( + `__bu�t�_ex�� + ( +n�_f��_�� +, 0)) \ + +682 + `__�n�l_rout�e + ( +__�n�l_�g +); \ + +683 + `__�h�ad_unw�d_�xt + (& +__�n�l_buf +); \ + +687 + `__�h�ad_�gi��_�n�l_de�r + (& +__�n�l_buf +); \ + +688 d�{ + + ) + +689
+ `__�h�ad_�gi��_�n�l_de�r + ( +__�h�ad_unw�d_buf_t + * +__buf +) + +690 +__��nup_f�_��ibu� +; + +695 + #�h�ad_��nup_p�_���e_� +( +execu� +) \ + +698 + `__�h�ad_u�egi��_�n�l_���e + (& +__�n�l_buf +); \ + +699 i�( +execu� +) \ + +700 + `__�n�l_rout�e + ( +__�n�l_�g +); \ + +701 + } +} 0) + + ) + +702
+ $__�h�ad_u�egi��_�n�l_���e + ( +__�h�ad_unw�d_buf_t + * +__buf +) + +703 +__��nup_f�_��ibu� +; + +707
+ $__�h�ad_unw�d_�xt + ( +__�h�ad_unw�d_buf_t + * +__buf +) + +708 +__��nup_f�_��ibu� + + `__��ibu�__ + (( +__nܑu�__ +)) + +709 #i�de� +SHARED + + +710 + `__��ibu�__ + (( +__w�k__ +)) + +716 +__jmp_buf_�g +; + +717
+ $__sig�tjmp + ( +__jmp_buf_�g + * +__�v +, +__�vemask +� +__THROW +; + +723
+ $�h�ad_mu�x_�� + ( +�h�ad_mu�x_t + * +__mu�x +, + +724 +__cڡ + +�h�ad_mu�x��_t + * +__mu�x�� +) + +725 +__THROW + + `__n�nu� + ((1)); + +728
+ $�h�ad_mu�x_de�roy + ( +�h�ad_mu�x_t + * +__mu�x +) + +729 +__THROW + + `__n�nu� + ((1)); + +732
+ $�h�ad_mu�x_�ylock + ( +�h�ad_mu�x_t + * +__mu�x +) + +733 +__THROW + + `__n�nu� + ((1)); + +736
+ $�h�ad_mu�x_lock + ( +�h�ad_mu�x_t + * +__mu�x +) + +737 +__THROW + + `__n�nu� + ((1)); + +739 #ifde� +__USE_XOPEN2K + + +741
+ $�h�ad_mu�x_timedlock + ( +�h�ad_mu�x_t + * +__��ri� + +__mu�x +, + +742 +__cڡ + +time�ec + * +__��ri� + + +743 +__ab�ime +� +__THROW + + `__n�nu� + ((1, 2)); + +747
+ $�h�ad_mu�x_u�ock + ( +�h�ad_mu�x_t + * +__mu�x +) + +748 +__THROW + + `__n�nu� + ((1)); + +751 #ifde� +__USE_UNIX98 + + +753
+ $�h�ad_mu�x_g��io���g + ( +__cڡ + +�h�ad_mu�x_t + * + +754 +__��ri� + +__mu�x +, + +755 * +__��ri� + +__�io���g +) + +756 +__THROW + + `__n�nu� + ((1, 2)); + +760
+ $�h�ad_mu�x_��rio���g + ( +�h�ad_mu�x_t + * +__��ri� + +__mu�x +, + +761 +__�io���g +, + +762 * +__��ri� + +__�d_���g +) + +763 +__THROW + + `__n�nu� + ((1, 3)); + +767 #ifde� +__USE_XOPEN2K8 + + +769
+ $�h�ad_mu�x_c�si��t_� + ( +�h�ad_mu�x_t + * +__mu�x +) + +770 +__THROW + + `__n�nu� + ((1)); + +771 #ifde� +__USE_GNU + + +772
+ $�h�ad_mu�x_c�si��t_� + ( +�h�ad_mu�x_t + * +__mu�x +) + +773 +__THROW + + `__n�nu� + ((1)); + +782
+ $�h�ad_mu�x��_�� + ( +�h�ad_mu�x��_t + * +__�� +) + +783 +__THROW + + `__n�nu� + ((1)); + +786
+ $�h�ad_mu�x��_de�roy + ( +�h�ad_mu�x��_t + * +__�� +) + +787 +__THROW + + `__n�nu� + ((1)); + +790
+ $�h�ad_mu�x��_g�psh�ed + ( +__cڡ + +�h�ad_mu�x��_t + * + +791 +__��ri� + +__�� +, + +792 * +__��ri� + +__psh�ed +) + +793 +__THROW + + `__n�nu� + ((1, 2)); + +796
+ $�h�ad_mu�x��_��sh�ed + ( +�h�ad_mu�x��_t + * +__�� +, + +797 +__psh�ed +) + +798 +__THROW + + `__n�nu� + ((1)); + +800 #ifde� +__USE_UNIX98 + + +802
+ $�h�ad_mu�x��_g�ty� + ( +__cڡ + +�h�ad_mu�x��_t + * +__��ri� + + +803 +__�� +, * +__��ri� + +__k�d +) + +804 +__THROW + + `__n�nu� + ((1, 2)); + +809
+ $�h�ad_mu�x��_��y� + ( +�h�ad_mu�x��_t + * +__�� +, +__k�d +) + +810 +__THROW + + `__n�nu� + ((1)); + +813
+ $�h�ad_mu�x��_g���oc� + ( +__cڡ + +�h�ad_mu�x��_t + * + +814 +__��ri� + +__�� +, + +815 * +__��ri� + +__��oc� +) + +816 +__THROW + + `__n�nu� + ((1, 2)); + +820
+ $�h�ad_mu�x��_��r�oc� + ( +�h�ad_mu�x��_t + * +__�� +, + +821 +__��oc� +) + +822 +__THROW + + `__n�nu� + ((1)); + +825
+ $�h�ad_mu�x��_g��io���g + ( +__cڡ + +�h�ad_mu�x��_t + * + +826 +__��ri� + +__�� +, + +827 * +__��ri� + +__�io���g +) + +828 +__THROW + + `__n�nu� + ((1, 2)); + +831
+ $�h�ad_mu�x��_��rio���g + ( +�h�ad_mu�x��_t + * +__�� +, + +832 +__�io���g +) + +833 +__THROW + + `__n�nu� + ((1)); + +836 #ifde� +__USE_XOPEN2K + + +838
+ $�h�ad_mu�x��_g�robu� + ( +__cڡ + +�h�ad_mu�x��_t + * +__�� +, + +839 * +__robu��ss +) + +840 +__THROW + + `__n�nu� + ((1, 2)); + +841 #ifde� +__USE_GNU + + +842
+ $�h�ad_mu�x��_g�robu�_� + ( +__cڡ + +�h�ad_mu�x��_t + * +__�� +, + +843 * +__robu��ss +) + +844 +__THROW + + `__n�nu� + ((1, 2)); + +848
+ $�h�ad_mu�x��_��obu� + ( +�h�ad_mu�x��_t + * +__�� +, + +849 +__robu��ss +) + +850 +__THROW + + `__n�nu� + ((1)); + +851 #ifde� +__USE_GNU + + +852
+ $�h�ad_mu�x��_��obu�_� + ( +�h�ad_mu�x��_t + * +__�� +, + +853 +__robu��ss +) + +854 +__THROW + + `__n�nu� + ((1)); + +859 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_XOPEN2K + + +864
+ $�h�ad_rwlock_�� + ( +�h�ad_rwlock_t + * +__��ri� + +__rwlock +, + +865 +__cڡ + +�h�ad_rwlock��_t + * +__��ri� + + +866 +__�� +� +__THROW + + `__n�nu� + ((1)); + +869
+ $�h�ad_rwlock_de�roy + ( +�h�ad_rwlock_t + * +__rwlock +) + +870 +__THROW + + `__n�nu� + ((1)); + +873
+ $�h�ad_rwlock_rdlock + ( +�h�ad_rwlock_t + * +__rwlock +) + +874 +__THROW + + `__n�nu� + ((1)); + +877
+ $�h�ad_rwlock_�yrdlock + ( +�h�ad_rwlock_t + * +__rwlock +) + +878 +__THROW + + `__n�nu� + ((1)); + +880 #ifde� +__USE_XOPEN2K + + +882
+ $�h�ad_rwlock_timedrdlock + ( +�h�ad_rwlock_t + * +__��ri� + +__rwlock +, + +883 +__cڡ + +time�ec + * +__��ri� + + +884 +__ab�ime +� +__THROW + + `__n�nu� + ((1, 2)); + +888
+ $�h�ad_rwlock_w�ock + ( +�h�ad_rwlock_t + * +__rwlock +) + +889 +__THROW + + `__n�nu� + ((1)); + +892
+ $�h�ad_rwlock_�yw�ock + ( +�h�ad_rwlock_t + * +__rwlock +) + +893 +__THROW + + `__n�nu� + ((1)); + +895 #ifde� +__USE_XOPEN2K + + +897
+ $�h�ad_rwlock_timedw�ock + ( +�h�ad_rwlock_t + * +__��ri� + +__rwlock +, + +898 +__cڡ + +time�ec + * +__��ri� + + +899 +__ab�ime +� +__THROW + + `__n�nu� + ((1, 2)); + +903
+ $�h�ad_rwlock_u�ock + ( +�h�ad_rwlock_t + * +__rwlock +) + +904 +__THROW + + `__n�nu� + ((1)); + +910
+ $�h�ad_rwlock��_�� + ( +�h�ad_rwlock��_t + * +__�� +) + +911 +__THROW + + `__n�nu� + ((1)); + +914
+ $�h�ad_rwlock��_de�roy + ( +�h�ad_rwlock��_t + * +__�� +) + +915 +__THROW + + `__n�nu� + ((1)); + +918
+ $�h�ad_rwlock��_g�psh�ed + ( +__cڡ + +�h�ad_rwlock��_t + * + +919 +__��ri� + +__�� +, + +920 * +__��ri� + +__psh�ed +) + +921 +__THROW + + `__n�nu� + ((1, 2)); + +924
+ $�h�ad_rwlock��_��sh�ed + ( +�h�ad_rwlock��_t + * +__�� +, + +925 +__psh�ed +) + +926 +__THROW + + `__n�nu� + ((1)); + +929
+ $�h�ad_rwlock��_g�k�d_� + ( +__cڡ + +�h�ad_rwlock��_t + * + +930 +__��ri� + +__�� +, + +931 * +__��ri� + +__�ef +) + +932 +__THROW + + `__n�nu� + ((1, 2)); + +935
+ $�h�ad_rwlock��_�tk�d_� + ( +�h�ad_rwlock��_t + * +__�� +, + +936 +__�ef +� +__THROW + + `__n�nu� + ((1)); + +944
+ $�h�ad_c�d_�� + ( +�h�ad_c�d_t + * +__��ri� + +__c�d +, + +945 +__cڡ + +�h�ad_c�d��_t + * +__��ri� + + +946 +__c�d_�� +� +__THROW + + `__n�nu� + ((1)); + +949
+ $�h�ad_c�d_de�roy + ( +�h�ad_c�d_t + * +__c�d +) + +950 +__THROW + + `__n�nu� + ((1)); + +953
+ $�h�ad_c�d_sig�l + ( +�h�ad_c�d_t + * +__c�d +) + +954 +__THROW + + `__n�nu� + ((1)); + +957
+ $�h�ad_c�d_br�d�� + ( +�h�ad_c�d_t + * +__c�d +) + +958 +__THROW + + `__n�nu� + ((1)); + +965
+ $�h�ad_c�d_wa� + ( +�h�ad_c�d_t + * +__��ri� + +__c�d +, + +966 +�h�ad_mu�x_t + * +__��ri� + +__mu�x +) + +967 + `__n�nu� + ((1, 2)); + +976
+ $�h�ad_c�d_timedwa� + ( +�h�ad_c�d_t + * +__��ri� + +__c�d +, + +977 +�h�ad_mu�x_t + * +__��ri� + +__mu�x +, + +978 +__cڡ + +time�ec + * +__��ri� + + +979 +__ab�ime +� + `__n�nu� + ((1, 2, 3)); + +984
+ $�h�ad_c�d��_�� + ( +�h�ad_c�d��_t + * +__�� +) + +985 +__THROW + + `__n�nu� + ((1)); + +988
+ $�h�ad_c�d��_de�roy + ( +�h�ad_c�d��_t + * +__�� +) + +989 +__THROW + + `__n�nu� + ((1)); + +992
+ $�h�ad_c�d��_g�psh�ed + ( +__cڡ + +�h�ad_c�d��_t + * + +993 +__��ri� + +__�� +, + +994 * +__��ri� + +__psh�ed +) + +995 +__THROW + + `__n�nu� + ((1, 2)); + +998
+ $�h�ad_c�d��_��sh�ed + ( +�h�ad_c�d��_t + * +__�� +, + +999 +__psh�ed +� +__THROW + + `__n�nu� + ((1)); + +1001 #ifde� +__USE_XOPEN2K + + +1003
+ $�h�ad_c�d��_g��ock + ( +__cڡ + +�h�ad_c�d��_t + * + +1004 +__��ri� + +__�� +, + +1005 +__�ockid_t + * +__��ri� + +__�ock_id +) + +1006 +__THROW + + `__n�nu� + ((1, 2)); + +1009
+ $�h�ad_c�d��_�t�ock + ( +�h�ad_c�d��_t + * +__�� +, + +1010 +__�ockid_t + +__�ock_id +) + +1011 +__THROW + + `__n�nu� + ((1)); + +1015 #ifde� +__USE_XOPEN2K + + +1020
+ $�h�ad_��_�� + ( +�h�ad_��lock_t + * +__lock +, +__psh�ed +) + +1021 +__THROW + + `__n�nu� + ((1)); + +1024
+ $�h�ad_��_de�roy + ( +�h�ad_��lock_t + * +__lock +) + +1025 +__THROW + + `__n�nu� + ((1)); + +1028
+ $�h�ad_��_lock + ( +�h�ad_��lock_t + * +__lock +) + +1029 +__THROW + + `__n�nu� + ((1)); + +1032
+ $�h�ad_��_�ylock + ( +�h�ad_��lock_t + * +__lock +) + +1033 +__THROW + + `__n�nu� + ((1)); + +1036
+ $�h�ad_��_u�ock + ( +�h�ad_��lock_t + * +__lock +) + +1037 +__THROW + + `__n�nu� + ((1)); + +1044
+ $�h�ad_b�r�r_�� + ( +�h�ad_b�r�r_t + * +__��ri� + +__b�r�r +, + +1045 +__cڡ + +�h�ad_b�r���r_t + * +__��ri� + + +1046 +__�� +, +__cou� +) + +1047 +__THROW + + `__n�nu� + ((1)); + +1050
+ $�h�ad_b�r�r_de�roy + ( +�h�ad_b�r�r_t + * +__b�r�r +) + +1051 +__THROW + + `__n�nu� + ((1)); + +1054
+ $�h�ad_b�r�r_wa� + ( +�h�ad_b�r�r_t + * +__b�r�r +) + +1055 +__THROW + + `__n�nu� + ((1)); + +1059
+ $�h�ad_b�r���r_�� + ( +�h�ad_b�r���r_t + * +__�� +) + +1060 +__THROW + + `__n�nu� + ((1)); + +1063
+ $�h�ad_b�r���r_de�roy + ( +�h�ad_b�r���r_t + * +__�� +) + +1064 +__THROW + + `__n�nu� + ((1)); + +1067
+ $�h�ad_b�r���r_g�psh�ed + ( +__cڡ + +�h�ad_b�r���r_t + * + +1068 +__��ri� + +__�� +, + +1069 * +__��ri� + +__psh�ed +) + +1070 +__THROW + + `__n�nu� + ((1, 2)); + +1073
+ $�h�ad_b�r���r_��sh�ed + ( +�h�ad_b�r���r_t + * +__�� +, + +1074 +__psh�ed +) + +1075 +__THROW + + `__n�nu� + ((1)); + +1087
+ `�h�ad_key_��� + ( +�h�ad_key_t + * +__key +, + +1088 (* +__de�r_fun�i� +) (*)) + +1089 +__THROW + + `__n�nu� + ((1)); + +1092
+ $�h�ad_key_d��e + ( +�h�ad_key_t + +__key +� +__THROW +; + +1095
* + $�h�ad_g��ecific + ( +�h�ad_key_t + +__key +� +__THROW +; + +1098
+ $�h�ad_�t�ecific + ( +�h�ad_key_t + +__key +, + +1099 +__cڡ + * +__po��r +� +__THROW + ; + +1102 #ifde� +__USE_XOPEN2K + + +1104
+ $�h�ad_g��u�ockid + ( +�h�ad_t + +__th�ad_id +, + +1105 +__�ockid_t + * +__�ock_id +) + +1106 +__THROW + + `__n�nu� + ((2)); + +1121
+ `�h�ad_�f�k + ((* +__���e +) (), + +1122 (* +__��� +) (), + +1123 (* +__ch�d +�()� +__THROW +; + +1126 #ifde� +__USE_EXTERN_INLINES + + +1128 +__ex��_�l�e + + +1129 + `__NTH + ( + $�h�ad_equ� + ( +�h�ad_t + +__th�ad1 +,�th�ad_� +__th�ad2 +)) + +1131 +__th�ad1 + =� +__th�ad2 +; + +1132 + } +} + +1135 + g__END_DECLS + + + @/usr/include/sys/select.h + +22 #i�de� +_SYS_SELECT_H + + +23 + #_SYS_SELECT_H + 1 + + ) + +25 + ~<�u�s.h +> + +28 + ~<b�s/ty�s.h +> + +31 + ~<b�s/���.h +> + +34 + ~<b�s/sig�t.h +> + +36 #i�de� +__sig�t_t_def�ed + + +37 + #__sig�t_t_def�ed + + + ) + +38 +__sig�t_t + + tsig�t_t +; + +42 + #__�ed_time_t + + + ) + +43 + #__�ed_time�ec + + + ) + +44 + ~<time.h +> + +45 + #__�ed_timev� + + + ) + +46 + ~<b�s/time.h +> + +48 #i�de� +__su�c�ds_t_def�ed + + +49 +__su�c�ds_t + + tsu�c�ds_t +; + +50 + #__su�c�ds_t_def�ed + + + ) + +55 + t__fd_mask +; + +58 #unde� +__NFDBITS + + +59 #unde� +__FDELT + + +60 #unde� +__FDMASK + + +62 + #__NFDBITS + (8 * (� ( +__fd_mask +)) + + ) + +63 + #__FDELT +( +d +�((d�/ +__NFDBITS +) + + ) + +64 + #__FDMASK +( +d +�(( +__fd_mask +�1 << ((d�% +__NFDBITS +)) + + ) + +71 #ifde� +__USE_XOPEN + + +72 +__fd_mask + + mfds_b�s +[ +__FD_SETSIZE + / +__NFDBITS +]; + +73 + #__FDS_BITS +( +�t +�((�t)-> +fds_b�s +) + + ) + +75 +__fd_mask + + m__fds_b�s +[ +__FD_SETSIZE + / +__NFDBITS +]; + +76 + #__FDS_BITS +( +�t +�((�t)-> +__fds_b�s +) + + ) + +78 } + tfd_�t +; + +81 + #FD_SETSIZE + +__FD_SETSIZE + + + ) + +83 #ifde� +__USE_MISC + + +85 +__fd_mask + + tfd_mask +; + +88 + #NFDBITS + +__NFDBITS + + + ) + +93 + #FD_SET +( +fd +, +fd�� +� + `__FD_SET + (fd, fd��) + + ) + +94 + #FD_CLR +( +fd +, +fd�� +� + `__FD_CLR + (fd, fd��) + + ) + +95 + #FD_ISSET +( +fd +, +fd�� +� + `__FD_ISSET + (fd, fd��) + + ) + +96 + #FD_ZERO +( +fd�� +� + `__FD_ZERO + (fd��) + + ) + +99 +__BEGIN_DECLS + + +109
+��� + ( +__nfds +, +fd_�t + * +__��ri� + +__�adfds +, + +110 +fd_�t + * +__��ri� + +__wr�efds +, + +111 +fd_�t + * +__��ri� + +__ex��fds +, + +112 +timev� + * +__��ri� + +__timeout +); + +114 #ifde� +__USE_XOPEN2K + + +121
+p��� + ( +__nfds +, +fd_�t + * +__��ri� + +__�adfds +, + +122 +fd_�t + * +__��ri� + +__wr�efds +, + +123 +fd_�t + * +__��ri� + +__ex��fds +, + +124 cڡ +time�ec + * +__��ri� + +__timeout +, + +125 cڡ +__sig�t_t + * +__��ri� + +__sigmask +); + +128 + g__END_DECLS + + + @/usr/include/sys/sysmacros.h + +21 #i�de� +_SYS_SYSMACROS_H + + +22 + #_SYS_SYSMACROS_H + 1 + + ) + +24 + ~<�u�s.h +> + +29 #ifde� +__GLIBC_HAVE_LONG_LONG + + +30 +__ex�nsi�__ + + +31
+ $gnu_dev_maj� + ( +__dev +) + +32 +__THROW +; + +33 +__ex�nsi�__ + + +34
+ $gnu_dev_m�� + ( +__dev +) + +35 +__THROW +; + +36 +__ex�nsi�__ + + +37
+ $gnu_dev_makedev + ( +__maj� +, + +38 +__m�� +) + +39 +__THROW +; + +41 #i� +def�ed + +__GNUC__ + && __GNUC__ >�2 && def�ed +__USE_EXTERN_INLINES + + +42 +__ex�nsi�__ + +__ex��_�l�e + + +43 + `__NTH + ( + $gnu_dev_maj� + ( +__dev +)) + +45 (( +__dev + >> 8) & 0xfff) | (() (__dev >> 32) & ~0xfff); + +46 + } +} + +48 +__ex�nsi�__ + +__ex��_�l�e + + +49 +__NTH + ( + $gnu_dev_m�� + ( +__dev +)) + +51 ( +__dev + & 0xff) | (() (__dev >> 12) & ~0xff); + +52 + } +} + +54 +__ex�nsi�__ + +__ex��_�l�e + + +55 +__NTH + ( + $gnu_dev_makedev + ( +__maj� +, +__m�� +)) + +57 (( +__m�� + & 0xff�| (( +__maj� + & 0xfff) << 8) + +58 | (((�( +__m�� + & ~0xff)) << 12) + +59 | (((�( +__maj� + & ~0xfff)) << 32)); + +60 + } +} + +65 + #maj� +( +dev +� + `gnu_dev_maj� + (dev) + + ) + +66 + #m�� +( +dev +� + `gnu_dev_m�� + (dev) + + ) + +67 + #makedev +( +maj +, +m� +� + `gnu_dev_makedev + (maj, m�) + + ) + + @/usr/include/time.h + +23 #i�def +_TIME_H + + +25 #i�(! +def�ed + +__�ed_time_t + && !def�ed +__�ed_�ock_t + && \ + +26 ! +def�ed + + g__�ed_time�ec +) + +27 + #_TIME_H + 1 + + ) + +28 + ~<�u�s.h +> + +30 + g__BEGIN_DECLS + + +34 #ifdef +_TIME_H + + +36 + #__�ed_size_t + + + ) + +37 + #__�ed_NULL + + + ) + +38 + ~<�ddef.h +> + +42 + ~<b�s/time.h +> + +45 #i�! +def�ed + +__STRICT_ANSI__ + && !def�ed +__USE_XOPEN2K + + +46 #i�de� +CLK_TCK + + +47 + #CLK_TCK + +CLOCKS_PER_SEC + + + ) + +53 #i�! +def�ed + +__�ock_t_def�ed + && (def�ed +_TIME_H + || def�ed +__�ed_�ock_t +) + +54 + #__�ock_t_def�ed + 1 + + ) + +56 + ~<b�s/ty�s.h +> + +58 +__BEGIN_NAMESPACE_STD + + +60 +__�ock_t + + t�ock_t +; + +61 + g__END_NAMESPACE_STD + + +62 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_POSIX + || def�ed +__USE_MISC + + +63 + $__USING_NAMESPACE_STD +( +�ock_t +) + +67 #unde� +__�ed_�ock_t + + +69 #i�! +def�ed + +__time_t_def�ed + && (def�ed +_TIME_H + || def�ed +__�ed_time_t +) + +70 + #__time_t_def�ed + 1 + + ) + +72 + ~<b�s/ty�s.h +> + +74 +__BEGIN_NAMESPACE_STD + + +76 +__time_t + + ttime_t +; + +77 +__END_NAMESPACE_STD + + +78 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + || def�ed +__USE_SVID + + +79 + $__USING_NAMESPACE_STD +( +time_t +) + +83 #unde� +__�ed_time_t + + +85 #i�! +def�ed + +__�ockid_t_def�ed + && \ + +86 (( +def�ed + +_TIME_H + && def�ed +__USE_POSIX199309 +�|| def�ed +__�ed_�ockid_t +) + +87 + #__�ockid_t_def�ed + 1 + + ) + +89 + ~<b�s/ty�s.h +> + +92 +__�ockid_t + + t�ockid_t +; + +95 #unde� +__�ockid_time_t + + +97 #i�! +def�ed + +__tim�_t_def�ed + && \ + +98 (( +def�ed + +_TIME_H + && def�ed +__USE_POSIX199309 +�|| def�ed +__�ed_tim�_t +) + +99 + #__tim�_t_def�ed + 1 + + ) + +101 + ~<b�s/ty�s.h +> + +104 +__tim�_t + + ttim�_t +; + +107 #unde� +__�ed_tim�_t + + +110 #i�! +def�ed + +__time�ec_def�ed + && \ + +111 (( +def�ed + +_TIME_H + && \ + +112 ( +def�ed + +__USE_POSIX199309 + || def�ed +__USE_MISC +)) || \ + +113 +def�ed + +__�ed_time�ec +) + +114 + #__time�ec_def�ed + 1 + + ) + +116 + ~<b�s/ty�s.h +> + +120 + stime�ec + + +122 +__time_t + +tv_�c +; + +123 +tv_n�c +; + +127 #unde� +__�ed_time�ec + + +130 #ifdef +_TIME_H + + +131 +__BEGIN_NAMESPACE_STD + + +133 + stm + + +135 +tm_�c +; + +136 +tm_m� +; + +137 +tm_hour +; + +138 +tm_mday +; + +139 +tm_m� +; + +140 +tm_y�r +; + +141 +tm_wday +; + +142 +tm_yday +; + +143 +tm_isd� +; + +145 #ifdef +__USE_BSD + + +146 +tm_gmtoff +; + +147 +__cڡ + * +tm_z�e +; + +149 +__tm_gmtoff +; + +150 +__cڡ + * +__tm_z�e +; + +153 +__END_NAMESPACE_STD + + +154 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_POSIX + || def�ed +__USE_MISC + + +155 + $__USING_NAMESPACE_STD +( +tm +) + +159 #ifde� +__USE_POSIX199309 + + +161 + s�im��ec + + +163 +time�ec + +�_��rv� +; + +164 +time�ec + +�_v�ue +; + +168 +sigev�t +; + +172 #ifde� +__USE_XOPEN2K + + +173 #i�de� +__pid_t_def�ed + + +174 +__pid_t + + tpid_t +; + +175 + #__pid_t_def�ed + + + ) + +180 +__BEGIN_NAMESPACE_STD + + +183
+�ock_t + + $�ock + (� +__THROW +; + +186
+time_t + + $time + ( +time_t + * +__tim� +� +__THROW +; + +189
+ $dif�ime + ( +time_t + +__time1 +,�ime_� +__time0 +) + +190 +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +193
+time_t + + $mktime + ( +tm + * +__� +� +__THROW +; + +199
+size_t + + $�r�ime + (* +__��ri� + +__s +, +size_t + +__maxsize +, + +200 +__cڡ + * +__��ri� + +__f�m� +, + +201 +__cڡ + +tm + * +__��ri� + +__� +� +__THROW +; + +202 +__END_NAMESPACE_STD + + +204 #ifde� +__USE_XOPEN + + +207
* + $��time + ( +__cڡ + * +__��ri� + +__s +, + +208 +__cڡ + * +__��ri� + +__fmt +, +tm + * +__� +) + +209 +__THROW +; + +212 #ifde� +__USE_XOPEN2K8 + + +215 + ~<xlo��.h +> + +217
+size_t + + $�r�ime_l + (* +__��ri� + +__s +, +size_t + +__maxsize +, + +218 +__cڡ + * +__��ri� + +__f�m� +, + +219 +__cڡ + +tm + * +__��ri� + +__� +, + +220 +__lo��_t + +__loc +� +__THROW +; + +223 #ifde� +__USE_GNU + + +224
* + $��time_l + ( +__cڡ + * +__��ri� + +__s +, + +225 +__cڡ + * +__��ri� + +__fmt +, +tm + * +__� +, + +226 +__lo��_t + +__loc +� +__THROW +; + +230 +__BEGIN_NAMESPACE_STD + + +233
+tm + * + $gmtime + ( +__cڡ + +time_t + * +__tim� +� +__THROW +; + +237
+tm + * + $lo��ime + ( +__cڡ + +time_t + * +__tim� +� +__THROW +; + +238 +__END_NAMESPACE_STD + + +240 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +243
+tm + * + $gmtime_r + ( +__cڡ + +time_t + * +__��ri� + +__tim� +, + +244 +tm + * +__��ri� + +__� +� +__THROW +; + +248
+tm + * + $lo��ime_r + ( +__cڡ + +time_t + * +__��ri� + +__tim� +, + +249 +tm + * +__��ri� + +__� +� +__THROW +; + +252 +__BEGIN_NAMESPACE_STD + + +255
* + $as�ime + ( +__cڡ + +tm + * +__� +� +__THROW +; + +258
* + $�ime + ( +__cڡ + +time_t + * +__tim� +� +__THROW +; + +259 +__END_NAMESPACE_STD + + +261 #i� +def�ed + +__USE_POSIX + || def�ed +__USE_MISC + + +266
* + $as�ime_r + ( +__cڡ + +tm + * +__��ri� + +__� +, + +267 * +__��ri� + +__buf +� +__THROW +; + +270
* + $�ime_r + ( +__cڡ + +time_t + * +__��ri� + +__tim� +, + +271 * +__��ri� + +__buf +� +__THROW +; + +276
* +__tz�me +[2]; + +277
+__daylight +; + +278
+__timez�e +; + +281 #ifdef +__USE_POSIX + + +283
* +tz�me +[2]; + +287
+ $tz�t + (� +__THROW +; + +290 #i� +def�ed + +__USE_SVID + || def�ed +__USE_XOPEN + + +291
+daylight +; + +292
+timez�e +; + +295 #ifde� +__USE_SVID + + +298
+ $�ime + ( +__cڡ + +time_t + * +__wh� +� +__THROW +; + +304 + #__i��p +( +y�r +) \ + +305 (( +y�r +�% 4 =�0 && ((y�r�% 100 !�0 || (y�r�% 400 =�0)) + + ) + +308 #ifde� +__USE_MISC + + +313
+time_t + + $timegm + ( +tm + * +__� +� +__THROW +; + +316
+time_t + + $tim�o�l + ( +tm + * +__� +� +__THROW +; + +319
+ $dysize + ( +__y�r +� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +323 #ifde� +__USE_POSIX199309 + + +328
+ `�no��p + ( +__cڡ + +time�ec + * +__�que�ed_time +, + +329 +time�ec + * +__�ma��g +); + +333
+ $�ock_g��s + ( +�ockid_t + +__�ock_id +, +time�ec + * +__�s +� +__THROW +; + +336
+ $�ock_g�time + ( +�ockid_t + +__�ock_id +, +time�ec + * +__� +� +__THROW +; + +339
+ $�ock_��ime + ( +�ockid_t + +__�ock_id +, +__cڡ + +time�ec + * +__� +) + +340 +__THROW +; + +342 #ifde� +__USE_XOPEN2K + + +347
+ `�ock_�no��p + ( +�ockid_t + +__�ock_id +, +__�ags +, + +348 +__cڡ + +time�ec + * +__�q +, + +349 +time�ec + * +__�m +); + +352
+ $�ock_g��u�ockid + ( +pid_t + +__pid +, +�ockid_t + * +__�ock_id +� +__THROW +; + +357
+ $tim�_��� + ( +�ockid_t + +__�ock_id +, + +358 +sigev�t + * +__��ri� + +__evp +, + +359 +tim�_t + * +__��ri� + +__tim�id +� +__THROW +; + +362
+ $tim�_d��e + ( +tim�_t + +__tim�id +� +__THROW +; + +365
+ $tim�_��ime + ( +tim�_t + +__tim�id +, +__�ags +, + +366 +__cڡ + +�im��ec + * +__��ri� + +__v�ue +, + +367 +�im��ec + * +__��ri� + +__ov�ue +� +__THROW +; + +370
+ $tim�_g�time + ( +tim�_t + +__tim�id +, +�im��ec + * +__v�ue +) + +371 +__THROW +; + +374
+ $tim�_g�ov�run + ( +tim�_t + +__tim�id +� +__THROW +; + +378 #ifde� +__USE_XOPEN_EXTENDED + + +390
+g�d�e_�r +; + +399
+tm + * + `g�d�e + ( +__cڡ + * +__�r�g +); + +402 #ifde� +__USE_GNU + + +413
+ `g�d�e_r + ( +__cڡ + * +__��ri� + +__�r�g +, + +414 +tm + * +__��ri� + +__�sbu� +); + +417 +__END_DECLS + + + @/usr/include/wctype.h + +24 #i�de� +_WCTYPE_H + + +26 + ~<�u�s.h +> + +27 + ~<b�s/ty�s.h +> + +29 #i�de� +__�ed_iswxxx + + +30 + #_WCTYPE_H + 1 + + ) + +33 + #__�ed_w�t_t + + + ) + +34 + ~<�ddef.h +> + +38 #i�de� +WEOF + + +39 + #WEOF + (0xffffffffu) + + ) + +42 #unde� +__�ed_iswxxx + + +47 #i�de� +__iswxxx_def�ed + + +48 + #__iswxxx_def�ed + 1 + + ) + +50 +__BEGIN_NAMESPACE_C99 + + +53 + tw�y�_t +; + +54 + g__END_NAMESPACE_C99 + + +56 #i�de� +_ISwb� + + +61 + ~<�d�n.h +> + +62 #i� +__BYTE_ORDER + =� +__BIG_ENDIAN + + +63 + #_ISwb� +( +b� +�(1 << (b�)) + + ) + +65 + #_ISwb� +( +b� +) \ + +66 (( +b� +) < 8 ? () ((1UL << (bit)) << 24) \ + +67 : (( +b� +) < 16 ? () ((1UL << (bit)) << 8) \ + +68 : (( +b� +) < 24 ? () ((1UL << (bit)) >> 8) \ + +69 : (�((1UL << ( +b� +)�>> 24)))) + + ) + +74 + m__ISwu�� + = 0, + +75 + m__ISwlow� + = 1, + +76 + m__ISw�pha + = 2, + +77 + m__ISwdig� + = 3, + +78 + m__ISwxdig� + = 4, + +79 + m__ISw�a� + = 5, + +80 + m__ISw��t + = 6, + +81 + m__ISwg�ph + = 7, + +82 + m__ISwb�nk + = 8, + +83 + m__ISw��l + = 9, + +84 + m__ISwpun� + = 10, + +85 + m__ISw�num + = 11, + +87 + m_ISwu�� + = +_ISwb� + ( +__ISwu�� +), + +88 + m_ISwlow� + = +_ISwb� + ( +__ISwlow� +), + +89 + m_ISw�pha + = +_ISwb� + ( +__ISw�pha +), + +90 + m_ISwdig� + = +_ISwb� + ( +__ISwdig� +), + +91 + m_ISwxdig� + = +_ISwb� + ( +__ISwxdig� +), + +92 + m_ISw�a� + = +_ISwb� + ( +__ISw�a� +), + +93 + m_ISw��t + = +_ISwb� + ( +__ISw��t +), + +94 + m_ISwg�ph + = +_ISwb� + ( +__ISwg�ph +), + +95 + m_ISwb�nk + = +_ISwb� + ( +__ISwb�nk +), + +96 + m_ISw��l + = +_ISwb� + ( +__ISw��l +), + +97 + m_ISwpun� + = +_ISwb� + ( +__ISwpun� +), + +98 + m_ISw�num + = +_ISwb� + ( +__ISw�num +) + +103 +__BEGIN_DECLS + + +105 +__BEGIN_NAMESPACE_C99 + + +112
+ $isw�num + ( +w�t_t + +__wc +� +__THROW +; + +118
+ $isw�pha + ( +w�t_t + +__wc +� +__THROW +; + +121
+ $isw��l + ( +w�t_t + +__wc +� +__THROW +; + +125
+ $iswdig� + ( +w�t_t + +__wc +� +__THROW +; + +129
+ $iswg�ph + ( +w�t_t + +__wc +� +__THROW +; + +134
+ $iswlow� + ( +w�t_t + +__wc +� +__THROW +; + +137
+ $isw��t + ( +w�t_t + +__wc +� +__THROW +; + +142
+ $iswpun� + ( +w�t_t + +__wc +� +__THROW +; + +147
+ $isw�a� + ( +w�t_t + +__wc +� +__THROW +; + +152
+ $iswu�� + ( +w�t_t + +__wc +� +__THROW +; + +157
+ $iswxdig� + ( +w�t_t + +__wc +� +__THROW +; + +162 #ifde� +__USE_ISOC99 + + +163
+ $iswb�nk + ( +w�t_t + +__wc +� +__THROW +; + +172
+w�y�_t + + $w�y� + ( +__cڡ + * +__�ݔty +� +__THROW +; + +176
+ $isw�y� + ( +w�t_t + +__wc +, +w�y�_t + +__desc +� +__THROW +; + +177 +__END_NAMESPACE_C99 + + +184 +__BEGIN_NAMESPACE_C99 + + +187 +__cڡ + + t__�t32_t + * + tw��ns_t +; + +188 +__END_NAMESPACE_C99 + + +189 #ifde� +__USE_GNU + + +190 + $__USING_NAMESPACE_C99 +( +w��ns_t +) + +193 +__BEGIN_NAMESPACE_C99 + + +195
+w�t_t + + $towlow� + ( +w�t_t + +__wc +� +__THROW +; + +198
+w�t_t + + $towu�� + ( +w�t_t + +__wc +� +__THROW +; + +199 +__END_NAMESPACE_C99 + + +201 +__END_DECLS + + +208 #ifde� +_WCTYPE_H + + +214 +__BEGIN_DECLS + + +216 +__BEGIN_NAMESPACE_C99 + + +219
+w��ns_t + + $w��ns + ( +__cڡ + * +__�ݔty +� +__THROW +; + +222
+w�t_t + + $tow��ns + ( +w�t_t + +__wc +, +w��ns_t + +__desc +� +__THROW +; + +223 +__END_NAMESPACE_C99 + + +225 #ifde� +__USE_XOPEN2K8 + + +227 + ~<xlo��.h +> + +231
+ $isw�num_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +237
+ $isw�pha_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +240
+ $isw��l_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +244
+ $iswdig�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +248
+ $iswg�ph_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +253
+ $iswlow�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +256
+ $isw��t_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +261
+ $iswpun�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +266
+ $isw�a�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +271
+ $iswu��_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +276
+ $iswxdig�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +281
+ $iswb�nk_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +285
+w�y�_t + + $w�y�_l + ( +__cڡ + * +__�ݔty +, +__lo��_t + +__lo�� +) + +286 +__THROW +; + +290
+ $isw�y�_l + ( +w�t_t + +__wc +, +w�y�_t + +__desc +, +__lo��_t + +__lo�� +) + +291 +__THROW +; + +299
+w�t_t + + $towlow�_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +302
+w�t_t + + $towu��_l + ( +w�t_t + +__wc +, +__lo��_t + +__lo�� +� +__THROW +; + +306
+w��ns_t + + $w��ns_l + ( +__cڡ + * +__�ݔty +, +__lo��_t + +__lo�� +) + +307 +__THROW +; + +310
+w�t_t + + $tow��ns_l + ( +w�t_t + +__wc +, +w��ns_t + +__desc +, + +311 +__lo��_t + +__lo�� +� +__THROW +; + +315 +__END_DECLS + + + @/usr/include/bits/errno.h + +20 #ifde� +_ERRNO_H + + +22 #unde� +EDOM + + +23 #unde� +EILSEQ + + +24 #unde� +ERANGE + + +25 + ~<l�ux/��o.h +> + +28 + #ENOTSUP + +EOPNOTSUPP + + + ) + +31 #i�de� +ECANCELED + + +32 + #ECANCELED + 125 + + ) + +36 #i�de� +EOWNERDEAD + + +37 + #EOWNERDEAD + 130 + + ) + +38 + #ENOTRECOVERABLE + 131 + + ) + +41 #i�de� +__ASSEMBLER__ + + +43
* + $__��o_lo�ti� + (� +__THROW + + `__��ibu�__ + (( +__cڡ__ +)); + +45 #i�! +def�ed + +_LIBC + || def�ed +_LIBC_REENTRANT + + +47 + #��o + (* + `__��o_lo�ti� + ()) + + ) + +52 #i�! +def�ed + +_ERRNO_H + && def�ed +__�ed_Em�h + + +56 + #EDOM + 33 + + ) + +57 + #EILSEQ + 84 + + ) + +58 + #ERANGE + 34 + + ) + + @/usr/include/bits/select.h + +19 #i�de� +_SYS_SELECT_H + + +23 + ~<b�s/w�dsize.h +> + +26 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +28 #i� +__WORDSIZE + == 64 + +29 + #__FD_ZERO_STOS + "�osq" + + ) + +31 + #__FD_ZERO_STOS + "�o�" + + ) + +34 + #__FD_ZERO +( +fd� +) \ + +36 +__d0 +, +__d1 +; \ + +37 +__asm__ + + `__vީ�e__ + ("�d;��; " +__FD_ZERO_STOS + \ + +38 : "=c" ( +__d0 +), "=D" ( +__d1 +) \ + +39 : "a" (0), "0" ( ( +fd_�t +) \ + +40 / ( +__fd_mask +)), \ + +41 "1" (& + `__FDS_BITS + ( +fd� +)[0]) \ + +43 } 0) + + ) + +49 + #__FD_ZERO +( +�t +) \ + +51 +__i +; \ + +52 +fd_�t + * +__�r + = ( +�t +); \ + +53 +__i + = 0; __�< ( +fd_�t +�/ ( +__fd_mask +); ++__i) \ + +54 + `__FDS_BITS + ( +__�r +)[ +__i +] = 0; \ + +55 } 0) + + ) + +59 + #__FD_SET +( +d +, +�t +�( + `__FDS_BITS + (�t)[ + `__FDELT + (d)] |� + `__FDMASK + (d)) + + ) + +60 + #__FD_CLR +( +d +, +�t +�( + `__FDS_BITS + (�t)[ + `__FDELT + (d)] &�~ + `__FDMASK + (d)) + + ) + +61 + #__FD_ISSET +( +d +, +�t +) \ + +62 (( + `__FDS_BITS + ( +�t +)[ + `__FDELT + ( +d +)] & + `__FDMASK + (d)�!�0) + + ) + + @/usr/include/bits/setjmp.h + +20 #i�de� +_BITS_SETJMP_H + + +21 + #_BITS_SETJMP_H + 1 + + ) + +23 #i�! +def�ed + +_SETJMP_H + && !def�ed +_PTHREAD_H + + +27 + ~<b�s/w�dsize.h +> + +29 #i�de� +_ASM + + +31 #i� +__WORDSIZE + == 64 + +32 + t__jmp_buf +[8]; + +34 + t__jmp_buf +[6]; + + @/usr/include/bits/sigset.h + +21 #i�def +_SIGSET_H_ty�s + + +22 + #_SIGSET_H_ty�s + 1 + + ) + +24 + t__sig_�omic_t +; + +28 + #_SIGSET_NWORDS + (1024 / (8 * ())) + + ) + +31 + m__v� +[ +_SIGSET_NWORDS +]; + +32 } + t__sig�t_t +; + +43 #i�! +def�ed + +_SIGSET_H_�s + && def�ed +_SIGNAL_H + + +44 + #_SIGSET_H_�s + 1 + + ) + +46 #i�de� +_EXTERN_INLINE + + +47 + #_EXTERN_INLINE + +__ex��_�l�e + + + ) + +51 + #__sigmask +( +sig +) \ + +52 (((�1�<< ((( +sig +�- 1�% (8 * ()))) + + ) + +55 + #__sigw�d +( +sig +�(((sig�- 1�/ (8 * ())) + + ) + +57 #i� +def�ed + +__GNUC__ + && __GNUC__ >= 2 + +58 + #__sigem�y�t +( +�t +) \ + +59 ( + `__ex�nsi�__ + ({ +__�t + = +_SIGSET_NWORDS +; \ + +60 +sig�t_t + * +__�t + = ( +�t +); \ + +61 -- +__�t + >�0� +__�t +-> +__v� +[__cnt] = 0; \ + +62 0; })) + + ) + +63 + #__sigf�l�t +( +�t +) \ + +64 ( + `__ex�nsi�__ + ({ +__�t + = +_SIGSET_NWORDS +; \ + +65 +sig�t_t + * +__�t + = ( +�t +); \ + +66 -- +__�t + >�0� +__�t +-> +__v� +[__cnt] = ~0UL; \ + +67 0; })) + + ) + +69 #ifde� +__USE_GNU + + +73 + #__sigi�m�y�t +( +�t +) \ + +74 ( + `__ex�nsi�__ + ({ +__�t + = +_SIGSET_NWORDS +; \ + +75 cڡ +sig�t_t + * +__�t + = ( +�t +); \ + +76 +__�t + = +__�t +-> +__v� +[-- +__�t +]; \ + +77 ! +__�t + && -- +__�t + >= 0) \ + +78 +__�t + = +__�t +-> +__v� +[ +__�t +]; \ + +79 +__�t + =�0; })) + + ) + +80 + #__sig�d�t +( +de� +, +�� +, +right +) \ + +81 ( + `__ex�nsi�__ + ({ +__�t + = +_SIGSET_NWORDS +; \ + +82 +sig�t_t + * +__de� + = ( +de� +); \ + +83 cڡ +sig�t_t + * +__�� + = ( +�� +); \ + +84 cڡ +sig�t_t + * +__right + = ( +right +); \ + +85 -- +__�t + >= 0) \ + +86 +__de� +-> +__v� +[ +__�t +] = ( +__�� +->__val[__cnt] \ + +87 & +__right +-> +__v� +[ +__�t +]); \ + +88 0; })) + + ) + +89 + #__sigܣt +( +de� +, +�� +, +right +) \ + +90 ( + `__ex�nsi�__ + ({ +__�t + = +_SIGSET_NWORDS +; \ + +91 +sig�t_t + * +__de� + = ( +de� +); \ + +92 cڡ +sig�t_t + * +__�� + = ( +�� +); \ + +93 cڡ +sig�t_t + * +__right + = ( +right +); \ + +94 -- +__�t + >= 0) \ + +95 +__de� +-> +__v� +[ +__�t +] = ( +__�� +->__val[__cnt] \ + +96 | +__right +-> +__v� +[ +__�t +]); \ + +97 0; })) + + ) + +104
+__sigismemb� + ( +__cڡ + +__sig�t_t + *, ); + +105
+__sigadd�t + ( +__sig�t_t + *, ); + +106
+__sigd��t + ( +__sig�t_t + *, ); + +108 #ifde� +__USE_EXTERN_INLINES + + +109 + #__SIGSETFN +( +NAME +, +BODY +, +CONST +) \ + +110 +_EXTERN_INLINE + \ + +111 + `NAME + ( +CONST + +__sig�t_t + * +__�t +, +__sig +) \ + +113 +__mask + = + `__sigmask + ( +__sig +); \ + +114 +__w�d + = + `__sigw�d + ( +__sig +); \ + +115 +BODY +; \ + +116 } + + ) + +118 +__SIGSETFN + ( +__sigismemb� +, ( +__�t +-> +__v� +[ +__w�d +] & +__mask +�? 1 : 0, +__cڡ +) + +119 +__SIGSETFN + ( +__sigadd�t +, (( +__�t +-> +__v� +[ +__w�d +] |� +__mask +), 0), ) + +120 +__SIGSETFN + ( +__sigd��t +, (( +__�t +-> +__v� +[ +__w�d +] &�~ +__mask +), 0), ) + +122 #unde� +__SIGSETFN + + + @/usr/include/bits/time.h + +24 #i�de� +__�ed_timev� + + +25 #i�de� +_BITS_TIME_H + + +26 + #_BITS_TIME_H + 1 + + ) + +34 + #CLOCKS_PER_SEC + 1000000l + + ) + +36 #i�! +def�ed + +__STRICT_ANSI__ + && !def�ed +__USE_XOPEN2K + + +39 + ~<b�s/ty�s.h +> + +40
+__sysc�f + (); + +41 + #CLK_TCK + (( +__�ock_t +� + `__sysc�f + (2)� + + ) + +44 #ifde� +__USE_POSIX199309 + + +46 + #CLOCK_REALTIME + 0 + + ) + +48 + #CLOCK_MONOTONIC + 1 + + ) + +50 + #CLOCK_PROCESS_CPUTIME_ID + 2 + + ) + +52 + #CLOCK_THREAD_CPUTIME_ID + 3 + + ) + +55 + #TIMER_ABSTIME + 1 + + ) + +61 #ifde� +__�ed_timev� + + +62 #unde� +__�ed_timev� + + +63 #i�de� +_STRUCT_TIMEVAL + + +64 + #_STRUCT_TIMEVAL + 1 + + ) + +65 + ~<b�s/ty�s.h +> + +69 + stimev� + + +71 +__time_t + + mtv_�c +; + +72 +__su�c�ds_t + + mtv_u�c +; + + @/usr/include/sched.h + +20 #i�def +_SCHED_H + + +21 + #_SCHED_H + 1 + + ) + +23 + ~<�u�s.h +> + +26 + ~<b�s/ty�s.h +> + +28 + #__�ed_size_t + + + ) + +29 + ~<�ddef.h +> + +31 + #__�ed_time�ec + + + ) + +32 + ~<time.h +> + +35 + ~<b�s/sched.h +> + +37 + #sched_�iܙy + +__sched_�iܙy + + + ) + +40 +__BEGIN_DECLS + + +43
+ $sched_���am + ( +__pid_t + +__pid +, +__cڡ + +sched_��m + * +__��m +) + +44 +__THROW +; + +47
+ $sched_g���m + ( +__pid_t + +__pid +, +sched_��m + * +__��m +� +__THROW +; + +50
+ $sched_�tschedu�r + ( +__pid_t + +__pid +, +__p�icy +, + +51 +__cڡ + +sched_��m + * +__��m +� +__THROW +; + +54
+ $sched_g�schedu�r + ( +__pid_t + +__pid +� +__THROW +; + +57
+ $sched_y�ld + (� +__THROW +; + +60
+ $sched_g�_�iܙy_max + ( +__�gܙhm +� +__THROW +; + +63
+ $sched_g�_�iܙy_m� + ( +__�gܙhm +� +__THROW +; + +66
+ $sched_�_g�_��rv� + ( +__pid_t + +__pid +, +time�ec + * +__t +� +__THROW +; + +69 #ifde� +__USE_GNU + + +71 + #CPU_SETSIZE + +__CPU_SETSIZE + + + ) + +72 + #CPU_SET +( +�u +, +�u�� +� + `__CPU_SET_S + (�u, ( +�u_�t_t +), cpu��) + + ) + +73 + #CPU_CLR +( +�u +, +�u�� +� + `__CPU_CLR_S + (�u, ( +�u_�t_t +), cpu��) + + ) + +74 + #CPU_ISSET +( +�u +, +�u�� +� + `__CPU_ISSET_S + (�u, ( +�u_�t_t +), \ + +75 +�u�� +) + + ) + +76 + #CPU_ZERO +( +�u�� +� + `__CPU_ZERO_S + ( ( +�u_�t_t +), cpu��) + + ) + +77 + #CPU_COUNT +( +�u�� +� + `__CPU_COUNT_S + ( ( +�u_�t_t +), cpu��) + + ) + +79 + #CPU_SET_S +( +�u +, +�tsize +, +�u�� +� + `__CPU_SET_S + (�u, s�size, cpu��) + + ) + +80 + #CPU_CLR_S +( +�u +, +�tsize +, +�u�� +� + `__CPU_CLR_S + (�u, s�size, cpu��) + + ) + +81 + #CPU_ISSET_S +( +�u +, +�tsize +, +�u�� +� + `__CPU_ISSET_S + (cpu, setsize, \ + +82 +�u�� +) + + ) + +83 + #CPU_ZERO_S +( +�tsize +, +�u�� +� + `__CPU_ZERO_S + (�tsize, cpu��) + + ) + +84 + #CPU_COUNT_S +( +�tsize +, +�u�� +� + `__CPU_COUNT_S + (�tsize, cpu��) + + ) + +86 + #CPU_EQUAL +( +�u��1 +, +�u��2 +) \ + +87 + `__CPU_EQUAL_S + ( ( +�u_�t_t +), +�u��1 +, +�u��2 +) + + ) + +88 + #CPU_EQUAL_S +( +�tsize +, +�u��1 +, +�u��2 +) \ + +89 + `__CPU_EQUAL_S + ( +�tsize +, +�u��1 +, +�u��2 +) + + ) + +91 + #CPU_AND +( +de��t +, +�c�t1 +, +�c�t2 +) \ + +92 + `__CPU_OP_S + ( ( +�u_�t_t +), +de��t +, +�c�t1 +, +�c�t2 +, &) + + ) + +93 + #CPU_OR +( +de��t +, +�c�t1 +, +�c�t2 +) \ + +94 + `__CPU_OP_S + ( ( +�u_�t_t +), +de��t +, +�c�t1 +, +�c�t2 +, |) + + ) + +95 + #CPU_XOR +( +de��t +, +�c�t1 +, +�c�t2 +) \ + +96 + `__CPU_OP_S + ( ( +�u_�t_t +), +de��t +, +�c�t1 +, +�c�t2 +, ^) + + ) + +97 + #CPU_AND_S +( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +) \ + +98 + `__CPU_OP_S + ( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +, &) + + ) + +99 + #CPU_OR_S +( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +) \ + +100 + `__CPU_OP_S + ( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +, |) + + ) + +101 + #CPU_XOR_S +( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +) \ + +102 + `__CPU_OP_S + ( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +, ^) + + ) + +104 + #CPU_ALLOC_SIZE +( +cou� +� + `__CPU_ALLOC_SIZE + (cou�) + + ) + +105 + #CPU_ALLOC +( +cou� +� + `__CPU_ALLOC + (cou�) + + ) + +106 + #CPU_FREE +( +�u�t +� + `__CPU_FREE + (�u�t) + + ) + +110
+ $sched_��ff��y + ( +__pid_t + +__pid +, +size_t + +__�u�tsize +, + +111 +__cڡ + +�u_�t_t + * +__�u�t +� +__THROW +; + +114
+ $sched_g�aff��y + ( +__pid_t + +__pid +, +size_t + +__�u�tsize +, + +115 +�u_�t_t + * +__�u�t +� +__THROW +; + +118 +__END_DECLS + + + @/usr/include/signal.h + +23 #i�def +_SIGNAL_H + + +25 #i�! +def�ed + +__�ed_sig_�omic_t + && !def�ed +__�ed_sig�t_t + + +26 + #_SIGNAL_H + + + ) + +29 + ~<�u�s.h +> + +31 + g__BEGIN_DECLS + + +33 + ~<b�s/sig�t.h +> + +37 #i� +def�ed + +__�ed_sig_�omic_t + || def�ed +_SIGNAL_H + + +38 #i�de� +__sig_�omic_t_def�ed + + +39 + #__sig_�omic_t_def�ed + + + ) + +40 +__BEGIN_NAMESPACE_STD + + +41 +__sig_�omic_t + + tsig_�omic_t +; + +42 + g__END_NAMESPACE_STD + + +44 #unde� +__�ed_sig_�omic_t + + +47 #i� +def�ed + +__�ed_sig�t_t + || (def�ed +_SIGNAL_H + && def�ed +__USE_POSIX +) + +48 #i�de� +__sig�t_t_def�ed + + +49 + #__sig�t_t_def�ed + + + ) + +50 +__sig�t_t + + tsig�t_t +; + +52 #unde� +__�ed_sig�t_t + + +55 #ifde� +_SIGNAL_H + + +57 + ~<b�s/ty�s.h +> + +58 + ~<b�s/signum.h +> + +60 #i� +def�ed + +__USE_XOPEN + || def�ed +__USE_XOPEN2K + + +61 #i�de� +__pid_t_def�ed + + +62 +__pid_t + + tpid_t +; + +63 + #__pid_t_def�ed + + + ) + +65 #ifde� +__USE_XOPEN + + +67 #i�de� +__uid_t_def�ed + + +68 +__uid_t + + tuid_t +; + +69 + #__uid_t_def�ed + + + ) + +73 #ifde� +__USE_POSIX199309 + + +75 + #__�ed_time�ec + + + ) + +76 + ~<time.h +> + +79 + ~<b�s/sig�fo.h +> + +84 (* + t__sigh�d�r_t +) (); + +89
+__sigh�d�r_t + + $__sysv_sig�l + ( +__sig +, +__sigh�d�r_t + +__h�d�r +) + +90 +__THROW +; + +91 #ifde� +__USE_GNU + + +92
+__sigh�d�r_t + + $sysv_sig�l + ( +__sig +, +__sigh�d�r_t + +__h�d�r +) + +93 +__THROW +; + +99 +__BEGIN_NAMESPACE_STD + + +100 #ifde� +__USE_BSD + + +101
+__sigh�d�r_t + + $sig�l + ( +__sig +, +__sigh�d�r_t + +__h�d�r +) + +102 +__THROW +; + +105 #ifde� +__REDIRECT_NTH + + +106
+__sigh�d�r_t + + `__REDIRECT_NTH + ( +sig�l +, + +107 ( +__sig +, +__sigh�d�r_t + +__h�d�r +), + +108 +__sysv_sig�l +); + +110 + #sig�l + +__sysv_sig�l + + + ) + +113 +__END_NAMESPACE_STD + + +115 #ifde� +__USE_XOPEN + + +118
+__sigh�d�r_t + + $bsd_sig�l + ( +__sig +, +__sigh�d�r_t + +__h�d�r +) + +119 +__THROW +; + +125 #ifde� +__USE_POSIX + + +126
+ $k�l + ( +__pid_t + +__pid +, +__sig +� +__THROW +; + +129 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +133
+ $k��g + ( +__pid_t + +__pg� +, +__sig +� +__THROW +; + +136 +__BEGIN_NAMESPACE_STD + + +138
+ $�i� + ( +__sig +� +__THROW +; + +139 +__END_NAMESPACE_STD + + +141 #ifde� +__USE_SVID + + +143
+__sigh�d�r_t + + $ssig�l + ( +__sig +, +__sigh�d�r_t + +__h�d�r +) + +144 +__THROW +; + +145
+ $gsig�l + ( +__sig +� +__THROW +; + +148 #i� +def�ed + +__USE_MISC + || def�ed +__USE_XOPEN2K + + +150
+ `psig�l + ( +__sig +, +__cڡ + * +__s +); + +153 #ifde� +__USE_XOPEN2K + + +155
+ `psig�fo + ( +__cڡ + +sig�fo_t + * +__p�fo +, __cڡ * +__s +); + +168
+ `__sig�u� + ( +__sig_�_mask +, +__is_sig +); + +170 #ifde� +__FAVOR_BSD + + +173
+ $sig�u� + ( +__mask +� +__THROW + +__��ibu�_d����d__ +; + +175 #ifde� +__USE_XOPEN + + +176 #ifde� +__GNUC__ + + +177
+ $sig�u� + ( +__sig +� + `__asm__ + ("__xpg_sigpause"); + +180 + #sig�u� +( +sig +� + `__sig�u� + ((sig), 1) + + ) + +186 #ifde� +__USE_BSD + + +193 + #sigmask +( +sig +� + `__sigmask +(sig) + + ) + +196
+ $sigblock + ( +__mask +� +__THROW + +__��ibu�_d����d__ +; + +199
+ $sig�tmask + ( +__mask +� +__THROW + +__��ibu�_d����d__ +; + +202
+ $sigg�mask + (� +__THROW + +__��ibu�_d����d__ +; + +206 #ifde� +__USE_MISC + + +207 + #NSIG + +_NSIG + + + ) + +210 #ifde� +__USE_GNU + + +211 +__sigh�d�r_t + + tsigh�d�r_t +; + +215 #ifde� +__USE_BSD + + +216 +__sigh�d�r_t + + tsig_t +; + +219 #ifde� +__USE_POSIX + + +222
+ $sigem�y�t + ( +sig�t_t + * +__�t +� +__THROW + + `__n�nu� + ((1)); + +225
+ $sigf�l�t + ( +sig�t_t + * +__�t +� +__THROW + + `__n�nu� + ((1)); + +228
+ $sigadd�t + ( +sig�t_t + * +__�t +, +__signo +� +__THROW + + `__n�nu� + ((1)); + +231
+ $sigd��t + ( +sig�t_t + * +__�t +, +__signo +� +__THROW + + `__n�nu� + ((1)); + +234
+ $sigismemb� + ( +__cڡ + +sig�t_t + * +__�t +, +__signo +) + +235 +__THROW + + `__n�nu� + ((1)); + +237 #ifde� +__USE_GNU + + +239
+ $sigi�m�y�t + ( +__cڡ + +sig�t_t + * +__�t +� +__THROW + + `__n�nu� + ((1)); + +242
+ $sig�d�t + ( +sig�t_t + * +__�t +, +__cڡ + sig�t_�* +__�� +, + +243 +__cڡ + +sig�t_t + * +__right +� +__THROW + + `__n�nu� + ((1, 2, 3)); + +246
+ $sigܣt + ( +sig�t_t + * +__�t +, +__cڡ + sig�t_�* +__�� +, + +247 +__cڡ + +sig�t_t + * +__right +� +__THROW + + `__n�nu� + ((1, 2, 3)); + +252 + ~<b�s/siga�i�.h +> + +255
+ $sig�ocmask + ( +__how +, +__cڡ + +sig�t_t + * +__��ri� + +__�t +, + +256 +sig�t_t + * +__��ri� + +__o�t +� +__THROW +; + +263
+ $sigsu��d + ( +__cڡ + +sig�t_t + * +__�t +� + `__n�nu� + ((1)); + +266
+ $siga�i� + ( +__sig +, +__cڡ + +siga�i� + * +__��ri� + +__a� +, + +267 +siga�i� + * +__��ri� + +__�� +� +__THROW +; + +270
+ $sig�nd�g + ( +sig�t_t + * +__�t +� +__THROW + + `__n�nu� + ((1)); + +277
+ $sigwa� + ( +__cڡ + +sig�t_t + * +__��ri� + +__�t +, *__��ri� +__sig +) + +278 + `__n�nu� + ((1, 2)); + +280 #ifde� +__USE_POSIX199309 + + +285
+ $sigwa��fo + ( +__cڡ + +sig�t_t + * +__��ri� + +__�t +, + +286 +sig�fo_t + * +__��ri� + +__�fo +� + `__n�nu� + ((1)); + +293
+ $sigtimedwa� + ( +__cڡ + +sig�t_t + * +__��ri� + +__�t +, + +294 +sig�fo_t + * +__��ri� + +__�fo +, + +295 +__cڡ + +time�ec + * +__��ri� + +__timeout +) + +296 + `__n�nu� + ((1)); + +300
+ $sigqueue + ( +__pid_t + +__pid +, +__sig +, +__cڡ + +sigv� + +__v� +) + +301 +__THROW +; + +306 #ifde� +__USE_BSD + + +310
+__cڡ + *__cڡ +_sys_sigli� +[ +_NSIG +]; + +311
+__cڡ + *__cڡ +sys_sigli� +[ +_NSIG +]; + +314 + ssigvec + + +316 +__sigh�d�r_t + +sv_h�d�r +; + +317 +sv_mask +; + +319 +sv_�ags +; + +320 + #sv_ڡack + +sv_�ags + + + ) + +324 + #SV_ONSTACK + (1 << 0) + + ) + +325 + #SV_INTERRUPT + (1 << 1) + + ) + +326 + #SV_RESETHAND + (1 << 2) + + ) + +334
+ $sigvec + ( +__sig +, +__cڡ + +sigvec + * +__vec +, + +335 +sigvec + * +__ovec +� +__THROW +; + +339 + ~<b�s/sigcڋxt.h +> + +342
+ $sig�tu� + ( +sigcڋxt + * +__s� +� +__THROW +; + +347 #i� +def�ed + +__USE_BSD + || def�ed +__USE_XOPEN_EXTENDED + + +348 + #__�ed_size_t + + + ) + +349 + ~<�ddef.h +> + +354
+ $sig���u� + ( +__sig +, +__���u� +� +__THROW +; + +356 + ~<b�s/sig�ack.h +> + +357 #ifde� +__USE_XOPEN + + +359 + ~<sys/ucڋxt.h +> + +365
+ $sig�ack + ( +sig�ack + * +__ss +, sig�ack * +__oss +) + +366 +__THROW + +__��ibu�_d����d__ +; + +370
+ $sig�t�ack + ( +__cڡ + +sig�t�ack + * +__��ri� + +__ss +, + +371 +sig�t�ack + * +__��ri� + +__oss +� +__THROW +; + +375 #ifde� +__USE_XOPEN_EXTENDED + + +379
+ $sigh�d + ( +__sig +� +__THROW +; + +382
+ $sig�l� + ( +__sig +� +__THROW +; + +385
+ $sigign�e + ( +__sig +� +__THROW +; + +388
+__sigh�d�r_t + + $sig�t + ( +__sig +, +__sigh�d�r_t + +__di� +� +__THROW +; + +391 #i� +def�ed + +__USE_POSIX199506 + || def�ed +__USE_UNIX98 + + +394 + ~<b�s/�h�adty�s.h +> + +395 + ~<b�s/sigth�ad.h +> + +402
+ $__libc_cu��t_sig�m� + (� +__THROW +; + +404
+ $__libc_cu��t_sig�max + (� +__THROW +; + +408 +__END_DECLS + + + @/usr/include/bits/sched.h + +22 #i�de� +__�ed_sched��m + + +24 #i�de� +_SCHED_H + + +30 + #SCHED_OTHER + 0 + + ) + +31 + #SCHED_FIFO + 1 + + ) + +32 + #SCHED_RR + 2 + + ) + +33 #ifde� +__USE_GNU + + +34 + #SCHED_BATCH + 3 + + ) + +37 #ifde� +__USE_MISC + + +39 + #CSIGNAL + 0x000000f� + + ) + +40 + #CLONE_VM + 0x00000100 + + ) + +41 + #CLONE_FS + 0x00000200 + + ) + +42 + #CLONE_FILES + 0x00000400 + + ) + +43 + #CLONE_SIGHAND + 0x00000800 + + ) + +44 + #CLONE_PTRACE + 0x00002000 + + ) + +45 + #CLONE_VFORK + 0x00004000 + + ) + +47 + #CLONE_PARENT + 0x00008000 + + ) + +49 + #CLONE_THREAD + 0x00010000 + + ) + +50 + #CLONE_NEWNS + 0x00020000 + + ) + +51 + #CLONE_SYSVSEM + 0x00040000 + + ) + +52 + #CLONE_SETTLS + 0x00080000 + + ) + +53 + #CLONE_PARENT_SETTID + 0x00100000 + + ) + +55 + #CLONE_CHILD_CLEARTID + 0x00200000 + + ) + +57 + #CLONE_DETACHED + 0x00400000 + + ) + +58 + #CLONE_UNTRACED + 0x00800000 + + ) + +60 + #CLONE_CHILD_SETTID + 0x01000000 + + ) + +62 + #CLONE_NEWUTS + 0x04000000 + + ) + +63 + #CLONE_NEWIPC + 0x08000000 + + ) + +64 + #CLONE_NEWUSER + 0x10000000 + + ) + +65 + #CLONE_NEWPID + 0x20000000 + + ) + +66 + #CLONE_NEWNET + 0x40000000 + + ) + +67 + #CLONE_IO + 0x80000000 + + ) + +71 + ssched_��m + + +73 + m__sched_�iܙy +; + +76 + g__BEGIN_DECLS + + +78 #ifde� +__USE_MISC + + +80
+��e + ((* +__� +�(* +__�g +), * +__ch�d_�ack +, + +81 +__�ags +, * +__�g +, ...� +__THROW +; + +84
+ $unsh�e + ( +__�ags +� +__THROW +; + +87
+ $sched_g��u + (� +__THROW +; + +90 +__END_DECLS + + +94 #i�! +def�ed + +__def�ed_sched��m + \ + +95 && ( +def�ed + +__�ed_sched��m + || def�ed +_SCHED_H +) + +96 + #__def�ed_sched��m + 1 + + ) + +98 + s__sched_��m + + +100 +__sched_�iܙy +; + +102 #unde� +__�ed_sched��m + + +106 #i� +def�ed + +_SCHED_H + && !def�ed +__�u_�t_t_def�ed + + +107 + #__�u_�t_t_def�ed + + + ) + +109 + #__CPU_SETSIZE + 1024 + + ) + +110 + #__NCPUBITS + (8 * ( +__�u_mask +)) + + ) + +113 + t__�u_mask +; + +116 + #__CPUELT +( +�u +�((�u�/ +__NCPUBITS +) + + ) + +117 + #__CPUMASK +( +�u +�(( +__�u_mask +�1 << ((�u�% +__NCPUBITS +)) + + ) + +122 +__�u_mask + +__b�s +[ +__CPU_SETSIZE + / +__NCPUBITS +]; + +123 } + t�u_�t_t +; + +126 #i� + `__GNUC_PREREQ + (2, 91) + +127 + #__CPU_ZERO_S +( +�tsize +, +�u�� +) \ + +128 d� + `__bu�t�_mem�t + ( +�u�� +, '\0', +�tsize +); 0) + + ) + +130 + #__CPU_ZERO_S +( +�tsize +, +�u�� +) \ + +132 +size_t + +__i +; \ + +133 +size_t + +__imax + = ( +�tsize +�/ ( +__�u_mask +); \ + +134 +__�u_mask + * +__b�s + = ( +�u�� +)->__bits; \ + +135 +__i + = 0; __�< +__imax +; ++__i) \ + +136 +__b�s +[ +__i +] = 0; \ + +137 + } +} 0) + + ) + +139 + #__CPU_SET_S +( +�u +, +�tsize +, +�u�� +) \ + +140 ( +__ex�nsi�__ + \ + +141 ({ +size_t + +__�u + = ( +�u +); \ + +142 +__�u + < 8 * ( +�tsize +) \ + +143 ? ((( +__�u_mask + *�(( +�u�� +)-> +__b�s +))[ + `__CPUELT + ( +__�u +)] \ + +144 |� + `__CPUMASK + ( +__�u +)) \ + +145 : 0; })) + + ) + +146 + #__CPU_CLR_S +( +�u +, +�tsize +, +�u�� +) \ + +147 ( +__ex�nsi�__ + \ + +148 ({ +size_t + +__�u + = ( +�u +); \ + +149 +__�u + < 8 * ( +�tsize +) \ + +150 ? ((( +__�u_mask + *�(( +�u�� +)-> +__b�s +))[ + `__CPUELT + ( +__�u +)] \ + +151 &�~ + `__CPUMASK + ( +__�u +)) \ + +152 : 0; })) + + ) + +153 + #__CPU_ISSET_S +( +�u +, +�tsize +, +�u�� +) \ + +154 ( +__ex�nsi�__ + \ + +155 ({ +size_t + +__�u + = ( +�u +); \ + +156 +__�u + < 8 * ( +�tsize +) \ + +157 ? (((( +__cڡ + +__�u_mask + *�(( +�u�� +)-> +__b�s +))[ + `__CPUELT + ( +__�u +)] \ + +158 & + `__CPUMASK + ( +__�u +))) != 0 \ + +159 : 0; })) + + ) + +161 + #__CPU_COUNT_S +( +�tsize +, +�u�� +) \ + +162 + `__sched_�ucou� + ( +�tsize +, +�u�� +) + + ) + +164 #i� +__GNUC_PREREQ + (2, 91) + +165 + #__CPU_EQUAL_S +( +�tsize +, +�u��1 +, +�u��2 +) \ + +166 ( + `__bu�t�_memcmp + ( +�u��1 +, +�u��2 +, +�tsize +�=�0) + + ) + +168 + #__CPU_EQUAL_S +( +�tsize +, +�u��1 +, +�u��2 +) \ + +169 ( +__ex�nsi�__ + \ + +170 ({ +__cڡ + +__�u_mask + * +__�r1 + = ( +�u��1 +)-> +__b�s +; \ + +171 +__cڡ + +__�u_mask + * +__�r2 + = ( +�u��2 +)-> +__b�s +; \ + +172 +size_t + +__imax + = ( +�tsize +�/ ( +__�u_mask +); \ + +173 +size_t + +__i +; \ + +174 +__i + = 0; __�< +__imax +; ++__i) \ + +175 i�( +__b�s +[ +__i +] != __bits[__i]) \ + +177 +__i + =� +__imax +; })) + + ) + +180 + #__CPU_OP_S +( +�tsize +, +de��t +, +�c�t1 +, +�c�t2 +, +� +) \ + +181 ( +__ex�nsi�__ + \ + +182 ({ +�u_�t_t + * +__de� + = ( +de��t +); \ + +183 +__cڡ + +__�u_mask + * +__�r1 + = ( +�c�t1 +)-> +__b�s +; \ + +184 +__cڡ + +__�u_mask + * +__�r2 + = ( +�c�t2 +)-> +__b�s +; \ + +185 +size_t + +__imax + = ( +�tsize +�/ ( +__�u_mask +); \ + +186 +size_t + +__i +; \ + +187 +__i + = 0; __�< +__imax +; ++__i) \ + +188 (( +__�u_mask + *� +__de� +-> +__b�s +)[ +__i +] = +__�r1 +[__i] +� + +__�r2 +[__i]; \ + +189 +__de� +; })) + + ) + +191 + #__CPU_ALLOC_SIZE +( +cou� +) \ + +192 (((( +cou� +�+ +__NCPUBITS + - 1�/ __NCPUBITS�* ( +__�u_mask +)) + + ) + +193 + #__CPU_ALLOC +( +cou� +� + `__sched_�u�loc + (cou�) + + ) + +194 + #__CPU_FREE +( +�u�t +� + `__sched_�u� + (�u�t) + + ) + +196 +__BEGIN_DECLS + + +198
+ $__sched_�ucou� + ( +size_t + +__�tsize +, cڡ +�u_�t_t + * +__�� +) + +199 +__THROW +; + +200
+�u_�t_t + * + $__sched_�u�loc + ( +size_t + +__cou� +� +__THROW + +__wur +; + +201
+ $__sched_�u� + ( +�u_�t_t + * +__�t +� +__THROW +; + +203 +__END_DECLS + + + @/usr/include/bits/sigaction.h + +20 #i�de� +_SIGNAL_H + + +25 + ssiga�i� + + +28 #ifde� +__USE_POSIX199309 + + +32 +__sigh�d�r_t + + m�_h�d�r +; + +34 (* + m�_siga�i� +�(, + msig�fo_t + *, *); + +36 + m__siga�i�_h�d�r +; + +37 + #�_h�d�r + +__siga�i�_h�d�r +. +�_h�d�r + + + ) + +38 + #�_siga�i� + +__siga�i�_h�d�r +. +�_siga�i� + + + ) + +40 +__sigh�d�r_t + + m�_h�d�r +; + +44 +__sig�t_t + + m�_mask +; + +47 + m�_�ags +; + +50 (* + m�_��ܔ +) (); + +54 + #SA_NOCLDSTOP + 1 + + ) + +55 + #SA_NOCLDWAIT + 2 + + ) + +56 + #SA_SIGINFO + 4 + + ) + +58 #i� +def�ed + +__USE_UNIX98 + || def�ed +__USE_MISC + + +59 + #SA_ONSTACK + 0x08000000 + + ) + +60 + #SA_RESTART + 0x10000000 + + ) + +61 + #SA_NODEFER + 0x40000000 + + ) + +63 + #SA_RESETHAND + 0x80000000 + + ) + +65 #ifde� +__USE_MISC + + +66 + #SA_INTERRUPT + 0x20000000 + + ) + +69 + #SA_NOMASK + +SA_NODEFER + + + ) + +70 + #SA_ONESHOT + +SA_RESETHAND + + + ) + +71 + #SA_STACK + +SA_ONSTACK + + + ) + +75 + #SIG_BLOCK + 0 + + ) + +76 + #SIG_UNBLOCK + 1 + + ) + +77 + #SIG_SETMASK + 2 + + ) + + @/usr/include/bits/sigcontext.h + +19 #i�de� +_BITS_SIGCONTEXT_H + + +20 + #_BITS_SIGCONTEXT_H + 1 + + ) + +22 #i�! +def�ed + +_SIGNAL_H + && !def�ed +_SYS_UCONTEXT_H + + +26 + ~<b�s/w�dsize.h +> + +28 + s_�g + + +30 + msignifi�nd +[4]; + +31 + mexpڒt +; + +34 + s_�x�g + + +36 + msignifi�nd +[4]; + +37 + mexpڒt +; + +38 + m�dd�g +[3]; + +41 + s_xmm�g + + +43 +__u�t32_t + + m�em�t +[4]; + +48 #i� +__WORDSIZE + == 32 + +50 + s_塩e + + +53 +__u�t32_t + + mcw +; + +54 +__u�t32_t + + msw +; + +55 +__u�t32_t + + m�g +; + +56 +__u�t32_t + + m�off +; + +57 +__u�t32_t + + mcs�l +; + +58 +__u�t32_t + + md�aoff +; + +59 +__u�t32_t + + md�a�l +; + +60 +_�g + + m_� +[8]; + +61 + m��us +; + +62 + mmagic +; + +65 +__u�t32_t + + m_fx�_�v +[6]; + +66 +__u�t32_t + + mmxc� +; + +67 +__u�t32_t + + m��rved +; + +68 +_�x�g + + m_fx�_� +[8]; + +69 +_xmm�g + + m_xmm +[8]; + +70 +__u�t32_t + + m�dd�g +[56]; + +73 #i�de� +sigcڋxt_�ru� + + +78 + #sigcڋxt_�ru� + +sigcڋxt + + + ) + +81 + ssigcڋxt + + +83 + mgs +, + m__gsh +; + +84 + mfs +, + m__fsh +; + +85 + mes +, + m__esh +; + +86 + mds +, + m__dsh +; + +87 + medi +; + +88 + mesi +; + +89 + mebp +; + +90 + me� +; + +91 + mebx +; + +92 + medx +; + +93 + mecx +; + +94 + m�x +; + +95 + m��no +; + +96 + m�r +; + +97 + me� +; + +98 + mcs +, + m__csh +; + +99 + me�ags +; + +100 + me�_�_sig�l +; + +101 + mss +, + m__ssh +; + +102 +_塩e + * + m塩e +; + +103 + m�dmask +; + +104 + m�2 +; + +109 + s_塩e + + +112 +__u�t16_t + + mcwd +; + +113 +__u�t16_t + + mswd +; + +114 +__u�t16_t + + m�w +; + +115 +__u�t16_t + + mf� +; + +116 +__u�t64_t + + mr� +; + +117 +__u�t64_t + + mrdp +; + +118 +__u�t32_t + + mmxc� +; + +119 +__u�t32_t + + mmx�_mask +; + +120 +_�x�g + + m_� +[8]; + +121 +_xmm�g + + m_xmm +[16]; + +122 +__u�t32_t + + m�dd�g +[24]; + +125 + ssigcڋxt + + +127 + mr8 +; + +128 + mr9 +; + +129 + mr10 +; + +130 + mr11 +; + +131 + mr12 +; + +132 + mr13 +; + +133 + mr14 +; + +134 + mr15 +; + +135 + mrdi +; + +136 + mrsi +; + +137 + mrbp +; + +138 + mrbx +; + +139 + mrdx +; + +140 + m�x +; + +141 + mrcx +; + +142 + mr� +; + +143 + mr� +; + +144 + me�ags +; + +145 + mcs +; + +146 + mgs +; + +147 + mfs +; + +148 + m__�d0 +; + +149 + m�r +; + +150 + m��no +; + +151 + m�dmask +; + +152 + m�2 +; + +153 +_塩e + * + m塩e +; + +154 + m__��rved1 + [8]; + + @/usr/include/bits/siginfo.h + +20 #i�! +def�ed + +_SIGNAL_H + && !def�ed +__�ed_sig�fo_t + \ + +21 && ! +def�ed + + g__�ed_sigev�t_t + + +25 + ~<b�s/w�dsize.h +> + +27 #i�(! +def�ed + +__have_sigv�_t + \ + +28 && ( +def�ed + + g_SIGNAL_H + || def�ed + g__�ed_sig�fo_t + \ + +29 || +def�ed + + g__�ed_sigev�t_t +)) + +30 + #__have_sigv�_t + 1 + + ) + +33 + usigv� + + +35 + msiv�_�t +; + +36 * + msiv�_�r +; + +37 } + tsigv�_t +; + +40 #i�(! +def�ed + +__have_sig�fo_t + \ + +41 && ( +def�ed + + g_SIGNAL_H + || def�ed + g__�ed_sig�fo_t +)) + +42 + #__have_sig�fo_t + 1 + + ) + +44 + #__SI_MAX_SIZE + 128 + + ) + +45 #i� +__WORDSIZE + == 64 + +46 + #__SI_PAD_SIZE + (( +__SI_MAX_SIZE + / ()�- 4) + + ) + +48 + #__SI_PAD_SIZE + (( +__SI_MAX_SIZE + / ()�- 3) + + ) + +51 + ssig�fo + + +53 + msi_signo +; + +54 + msi_��o +; + +56 + msi_code +; + +60 + m_�d +[ +__SI_PAD_SIZE +]; + +65 +__pid_t + + msi_pid +; + +66 +__uid_t + + msi_uid +; + +67 } + m_k�l +; + +72 + msi_tid +; + +73 + msi_ov�run +; + +74 +sigv�_t + + msi_sigv� +; + +75 } + m_tim� +; + +80 +__pid_t + + msi_pid +; + +81 +__uid_t + + msi_uid +; + +82 +sigv�_t + + msi_sigv� +; + +83 } + m_� +; + +88 +__pid_t + + msi_pid +; + +89 +__uid_t + + msi_uid +; + +90 + msi_��us +; + +91 +__�ock_t + + msi_utime +; + +92 +__�ock_t + + msi_�ime +; + +93 } + m_sigchld +; + +98 * + msi_addr +; + +99 } + m_sig�u� +; + +104 + msi_b�d +; + +105 + msi_fd +; + +106 } + m_sigp�l +; + +107 } + m_sif�lds +; + +108 } + tsig�fo_t +; + +112 + #si_pid + +_sif�lds +. +_k�l +. +si_pid + + + ) + +113 + #si_uid + +_sif�lds +. +_k�l +. +si_uid + + + ) + +114 + #si_tim�id + +_sif�lds +. +_tim� +. +si_tid + + + ) + +115 + #si_ov�run + +_sif�lds +. +_tim� +. +si_ov�run + + + ) + +116 + #si_��us + +_sif�lds +. +_sigchld +. +si_��us + + + ) + +117 + #si_utime + +_sif�lds +. +_sigchld +. +si_utime + + + ) + +118 + #si_�ime + +_sif�lds +. +_sigchld +. +si_�ime + + + ) + +119 + #si_v�ue + +_sif�lds +. +_� +. +si_sigv� + + + ) + +120 + #si_�t + +_sif�lds +. +_� +. +si_sigv� +. +siv�_�t + + + ) + +121 + #si_�r + +_sif�lds +. +_� +. +si_sigv� +. +siv�_�r + + + ) + +122 + #si_addr + +_sif�lds +. +_sig�u� +. +si_addr + + + ) + +123 + #si_b�d + +_sif�lds +. +_sigp�l +. +si_b�d + + + ) + +124 + #si_fd + +_sif�lds +. +_sigp�l +. +si_fd + + + ) + +131 + mSI_ASYNCNL + = -60, + +132 + #SI_ASYNCNL + +SI_ASYNCNL + + + ) + +133 + mSI_TKILL + = -6, + +134 + #SI_TKILL + +SI_TKILL + + + ) + +135 + mSI_SIGIO +, + +136 + #SI_SIGIO + +SI_SIGIO + + + ) + +137 + mSI_ASYNCIO +, + +138 + #SI_ASYNCIO + +SI_ASYNCIO + + + ) + +139 + mSI_MESGQ +, + +140 + #SI_MESGQ + +SI_MESGQ + + + ) + +141 + mSI_TIMER +, + +142 + #SI_TIMER + +SI_TIMER + + + ) + +143 + mSI_QUEUE +, + +144 + #SI_QUEUE + +SI_QUEUE + + + ) + +145 + mSI_USER +, + +146 + #SI_USER + +SI_USER + + + ) + +147 + mSI_KERNEL + = 0x80 + +148 + #SI_KERNEL + +SI_KERNEL + + + ) + +155 + mILL_ILLOPC + = 1, + +156 + #ILL_ILLOPC + +ILL_ILLOPC + + + ) + +157 + mILL_ILLOPN +, + +158 + #ILL_ILLOPN + +ILL_ILLOPN + + + ) + +159 + mILL_ILLADR +, + +160 + #ILL_ILLADR + +ILL_ILLADR + + + ) + +161 + mILL_ILLTRP +, + +162 + #ILL_ILLTRP + +ILL_ILLTRP + + + ) + +163 + mILL_PRVOPC +, + +164 + #ILL_PRVOPC + +ILL_PRVOPC + + + ) + +165 + mILL_PRVREG +, + +166 + #ILL_PRVREG + +ILL_PRVREG + + + ) + +167 + mILL_COPROC +, + +168 + #ILL_COPROC + +ILL_COPROC + + + ) + +169 + mILL_BADSTK + + +170 + #ILL_BADSTK + +ILL_BADSTK + + + ) + +176 + mFPE_INTDIV + = 1, + +177 + #FPE_INTDIV + +FPE_INTDIV + + + ) + +178 + mFPE_INTOVF +, + +179 + #FPE_INTOVF + +FPE_INTOVF + + + ) + +180 + mFPE_FLTDIV +, + +181 + #FPE_FLTDIV + +FPE_FLTDIV + + + ) + +182 + mFPE_FLTOVF +, + +183 + #FPE_FLTOVF + +FPE_FLTOVF + + + ) + +184 + mFPE_FLTUND +, + +185 + #FPE_FLTUND + +FPE_FLTUND + + + ) + +186 + mFPE_FLTRES +, + +187 + #FPE_FLTRES + +FPE_FLTRES + + + ) + +188 + mFPE_FLTINV +, + +189 + #FPE_FLTINV + +FPE_FLTINV + + + ) + +190 + mFPE_FLTSUB + + +191 + #FPE_FLTSUB + +FPE_FLTSUB + + + ) + +197 + mSEGV_MAPERR + = 1, + +198 + #SEGV_MAPERR + +SEGV_MAPERR + + + ) + +199 + mSEGV_ACCERR + + +200 + #SEGV_ACCERR + +SEGV_ACCERR + + + ) + +206 + mBUS_ADRALN + = 1, + +207 + #BUS_ADRALN + +BUS_ADRALN + + + ) + +208 + mBUS_ADRERR +, + +209 + #BUS_ADRERR + +BUS_ADRERR + + + ) + +210 + mBUS_OBJERR + + +211 + #BUS_OBJERR + +BUS_OBJERR + + + ) + +217 + mTRAP_BRKPT + = 1, + +218 + #TRAP_BRKPT + +TRAP_BRKPT + + + ) + +219 + mTRAP_TRACE + + +220 + #TRAP_TRACE + +TRAP_TRACE + + + ) + +226 + mCLD_EXITED + = 1, + +227 + #CLD_EXITED + +CLD_EXITED + + + ) + +228 + mCLD_KILLED +, + +229 + #CLD_KILLED + +CLD_KILLED + + + ) + +230 + mCLD_DUMPED +, + +231 + #CLD_DUMPED + +CLD_DUMPED + + + ) + +232 + mCLD_TRAPPED +, + +233 + #CLD_TRAPPED + +CLD_TRAPPED + + + ) + +234 + mCLD_STOPPED +, + +235 + #CLD_STOPPED + +CLD_STOPPED + + + ) + +236 + mCLD_CONTINUED + + +237 + #CLD_CONTINUED + +CLD_CONTINUED + + + ) + +243 + mPOLL_IN + = 1, + +244 + #POLL_IN + +POLL_IN + + + ) + +245 + mPOLL_OUT +, + +246 + #POLL_OUT + +POLL_OUT + + + ) + +247 + mPOLL_MSG +, + +248 + #POLL_MSG + +POLL_MSG + + + ) + +249 + mPOLL_ERR +, + +250 + #POLL_ERR + +POLL_ERR + + + ) + +251 + mPOLL_PRI +, + +252 + #POLL_PRI + +POLL_PRI + + + ) + +253 + mPOLL_HUP + + +254 + #POLL_HUP + +POLL_HUP + + + ) + +257 #unde� +__�ed_sig�fo_t + + +261 #i�( +def�ed + +_SIGNAL_H + || def�ed +__�ed_sigev�t_t +) \ + +262 && ! +def�ed + + g__have_sigev�t_t + + +263 + #__have_sigev�t_t + 1 + + ) + +266 + #__SIGEV_MAX_SIZE + 64 + + ) + +267 #i� +__WORDSIZE + == 64 + +268 + #__SIGEV_PAD_SIZE + (( +__SIGEV_MAX_SIZE + / ()�- 4) + + ) + +270 + #__SIGEV_PAD_SIZE + (( +__SIGEV_MAX_SIZE + / ()�- 3) + + ) + +273 + ssigev�t + + +275 +sigv�_t + + msigev_v�ue +; + +276 + msigev_signo +; + +277 + msigev_n�ify +; + +281 + m_�d +[ +__SIGEV_PAD_SIZE +]; + +285 +__pid_t + + m_tid +; + +289 (* + m_fun�i� +�( + msigv�_t +); + +290 * + m_��ibu� +; + +291 } + m_sigev_th�ad +; + +292 } + m_sigev_un +; + +293 } + tsigev�t_t +; + +296 + #sigev_n�ify_fun�i� + +_sigev_un +. +_sigev_th�ad +. +_fun�i� + + + ) + +297 + #sigev_n�ify_��ibu�s + +_sigev_un +. +_sigev_th�ad +. +_��ibu� + + + ) + +302 + mSIGEV_SIGNAL + = 0, + +303 + #SIGEV_SIGNAL + +SIGEV_SIGNAL + + + ) + +304 + mSIGEV_NONE +, + +305 + #SIGEV_NONE + +SIGEV_NONE + + + ) + +306 + mSIGEV_THREAD +, + +307 + #SIGEV_THREAD + +SIGEV_THREAD + + + ) + +309 + mSIGEV_THREAD_ID + = 4 + +310 + #SIGEV_THREAD_ID + +SIGEV_THREAD_ID + + + ) + + @/usr/include/bits/signum.h + +20 #ifdef +_SIGNAL_H + + +23 + #SIG_ERR + (( +__sigh�d�r_t +�-1� + + ) + +24 + #SIG_DFL + (( +__sigh�d�r_t +�0� + + ) + +25 + #SIG_IGN + (( +__sigh�d�r_t +�1� + + ) + +27 #ifde� +__USE_UNIX98 + + +28 + #SIG_HOLD + (( +__sigh�d�r_t +�2� + + ) + +33 + #SIGHUP + 1 + + ) + +34 + #SIGINT + 2 + + ) + +35 + #SIGQUIT + 3 + + ) + +36 + #SIGILL + 4 + + ) + +37 + #SIGTRAP + 5 + + ) + +38 + #SIGABRT + 6 + + ) + +39 + #SIGIOT + 6 + + ) + +40 + #SIGBUS + 7 + + ) + +41 + #SIGFPE + 8 + + ) + +42 + #SIGKILL + 9 + + ) + +43 + #SIGUSR1 + 10 + + ) + +44 + #SIGSEGV + 11 + + ) + +45 + #SIGUSR2 + 12 + + ) + +46 + #SIGPIPE + 13 + + ) + +47 + #SIGALRM + 14 + + ) + +48 + #SIGTERM + 15 + + ) + +49 + #SIGSTKFLT + 16 + + ) + +50 + #SIGCLD + +SIGCHLD + + + ) + +51 + #SIGCHLD + 17 + + ) + +52 + #SIGCONT + 18 + + ) + +53 + #SIGSTOP + 19 + + ) + +54 + #SIGTSTP + 20 + + ) + +55 + #SIGTTIN + 21 + + ) + +56 + #SIGTTOU + 22 + + ) + +57 + #SIGURG + 23 + + ) + +58 + #SIGXCPU + 24 + + ) + +59 + #SIGXFSZ + 25 + + ) + +60 + #SIGVTALRM + 26 + + ) + +61 + #SIGPROF + 27 + + ) + +62 + #SIGWINCH + 28 + + ) + +63 + #SIGPOLL + +SIGIO + + + ) + +64 + #SIGIO + 29 + + ) + +65 + #SIGPWR + 30 + + ) + +66 + #SIGSYS + 31 + + ) + +67 + #SIGUNUSED + 31 + + ) + +69 + #_NSIG + 65 + + ) + +72 + #SIGRTMIN + ( + `__libc_cu��t_sig�m� + ()) + + ) + +73 + #SIGRTMAX + ( + `__libc_cu��t_sig�max + ()) + + ) + +77 + #__SIGRTMIN + 32 + + ) + +78 + #__SIGRTMAX + ( +_NSIG + - 1) + + ) + + @/usr/include/bits/sigstack.h + +20 #i�de� +_SIGNAL_H + + +26 + ssig�ack + + +28 * + mss_� +; + +29 + mss_ڡack +; + +36 + mSS_ONSTACK + = 1, + +37 + #SS_ONSTACK + +SS_ONSTACK + + + ) + +38 + mSS_DISABLE + + +39 + #SS_DISABLE + +SS_DISABLE + + + ) + +43 + #MINSIGSTKSZ + 2048 + + ) + +46 + #SIGSTKSZ + 8192 + + ) + +50 + ssig�t�ack + + +52 * + mss_� +; + +53 + mss_�ags +; + +54 +size_t + + mss_size +; + +55 } + t�ack_t +; + + @/usr/include/bits/sigthread.h + +20 #i�de� +_BITS_SIGTHREAD_H + + +21 + #_BITS_SIGTHREAD_H + 1 + + ) + +23 #i�! +def�ed + +_SIGNAL_H + && !def�ed +_PTHREAD_H + + +31
+ $�h�ad_sigmask + ( +__how +, + +32 +__cڡ + +__sig�t_t + * +__��ri� + +__�wmask +, + +33 +__sig�t_t + * +__��ri� + +__�dmask +) +__THROW +; + +36
+ $�h�ad_k�l + ( +�h�ad_t + +__th�adid +, +__signo +� +__THROW +; + +38 #ifde� +__USE_GNU + + +40
+ $�h�ad_sigqueue + ( +�h�ad_t + +__th�adid +, +__signo +, + +41 cڡ +sigv� + +__v�ue +� +__THROW +; + + @/usr/include/linux/errno.h + +1 #i�de� +_LINUX_ERRNO_H + + +2 + #_LINUX_ERRNO_H + + + ) + +4 + ~<asm/��o.h +> + + @/usr/include/sys/ucontext.h + +19 #i�de� +_SYS_UCONTEXT_H + + +20 + #_SYS_UCONTEXT_H + 1 + + ) + +22 + ~<�u�s.h +> + +23 + ~<sig�l.h +> + +24 + ~<b�s/w�dsize.h +> + +28 + ~<b�s/sigcڋxt.h +> + +30 #i� +__WORDSIZE + == 64 + +33 + tg�g_t +; + +36 + #NGREG + 23 + + ) + +39 +g�g_t + + tg�g�t_t +[ +NGREG +]; + +41 #ifde� +__USE_GNU + + +45 + mREG_R8 + = 0, + +46 + #REG_R8 + +REG_R8 + + + ) + +47 + mREG_R9 +, + +48 + #REG_R9 + +REG_R9 + + + ) + +49 + mREG_R10 +, + +50 + #REG_R10 + +REG_R10 + + + ) + +51 + mREG_R11 +, + +52 + #REG_R11 + +REG_R11 + + + ) + +53 + mREG_R12 +, + +54 + #REG_R12 + +REG_R12 + + + ) + +55 + mREG_R13 +, + +56 + #REG_R13 + +REG_R13 + + + ) + +57 + mREG_R14 +, + +58 + #REG_R14 + +REG_R14 + + + ) + +59 + mREG_R15 +, + +60 + #REG_R15 + +REG_R15 + + + ) + +61 + mREG_RDI +, + +62 + #REG_RDI + +REG_RDI + + + ) + +63 + mREG_RSI +, + +64 + #REG_RSI + +REG_RSI + + + ) + +65 + mREG_RBP +, + +66 + #REG_RBP + +REG_RBP + + + ) + +67 + mREG_RBX +, + +68 + #REG_RBX + +REG_RBX + + + ) + +69 + mREG_RDX +, + +70 + #REG_RDX + +REG_RDX + + + ) + +71 + mREG_RAX +, + +72 + #REG_RAX + +REG_RAX + + + ) + +73 + mREG_RCX +, + +74 + #REG_RCX + +REG_RCX + + + ) + +75 + mREG_RSP +, + +76 + #REG_RSP + +REG_RSP + + + ) + +77 + mREG_RIP +, + +78 + #REG_RIP + +REG_RIP + + + ) + +79 + mREG_EFL +, + +80 + #REG_EFL + +REG_EFL + + + ) + +81 + mREG_CSGSFS +, + +82 + #REG_CSGSFS + +REG_CSGSFS + + + ) + +83 + mREG_ERR +, + +84 + #REG_ERR + +REG_ERR + + + ) + +85 + mREG_TRAPNO +, + +86 + #REG_TRAPNO + +REG_TRAPNO + + + ) + +87 + mREG_OLDMASK +, + +88 + #REG_OLDMASK + +REG_OLDMASK + + + ) + +89 + mREG_CR2 + + +90 + #REG_CR2 + +REG_CR2 + + + ) + +94 + s_libc_�x�g + + +96 + msignifi�nd +[4]; + +97 + mexpڒt +; + +98 + m�dd�g +[3]; + +101 + s_libc_xmm�g + + +103 +__u�t32_t + + m�em�t +[4]; + +106 + s_libc_塩e + + +109 +__u�t16_t + + mcwd +; + +110 +__u�t16_t + + mswd +; + +111 +__u�t16_t + + m�w +; + +112 +__u�t16_t + + mf� +; + +113 +__u�t64_t + + mr� +; + +114 +__u�t64_t + + mrdp +; + +115 +__u�t32_t + + mmxc� +; + +116 +__u�t32_t + + mmx�_mask +; + +117 +_libc_�x�g + + m_� +[8]; + +118 +_libc_xmm�g + + m_xmm +[16]; + +119 +__u�t32_t + + m�dd�g +[24]; + +123 +_libc_塩e + * + t�g�t_t +; + +128 +g�g�t_t + + mg�gs +; + +130 +�g�t_t + + m�gs +; + +131 + m__��rved1 + [8]; + +132 } + tmcڋxt_t +; + +135 + sucڋxt + + +137 + muc_�ags +; + +138 +ucڋxt + * + muc_l�k +; + +139 +�ack_t + + muc_�ack +; + +140 +mcڋxt_t + + muc_mcڋxt +; + +141 +__sig�t_t + + muc_sigmask +; + +142 +_libc_塩e + + m__�gs_mem +; + +143 } + tucڋxt_t +; + +148 + tg�g_t +; + +151 + #NGREG + 19 + + ) + +154 +g�g_t + + tg�g�t_t +[ +NGREG +]; + +156 #ifde� +__USE_GNU + + +160 + mREG_GS + = 0, + +161 + #REG_GS + +REG_GS + + + ) + +162 + mREG_FS +, + +163 + #REG_FS + +REG_FS + + + ) + +164 + mREG_ES +, + +165 + #REG_ES + +REG_ES + + + ) + +166 + mREG_DS +, + +167 + #REG_DS + +REG_DS + + + ) + +168 + mREG_EDI +, + +169 + #REG_EDI + +REG_EDI + + + ) + +170 + mREG_ESI +, + +171 + #REG_ESI + +REG_ESI + + + ) + +172 + mREG_EBP +, + +173 + #REG_EBP + +REG_EBP + + + ) + +174 + mREG_ESP +, + +175 + #REG_ESP + +REG_ESP + + + ) + +176 + mREG_EBX +, + +177 + #REG_EBX + +REG_EBX + + + ) + +178 + mREG_EDX +, + +179 + #REG_EDX + +REG_EDX + + + ) + +180 + mREG_ECX +, + +181 + #REG_ECX + +REG_ECX + + + ) + +182 + mREG_EAX +, + +183 + #REG_EAX + +REG_EAX + + + ) + +184 + mREG_TRAPNO +, + +185 + #REG_TRAPNO + +REG_TRAPNO + + + ) + +186 + mREG_ERR +, + +187 + #REG_ERR + +REG_ERR + + + ) + +188 + mREG_EIP +, + +189 + #REG_EIP + +REG_EIP + + + ) + +190 + mREG_CS +, + +191 + #REG_CS + +REG_CS + + + ) + +192 + mREG_EFL +, + +193 + #REG_EFL + +REG_EFL + + + ) + +194 + mREG_UESP +, + +195 + #REG_UESP + +REG_UESP + + + ) + +196 + mREG_SS + + +197 + #REG_SS + +REG_SS + + + ) + +202 + s_libc_�g + + +204 + msignifi�nd +[4]; + +205 + mexpڒt +; + +208 + s_libc_塩e + + +210 + mcw +; + +211 + msw +; + +212 + m�g +; + +213 + m�off +; + +214 + mcs�l +; + +215 + md�aoff +; + +216 + md�a�l +; + +217 +_libc_�g + + m_� +[8]; + +218 + m��us +; + +222 +_libc_塩e + * + t�g�t_t +; + +227 +g�g�t_t + + mg�gs +; + +230 +�g�t_t + + m�gs +; + +231 + m�dmask +; + +232 + m�2 +; + +233 } + tmcڋxt_t +; + +236 + sucڋxt + + +238 + muc_�ags +; + +239 +ucڋxt + * + muc_l�k +; + +240 +�ack_t + + muc_�ack +; + +241 +mcڋxt_t + + muc_mcڋxt +; + +242 +__sig�t_t + + muc_sigmask +; + +243 +_libc_塩e + + m__�gs_mem +; + +244 } + tucڋxt_t +; + + @/usr/include/asm/errno.h + +1 + ~<asm-g��ic/��o.h +> + + @/usr/include/asm-generic/errno.h + +1 #i�de� +_ASM_GENERIC_ERRNO_H + + +2 + #_ASM_GENERIC_ERRNO_H + + + ) + +4 + ~<asm-g��ic/��o-ba�.h +> + +6 + #EDEADLK + 35 + + ) + +7 + #ENAMETOOLONG + 36 + + ) + +8 + #ENOLCK + 37 + + ) + +9 + #ENOSYS + 38 + + ) + +10 + #ENOTEMPTY + 39 + + ) + +11 + #ELOOP + 40 + + ) + +12 + #EWOULDBLOCK + +EAGAIN + + + ) + +13 + #ENOMSG + 42 + + ) + +14 + #EIDRM + 43 + + ) + +15 + #ECHRNG + 44 + + ) + +16 + #EL2NSYNC + 45 + + ) + +17 + #EL3HLT + 46 + + ) + +18 + #EL3RST + 47 + + ) + +19 + #ELNRNG + 48 + + ) + +20 + #EUNATCH + 49 + + ) + +21 + #ENOCSI + 50 + + ) + +22 + #EL2HLT + 51 + + ) + +23 + #EBADE + 52 + + ) + +24 + #EBADR + 53 + + ) + +25 + #EXFULL + 54 + + ) + +26 + #ENOANO + 55 + + ) + +27 + #EBADRQC + 56 + + ) + +28 + #EBADSLT + 57 + + ) + +30 + #EDEADLOCK + +EDEADLK + + + ) + +32 + #EBFONT + 59 + + ) + +33 + #ENOSTR + 60 + + ) + +34 + #ENODATA + 61 + + ) + +35 + #ETIME + 62 + + ) + +36 + #ENOSR + 63 + + ) + +37 + #ENONET + 64 + + ) + +38 + #ENOPKG + 65 + + ) + +39 + #EREMOTE + 66 + + ) + +40 + #ENOLINK + 67 + + ) + +41 + #EADV + 68 + + ) + +42 + #ESRMNT + 69 + + ) + +43 + #ECOMM + 70 + + ) + +44 + #EPROTO + 71 + + ) + +45 + #EMULTIHOP + 72 + + ) + +46 + #EDOTDOT + 73 + + ) + +47 + #EBADMSG + 74 + + ) + +48 + #EOVERFLOW + 75 + + ) + +49 + #ENOTUNIQ + 76 + + ) + +50 + #EBADFD + 77 + + ) + +51 + #EREMCHG + 78 + + ) + +52 + #ELIBACC + 79 + + ) + +53 + #ELIBBAD + 80 + + ) + +54 + #ELIBSCN + 81 + + ) + +55 + #ELIBMAX + 82 + + ) + +56 + #ELIBEXEC + 83 + + ) + +57 + #EILSEQ + 84 + + ) + +58 + #ERESTART + 85 + + ) + +59 + #ESTRPIPE + 86 + + ) + +60 + #EUSERS + 87 + + ) + +61 + #ENOTSOCK + 88 + + ) + +62 + #EDESTADDRREQ + 89 + + ) + +63 + #EMSGSIZE + 90 + + ) + +64 + #EPROTOTYPE + 91 + + ) + +65 + #ENOPROTOOPT + 92 + + ) + +66 + #EPROTONOSUPPORT + 93 + + ) + +67 + #ESOCKTNOSUPPORT + 94 + + ) + +68 + #EOPNOTSUPP + 95 + + ) + +69 + #EPFNOSUPPORT + 96 + + ) + +70 + #EAFNOSUPPORT + 97 + + ) + +71 + #EADDRINUSE + 98 + + ) + +72 + #EADDRNOTAVAIL + 99 + + ) + +73 + #ENETDOWN + 100 + + ) + +74 + #ENETUNREACH + 101 + + ) + +75 + #ENETRESET + 102 + + ) + +76 + #ECONNABORTED + 103 + + ) + +77 + #ECONNRESET + 104 + + ) + +78 + #ENOBUFS + 105 + + ) + +79 + #EISCONN + 106 + + ) + +80 + #ENOTCONN + 107 + + ) + +81 + #ESHUTDOWN + 108 + + ) + +82 + #ETOOMANYREFS + 109 + + ) + +83 + #ETIMEDOUT + 110 + + ) + +84 + #ECONNREFUSED + 111 + + ) + +85 + #EHOSTDOWN + 112 + + ) + +86 + #EHOSTUNREACH + 113 + + ) + +87 + #EALREADY + 114 + + ) + +88 + #EINPROGRESS + 115 + + ) + +89 + #ESTALE + 116 + + ) + +90 + #EUCLEAN + 117 + + ) + +91 + #ENOTNAM + 118 + + ) + +92 + #ENAVAIL + 119 + + ) + +93 + #EISNAM + 120 + + ) + +94 + #EREMOTEIO + 121 + + ) + +95 + #EDQUOT + 122 + + ) + +97 + #ENOMEDIUM + 123 + + ) + +98 + #EMEDIUMTYPE + 124 + + ) + +99 + #ECANCELED + 125 + + ) + +100 + #ENOKEY + 126 + + ) + +101 + #EKEYEXPIRED + 127 + + ) + +102 + #EKEYREVOKED + 128 + + ) + +103 + #EKEYREJECTED + 129 + + ) + +106 + #EOWNERDEAD + 130 + + ) + +107 + #ENOTRECOVERABLE + 131 + + ) + +109 + #ERFKILL + 132 + + ) + + @/usr/include/asm-generic/errno-base.h + +1 #i�de� +_ASM_GENERIC_ERRNO_BASE_H + + +2 + #_ASM_GENERIC_ERRNO_BASE_H + + + ) + +4 + #EPERM + 1 + + ) + +5 + #ENOENT + 2 + + ) + +6 + #ESRCH + 3 + + ) + +7 + #EINTR + 4 + + ) + +8 + #EIO + 5 + + ) + +9 + #ENXIO + 6 + + ) + +10 + #E2BIG + 7 + + ) + +11 + #ENOEXEC + 8 + + ) + +12 + #EBADF + 9 + + ) + +13 + #ECHILD + 10 + + ) + +14 + #EAGAIN + 11 + + ) + +15 + #ENOMEM + 12 + + ) + +16 + #EACCES + 13 + + ) + +17 + #EFAULT + 14 + + ) + +18 + #ENOTBLK + 15 + + ) + +19 + #EBUSY + 16 + + ) + +20 + #EEXIST + 17 + + ) + +21 + #EXDEV + 18 + + ) + +22 + #ENODEV + 19 + + ) + +23 + #ENOTDIR + 20 + + ) + +24 + #EISDIR + 21 + + ) + +25 + #EINVAL + 22 + + ) + +26 + #ENFILE + 23 + + ) + +27 + #EMFILE + 24 + + ) + +28 + #ENOTTY + 25 + + ) + +29 + #ETXTBSY + 26 + + ) + +30 + #EFBIG + 27 + + ) + +31 + #ENOSPC + 28 + + ) + +32 + #ESPIPE + 29 + + ) + +33 + #EROFS + 30 + + ) + +34 + #EMLINK + 31 + + ) + +35 + #EPIPE + 32 + + ) + +36 + #EDOM + 33 + + ) + +37 + #ERANGE + 34 + + ) + + @ +1 +. +1 +/usr/include +87 +2228 +CG.cc +CG_roseBuilder.cc +CG_roseRepr.cc +CG_stringBuilder.cc +CG_stringRepr.cc +CG_suifBuilder.cc +CG_suifRepr.cc +code_gen.cc +output_repr.cc +/usr/include/math.h +/usr/include/stdio.h +/usr/include/string.h +/usr/include/bits/huge_val.h +/usr/include/bits/huge_valf.h +/usr/include/bits/huge_vall.h +/usr/include/bits/inf.h +/usr/include/bits/mathcalls.h +/usr/include/bits/mathdef.h +/usr/include/bits/mathinline.h +/usr/include/bits/nan.h +/usr/include/bits/stdio-ldbl.h +/usr/include/bits/stdio.h +/usr/include/bits/stdio2.h +/usr/include/bits/stdio_lim.h +/usr/include/bits/string.h +/usr/include/bits/string2.h +/usr/include/bits/string3.h +/usr/include/bits/sys_errlist.h +/usr/include/bits/types.h +/usr/include/features.h +/usr/include/getopt.h +/usr/include/libio.h +/usr/include/xlocale.h +/usr/include/_G_config.h +/usr/include/bits/libio-ldbl.h +/usr/include/bits/predefs.h +/usr/include/bits/stdio-lock.h +/usr/include/bits/typesizes.h +/usr/include/bits/wordsize.h +/usr/include/ctype.h +/usr/include/endian.h +/usr/include/gnu/stubs.h +/usr/include/stdlib.h +/usr/include/sys/cdefs.h +/usr/include/alloca.h +/usr/include/bits/byteswap.h +/usr/include/bits/endian.h +/usr/include/bits/libc-lock.h +/usr/include/bits/stdlib-ldbl.h +/usr/include/bits/stdlib.h +/usr/include/bits/waitflags.h +/usr/include/bits/waitstatus.h +/usr/include/gconv.h +/usr/include/gnu/stubs-32.h +/usr/include/gnu/stubs-64.h +/usr/include/sys/types.h +/usr/include/wchar.h +/usr/include/bits/pthreadtypes.h +/usr/include/bits/wchar-ldbl.h +/usr/include/bits/wchar.h +/usr/include/bits/wchar2.h +/usr/include/errno.h +/usr/include/gnu/option-groups.h +/usr/include/pthread.h +/usr/include/sys/select.h +/usr/include/sys/sysmacros.h +/usr/include/time.h +/usr/include/wctype.h +/usr/include/bits/errno.h +/usr/include/bits/select.h +/usr/include/bits/setjmp.h +/usr/include/bits/sigset.h +/usr/include/bits/time.h +/usr/include/sched.h +/usr/include/signal.h +/usr/include/bits/sched.h +/usr/include/bits/sigaction.h +/usr/include/bits/sigcontext.h +/usr/include/bits/siginfo.h +/usr/include/bits/signum.h +/usr/include/bits/sigstack.h +/usr/include/bits/sigthread.h +/usr/include/linux/errno.h +/usr/include/sys/ucontext.h +/usr/include/asm/errno.h +/usr/include/asm-generic/errno.h +/usr/include/asm-generic/errno-base.h diff --git a/omegalib/code_gen/src/output_repr.cc b/omegalib/code_gen/src/output_repr.cc new file mode 100644 index 0000000..955cc14 --- /dev/null +++ b/omegalib/code_gen/src/output_repr.cc @@ -0,0 +1,1931 @@ +/***************************************************************************** + Copyright (C) 1994-2000 University of Maryland + Copyright (C) 2008 University of Southern California + Copyright (C) 2009-2010 University of Utah + All Rights Reserved. + + Purpose: + utility functions for outputing CG_outputReprs + + Notes: + + History: + 07/30/10 collect various code outputing into one place, by Chun Chen +*****************************************************************************/ + +#include <omega.h> +#include <code_gen/CG_stringBuilder.h> +#include <code_gen/output_repr.h> +#include <basic/omega_error.h> +#include <math.h> +#include <stack> +#include <typeinfo> + +namespace omega { + +extern Tuple<Tuple<Relation> > projected_nIS; +int var_substitution_threshold = 100; +//protonu. +extern int upperBoundForLevel; +extern int lowerBoundForLevel; +extern bool fillInBounds; +//end--protonu. + +} + + +namespace omega { + +std::pair<EQ_Handle, int> find_simplest_assignment(const Relation &R_, Variable_ID v, const std::vector<CG_outputRepr *> &assigned_on_the_fly); + + +namespace { + + + + +void get_stride(const Constraint_Handle &h, Variable_ID &wc, coef_t &step){ + wc = 0; + for(Constr_Vars_Iter i(h,true); i; i++) { + assert(wc == 0); + wc = (*i).var; + step = ((*i).coef); + } +} + +} + +CG_outputRepr* outputIdent(CG_outputBuilder* ocg, const Relation &R_, Variable_ID v, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + Relation &R = const_cast<Relation &>(R_); + + switch (v->kind()) { + case Set_Var: { + int pos = v->get_position(); + if (assigned_on_the_fly[pos-1] != NULL) + return assigned_on_the_fly[pos-1]->clone(); + else + return ocg->CreateIdent(v->name()); + break; + } + case Global_Var: { + if (v->get_global_var()->arity() == 0) + return ocg->CreateIdent(v->name()); + else { + /* This should be improved to take into account the possible elimination + of the set variables. */ + int arity = v->get_global_var()->arity(); + //assert(arity <= last_level); + Tuple<CG_outputRepr *> argList; + // Relation R = Relation::True(arity); + + // name_codegen_vars(R); // easy way to make sure the names are correct. + for(int i = 1; i <= arity; i++) + argList.append(ocg->CreateIdent(R.set_var(i)->name())); + CG_outputRepr *call = ocg->CreateInvoke(v->get_global_var()->base_name(), argList); + return call; + } + break; + } + default: + throw std::invalid_argument("wrong variable type"); + } +} + + +//---------------------------------------------------------------------------- +// Translate equality constraints to if-condition and assignment. +// return.first is right-hand-side of assignment, return.second +// is true if assignment is required. +// -- by chun 07/29/2010 +// ---------------------------------------------------------------------------- +std::pair<CG_outputRepr *, bool> outputAssignment(CG_outputBuilder *ocg, const Relation &R_, Variable_ID v, Relation &enforced, CG_outputRepr *&if_repr, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + Relation &R = const_cast<Relation &>(R_); + + Conjunct *c = R.query_DNF()->single_conjunct(); + + // check whether to generate if-conditions from equality constraints + for (EQ_Iterator ei(c); ei; ei++) + if (!(*ei).has_wildcards() && abs((*ei).get_coef(v)) > 1) { + Relation r(R.n_set()); + F_And *f_super_root = r.add_and(); + F_Exists *fe = f_super_root->add_exists(); + Variable_ID e = fe->declare(); + F_And *f_root = fe->add_and(); + EQ_Handle h = f_root->add_EQ(); + for (Constr_Vars_Iter cvi(*ei); cvi; cvi++) + switch ((*cvi).var->kind()) { + case Input_Var: { + if ((*cvi).var == v) + h.update_coef(e, (*cvi).coef); + else + h.update_coef(r.set_var((*cvi).var->get_position()), (*cvi).coef); + break; + } + case Global_Var: { + Global_Var_ID g = (*cvi).var->get_global_var(); + Variable_ID v2; + if (g->arity() == 0) + v2 = r.get_local(g); + else + v2 = r.get_local(g, (*cvi).var->function_of()); + h.update_coef(v2, (*cvi).coef); + break; + } + default: + assert(0); + } + h.update_const((*ei).get_const()); + + r.copy_names(R); + r.setup_names(); + + // need if-condition to make sure this loop variable has integer value + if (!Gist(r, copy(enforced), 1).is_obvious_tautology()) { + coef_t coef = (*ei).get_coef(v); + coef_t sign = -((coef>0)?1:-1); + coef = abs(coef); + + CG_outputRepr *term = NULL; + for (Constr_Vars_Iter cvi(*ei); cvi; cvi++) + if ((*cvi).var != v) { + CG_outputRepr *varRepr = outputIdent(ocg, R, (*cvi).var, assigned_on_the_fly); + coef_t t = sign*(*cvi).coef; + if (t == 1) + term = ocg->CreatePlus(term, varRepr); + else if (t == -1) + term = ocg->CreateMinus(term, varRepr); + else if (t > 0) + term = ocg->CreatePlus(term, ocg->CreateTimes(ocg->CreateInt(t), varRepr)); + else if (t < 0) + term = ocg->CreateMinus(term, ocg->CreateTimes(ocg->CreateInt(-t), varRepr)); + } + coef_t t = sign*(*ei).get_const(); + if (t > 0) + term = ocg->CreatePlus(term, ocg->CreateInt(t)); + else if (t < 0) + term = ocg->CreateMinus(term, ocg->CreateInt(-t)); + + term = ocg->CreateIntegerMod(term, ocg->CreateInt(coef)); + term = ocg->CreateEQ(term, ocg->CreateInt(0)); + + if_repr = ocg->CreateAnd(if_repr, term); + } + + enforced.and_with_EQ(*ei); + enforced.simplify(); + } + + // find the simplest assignment + std::pair<EQ_Handle, int> a = find_simplest_assignment(R, v, assigned_on_the_fly); + + // now generate assignment + if (a.second < INT_MAX) { + EQ_Handle eq = a.first; + CG_outputRepr *rop_repr = NULL; + + coef_t divider = eq.get_coef(v); + int sign = 1; + if (divider < 0) { + divider = -divider; + sign = -1; + } + + for (Constr_Vars_Iter cvi(eq); cvi; cvi++) + if ((*cvi).var != v) { + CG_outputRepr *var_repr = outputIdent(ocg, R, (*cvi).var, assigned_on_the_fly); + coef_t coef = (*cvi).coef; + if (-sign * coef == -1) + rop_repr = ocg->CreateMinus(rop_repr, var_repr); + else if (-sign * coef < -1) + rop_repr = ocg->CreateMinus(rop_repr, ocg->CreateTimes(ocg->CreateInt(sign * coef), var_repr)); + else if (-sign * coef == 1) + rop_repr = ocg->CreatePlus(rop_repr, var_repr); + else // -sign * coef > 1 + rop_repr = ocg->CreatePlus(rop_repr, ocg->CreateTimes(ocg->CreateInt(-sign * coef), var_repr)); + } + + coef_t c_term = -(eq.get_const() * sign); + + if (c_term > 0) + rop_repr = ocg->CreatePlus(rop_repr, ocg->CreateInt(c_term)); + else if (c_term < 0) + rop_repr = ocg->CreateMinus(rop_repr, ocg->CreateInt(-c_term)); + else if (rop_repr == NULL) + rop_repr = ocg->CreateInt(0); + + if (divider != 1) + rop_repr = ocg->CreateIntegerDivide(rop_repr, ocg->CreateInt(divider)); + + enforced.and_with_EQ(eq); + enforced.simplify(); + + if (a.second > var_substitution_threshold) + return std::make_pair(rop_repr, true); + else + return std::make_pair(rop_repr, false); + } + else + return std::make_pair(static_cast<CG_outputRepr *>(NULL), false); +} + + +//---------------------------------------------------------------------------- +// Don't use Substitutions class since it can't handle integer +// division. Instead, use relation mapping to a single output +// variable to get substitution. -- by chun, 07/19/2007 +//---------------------------------------------------------------------------- +Tuple<CG_outputRepr*> outputSubstitution(CG_outputBuilder* ocg, const Relation &R_, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + Relation &R = const_cast<Relation &>(R_); + + const int n = R.n_out(); + Tuple<CG_outputRepr*> oReprList; + + // Find substitution for each output variable + for (int i = 1; i <= n; i++) { + Relation mapping(n, 1); + F_And *f_root = mapping.add_and(); + EQ_Handle h = f_root->add_EQ(); + h.update_coef(mapping.output_var(1), 1); + h.update_coef(mapping.input_var(i), -1); + + Relation S = Composition(mapping, copy(R)); + + std::pair<EQ_Handle, int> a = find_simplest_assignment(S, S.output_var(1), assigned_on_the_fly); + + if (a.second < INT_MAX) { + while (a.second > 0) { + EQ_Handle eq = a.first; + std::set<int> candidates; + for (Constr_Vars_Iter cvi(eq); cvi; cvi++) + if ((*cvi).var->kind() == Input_Var) + candidates.insert((*cvi).var->get_position()); + + bool changed = false; + for (std::set<int>::iterator j = candidates.begin(); j != candidates.end(); j++) { + Relation S2 = Project(copy(S), *j, Input_Var); + std::pair<EQ_Handle, int> a2 = find_simplest_assignment(S2, S2.output_var(1), assigned_on_the_fly); + if (a2.second <= a.second) { + S = S2; + a = a2; + changed = true; + break; + } + } + if (!changed) + break; + } + } + + if (a.second < INT_MAX) { + CG_outputRepr *repr = NULL; + EQ_Handle eq = a.first; + Variable_ID v = S.output_var(1); + + for (int j = 1; j <= S.n_inp(); j++) + S.name_input_var(j, R.input_var(j)->name()); + S.setup_names(); + + int d = eq.get_coef(v); + assert(d != 0); + int sign = (d>0)?-1:1; + d = -sign * d; + for (Constr_Vars_Iter cvi(eq); cvi; cvi++) + if ((*cvi).var != v) { + int coef = sign * (*cvi).coef; + CG_outputRepr *op = outputIdent(ocg, S, (*cvi).var, assigned_on_the_fly); + if (coef > 1) + op = ocg->CreateTimes(ocg->CreateInt(coef), op); + else if (coef < -1) + op = ocg->CreateTimes(ocg->CreateInt(-coef), op); + if (coef > 0) + repr = ocg->CreatePlus(repr, op); + else if (coef < 0) + repr = ocg->CreateMinus(repr, op); + } + + int c = sign * eq.get_const(); + if (c > 0) + repr = ocg->CreatePlus(repr, ocg->CreateInt(c)); + else if (c < 0) + repr = ocg->CreateMinus(repr, ocg->CreateInt(-c)); + else if (repr == NULL) + repr = ocg->CreateInt(0); + + if (d != 1) + repr = ocg->CreateIntegerDivide(repr, ocg->CreateInt(d)); + + oReprList.append(repr); + } + else + oReprList.append(NULL); + } + + return oReprList; +} + +namespace { + +Relation create_stride_on_bound(int n, const std::map<Variable_ID, coef_t> &lb, coef_t stride) { + Relation result(n); + F_And *f_root = result.add_and(); + EQ_Handle h = f_root->add_stride(stride); + + for (std::map<Variable_ID, coef_t>::const_iterator i = lb.begin(); i != lb.end(); i++) { + if (i->first == NULL) + h.update_const(i->second); + else { + switch(i->first->kind()) { + case Input_Var: { + int pos = i->first->get_position(); + h.update_coef(result.set_var(pos), i->second); + break; + } + case Global_Var: { + Global_Var_ID g = i->first->get_global_var(); + Variable_ID v; + if (g->arity() == 0) + v = result.get_local(g); + else + v = result.get_local(g, i->first->function_of()); + h.update_coef(v, i->second); + break; + } + default: + assert(0); + } + } + } + + return result; +} + +} + +//---------------------------------------------------------------------------- +// Find the most restrictive common stride constraint for a set of +// relations. -- by chun, 05/20/09 +// ---------------------------------------------------------------------------- +Relation greatest_common_step(const Tuple<Relation> &I, const Tuple<int> &active, int level, const Relation &known) { + assert(I.size() == active.size()); + int n = 0; + + std::vector<Relation> I1, I2; + for (int i = 1; i <= I.size(); i++) + if (active[i]) { + if (n == 0) + n = I[i].n_set(); + + Relation r1; + if (known.is_null()) + r1 = copy(I[i]); + else { + r1 = Intersection(copy(I[i]), copy(known)); + r1.simplify(); + } + I1.push_back(r1); + Relation r2 = Gist(copy(I[i]), copy(known)); + assert(r2.is_upper_bound_satisfiable()); + if (r2.is_obvious_tautology()) + return Relation::True(n); + I2.push_back(r2); + } + + std::vector<bool> is_exact(I2.size(), true); + std::vector<coef_t> step(I2.size(), 0); + std::vector<coef_t> messy_step(I2.size(), 0); + Variable_ID t_col = set_var(level); + std::map<Variable_ID, coef_t> lb; + + // first check all clean strides: t_col = ... (mod step) + for (size_t i = 0; i < I2.size(); i++) { + Conjunct *c = I2[i].query_DNF()->single_conjunct(); + + bool is_degenerated = false; + for (EQ_Iterator e = c->EQs(); e; e++) { + coef_t coef = abs((*e).get_coef(t_col)); + if (coef != 0 && !(*e).has_wildcards()) { + is_degenerated = true; + break; + } + } + if (is_degenerated) + continue; + + for (EQ_Iterator e = c->EQs(); e; e++) { + if ((*e).has_wildcards()) { + coef_t coef = abs((*e).get_coef(t_col)); + if (coef == 0) + continue; + if (coef != 1) { + is_exact[i] = false; + continue; + } + + coef_t this_step = abs(Constr_Vars_Iter(*e, true).curr_coef()); + assert(this_step != 1); + + if (lb.size() != 0) { + Relation test = create_stride_on_bound(n, lb, this_step); + if (Gist(test, copy(I1[i])).is_obvious_tautology()) { + if (step[i] == 0) + step[i] = this_step; + else + step[i] = lcm(step[i], this_step); + } + else + is_exact[i] = false; + } + else { + // try to find a lower bound that hits on stride + Conjunct *c = I2[i].query_DNF()->single_conjunct(); + for (GEQ_Iterator ge = c->GEQs(); ge; ge++) { + if ((*ge).has_wildcards() || (*ge).get_coef(t_col) != 1) + continue; + + std::map<Variable_ID, coef_t> cur_lb; + for (Constr_Vars_Iter cv(*ge); cv; cv++) + cur_lb[cv.curr_var()] = cv.curr_coef(); + cur_lb[NULL] = (*ge).get_const(); + + Relation test = create_stride_on_bound(n, cur_lb, this_step); + if (Gist(test, copy(I1[i])).is_obvious_tautology()) { + if (step[i] == 0) + step[i] = this_step; + else + step[i] = lcm(step[i], this_step); + + lb = cur_lb; + break; + } + } + + // no clean lower bound, thus we use this modular constraint as is + if (lb.size() == 0) { + std::map<Variable_ID, coef_t> cur_lb; + int wild_count = 0; + for (Constr_Vars_Iter cv(*e); cv; cv++) + if (cv.curr_var()->kind() == Wildcard_Var) + wild_count++; + else + cur_lb[cv.curr_var()] = cv.curr_coef(); + cur_lb[NULL] = (*e).get_const(); + + if (wild_count == 1) { + lb = cur_lb; + if (step[i] == 0) + step[i] = this_step; + else + step[i] = lcm(step[i], this_step); + } + } + + if (lb.size() == 0) + is_exact[i] = false; + } + } + } + } + + // aggregate all exact steps + coef_t global_step = 0; + for (size_t i = 0; i < is_exact.size(); i++) + if (is_exact[i]) + global_step = gcd(global_step, step[i]); + if (global_step == 1) + return Relation::True(n); + + // now check all messy strides: a*t_col = ... (mod step) + for (size_t i = 0; i < I2.size(); i++) + if (!is_exact[i]) { + Conjunct *c = I2[i].query_DNF()->single_conjunct(); + for (EQ_Iterator e = c->EQs(); e; e++) { + coef_t coef = abs((*e).get_coef(t_col)); + if (coef == 0 || coef == 1) + continue; + + // make a guess for messy stride condition -- by chun 07/27/2007 + coef_t this_step = abs(Constr_Vars_Iter(*e, true).curr_coef()); + this_step /= gcd(this_step, coef); + this_step = gcd(global_step, this_step); + if (this_step == 1) + continue; + + if (lb.size() != 0) { + Relation test = create_stride_on_bound(n, lb, this_step); + if (Gist(test, copy(I1[i])).is_obvious_tautology()) { + if (step[i] == 0) + step[i] = this_step; + else + step[i] = lcm(step[i], this_step); + } + } + else { + // try to find a lower bound that hits on stride + Conjunct *c = I2[i].query_DNF()->single_conjunct(); + for (GEQ_Iterator ge = c->GEQs(); ge; ge++) { + if ((*ge).has_wildcards() || (*ge).get_coef(t_col) != 1) + continue; + + std::map<Variable_ID, coef_t> cur_lb; + + for (Constr_Vars_Iter cv(*ge); cv; cv++) + cur_lb[cv.curr_var()] = cv.curr_coef(); + + cur_lb[NULL] = (*ge).get_const(); + + Relation test = create_stride_on_bound(n, cur_lb, this_step); + if (Gist(test, copy(I1[i])).is_obvious_tautology()) { + if (step[i] == 0) + step[i] = this_step; + else + step[i] = lcm(step[i], this_step); + + lb = cur_lb; + break; + } + } + } + } + } + + // aggregate all non-exact steps + for (size_t i = 0; i < is_exact.size(); i++) + if (!is_exact[i]) + global_step = gcd(global_step, step[i]); + if (global_step == 1 || global_step == 0) + return Relation::True(n); + + Relation result = create_stride_on_bound(n, lb, global_step); + + // check for statements that haven't been factored into global step + for (size_t i = 0; i < I1.size(); i++) + if (step[i] == 0) { + if (!Gist(copy(result), copy(I1[i])).is_obvious_tautology()) + return Relation::True(n); + } + + return result; +} + + +//----------------------------------------------------------------------------- +// Substitute variables in a statement according to mapping function. +//----------------------------------------------------------------------------- +CG_outputRepr* outputStatement(CG_outputBuilder *ocg, CG_outputRepr *stmt, int indent, const Relation &mapping_, const Relation &known_, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + Relation mapping = copy(mapping_); + Relation known = copy(known_); + Tuple<std::string> loop_vars; + + for (int i = 1; i <= mapping.n_inp(); i++) + loop_vars.append(mapping.input_var(i)->name()); + + // discard non-existant variables from iteration spaces -- by chun 12/31/2008 + if (known.n_set() > mapping.n_out()) { + Relation r(known.n_set(), mapping.n_out()); + F_And *f_root = r.add_and(); + for (int i = 1; i <= mapping.n_out(); i++) { + EQ_Handle h = f_root->add_EQ(); + h.update_coef(r.input_var(i), 1); + h.update_coef(r.output_var(i), -1); + } + known = Range(Restrict_Domain(r, known)); + known.simplify(); + } + + // remove modular constraints from known to simplify mapping process -- by chun 11/10/2008 + Relation k(known.n_set()); + F_And *f_root = k.add_and(); + Conjunct *c = known.query_DNF()->single_conjunct(); + for (EQ_Iterator e = c->EQs(); e; e++) { + if (!(*e).has_wildcards()) + f_root->add_EQ(*e); + } + k.simplify(); + + // get variable substituion list + Relation Inv_mapping = Restrict_Domain(Inverse(mapping), k); + Tuple<CG_outputRepr*> sList = outputSubstitution(ocg, Inv_mapping, assigned_on_the_fly); + + return ocg->CreatePlaceHolder(indent, stmt, sList, loop_vars); +} + + +// find floor definition for variable such as m-3 <= 4v <= m +bool findFloorInequality(Relation &r, Variable_ID v, GEQ_Handle &h, Variable_ID excluded) { + Conjunct *c = r.single_conjunct(); + + std::set<Variable_ID> var_checked; + std::stack<Variable_ID> var_checking; + var_checking.push(v); + + while (!var_checking.empty()) { + Variable_ID v2 = var_checking.top(); + var_checking.pop(); + + bool is_floor = false; + for (GEQ_Iterator gi(c); gi; gi++) { + if (excluded != NULL && (*gi).get_coef(excluded) != 0) + continue; + + coef_t a = (*gi).get_coef(v2); + if (a < 0) { + for (GEQ_Iterator gi2(c); gi2; gi2++) { + coef_t b = (*gi2).get_coef(v2); + if (b == -a && (*gi).get_const()+(*gi2).get_const() < -a) { + bool match = true; + for (Constr_Vars_Iter cvi(*gi); cvi; cvi++) + if ((*gi2).get_coef((*cvi).var) != -(*cvi).coef) { + match = false; + break; + } + if (!match) + continue; + for (Constr_Vars_Iter cvi(*gi2); cvi; cvi++) + if ((*gi).get_coef((*cvi).var) != -(*cvi).coef) { + match = false; + break; + } + if (match) { + var_checked.insert(v2); + is_floor = true; + if (v == v2) + h = *gi; + + for (Constr_Vars_Iter cvi(*gi); cvi; cvi++) + if (((*cvi).var->kind() == Exists_Var || (*cvi).var->kind() == Wildcard_Var) && + var_checked.find((*cvi).var) == var_checked.end()) + var_checking.push((*cvi).var); + + break; + } + } + } + if (is_floor) + break; + } + } + if (!is_floor) + return false; + } + return true; +} + + + + +//----------------------------------------------------------------------------- +// Output a reqular equality or inequality to conditions. +// e.g. (i=5*j) +//----------------------------------------------------------------------------- +CG_outputRepr* output_as_guard(CG_outputBuilder* ocg, const Relation &guards_in, Constraint_Handle e, bool is_equality, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + Relation &guards = const_cast<Relation &>(guards_in); + if (e.has_wildcards()) + throw std::invalid_argument("constraint must not have wildcard"); + + Variable_ID v = (*Constr_Vars_Iter(e)).var; + + coef_t saved_coef = ((e).get_coef(v)); + int sign = saved_coef < 0 ? -1 : 1; + + (e).update_coef_during_simplify(v, -saved_coef+sign); + CG_outputRepr* rop = outputEasyBoundAsRepr(ocg, guards, e, v, false, 0, assigned_on_the_fly); + (e).update_coef_during_simplify(v,saved_coef-sign); + + CG_outputRepr* lop = outputIdent(ocg, guards, v, assigned_on_the_fly); + if (abs(saved_coef) != 1) + lop = ocg->CreateTimes(ocg->CreateInt(abs(saved_coef)), lop); + + + if (is_equality) { + return ocg->CreateEQ(lop, rop); + } + else { + if (saved_coef < 0) + return ocg->CreateLE(lop, rop); + else + return ocg->CreateGE(lop, rop); + } +} + + +//----------------------------------------------------------------------------- +// Output stride conditions from equalities. +// e.g. (exists alpha: i = 5*alpha) +//----------------------------------------------------------------------------- +CG_outputRepr *output_EQ_strides(CG_outputBuilder* ocg, const Relation &guards_in, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + Relation guards = const_cast<Relation &>(guards_in); + Conjunct *c = guards.single_conjunct(); + + CG_outputRepr *eqRepr = NULL; + + for (EQ_Iterator ei(c->EQs()); ei; ei++) { + Variable_ID wc = NULL; + for (Constr_Vars_Iter cvi((*ei), true); cvi; cvi++) { + if (wc != NULL) + throw codegen_error("Can't generate equality condition with multiple wildcards"); + else + wc = (*cvi).var; + } + if (wc == NULL) + continue; + + coef_t step = (*ei).get_coef(wc); + + (*ei).update_coef_during_simplify(wc, 1-step); + CG_outputRepr* lop = outputEasyBoundAsRepr(ocg, guards, (*ei), wc, false, 0, assigned_on_the_fly); + (*ei).update_coef_during_simplify(wc, step-1); + + CG_outputRepr* rop = ocg->CreateInt(abs(step)); + CG_outputRepr* intMod = ocg->CreateIntegerMod(lop, rop); + CG_outputRepr* eqNode = ocg->CreateEQ(intMod, ocg->CreateInt(0)); + + eqRepr = ocg->CreateAnd(eqRepr, eqNode); + } + + return eqRepr; +} + + + +//----------------------------------------------------------------------------- +// Output hole conditions created by inequalities involving wildcards. +// e.g. (exists alpha: 4*alpha <= i <= 5*alpha) +// Collect wildcards +// For each whildcard +// collect lower and upper bounds in which wildcard appears +// For each lower bound +// create constraint with each upper bound +//----------------------------------------------------------------------------- +CG_outputRepr *output_GEQ_strides(CG_outputBuilder* ocg, const Relation &guards_in, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + Relation guards = const_cast<Relation &>(guards_in); + Conjunct *c = guards.single_conjunct(); + + CG_outputRepr* geqRepr = NULL; + + std::set<Variable_ID> non_orphan_wildcard; + for (GEQ_Iterator gi(c); gi; gi++) { + int num_wild = 0; + Variable_ID first_one; + for (Constr_Vars_Iter cvi(*gi, true); cvi; cvi++) { + num_wild++; + if (num_wild == 1) + first_one = (*cvi).var; + else + non_orphan_wildcard.insert((*cvi).var); + } + if (num_wild > 1) + non_orphan_wildcard.insert(first_one); + } + + for (int i = 1; i <= (*(c->variables())).size(); i++) { + Variable_ID wc = (*(c->variables()))[i]; + if (wc->kind() == Wildcard_Var && non_orphan_wildcard.find(wc) == non_orphan_wildcard.end()) { + Tuple<GEQ_Handle> lower, upper; + for (GEQ_Iterator gi(c); gi; gi++) { + if((*gi).get_coef(wc) > 0) + lower.append(*gi); + else if((*gi).get_coef(wc) < 0) + upper.append(*gi); + } + + // low: c*alpha - x >= 0 + // up: -d*alpha + y >= 0 + for (Tuple_Iterator<GEQ_Handle> low(lower); low; low++) { + for (Tuple_Iterator<GEQ_Handle> up(upper); up; up++) { + coef_t low_coef = (*low).get_coef(wc); + coef_t up_coef = (*up).get_coef(wc); + + (*low).update_coef_during_simplify(wc, 1-low_coef); + CG_outputRepr* lowExpr = outputEasyBoundAsRepr(ocg, guards, *low, wc, false, 0, assigned_on_the_fly); + (*low).update_coef_during_simplify(wc, low_coef-1); + + (*up).update_coef_during_simplify(wc, -1-up_coef); + CG_outputRepr* upExpr = outputEasyBoundAsRepr(ocg, guards, *up, wc, false, 0, assigned_on_the_fly); + (*up).update_coef_during_simplify(wc, up_coef+1); + + CG_outputRepr* intDiv = ocg->CreateIntegerDivide(upExpr, ocg->CreateInt(-up_coef)); + CG_outputRepr* rop = ocg->CreateTimes(ocg->CreateInt(low_coef), intDiv); + CG_outputRepr* geqNode = ocg->CreateLE(lowExpr, rop); + + geqRepr = ocg->CreateAnd(geqRepr, geqNode); + } + } + } + } + + if (non_orphan_wildcard.size() > 0) { + // e.g. c*alpha - x >= 0 (*) + // -d*alpha + y >= 0 (*) + // e1*alpha + f1*beta + g1 >= 0 (**) + // e2*alpha + f2*beta + g2 >= 0 (**) + // ... + // TODO: should generate a testing loop for alpha using its lower and + // upper bounds from (*) constraints and do the same if-condition test + // for beta from each pair of opposite (**) constraints as above, + // and exit the loop when if-condition satisfied. + throw codegen_error("Can't generate multiple wildcard GEQ guards right now"); + } + + return geqRepr; +} + + +//----------------------------------------------------------------------------- +// Translate all constraints in a relation to guard conditions. +//----------------------------------------------------------------------------- +CG_outputRepr *outputGuard(CG_outputBuilder* ocg, const Relation &guards_in, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + Relation &guards = const_cast<Relation &>(guards_in); + if (guards.is_null() || guards.is_obvious_tautology()) + return NULL; + + CG_outputRepr* nodeRepr = NULL; + + CG_outputRepr *eqStrideRepr = output_EQ_strides(ocg, guards, assigned_on_the_fly); + nodeRepr = ocg->CreateAnd(nodeRepr, eqStrideRepr); + + CG_outputRepr *geqStrideRepr = output_GEQ_strides(ocg, guards, assigned_on_the_fly); + nodeRepr = ocg->CreateAnd(nodeRepr, geqStrideRepr); + + Conjunct *c = guards.single_conjunct(); + for(EQ_Iterator ei(c->EQs()); ei; ei++) + if (!(*ei).has_wildcards()) { + CG_outputRepr *eqRepr = output_as_guard(ocg, guards, (*ei), true, assigned_on_the_fly); + nodeRepr = ocg->CreateAnd(nodeRepr, eqRepr); + } + for(GEQ_Iterator gi(c->GEQs()); gi; gi++) + if (!(*gi).has_wildcards()) { + CG_outputRepr *geqRepr = output_as_guard(ocg, guards, (*gi), false, assigned_on_the_fly); + nodeRepr = ocg->CreateAnd(nodeRepr, geqRepr); + } + + return nodeRepr; +} + + +//----------------------------------------------------------------------------- +// one is 1 for LB +// this function is overloaded should replace the original one +//----------------------------------------------------------------------------- +CG_outputRepr *outputLBasRepr(CG_outputBuilder* ocg, const GEQ_Handle &g, + Relation &bounds, Variable_ID v, + coef_t stride, const EQ_Handle &strideEQ, + Relation known, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { +#if ! defined NDEBUG + coef_t v_coef; + assert((v_coef = g.get_coef(v)) > 0); +#endif + + std::string s; + CG_outputRepr *lbRepr; + if (stride == 1) { + lbRepr = outputEasyBoundAsRepr(ocg, bounds, g, v, false, 1, assigned_on_the_fly); + } + else { + if (!boundHitsStride(g,v,strideEQ,stride,known)) { + bounds.setup_names(); // boundsHitsStride resets variable names + + CG_stringBuilder oscg; + std::string c = GetString(outputEasyBoundAsRepr(&oscg, bounds, strideEQ, v, true, 0, assigned_on_the_fly)); + CG_outputRepr *cRepr = NULL; + if (c != std::string("0")) + cRepr = outputEasyBoundAsRepr(ocg, bounds, strideEQ, v, true, 0, assigned_on_the_fly); + std::string LoverM = GetString(outputEasyBoundAsRepr(&oscg, bounds, g, v, false, 1, assigned_on_the_fly)); + CG_outputRepr *LoverMRepr = NULL; + if (LoverM != std::string("0")) + LoverMRepr = outputEasyBoundAsRepr(ocg, bounds, g, v, false, 1, assigned_on_the_fly); + + if (code_gen_debug > 2) { + fprintf(DebugFile,"::: LoverM is %s\n", LoverM.c_str()); + fprintf(DebugFile,"::: c is %s\n", c.c_str()); + } + + int complexity1 = 0, complexity2 = 0; + for (size_t i = 0; i < c.length(); i++) + if (c[i] == '+' || c[i] == '-' || c[i] == '*' || c[i] == '/') + complexity1++; + else if (c[i] == ',') + complexity1 += 2; + for (size_t i = 0; i < LoverM.length(); i++) + if (LoverM[i] == '+' || LoverM[i] == '-' || LoverM[i] == '*' || LoverM[i] == '/') + complexity2++; + else if (LoverM[i] == ',') + complexity2 += 2; + + if (complexity1 < complexity2) { + CG_outputRepr *idUp = LoverMRepr; + CG_outputRepr *c1Repr = ocg->CreateCopy(cRepr); + idUp = ocg->CreateMinus(idUp, c1Repr); + idUp = ocg->CreatePlus(idUp, ocg->CreateInt(stride-1)); + CG_outputRepr *idLow = ocg->CreateInt(stride); + lbRepr = ocg->CreateTimes(ocg->CreateInt(stride), + ocg->CreateIntegerDivide(idUp, idLow)); + lbRepr = ocg->CreatePlus(lbRepr, cRepr); + } + else { + CG_outputRepr *LoverM1Repr = ocg->CreateCopy(LoverMRepr); + CG_outputRepr *imUp = ocg->CreateMinus(cRepr, LoverM1Repr); + CG_outputRepr *imLow = ocg->CreateInt(stride); + CG_outputRepr *intMod = ocg->CreateIntegerMod(imUp, imLow); + lbRepr = ocg->CreatePlus(LoverMRepr, intMod); + } + } + else { + // boundsHitsStride resets variable names + bounds.setup_names(); + lbRepr = outputEasyBoundAsRepr(ocg, bounds, g, v, false, 0, assigned_on_the_fly); + } + } + + return lbRepr; +} + +//----------------------------------------------------------------------------- +// one is -1 for UB +// this function is overloaded should replace the original one +//----------------------------------------------------------------------------- +CG_outputRepr *outputUBasRepr(CG_outputBuilder* ocg, const GEQ_Handle &g, + Relation & bounds, + Variable_ID v, + coef_t /*stride*/, // currently unused + const EQ_Handle &/*strideEQ*/, //currently unused + const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + assert(g.get_coef(v) < 0); + CG_outputRepr* upRepr = outputEasyBoundAsRepr(ocg, bounds, g, v, false, 0, assigned_on_the_fly); + return upRepr; +} + +//----------------------------------------------------------------------------- +// Print the expression for the variable given as v. Works for both +// GEQ's and EQ's, but produces intDiv (not intMod) when v has a nonunit +// coefficient. So it is OK for loop bounds, but for checking stride +// constraints, you want to make sure the coef of v is 1, and insert the +// intMod yourself. +// +// original name is outputEasyBound +//----------------------------------------------------------------------------- +CG_outputRepr* outputEasyBoundAsRepr(CG_outputBuilder* ocg, Relation &bounds, + const Constraint_Handle &g, Variable_ID v, + bool ignoreWC, + int ceiling, + const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + // assert ignoreWC => g is EQ + // rewrite constraint as foo (== or <= or >=) v, return foo as string + + CG_outputRepr* easyBoundRepr = NULL; + + coef_t v_coef = g.get_coef(v); + int v_sign = v_coef > 0 ? 1 : -1; + v_coef *= v_sign; + assert(v_coef > 0); + // foo is (-constraint)/v_sign/v_coef + + int sign_adj = -v_sign; + + //---------------------------------------------------------------------- + // the following generates +- cf*varName + //---------------------------------------------------------------------- + for(Constr_Vars_Iter c2(g, false); c2; c2++) { + if ((*c2).var != v && (!ignoreWC || (*c2).var->kind()!=Wildcard_Var)) { + + coef_t cf = (*c2).coef*sign_adj; + assert(cf != 0); + + CG_outputRepr *varName; + if ((*c2).var->kind() == Wildcard_Var) { + GEQ_Handle h; + if (!findFloorInequality(bounds, (*c2).var, h, v)) { + if (easyBoundRepr != NULL) { + easyBoundRepr->clear(); + delete easyBoundRepr; + } + return NULL; + } + varName = outputEasyBoundAsRepr(ocg, bounds, h, (*c2).var, false, 0, assigned_on_the_fly); + } + else { + varName = outputIdent(ocg, bounds, (*c2).var, assigned_on_the_fly); + } + CG_outputRepr *cfRepr = NULL; + + if (cf > 1) { + cfRepr = ocg->CreateInt(cf); + CG_outputRepr* rbRepr = ocg->CreateTimes(cfRepr, varName); + easyBoundRepr = ocg->CreatePlus(easyBoundRepr, rbRepr); + } + else if (cf < -1) { + cfRepr = ocg->CreateInt(-cf); + CG_outputRepr* rbRepr = ocg->CreateTimes(cfRepr, varName); + easyBoundRepr = ocg->CreateMinus(easyBoundRepr, rbRepr); + } + else if (cf == 1) { + easyBoundRepr = ocg->CreatePlus(easyBoundRepr, varName); + } + else if (cf == -1) { + easyBoundRepr = ocg->CreateMinus(easyBoundRepr, varName); + } + } + } + + if (g.get_const()) { + coef_t cf = g.get_const()*sign_adj; + assert(cf != 0); + if (cf > 0) { + easyBoundRepr = ocg->CreatePlus(easyBoundRepr, ocg->CreateInt(cf)); + } + else { + easyBoundRepr = ocg->CreateMinus(easyBoundRepr, ocg->CreateInt(-cf)); + } + } + else { + if(easyBoundRepr == NULL) { + easyBoundRepr = ocg->CreateInt(0); + } + } + + if (v_coef > 1) { + assert(ceiling >= 0); + if (ceiling) { + easyBoundRepr= ocg->CreatePlus(easyBoundRepr, ocg->CreateInt(v_coef-1)); + } + easyBoundRepr = ocg->CreateIntegerDivide(easyBoundRepr, ocg->CreateInt(v_coef)); + } + + return easyBoundRepr; +} + + +//---------------------------------------------------------------------------- +// Translate inequality constraints to loop or assignment. +// if return.second is true, return.first is loop structure, +// otherwise it is assignment. +// ---------------------------------------------------------------------------- +std::pair<CG_outputRepr *, bool> outputBounds(CG_outputBuilder* ocg, const Relation &bounds, Variable_ID v, int indent, Relation &enforced, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + Relation b = copy(bounds); + Conjunct *c = b.query_DNF()->single_conjunct(); + + // Elaborate stride simplification which is complementary to gist function + // since we further target the specific loop variable. -- by chun 08/07/2008 + Relation r1 = Relation::True(b.n_set()), r2 = Relation::True(b.n_set()); + for (EQ_Iterator ei(c); ei; ei++) { + if ((*ei).get_coef(v) != 0 && (*ei).has_wildcards()) { // stride condition found + coef_t sign; + if ((*ei).get_coef(v) > 0) + sign = 1; + else + sign = -1; + + coef_t stride = 0; + for (Constr_Vars_Iter cvi(*ei, true); cvi; cvi++) + if ((*cvi).var->kind() == Wildcard_Var) { + stride = abs((*cvi).coef); + break; + } + + // check if stride hits lower bound + bool found_match = false; + if (abs((*ei).get_coef(v)) != 1) { // expensive matching for non-clean stride condition + coef_t d = stride / gcd(abs((*ei).get_coef(v)), stride); + Relation r3 = Relation::True(b.n_set()); + r3.and_with_EQ(*ei); + + for (GEQ_Iterator gi(c); gi; gi++) { + if ((*gi).get_coef(v) == 1 && !(*gi).has_wildcards()) { + Relation r4(b.n_set()); + F_And *f_root = r4.add_and(); + Stride_Handle h = f_root->add_stride(d); + + for (Constr_Vars_Iter cvi(*gi); cvi; cvi++) + switch ((*cvi).var->kind()) { + case Input_Var: { + int pos = (*cvi).var->get_position(); + h.update_coef(r4.set_var(pos), (*cvi).coef); + break; + } + case Global_Var: { + Global_Var_ID g = (*cvi).var->get_global_var(); + Variable_ID v; + if (g->arity() == 0) + v = r4.get_local(g); + else + v = r4.get_local(g, (*cvi).var->function_of()); + h.update_coef(v, (*cvi).coef); + break; + } + default: + fprintf(DebugFile, "can't deal with the variable type in lower bound\n"); + return std::make_pair(static_cast<CG_outputRepr *>(NULL), false); + } + h.update_const((*gi).get_const()); + + Relation r5 = Gist(copy(r3), Intersection(copy(r4), copy(enforced))); + + // replace original stride condition with striding from this lower bound + if (r5.is_obvious_tautology()) { + r1 = Intersection(r1, r4); + found_match = true; + break; + } + } + } + } + else { + for (GEQ_Iterator gi(c); gi; gi++) { + if ((*gi).get_coef(v) == abs((*ei).get_coef(v)) && !(*gi).has_wildcards()) { // potential matching lower bound found + Relation r(b.n_set()); + Stride_Handle h = r.add_and()->add_stride(stride); + + for (Constr_Vars_Iter cvi(*gi); cvi; cvi++) + switch ((*cvi).var->kind()) { + case Input_Var: { + int pos = (*cvi).var->get_position(); + if ((*cvi).var != v) { + int t1 = int_mod((*cvi).coef, stride); + if (t1 != 0) { + coef_t t2 = enforced.query_variable_mod(enforced.set_var(pos), stride); + if (t2 != posInfinity) + h.update_const(t1*t2); + else + h.update_coef(r.set_var(pos), t1); + } + } + else + h.update_coef(r.set_var(pos), (*cvi).coef); + break; + } + case Global_Var: { + Global_Var_ID g = (*cvi).var->get_global_var(); + Variable_ID v; + if (g->arity() == 0) + v = enforced.get_local(g); + else + v = enforced.get_local(g, (*cvi).var->function_of()); + coef_t t = enforced.query_variable_mod(v, stride); + if (t != posInfinity) + h.update_const(t*(*cvi).coef); + else { + Variable_ID v2; + if (g->arity() == 0) + v2 = r.get_local(g); + else + v2 = r.get_local(g, (*cvi).var->function_of()); + h.update_coef(v2, (*cvi).coef); + } + break; + } + default: + fprintf(DebugFile, "can't deal with the variable type in lower bound\n"); + return std::make_pair(static_cast<CG_outputRepr *>(NULL), false); + } + h.update_const((*gi).get_const()); + + bool t = true; + { + Conjunct *c2 = r.query_DNF()->single_conjunct(); + EQ_Handle h2; + for (EQ_Iterator ei2(c2); ei2; ei2++) { + h2 = *ei2; + break; + } + + int sign; + if (h2.get_coef(v) == (*ei).get_coef(v)) + sign = 1; + else + sign = -1; + + t = int_mod(h2.get_const() - sign * (*ei).get_const(), stride) == 0; + + if (t != false) + for (Constr_Vars_Iter cvi(h2); cvi; cvi++) + if ((*cvi).var->kind() != Wildcard_Var && + int_mod((*cvi).coef - sign * (*ei).get_coef((*cvi).var), stride) != 0) { + t = false; + break; + } + + if (t != false) + for (Constr_Vars_Iter cvi(*ei); cvi; cvi++) + if ((*cvi).var->kind() != Wildcard_Var && + int_mod((*cvi).coef - sign * h2.get_coef((*cvi).var), stride) != 0) { + t = false; + break; + } + + } + + if (t) { + // replace original stride condition with striding from this lower bound + F_And *f_root = r1.and_with_and(); + Stride_Handle h = f_root->add_stride(stride); + for (Constr_Vars_Iter cvi(*gi); cvi; cvi++) + switch ((*cvi).var->kind()) { + case Input_Var: { + h.update_coef(r1.set_var((*cvi).var->get_position()), (*cvi).coef); + break; + } + case Global_Var: { + Global_Var_ID g = (*cvi).var->get_global_var(); + Variable_ID v; + if (g->arity() == 0) + v = r1.get_local(g); + else + v = r1.get_local(g, (*cvi).var->function_of()); + h.update_coef(v, (*cvi).coef); + break; + } + default: + fprintf(DebugFile, "can't deal with the variable type in lower bound\n"); + return std::make_pair(static_cast<CG_outputRepr *>(NULL), false); + } + h.update_const((*gi).get_const()); + + found_match = true; + break; + } + } + } + } + + if (!found_match) + r1.and_with_EQ(*ei); + } + else if ((*ei).get_coef(v) == 0) { + Relation r3 = Relation::True(b.n_set()); + r3.and_with_EQ(*ei); + Relation r4 = Gist(r3, copy(enforced)); + if (!r4.is_obvious_tautology()) + r2.and_with_EQ(*ei); + } + else + r2.and_with_EQ(*ei); + } + + // restore remaining inequalities + { + std::map<Variable_ID, Variable_ID> exists_mapping; + F_Exists *fe = r2.and_with_and()->add_exists(); + F_And *f_root = fe->add_and(); + for (GEQ_Iterator gi(c); gi; gi++) { + GEQ_Handle h = f_root->add_GEQ(); + for (Constr_Vars_Iter cvi(*gi); cvi; cvi++) { + Variable_ID v = cvi.curr_var(); + switch (v->kind()) { + case Input_Var: { + int pos = v->get_position(); + h.update_coef(r2.set_var(pos), cvi.curr_coef()); + break; + } + case Exists_Var: + case Wildcard_Var: { + std::map<Variable_ID, Variable_ID>::iterator p = exists_mapping.find(v); + Variable_ID e; + if (p == exists_mapping.end()) { + e = fe->declare(); + exists_mapping[v] = e; + } + else + e = (*p).second; + h.update_coef(e, cvi.curr_coef()); + break; + } + case Global_Var: { + Global_Var_ID g = v->get_global_var(); + Variable_ID v2; + if (g->arity() == 0) + v2 = r2.get_local(g); + else + v2 = r2.get_local(g, v->function_of()); + h.update_coef(v2, cvi.curr_coef()); + break; + } + default: + assert(0); + } + } + h.update_const((*gi).get_const()); + } + } + + // overwrite original bounds + { + r1.simplify(); + r2.simplify(); + Relation b2 = Intersection(r1, r2); + b2.simplify(); + for (int i = 1; i <= b.n_set(); i++) + b2.name_set_var(i, b.set_var(i)->name()); + b2.setup_names(); + b = b2; + c = b.query_DNF()->single_conjunct(); + } + + + // get loop strides + EQ_Handle strideEQ; + bool foundStride = false; // stride that can be translated to loop + bool foundSimpleStride = false; // stride that starts from const value + coef_t step = 1; + int num_stride = 0; + + for (EQ_Iterator ei(c); ei; ei++) { + if ((*ei).get_coef(v) != 0 && (*ei).has_wildcards()) { + num_stride++; + + if (abs((*ei).get_coef(v)) != 1) + continue; + + bool t = true; + coef_t d = 1; + for (Constr_Vars_Iter cvi(*ei); cvi; cvi++) + if ((*cvi).var->kind() == Wildcard_Var) { + assert(d==1); + d = abs((*cvi).coef); + } + else if ((*cvi).var->kind() == Input_Var) { + if ((*cvi).var != v) + t = false; + } + else + t = false; + + if (d > step) { + step = d; + foundSimpleStride = t; + strideEQ = *ei; + foundStride = true; + } + } + } + + // More than one stride or complex stride found, we should move all + // but strideEQ to body's guard condition. alas, not implemented. + if (!(num_stride == 0 || (num_stride == 1 && foundStride))) + return std::make_pair(static_cast<CG_outputRepr *>(NULL), false); + + // get loop bounds + int lower_bounds = 0, upper_bounds = 0; + Tuple<CG_outputRepr *> lbList; + Tuple<CG_outputRepr *> ubList; + coef_t const_lb = negInfinity, const_ub = posInfinity; + for (GEQ_Iterator g(c); g; g++) { + coef_t coef = (*g).get_coef(v); + if (coef == 0) + continue; + else if (coef > 0) { // lower bound + lower_bounds++; + if ((*g).is_const(v) && !foundStride) { + //no variables but v in constr + coef_t L,m; + L = -((*g).get_const()); + + m = (*g).get_coef(v); + coef_t sb = (int) (ceil(((float) L) /m)); + set_max(const_lb, sb); + } + else if ((*g).is_const(v) && foundSimpleStride) { + // no variables but v in constr + //make LB fit the stride constraint + coef_t L,m,s,c; + L = -((*g).get_const()); + m = (*g).get_coef(v); + s = step; + c = strideEQ.get_const(); + coef_t sb = (s * (int) (ceil( (float) (L - (c * m)) /(s*m))))+ c; + set_max(const_lb, sb); + } + else + lbList.append(outputLBasRepr(ocg, *g, b, v, step, strideEQ, enforced, assigned_on_the_fly)); + } + else { // upper bound + upper_bounds++; + if ((*g).is_const(v)) { + // no variables but v in constraint + set_min(const_ub,-(*g).get_const()/(*g).get_coef(v)); + } + else + ubList.append(outputUBasRepr(ocg, *g, b, v, step, strideEQ, assigned_on_the_fly)); + } + } + + CG_outputRepr *lbRepr = NULL; + CG_outputRepr *ubRepr = NULL; + if (const_lb != negInfinity) + lbList.append(ocg->CreateInt(const_lb)); + if (lbList.size() > 1) + lbRepr = ocg->CreateInvoke("max", lbList); + else if (lbList.size() == 1) + lbRepr = lbList[1]; + + //protonu + if(fillInBounds && lbList.size() == 1 && const_lb != negInfinity) + lowerBoundForLevel = const_lb; + //end-protonu + + if (const_ub != posInfinity) + ubList.append(ocg->CreateInt(const_ub)); + if (ubList.size() > 1) + ubRepr = ocg->CreateInvoke("min", ubList); + else if (ubList.size() == 1) + ubRepr = ubList[1]; + + //protonu + if(fillInBounds && const_ub != posInfinity) + upperBoundForLevel = const_ub; + //end-protonu + + if (upper_bounds == 0 || lower_bounds == 0) { + return std::make_pair(static_cast<CG_outputRepr *>(NULL), false); + } + else { + // bookkeeping catched constraints in new_knwon + F_Exists *fe = enforced.and_with_and()->add_exists(); + F_And *f_root = fe->add_and(); + std::map<Variable_ID, Variable_ID> exists_mapping; + std::stack<std::pair<GEQ_Handle, Variable_ID> > floor_geq_stack; + std::set<Variable_ID> floor_var_set; + + if (foundStride) { + EQ_Handle h = f_root->add_EQ(); + for (Constr_Vars_Iter cvi(strideEQ); cvi; cvi++) + switch ((*cvi).var->kind()) { + case Input_Var: { + int pos = (*cvi).var->get_position(); + h.update_coef(enforced.set_var(pos), (*cvi).coef); + break; + } + case Exists_Var: + case Wildcard_Var: { + std::map<Variable_ID, Variable_ID>::iterator p = exists_mapping.find((*cvi).var); + Variable_ID e; + if (p == exists_mapping.end()) { + e = fe->declare(); + exists_mapping[(*cvi).var] = e; + } + else + e = (*p).second; + h.update_coef(e, (*cvi).coef); + break; + } + case Global_Var: { + Global_Var_ID g = (*cvi).var->get_global_var(); + Variable_ID e; + if (g->arity() == 0) + e = enforced.get_local(g); + else + e = enforced.get_local(g, (*cvi).var->function_of()); + h.update_coef(e, (*cvi).coef); + break; + } + default: + assert(0); + } + h.update_const(strideEQ.get_const()); + } + + for (GEQ_Iterator gi(c); gi; gi++) + if ((*gi).get_coef(v) != 0) { + GEQ_Handle h = f_root->add_GEQ(); + for (Constr_Vars_Iter cvi(*gi); cvi; cvi++) + switch ((*cvi).var->kind()) { + case Input_Var: { + int pos = (*cvi).var->get_position(); + h.update_coef(enforced.set_var(pos), (*cvi).coef); + break; + } + case Exists_Var: + case Wildcard_Var: { + std::map<Variable_ID, Variable_ID>::iterator p = exists_mapping.find((*cvi).var); + Variable_ID e; + if (p == exists_mapping.end()) { + e = fe->declare(); + exists_mapping[(*cvi).var] = e; + } + else + e = (*p).second; + h.update_coef(e, (*cvi).coef); + + if (floor_var_set.find((*cvi).var) == floor_var_set.end()) { + GEQ_Handle h2; + findFloorInequality(b, (*cvi).var, h2, v); + floor_geq_stack.push(std::make_pair(h2, (*cvi).var)); + floor_var_set.insert((*cvi).var); + } + break; + } + case Global_Var: { + Global_Var_ID g = (*cvi).var->get_global_var(); + Variable_ID e; + if (g->arity() == 0) + e = enforced.get_local(g); + else + e = enforced.get_local(g, (*cvi).var->function_of()); + h.update_coef(e, (*cvi).coef); + break; + } + default: + assert(0); + } + h.update_const((*gi).get_const()); + } + + // add floor definition involving variables appeared in bounds + while (!floor_geq_stack.empty()) { + std::pair<GEQ_Handle, Variable_ID> p = floor_geq_stack.top(); + floor_geq_stack.pop(); + + GEQ_Handle h1 = f_root->add_GEQ(); + GEQ_Handle h2 = f_root->add_GEQ(); + for (Constr_Vars_Iter cvi(p.first); cvi; cvi++) { + switch ((*cvi).var->kind()) { + case Input_Var: { + int pos = (*cvi).var->get_position(); + h1.update_coef(enforced.input_var(pos), (*cvi).coef); + h2.update_coef(enforced.input_var(pos), -(*cvi).coef); + break; + } + case Exists_Var: + case Wildcard_Var: { + std::map<Variable_ID, Variable_ID>::iterator p2 = exists_mapping.find((*cvi).var); + Variable_ID e; + if (p2 == exists_mapping.end()) { + e = fe->declare(); + exists_mapping[(*cvi).var] = e; + } + else + e = (*p2).second; + h1.update_coef(e, (*cvi).coef); + h2.update_coef(e, -(*cvi).coef); + + if (floor_var_set.find((*cvi).var) == floor_var_set.end()) { + GEQ_Handle h3; + findFloorInequality(b, (*cvi).var, h3, v); + floor_geq_stack.push(std::make_pair(h3, (*cvi).var)); + floor_var_set.insert((*cvi).var); + } + break; + } + case Global_Var: { + Global_Var_ID g = (*cvi).var->get_global_var(); + Variable_ID e; + if (g->arity() == 0) + e = enforced.get_local(g); + else + e = enforced.get_local(g, (*cvi).var->function_of()); + h1.update_coef(e, (*cvi).coef); + h2.update_coef(e, -(*cvi).coef); + break; + } + default: + assert(0); + } + } + h1.update_const(p.first.get_const()); + h2.update_const(-p.first.get_const()); + h2.update_const(-p.first.get_coef(p.second)-1); + } + enforced.simplify(); + + CG_outputRepr *stRepr = NULL; + if (step != 1) + stRepr = ocg->CreateInt(abs(step)); + CG_outputRepr *indexRepr = outputIdent(ocg, b, v, assigned_on_the_fly); + CG_outputRepr *ctrlRepr = ocg->CreateInductive(indexRepr, lbRepr, ubRepr, stRepr); + + return std::make_pair(ctrlRepr, true); + } +} + + +Relation project_onto_levels(Relation R, int last_level, bool wildcards) { + assert(last_level >= 0 && R.is_set() && last_level <= R.n_set()); + if (last_level == R.n_set()) return R; + + int orig_vars = R.n_set(); + int num_projected = orig_vars - last_level; + R = Extend_Set(R,num_projected + ); // Project out vars numbered > last_level + Mapping m1 = Mapping::Identity(R.n_set()); // now orig_vars+num_proj + + for(int i=last_level+1; i <= orig_vars; i++) { + m1.set_map(Set_Var, i, Exists_Var, i); + m1.set_map(Set_Var, i+num_projected, Set_Var, i); + } + + MapRel1(R, m1, Comb_Id); + R.finalize(); + R.simplify(); + if (!wildcards) + R = Approximate(R,1); + assert(R.is_set()); + return R; +} + + +// Check if the lower bound already enforces the stride by +// (Where m is coef of v in g and L is the bound on m*v): +// Check if m divides L evenly and Check if this l.bound on v implies strideEQ +bool boundHitsStride(const GEQ_Handle &g, Variable_ID v, + const EQ_Handle &strideEQ, + coef_t /*stride*/, // currently unused + Relation known) { +/* m = coef of v in g; + L = bound on v part of g; +*/ + // Check if m divides L evenly + coef_t m = g.get_coef(v); + Relation test(known.n_set()); + F_Exists *e = test.add_exists(); // g is "L >= mv" + Variable_ID alpha = e->declare(); // want: "l = m alpha" + F_And *a = e->add_and(); + EQ_Handle h = a->add_EQ(); + for(Constr_Vars_Iter I(g,false); I; I++) + if((*I).var != v) { + if((*I).var->kind() != Global_Var) + h.update_coef((*I).var, (*I).coef); + else + h.update_coef(test.get_local((*I).var->get_global_var()), (*I).coef); + } + + h.update_const(g.get_const()); + h.update_coef(alpha,m); // set alpha's coef to m + if (!(Gist(test,copy(known)).is_obvious_tautology())) + return false; + // Check if this lower bound on v implies the strideEQ + Relation boundRel = known; // want: "known and l = m v" + boundRel.and_with_EQ(g); // add in l = mv + Relation strideRel(known.n_set()); + strideRel.and_with_EQ(strideEQ); + return Gist(strideRel, boundRel).is_obvious_tautology(); +} + + +// // Return true if there are no variables in g except wildcards & v +bool isSimpleStride(const EQ_Handle &g, Variable_ID v) { + EQ_Handle gg = g; // should not be necessary, but iterators are + // a bit brain-dammaged + bool is_simple=true; + for(Constr_Vars_Iter cvi(gg, false); cvi && is_simple; cvi++) + is_simple = ((*cvi).coef == 0 || (*cvi).var == v + || (*cvi).var->kind() == Wildcard_Var); + return is_simple; +} + + +int countStrides(Conjunct *c, Variable_ID v, EQ_Handle &strideEQ, + bool &simple) { + int strides=0; + for(EQ_Iterator G(c); G; G++) + for(Constr_Vars_Iter I(*G, true); I; I++) + if (((*I).coef != 0) && (*G).get_coef(v) != 0) { + strides++; + simple = isSimpleStride(*G,v); + strideEQ = *G; + break; + } + return strides; +} + +namespace { + +bool hasEQ(Relation r, int level) { + r.simplify(); + Variable_ID v = set_var(level); + Conjunct *s_conj = r.single_conjunct(); + for(EQ_Iterator G(s_conj); G; G++) + if ((*G).get_coef(v)) + return true; + return false; +} + + + +static Relation pickEQ(Relation r, int level) { + r.simplify(); + Variable_ID v = set_var(level); + Conjunct *s_conj = r.single_conjunct(); + for(EQ_Iterator E(s_conj); E; E++) + if ((*E).get_coef(v)) { + Relation test_rel(r.n_set()); + test_rel.and_with_EQ(*E); + return test_rel; + } + assert(0); + return r; +} + +/* pickBound will return an EQ as a GEQ if it finds one */ +Relation pickBound(Relation r, int level, int UB) { + r.simplify(); + Variable_ID v = set_var(level); + Conjunct *s_conj = r.single_conjunct(); + for(GEQ_Iterator G(s_conj); G; G++) { + if ((UB && (*G).get_coef(v) < 0) + || (!UB && (*G).get_coef(v) > 0) ) { + Relation test_rel(r.n_set()); + test_rel.and_with_GEQ(*G); + return test_rel; + } + } + for(EQ_Iterator E(s_conj); E; E++) { + if ((*E).get_coef(v)) { + Relation test_rel(r.n_set()); + test_rel.and_with_GEQ(*E); + if ((UB && (*E).get_coef(v) > 0) + || (!UB && (*E).get_coef(v) < 0) ) + test_rel = Complement(test_rel); + return test_rel; + } + } + assert(0); + return r; +} + +} + +Relation pickOverhead(Relation r, int liftTo) { + r.simplify(); + Conjunct *s_conj = r.single_conjunct(); + for(GEQ_Iterator G(s_conj); G; G++) { + Relation test_rel(r.n_set()); + test_rel.and_with_GEQ(*G); + Variable_ID v; + coef_t pos = -1; + coef_t c= 0; + for(Constr_Vars_Iter cvi(*G, false); cvi; cvi++) + if ((*cvi).coef && (*cvi).var->kind() == Input_Var + && (*cvi).var->get_position() > pos) { + v = (*cvi).var; + pos = (*cvi).var->get_position(); + c = (*cvi).coef; + } +#if 0 + fprintf(DebugFile,"Coef = %d, constraint = %s\n", + c,(const char *)test_rel.print_formula_to_string()); +#endif + return test_rel; + } + for(EQ_Iterator E(s_conj); E; E++) { + assert(liftTo >= 1); + int pos = max((*E).max_tuple_pos(),max_fs_arity(*E)+1); + +/* Pick stride constraints only when the variables with stride are outer + loop variables */ + if ((*E).has_wildcards() && pos < liftTo) { + Relation test_rel(r.n_set()); + test_rel.and_with_EQ(*E); + return test_rel; + } + else if (!(*E).has_wildcards() && pos <= liftTo) { + Relation test_rel(r.n_set()); + test_rel.and_with_EQ(*E); + test_rel.simplify(); + test_rel = EQs_to_GEQs(test_rel,true); + return pickOverhead(test_rel,liftTo); + } + } + if (code_gen_debug>1) { + fprintf(DebugFile,"Could not find overhead:\n"); + r.prefix_print(DebugFile); + } + return Relation::True(r.n_set()); +} + + + +bool hasBound(Relation r, int level, int UB) { + r.simplify(); + Variable_ID v = set_var(level); + Conjunct *s_conj = r.single_conjunct(); + for(GEQ_Iterator G(s_conj); G; G++) { + if (UB && (*G).get_coef(v) < 0) return true; + if (!UB && (*G).get_coef(v) > 0) return true; + } + for(EQ_Iterator E(s_conj); E; E++) { + if ((*E).get_coef(v)) return true; + } + return false; +} + +bool find_any_constraint(int s, int level, Relation &kr, int direction, + Relation &S, bool approx) { + /* If we don't intersect I with restrictions, the combination + of S and restrictions can be unsatisfiable, which means that + the new split node gets pruned away and we still don't have + finite bounds -> infinite recursion. */ + + Relation I = projected_nIS[level][s]; + I = Gist(I,copy(kr)); + if(approx) I = Approximate(I); + if (hasBound(I,level,direction)) { + Relation pickfrom; + if(has_nonstride_EQ(I,level)) + pickfrom = pickEQ(I,level); + else + pickfrom = pickBound(I,level,direction); + S = pickOverhead(pickfrom,level); + if(S.is_obvious_tautology()) S = Relation::Null(); + return !S.is_null(); + } + return false; +} + + +bool has_nonstride_EQ(Relation r, int level) { + r.simplify(); + Variable_ID v = set_var(level); + Conjunct *s_conj = r.single_conjunct(); + for(EQ_Iterator G(s_conj); G; G++) + if ((*G).get_coef(v) && !(*G).has_wildcards()) + return true; + return false; +} + + +Relation minMaxOverhead(Relation r, int level) { + r.finalize(); + r.simplify(); + Conjunct *s_conj = r.single_conjunct(); + GEQ_Handle LBs[50],UBs[50]; + int numLBs = 0; + int numUBs = 0; + Variable_ID v = set_var(level); + for(GEQ_Iterator G(s_conj); G; G++) if ((*G).get_coef(v)) { + GEQ_Handle g = *G; + if (g.get_coef(v) > 0) LBs[numLBs++] = g; + else UBs[numUBs++] = g; + } + if (numLBs <= 1 && numUBs <= 1) { + return Relation::True(r.n_set()); + } + Relation r1(r.n_set()); + Relation r2(r.n_set()); + if (numLBs > 1) { + // remove a max in lower bound + r1.and_with_GEQ(LBs[0]); + r2.and_with_GEQ(LBs[1]); + r1 = project_onto_levels(Difference(r1,r2),level-1,0); + } + else { + // remove a min in upper bound + r1.and_with_GEQ(UBs[0]); + r2.and_with_GEQ(UBs[1]); + r1 = project_onto_levels(Difference(r1,r2),level-1,0); + } +#if 0 + fprintf(DebugFile,"Testing %s\n",(const char *)r1.print_formula_to_string()); + fprintf(DebugFile,"will removed overhead on bounds of t%d: %s\n",level, + (const char *)r.print_formula_to_string()); +#endif + + return pickOverhead(r1, -1); +} + +std::pair<EQ_Handle, int> find_simplest_assignment(const Relation &R_, Variable_ID v, const std::vector<CG_outputRepr *> &assigned_on_the_fly) { + Relation &R = const_cast<Relation &>(R_); + Conjunct *c = R.single_conjunct(); + + int min_cost = INT_MAX; + EQ_Handle eq; + for (EQ_Iterator ei(c->EQs()); ei; ei++) + if (!(*ei).has_wildcards() && (*ei).get_coef(v) != 0) { + int cost = 0; + + if (abs((*ei).get_coef(v)) != 1) + cost += 4; // divide cost + + int num_var = 0; + for (Constr_Vars_Iter cvi(*ei); cvi; cvi++) + if ((*cvi).var != v) { + num_var++; + if ((*cvi).var->kind() == Global_Var && (*cvi).var->get_global_var()->arity() > 0) { + cost += 10; // function cost + } + if (abs((*cvi).coef) != 1) + cost += 2; // multiply cost + if ((*cvi).var->kind() == Input_Var && assigned_on_the_fly[(*cvi).var->get_position()-1] != NULL) { + cost += 5; // substituted variable cost + } + } + if ((*ei).get_const() != 0) + num_var++; + if (num_var > 1) + cost += num_var - 1; // addition cost + + if (cost < min_cost) { + min_cost = cost; + eq = *ei; + } + } + + return std::make_pair(eq, min_cost); +} + +int max_fs_arity(const Constraint_Handle &c) { + int max_arity=0; + for(Constr_Vars_Iter cv(c); cv; cv++) + if((*cv).var->kind() == Global_Var) + max_arity = max(max_arity,(*cv).var->get_global_var()->arity()); + return max_arity; +} + +} diff --git a/omegalib/code_gen/src/rose_attributes.cc b/omegalib/code_gen/src/rose_attributes.cc new file mode 100644 index 0000000..bb9681c --- /dev/null +++ b/omegalib/code_gen/src/rose_attributes.cc @@ -0,0 +1,183 @@ +#include <code_gen/rose_attributes.h> + +namespace omega { + +CodeInsertionAttribute* getOrCreateCodeInsertionAttribute(SgNode* node) { + CodeInsertionAttribute* attr; + if(node->attributeExists("code_insertion")) + return static_cast<CodeInsertionAttribute*>(node->getAttribute("code_insertion")); + attr = new CodeInsertionAttribute(); + node->setAttribute("code_insertion", attr); + return attr; +} + +void postProcessRoseCodeInsertion(SgProject* proj) { + //generatePDF(*proj); + CodeInsertionVisitor visitor = CodeInsertionVisitor(); + visitor.initialize(); + visitor.traverseInputFiles(proj); + visitor.insertCode(); +} + +// Swap a code insertion from one node (sn) to another (dn) +// -- note that this function does not currently remove the insertion from the sn node +void moveCodeInsertion(SgNode* sn, CodeInsertion* ci, SgNode* dn) { + CodeInsertionAttribute* new_attr; + // TODO in the near future: replace the above statement with 'new_attr = getOrCreateCodeInsertionAttribute(...)' + CodeInsertionAttribute* old_attr = static_cast<CodeInsertionAttribute*>(sn->getAttribute("code_insertion")); + if(dn->attributeExists("code_insertion")) { + new_attr = static_cast<CodeInsertionAttribute*>(dn->getAttribute("code_insertion")); + } + else { + new_attr = new CodeInsertionAttribute(); + dn->setAttribute("code_insertion", new_attr); + } + new_attr->add(ci); +} + +// A function that copies a specific attribute from one node to another +// this function exists to get around a ROSE limitation that does not +// copy attributes +void copyAttribute(std::string attr_name, SgNode* s, SgNode* d) { + if(s->attributeExists(attr_name)) { + d->setAttribute(attr_name,s->getAttribute(attr_name)); + } +} + +// TODO: find all existng attributes and iterate over them instead of doing them +// individually +void copyAttributes(SgNode* s, SgNode* d) { + copyAttribute("code_insertion", s, d); + //...any other attributes... +} + +void CodeInsertionVisitor::initialize() { + this->loop_level = 0; + this->ci_marks = std::vector<CodeInsertionMark*>(); +} + +void CodeInsertionVisitor::markStmt(SgStatement* stmt, CodeInsertion* ci) { + // this check prevents multiple copies of stmts + // -- may be changed in the future + if(!ci->marked) { + CodeInsertionMark* pos = new CodeInsertionMark(); + pos->stmt = stmt; + pos->ci = ci; + this->ci_marks.push_back(pos); + ci->marked = true; + } +} + +// increase loop_level as the visitor descends +void CodeInsertionVisitor::preOrderVisit(SgNode* n) { + if (isSgForStatement(n)) { + this->loop_level++; + } +} + +void CodeInsertionVisitor::postOrderVisit(SgNode* n) { + if(isSgForStatement(n)) { + this->loop_level--; + } + if(isSgStatement(n)) { + if(n->attributeExists("code_insertion")) { + CodeInsertionAttribute *attr = static_cast<CodeInsertionAttribute*>(n->getAttribute("code_insertion")); + for(CodeInsertionPtrListItr itr = attr->begin(); itr != attr->end(); ++itr) { + CodeInsertion *insertion = *itr; + // check loop level -- if it is equivelent, mark statement for insertion + // -- else, move attribute up to parent + if(insertion->loop_level != this->loop_level) { + moveCodeInsertion(n, insertion, n->get_parent()); + } + else { + this->markStmt(isSgStatement(n), insertion); + } + } + } + } +} + +// final stage of algorithm that inserts marked statements +void CodeInsertionVisitor::insertCode() { + for(std::vector<CodeInsertionMark*>::iterator itr = this->ci_marks.begin(); itr != this->ci_marks.end(); ++itr) { + CodeInsertionMark* mark = *itr; + SgScopeStatement* scope = static_cast<SgScopeStatement*>(mark->stmt->get_parent()); + SageInterface::insertStatementBefore(mark->stmt, mark->ci->getStatement(scope)); + } +} + +SgStatement* PragmaInsertion::getStatement(SgScopeStatement* scopeStmt) { + SgStatement* stmt = SageBuilder::buildPragmaDeclaration(this->name); + return stmt; +} + +//SgStatement* MMPrefetchInsertion::getStatement(SgScopeStatement* scopeStmt) { +// const SgName& name = SgName("_mm_prefetch"); +// SgType* rtype = SageBuilder::buildVoidType(); +// SgExpression* arr_arg = SageBuilder::buildVarRefExp(this->arrName); +// SgExpression* hint_arg = SageBuilder::buildShortVal(this->cacheHint); +// SgExprListExp* args = SageBuilder::buildExprListExp(arr_arg,hint_arg); +// SgStatement* stmt = SageBuilder::buildFunctionCallStmt(name, rtype, args, scopeStmt); +// return stmt; +//} + +SgStatement* MMPrefetchInsertion::getStatement(SgScopeStatement* scopeStmt) { + const SgName fname = SgName("_mm_prefetch"); + SgType* rtype = SageBuilder::buildVoidType(); + SgExpression* arr_arg = this->buildArrArg(scopeStmt); + SgExpression* hint_arg = SageBuilder::buildShortVal(this->cacheHint); + SgExprListExp* args = SageBuilder::buildExprListExp(arr_arg, hint_arg); + return SageBuilder::buildFunctionCallStmt(fname, rtype, args, scopeStmt); +} + +SgExpression* MMPrefetchInsertion::buildArrArg(SgScopeStatement* scopeStmt) { + // if there are no index arguments given, just return a variable reference + if(this->indexCount == 0) { + const SgName aname = SgName(this->arrName); + return SageBuilder::buildVarRefExp(aname, scopeStmt); + } + std::vector<SgExpression*> argList = std::vector<SgExpression*>(); + // foreach dimension + for(int i = 0; i < this->indexCount; i++) { + argList.push_back(this->makeIndexExp(i, scopeStmt)); + } + return SageBuilder::buildExprListExp(argList); +} + +SgExpression* MMPrefetchInsertion::makeIndexExp(int dim, SgScopeStatement* scopeStmt) { + //(i + offset) or (offset) or (i) + std::string* indexer = this->indecies.at(dim); + int offset = this->offsets.at(dim); + if(indexer == NULL) { + return SageBuilder::buildIntVal(offset); + } + else { + const SgName name = SgName(*indexer); + SgVarRefExp* iref = SageBuilder::buildVarRefExp(name, scopeStmt); + if(offset == 0) { + return iref; + } + else { + return SageBuilder::buildAddOp(iref, SageBuilder::buildIntVal(offset)); + } + } +} + +void MMPrefetchInsertion::initialize(const std::string& arrName, int hint) { + this->arrName = std::string(arrName); + this->cacheHint = hint; + this->indecies = std::vector<std::string*>(); + this->offsets = std::vector<int>(); + this->indexCount = 0; +} +void MMPrefetchInsertion::addDim(int offset) { + this->offsets.push_back(offset); + this->indecies.push_back(NULL); + this->indexCount++; +} +void MMPrefetchInsertion::addDim(int offset, const std::string& indexer) { + this->offsets.push_back(offset); + this->indecies.push_back(new std::string(indexer)); + this->indexCount++; +} +} diff --git a/omegalib/code_gen/src/tags b/omegalib/code_gen/src/tags new file mode 100644 index 0000000..a69c38b --- /dev/null +++ b/omegalib/code_gen/src/tags @@ -0,0 +1,158 @@ +!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ +!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ +!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ +!_TAG_PROGRAM_NAME Exuberant Ctags // +!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ +!_TAG_PROGRAM_VERSION 5.8 // +CG_split CG.cc /^CG_split::CG_split(IntTuple &active, int lvl, const Relation &cond_, CG_result *T, CG_result *F) { $/;" f class:omega::CG_split +CG_stringRepr CG_stringRepr.cc /^CG_stringRepr::CG_stringRepr() {$/;" f class:omega::CG_stringRepr +CG_stringRepr CG_stringRepr.cc /^CG_stringRepr::CG_stringRepr(const std::string& _s) : s(_s) {$/;" f class:omega::CG_stringRepr +CG_suifRepr CG_suifRepr.cc /^CG_suifRepr::CG_suifRepr(): tnl_(NULL), op_() {$/;" f class:omega::CG_suifRepr +CG_suifRepr CG_suifRepr.cc /^CG_suifRepr::CG_suifRepr(operand op): tnl_(NULL), op_(op) {$/;" f class:omega::CG_suifRepr +CG_suifRepr CG_suifRepr.cc /^CG_suifRepr::CG_suifRepr(tree_node_list *tnl): tnl_(tnl),op_() {$/;" f class:omega::CG_suifRepr +CreateAnd CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateAnd(CG_outputRepr* lop, CG_outputRepr* rop) const {$/;" f class:omega::CG_stringBuilder +CreateAnd CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateAnd(CG_outputRepr *lop,$/;" f class:omega::CG_suifBuilder +CreateAssignment CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateAssignment(int indent, $/;" f class:omega::CG_stringBuilder +CreateAssignment CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateAssignment(int, CG_outputRepr *lhs,$/;" f class:omega::CG_suifBuilder +CreateComment CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateComment(int indent, const std::string &commentText) const {$/;" f class:omega::CG_stringBuilder +CreateComment CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateComment(int, const std::string &commentText) const {$/;" f class:omega::CG_suifBuilder +CreateEQ CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateEQ(CG_outputRepr* lop, CG_outputRepr* rop) const {$/;" f class:omega::CG_stringBuilder +CreateEQ CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateEQ(CG_outputRepr *lop,$/;" f class:omega::CG_suifBuilder +CreateGE CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateGE(CG_outputRepr* lop, CG_outputRepr* rop) const {$/;" f class:omega::CG_stringBuilder +CreateGE CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateGE(CG_outputRepr *lop,$/;" f class:omega::CG_suifBuilder +CreateIdent CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateIdent(const std::string &_s) const {$/;" f class:omega::CG_stringBuilder +CreateIdent CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateIdent(const std::string &_s) const {$/;" f class:omega::CG_suifBuilder +CreateIf CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateIf(int indent, CG_outputRepr* guardList,$/;" f class:omega::CG_stringBuilder +CreateIf CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateIf(int, CG_outputRepr *guardList,$/;" f class:omega::CG_suifBuilder +CreateInductive CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateInductive(CG_outputRepr* index,$/;" f class:omega::CG_stringBuilder +CreateInductive CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateInductive(CG_outputRepr *index,$/;" f class:omega::CG_suifBuilder +CreateInt CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateInt(int _i) const {$/;" f class:omega::CG_stringBuilder +CreateInt CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateInt(int _i) const {$/;" f class:omega::CG_suifBuilder +CreateIntegerCeil CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateIntegerCeil(CG_outputRepr* lop, CG_outputRepr* rop) const {$/;" f class:omega::CG_stringBuilder +CreateIntegerDivide CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateIntegerDivide(CG_outputRepr* lop, CG_outputRepr* rop) const {$/;" f class:omega::CG_stringBuilder +CreateIntegerDivide CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateIntegerDivide(CG_outputRepr *lop,$/;" f class:omega::CG_suifBuilder +CreateIntegerMod CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateIntegerMod(CG_outputRepr* lop, CG_outputRepr* rop) const {$/;" f class:omega::CG_stringBuilder +CreateIntegerMod CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateIntegerMod(CG_outputRepr *lop,$/;" f class:omega::CG_suifBuilder +CreateInvoke CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateInvoke(const std::string &fname,$/;" f class:omega::CG_stringBuilder +CreateInvoke CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateInvoke(const std::string &fname,$/;" f class:omega::CG_suifBuilder +CreateLE CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateLE(CG_outputRepr* lop, CG_outputRepr* rop) const {$/;" f class:omega::CG_stringBuilder +CreateLE CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateLE(CG_outputRepr *lop,$/;" f class:omega::CG_suifBuilder +CreateLoop CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateLoop(int indent, CG_outputRepr* control,$/;" f class:omega::CG_stringBuilder +CreateLoop CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateLoop(int, CG_outputRepr *control,$/;" f class:omega::CG_suifBuilder +CreateMinus CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateMinus(CG_outputRepr* lop, CG_outputRepr* rop) const {$/;" f class:omega::CG_stringBuilder +CreateMinus CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateMinus(CG_outputRepr *lop,$/;" f class:omega::CG_suifBuilder +CreatePlaceHolder CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreatePlaceHolder(int indent, CG_outputRepr *stmt,$/;" f class:omega::CG_stringBuilder +CreatePlaceHolder CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreatePlaceHolder (int, CG_outputRepr *stmt,$/;" f class:omega::CG_suifBuilder +CreatePlus CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreatePlus(CG_outputRepr* lop, CG_outputRepr* rop) const {$/;" f class:omega::CG_stringBuilder +CreatePlus CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreatePlus(CG_outputRepr *lop,$/;" f class:omega::CG_suifBuilder +CreateTimes CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::CreateTimes(CG_outputRepr* lop, CG_outputRepr* rop) const {$/;" f class:omega::CG_stringBuilder +CreateTimes CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::CreateTimes(CG_outputRepr *lop,$/;" f class:omega::CG_suifBuilder +Dump CG_stringRepr.cc /^void CG_stringRepr::Dump() const {$/;" f class:omega::CG_stringRepr +Dump CG_suifRepr.cc /^void CG_suifRepr::Dump() const {$/;" f class:omega::CG_suifRepr +DumpToFile CG_stringRepr.cc /^void CG_stringRepr::DumpToFile(FILE *fp) const {$/;" f class:omega::CG_stringRepr +DumpToFile CG_suifRepr.cc /^void CG_suifRepr::DumpToFile(FILE *fp) const {$/;" f class:omega::CG_suifRepr +GetCode CG_suifRepr.cc /^tree_node_list* CG_suifRepr::GetCode() const {$/;" f class:omega::CG_suifRepr +GetExpression CG_suifRepr.cc /^operand CG_suifRepr::GetExpression() const {$/;" f class:omega::CG_suifRepr +GetIndentSpaces CG_stringBuilder.cc /^std::string GetIndentSpaces(int indent) {$/;" f namespace:omega +GetString CG_stringBuilder.cc /^std::string GetString(CG_outputRepr* repr) {$/;" f namespace:omega +GetString CG_stringRepr.cc /^std::string CG_stringRepr::GetString() const { $/;" f class:omega::CG_stringRepr +JunkStaticInit code_gen.cc /^class JunkStaticInit{ public: JunkStaticInit(){ checkLoopLevel=0; fillInBounds=false;} };$/;" c namespace:omega file: +JunkStaticInit code_gen.cc /^class JunkStaticInit{ public: JunkStaticInit(){ checkLoopLevel=0; fillInBounds=false;} };$/;" f class:omega::JunkStaticInit +MMGenerateCode code_gen.cc /^CG_outputRepr* MMGenerateCode(CG_outputBuilder* ocg, RelTuple &T, SetTuple &old_IS, $/;" f namespace:omega +MMGenerateCode code_gen.cc /^CG_outputRepr* MMGenerateCode(CG_outputBuilder* ocg, RelTuple &T, SetTuple &old_IS, const Tuple<CG_outputRepr *> &stmt_content, Relation &known, int effort) {$/;" f namespace:omega +MMGenerateCode code_gen.cc /^std::string MMGenerateCode(RelTuple &T, SetTuple &old_IS, Relation &known, int effort) {$/;" f namespace:omega +SafeguardString CG_stringBuilder.cc /^static std::string SafeguardString(const std::string &s, char op) {$/;" f namespace:omega +StmtListAppend CG_stringBuilder.cc /^CG_outputRepr* CG_stringBuilder::StmtListAppend(CG_outputRepr* list1, CG_outputRepr* list2) const {$/;" f class:omega::CG_stringBuilder +StmtListAppend CG_suifBuilder.cc /^CG_outputRepr* CG_suifBuilder::StmtListAppend(CG_outputRepr *list1, $/;" f class:omega::CG_suifBuilder +boundHitsStride output_repr.cc /^bool boundHitsStride(const GEQ_Handle &g, Variable_ID v,$/;" f namespace:omega +checkLoopLevel code_gen.cc /^int checkLoopLevel;$/;" m namespace:omega file: +clear CG_suifRepr.cc /^void CG_suifRepr::clear() {$/;" f class:omega::CG_suifRepr +clone CG_stringRepr.cc /^CG_outputRepr* CG_stringRepr::clone() {$/;" f class:omega::CG_stringRepr +clone CG_suifRepr.cc /^CG_outputRepr* CG_suifRepr::clone() {$/;" f class:omega::CG_suifRepr +code_gen_debug code_gen.cc /^int code_gen_debug=0;$/;" m namespace:omega file: +countStrides output_repr.cc /^int countStrides(Conjunct *c, Variable_ID v, EQ_Handle &strideEQ, $/;" f namespace:omega +create_stride_on_bound output_repr.cc /^Relation create_stride_on_bound(int n, const std::map<Variable_ID, coef_t> &lb, coef_t stride) {$/;" f namespace:omega::__anon2 +exit_code_gen CG_suifBuilder.cc /^void exit_code_gen(void) {$/;" f namespace:omega +extract_function_symbols code_gen.cc /^RelTuple extract_function_symbols(SetTuple &sets) {$/;" f namespace:omega +fillInBounds code_gen.cc /^bool fillInBounds;$/;" m namespace:omega file: +filter_function_symbols code_gen.cc /^SetTuple filter_function_symbols(SetTuple &sets, bool keep_fs){$/;" f namespace:omega +findFloorInequality output_repr.cc /^bool findFloorInequality(Relation &r, Variable_ID v, GEQ_Handle &h, Variable_ID excluded) {$/;" f namespace:omega +findOverhead CG.cc /^Relation CG_leaf::findOverhead(int liftTo) {$/;" f class:omega::CG_leaf +findOverhead CG.cc /^Relation CG_loop::findOverhead(int liftTo) {$/;" f class:omega::CG_loop +findOverhead CG.cc /^Relation CG_split::findOverhead(int liftTo) {$/;" f class:omega::CG_split +find_any_constraint output_repr.cc /^bool find_any_constraint(int s, int level, Relation &kr, int direction,$/;" f namespace:omega +find_simplest_assignment output_repr.cc /^std::pair<EQ_Handle, int> find_simplest_assignment(const Relation &R_, Variable_ID v, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f namespace:omega +force_finite_bounds CG.cc /^CG_result * CG_loop::force_finite_bounds() {$/;" f class:omega::CG_loop +force_finite_bounds CG.cc /^CG_result * CG_split::force_finite_bounds() {$/;" f class:omega::CG_split +gen_recursive code_gen.cc /^CG_result *gen_recursive(int level, IntTuple &isActive) {$/;" f namespace:omega +get_stride output_repr.cc /^void get_stride(const Constraint_Handle &h, Variable_ID &wc, coef_t &step){$/;" f namespace:omega::__anon1 +greatest_common_step output_repr.cc /^Relation greatest_common_step(const Tuple<Relation> &I, const Tuple<int> &active, int level, const Relation &known) {$/;" f namespace:omega +hasBound output_repr.cc /^bool hasBound(Relation r, int level, int UB) {$/;" f namespace:omega +hasEQ output_repr.cc /^bool hasEQ(Relation r, int level) {$/;" f namespace:omega::__anon3 +has_nonstride_EQ output_repr.cc /^bool has_nonstride_EQ(Relation r, int level) {$/;" f namespace:omega +hoistGuard CG.cc /^Relation CG_leaf::hoistGuard() {$/;" f class:omega::CG_leaf +hoistGuard CG.cc /^Relation CG_loop::hoistGuard() {$/;" f class:omega::CG_loop +hoistGuard CG.cc /^Relation CG_split::hoistGuard() {$/;" f class:omega::CG_split +init_code_gen CG_suifBuilder.cc /^void init_code_gen(int&, char* []) {$/;" f namespace:omega +isSimpleStride output_repr.cc /^bool isSimpleStride(const EQ_Handle &g, Variable_ID v) {$/;" f namespace:omega +junkInitInstance__ code_gen.cc /^static JunkStaticInit junkInitInstance__;$/;" m namespace:omega file: +k_ocg_comment CG_suifBuilder.cc /^char *k_ocg_comment;$/;" m namespace:omega file: +last_level code_gen.cc /^int last_level;\/\/ Should not be global, but it is.$/;" m namespace:omega file: +libcode_gen_suif_string CG_suifBuilder.cc /^const char *libcode_gen_suif_string = "";$/;" m namespace:omega file: +libcode_gen_ver_string CG_suifBuilder.cc /^const char *libcode_gen_ver_string = "";$/;" m namespace:omega file: +libcode_gen_who_string CG_suifBuilder.cc /^const char *libcode_gen_who_string = "";$/;" m namespace:omega file: +liftOverhead CG.cc /^CG_result * CG_loop::liftOverhead(int depth) {$/;" f class:omega::CG_loop +liftOverhead CG.cc /^CG_result * CG_split::liftOverhead(int depth) {$/;" f class:omega::CG_split +loopIdxNames code_gen.cc /^Tuple< Tuple<std::string> > loopIdxNames;\/\/per stmt$/;" m namespace:omega file: +lowerBoundForLevel code_gen.cc /^int lowerBoundForLevel;$/;" m namespace:omega file: +max_fs_arity output_repr.cc /^int max_fs_arity(const Constraint_Handle &c) {$/;" f namespace:omega +minMaxOverhead output_repr.cc /^Relation minMaxOverhead(Relation r, int level) {$/;" f namespace:omega +new_IS code_gen.cc /^SetTuple new_IS;$/;" m namespace:omega file: +omega CG.cc /^namespace omega {$/;" n file: +omega CG_stringBuilder.cc /^namespace omega {$/;" n file: +omega CG_stringRepr.cc /^namespace omega {$/;" n file: +omega CG_suifBuilder.cc /^namespace omega {$/;" n file: +omega CG_suifRepr.cc /^namespace omega {$/;" n file: +omega code_gen.cc /^namespace omega {$/;" n file: +omega output_repr.cc /^namespace omega {$/;" n file: +outputAssignment output_repr.cc /^std::pair<CG_outputRepr *, bool> outputAssignment(CG_outputBuilder *ocg, const Relation &R_, Variable_ID v, Relation &enforced, CG_outputRepr *&if_repr, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f namespace:omega +outputBounds output_repr.cc /^std::pair<CG_outputRepr *, bool> outputBounds(CG_outputBuilder* ocg, const Relation &bounds, Variable_ID v, int indent, Relation &enforced, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f namespace:omega +outputEasyBoundAsRepr output_repr.cc /^CG_outputRepr* outputEasyBoundAsRepr(CG_outputBuilder* ocg, Relation &bounds,$/;" f namespace:omega +outputGuard output_repr.cc /^CG_outputRepr *outputGuard(CG_outputBuilder* ocg, const Relation &guards_in, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f namespace:omega +outputIdent output_repr.cc /^CG_outputRepr* outputIdent(CG_outputBuilder* ocg, const Relation &R_, Variable_ID v, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f namespace:omega +outputLBasRepr output_repr.cc /^CG_outputRepr *outputLBasRepr(CG_outputBuilder* ocg, const GEQ_Handle &g, $/;" f namespace:omega +outputStatement output_repr.cc /^CG_outputRepr* outputStatement(CG_outputBuilder *ocg, CG_outputRepr *stmt, int indent, const Relation &mapping_, const Relation &known_, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f namespace:omega +outputSubstitution output_repr.cc /^Tuple<CG_outputRepr*> outputSubstitution(CG_outputBuilder* ocg, const Relation &R_, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f namespace:omega +outputUBasRepr output_repr.cc /^CG_outputRepr *outputUBasRepr(CG_outputBuilder* ocg, const GEQ_Handle &g, $/;" f namespace:omega +output_EQ_strides output_repr.cc /^CG_outputRepr *output_EQ_strides(CG_outputBuilder* ocg, const Relation &guards_in, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f namespace:omega +output_GEQ_strides output_repr.cc /^CG_outputRepr *output_GEQ_strides(CG_outputBuilder* ocg, const Relation &guards_in, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f namespace:omega +output_as_guard output_repr.cc /^CG_outputRepr* output_as_guard(CG_outputBuilder* ocg, const Relation &guards_in, Constraint_Handle e, bool is_equality, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f namespace:omega +pickBound output_repr.cc /^Relation pickBound(Relation r, int level, int UB) {$/;" f namespace:omega::__anon3 +pickEQ output_repr.cc /^static Relation pickEQ(Relation r, int level) {$/;" f namespace:omega::__anon3 +pickOverhead output_repr.cc /^Relation pickOverhead(Relation r, int liftTo) {$/;" f namespace:omega +print CG.cc /^std::string CG_result::print(int indent) {$/;" f class:omega::CG_result +printRepr CG.cc /^CG_outputRepr* CG_leaf::printRepr(CG_outputBuilder* ocg, int indent, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f class:omega::CG_leaf +printRepr CG.cc /^CG_outputRepr* CG_loop::printRepr(CG_outputBuilder* ocg, int indent, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f class:omega::CG_loop +printRepr CG.cc /^CG_outputRepr* CG_split::printRepr(CG_outputBuilder* ocg, int indent, const std::vector<CG_outputRepr *> &assigned_on_the_fly) {$/;" f class:omega::CG_split +printStructure CG.cc /^std::string CG_leaf::printStructure(int) {$/;" f class:omega::CG_leaf +printStructure CG.cc /^std::string CG_loop::printStructure(int indent) {$/;" f class:omega::CG_loop +printStructure CG.cc /^std::string CG_split::printStructure(int indent) {$/;" f class:omega::CG_split +project_onto_levels output_repr.cc /^Relation project_onto_levels(Relation R, int last_level, bool wildcards) {$/;" f namespace:omega +projected_nIS code_gen.cc /^SetTupleTuple projected_nIS;$/;" m namespace:omega file: +recompute CG.cc /^CG_result * CG_loop::recompute(const Relation &k, const Relation &r) {$/;" f class:omega::CG_loop +recompute CG.cc /^CG_result * CG_split::recompute(const Relation &k, const Relation &r) {$/;" f class:omega::CG_split +recompute CG.cc /^CG_result* CG_leaf::recompute(const Relation &k, const Relation &r) {$/;" f class:omega::CG_leaf +removeGuard CG.cc /^void CG_leaf::removeGuard() {$/;" f class:omega::CG_leaf +smtNonSplitLevels code_gen.cc /^Tuple< IntTuple > smtNonSplitLevels;$/;" m namespace:omega file: +statementInfo code_gen.cc /^Tuple<CG_outputRepr *> statementInfo;$/;" m namespace:omega file: +stmtForLoopCheck code_gen.cc /^int stmtForLoopCheck;$/;" m namespace:omega file: +strip_function_symbols code_gen.cc /^RelTuple strip_function_symbols(SetTuple &sets) {$/;" f namespace:omega +substitute CG_suifBuilder.cc /^bool substitute(instruction *in, var_sym *sym, operand expr, base_symtab *st) {$/;" f namespace:omega +substitute CG_suifBuilder.cc /^bool substitute(tree_node *tn, var_sym *sym, operand expr, base_symtab *st) {$/;" f namespace:omega +substitute CG_suifBuilder.cc /^bool substitute(tree_node_list *tnl, var_sym *sym, operand expr,$/;" f namespace:omega +syncs code_gen.cc /^std::vector< std::pair<int, std::string> > syncs;$/;" m namespace:omega file: +transformations code_gen.cc /^RelTuple transformations;$/;" m namespace:omega file: +upperBoundForLevel code_gen.cc /^int upperBoundForLevel;$/;" m namespace:omega file: +var_substitution_threshold output_repr.cc /^int var_substitution_threshold = 4;$/;" m namespace:omega file: +~CG_stringRepr CG_stringRepr.cc /^CG_stringRepr::~CG_stringRepr() {$/;" f class:omega::CG_stringRepr +~CG_suifRepr CG_suifRepr.cc /^CG_suifRepr::~CG_suifRepr() {$/;" f class:omega::CG_suifRepr |