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