* data.c (POPCOUNT_STATIC_INLINE): New macro, as a hack for popcount.

This is ugly, but it should fix the performance problem for older
GCC versions in the short run.  I'll look into integrating the
Gnulib module for popcount, as a better fix.
See the thread starting in:
http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00474.html
(popcount_size_t_generic) [NEED_GENERIC_POPCOUNT]:
(popcount_size_t_msc) [USE_MSC_POPCOUNT]:
(popcount_size_t_gcc) [USE_GCC_POPCOUNT]:
(popcount_size_t): Use it.
This commit is contained in:
Paul Eggert 2013-09-24 07:53:49 -07:00
parent 10ebac9d6a
commit 4710d6f406
2 changed files with 25 additions and 5 deletions

View file

@ -1,3 +1,16 @@
2013-09-24 Paul Eggert <eggert@cs.ucla.edu>
* data.c (POPCOUNT_STATIC_INLINE): New macro, as a hack for popcount.
This is ugly, but it should fix the performance problem for older
GCC versions in the short run. I'll look into integrating the
Gnulib module for popcount, as a better fix.
See the thread starting in:
http://lists.gnu.org/archive/html/emacs-devel/2013-09/msg00474.html
(popcount_size_t_generic) [NEED_GENERIC_POPCOUNT]:
(popcount_size_t_msc) [USE_MSC_POPCOUNT]:
(popcount_size_t_gcc) [USE_GCC_POPCOUNT]:
(popcount_size_t): Use it.
2013-09-24 Daniel Colascione <dancol@dancol.org>
* process.c (Fnetwork_interface_info): Fix build break due to

View file

@ -2972,18 +2972,25 @@ bool_vector_spare_mask (ptrdiff_t nr_bits)
#if _MSC_VER >= 1500 && (defined _M_IX86 || defined _M_X64)
# define USE_MSC_POPCOUNT
# define POPCOUNT_STATIC_INLINE static inline
#elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
# define USE_GCC_POPCOUNT
# if 199901L <= __STDC_VERSION__ || !__STRICT_ANSI__
# define POPCOUNT_STATIC_INLINE static inline
# endif
#else
# define NEED_GENERIC_POPCOUNT
#endif
#ifndef POPCOUNT_STATIC_INLINE
# define POPCOUNT_STATIC_INLINE static
#endif
#ifdef USE_MSC_POPCOUNT
#define NEED_GENERIC_POPCOUNT
# define NEED_GENERIC_POPCOUNT
#endif
#ifdef NEED_GENERIC_POPCOUNT
static unsigned int
POPCOUNT_STATIC_INLINE unsigned int
popcount_size_t_generic (size_t val)
{
unsigned short j;
@ -2997,7 +3004,7 @@ popcount_size_t_generic (size_t val)
#endif
#ifdef USE_MSC_POPCOUNT
static unsigned int
POPCOUNT_STATIC_INLINE unsigned int
popcount_size_t_msc (size_t val)
{
unsigned int count;
@ -3042,7 +3049,7 @@ popcount_size_t_msc (size_t val)
#endif /* USE_MSC_POPCOUNT */
#ifdef USE_GCC_POPCOUNT
static unsigned int
POPCOUNT_STATIC_INLINE unsigned int
popcount_size_t_gcc (size_t val)
{
# if BITS_PER_SIZE_T == 64
@ -3053,7 +3060,7 @@ popcount_size_t_gcc (size_t val)
}
#endif /* USE_GCC_POPCOUNT */
static unsigned int
POPCOUNT_STATIC_INLINE unsigned int
popcount_size_t (size_t val)
{
#if defined USE_MSC_POPCOUNT