Add V3Number::opSetRange
This commit is contained in:
parent
ce75d27c52
commit
49620c4892
|
@ -587,10 +587,6 @@ class IndependentBits final : public DfgVisitor {
|
|||
std::ofstream m_lineCoverageFile; // Line coverage file, just for testing
|
||||
|
||||
// METHODS
|
||||
static void setRangeZero(V3Number& num, uint32_t msb, uint32_t lsb) {
|
||||
for (uint32_t i = lsb; i <= msb; ++i) num.setBit(i, '0');
|
||||
}
|
||||
|
||||
// Retrieve the mask for the given vertex (create it with value 0 if needed)
|
||||
V3Number& mask(const DfgVertex* vtxp) {
|
||||
// Look up (or create) mask for 'vtxp'
|
||||
|
@ -661,7 +657,7 @@ class IndependentBits final : public DfgVisitor {
|
|||
const uint32_t sWidth = srcp->width();
|
||||
V3Number& m = MASK(vtxp);
|
||||
m.opSelInto(MASK(srcp), 0, sWidth);
|
||||
setRangeZero(m, vtxp->width() - 1, sWidth);
|
||||
m.opSetRange(sWidth, vtxp->width() - sWidth, '0');
|
||||
}
|
||||
|
||||
void visit(DfgNot* vtxp) override { //
|
||||
|
@ -691,7 +687,7 @@ class IndependentBits final : public DfgVisitor {
|
|||
shiftedMask.opShiftR(MASK(lhsp), rConstp->num());
|
||||
V3Number& m = MASK(vtxp);
|
||||
m.opSelInto(shiftedMask, 0, width - shiftAmount);
|
||||
setRangeZero(m, width - 1, width - shiftAmount);
|
||||
m.opSetRange(width - shiftAmount, shiftAmount, '0');
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -717,7 +713,7 @@ class IndependentBits final : public DfgVisitor {
|
|||
shiftedMask.opShiftL(MASK(lhsp), rConstp->num());
|
||||
V3Number& m = MASK(vtxp);
|
||||
m.opSelInto(shiftedMask, shiftAmount, width - shiftAmount);
|
||||
setRangeZero(m, shiftAmount - 1, 0);
|
||||
m.opSetRange(0, shiftAmount, '0');
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -2242,6 +2242,13 @@ V3Number& V3Number::opBufIf1(const V3Number& ens, const V3Number& if1s) {
|
|||
return *this;
|
||||
}
|
||||
|
||||
// Sets all bits in range to the given value
|
||||
V3Number& V3Number::opSetRange(uint32_t lsb, uint32_t width, char bitValue) {
|
||||
const uint32_t msb = lsb + width - 1;
|
||||
for (uint32_t i = lsb; i <= msb; ++i) setBit(i, bitValue);
|
||||
return *this;
|
||||
}
|
||||
|
||||
V3Number& V3Number::opAssign(const V3Number& lhs) { return opAssignNonXZ(lhs, false); }
|
||||
V3Number& V3Number::opAssignNonXZ(const V3Number& lhs, bool ignoreXZ) {
|
||||
// Note may be a width change during the assign.
|
||||
|
|
|
@ -716,6 +716,7 @@ public:
|
|||
V3Number& opWildEq(const V3Number& lhs, const V3Number& rhs);
|
||||
V3Number& opWildNeq(const V3Number& lhs, const V3Number& rhs);
|
||||
V3Number& opBufIf1(const V3Number& ens, const V3Number& if1s);
|
||||
V3Number& opSetRange(uint32_t lsb, uint32_t width, char bitValue);
|
||||
// "standard" math
|
||||
V3Number& opNot(const V3Number& lhs);
|
||||
V3Number& opLogNot(const V3Number& lhs);
|
||||
|
|
Loading…
Reference in New Issue