Merge pull request #98 from michaelforney/popcount
Use bitwise test for power-of-2 instead of popcountmaster
commit
06a80beed8
|
@ -77,7 +77,6 @@ AS_IF([test "x$ac_cv_func_secure_getenv" = xno -a \
|
||||||
])
|
])
|
||||||
|
|
||||||
AX_GCC_BUILTIN(__builtin_expect)
|
AX_GCC_BUILTIN(__builtin_expect)
|
||||||
AX_GCC_BUILTIN(__builtin_popcount)
|
|
||||||
|
|
||||||
# Some tests use Linux-specific headers
|
# Some tests use Linux-specific headers
|
||||||
AC_CHECK_HEADER([linux/input.h])
|
AC_CHECK_HEADER([linux/input.h])
|
||||||
|
|
|
@ -76,9 +76,6 @@ endif
|
||||||
if cc.links('int main(){if(__builtin_expect(1<0,0)){}}', name: '__builtin_expect')
|
if cc.links('int main(){if(__builtin_expect(1<0,0)){}}', name: '__builtin_expect')
|
||||||
configh_data.set('HAVE___BUILTIN_EXPECT', 1)
|
configh_data.set('HAVE___BUILTIN_EXPECT', 1)
|
||||||
endif
|
endif
|
||||||
if cc.links('int main(){__builtin_popcount(1);}', name: '__builtin_popcount')
|
|
||||||
configh_data.set('HAVE___BUILTIN_POPCOUNT', 1)
|
|
||||||
endif
|
|
||||||
if cc.has_header_symbol('unistd.h', 'eaccess', prefix: '#define _GNU_SOURCE')
|
if cc.has_header_symbol('unistd.h', 'eaccess', prefix: '#define _GNU_SOURCE')
|
||||||
configh_data.set('HAVE_EACCESS', 1)
|
configh_data.set('HAVE_EACCESS', 1)
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -1373,7 +1373,7 @@ key_get_consumed(struct xkb_state *state, const struct xkb_key *key,
|
||||||
if (XkbLevelsSameSyms(level, no_mods_level))
|
if (XkbLevelsSameSyms(level, no_mods_level))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (entry == matching_entry || my_popcount(entry->mods.mask) == 1)
|
if (entry == matching_entry || one_bit_set(entry->mods.mask))
|
||||||
consumed |= entry->mods.mask & ~entry->preserve.mask;
|
consumed |= entry->mods.mask & ~entry->preserve.mask;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
12
src/utils.h
12
src/utils.h
|
@ -186,18 +186,10 @@ msb_pos(uint32_t mask)
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Avoid conflict with other popcount()s.
|
|
||||||
static inline int
|
static inline int
|
||||||
my_popcount(uint32_t x)
|
one_bit_set(uint32_t x)
|
||||||
{
|
{
|
||||||
int count;
|
return x && (x & (x - 1)) == 0;
|
||||||
#if defined(HAVE___BUILTIN_POPCOUNT)
|
|
||||||
count = __builtin_popcount(x);
|
|
||||||
#else
|
|
||||||
for (count = 0; x; count++)
|
|
||||||
x &= x - 1;
|
|
||||||
#endif
|
|
||||||
return count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
Loading…
Reference in New Issue