Move popcount() to an optionally built part of wsutil for systems that
provide their own popcount(). Change-Id: Ic26f3b50cf0bd2b4af0d42e9c27488ebbac1ab33 Reviewed-on: https://code.wireshark.org/review/5998 Petri-Dish: Stephen Fisher <sfisher@sdf.org> Reviewed-by: Stephen Fisher <sfisher@sdf.org>
This commit is contained in:
parent
59b4ab53fc
commit
3d62d2c396
|
@ -2750,6 +2750,14 @@ AC_CHECK_FUNC(strptime,
|
|||
STRPTIME_LO="strptime.lo")
|
||||
AC_SUBST(STRPTIME_LO)
|
||||
|
||||
AC_CHECK_FUNC(popcount,
|
||||
[
|
||||
POPCOUNT_LO=""
|
||||
AC_DEFINE(HAVE_POPCOUNT, 1, [Define if you have the popcount function.])
|
||||
],
|
||||
POPCOUNT_LO="popcount.lo")
|
||||
AC_SUBST(POPCOUNT_LO)
|
||||
|
||||
AC_CHECK_FUNCS(getprotobynumber gethostbyname2)
|
||||
AC_CHECK_FUNCS(issetugid)
|
||||
AC_CHECK_FUNCS(mmap mprotect sysconf)
|
||||
|
|
|
@ -61,6 +61,10 @@
|
|||
#include "packet-x11-keysymdef.h"
|
||||
#include "packet-x11.h"
|
||||
|
||||
#ifndef HAVE_POPCOUNT
|
||||
# include "wsutil/popcount.h"
|
||||
#endif
|
||||
|
||||
void proto_register_x11(void);
|
||||
void proto_reg_handoff_x11(void);
|
||||
|
||||
|
@ -3203,21 +3207,6 @@ static void set_handler(const char *name, void (*func)(tvbuff_t *tvb, packet_inf
|
|||
g_hash_table_insert(reply_table, (gpointer)name, (gpointer)reply_info);
|
||||
}
|
||||
|
||||
static int popcount(unsigned int mask)
|
||||
{
|
||||
#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
|
||||
/* GCC 3.4 or newer */
|
||||
return __builtin_popcount(mask);
|
||||
#else
|
||||
/* HACKMEM 169 */
|
||||
unsigned long y;
|
||||
|
||||
y = (mask >> 1) &033333333333;
|
||||
y = mask - y - ((y >>1) & 033333333333);
|
||||
return (((y + (y >> 3)) & 030707070707) % 077);
|
||||
#endif
|
||||
}
|
||||
|
||||
#include "x11-extension-errors.h"
|
||||
#include "x11-extension-implementation.h"
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ wsutil_optional_objects = \
|
|||
@INET_ATON_LO@ \
|
||||
@INET_NTOP_LO@ \
|
||||
@INET_PTON_LO@ \
|
||||
@POPCOUNT_LO@ \
|
||||
@STRPTIME_LO@
|
||||
|
||||
if SSE42_SUPPORTED
|
||||
|
@ -79,6 +80,8 @@ EXTRA_libwsutil_la_SOURCES= \
|
|||
inet_ntop.c \
|
||||
inet_pton.c \
|
||||
inet_v6defs.h \
|
||||
popcount.c \
|
||||
popcount.h \
|
||||
strptime.c \
|
||||
strptime.h \
|
||||
wsgetopt.c \
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
/* popcount.c
|
||||
*
|
||||
* popcount() replacement function for systems that don't provide their own.
|
||||
*
|
||||
* Wireshark - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@wireshark.org>
|
||||
* Copyright 1998 Gerald Combs
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "wsutil/popcount.h"
|
||||
|
||||
int
|
||||
popcount(unsigned int mask)
|
||||
{
|
||||
#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
|
||||
/* GCC 3.4 or newer */
|
||||
return __builtin_popcount(mask);
|
||||
#else
|
||||
/* HACKMEM 169 */
|
||||
unsigned long y;
|
||||
|
||||
y = (mask >> 1) &033333333333;
|
||||
y = mask - y - ((y >>1) & 033333333333);
|
||||
return (((y + (y >> 3)) & 030707070707) % 077);
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
/* popcount.h
|
||||
*
|
||||
* Wireshark - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@wireshark.org>
|
||||
* Copyright 1998 Gerald Combs
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#ifndef __POPCOUNT_H__
|
||||
#define __POPCOUNT_H__
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "ws_symbol_export.h"
|
||||
|
||||
WS_DLL_PUBLIC int popcount(unsigned int mask);
|
||||
|
||||
#endif /* __POPCOUNT_H__ */
|
||||
|
Loading…
Reference in New Issue