int##size##_t UnsafeLeastSignificantBitPosition##size( \
const uint##size##_t*
const bits, uint##size##_t
start, \
DCHECK(IsBitSet##size(bits,
end)); \
if (IsBitSet##size(bits,
start)) { \
} \
const
int offset_start = BitOffset##size(
start); \
const
int offset_end = BitOffset##size(
end); \
const
int pos_start = BitPos##size(
start); \
const uint##size##_t start_mask = \
bits[offset_start] & IntervalUp##size(pos_start); \
if (start_mask) { \
return BitShift##size(offset_start) + \
LeastSignificantBitPosition##size(start_mask); \
} \
for (int offset = offset_start + 1; offset <= offset_end; ++offset) { \
if (bits[offset]) { \
return BitShift##size(offset) + \
LeastSignificantBitPosition##size(bits[offset]); \
} \
} \
return -1; \
}