Liming,

GccInline.c can be used in UnitTestHostBaseLib instance.
GccInlinePriv.c is the file that cannot be used in the.
UnitTestHostBaseLib instance.  

Here are the grep results in the branch:

  baselib.inf:  Ia32/GccInline.c | GCC
  baselib.inf:  Ia32/GccInlinePriv.c | GCC
  baselib.inf:  X64/GccInline.c | GCC
  baselib.inf:  X64/GccInlinePriv.c | GCC
  unittesthostbaselib.inf:  Ia32/GccInline.c | GCC
  unittesthostbaselib.inf:  X64/GccInline.c | GCC

Best regards,

Mike

> -----Original Message-----
> From: Gao, Liming <liming....@intel.com>
> Sent: Friday, July 10, 2020 1:06 AM
> To: Kinney, Michael D <michael.d.kin...@intel.com>;
> devel@edk2.groups.io
> Cc: Sean Brogan <sean.bro...@microsoft.com>; Bret
> Barkelew <bret.barke...@microsoft.com>; Yao, Jiewen
> <jiewen....@intel.com>
> Subject: RE: [Patch 04/15] MdePkg/BaseLib: Break out
> IA32/X64 GCC inline privileged functions
> 
> Mike:
>   So, GccInline.c file can't be used in the unit test
> BaseLib.
> 
> Thanks
> Liming
> -----Original Message-----
> From: Kinney, Michael D <michael.d.kin...@intel.com>
> Sent: 2020年7月10日 1:01
> To: Gao, Liming <liming....@intel.com>;
> devel@edk2.groups.io; Kinney, Michael D
> <michael.d.kin...@intel.com>
> Cc: Sean Brogan <sean.bro...@microsoft.com>; Bret
> Barkelew <bret.barke...@microsoft.com>; Yao, Jiewen
> <jiewen....@intel.com>
> Subject: RE: [Patch 04/15] MdePkg/BaseLib: Break out
> IA32/X64 GCC inline privileged functions
> 
> Liming,
> 
> In order to support host based unit tests, all the code
> has to be compatible with a user mode process.  This
> means
> any functions that execute instructions that are not
> allowed
> in a user mode process need to be separated out.
> 
> For the IA32/X64 specific GccInline.c files, the
> analysis
> was done for APIs that use instructions that would
> generate an exception in a user mode process.
> 
> In addition, the BaseLib functions that return system
> state (e.g. CS/DS/ES/SS/FS/GS) are also split out.  It
> does not make sense to return system state information
> from the currently executing user mode process.
> Instead,
> the FW code under test would expect system state that
> matches a FW execution environment.  Each unit test
> implementation has the option of providing emulation
> of this system state if that is required to exercise the
> code under test.
> 
> No changes to the MSFT specific BaseLib implementation
> were required because there those are already split out
> to one function per file.
> 
> Best regards,
> 
> Mike
> 
> > -----Original Message-----
> > From: Gao, Liming <liming....@intel.com>
> > Sent: Thursday, July 9, 2020 7:07 AM
> > To: Kinney, Michael D <michael.d.kin...@intel.com>;
> > devel@edk2.groups.io
> > Cc: Sean Brogan <sean.bro...@microsoft.com>; Bret
> > Barkelew <bret.barke...@microsoft.com>; Yao, Jiewen
> > <jiewen....@intel.com>
> > Subject: RE: [Patch 04/15] MdePkg/BaseLib: Break out
> > IA32/X64 GCC inline privileged functions
> >
> > Mike:
> >   Is there the rule to know which function can't be in
> > unit test? And, those functions will be in GccInline.c
> > or GccInlinePriv.c? There is no change in MSFT C
> source
> > file, because MSFT C source file has been separated as
> > the function level. Right?
> >
> > Thanks
> > Liming
> > > -----Original Message-----
> > > From: Kinney, Michael D <michael.d.kin...@intel.com>
> > > Sent: Monday, June 15, 2020 8:19 AM
> > > To: devel@edk2.groups.io
> > > Cc: Gao, Liming <liming....@intel.com>; Sean Brogan
> > <sean.bro...@microsoft.com>; Bret Barkelew
> > <bret.barke...@microsoft.com>;
> > > Yao, Jiewen <jiewen....@intel.com>
> > > Subject: [Patch 04/15] MdePkg/BaseLib: Break out
> > IA32/X64 GCC inline privileged functions
> > >
> > > https://bugzilla.tianocore.org/show_bug.cgi?id=2800
> > >
> > > Break out the IA32/X64 GCC inline functions that can
> > not be used
> > > in a unit test host application into their own
> source
> > file.  This
> > > does not make any changes to the BaseLib library
> > instance.  This
> > > is in preparation for a new BaseLib instances that
> is
> > safe to use
> > > with host-based unit test applications.
> > >
> > > Cc: Liming Gao <liming....@intel.com>
> > > Cc: Sean Brogan <sean.bro...@microsoft.com>
> > > Cc: Bret Barkelew <bret.barke...@microsoft.com>
> > > Cc: Jiewen Yao <jiewen....@intel.com>
> > > Signed-off-by: Michael D Kinney
> > <michael.d.kin...@intel.com>
> > > ---
> > >  MdePkg/Library/BaseLib/BaseLib.inf            |
> 4
> > +-
> > >  MdePkg/Library/BaseLib/Ia32/GccInline.c       |
> 1181
> > +---------------
> > >  .../Ia32/{GccInline.c => GccInlinePriv.c}     |
> 601
> > +-------
> > >  MdePkg/Library/BaseLib/X64/GccInline.c        |
> 1240
> > +----------------
> > >  .../X64/{GccInline.c => GccInlinePriv.c}      |
> 572
> > +-------
> > >  5 files changed, 11 insertions(+), 3587 deletions(-
> )
> > >  copy MdePkg/Library/BaseLib/Ia32/{GccInline.c =>
> > GccInlinePriv.c} (62%)
> > >  copy MdePkg/Library/BaseLib/X64/{GccInline.c =>
> > GccInlinePriv.c} (65%)
> > >
> > > diff --git a/MdePkg/Library/BaseLib/BaseLib.inf
> > b/MdePkg/Library/BaseLib/BaseLib.inf
> > > index a57ae2da31..c740a819ca 100644
> > > --- a/MdePkg/Library/BaseLib/BaseLib.inf
> > > +++ b/MdePkg/Library/BaseLib/BaseLib.inf
> > > @@ -1,7 +1,7 @@
> > >  ## @file
> > >  #  Base Library implementation.
> > >  #
> > > -#  Copyright (c) 2007 - 2019, Intel Corporation.
> All
> > rights reserved.<BR>
> > > +#  Copyright (c) 2007 - 2020, 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>
> > > @@ -156,6 +156,7 @@ [Sources.Ia32]
> > >
> > >
> > >    Ia32/GccInline.c | GCC
> > > +  Ia32/GccInlinePriv.c | GCC
> > >    Ia32/Thunk16.nasm
> > >    Ia32/EnableDisableInterrupts.nasm| GCC
> > >    Ia32/EnablePaging64.nasm
> > > @@ -310,6 +311,7 @@ [Sources.X64]
> > >    X86PatchInstruction.c
> > >    X86SpeculationBarrier.c
> > >    X64/GccInline.c | GCC
> > > +  X64/GccInlinePriv.c | GCC
> > >    X64/EnableDisableInterrupts.nasm
> > >    X64/DisablePaging64.nasm
> > >    X64/RdRand.nasm
> > > diff --git a/MdePkg/Library/BaseLib/Ia32/GccInline.c
> > b/MdePkg/Library/BaseLib/Ia32/GccInline.c
> > > index 5287200f87..6ed938187a 100644
> > > --- a/MdePkg/Library/BaseLib/Ia32/GccInline.c
> > > +++ b/MdePkg/Library/BaseLib/Ia32/GccInline.c
> > > @@ -1,7 +1,7 @@
> > >  /** @file
> > >    GCC inline implementation of BaseLib processor
> > specific functions.
> > >
> > > -  Copyright (c) 2006 - 2018, Intel Corporation. All
> > rights reserved.<BR>
> > > +  Copyright (c) 2006 - 2020, Intel Corporation. All
> > rights reserved.<BR>
> > >    Portions copyright (c) 2008 - 2009, Apple Inc.
> All
> > rights reserved.<BR>
> > >    SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > @@ -10,8 +10,6 @@
> > >
> > >  #include "BaseLibInternals.h"
> > >
> > > -
> > > -
> > >  /**
> > >    Used to serialize load and store operations.
> > >
> > > @@ -31,41 +29,6 @@ MemoryFence (
> > >    __asm__ __volatile__ ("":::"memory");
> > >  }
> > >
> > > -
> > > -/**
> > > -  Enables CPU interrupts.
> > > -
> > > -  Enables CPU interrupts.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -EnableInterrupts (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("sti"::: "memory");
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Disables CPU interrupts.
> > > -
> > > -  Disables CPU interrupts.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -DisableInterrupts (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("cli"::: "memory");
> > > -}
> > > -
> > > -
> > > -
> > > -
> > >  /**
> > >    Requests CPU to pause for a short period of time.
> > >
> > > @@ -82,7 +45,6 @@ CpuPause (
> > >    __asm__ __volatile__ ("pause");
> > >  }
> > >
> > > -
> > >  /**
> > >    Generates a breakpoint on the CPU.
> > >
> > > @@ -99,75 +61,6 @@ CpuBreakpoint (
> > >    __asm__ __volatile__ ("int $3");
> > >  }
> > >
> > > -
> > > -
> > > -/**
> > > -  Returns a 64-bit Machine Specific Register(MSR).
> > > -
> > > -  Reads and returns the 64-bit MSR specified by
> > Index. No parameter checking is
> > > -  performed on Index, and some Index values may
> cause
> > CPU exceptions. The
> > > -  caller must either guarantee that Index is valid,
> > or the caller must set up
> > > -  exception handlers to catch the exceptions. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @param  Index The 32-bit MSR index to read.
> > > -
> > > -  @return The value of the MSR identified by Index.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMsr64 (
> > > -  IN      UINT32                    Index
> > > -  )
> > > -{
> > > -  UINT64 Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "rdmsr"
> > > -    : "=A" (Data)   // %0
> > > -    : "c"  (Index)  // %1
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -/**
> > > -  Writes a 64-bit value to a Machine Specific
> > Register(MSR), and returns the
> > > -  value.
> > > -
> > > -  Writes the 64-bit value specified by Value to the
> > MSR specified by Index. The
> > > -  64-bit value written to the MSR is returned. No
> > parameter checking is
> > > -  performed on Index or Value, and some of these
> may
> > cause CPU exceptions. The
> > > -  caller must either guarantee that Index and Value
> > are valid, or the caller
> > > -  must establish proper exception handlers. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @param  Index The 32-bit MSR index to write.
> > > -  @param  Value The 64-bit value to write to the
> MSR.
> > > -
> > > -  @return Value
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmWriteMsr64 (
> > > -  IN      UINT32                    Index,
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "wrmsr"
> > > -    :
> > > -    : "c" (Index),
> > > -      "A" (Value)
> > > -    );
> > > -
> > > -  return Value;
> > > -}
> > > -
> > > -
> > > -
> > >  /**
> > >    Reads the current value of the EFLAGS register.
> > >
> > > @@ -195,965 +88,6 @@ AsmReadEflags (
> > >    return Eflags;
> > >  }
> > >
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of the Control Register 0
> > (CR0).
> > > -
> > > -  Reads and returns the current value of CR0. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of the Control Register 0
> (CR0).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadCr0 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN   Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%cr0,%0"
> > > -    : "=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of the Control Register 2
> > (CR2).
> > > -
> > > -  Reads and returns the current value of CR2. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of the Control Register 2
> (CR2).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadCr2 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%cr2, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -/**
> > > -  Reads the current value of the Control Register 3
> > (CR3).
> > > -
> > > -  Reads and returns the current value of CR3. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of the Control Register 3
> (CR3).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadCr3 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%cr3, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of the Control Register 4
> > (CR4).
> > > -
> > > -  Reads and returns the current value of CR4. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of the Control Register 4
> (CR4).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadCr4 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%cr4, %0"
> > > -    : "=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Control Register 0 (CR0).
> > > -
> > > -  Writes and returns a new value to CR0. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Cr0 The value to write to CR0.
> > > -
> > > -  @return The value written to CR0.
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteCr0 (
> > > -  UINTN  Cr0
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%cr0"
> > > -    :
> > > -    : "r" (Cr0)
> > > -    );
> > > -  return Cr0;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Control Register 2 (CR2).
> > > -
> > > -  Writes and returns a new value to CR2. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Cr2 The value to write to CR2.
> > > -
> > > -  @return The value written to CR2.
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteCr2 (
> > > -  UINTN  Cr2
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%cr2"
> > > -    :
> > > -    : "r" (Cr2)
> > > -    );
> > > -  return Cr2;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Control Register 3 (CR3).
> > > -
> > > -  Writes and returns a new value to CR3. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Cr3 The value to write to CR3.
> > > -
> > > -  @return The value written to CR3.
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteCr3 (
> > > -  UINTN  Cr3
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%cr3"
> > > -    :
> > > -    : "r" (Cr3)
> > > -    );
> > > -  return Cr3;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Control Register 4 (CR4).
> > > -
> > > -  Writes and returns a new value to CR4. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Cr4 The value to write to CR4.
> > > -
> > > -  @return The value written to CR4.
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteCr4 (
> > > -  UINTN  Cr4
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%cr4"
> > > -    :
> > > -    : "r" (Cr4)
> > > -    );
> > > -  return Cr4;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 0
> (DR0).
> > > -
> > > -  Reads and returns the current value of DR0. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 0 (DR0).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr0 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%dr0, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 1
> (DR1).
> > > -
> > > -  Reads and returns the current value of DR1. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 1 (DR1).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr1 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%dr1, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 2
> (DR2).
> > > -
> > > -  Reads and returns the current value of DR2. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 2 (DR2).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr2 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%dr2, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 3
> (DR3).
> > > -
> > > -  Reads and returns the current value of DR3. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 3 (DR3).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr3 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%dr3, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 4
> (DR4).
> > > -
> > > -  Reads and returns the current value of DR4. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 4 (DR4).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr4 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%dr4, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 5
> (DR5).
> > > -
> > > -  Reads and returns the current value of DR5. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 5 (DR5).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr5 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%dr5, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 6
> (DR6).
> > > -
> > > -  Reads and returns the current value of DR6. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 6 (DR6).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr6 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%dr6, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 7
> (DR7).
> > > -
> > > -  Reads and returns the current value of DR7. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 7 (DR7).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr7 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movl %%dr7, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 0 (DR0).
> > > -
> > > -  Writes and returns a new value to DR0. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr0 The value to write to Dr0.
> > > -
> > > -  @return The value written to Debug Register 0
> > (DR0).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr0 (
> > > -  UINTN  Dr0
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%dr0"
> > > -    :
> > > -    : "r" (Dr0)
> > > -    );
> > > -  return Dr0;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 1 (DR1).
> > > -
> > > -  Writes and returns a new value to DR1. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr1 The value to write to Dr1.
> > > -
> > > -  @return The value written to Debug Register 1
> > (DR1).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr1 (
> > > -  UINTN  Dr1
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%dr1"
> > > -    :
> > > -    : "r" (Dr1)
> > > -    );
> > > -  return Dr1;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 2 (DR2).
> > > -
> > > -  Writes and returns a new value to DR2. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr2 The value to write to Dr2.
> > > -
> > > -  @return The value written to Debug Register 2
> > (DR2).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr2 (
> > > -  UINTN  Dr2
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%dr2"
> > > -    :
> > > -    : "r" (Dr2)
> > > -    );
> > > -  return Dr2;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 3 (DR3).
> > > -
> > > -  Writes and returns a new value to DR3. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr3 The value to write to Dr3.
> > > -
> > > -  @return The value written to Debug Register 3
> > (DR3).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr3 (
> > > -  UINTN  Dr3
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%dr3"
> > > -    :
> > > -    : "r" (Dr3)
> > > -    );
> > > -  return Dr3;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 4 (DR4).
> > > -
> > > -  Writes and returns a new value to DR4. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr4 The value to write to Dr4.
> > > -
> > > -  @return The value written to Debug Register 4
> > (DR4).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr4 (
> > > -  UINTN  Dr4
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%dr4"
> > > -    :
> > > -    : "r" (Dr4)
> > > -    );
> > > -  return Dr4;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 5 (DR5).
> > > -
> > > -  Writes and returns a new value to DR5. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr5 The value to write to Dr5.
> > > -
> > > -  @return The value written to Debug Register 5
> > (DR5).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr5 (
> > > -  UINTN  Dr5
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%dr5"
> > > -    :
> > > -    : "r" (Dr5)
> > > -    );
> > > -  return Dr5;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 6 (DR6).
> > > -
> > > -  Writes and returns a new value to DR6. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr6 The value to write to Dr6.
> > > -
> > > -  @return The value written to Debug Register 6
> > (DR6).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr6 (
> > > -  UINTN  Dr6
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%dr6"
> > > -    :
> > > -    : "r" (Dr6)
> > > -    );
> > > -  return Dr6;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 7 (DR7).
> > > -
> > > -  Writes and returns a new value to DR7. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr7 The value to write to Dr7.
> > > -
> > > -  @return The value written to Debug Register 7
> > (DR7).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr7 (
> > > -  UINTN  Dr7
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movl %0, %%dr7"
> > > -    :
> > > -    : "r" (Dr7)
> > > -    );
> > > -  return Dr7;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Code Segment Register
> > (CS).
> > > -
> > > -  Reads and returns the current value of CS. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of CS.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadCs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov   %%cs, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Data Segment Register
> > (DS).
> > > -
> > > -  Reads and returns the current value of DS. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of DS.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadDs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%ds, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Extra Segment Register
> > (ES).
> > > -
> > > -  Reads and returns the current value of ES. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of ES.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadEs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%es, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of FS Data Segment
> Register
> > (FS).
> > > -
> > > -  Reads and returns the current value of FS. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of FS.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadFs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%fs, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of GS Data Segment
> Register
> > (GS).
> > > -
> > > -  Reads and returns the current value of GS. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of GS.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadGs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%gs, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Stack Segment Register
> > (SS).
> > > -
> > > -  Reads and returns the current value of SS. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of SS.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadSs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%ds, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Task Register (TR).
> > > -
> > > -  Reads and returns the current value of TR. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of TR.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadTr (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "str  %0"
> > > -    : "=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current Global Descriptor Table
> > Register(GDTR) descriptor.
> > > -
> > > -  Reads and returns the current GDTR descriptor and
> > returns it in Gdtr. This
> > > -  function is only available on IA-32 and X64.
> > > -
> > > -  @param  Gdtr  The pointer to a GDTR descriptor.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86ReadGdtr (
> > > -  OUT     IA32_DESCRIPTOR           *Gdtr
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "sgdt %0"
> > > -    : "=m" (*Gdtr)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current Global Descriptor Table
> Register
> > (GDTR) descriptor.
> > > -
> > > -  Writes and the current GDTR descriptor specified
> by
> > Gdtr. This function is
> > > -  only available on IA-32 and X64.
> > > -
> > > -  @param  Gdtr  The pointer to a GDTR descriptor.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86WriteGdtr (
> > > -  IN      CONST IA32_DESCRIPTOR     *Gdtr
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "lgdt %0"
> > > -    :
> > > -    : "m" (*Gdtr)
> > > -    );
> > > -
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current Interrupt Descriptor Table
> > Register(GDTR) descriptor.
> > > -
> > > -  Reads and returns the current IDTR descriptor and
> > returns it in Idtr. This
> > > -  function is only available on IA-32 and X64.
> > > -
> > > -  @param  Idtr  The pointer to a IDTR descriptor.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86ReadIdtr (
> > > -  OUT     IA32_DESCRIPTOR           *Idtr
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "sidt  %0"
> > > -    : "=m" (*Idtr)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current Interrupt Descriptor Table
> > Register(GDTR) descriptor.
> > > -
> > > -  Writes the current IDTR descriptor and returns it
> > in Idtr. This function is
> > > -  only available on IA-32 and X64.
> > > -
> > > -  @param  Idtr  The pointer to a IDTR descriptor.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86WriteIdtr (
> > > -  IN      CONST IA32_DESCRIPTOR     *Idtr
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "lidt %0"
> > > -    :
> > > -    : "m" (*Idtr)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current Local Descriptor Table
> > Register(LDTR) selector.
> > > -
> > > -  Reads and returns the current 16-bit LDTR
> > descriptor value. This function is
> > > -  only available on IA-32 and X64.
> > > -
> > > -  @return The current selector of LDT.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadLdtr (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "sldt  %0"
> > > -    : "=g" (Data)   // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current Local Descriptor Table
> Register
> > (GDTR) selector.
> > > -
> > > -  Writes and the current LDTR descriptor specified
> by
> > Ldtr. This function is
> > > -  only available on IA-32 and X64.
> > > -
> > > -  @param  Ldtr  16-bit LDTR selector value.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteLdtr (
> > > -  IN      UINT16                    Ldtr
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "lldtw  %0"
> > > -    :
> > > -    : "g" (Ldtr)   // %0
> > > -    );
> > > -}
> > > -
> > > -
> > >  /**
> > >    Save the current floating point/SSE/SSE2 context
> to
> > a buffer.
> > >
> > > @@ -1650,116 +584,3 @@ AsmReadTsc (
> > >
> > >    return Data;
> > >  }
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of a Performance Counter
> > (PMC).
> > > -
> > > -  Reads and returns the current value of
> performance
> > counter specified by
> > > -  Index. This function is only available on IA-32
> and
> > X64.
> > > -
> > > -  @param  Index The 32-bit Performance Counter
> index
> > to read.
> > > -
> > > -  @return The value of the PMC specified by Index.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadPmc (
> > > -  IN      UINT32                    Index
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "rdpmc"
> > > -    : "=A" (Data)
> > > -    : "c"  (Index)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -
> > > -
> > > -/**
> > > -  Executes a WBINVD instruction.
> > > -
> > > -  Executes a WBINVD instruction. This function is
> > only available on IA-32 and
> > > -  X64.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWbinvd (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("wbinvd":::"memory");
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Executes a INVD instruction.
> > > -
> > > -  Executes a INVD instruction. This function is
> only
> > available on IA-32 and
> > > -  X64.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmInvd (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("invd":::"memory");
> > > -
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Flushes a cache line from all the instruction and
> > data caches within the
> > > -  coherency domain of the CPU.
> > > -
> > > -  Flushed the cache line specified by
> LinearAddress,
> > and returns LinearAddress.
> > > -  This function is only available on IA-32 and X64.
> > > -
> > > -  @param  LinearAddress The address of the cache
> line
> > to flush. If the CPU is
> > > -                        in a physical addressing
> > mode, then LinearAddress is a
> > > -                        physical address. If the
> CPU
> > is in a virtual
> > > -                        addressing mode, then
> > LinearAddress is a virtual
> > > -                        address.
> > > -
> > > -  @return LinearAddress
> > > -**/
> > > -VOID *
> > > -EFIAPI
> > > -AsmFlushCacheLine (
> > > -  IN      VOID                      *LinearAddress
> > > -  )
> > > -{
> > > -  UINT32  RegEdx;
> > > -
> > > -  //
> > > -  // If the CPU does not support CLFLUSH
> instruction,
> > > -  // then promote flush range to flush entire
> cache.
> > > -  //
> > > -  AsmCpuid (0x01, NULL, NULL, NULL, &RegEdx);
> > > -  if ((RegEdx & BIT19) == 0) {
> > > -    __asm__ __volatile__ ("wbinvd":::"memory");
> > > -    return LinearAddress;
> > > -  }
> > > -
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "clflush (%0)"
> > > -    : "+a" (LinearAddress)
> > > -    :
> > > -    : "memory"
> > > -    );
> > > -
> > > -  return LinearAddress;
> > > -}
> > > -
> > > -
> > > diff --git a/MdePkg/Library/BaseLib/Ia32/GccInline.c
> > b/MdePkg/Library/BaseLib/Ia32/GccInlinePriv.c
> > > similarity index 62%
> > > copy from MdePkg/Library/BaseLib/Ia32/GccInline.c
> > > copy to MdePkg/Library/BaseLib/Ia32/GccInlinePriv.c
> > > index 5287200f87..30aa63243b 100644
> > > --- a/MdePkg/Library/BaseLib/Ia32/GccInline.c
> > > +++ b/MdePkg/Library/BaseLib/Ia32/GccInlinePriv.c
> > > @@ -1,7 +1,8 @@
> > >  /** @file
> > > -  GCC inline implementation of BaseLib processor
> > specific functions.
> > > +  GCC inline implementation of BaseLib processor
> > specific functions that use
> > > +  privlidged instructions.
> > >
> > > -  Copyright (c) 2006 - 2018, Intel Corporation. All
> > rights reserved.<BR>
> > > +  Copyright (c) 2006 - 2020, Intel Corporation. All
> > rights reserved.<BR>
> > >    Portions copyright (c) 2008 - 2009, Apple Inc.
> All
> > rights reserved.<BR>
> > >    SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > @@ -10,28 +11,6 @@
> > >
> > >  #include "BaseLibInternals.h"
> > >
> > > -
> > > -
> > > -/**
> > > -  Used to serialize load and store operations.
> > > -
> > > -  All loads and stores that proceed calls to this
> > function are guaranteed to be
> > > -  globally visible when this function returns.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -MemoryFence (
> > > -  VOID
> > > -  )
> > > -{
> > > -  // This is a little bit of overkill and it is
> more
> > about the compiler that it is
> > > -  // actually processor synchronization. This is
> like
> > the _ReadWriteBarrier
> > > -  // Microsoft specific intrinsic
> > > -  __asm__ __volatile__ ("":::"memory");
> > > -}
> > > -
> > > -
> > >  /**
> > >    Enables CPU interrupts.
> > >
> > > @@ -63,44 +42,6 @@ DisableInterrupts (
> > >    __asm__ __volatile__ ("cli"::: "memory");
> > >  }
> > >
> > > -
> > > -
> > > -
> > > -/**
> > > -  Requests CPU to pause for a short period of time.
> > > -
> > > -  Requests CPU to pause for a short period of time.
> > Typically used in MP
> > > -  systems to prevent memory starvation while
> waiting
> > for a spin lock.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -CpuPause (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("pause");
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Generates a breakpoint on the CPU.
> > > -
> > > -  Generates a breakpoint on the CPU. The breakpoint
> > must be implemented such
> > > -  that code can resume normal execution after the
> > breakpoint.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -CpuBreakpoint (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("int $3");
> > > -}
> > > -
> > > -
> > > -
> > >  /**
> > >    Returns a 64-bit Machine Specific Register(MSR).
> > >
> > > @@ -166,37 +107,6 @@ AsmWriteMsr64 (
> > >    return Value;
> > >  }
> > >
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of the EFLAGS register.
> > > -
> > > -  Reads and returns the current value of the EFLAGS
> > register. This function is
> > > -  only available on IA-32 and X64. This returns a
> 32-
> > bit value on IA-32 and a
> > > -  64-bit value on X64.
> > > -
> > > -  @return EFLAGS on IA-32 or RFLAGS on X64.
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadEflags (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Eflags;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "pushfl     \n\t"
> > > -    "popl %0        "
> > > -    : "=r" (Eflags)
> > > -    );
> > > -
> > > -  return Eflags;
> > > -}
> > > -
> > > -
> > > -
> > >  /**
> > >    Reads the current value of the Control Register 0
> > (CR0).
> > >
> > > @@ -1153,505 +1063,6 @@ AsmWriteLdtr (
> > >      );
> > >  }
> > >
> > > -
> > > -/**
> > > -  Save the current floating point/SSE/SSE2 context
> to
> > a buffer.
> > > -
> > > -  Saves the current floating point/SSE/SSE2 state
> to
> > the buffer specified by
> > > -  Buffer. Buffer must be aligned on a 16-byte
> > boundary. This function is only
> > > -  available on IA-32 and X64.
> > > -
> > > -  @param  Buffer  The pointer to a buffer to save
> the
> > floating point/SSE/SSE2 context.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86FxSave (
> > > -  OUT     IA32_FX_BUFFER            *Buffer
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "fxsave %0"
> > > -    :
> > > -    : "m" (*Buffer)  // %0
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Restores the current floating point/SSE/SSE2
> > context from a buffer.
> > > -
> > > -  Restores the current floating point/SSE/SSE2
> state
> > from the buffer specified
> > > -  by Buffer. Buffer must be aligned on a 16-byte
> > boundary. This function is
> > > -  only available on IA-32 and X64.
> > > -
> > > -  @param  Buffer  The pointer to a buffer to save
> the
> > floating point/SSE/SSE2 context.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86FxRestore (
> > > -  IN      CONST IA32_FX_BUFFER      *Buffer
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "fxrstor %0"
> > > -    :
> > > -    : "m" (*Buffer)  // %0
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #0
> > (MM0).
> > > -
> > > -  Reads and returns the current value of MM0. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM0.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm0 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "push %%eax          \n\t"
> > > -    "push %%eax          \n\t"
> > > -    "movq %%mm0,  (%%esp)\n\t"
> > > -    "pop  %%eax          \n\t"
> > > -    "pop  %%edx          \n\t"
> > > -    : "=A"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #1
> > (MM1).
> > > -
> > > -  Reads and returns the current value of MM1. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM1.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm1 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "push %%eax          \n\t"
> > > -    "push %%eax          \n\t"
> > > -    "movq %%mm1,  (%%esp)\n\t"
> > > -    "pop  %%eax          \n\t"
> > > -    "pop  %%edx          \n\t"
> > > -    : "=A"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #2
> > (MM2).
> > > -
> > > -  Reads and returns the current value of MM2. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM2.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm2 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "push %%eax          \n\t"
> > > -    "push %%eax          \n\t"
> > > -    "movq %%mm2,  (%%esp)\n\t"
> > > -    "pop  %%eax          \n\t"
> > > -    "pop  %%edx          \n\t"
> > > -    : "=A"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #3
> > (MM3).
> > > -
> > > -  Reads and returns the current value of MM3. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM3.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm3 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "push %%eax          \n\t"
> > > -    "push %%eax          \n\t"
> > > -    "movq %%mm3,  (%%esp)\n\t"
> > > -    "pop  %%eax          \n\t"
> > > -    "pop  %%edx          \n\t"
> > > -    : "=A"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #4
> > (MM4).
> > > -
> > > -  Reads and returns the current value of MM4. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM4.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm4 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "push %%eax          \n\t"
> > > -    "push %%eax          \n\t"
> > > -    "movq %%mm4,  (%%esp)\n\t"
> > > -    "pop  %%eax          \n\t"
> > > -    "pop  %%edx          \n\t"
> > > -    : "=A"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #5
> > (MM5).
> > > -
> > > -  Reads and returns the current value of MM5. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM5.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm5 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "push %%eax          \n\t"
> > > -    "push %%eax          \n\t"
> > > -    "movq %%mm5,  (%%esp)\n\t"
> > > -    "pop  %%eax          \n\t"
> > > -    "pop  %%edx          \n\t"
> > > -    : "=A"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #6
> > (MM6).
> > > -
> > > -  Reads and returns the current value of MM6. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM6.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm6 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "push %%eax          \n\t"
> > > -    "push %%eax          \n\t"
> > > -    "movq %%mm6,  (%%esp)\n\t"
> > > -    "pop  %%eax          \n\t"
> > > -    "pop  %%edx          \n\t"
> > > -    : "=A"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #7
> > (MM7).
> > > -
> > > -  Reads and returns the current value of MM7. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM7.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm7 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "push %%eax          \n\t"
> > > -    "push %%eax          \n\t"
> > > -    "movq %%mm7,  (%%esp)\n\t"
> > > -    "pop  %%eax          \n\t"
> > > -    "pop  %%edx          \n\t"
> > > -    : "=A"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #0
> > (MM0).
> > > -
> > > -  Writes the current value of MM0. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM0.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm0 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movq %0, %%mm0"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #1
> > (MM1).
> > > -
> > > -  Writes the current value of MM1. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM1.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm1 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movq %0, %%mm1"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #2
> > (MM2).
> > > -
> > > -  Writes the current value of MM2. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM2.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm2 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movq %0, %%mm2"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #3
> > (MM3).
> > > -
> > > -  Writes the current value of MM3. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM3.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm3 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movq %0, %%mm3"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #4
> > (MM4).
> > > -
> > > -  Writes the current value of MM4. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM4.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm4 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movq %0, %%mm4"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #5
> > (MM5).
> > > -
> > > -  Writes the current value of MM5. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM5.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm5 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movq %0, %%mm5"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #6
> > (MM6).
> > > -
> > > -  Writes the current value of MM6. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM6.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm6 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movq %0, %%mm6"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #7
> > (MM7).
> > > -
> > > -  Writes the current value of MM7. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM7.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm7 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movq %0, %%mm7"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Time Stamp Counter
> > (TSC).
> > > -
> > > -  Reads and returns the current value of TSC. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of TSC
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadTsc (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "rdtsc"
> > > -    : "=A" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > >  /**
> > >    Reads the current value of a Performance Counter
> > (PMC).
> > >
> > > @@ -1680,9 +1091,6 @@ AsmReadPmc (
> > >    return Data;
> > >  }
> > >
> > > -
> > > -
> > > -
> > >  /**
> > >    Executes a WBINVD instruction.
> > >
> > > @@ -1699,7 +1107,6 @@ AsmWbinvd (
> > >    __asm__ __volatile__ ("wbinvd":::"memory");
> > >  }
> > >
> > > -
> > >  /**
> > >    Executes a INVD instruction.
> > >
> > > @@ -1761,5 +1168,3 @@ AsmFlushCacheLine (
> > >
> > >    return LinearAddress;
> > >  }
> > > -
> > > -
> > > diff --git a/MdePkg/Library/BaseLib/X64/GccInline.c
> > b/MdePkg/Library/BaseLib/X64/GccInline.c
> > > index 154ce1f57e..40a208f198 100644
> > > --- a/MdePkg/Library/BaseLib/X64/GccInline.c
> > > +++ b/MdePkg/Library/BaseLib/X64/GccInline.c
> > > @@ -1,7 +1,7 @@
> > >  /** @file
> > >    GCC inline implementation of BaseLib processor
> > specific functions.
> > >
> > > -  Copyright (c) 2006 - 2018, Intel Corporation. All
> > rights reserved.<BR>
> > > +  Copyright (c) 2006 - 2020, Intel Corporation. All
> > rights reserved.<BR>
> > >    Portions copyright (c) 2008 - 2009, Apple Inc.
> All
> > rights reserved.<BR>
> > >    SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > @@ -33,40 +33,6 @@ MemoryFence (
> > >  }
> > >
> > >
> > > -/**
> > > -  Enables CPU interrupts.
> > > -
> > > -  Enables CPU interrupts.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -EnableInterrupts (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("sti"::: "memory");
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Disables CPU interrupts.
> > > -
> > > -  Disables CPU interrupts.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -DisableInterrupts (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("cli"::: "memory");
> > > -}
> > > -
> > > -
> > > -
> > > -
> > >  /**
> > >    Requests CPU to pause for a short period of time.
> > >
> > > @@ -101,83 +67,6 @@ CpuBreakpoint (
> > >  }
> > >
> > >
> > > -
> > > -/**
> > > -  Returns a 64-bit Machine Specific Register(MSR).
> > > -
> > > -  Reads and returns the 64-bit MSR specified by
> > Index. No parameter checking is
> > > -  performed on Index, and some Index values may
> cause
> > CPU exceptions. The
> > > -  caller must either guarantee that Index is valid,
> > or the caller must set up
> > > -  exception handlers to catch the exceptions. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @param  Index The 32-bit MSR index to read.
> > > -
> > > -  @return The value of the MSR identified by Index.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMsr64 (
> > > -  IN      UINT32                    Index
> > > -  )
> > > -{
> > > -  UINT32 LowData;
> > > -  UINT32 HighData;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "rdmsr"
> > > -    : "=a" (LowData),   // %0
> > > -      "=d" (HighData)   // %1
> > > -    : "c"  (Index)      // %2
> > > -    );
> > > -
> > > -  return (((UINT64)HighData) << 32) | LowData;
> > > -}
> > > -
> > > -/**
> > > -  Writes a 64-bit value to a Machine Specific
> > Register(MSR), and returns the
> > > -  value.
> > > -
> > > -  Writes the 64-bit value specified by Value to the
> > MSR specified by Index. The
> > > -  64-bit value written to the MSR is returned. No
> > parameter checking is
> > > -  performed on Index or Value, and some of these
> may
> > cause CPU exceptions. The
> > > -  caller must either guarantee that Index and Value
> > are valid, or the caller
> > > -  must establish proper exception handlers. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @param  Index The 32-bit MSR index to write.
> > > -  @param  Value The 64-bit value to write to the
> MSR.
> > > -
> > > -  @return Value
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmWriteMsr64 (
> > > -  IN      UINT32                    Index,
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  UINT32 LowData;
> > > -  UINT32 HighData;
> > > -
> > > -  LowData  = (UINT32)(Value);
> > > -  HighData = (UINT32)(Value >> 32);
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "wrmsr"
> > > -    :
> > > -    : "c" (Index),
> > > -      "a" (LowData),
> > > -      "d" (HighData)
> > > -    );
> > > -
> > > -  return Value;
> > > -}
> > > -
> > > -
> > > -
> > >  /**
> > >    Reads the current value of the EFLAGS register.
> > >
> > > @@ -205,965 +94,6 @@ AsmReadEflags (
> > >    return Eflags;
> > >  }
> > >
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of the Control Register 0
> > (CR0).
> > > -
> > > -  Reads and returns the current value of CR0. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of the Control Register 0
> (CR0).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadCr0 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN   Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%cr0,%0"
> > > -    : "=r" (Data)           // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of the Control Register 2
> > (CR2).
> > > -
> > > -  Reads and returns the current value of CR2. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of the Control Register 2
> (CR2).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadCr2 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%cr2,  %0"
> > > -    : "=r" (Data)           // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -/**
> > > -  Reads the current value of the Control Register 3
> > (CR3).
> > > -
> > > -  Reads and returns the current value of CR3. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of the Control Register 3
> (CR3).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadCr3 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%cr3,  %0"
> > > -    : "=r" (Data)           // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of the Control Register 4
> > (CR4).
> > > -
> > > -  Reads and returns the current value of CR4. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of the Control Register 4
> (CR4).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadCr4 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%cr4,  %0"
> > > -    : "=r" (Data)           // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Control Register 0 (CR0).
> > > -
> > > -  Writes and returns a new value to CR0. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Cr0 The value to write to CR0.
> > > -
> > > -  @return The value written to CR0.
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteCr0 (
> > > -  UINTN  Cr0
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%cr0"
> > > -    :
> > > -    : "r" (Cr0)
> > > -    );
> > > -  return Cr0;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Control Register 2 (CR2).
> > > -
> > > -  Writes and returns a new value to CR2. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Cr2 The value to write to CR2.
> > > -
> > > -  @return The value written to CR2.
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteCr2 (
> > > -  UINTN  Cr2
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%cr2"
> > > -    :
> > > -    : "r" (Cr2)
> > > -    );
> > > -  return Cr2;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Control Register 3 (CR3).
> > > -
> > > -  Writes and returns a new value to CR3. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Cr3 The value to write to CR3.
> > > -
> > > -  @return The value written to CR3.
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteCr3 (
> > > -  UINTN  Cr3
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%cr3"
> > > -    :
> > > -    : "r" (Cr3)
> > > -    );
> > > -  return Cr3;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Control Register 4 (CR4).
> > > -
> > > -  Writes and returns a new value to CR4. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Cr4 The value to write to CR4.
> > > -
> > > -  @return The value written to CR4.
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteCr4 (
> > > -  UINTN  Cr4
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%cr4"
> > > -    :
> > > -    : "r" (Cr4)
> > > -    );
> > > -  return Cr4;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 0
> (DR0).
> > > -
> > > -  Reads and returns the current value of DR0. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 0 (DR0).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr0 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%dr0, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 1
> (DR1).
> > > -
> > > -  Reads and returns the current value of DR1. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 1 (DR1).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr1 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%dr1, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 2
> (DR2).
> > > -
> > > -  Reads and returns the current value of DR2. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 2 (DR2).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr2 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%dr2, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 3
> (DR3).
> > > -
> > > -  Reads and returns the current value of DR3. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 3 (DR3).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr3 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%dr3, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 4
> (DR4).
> > > -
> > > -  Reads and returns the current value of DR4. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 4 (DR4).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr4 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%dr4, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 5
> (DR5).
> > > -
> > > -  Reads and returns the current value of DR5. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 5 (DR5).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr5 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%dr5, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 6
> (DR6).
> > > -
> > > -  Reads and returns the current value of DR6. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 6 (DR6).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr6 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%dr6, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Debug Register 7
> (DR7).
> > > -
> > > -  Reads and returns the current value of DR7. This
> > function is only available
> > > -  on IA-32 and X64. This returns a 32-bit value on
> > IA-32 and a 64-bit value on
> > > -  X64.
> > > -
> > > -  @return The value of Debug Register 7 (DR7).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadDr7 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%dr7, %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 0 (DR0).
> > > -
> > > -  Writes and returns a new value to DR0. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr0 The value to write to Dr0.
> > > -
> > > -  @return The value written to Debug Register 0
> > (DR0).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr0 (
> > > -  UINTN  Dr0
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%dr0"
> > > -    :
> > > -    : "r" (Dr0)
> > > -    );
> > > -  return Dr0;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 1 (DR1).
> > > -
> > > -  Writes and returns a new value to DR1. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr1 The value to write to Dr1.
> > > -
> > > -  @return The value written to Debug Register 1
> > (DR1).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr1 (
> > > -  UINTN  Dr1
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%dr1"
> > > -    :
> > > -    : "r" (Dr1)
> > > -    );
> > > -  return Dr1;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 2 (DR2).
> > > -
> > > -  Writes and returns a new value to DR2. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr2 The value to write to Dr2.
> > > -
> > > -  @return The value written to Debug Register 2
> > (DR2).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr2 (
> > > -  UINTN  Dr2
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%dr2"
> > > -    :
> > > -    : "r" (Dr2)
> > > -    );
> > > -  return Dr2;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 3 (DR3).
> > > -
> > > -  Writes and returns a new value to DR3. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr3 The value to write to Dr3.
> > > -
> > > -  @return The value written to Debug Register 3
> > (DR3).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr3 (
> > > -  UINTN  Dr3
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%dr3"
> > > -    :
> > > -    : "r" (Dr3)
> > > -    );
> > > -  return Dr3;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 4 (DR4).
> > > -
> > > -  Writes and returns a new value to DR4. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr4 The value to write to Dr4.
> > > -
> > > -  @return The value written to Debug Register 4
> > (DR4).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr4 (
> > > -  UINTN  Dr4
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%dr4"
> > > -    :
> > > -    : "r" (Dr4)
> > > -    );
> > > -  return Dr4;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 5 (DR5).
> > > -
> > > -  Writes and returns a new value to DR5. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr5 The value to write to Dr5.
> > > -
> > > -  @return The value written to Debug Register 5
> > (DR5).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr5 (
> > > -  UINTN  Dr5
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%dr5"
> > > -    :
> > > -    : "r" (Dr5)
> > > -    );
> > > -  return Dr5;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 6 (DR6).
> > > -
> > > -  Writes and returns a new value to DR6. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr6 The value to write to Dr6.
> > > -
> > > -  @return The value written to Debug Register 6
> > (DR6).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr6 (
> > > -  UINTN  Dr6
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%dr6"
> > > -    :
> > > -    : "r" (Dr6)
> > > -    );
> > > -  return Dr6;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes a value to Debug Register 7 (DR7).
> > > -
> > > -  Writes and returns a new value to DR7. This
> > function is only available on
> > > -  IA-32 and X64. This writes a 32-bit value on IA-
> 32
> > and a 64-bit value on X64.
> > > -
> > > -  @param  Dr7 The value to write to Dr7.
> > > -
> > > -  @return The value written to Debug Register 7
> > (DR7).
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmWriteDr7 (
> > > -  UINTN  Dr7
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mov  %0, %%dr7"
> > > -    :
> > > -    : "r" (Dr7)
> > > -    );
> > > -  return Dr7;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Code Segment Register
> > (CS).
> > > -
> > > -  Reads and returns the current value of CS. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of CS.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadCs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov   %%cs, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Data Segment Register
> > (DS).
> > > -
> > > -  Reads and returns the current value of DS. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of DS.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadDs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%ds, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Extra Segment Register
> > (ES).
> > > -
> > > -  Reads and returns the current value of ES. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of ES.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadEs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%es, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of FS Data Segment
> Register
> > (FS).
> > > -
> > > -  Reads and returns the current value of FS. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of FS.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadFs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%fs, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of GS Data Segment
> Register
> > (GS).
> > > -
> > > -  Reads and returns the current value of GS. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of GS.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadGs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%gs, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Stack Segment Register
> > (SS).
> > > -
> > > -  Reads and returns the current value of SS. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of SS.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadSs (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "mov  %%ds, %0"
> > > -    :"=a" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Task Register (TR).
> > > -
> > > -  Reads and returns the current value of TR. This
> > function is only available on
> > > -  IA-32 and X64.
> > > -
> > > -  @return The current value of TR.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadTr (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "str  %0"
> > > -    : "=r" (Data)
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current Global Descriptor Table
> > Register(GDTR) descriptor.
> > > -
> > > -  Reads and returns the current GDTR descriptor and
> > returns it in Gdtr. This
> > > -  function is only available on IA-32 and X64.
> > > -
> > > -  @param  Gdtr  The pointer to a GDTR descriptor.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86ReadGdtr (
> > > -  OUT     IA32_DESCRIPTOR           *Gdtr
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "sgdt %0"
> > > -    : "=m" (*Gdtr)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current Global Descriptor Table
> Register
> > (GDTR) descriptor.
> > > -
> > > -  Writes and the current GDTR descriptor specified
> by
> > Gdtr. This function is
> > > -  only available on IA-32 and X64.
> > > -
> > > -  @param  Gdtr  The pointer to a GDTR descriptor.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86WriteGdtr (
> > > -  IN      CONST IA32_DESCRIPTOR     *Gdtr
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "lgdt %0"
> > > -    :
> > > -    : "m" (*Gdtr)
> > > -    );
> > > -
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current Interrupt Descriptor Table
> > Register(GDTR) descriptor.
> > > -
> > > -  Reads and returns the current IDTR descriptor and
> > returns it in Idtr. This
> > > -  function is only available on IA-32 and X64.
> > > -
> > > -  @param  Idtr  The pointer to a IDTR descriptor.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86ReadIdtr (
> > > -  OUT     IA32_DESCRIPTOR           *Idtr
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "sidt  %0"
> > > -    : "=m" (*Idtr)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current Interrupt Descriptor Table
> > Register(GDTR) descriptor.
> > > -
> > > -  Writes the current IDTR descriptor and returns it
> > in Idtr. This function is
> > > -  only available on IA-32 and X64.
> > > -
> > > -  @param  Idtr  The pointer to a IDTR descriptor.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86WriteIdtr (
> > > -  IN      CONST IA32_DESCRIPTOR     *Idtr
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "lidt %0"
> > > -    :
> > > -    : "m" (*Idtr)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current Local Descriptor Table
> > Register(LDTR) selector.
> > > -
> > > -  Reads and returns the current 16-bit LDTR
> > descriptor value. This function is
> > > -  only available on IA-32 and X64.
> > > -
> > > -  @return The current selector of LDT.
> > > -
> > > -**/
> > > -UINT16
> > > -EFIAPI
> > > -AsmReadLdtr (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT16  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "sldt  %0"
> > > -    : "=g" (Data)   // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current Local Descriptor Table
> Register
> > (GDTR) selector.
> > > -
> > > -  Writes and the current LDTR descriptor specified
> by
> > Ldtr. This function is
> > > -  only available on IA-32 and X64.
> > > -
> > > -  @param  Ldtr  16-bit LDTR selector value.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteLdtr (
> > > -  IN      UINT16                    Ldtr
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "lldtw  %0"
> > > -    :
> > > -    : "g" (Ldtr)   // %0
> > > -    );
> > > -}
> > > -
> > > -
> > >  /**
> > >    Save the current floating point/SSE/SSE2 context
> to
> > a buffer.
> > >
> > > @@ -1630,171 +560,3 @@ AsmReadTsc (
> > >
> > >    return (((UINT64)HiData) << 32) | LowData;
> > >  }
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of a Performance Counter
> > (PMC).
> > > -
> > > -  Reads and returns the current value of
> performance
> > counter specified by
> > > -  Index. This function is only available on IA-32
> and
> > X64.
> > > -
> > > -  @param  Index The 32-bit Performance Counter
> index
> > to read.
> > > -
> > > -  @return The value of the PMC specified by Index.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadPmc (
> > > -  IN      UINT32                    Index
> > > -  )
> > > -{
> > > -  UINT32  LowData;
> > > -  UINT32  HiData;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "rdpmc"
> > > -    : "=a" (LowData),
> > > -      "=d" (HiData)
> > > -    : "c"  (Index)
> > > -    );
> > > -
> > > -  return (((UINT64)HiData) << 32) | LowData;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Sets up a monitor buffer that is used by
> > AsmMwait().
> > > -
> > > -  Executes a MONITOR instruction with the register
> > state specified by Eax, Ecx
> > > -  and Edx. Returns Eax. This function is only
> > available on IA-32 and X64.
> > > -
> > > -  @param  Eax The value to load into EAX or RAX
> > before executing the MONITOR
> > > -              instruction.
> > > -  @param  Ecx The value to load into ECX or RCX
> > before executing the MONITOR
> > > -              instruction.
> > > -  @param  Edx The value to load into EDX or RDX
> > before executing the MONITOR
> > > -              instruction.
> > > -
> > > -  @return Eax
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmMonitor (
> > > -  IN      UINTN                     Eax,
> > > -  IN      UINTN                     Ecx,
> > > -  IN      UINTN                     Edx
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "monitor"
> > > -    :
> > > -    : "a" (Eax),
> > > -      "c" (Ecx),
> > > -      "d" (Edx)
> > > -    );
> > > -
> > > -  return Eax;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Executes an MWAIT instruction.
> > > -
> > > -  Executes an MWAIT instruction with the register
> > state specified by Eax and
> > > -  Ecx. Returns Eax. This function is only available
> > on IA-32 and X64.
> > > -
> > > -  @param  Eax The value to load into EAX or RAX
> > before executing the MONITOR
> > > -              instruction.
> > > -  @param  Ecx The value to load into ECX or RCX
> > before executing the MONITOR
> > > -              instruction.
> > > -
> > > -  @return Eax
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmMwait (
> > > -  IN      UINTN                     Eax,
> > > -  IN      UINTN                     Ecx
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "mwait"
> > > -    :
> > > -    : "a"  (Eax),
> > > -      "c"  (Ecx)
> > > -    );
> > > -
> > > -  return Eax;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Executes a WBINVD instruction.
> > > -
> > > -  Executes a WBINVD instruction. This function is
> > only available on IA-32 and
> > > -  X64.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWbinvd (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("wbinvd":::"memory");
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Executes a INVD instruction.
> > > -
> > > -  Executes a INVD instruction. This function is
> only
> > available on IA-32 and
> > > -  X64.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmInvd (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("invd":::"memory");
> > > -
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Flushes a cache line from all the instruction and
> > data caches within the
> > > -  coherency domain of the CPU.
> > > -
> > > -  Flushed the cache line specified by
> LinearAddress,
> > and returns LinearAddress.
> > > -  This function is only available on IA-32 and X64.
> > > -
> > > -  @param  LinearAddress The address of the cache
> line
> > to flush. If the CPU is
> > > -                        in a physical addressing
> > mode, then LinearAddress is a
> > > -                        physical address. If the
> CPU
> > is in a virtual
> > > -                        addressing mode, then
> > LinearAddress is a virtual
> > > -                        address.
> > > -
> > > -  @return LinearAddress
> > > -**/
> > > -VOID *
> > > -EFIAPI
> > > -AsmFlushCacheLine (
> > > -  IN      VOID                      *LinearAddress
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "clflush (%0)"
> > > -    :
> > > -    : "r" (LinearAddress)
> > > -    : "memory"
> > > -    );
> > > -
> > > -    return LinearAddress;
> > > -}
> > > -
> > > -
> > > diff --git a/MdePkg/Library/BaseLib/X64/GccInline.c
> > b/MdePkg/Library/BaseLib/X64/GccInlinePriv.c
> > > similarity index 65%
> > > copy from MdePkg/Library/BaseLib/X64/GccInline.c
> > > copy to MdePkg/Library/BaseLib/X64/GccInlinePriv.c
> > > index 154ce1f57e..98be19b3c7 100644
> > > --- a/MdePkg/Library/BaseLib/X64/GccInline.c
> > > +++ b/MdePkg/Library/BaseLib/X64/GccInlinePriv.c
> > > @@ -1,7 +1,8 @@
> > >  /** @file
> > > -  GCC inline implementation of BaseLib processor
> > specific functions.
> > > +  GCC inline implementation of BaseLib processor
> > specific functions that use
> > > +  privlidged instructions.
> > >
> > > -  Copyright (c) 2006 - 2018, Intel Corporation. All
> > rights reserved.<BR>
> > > +  Copyright (c) 2006 - 2020, Intel Corporation. All
> > rights reserved.<BR>
> > >    Portions copyright (c) 2008 - 2009, Apple Inc.
> All
> > rights reserved.<BR>
> > >    SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > @@ -10,29 +11,6 @@
> > >
> > >  #include "BaseLibInternals.h"
> > >
> > > -
> > > -
> > > -
> > > -/**
> > > -  Used to serialize load and store operations.
> > > -
> > > -  All loads and stores that proceed calls to this
> > function are guaranteed to be
> > > -  globally visible when this function returns.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -MemoryFence (
> > > -  VOID
> > > -  )
> > > -{
> > > -  // This is a little bit of overkill and it is
> more
> > about the compiler that it is
> > > -  // actually processor synchronization. This is
> like
> > the _ReadWriteBarrier
> > > -  // Microsoft specific intrinsic
> > > -  __asm__ __volatile__ ("":::"memory");
> > > -}
> > > -
> > > -
> > >  /**
> > >    Enables CPU interrupts.
> > >
> > > @@ -64,44 +42,6 @@ DisableInterrupts (
> > >    __asm__ __volatile__ ("cli"::: "memory");
> > >  }
> > >
> > > -
> > > -
> > > -
> > > -/**
> > > -  Requests CPU to pause for a short period of time.
> > > -
> > > -  Requests CPU to pause for a short period of time.
> > Typically used in MP
> > > -  systems to prevent memory starvation while
> waiting
> > for a spin lock.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -CpuPause (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("pause");
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Generates a breakpoint on the CPU.
> > > -
> > > -  Generates a breakpoint on the CPU. The breakpoint
> > must be implemented such
> > > -  that code can resume normal execution after the
> > breakpoint.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -CpuBreakpoint (
> > > -  VOID
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ ("int $3");
> > > -}
> > > -
> > > -
> > > -
> > >  /**
> > >    Returns a 64-bit Machine Specific Register(MSR).
> > >
> > > @@ -176,37 +116,6 @@ AsmWriteMsr64 (
> > >    return Value;
> > >  }
> > >
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of the EFLAGS register.
> > > -
> > > -  Reads and returns the current value of the EFLAGS
> > register. This function is
> > > -  only available on IA-32 and X64. This returns a
> 32-
> > bit value on IA-32 and a
> > > -  64-bit value on X64.
> > > -
> > > -  @return EFLAGS on IA-32 or RFLAGS on X64.
> > > -
> > > -**/
> > > -UINTN
> > > -EFIAPI
> > > -AsmReadEflags (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINTN Eflags;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "pushfq         \n\t"
> > > -    "pop     %0         "
> > > -    : "=r" (Eflags)       // %0
> > > -    );
> > > -
> > > -  return Eflags;
> > > -}
> > > -
> > > -
> > > -
> > >  /**
> > >    Reads the current value of the Control Register 0
> > (CR0).
> > >
> > > @@ -1163,475 +1072,6 @@ AsmWriteLdtr (
> > >      );
> > >  }
> > >
> > > -
> > > -/**
> > > -  Save the current floating point/SSE/SSE2 context
> to
> > a buffer.
> > > -
> > > -  Saves the current floating point/SSE/SSE2 state
> to
> > the buffer specified by
> > > -  Buffer. Buffer must be aligned on a 16-byte
> > boundary. This function is only
> > > -  available on IA-32 and X64.
> > > -
> > > -  @param  Buffer  The pointer to a buffer to save
> the
> > floating point/SSE/SSE2 context.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86FxSave (
> > > -  OUT     IA32_FX_BUFFER            *Buffer
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "fxsave %0"
> > > -    :
> > > -    : "m" (*Buffer)  // %0
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Restores the current floating point/SSE/SSE2
> > context from a buffer.
> > > -
> > > -  Restores the current floating point/SSE/SSE2
> state
> > from the buffer specified
> > > -  by Buffer. Buffer must be aligned on a 16-byte
> > boundary. This function is
> > > -  only available on IA-32 and X64.
> > > -
> > > -  @param  Buffer  The pointer to a buffer to save
> the
> > floating point/SSE/SSE2 context.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -InternalX86FxRestore (
> > > -  IN      CONST IA32_FX_BUFFER      *Buffer
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "fxrstor %0"
> > > -    :
> > > -    : "m" (*Buffer)  // %0
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #0
> > (MM0).
> > > -
> > > -  Reads and returns the current value of MM0. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM0.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm0 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movd   %%mm0,  %0    \n\t"
> > > -    : "=r"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #1
> > (MM1).
> > > -
> > > -  Reads and returns the current value of MM1. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM1.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm1 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movd   %%mm1,  %0    \n\t"
> > > -    : "=r"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #2
> > (MM2).
> > > -
> > > -  Reads and returns the current value of MM2. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM2.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm2 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movd  %%mm2,  %0    \n\t"
> > > -    : "=r"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #3
> > (MM3).
> > > -
> > > -  Reads and returns the current value of MM3. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM3.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm3 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movd  %%mm3,  %0    \n\t"
> > > -    : "=r"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #4
> > (MM4).
> > > -
> > > -  Reads and returns the current value of MM4. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM4.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm4 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movd  %%mm4,  %0    \n\t"
> > > -    : "=r"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #5
> > (MM5).
> > > -
> > > -  Reads and returns the current value of MM5. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM5.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm5 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movd  %%mm5,  %0    \n\t"
> > > -    : "=r"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #6
> > (MM6).
> > > -
> > > -  Reads and returns the current value of MM6. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM6.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm6 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movd  %%mm6,  %0    \n\t"
> > > -    : "=r"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of 64-bit MMX Register #7
> > (MM7).
> > > -
> > > -  Reads and returns the current value of MM7. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of MM7.
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadMm7 (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT64  Data;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "movd  %%mm7,  %0    \n\t"
> > > -    : "=r"  (Data)       // %0
> > > -    );
> > > -
> > > -  return Data;
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #0
> > (MM0).
> > > -
> > > -  Writes the current value of MM0. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM0.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm0 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movd  %0, %%mm0"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #1
> > (MM1).
> > > -
> > > -  Writes the current value of MM1. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM1.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm1 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movd  %0, %%mm1"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #2
> > (MM2).
> > > -
> > > -  Writes the current value of MM2. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM2.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm2 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movd  %0, %%mm2"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #3
> > (MM3).
> > > -
> > > -  Writes the current value of MM3. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM3.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm3 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movd  %0, %%mm3"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #4
> > (MM4).
> > > -
> > > -  Writes the current value of MM4. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM4.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm4 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movd  %0, %%mm4"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #5
> > (MM5).
> > > -
> > > -  Writes the current value of MM5. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM5.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm5 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movd  %0, %%mm5"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #6
> > (MM6).
> > > -
> > > -  Writes the current value of MM6. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM6.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm6 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movd  %0, %%mm6"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Writes the current value of 64-bit MMX Register
> #7
> > (MM7).
> > > -
> > > -  Writes the current value of MM7. This function is
> > only available on IA32 and
> > > -  X64.
> > > -
> > > -  @param  Value The 64-bit value to write to MM7.
> > > -
> > > -**/
> > > -VOID
> > > -EFIAPI
> > > -AsmWriteMm7 (
> > > -  IN      UINT64                    Value
> > > -  )
> > > -{
> > > -  __asm__ __volatile__ (
> > > -    "movd  %0, %%mm7"  // %0
> > > -    :
> > > -    : "m" (Value)
> > > -    );
> > > -}
> > > -
> > > -
> > > -/**
> > > -  Reads the current value of Time Stamp Counter
> > (TSC).
> > > -
> > > -  Reads and returns the current value of TSC. This
> > function is only available
> > > -  on IA-32 and X64.
> > > -
> > > -  @return The current value of TSC
> > > -
> > > -**/
> > > -UINT64
> > > -EFIAPI
> > > -AsmReadTsc (
> > > -  VOID
> > > -  )
> > > -{
> > > -  UINT32  LowData;
> > > -  UINT32  HiData;
> > > -
> > > -  __asm__ __volatile__ (
> > > -    "rdtsc"
> > > -    : "=a" (LowData),
> > > -      "=d" (HiData)
> > > -    );
> > > -
> > > -  return (((UINT64)HiData) << 32) | LowData;
> > > -}
> > > -
> > > -
> > >  /**
> > >    Reads the current value of a Performance Counter
> > (PMC).
> > >
> > > @@ -1662,7 +1102,6 @@ AsmReadPmc (
> > >    return (((UINT64)HiData) << 32) | LowData;
> > >  }
> > >
> > > -
> > >  /**
> > >    Sets up a monitor buffer that is used by
> > AsmMwait().
> > >
> > > @@ -1698,7 +1137,6 @@ AsmMonitor (
> > >    return Eax;
> > >  }
> > >
> > > -
> > >  /**
> > >    Executes an MWAIT instruction.
> > >
> > > @@ -1730,7 +1168,6 @@ AsmMwait (
> > >    return Eax;
> > >  }
> > >
> > > -
> > >  /**
> > >    Executes a WBINVD instruction.
> > >
> > > @@ -1747,7 +1184,6 @@ AsmWbinvd (
> > >    __asm__ __volatile__ ("wbinvd":::"memory");
> > >  }
> > >
> > > -
> > >  /**
> > >    Executes a INVD instruction.
> > >
> > > @@ -1796,5 +1232,3 @@ AsmFlushCacheLine (
> > >
> > >      return LinearAddress;
> > >  }
> > > -
> > > -
> > > --
> > > 2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#62349): https://edk2.groups.io/g/devel/message/62349
Mute This Topic: https://groups.io/mt/74885911/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to