]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Save/Restore xmm6-xmm15 in function setJump/longJump.
authorgikidy <gikidy@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 10 Jun 2009 07:14:17 +0000 (07:14 +0000)
committergikidy <gikidy@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 10 Jun 2009 07:14:17 +0000 (07:14 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8506 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Include/Library/BaseLib.h
MdePkg/Library/BaseLib/X64/LongJump.asm
MdePkg/Library/BaseLib/X64/SetJump.asm

index 32887b18e354c1e51d217a7dd55084e7c62af231..25d61f1448db44fc0569e7b75d5eef5ccff06a32 100644 (file)
@@ -101,6 +101,8 @@ typedef struct {
   UINT64                            R14;\r
   UINT64                            R15;\r
   UINT64                            Rip;\r
+  UINT64                            MxCsr;\r
+  UINT8                             XmmBuffer[160]; ///< XMM6-XMM15\r
 } BASE_LIBRARY_JUMP_BUFFER;\r
 \r
 #define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8\r
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
index 2ed581ea9d653a4b57c1d273e545fe885e4bc211..5ef8de3bcb406e4891e17409cfba548342e2aeb9 100644 (file)
@@ -47,6 +47,18 @@ SetJump     PROC
     mov     [rcx + 38h], r14\r
     mov     [rcx + 40h], r15\r
     mov     [rcx + 48h], rdx\r
+    ; save non-volatile fp registers\r
+    stmxcsr [rcx + 50h]\r
+    movdqu  [rcx + 58h], xmm6\r
+    movdqu  [rcx + 68h], xmm7\r
+    movdqu  [rcx + 78h], xmm8\r
+    movdqu  [rcx + 88h], xmm9\r
+    movdqu  [rcx + 98h], xmm10\r
+    movdqu  [rcx + 0A8h], xmm11\r
+    movdqu  [rcx + 0B8h], xmm12\r
+    movdqu  [rcx + 0C8h], xmm13\r
+    movdqu  [rcx + 0D8h], xmm14\r
+    movdqu  [rcx + 0E8h], xmm15\r
     xor     rax, rax\r
     jmp     rdx\r
 SetJump     ENDP\r