|
| Bmv2V1ModelRegisterValue (const IR::Expression *initialValue) |
|
| DECLARE_TYPEINFO (Bmv2V1ModelRegisterValue, IndexMap) |
|
const Bmv2V1ModelRegisterValue * | evaluate (const Model &model, bool doComplete) const override |
|
cstring | getObjectName () const override |
|
| IndexMap (const IR::Expression *initialValue) |
|
| DECLARE_TYPEINFO (IndexMap, TestObject) |
|
const IR::Constant * | getEvaluatedInitialValue () const |
|
const IR::Expression * | getInitialValue () const |
|
const IR::Expression * | getValueAtIndex (const IR::Expression *index) const |
|
std::map< big_int, std::pair< int, const IR::Constant * > > | unravelMap () const |
| Return the "writes" to this index map as a.
|
|
void | writeToIndex (const IR::Expression *index, const IR::Expression *value) |
| Write.
|
|
| TestObject (const TestObject &)=default |
|
| TestObject (TestObject &&)=default |
|
| DECLARE_TYPEINFO (TestObject) |
|
TestObject & | operator= (const TestObject &)=default |
|
TestObject & | operator= (TestObject &&)=default |
|
template<typename T > |
T & | as () |
| Tries to convert the class to type T. A BUG occurs if the cast fails.
|
|
template<typename T > |
const T & | as () const |
| Tries to convert the class to type T. A BUG occurs if the cast fails.
|
|
template<typename T > |
T * | checkedTo () |
| Performs a checked cast. A BUG occurs if the cast fails.
|
|
template<typename T > |
const T * | checkedTo () const |
| Performs a checked cast. A BUG occurs if the cast fails.
|
|
template<typename T > |
bool | is () const noexcept |
|
virtual bool | isA (TypeId typeId) const noexcept=0 |
|
template<typename T > |
const T * | to () const noexcept |
| Same as to , but returns const pointer to T.
|
|
template<typename T > |
T * | to () noexcept |
|
virtual TypeId | typeId () const noexcept=0 |
|
This object tracks the list of writes that have been performed to a particular register. The registerConditionList represents the pair of the index that was written, and the value that was written to this index. When reading from a register, we can furl this list starting from the first index into a set of nested Mux expressions (e.g., "readIndex == savedIndex ?
savedValue : defaultValue", where defaultValue may be another Mux expression). If the read index matches with the index that was saved in this tuple, we return the value, otherwise we unroll the nested MUX expressions. This implicitly handles overwrites too, as the latest writes to a particular index appear the earliest in this unraveling phase..