summaryrefslogtreecommitdiff
path: root/omegalib/code_gen/src
diff options
context:
space:
mode:
Diffstat (limited to 'omegalib/code_gen/src')
-rw-r--r--omegalib/code_gen/src/CG.cc1163
-rw-r--r--omegalib/code_gen/src/CG_roseBuilder.cc1533
-rw-r--r--omegalib/code_gen/src/CG_roseRepr.cc176
-rw-r--r--omegalib/code_gen/src/CG_stringBuilder.cc487
-rw-r--r--omegalib/code_gen/src/CG_stringRepr.cc54
-rw-r--r--omegalib/code_gen/src/CG_suifBuilder.cc678
-rw-r--r--omegalib/code_gen/src/CG_suifRepr.cc81
-rwxr-xr-xomegalib/code_gen/src/CG_utils.cc1735
-rw-r--r--omegalib/code_gen/src/code_gen.cc656
-rwxr-xr-xomegalib/code_gen/src/codegen.cc378
-rw-r--r--omegalib/code_gen/src/cscope.out89773
-rw-r--r--omegalib/code_gen/src/output_repr.cc1931
-rw-r--r--omegalib/code_gen/src/rose_attributes.cc183
-rw-r--r--omegalib/code_gen/src/tags158
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