Exemplo n.º 1
0
static void insn_xor_(bdd r0[XO_NUM_BITS], bdd r1[XO_NUM_BITS], bdd f[XO_NUM_FLAGS])
{
  for(int i = 0; i < XO_NUM_BITS; ++i)
    r0[i] = r0[i] ^ r1[i];

  f[0] = bdd_false();
  f[1] = bdd_false();
  f[2] = pf_(r0);
  f[3] = sf_(r0);
  f[4] = zf_(r0);
}
Exemplo n.º 2
0
static void insn_dec_(bdd r0[XO_NUM_BITS], bdd r1[XO_NUM_BITS], bdd f[XO_NUM_FLAGS])
{
  bdd c[XO_NUM_BITS];

  c[0] = !r0[0];
  r0[0] = !r0[0];

  for(int i = 1; i < XO_NUM_BITS; ++i)
  {
    c[i] = !r0[i] & c[i-1];
    r0[i] = r0[i] ^ c[i-1];
  }

  f[1] = c[30] ^ c[31];
  f[2] = pf_(r0);
  f[3] = sf_(r0);
  f[4] = zf_(r0);
}
Exemplo n.º 3
0
static void insn_cmp_(bdd r0[XO_NUM_BITS], bdd r1[XO_NUM_BITS], bdd f[XO_NUM_FLAGS])
{
  bdd c[XO_NUM_BITS];
  bdd tmp[XO_NUM_BITS];

  c[0] = !r0[0] & r1[0];
  tmp[0] = r0[0] ^ r1[0];

  for(int i = 1; i < XO_NUM_BITS; ++i)
  {
    c[i] = !r0[i] & r1[i] | !r0[i] & c[i-1] | r1[i] & c[i-1];
    tmp[i] = r0[i] ^ r1[i] ^ c[i-1];
  }

  f[0] = c[31];
  f[1] = c[30] ^ c[31];
  f[2] = pf_(tmp);
  f[3] = sf_(tmp);
  f[4] = zf_(tmp);
}
Exemplo n.º 4
0
 unsigned Select::branch(const Args& args, void* p) const {
     assert(sf_arity() == args.size());
     return sf_(args, p);
 }