remove_indirect_func_call_in_pg_popcount.patch.txt

text/plain

Filename: remove_indirect_func_call_in_pg_popcount.patch.txt
Type: text/plain
Part: 0
Message: Re: Popcount optimization using AVX512
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')