mirror of
https://github.com/Z3Prover/z3
synced 2025-10-10 09:48:05 +00:00
smul no overflow
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
89d6f1c191
commit
8c9835bca6
24 changed files with 376 additions and 63 deletions
|
@ -57,6 +57,8 @@ namespace bv {
|
|||
case OP_SGT: polysat_le<true, false, true>(a); break;
|
||||
|
||||
case OP_BUMUL_NO_OVFL: polysat_umul_noovfl(a); break;
|
||||
case OP_BSMUL_NO_OVFL: polysat_smul_noovfl(a); break;
|
||||
|
||||
case OP_BUDIV_I: polysat_div_rem_i(a, true); break;
|
||||
case OP_BUREM_I: polysat_div_rem_i(a, false); break;
|
||||
|
||||
|
@ -74,7 +76,6 @@ namespace bv {
|
|||
case OP_BSDIV:
|
||||
case OP_BSREM:
|
||||
case OP_BSMOD:
|
||||
case OP_BSMUL_NO_OVFL:
|
||||
case OP_BSMUL_NO_UDFL:
|
||||
case OP_BSDIV_I:
|
||||
case OP_BSREM_I:
|
||||
|
@ -110,6 +111,15 @@ namespace bv {
|
|||
a->m_sc = sc;
|
||||
}
|
||||
|
||||
void solver::polysat_smul_noovfl(app* e) {
|
||||
auto p = expr2pdd(e->get_arg(0));
|
||||
auto q = expr2pdd(e->get_arg(1));
|
||||
auto sc = ~m_polysat.smul_ovfl(p, q);
|
||||
sat::literal lit = expr2literal(e);
|
||||
atom* a = mk_atom(lit.var());
|
||||
a->m_sc = sc;
|
||||
}
|
||||
|
||||
void solver::polysat_div_rem_i(app* e, bool is_div) {
|
||||
auto p = expr2pdd(e->get_arg(0));
|
||||
auto q = expr2pdd(e->get_arg(1));
|
||||
|
|
|
@ -281,6 +281,7 @@ namespace bv {
|
|||
void polysat_num(app* a);
|
||||
void polysat_mkbv(app* a);
|
||||
void polysat_umul_noovfl(app* e);
|
||||
void polysat_smul_noovfl(app* e);
|
||||
void polysat_div_rem_i(app* e, bool is_div);
|
||||
void polysat_div_rem(app* e, bool is_div);
|
||||
void polysat_bit2bool(atom* a, expr* e, unsigned idx);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue