commit 03e959375b1244adbbd5de7e2dae02e06b6a627c
Author: Shivam Mathur <shivam_jpr@hotmail.com>
Date: Wed Oct 14 18:07:59 2026 +0530
Fix v142 ARM64 hash and floating point results (#24317)
diff --git a/ext/hash/murmur/PMurHash.c b/ext/hash/murmur/PMurHash.c
index 0716ca13c88..83c7d721fbe 100644
--- a/ext/hash/murmur/PMurHash.c
+++ b/ext/hash/murmur/PMurHash.c
@@ -67,6 +67,11 @@ on big endian machines, or a byte-by-byte read if the endianess is unknown.
#define UNALIGNED_SAFE
#endif
+/* Avoid miscompiled aligned reads with the v142 ARM64 optimizer. */
+#if defined(_MSC_VER) && _MSC_VER < 1930 && defined(_M_ARM64) && !defined(__clang__)
+ #define UNALIGNED_SAFE
+#endif
+
/* Find best way to ROTL */
#if defined(_MSC_VER)
#define FORCE_INLINE static __forceinline
diff --git a/win32/build/config.w32.h.in b/win32/build/config.w32.h.in
index 7686fb83a4a..f7c940390ac 100644
--- a/win32/build/config.w32.h.in
+++ b/win32/build/config.w32.h.in
@@ -27,6 +27,11 @@
#define DEFAULT_SHORT_OPEN_TAG "1"
/* Platform-Specific Configuration. Should not be changed. */
+/* Match -ffp-contract=off on toolsets that enable ARM64 contractions by default. */
+#if defined(_MSC_VER) && _MSC_VER < 1930 && defined(_M_ARM64) && !defined(__clang__)
+# pragma fp_contract(off)
+#endif
+
/* Alignment for Zend memory allocator */
#define ZEND_MM_ALIGNMENT (size_t)8
#define ZEND_MM_ALIGNMENT_LOG2 (size_t)3