3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-08 10:25:18 +00:00

More bugfixes for fp.to_ieee_bv for unspecified input/output.

Relates to #507
This commit is contained in:
Christoph M. Wintersteiger 2016-03-15 14:58:55 +00:00
parent ce64999ee2
commit a9df4a208f

View file

@ -2939,8 +2939,17 @@ void fpa2bv_converter::mk_to_ieee_bv(func_decl * f, unsigned num, expr * const *
x = args[0];
split_fp(x, sgn, e, s);
mk_is_nan(x, x_is_nan);
result = m.mk_ite(x_is_nan, mk_to_ieee_bv_unspecified(m_bv_util.get_bv_size(x)),
m_bv_util.mk_concat(m_bv_util.mk_concat(sgn, e), s));
sort * fp_srt = m.get_sort(x);
unsigned ebits = m_util.get_ebits(fp_srt);
unsigned sbits = m_util.get_sbits(fp_srt);
expr_ref sig_unspec(s, m);
if (sbits > 2)
sig_unspec = m_bv_util.mk_concat(mk_to_ieee_bv_unspecified(sbits - 2),
m_bv_util.mk_numeral(1, 1));
result = m_bv_util.mk_concat(m_bv_util.mk_concat(sgn, e), m.mk_ite(x_is_nan, sig_unspec, s));
}
void fpa2bv_converter::mk_to_bv(func_decl * f, unsigned num, expr * const * args, bool is_signed, expr_ref & result) {