Using own popcount where the compiler builtin is not available.

This commit is contained in:
Sergey Kandaurov
2018-06-20 19:34:06 +03:00
parent 50d4587961
commit 14bc401394
3 changed files with 35 additions and 1 deletions

View File

@@ -101,6 +101,19 @@ nxt_feature_test="int main() {
. auto/feature
nxt_feature="GCC __builtin_popcount()"
nxt_feature_name=NXT_HAVE_BUILTIN_POPCOUNT
nxt_feature_run=
nxt_feature_incs=
nxt_feature_libs=
nxt_feature_test="int main() {
if (__builtin_popcount(5) == 2)
return 0;
return 1;
}"
. auto/feature
nxt_feature="GCC __attribute__ visibility"
nxt_feature_name=NXT_HAVE_GCC_ATTRIBUTE_VISIBILITY
nxt_feature_run=

View File

@@ -132,6 +132,27 @@ nxt_prefetch(a)
#endif
#if (NXT_HAVE_BUILTIN_POPCOUNT)
#define nxt_popcount __builtin_popcount
#else
nxt_inline int
nxt_popcount(unsigned int x)
{
int count;
for (count = 0; x != 0; x >>= 1) {
count += (x & 1);
}
return count;
}
#endif
#ifndef NXT_ALIGNMENT
#if (NXT_SOLARIS)

View File

@@ -331,7 +331,7 @@ nxt_conf_vldt_type(nxt_conf_validation_t *vldt, nxt_str_t *name,
p = buf;
n = __builtin_popcount(type);
n = nxt_popcount(type);
if (n > 1) {
p = nxt_cpymem(p, "either ", 7);