From e3d50cc4d2807610ecb97b283b3e3d581025817c Mon Sep 17 00:00:00 2001 From: Jordan Justen Date: Mon, 30 May 2016 18:52:00 -0700 Subject: [PATCH] MdePkg BaseLib: Convert X64/SetJump.asm to NASM The BaseTools/Scripts/ConvertMasmToNasm.py script was used to convert X64/SetJump.asm to X64/SetJump.nasm Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen --- MdePkg/Library/BaseLib/BaseLib.inf | 2 + MdePkg/Library/BaseLib/X64/SetJump.nasm | 66 +++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 MdePkg/Library/BaseLib/X64/SetJump.nasm diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/BaseLib.inf index f9628e5805..e3408f28e3 100644 --- a/MdePkg/Library/BaseLib/BaseLib.inf +++ b/MdePkg/Library/BaseLib/BaseLib.inf @@ -435,6 +435,7 @@ X64/CpuId.asm X64/LongJump.nasm X64/LongJump.asm + X64/SetJump.nasm X64/SetJump.asm X64/SwitchStack.asm X64/EnableCache.asm @@ -607,6 +608,7 @@ X64/GccInline.c | GCC X64/Thunk16.S | XCODE X64/SwitchStack.S | GCC + X64/SetJump.nasm| GCC X64/SetJump.S | GCC X64/LongJump.nasm| GCC X64/LongJump.S | GCC diff --git a/MdePkg/Library/BaseLib/X64/SetJump.nasm b/MdePkg/Library/BaseLib/X64/SetJump.nasm new file mode 100644 index 0000000000..b1d0ff7121 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/SetJump.nasm @@ -0,0 +1,66 @@ +;------------------------------------------------------------------------------ +; +; Copyright (c) 2006, Intel Corporation. All rights reserved.
+; This program and the accompanying materials +; are licensed and made available under the terms and conditions of the BSD License +; which accompanies this distribution. The full text of the license may be found at +; http://opensource.org/licenses/bsd-license.php. +; +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +; +; Module Name: +; +; SetJump.Asm +; +; Abstract: +; +; Implementation of SetJump() on x64. +; +;------------------------------------------------------------------------------ + + DEFAULT REL + SECTION .text + +extern ASM_PFX(InternalAssertJumpBuffer) + +;------------------------------------------------------------------------------ +; UINTN +; EFIAPI +; SetJump ( +; OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer +; ); +;------------------------------------------------------------------------------ +global ASM_PFX(SetJump) +ASM_PFX(SetJump): + push rcx + add rsp, -0x20 + call ASM_PFX(InternalAssertJumpBuffer) + add rsp, 0x20 + pop rcx + pop rdx + mov [rcx], rbx + mov [rcx + 8], rsp + mov [rcx + 0x10], rbp + mov [rcx + 0x18], rdi + mov [rcx + 0x20], rsi + mov [rcx + 0x28], r12 + mov [rcx + 0x30], r13 + mov [rcx + 0x38], r14 + mov [rcx + 0x40], r15 + mov [rcx + 0x48], rdx + ; save non-volatile fp registers + stmxcsr [rcx + 0x50] + movdqu [rcx + 0x58], xmm6 + movdqu [rcx + 0x68], xmm7 + movdqu [rcx + 0x78], xmm8 + movdqu [rcx + 0x88], xmm9 + movdqu [rcx + 0x98], xmm10 + movdqu [rcx + 0xA8], xmm11 + movdqu [rcx + 0xB8], xmm12 + movdqu [rcx + 0xC8], xmm13 + movdqu [rcx + 0xD8], xmm14 + movdqu [rcx + 0xE8], xmm15 + xor rax, rax + jmp rdx +