• Paul Eggert's avatar
    Improve support for popcount and counting trailing zeros. · 595e113b
    Paul Eggert authored
    Do this by using the Gnulib modules for this.
    This should generate faster code on non-GCC, non-MSC platforms,
    and make the code a bit more portable, at least in theory.
    * admin/merge-gnulib (GNULIB_MODULES): Add count-one-bits
    and count-trailing-zeros.
    * lib/count-one-bits.c, lib/count-one-bits.h:
    * lib/count-trailing-zeros.c, lib/count-trailing-zeros.h:
    * m4/count-one-bits.m4, m4/count-trailing-zeros.m4:
    New files, copied from gnulib.
    * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate.
    * nt/gnulib.mk: Merge changes from lib/gnulib.mk.
    * src/data.c: Include <count-one-bits.h>, <count-trailing-zeros.h>.
    (USE_MSC_POPCOUNT, POPCOUNT_STATIC_INLINE)
    (NEED_GENERIC_POPCOUNT, popcount_size_t_generic)
    (popcount_size_t_msc, popcount_size_t_gcc):
    Remove; now done by Gnulib.
    (popcount_size_t): Now a macro that defers to Gnulib.
    (count_trailing_zero_bits): Return int, for consistency with
    Gnulib and because Emacs prefers signed to unsigned int.
    Don't assume that size_t is either unsigned int or unsigned long
    or unsigned long long.
    (size_t_to_host_endian): Do not assume that size_t is either
    exactly 32 or exactly 64 bits wide.
    * src/lisp.h (BITS_PER_SIZE_T): Define consistently with BITS_PER_LONG
    etc., so that it's now an enum constant, not a macro.
    No need to assume that it's either 32 or 64.
    
    Fixes: debbugs:15550
    595e113b
ChangeLog 242 KB