build: Use __builtin_popcount() if available.

This commit is contained in:
Józef Kucia
2017-09-08 15:04:30 +02:00
parent d9bc635d1a
commit 09658e3b9b
3 changed files with 15 additions and 0 deletions

View File

@@ -39,9 +39,13 @@ static inline size_t align(size_t addr, size_t alignment)
static inline unsigned int vkd3d_popcount(unsigned int v)
{
#ifdef HAVE_BUILTIN_POPCOUNT
return __builtin_popcount(v);
#else
v -= (v >> 1) & 0x55555555;
v = (v & 0x33333333) + ((v >> 2) & 0x33333333);
return (((v + (v >> 4)) & 0x0f0f0f0f) * 0x01010101) >> 24;
#endif
}
#ifndef _WIN32