diff --git a/src/port/pg_bitutils.c b/src/port/pg_bitutils.c index 640a89561a..85e45cee9b 100644 --- a/src/port/pg_bitutils.c +++ b/src/port/pg_bitutils.c @@ -305,7 +305,18 @@ pg_popcount(const char *buf, int bytes) while (bytes >= 8) { - popcnt += pg_popcount64(*words++); +#ifdef _MSC_VER + popcnt += __popcnt64(*words++); +#else + uint64 res; + + __asm__ __volatile__(" popcntq %1,%0\n" + : "=q"(res) + : "rm"(word) + : "cc"); + popcnt += (int) res; + words++; +#endif bytes -= 8; } diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build index f1d18a1b29..ae880db64c 100644 --- a/src/test/modules/meson.build +++ b/src/test/modules/meson.build @@ -26,6 +26,7 @@ subdir('test_misc') subdir('test_oat_hooks') subdir('test_parser') subdir('test_pg_dump') +subdir('test_popcount') subdir('test_predtest') subdir('test_radixtree') subdir('test_rbtree')