From 4710d6f406ff792aaae65ad141f96346be44909d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 24 Sep 2013 07:53:49 -0700 Subject: [PATCH] * 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. --- src/ChangeLog | 13 +++++++++++++ src/data.c | 17 ++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 82517661164..90ffce575f9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2013-09-24 Paul Eggert + + * 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 * process.c (Fnetwork_interface_info): Fix build break due to diff --git a/src/data.c b/src/data.c index 82cfd74cd0f..79679bae444 100644 --- a/src/data.c +++ b/src/data.c @@ -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 -- 2.11.4.GIT