Clean up vector_algorithms.cpp
again: unsigned bit manipulation, scope guard for multiple return
#5532
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Follow up for #5519
_bittestandreset
. The compiler emitsbtc
for the^= 1 << n
pattern, which has the same performance asbtr
for_bittestandreset
.search
could also use_Bingo &= _Bingo - 1
, or_blsr_u32
, but there's not enough evidence in significant enough performance advantage to use thisfind_end
could try_bzhi_u32
, but didn't even bother, here the expectation is even lower.movemask*
. Always 32 bit because internally there is 32-bit destination register, always unsigned because bitmask.int
forcmpestr*
masks, it is compile time, and only few bits, and intrinsic takesint