;------------------------------------------------------------------------------\r
;\r
-; Copyright (c) 2005 - 2007, Intel Corporation. All rights reserved.<BR>\r
+; Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
; This program and the accompanying materials \r
; are licensed and made available under the terms and conditions of the BSD License \r
; which accompanies this distribution. The full text of the license may be found at \r
_r14 QWORD ?\r
_r15 QWORD ?\r
_rip QWORD ?\r
+_MxCsr DWORD ?\r
+_XmmBuffer DB 160 DUP (?)\r
_EFI_JUMP_BUFFER ENDS\r
\r
EFI_JUMP_BUFFER TYPEDEF _EFI_JUMP_BUFFER\r
mov (EFI_JUMP_BUFFER PTR [rdx])._r13, r13\r
mov (EFI_JUMP_BUFFER PTR [rdx])._r14, r14\r
mov (EFI_JUMP_BUFFER PTR [rdx])._r15, r15\r
+ ; save non-volatile fp registers\r
+ stmxcsr (EFI_JUMP_BUFFER PTR [rdx])._MxCsr\r
+ lea rax, (EFI_JUMP_BUFFER PTR [rdx])._XmmBuffer\r
+ movdqu [rax], xmm6\r
+ movdqu [rax + 10h], xmm7\r
+ movdqu [rax + 20h], xmm8\r
+ movdqu [rax + 30h], xmm9\r
+ movdqu [rax + 40h], xmm10\r
+ movdqu [rax + 50h], xmm11\r
+ movdqu [rax + 60h], xmm12\r
+ movdqu [rax + 70h], xmm13\r
+ movdqu [rax + 80h], xmm14\r
+ movdqu [rax + 90h], xmm15\r
mov rax, QWORD PTR [rsp+0]\r
mov (EFI_JUMP_BUFFER PTR [rdx])._rip, rax\r
mov rax, EFI_SUCCESS \r
;\r
PUBLIC TransferControlLongJump\r
TransferControlLongJump PROC \r
+ ; load non-volatile fp registers\r
+ ldmxcsr (EFI_JUMP_BUFFER PTR [rdx])._MxCsr\r
+ lea rax, (EFI_JUMP_BUFFER PTR [rdx])._XmmBuffer\r
+ movdqu xmm6, [rax]\r
+ movdqu xmm7, [rax + 10h]\r
+ movdqu xmm8, [rax + 20h]\r
+ movdqu xmm9, [rax + 30h]\r
+ movdqu xmm10, [rax + 40h]\r
+ movdqu xmm11, [rax + 50h]\r
+ movdqu xmm12, [rax + 60h]\r
+ movdqu xmm13, [rax + 70h]\r
+ movdqu xmm14, [rax + 80h]\r
+ movdqu xmm15, [rax + 90h]\r
; set return from SetJump to EFI_WARN_RETURN_FROM_LONG_JUMP\r
mov rax, EFI_WARN_RETURN_FROM_LONG_JUMP \r
mov rbx, (EFI_JUMP_BUFFER PTR [rdx])._rbx\r