summaryrefslogtreecommitdiff
path: root/MdePkg/Library/BaseLib/X64/LongJump.asm
diff options
context:
space:
mode:
authorgikidy <gikidy@6f19259b-4bc3-4df7-8a09-765794883524>2009-06-10 07:14:17 +0000
committergikidy <gikidy@6f19259b-4bc3-4df7-8a09-765794883524>2009-06-10 07:14:17 +0000
commit9b9641c6d92c5222a2ad457273cdb9a3b32ecaa3 (patch)
treea3aa52b39940f0cb19cf508555cbe9d6d7edadb6 /MdePkg/Library/BaseLib/X64/LongJump.asm
parent6fcb2d910a60879e4fe8e50ec59eab160ad864e3 (diff)
downloadedk2-platforms-9b9641c6d92c5222a2ad457273cdb9a3b32ecaa3.tar.xz
Save/Restore xmm6-xmm15 in function setJump/longJump.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8506 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdePkg/Library/BaseLib/X64/LongJump.asm')
-rw-r--r--MdePkg/Library/BaseLib/X64/LongJump.asm14
1 files changed, 13 insertions, 1 deletions
diff --git a/MdePkg/Library/BaseLib/X64/LongJump.asm b/MdePkg/Library/BaseLib/X64/LongJump.asm
index 38e5606081..2b63fabc98 100644
--- a/MdePkg/Library/BaseLib/X64/LongJump.asm
+++ b/MdePkg/Library/BaseLib/X64/LongJump.asm
@@ -39,7 +39,19 @@ InternalLongJump PROC
mov r13, [rcx + 30h]
mov r14, [rcx + 38h]
mov r15, [rcx + 40h]
- mov rax, rdx ; set return value
+ ; load non-volatile fp registers
+ ldmxcsr [rcx + 50h]
+ movdqu xmm6, [rcx + 58h]
+ movdqu xmm7, [rcx + 68h]
+ movdqu xmm8, [rcx + 78h]
+ movdqu xmm9, [rcx + 88h]
+ movdqu xmm10, [rcx + 98h]
+ movdqu xmm11, [rcx + 0A8h]
+ movdqu xmm12, [rcx + 0B8h]
+ movdqu xmm13, [rcx + 0C8h]
+ movdqu xmm14, [rcx + 0D8h]
+ movdqu xmm15, [rcx + 0E8h]
+ mov rax, rdx ; set return value
jmp qword ptr [rcx + 48h]
InternalLongJump ENDP