3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2026-03-01 11:16:55 +00:00

symfpu: Convert with flags

This commit is contained in:
Krystine Sherwin 2026-02-28 17:24:31 +13:00
parent 1ca73b0cea
commit 6e45ec6795
No known key found for this signature in database
2 changed files with 18 additions and 7 deletions

@ -1 +1 @@
Subproject commit 50cca80758d16bf72161d4d2eafb7b7c18ab44ba
Subproject commit 423911dc2022418d80a5aadd3ea3a876b352c9fc

View file

@ -99,6 +99,7 @@ using symfpu::ite;
using uf = symfpu::unpackedFloat<rtlil_traits>;
using uf_flagged = symfpu::floatWithStatusFlags<rtlil_traits>;
using uf_flagged_ite = symfpu::ite<prop, uf_flagged>;
using ubv_flagged = symfpu::ubvWithStatusFlags<rtlil_traits>;
PRIVATE_NAMESPACE_END
@ -756,15 +757,25 @@ struct SymFpuConvertPass : public Pass {
auto i_bv = input_ubv(ID(i), i_size);
uf i_f = symfpu::unpack<rtlil_traits>(i_format, i_bv);
uf o_ff = symfpu::convertFloatToFloat(i_format, o_format, rounding_mode, i_f);
output_ubv(ID(o_ff), symfpu::pack<rtlil_traits>(o_format, o_ff));
uf_flagged o_ff = symfpu::convertFloatToFloat_flagged(i_format, o_format, rounding_mode, i_f);
output_ubv(ID(o_ff), symfpu::pack<rtlil_traits>(o_format, o_ff.val));
prop i_sNaN(i_f.getNaN() && is_sNaN(i_bv, i_size-i_exp));
output_prop(ID(nv_ff), o_ff.nv || i_sNaN);
output_prop(ID(of_ff), o_ff.of);
output_prop(ID(uf_ff), o_ff.uf);
output_prop(ID(nx_ff), o_ff.nx);
ubv o_default = symfpu::ITE(i_f.getSign(), ubv::zero(o_size), ubv::allOnes(o_size));
ubv o_fi = symfpu::convertFloatToUBV(i_format, rounding_mode, i_f, o_size, o_default);
output_ubv(ID(o_fi), o_fi);
ubv_flagged o_fi = symfpu::convertFloatToUBV_flagged(i_format, rounding_mode, i_f, o_size, o_default);
output_ubv(ID(o_fi), o_fi.val);
output_prop(ID(nv_fi), o_fi.nv);
output_prop(ID(nx_fi), o_fi.nx);
uf o_if = symfpu::convertUBVToFloat<rtlil_traits>(o_format, rounding_mode, i_bv);
output_ubv(ID(o_if), symfpu::pack<rtlil_traits>(o_format, o_if));
uf_flagged o_if = symfpu::convertUBVToFloat_flagged<rtlil_traits>(o_format, rounding_mode, i_bv);
output_ubv(ID(o_if), symfpu::pack<rtlil_traits>(o_format, o_if.val));
output_prop(ID(nv_if), o_if.nv);
output_prop(ID(of_if), o_if.of);
output_prop(ID(nx_if), o_if.nx);
symfpu_mod->fixup_ports();
}