diff options
author | Clifford Wolf <clifford@clifford.at> | 2013-11-07 16:53:28 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2013-11-07 16:53:28 +0100 |
commit | 0e1661f84e99f1d4a487e7a432b05a6cb2071714 (patch) | |
tree | 9862950a7c92069d88e590da6d0a97bf7b7eb95f /kernel/rtlil.cc | |
parent | ed4bcd52e5d7ab466a4bcd87ae787f1ab7c70fb7 (diff) |
Fixed type of sign extension in opt_const $eq/$ne handling
Diffstat (limited to 'kernel/rtlil.cc')
-rw-r--r-- | kernel/rtlil.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc index d64a37bb..4388acb1 100644 --- a/kernel/rtlil.cc +++ b/kernel/rtlil.cc @@ -940,6 +940,22 @@ void RTLIL::SigSpec::extend(int width, bool is_signed) optimize(); } +void RTLIL::SigSpec::extend_un0(int width, bool is_signed) +{ + if (this->width > width) + remove(width, this->width - width); + + if (this->width < width) { + RTLIL::SigSpec padding = this->width > 0 ? extract(this->width - 1, 1) : RTLIL::SigSpec(RTLIL::State::S0); + if (!is_signed) + padding = RTLIL::SigSpec(RTLIL::State::S0); + while (this->width < width) + append(padding); + } + + optimize(); +} + void RTLIL::SigSpec::check() const { int w = 0; |