--- a/upb/hash/common.c	2025-06-02 14:39:32.082862245 +0800
+++ b/upb/hash/common.c	2025-06-02 14:42:34.036621441 +0800
@@ -43,8 +43,18 @@
 #elif defined(__GNUC__)
 #define UPB_FAST_POPCOUNT32(i) __builtin_popcount(i)
 #elif defined(_MSC_VER)
+#if defined(_M_ARM64)
+unsigned int UPB_FAST_POPCOUNT32(unsigned int x) {
+	unsigned int c = 0;
+	for(; x; c++) {
+		x &= x - 1;
+	}
+	return c;
+}
+#else
 #define UPB_FAST_POPCOUNT32(i) __popcnt(i)
 #endif
+#endif
 
 UPB_INLINE int _upb_popcnt32(uint32_t i) {
 #ifdef UPB_FAST_POPCOUNT32