summaryrefslogtreecommitdiff
path: root/kernel/rtlil.cc
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2013-11-07 16:53:28 +0100
committerClifford Wolf <clifford@clifford.at>2013-11-07 16:53:28 +0100
commit0e1661f84e99f1d4a487e7a432b05a6cb2071714 (patch)
tree9862950a7c92069d88e590da6d0a97bf7b7eb95f /kernel/rtlil.cc
parented4bcd52e5d7ab466a4bcd87ae787f1ab7c70fb7 (diff)
Fixed type of sign extension in opt_const $eq/$ne handling
Diffstat (limited to 'kernel/rtlil.cc')
-rw-r--r--kernel/rtlil.cc16
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;