Optimize V3Number::opAdd (#4385)
This commit is contained in:
parent
1549ff9185
commit
edc0a0e982
|
|
@ -1866,12 +1866,15 @@ V3Number& V3Number::opAdd(const V3Number& lhs, const V3Number& rhs) {
|
||||||
if (lhs.isFourState() || rhs.isFourState()) return setAllBitsX();
|
if (lhs.isFourState() || rhs.isFourState()) return setAllBitsX();
|
||||||
setZero();
|
setZero();
|
||||||
// Addem
|
// Addem
|
||||||
int carry = 0;
|
uint64_t carry = 0;
|
||||||
for (int bit = 0; bit < width(); bit++) {
|
for (int word = 0; word < words(); word++) {
|
||||||
const int sum = ((lhs.bitIs1(bit) ? 1 : 0) + (rhs.bitIs1(bit) ? 1 : 0) + carry);
|
const uint64_t lwordval = lhs.m_data.num()[word].m_value;
|
||||||
if (sum & 1) setBit(bit, 1);
|
const uint64_t rwordval = rhs.m_data.num()[word].m_value;
|
||||||
carry = (sum >= 2);
|
const uint64_t sum = lwordval + rwordval + carry;
|
||||||
|
m_data.num()[word].m_value = sum & 0xffffffffULL;
|
||||||
|
carry = sum > 0xffffffffULL;
|
||||||
}
|
}
|
||||||
|
opCleanThis(); // Just in case it produced extra bits in result
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
V3Number& V3Number::opSub(const V3Number& lhs, const V3Number& rhs) {
|
V3Number& V3Number::opSub(const V3Number& lhs, const V3Number& rhs) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue