1;------------------------------------------------------------------------------ 2; 3; Copyright (c) 2006, Intel Corporation. All rights reserved.<BR> 4; This program and the accompanying materials 5; are licensed and made available under the terms and conditions of the BSD License 6; which accompanies this distribution. The full text of the license may be found at 7; http://opensource.org/licenses/bsd-license.php. 8; 9; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11; 12; Module Name: 13; 14; SetJump.Asm 15; 16; Abstract: 17; 18; Implementation of SetJump() on x64. 19; 20;------------------------------------------------------------------------------ 21 22 .code 23 24EXTERNDEF InternalAssertJumpBuffer:PROC 25 26;------------------------------------------------------------------------------ 27; UINTN 28; EFIAPI 29; SetJump ( 30; OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer 31; ); 32;------------------------------------------------------------------------------ 33SetJump PROC 34 push rcx 35 add rsp, -20h 36 call InternalAssertJumpBuffer 37 add rsp, 20h 38 pop rcx 39 pop rdx 40 mov [rcx], rbx 41 mov [rcx + 8], rsp 42 mov [rcx + 10h], rbp 43 mov [rcx + 18h], rdi 44 mov [rcx + 20h], rsi 45 mov [rcx + 28h], r12 46 mov [rcx + 30h], r13 47 mov [rcx + 38h], r14 48 mov [rcx + 40h], r15 49 mov [rcx + 48h], rdx 50 ; save non-volatile fp registers 51 stmxcsr [rcx + 50h] 52 movdqu [rcx + 58h], xmm6 53 movdqu [rcx + 68h], xmm7 54 movdqu [rcx + 78h], xmm8 55 movdqu [rcx + 88h], xmm9 56 movdqu [rcx + 98h], xmm10 57 movdqu [rcx + 0A8h], xmm11 58 movdqu [rcx + 0B8h], xmm12 59 movdqu [rcx + 0C8h], xmm13 60 movdqu [rcx + 0D8h], xmm14 61 movdqu [rcx + 0E8h], xmm15 62 xor rax, rax 63 jmp rdx 64SetJump ENDP 65 66 END 67