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:
parent
1ca73b0cea
commit
6e45ec6795
2 changed files with 18 additions and 7 deletions
|
|
@ -1 +1 @@
|
|||
Subproject commit 50cca80758d16bf72161d4d2eafb7b7c18ab44ba
|
||||
Subproject commit 423911dc2022418d80a5aadd3ea3a876b352c9fc
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue