From: Clifford Wolf Date: Fri, 18 Aug 2017 09:40:08 +0000 (+0200) Subject: Add Const methods is_fully_zero(), is_fully_def(), and is_fully_undef() X-Git-Tag: yosys-0.8~343^2~1 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4ba5bd12c612cbe27422cf86fe317d0723b11f30;p=yosys.git Add Const methods is_fully_zero(), is_fully_def(), and is_fully_undef() --- diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc index 93cfef80e..4427303cc 100644 --- a/kernel/rtlil.cc +++ b/kernel/rtlil.cc @@ -161,6 +161,39 @@ std::string RTLIL::Const::decode_string() const return string; } +bool RTLIL::Const::is_fully_zero() const +{ + cover("kernel.rtlil.const.is_fully_zero"); + + for (auto bit : bits) + if (bit != RTLIL::State::S0) + return false; + + return true; +} + +bool RTLIL::Const::is_fully_def() const +{ + cover("kernel.rtlil.const.is_fully_def"); + + for (auto bit : bits) + if (bit != RTLIL::State::S0 && bit != RTLIL::State::S1) + return false; + + return true; +} + +bool RTLIL::Const::is_fully_undef() const +{ + cover("kernel.rtlil.const.is_fully_undef"); + + for (auto bit : bits) + if (bit != RTLIL::State::Sx && bit != RTLIL::State::Sz) + return false; + + return true; +} + void RTLIL::AttrObject::set_bool_attribute(RTLIL::IdString id) { attributes[id] = RTLIL::Const(1); diff --git a/kernel/rtlil.h b/kernel/rtlil.h index 51a3fad6f..be558932f 100644 --- a/kernel/rtlil.h +++ b/kernel/rtlil.h @@ -479,6 +479,10 @@ struct RTLIL::Const inline RTLIL::State &operator[](int index) { return bits.at(index); } inline const RTLIL::State &operator[](int index) const { return bits.at(index); } + bool is_fully_zero() const; + bool is_fully_def() const; + bool is_fully_undef() const; + inline RTLIL::Const extract(int offset, int len = 1, RTLIL::State padding = RTLIL::State::S0) const { RTLIL::Const ret; ret.bits.reserve(len);