• Clemens Hammacher's avatar
    Reland "[bits] Consolidate Count{Leading,Trailing}Zeros" · 27ffc624
    Clemens Hammacher authored
    This is a reland of 7d231e57, fixed to
    avoid instantiating CountLeadingZeros for bits==0.
    
    Original change's description:
    > [bits] Consolidate Count{Leading,Trailing}Zeros
    > 
    > Instead of having one method for 32 bit integers and one for 64 bit,
    > plus a templatized version to choose from those two, just implement one
    > version which handles unsigned integers of any size. Also, make them
    > constexpr.
    > The Count{Leading,Trailing}Zeros{32,64} methods are kept for now in
    > order to keep the amount of code changes small. Also, sometimes it
    > improves readability by stating exactly the size of the argument,
    > especially for leading zeros (where zero-extending would add more
    > leading zeros).
    > 
    > CountLeadingZeros now uses a binary search inspired implementation
    > as proposed in Hacker's Delight. It's more than 20% faster on x64 if
    > the builtins are disabled.
    > CountTrailingZeros falls back to CountPopulation instead of counting in
    > a naive loop. This is ~50% faster.
    > 
    > R=mstarzinger@chromium.org
    > 
    > Change-Id: I1d8bf1d7295b930724163248150444bd17fbb34e
    > Reviewed-on: https://chromium-review.googlesource.com/741231
    > Reviewed-by: Michael Starzinger <mstarzinger@chromium.org>
    > Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
    > Cr-Commit-Position: refs/heads/master@{#49106}
    
    Change-Id: Icdff2510ec66d1c96a1912cef29d77d8550994ee
    Reviewed-on: https://chromium-review.googlesource.com/753903Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
    Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#49138}
    27ffc624
Name
Last commit
Last update
..
debug Loading commit data...
platform Loading commit data...
utils Loading commit data...
DEPS Loading commit data...
OWNERS Loading commit data...
adapters.h Loading commit data...
atomic-utils.h Loading commit data...
atomicops.h Loading commit data...
atomicops_internals_atomicword_compat.h Loading commit data...
atomicops_internals_portable.h Loading commit data...
atomicops_internals_std.h Loading commit data...
base-export.h Loading commit data...
bits.cc Loading commit data...
bits.h Loading commit data...
build_config.h Loading commit data...
compiler-specific.h Loading commit data...
cpu.cc Loading commit data...
cpu.h Loading commit data...
division-by-constant.cc Loading commit data...
division-by-constant.h Loading commit data...
export-template.h Loading commit data...
file-utils.cc Loading commit data...
file-utils.h Loading commit data...
flags.h Loading commit data...
format-macros.h Loading commit data...
free_deleter.h Loading commit data...
functional.cc Loading commit data...
functional.h Loading commit data...
hashmap-entry.h Loading commit data...
hashmap.h Loading commit data...
ieee754.cc Loading commit data...
ieee754.h Loading commit data...
iterator.h Loading commit data...
lazy-instance.h Loading commit data...
logging.cc Loading commit data...
logging.h Loading commit data...
macros.h Loading commit data...
once.cc Loading commit data...
once.h Loading commit data...
optional.h Loading commit data...
qnx-math.h Loading commit data...
ring-buffer.h Loading commit data...
safe_conversions.h Loading commit data...
safe_conversions_impl.h Loading commit data...
safe_math.h Loading commit data...
safe_math_impl.h Loading commit data...
sys-info.cc Loading commit data...
sys-info.h Loading commit data...
template-utils.h Loading commit data...
timezone-cache.h Loading commit data...
tsan.h Loading commit data...
win32-headers.h Loading commit data...