Commit f79f921d581 for php.net

commit f79f921d581e4303101305c9d9dc9d420c934382
Author: Shivam Mathur <shivam_jpr@hotmail.com>
Date:   Thu May 7 19:32:54 2026 +0000

    Preserve full XMM registers in Windows VM wrapper (#21976)

diff --git a/Zend/asm/save_xmm_x86_64_ms_masm.asm b/Zend/asm/save_xmm_x86_64_ms_masm.asm
index 1569d6bdb0e..0af7c346095 100644
--- a/Zend/asm/save_xmm_x86_64_ms_masm.asm
+++ b/Zend/asm/save_xmm_x86_64_ms_masm.asm
@@ -9,34 +9,34 @@ EXTERN execute_ex_real:PROC
 ; save the preserved registers when re-entering the VM from JIT code.
 ; See GH-18136.
 execute_ex PROC EXPORT FRAME
-    ; 10 floating points numbers
+    ; 10 XMM registers
     ; 32 bytes shadow space
     ; 8 bytes to align after the return address
-    sub rsp, 8*10 + 32 + 8
-    .allocstack 8*10 + 32 + 8
+    sub rsp, 16*10 + 32 + 8
+    .allocstack 16*10 + 32 + 8
     .endprolog
-    movsd qword ptr [rsp + 32 + 8*0], xmm6
-    movsd qword ptr [rsp + 32 + 8*1], xmm7
-    movsd qword ptr [rsp + 32 + 8*2], xmm8
-    movsd qword ptr [rsp + 32 + 8*3], xmm9
-    movsd qword ptr [rsp + 32 + 8*4], xmm10
-    movsd qword ptr [rsp + 32 + 8*5], xmm11
-    movsd qword ptr [rsp + 32 + 8*6], xmm12
-    movsd qword ptr [rsp + 32 + 8*7], xmm13
-    movsd qword ptr [rsp + 32 + 8*8], xmm14
-    movsd qword ptr [rsp + 32 + 8*9], xmm15
+    movaps xmmword ptr [rsp + 32 + 16*0], xmm6
+    movaps xmmword ptr [rsp + 32 + 16*1], xmm7
+    movaps xmmword ptr [rsp + 32 + 16*2], xmm8
+    movaps xmmword ptr [rsp + 32 + 16*3], xmm9
+    movaps xmmword ptr [rsp + 32 + 16*4], xmm10
+    movaps xmmword ptr [rsp + 32 + 16*5], xmm11
+    movaps xmmword ptr [rsp + 32 + 16*6], xmm12
+    movaps xmmword ptr [rsp + 32 + 16*7], xmm13
+    movaps xmmword ptr [rsp + 32 + 16*8], xmm14
+    movaps xmmword ptr [rsp + 32 + 16*9], xmm15
     call execute_ex_real
-    movsd xmm6, qword ptr [rsp + 32 + 8*0]
-    movsd xmm7, qword ptr [rsp + 32 + 8*1]
-    movsd xmm8, qword ptr [rsp + 32 + 8*2]
-    movsd xmm9, qword ptr [rsp + 32 + 8*3]
-    movsd xmm10, qword ptr [rsp + 32 + 8*4]
-    movsd xmm11, qword ptr [rsp + 32 + 8*5]
-    movsd xmm12, qword ptr [rsp + 32 + 8*6]
-    movsd xmm13, qword ptr [rsp + 32 + 8*7]
-    movsd xmm14, qword ptr [rsp + 32 + 8*8]
-    movsd xmm15, qword ptr [rsp + 32 + 8*9]
-    add rsp, 8*10 + 32 + 8
+    movaps xmm6, xmmword ptr [rsp + 32 + 16*0]
+    movaps xmm7, xmmword ptr [rsp + 32 + 16*1]
+    movaps xmm8, xmmword ptr [rsp + 32 + 16*2]
+    movaps xmm9, xmmword ptr [rsp + 32 + 16*3]
+    movaps xmm10, xmmword ptr [rsp + 32 + 16*4]
+    movaps xmm11, xmmword ptr [rsp + 32 + 16*5]
+    movaps xmm12, xmmword ptr [rsp + 32 + 16*6]
+    movaps xmm13, xmmword ptr [rsp + 32 + 16*7]
+    movaps xmm14, xmmword ptr [rsp + 32 + 16*8]
+    movaps xmm15, xmmword ptr [rsp + 32 + 16*9]
+    add rsp, 16*10 + 32 + 8
     ret
 execute_ex ENDP