mirror of
https://github.com/Z3Prover/z3
synced 2025-04-15 21:38:44 +00:00
FPA: bugfixes in mul() and abs()
Signed-off-by: Christoph M. Wintersteiger <cwinter@microsoft.com>
This commit is contained in:
parent
bdc675b1df
commit
e5307300de
|
@ -227,7 +227,7 @@ br_status float_rewriter::mk_abs(expr * arg1, expr_ref & result) {
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
sort * s = m().get_sort(arg1);
|
sort * s = m().get_sort(arg1);
|
||||||
result = m().mk_ite(m_util.mk_lt(arg1, m_util.mk_pzero(s)),
|
result = m().mk_ite(m_util.mk_is_sign_minus(arg1),
|
||||||
m_util.mk_uminus(arg1),
|
m_util.mk_uminus(arg1),
|
||||||
arg1);
|
arg1);
|
||||||
return BR_REWRITE2;
|
return BR_REWRITE2;
|
||||||
|
|
|
@ -610,11 +610,11 @@ void fpa2bv_converter::mk_mul(func_decl * f, unsigned num, expr * const * args,
|
||||||
|
|
||||||
expr_ref h_p(m), l_p(m), rbits(m);
|
expr_ref h_p(m), l_p(m), rbits(m);
|
||||||
h_p = m_bv_util.mk_extract(2*sbits-1, sbits, product);
|
h_p = m_bv_util.mk_extract(2*sbits-1, sbits, product);
|
||||||
l_p = m_bv_util.mk_extract(2*sbits-1, sbits, product);
|
l_p = m_bv_util.mk_extract(sbits-1, 0, product);
|
||||||
|
|
||||||
if (sbits >= 4) {
|
if (sbits >= 4) {
|
||||||
expr_ref sticky(m);
|
expr_ref sticky(m);
|
||||||
sticky = m.mk_app(m_bv_util.get_fid(), OP_BREDOR, m_bv_util.mk_extract(sbits-4, 0, l_p));
|
sticky = m.mk_app(m_bv_util.get_fid(), OP_BREDOR, m_bv_util.mk_extract(sbits-4, 0, l_p));
|
||||||
rbits = m_bv_util.mk_concat(m_bv_util.mk_extract(sbits-1, sbits-3, l_p), sticky);
|
rbits = m_bv_util.mk_concat(m_bv_util.mk_extract(sbits-1, sbits-3, l_p), sticky);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2094,11 +2094,11 @@ void fpa2bv_converter::round(sort * s, expr_ref & rm, expr_ref & sgn, expr_ref &
|
||||||
expr * round_sticky[2] = { round, sticky };
|
expr * round_sticky[2] = { round, sticky };
|
||||||
last_or_sticky = m_bv_util.mk_bv_or(2, last_sticky);
|
last_or_sticky = m_bv_util.mk_bv_or(2, last_sticky);
|
||||||
round_or_sticky = m_bv_util.mk_bv_or(2, round_sticky);
|
round_or_sticky = m_bv_util.mk_bv_or(2, round_sticky);
|
||||||
not_round = m_bv_util.mk_bv_not(round);
|
not_round = m_bv_util.mk_bv_not(round);
|
||||||
not_lors = m_bv_util.mk_bv_not(last_or_sticky);
|
not_lors = m_bv_util.mk_bv_not(last_or_sticky);
|
||||||
not_rors = m_bv_util.mk_bv_not(round_or_sticky);
|
not_rors = m_bv_util.mk_bv_not(round_or_sticky);
|
||||||
not_sgn = m_bv_util.mk_bv_not(sgn);
|
not_sgn = m_bv_util.mk_bv_not(sgn);
|
||||||
expr * round_lors[2] = { not_round, not_lors };
|
expr * round_lors[2] = { not_round, not_lors};
|
||||||
expr * pos_args[2] = { sgn, not_rors };
|
expr * pos_args[2] = { sgn, not_rors };
|
||||||
expr * neg_args[2] = { not_sgn, not_rors };
|
expr * neg_args[2] = { not_sgn, not_rors };
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue