|
|
|
|
|
by hairtuq
2030 days ago
|
|
The name SWAR is sometimes used (https://en.wikipedia.org/wiki/SWAR). Indeed, even 8-bit fields can be added in parallel, using the fact that ^ is like a + that does not produce a carry: uint64_t signmask = 0x8080808080808080;
uint64_t sum_without_sign_bits = ((x & ~signmask) + (y & ~signmask));
uint64_t sum_of_sign_bits = (x ^ y) & signmask;
return sum_without_sign_bits ^ sum_of_sign_bits;
|
|