Я использую встроенную функцию _mm_cmpgt_epi64
для реализации 128-битного сложения, а позже 256-битного.Глядя на результат этого внутреннего, что-то меня озадачивает.
Я не понимаю, почему вычисленная маска такая, какая она есть.
const __m128i mask = _mm_cmpgt_epi64(bflip, sumflip);
А вот вывод в моем отладчике:
(lldb) p/x bflip
(__m128i) $1 = (0x00000001, 0x80000000, 0x00000000, 0x80000000)
(lldb) p/x sumflip
(__m128i) $2 = (0x00000000, 0x80000000, 0xffffffff, 0x7fffffff)
(lldb) p/x mask
(__m128i) $3 = (0xffffffff, 0xffffffff, 0x00000000, 0x00000000)
Для первой 64-битной полосы (63:0
) я в порядке.Но почему вторая полоса (127:64
) тоже не полна?
Мне кажется, что 0x8000000000000000
> 0x7fffffffffffffff
.