Optimize V3Number::opAdd (#4385)

This commit is contained in:
Aleksander Kiryk 2023-07-24 23:09:27 +02:00 committed by GitHub
parent 1549ff9185
commit edc0a0e982
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 5 deletions

View File

@ -1866,12 +1866,15 @@ V3Number& V3Number::opAdd(const V3Number& lhs, const V3Number& rhs) {
if (lhs.isFourState() || rhs.isFourState()) return setAllBitsX();
setZero();
// Addem
int carry = 0;
for (int bit = 0; bit < width(); bit++) {
const int sum = ((lhs.bitIs1(bit) ? 1 : 0) + (rhs.bitIs1(bit) ? 1 : 0) + carry);
if (sum & 1) setBit(bit, 1);
carry = (sum >= 2);
uint64_t carry = 0;
for (int word = 0; word < words(); word++) {
const uint64_t lwordval = lhs.m_data.num()[word].m_value;
const uint64_t rwordval = rhs.m_data.num()[word].m_value;
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;
}
V3Number& V3Number::opSub(const V3Number& lhs, const V3Number& rhs) {