mirror of
https://github.com/Z3Prover/z3
synced 2025-04-15 13:28:47 +00:00
Fixed bug in fp.to_{s,u}bv
This commit is contained in:
parent
da72911062
commit
8871cb120a
|
@ -3240,10 +3240,7 @@ void fpa2bv_converter::mk_to_bv(func_decl * f, unsigned num, expr * const * args
|
||||||
|
|
||||||
// NaN, Inf, or negative (except -0) -> unspecified
|
// NaN, Inf, or negative (except -0) -> unspecified
|
||||||
expr_ref c1(m), v1(m), unspec_v(m);
|
expr_ref c1(m), v1(m), unspec_v(m);
|
||||||
if (!is_signed)
|
c1 = m.mk_or(x_is_nan, x_is_inf);
|
||||||
c1 = m.mk_or(x_is_nan, x_is_inf, m.mk_and(x_is_neg, m.mk_not(x_is_nzero)));
|
|
||||||
else
|
|
||||||
c1 = m.mk_or(x_is_nan, x_is_inf);
|
|
||||||
mk_to_bv_unspecified(f, num, args, unspec_v);
|
mk_to_bv_unspecified(f, num, args, unspec_v);
|
||||||
v1 = unspec_v;
|
v1 = unspec_v;
|
||||||
dbg_decouple("fpa2bv_to_bv_c1", c1);
|
dbg_decouple("fpa2bv_to_bv_c1", c1);
|
||||||
|
@ -3335,18 +3332,18 @@ void fpa2bv_converter::mk_to_bv(func_decl * f, unsigned num, expr * const * args
|
||||||
dbg_decouple("fpa2bv_to_bv_inc", inc);
|
dbg_decouple("fpa2bv_to_bv_inc", inc);
|
||||||
dbg_decouple("fpa2bv_to_bv_pre_rounded", pre_rounded);
|
dbg_decouple("fpa2bv_to_bv_pre_rounded", pre_rounded);
|
||||||
|
|
||||||
expr_ref in_range(m);
|
pre_rounded = m.mk_ite(x_is_neg, m_bv_util.mk_bv_neg(pre_rounded), pre_rounded);
|
||||||
|
|
||||||
|
expr_ref ll(m), ul(m), in_range(m);
|
||||||
if (!is_signed) {
|
if (!is_signed) {
|
||||||
expr_ref ul(m);
|
ll = m_bv_util.mk_numeral(0, bv_sz+3);
|
||||||
ul = m_bv_util.mk_zero_extend(3, m_bv_util.mk_numeral(-1, bv_sz));
|
ul = m_bv_util.mk_zero_extend(3, m_bv_util.mk_numeral(-1, bv_sz));
|
||||||
in_range = m_bv_util.mk_ule(pre_rounded, ul);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
expr_ref ll(m), ul(m);
|
|
||||||
ll = m_bv_util.mk_sign_extend(3, m_bv_util.mk_concat(bv1, m_bv_util.mk_numeral(0, bv_sz-1)));
|
ll = m_bv_util.mk_sign_extend(3, m_bv_util.mk_concat(bv1, m_bv_util.mk_numeral(0, bv_sz-1)));
|
||||||
ul = m_bv_util.mk_zero_extend(4, m_bv_util.mk_numeral(-1, bv_sz-1));
|
ul = m_bv_util.mk_zero_extend(4, m_bv_util.mk_numeral(-1, bv_sz-1));
|
||||||
in_range = m.mk_and(m_bv_util.mk_sle(ll, pre_rounded), m_bv_util.mk_sle(pre_rounded, ul));
|
|
||||||
}
|
}
|
||||||
|
in_range = m.mk_and(m_bv_util.mk_sle(ll, pre_rounded), m_bv_util.mk_sle(pre_rounded, ul));
|
||||||
dbg_decouple("fpa2bv_to_bv_in_range", in_range);
|
dbg_decouple("fpa2bv_to_bv_in_range", in_range);
|
||||||
|
|
||||||
expr_ref rounded(m);
|
expr_ref rounded(m);
|
||||||
|
|
Loading…
Reference in a new issue