1 ;------------------------------------------------------------------------------
3 ; Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
4 ; SPDX-License-Identifier: BSD-2-Clause-Patent
12 ; Implementation of SetJump() on x64.
14 ;------------------------------------------------------------------------------
21 extern ASM_PFX(InternalAssertJumpBuffer)
22 extern ASM_PFX(PcdGet32 (PcdControlFlowEnforcementPropertyMask))
24 ;------------------------------------------------------------------------------
28 ; OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer
30 ;------------------------------------------------------------------------------
31 global ASM_PFX(SetJump)
35 call ASM_PFX(InternalAssertJumpBuffer)
41 mov [rcx + 0xF8], rax ; save 0 to SSP
43 mov eax, [ASM_PFX(PcdGet32 (PcdControlFlowEnforcementPropertyMask))]
47 bt eax, 23 ; check if CET is enabled
51 INCSSP_RAX ; to read original SSP
53 mov [rcx + 0xF8], rax ; save SSP
67 ; save non-volatile fp registers
69 movdqu [rcx + 0x58], xmm6
70 movdqu [rcx + 0x68], xmm7
71 movdqu [rcx + 0x78], xmm8
72 movdqu [rcx + 0x88], xmm9
73 movdqu [rcx + 0x98], xmm10
74 movdqu [rcx + 0xA8], xmm11
75 movdqu [rcx + 0xB8], xmm12
76 movdqu [rcx + 0xC8], xmm13
77 movdqu [rcx + 0xD8], xmm14
78 movdqu [rcx + 0xE8], xmm15