MdePkg/BaseLib: Add support for the XSETBV instruction
*v2: refine the coding format.
https://bugzilla.tianocore.org/show_bug.cgi?id=3284
This patch is to support XSETBV instruction so as to support
Extended Control Register(XCR) write.
Extended Control Register(XCR) read has already been supported
by below commit to support XGETBV instruction:
9b3ca509ab
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Ni Ray <ray.ni@intel.com>
Cc: Yao Jiewen <jiewen.yao@intel.com>
Signed-off-by: Jiaxin Wu <Jiaxin.wu@intel.com>
Signed-off-by: Zhang Hongbin1 <hongbin1.zhang@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
## @file
|
||||
# Base Library implementation.
|
||||
#
|
||||
# Copyright (c) 2007 - 2020, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>
|
||||
# Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
||||
# Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>
|
||||
# Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
|
||||
@@ -184,6 +184,7 @@
|
||||
Ia32/DisableCache.nasm| GCC
|
||||
Ia32/RdRand.nasm
|
||||
Ia32/XGetBv.nasm
|
||||
Ia32/XSetBv.nasm
|
||||
Ia32/VmgExit.nasm
|
||||
|
||||
Ia32/DivS64x64Remainder.c
|
||||
@@ -318,6 +319,7 @@
|
||||
X64/DisablePaging64.nasm
|
||||
X64/RdRand.nasm
|
||||
X64/XGetBv.nasm
|
||||
X64/XSetBv.nasm
|
||||
X64/VmgExit.nasm
|
||||
ChkStkGcc.c | GCC
|
||||
|
||||
|
34
MdePkg/Library/BaseLib/Ia32/XSetBv.nasm
Normal file
34
MdePkg/Library/BaseLib/Ia32/XSetBv.nasm
Normal file
@@ -0,0 +1,34 @@
|
||||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
|
||||
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
;
|
||||
; Module Name:
|
||||
;
|
||||
; XSetBv.nasm
|
||||
;
|
||||
; Abstract:
|
||||
;
|
||||
; AsmXSetBv function
|
||||
;
|
||||
; Notes:
|
||||
;
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
SECTION .text
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; UINT64
|
||||
; EFIAPI
|
||||
; AsmXSetBv (
|
||||
; IN UINT32 Index,
|
||||
; IN UINT64 Value
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
global ASM_PFX(AsmXSetBv)
|
||||
ASM_PFX(AsmXSetBv):
|
||||
mov edx, [esp + 12]
|
||||
mov eax, [esp + 8]
|
||||
mov ecx, [esp + 4]
|
||||
xsetbv
|
||||
ret
|
34
MdePkg/Library/BaseLib/X64/XSetBv.nasm
Normal file
34
MdePkg/Library/BaseLib/X64/XSetBv.nasm
Normal file
@@ -0,0 +1,34 @@
|
||||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
|
||||
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
;
|
||||
; Module Name:
|
||||
;
|
||||
; XSetBv.nasm
|
||||
;
|
||||
; Abstract:
|
||||
;
|
||||
; AsmXSetBv function
|
||||
;
|
||||
; Notes:
|
||||
;
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
DEFAULT REL
|
||||
SECTION .text
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; UINT64
|
||||
; EFIAPI
|
||||
; AsmXSetBv (
|
||||
; IN UINT32 Index,
|
||||
; IN UINT64 Value
|
||||
; );
|
||||
;------------------------------------------------------------------------------
|
||||
global ASM_PFX(AsmXSetBv)
|
||||
ASM_PFX(AsmXSetBv):
|
||||
mov rax, rdx ; meanwhile, rax <- return value
|
||||
shr rdx, 0x20 ; edx:eax contains the value to write
|
||||
xsetbv
|
||||
ret
|
Reference in New Issue
Block a user