Example #1
0
static void
set_sdac_reg(int type, int index, int val)
{
    int addr;

    addr = sdac_values[type].funcadr + 4 * index;
    apset(addr, SDAC_ADRADR);
    apset(val, SDAC_DATAADR);
    apset(0, SDAC_ADRADR);
    if (bugmask & ECCBUGBIT){
        fprintf(stderr,"ECC: %s[%d]=%g: addr=0x%x, val=%d=0x%x\n",
                sdac_values[type].label, index, sdac_values[type].values[index],
                addr, val, val);
    }
}
Example #2
0
static void
sdac_to_ap()
{
    int i,j;
    int polarity;
    Sdac *pd;
    for (i=0, pd=sdac_values; i<N_SDAC_VALS; pd++, i++){
        /* Set values over APbus */
        if (i == TOTALSCALE){
            /* Set appropriate polarity bits depending on signs */
            polarity = ((pd->values[2] >= 0)
                        | ((pd->values[1] >= 0) << 1)
                        | ((pd->values[0] >= 0) << 2));
            apset(POLARITY_ADR, SDAC_ADRADR);
            apset(polarity, SDAC_DATAADR);
            apset(0, SDAC_ADRADR);
            /*fprintf(stderr,"Polarity = 0x%x\n", polarity);     */
        }
        for (j=0; j<3; j++){
            set_sdac_reg(i, j, get_sdac_download_val(i, j));
        }
    }
}
Example #3
0
grammar unroll(const grammar& g, const var_set& scope)
{
    grammar::arules_t ap;
    grammar::brules_t bp;
    grammar::bvrules_t bvp;

    var_set vset = var_set_union(all_bound_variables(g), scope);
    set <set_id> apset(nonstd::powerset(std::get <0> (vset)));
    set <set_id> bpset(nonstd::powerset(std::get <1> (vset)));
    set <set_id> bvpset(nonstd::powerset(std::get <2> (vset)));
    set <var_set> pset = nonstd::cart(apset, bpset, bvpset);

    auto nonterminals = g.nonterm_set();
    set <agsymb_t> ant = std::get <0> (nonterminals);
    set <bgsymb_t> bnt = std::get <1> (nonterminals);
    set <bvgsymb_t> bvnt = std::get <2> (nonterminals);

    map <tuple <agsymb_t, var_set>, agsymb_t> antp;
    map <tuple <bgsymb_t, var_set>, bgsymb_t> bntp;
    map <tuple <bvgsymb_t, var_set>, bvgsymb_t> bvntp;

    for (auto& agsymb : nonstd::cart(ant, pset)) {
        auto symb = agsymb_t(antp.size());
        antp[agsymb] = symb;
    }
    for (auto& bgsymb : nonstd::cart(bnt, pset)) {
        auto symb = bgsymb_t(bntp.size());
        bntp[bgsymb] = symb;
    }
    for (auto& bvgsymb : nonstd::cart(bvnt, pset)) {
        auto symb = bvgsymb_t(bvntp.size(), std::get <0> (bvgsymb).len);
        // bvntp[bvgsymb] = symb;
        bvntp.insert(pair <tuple <bvgsymb_t, var_set>, bvgsymb_t> (bvgsymb, symb));
    }

    for (auto& agsymb : nonstd::cart(ant, pset)) {
        auto prebound_vars = var_set_union(std::get <1> (agsymb), scope);
        ap[antp[agsymb]].clear();
        for (auto& rule : g.arules.at(std::get <0> (agsymb))) {
            if (var_set_subset(rule -> expand -> free_variables(), prebound_vars)) {
                // auto rulep = rule -> unroll(antp, bntp, bvntp, std::get <1> (agsymb));
                auto rulep = rule -> unroll(antp, bntp, bvntp, vset, prebound_vars);
                ap[antp[agsymb]].push_back(rulep);
            }
        }
    }

    for (auto& bgsymb : nonstd::cart(bnt, pset)) {
        auto prebound_vars = var_set_union(std::get <1> (bgsymb), scope);
        bp[bntp[bgsymb]].clear();
        for (auto& rule : g.brules.at(std::get <0> (bgsymb))) {
            if (var_set_subset(rule -> expand -> free_variables(), prebound_vars)) {
                // auto rulep = rule -> unroll(antp, bntp, bvntp, std::get <1> (bgsymb));
                auto rulep = rule -> unroll(antp, bntp, bvntp, vset, std::get <1> (bgsymb));
                bp[bntp[bgsymb]].push_back(rulep);
            }
        }
    }

    for (auto& bvgsymb : nonstd::cart(bvnt, pset)) {
        auto prebound_vars = var_set_union(std::get <1> (bvgsymb), scope);
        bvp[bvntp[bvgsymb]].clear();
        for (auto& rule : g.bvrules.at(std::get <0> (bvgsymb))) {
            if (var_set_subset(rule -> expand -> free_variables(), prebound_vars)) {
                // auto rulep = rule -> unroll(antp, bntp, bvntp, std::get <1> (bvgsymb));
                auto rulep = rule -> unroll(antp, bntp, bvntp, vset, std::get <1> (bvgsymb));
                bvp[bvntp[bvgsymb]].push_back(rulep);
            }
        }
    }

    if (auto start = boost::get <agsymb_t> (&g.start)) {
        auto startp = antp.at(make_tuple(*start, scope));
        return grammar(ap, bp, bvp, startp);
    } else if (auto start = boost::get <bgsymb_t> (&g.start)) {
        auto startp = bntp.at(make_tuple(*start, scope));
        return grammar(ap, bp, bvp, startp);
    } else if (auto start = boost::get <bvgsymb_t> (&g.start)) {
        auto startp = bvntp.at(make_tuple(*start, scope));
        return grammar(ap, bp, bvp, startp);
    } else {
        assert (false);
    }

    /* auto startp = nonstd::get(antp, bntp, bvntp, U()).at(make_tuple(start, scope));
    return grammar(ap, bp, bvp, startp); */
}