]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/X64/LongJump.asm
Save/Restore xmm6-xmm15 in function setJump/longJump.
[mirror_edk2.git] / MdePkg / Library / BaseLib / X64 / LongJump.asm
index 38e560608131a7a1339d48541a6f531aa73991a0..2b63fabc98f4aca01bb9a401ca6683467ac67053 100644 (file)
@@ -39,7 +39,19 @@ InternalLongJump    PROC
     mov     r13, [rcx + 30h]\r
     mov     r14, [rcx + 38h]\r
     mov     r15, [rcx + 40h]\r
-    mov     rax, rdx                    ; set return value\r
+    ; load non-volatile fp registers\r
+    ldmxcsr [rcx + 50h]\r
+    movdqu  xmm6,  [rcx + 58h]\r
+    movdqu  xmm7,  [rcx + 68h]\r
+    movdqu  xmm8,  [rcx + 78h]\r
+    movdqu  xmm9,  [rcx + 88h]\r
+    movdqu  xmm10, [rcx + 98h]\r
+    movdqu  xmm11, [rcx + 0A8h]\r
+    movdqu  xmm12, [rcx + 0B8h]\r
+    movdqu  xmm13, [rcx + 0C8h]\r
+    movdqu  xmm14, [rcx + 0D8h]\r
+    movdqu  xmm15, [rcx + 0E8h]\r
+    mov     rax, rdx               ; set return value\r
     jmp     qword ptr [rcx + 48h]\r
 InternalLongJump    ENDP\r
 \r