From 8e999d29628b0d1fec3046722554e792c351450b Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 11 Aug 2011 14:07:04 -0400 Subject: [PATCH] Minor optimization of popcount in l10nflist --- ChangeLog | 3 +++ intl/l10nflist.c | 2 ++ sysdeps/x86_64/l10nflist.c | 13 +++++++++++++ 3 files changed, 18 insertions(+) create mode 100644 sysdeps/x86_64/l10nflist.c diff --git a/ChangeLog b/ChangeLog index 88ed726e13..83bee3f6e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2011-08-11 Ulrich Drepper + * intl/l10nflist.c: Allow architecture-specific pop function. + * sysdeps/x86_64/l10nflist.c: New file. + * intl/l10nflist.c (_nl_make_l10nflist): Use locale-independent classification. diff --git a/intl/l10nflist.c b/intl/l10nflist.c index a38e0efe90..82af2633b5 100644 --- a/intl/l10nflist.c +++ b/intl/l10nflist.c @@ -150,6 +150,7 @@ argz_next__ (argz, argz_len, entry) /* Return number of bits set in X. */ +#ifndef ARCH_POP static int pop PARAMS ((int x)); static inline int @@ -164,6 +165,7 @@ pop (x) return x; } +#endif struct loaded_l10nfile * diff --git a/sysdeps/x86_64/l10nflist.c b/sysdeps/x86_64/l10nflist.c new file mode 100644 index 0000000000..2e08372338 --- /dev/null +++ b/sysdeps/x86_64/l10nflist.c @@ -0,0 +1,13 @@ +#ifdef __POPCNT__ +# include + +static inline unsigned int +pop (unsigned int x) +{ + return _mm_popcnt_u32 (x); +} +# define ARCH_POP 1 + +#endif + +#include