mirror of
https://github.com/Z3Prover/z3
synced 2025-06-25 15:23:41 +00:00
n/a
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
9b435eda90
commit
40e93d7478
1 changed files with 14 additions and 12 deletions
|
@ -636,29 +636,28 @@ namespace intblast {
|
||||||
}
|
}
|
||||||
case OP_BUDIV: {
|
case OP_BUDIV: {
|
||||||
bv_rewriter_params p(ctx.s().params());
|
bv_rewriter_params p(ctx.s().params());
|
||||||
expr* x = arg(0), * y = arg(1);
|
expr* x = arg(0), * y = umod(e, 1);
|
||||||
if (p.hi_div0())
|
if (p.hi_div0())
|
||||||
r = m.mk_ite(m.mk_eq(y, a.mk_int(0)), a.mk_int(0), a.mk_idiv(x, umod(e, 1)));
|
r = m.mk_ite(m.mk_eq(y, a.mk_int(0)), a.mk_int(0), a.mk_idiv(x, y));
|
||||||
else
|
else
|
||||||
r = a.mk_idiv(x, umod(e, 1));
|
r = a.mk_idiv(x, y);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OP_BUREM: {
|
case OP_BUREM: {
|
||||||
bv_rewriter_params p(ctx.s().params());
|
bv_rewriter_params p(ctx.s().params());
|
||||||
expr* x = arg(0), * y = arg(1);
|
expr* x = arg(0), * y = umod(e, 1);
|
||||||
if (p.hi_div0())
|
if (p.hi_div0())
|
||||||
r = m.mk_ite(m.mk_eq(y, a.mk_int(0)), a.mk_int(0), a.mk_mod(x, umod(e, 1)));
|
r = m.mk_ite(m.mk_eq(y, a.mk_int(0)), a.mk_int(0), y));
|
||||||
else
|
else
|
||||||
r = a.mk_mod(x, umod(e, 1));
|
r = a.mk_mod(x, y);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case OP_BASHR: {
|
||||||
//
|
//
|
||||||
// ashr(x, y)
|
// ashr(x, y)
|
||||||
// if y = k & x >= 0 -> x / 2^k
|
// if y = k & x >= 0 -> x / 2^k
|
||||||
// if y = k & x < 0 -> - (x / 2^k)
|
// if y = k & x < 0 -> - (x / 2^k)
|
||||||
//
|
//
|
||||||
case OP_BASHR: {
|
|
||||||
rational N = rational::power_of_two(bv.get_bv_size(e));
|
rational N = rational::power_of_two(bv.get_bv_size(e));
|
||||||
expr* x = umod(e, 0);
|
expr* x = umod(e, 0);
|
||||||
expr* y = umod(e, 1);
|
expr* y = umod(e, 1);
|
||||||
|
@ -700,6 +699,9 @@ namespace intblast {
|
||||||
r = umod(e->get_arg(0), 0);
|
r = umod(e->get_arg(0), 0);
|
||||||
break;
|
break;
|
||||||
case OP_BCOMP:
|
case OP_BCOMP:
|
||||||
|
bv_expr = e->get_arg(0);
|
||||||
|
r = m.mk_ite(m.mk_eq(umod(bv_expr, 0), umod(bv_expr, 1)), a.mk_int(1), a.mk_int(0));
|
||||||
|
break;
|
||||||
case OP_ROTATE_LEFT:
|
case OP_ROTATE_LEFT:
|
||||||
case OP_ROTATE_RIGHT:
|
case OP_ROTATE_RIGHT:
|
||||||
case OP_EXT_ROTATE_LEFT:
|
case OP_EXT_ROTATE_LEFT:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue