13 const int64_t allowed_overshoot)
21 const bool *bools_ = bools.
data();
23 bool any_true =
false;
29 const __m128i zero_bytes = _mm_set1_epi8(0);
31 if (iteration_end % 16 > 0) {
32 if (allowed_overshoot >= 16) {
33 iteration_end = (iteration_end + 16) & ~15;
37 for (; bool_i + 16 <= iteration_end; bool_i += 16) {
39 const __m128i group = _mm_loadu_si128(
reinterpret_cast<const __m128i *
>(bools_ + bool_i));
41 const __m128i is_false_byte_mask = _mm_cmpeq_epi8(group, zero_bytes);
43 const uint16_t is_false_mask = _mm_movemask_epi8(is_false_byte_mask);
45 const uint16_t is_true_mask = ~is_false_mask;
46 any_true |= is_true_mask != 0;
50 *start_bit_int |=
BitInt(is_true_mask) << start_bit_in_int;
54 start_bit_int[1] |=
BitInt(is_true_mask) >> (64 - start_bit_in_int);
60 for (; bool_i < bools.
size(); bool_i++) {