Exemple #1
0
BRP BRP::operator*(const BRP &other) const {
  // other _must_ be a monomial
  if(other == 0) {
    std::cout << "Multiplication by 0" << std::endl;
    return BRP();
  } else {
    brMonomial mono = *(other.m.begin());
    return (*this) * mono;
  }
}
Exemple #2
0
// write f as f = ax+b, return b
BRP BRP::remainder(const BRP &x) const {
  monomials tmp;
  monomials::const_iterator end = m.end();
  brMonomial xx = x.LT();
  for(monomials::const_iterator it = m.begin(); it != end; it++) {
    brMonomial mono = *it;
    if ( !isDivisibleBy(mono, xx ) ) {
      tmp.push_back(mono); // don't remove doubles, there shouldn't be any
    }
  }
  return BRP(tmp);
}
Exemple #3
0
// compute S polynomial for a pair
BRP sPolynomial(const Pair &pair, const IntermediateBasis &F, int n) {
  FunctionPair fp = FunctionPair(pair, F, n);
  if (!fp.good) {
    return BRP();
  }

  if (pair.i < 0 ) {
    // fp.g = x_i
    // f = ax + b
    BRP b = (fp.f)->remainder(*fp.g);
    return b * *fp.g + b;
  }
  brMonomial f = fp.f->LT();
  brMonomial g = fp.g->LT();
  brMonomial lcm = f | g;
  return *fp.f * (lcm ^ f ) + *fp.g * ( lcm ^ g );
}
Exemple #4
0
  // i < j
  FunctionPair(const Pair &pair, const IntermediateBasis &F, int n )  {
    int i = pair.i;
    int j = pair.j;

    IntermediateBasis::const_iterator end = F.end();
    if(F.find(j) == end || (i >= 0 && F.find(i) == end)) {
      good = false;
    } else {
      good = true;
      if(i < 0) { // working with field polynomial, generate x_(-i)
        //g = BRP( 1 << n-(-i) );
        fieldpolynomial = BRP( 1 << n-(-i) );
        g = &fieldpolynomial;
      } else {
        g = &F.find(i) ->second;
      }
      f = &F.find(j) ->second;
    }
  }
Exemple #5
0
#define BR(a,b) \
      B0, OpX6BtypePaWhaDPr (0, 0x20, 0, a, 0, b, 0), {B2}, PSEUDO, 0, NULL
    {"br.few",		BR (0, 0)},
    {"br",		BR (0, 0)},
    {"br.few.clr",	BR (0, 1)},
    {"br.clr",		BR (0, 1)},
    {"br.many",		BR (1, 0)},
    {"br.many.clr",	BR (1, 1)},
#undef BR

#define BR(a,b,c,d,e)	B0, OpX6BtypePaWhaD (0, a, b, c, d, e), {B2}, EMPTY
#define BRP(a,b,c,d,e)	B0, OpX6BtypePaWhaD (0, a, b, c, d, e), {B2}, PSEUDO, 0, NULL
#define BRT(a,b,c,d,e,f) B0, OpX6BtypePaWhaD (0, a, b, c, d, e), {B2}, f, 0, NULL
    {"br.cond.sptk.few",	BR (0x20, 0, 0, 0, 0)},
    {"br.cond.sptk",		BRP (0x20, 0, 0, 0, 0)},
    {"br.cond.sptk.few.clr",	BR (0x20, 0, 0, 0, 1)},
    {"br.cond.sptk.clr",	BRP (0x20, 0, 0, 0, 1)},
    {"br.cond.spnt.few",	BR (0x20, 0, 0, 1, 0)},
    {"br.cond.spnt",		BRP (0x20, 0, 0, 1, 0)},
    {"br.cond.spnt.few.clr",	BR (0x20, 0, 0, 1, 1)},
    {"br.cond.spnt.clr",	BRP (0x20, 0, 0, 1, 1)},
    {"br.cond.dptk.few",	BR (0x20, 0, 0, 2, 0)},
    {"br.cond.dptk",		BRP (0x20, 0, 0, 2, 0)},
    {"br.cond.dptk.few.clr",	BR (0x20, 0, 0, 2, 1)},
    {"br.cond.dptk.clr",	BRP (0x20, 0, 0, 2, 1)},
    {"br.cond.dpnt.few",	BR (0x20, 0, 0, 3, 0)},
    {"br.cond.dpnt",		BRP (0x20, 0, 0, 3, 0)},
    {"br.cond.dpnt.few.clr",	BR (0x20, 0, 0, 3, 1)},
    {"br.cond.dpnt.clr",	BRP (0x20, 0, 0, 3, 1)},
    {"br.cond.sptk.many",	BR (0x20, 0, 1, 0, 0)},