Esempio n. 1
0
File: inf_sub.c Progetto: k6s/tek1
void		do_sub(t_nb *res, t_nb *n1, t_nb *n2, t_base *s_base)
{
    int		ps1;
    int		ps2;
    int		pos;

    pos = n1->len + 2;
    ps1 = n1->len;
    ps2 = n2->len;
    while (--ps1 >= 0 && --ps2 >= 0)
    {
        --pos;
        res->nb[pos + 1] += get_base_idx(*(n1->nb + ps1), s_base->base)
                            - get_base_idx(*(n2->nb + ps2), s_base->base);
        handle_ret(res, pos, s_base);
        res->nb[pos] += res->nb[pos + 1] / s_base->base_len;
        res->nb[pos + 1] %= s_base->base_len;
    }
    while (ps1 >= 0 && --pos >= 0)
    {
        res->nb[pos + 1] += get_base_idx(*(n1->nb + ps1), s_base->base);
        handle_ret(res, pos, s_base);
        res->nb[pos] += res->nb[pos + 1] / s_base->base_len;
        res->nb[pos + 1] %= s_base->base_len;
        --ps1;
    }
}
Esempio n. 2
0
bool
test_ret()
{
    op->op = CALL;
    assert(cpu->ip - cpu->mem == 0);            // starts at 0
    handle_call(cpu, op, 20);                   // jump to 20
    assert(*(uint64_t *)(cpu->rp - 8) == 1);    // rp is next after origin

    op->op = RET;
    handle_ret(cpu, op);
    assert(cpu->ip - cpu->mem == 1);            // returned to rp
	return true;
}