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    DEFAULT REL
23    SECTION .text
24
25extern ASM_PFX(InternalAssertJumpBuffer)
26
27;------------------------------------------------------------------------------
28; UINTN
29; EFIAPI
30; SetJump (
31;   OUT     BASE_LIBRARY_JUMP_BUFFER  *JumpBuffer
32;   );
33;------------------------------------------------------------------------------
34global ASM_PFX(SetJump)
35ASM_PFX(SetJump):
36    push    rcx
37    add     rsp, -0x20
38    call    ASM_PFX(InternalAssertJumpBuffer)
39    add     rsp, 0x20
40    pop     rcx
41    pop     rdx
42    mov     [rcx], rbx
43    mov     [rcx + 8], rsp
44    mov     [rcx + 0x10], rbp
45    mov     [rcx + 0x18], rdi
46    mov     [rcx + 0x20], rsi
47    mov     [rcx + 0x28], r12
48    mov     [rcx + 0x30], r13
49    mov     [rcx + 0x38], r14
50    mov     [rcx + 0x40], r15
51    mov     [rcx + 0x48], rdx
52    ; save non-volatile fp registers
53    stmxcsr [rcx + 0x50]
54    movdqu  [rcx + 0x58], xmm6
55    movdqu  [rcx + 0x68], xmm7
56    movdqu  [rcx + 0x78], xmm8
57    movdqu  [rcx + 0x88], xmm9
58    movdqu  [rcx + 0x98], xmm10
59    movdqu  [rcx + 0xA8], xmm11
60    movdqu  [rcx + 0xB8], xmm12
61    movdqu  [rcx + 0xC8], xmm13
62    movdqu  [rcx + 0xD8], xmm14
63    movdqu  [rcx + 0xE8], xmm15
64    xor     rax, rax
65    jmp     rdx
66
67