diff --git a/ArmPkg/ArmPkg.dsc b/ArmPkg/ArmPkg.dsc
index 7b278cdd4124..6f9fc661fbdc 100644
--- a/ArmPkg/ArmPkg.dsc
+++ b/ArmPkg/ArmPkg.dsc
@@ -150,8 +150,6 @@ [Components.common]
   ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
 
 [Components.ARM]
-  ArmPkg/Library/BaseMemoryLibVstm/BaseMemoryLibVstm.inf
-
   ArmPkg/Drivers/ArmCpuLib/ArmCortexA8Lib/ArmCortexA8Lib.inf
   ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf
   ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.inf
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/Arm/CopyMem.S b/ArmPkg/Library/BaseMemoryLibVstm/Arm/CopyMem.S
deleted file mode 100644
index 69de4c1fd48e..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/Arm/CopyMem.S
+++ /dev/null
@@ -1,112 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# CopyMem() worker for ARM
-#
-# This file started out as C code that did 64 bit moves if the buffer was
-# 32-bit aligned, else it does a byte copy. It also does a byte copy for
-# any trailing bytes. Update using VSTM/SLDM to do 128 byte copies.
-#
-# Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution.  The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#------------------------------------------------------------------------------
-
-#include <AsmMacroIoLib.h>
-
-/**
-  Copy Length bytes from Source to Destination. Overlap is OK.
-
-  This implementation
-
-  @param  Destination Target of copy
-  @param  Source      Place to copy from
-  @param  Length      Number of bytes to copy
-
-  @return Destination
-
-
-VOID *
-EFIAPI
-InternalMemCopyMem (
-  OUT     VOID                      *DestinationBuffer,
-  IN      CONST VOID                *SourceBuffer,
-  IN      UINTN                     Length
-  )
-**/
-ASM_FUNC(InternalMemCopyMem)
-  stmfd  sp!, {r4, r9, lr}
-  tst  r0, #3
-  mov  r4, r0
-  mov  r9, r0
-  mov  ip, r2
-  mov  lr, r1
-  movne  r0, #0
-  bne  L4
-  tst  r1, #3
-  movne  r3, #0
-  moveq  r3, #1
-  cmp  r2, #127
-  movls  r0, #0
-  andhi  r0, r3, #1
-L4:
-  cmp  r4, r1
-  bcc  L26
-  bls  L7
-  rsb  r3, r1, r4
-  cmp  ip, r3
-  bcc  L26
-  cmp  ip, #0
-  beq  L7
-  add  r9, r4, ip
-  add  lr, ip, r1
-  b  L16
-L29:
-  sub  ip, ip, #8
-  cmp  ip, #7
-  ldrd  r2, [lr, #-8]!
-  movls  r0, #0
-  cmp  ip, #0
-  strd  r2, [r9, #-8]!
-  beq  L7
-L16:
-  cmp  r0, #0
-  bne  L29
-  sub  r3, lr, #1
-  sub  ip, ip, #1
-  ldrb  r3, [r3, #0]
-  sub  r2, r9, #1
-  cmp  ip, #0
-  sub  r9, r9, #1
-  sub  lr, lr, #1
-  strb  r3, [r2, #0]
-  bne  L16
-  b   L7
-L11:
-  ldrb  r3, [lr], #1
-  sub  ip, ip, #1
-  strb  r3, [r9], #1
-L26:
-  cmp  ip, #0
-  beq  L7
-L30:
-  cmp  r0, #0
-  beq  L11
-  sub  ip, ip, #128          // 32
-  cmp  ip, #127              // 31
-  vldm     lr!, {d0-d15}
-  movls  r0, #0
-  cmp  ip, #0
-  vstm  r9!, {d0-d15}
-  bne  L30
-L7:
-  dsb
-  mov  r0, r4
-  ldmfd  sp!, {r4, r9, pc}
-
-
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/Arm/CopyMem.asm b/ArmPkg/Library/BaseMemoryLibVstm/Arm/CopyMem.asm
deleted file mode 100644
index 5afd1e5f2bc1..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/Arm/CopyMem.asm
+++ /dev/null
@@ -1,114 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; CopyMem() worker for ARM
-;
-; This file started out as C code that did 64 bit moves if the buffer was
-; 32-bit aligned, else it does a byte copy. It also does a byte copy for
-; any trailing bytes. Update using VSTM/SLDM to do 128 byte copies.
-;
-; Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
-; This program and the accompanying materials
-; are licensed and made available under the terms and conditions of the BSD License
-; which accompanies this distribution.  The full text of the license may be found at
-; http://opensource.org/licenses/bsd-license.php
-;
-; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-;
-;------------------------------------------------------------------------------
-
-/**
-  Copy Length bytes from Source to Destination. Overlap is OK.
-
-  This implementation
-
-  @param  Destination Target of copy
-  @param  Source      Place to copy from
-  @param  Length      Number of bytes to copy
-
-  @return Destination
-
-
-VOID *
-EFIAPI
-InternalMemCopyMem (
-  OUT     VOID                      *DestinationBuffer,
-  IN      CONST VOID                *SourceBuffer,
-  IN      UINTN                     Length
-  )
-**/
-
-    INCLUDE AsmMacroExport.inc
-
- RVCT_ASM_EXPORT InternalMemCopyMem
-  stmfd  sp!, {r4, r9, lr}
-  tst  r0, #3
-  mov  r4, r0
-  mov  r9, r0
-  mov  ip, r2
-  mov  lr, r1
-  movne  r0, #0
-  bne  L4
-  tst  r1, #3
-  movne  r3, #0
-  moveq  r3, #1
-  cmp  r2, #127
-  movls  r0, #0
-  andhi  r0, r3, #1
-L4
-  cmp  r4, r1
-  bcc  L26
-  bls  L7
-  rsb  r3, r1, r4
-  cmp  ip, r3
-  bcc  L26
-  cmp  ip, #0
-  beq  L7
-  add  r9, r4, ip
-  add  lr, ip, r1
-  b  L16
-L29
-  sub  ip, ip, #8
-  cmp  ip, #7
-  ldrd  r2, [lr, #-8]!
-  movls  r0, #0
-  cmp  ip, #0
-  strd  r2, [r9, #-8]!
-  beq  L7
-L16
-  cmp  r0, #0
-  bne  L29
-  sub  r3, lr, #1
-  sub  ip, ip, #1
-  ldrb  r3, [r3, #0]
-  sub  r2, r9, #1
-  cmp  ip, #0
-  sub  r9, r9, #1
-  sub  lr, lr, #1
-  strb  r3, [r2, #0]
-  bne  L16
-  b   L7
-L11
-  ldrb  r3, [lr], #1
-  sub  ip, ip, #1
-  strb  r3, [r9], #1
-L26
-  cmp  ip, #0
-  beq  L7
-L30
-  cmp  r0, #0
-  beq  L11
-  sub  ip, ip, #128          // 32
-  cmp  ip, #127              // 31
-  vldm     lr!, {d0-d15}
-  movls  r0, #0
-  cmp  ip, #0
-  vstm  r9!, {d0-d15}
-  bne  L30
-L7
-  dsb
-  mov  r0, r4
-  ldmfd  sp!, {r4, r9, pc}
-
-  END
-
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/Arm/SetMem.S b/ArmPkg/Library/BaseMemoryLibVstm/Arm/SetMem.S
deleted file mode 100644
index 28ba38b79c6a..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/Arm/SetMem.S
+++ /dev/null
@@ -1,76 +0,0 @@
-#------------------------------------------------------------------------------
-#
-# SemMem() worker for ARM
-#
-# This file started out as C code that did 64 bit moves if the buffer was
-# 32-bit aligned, else it does a byte copy. It also does a byte copy for
-# any trailing bytes. Update to use VSTM/VLDM to do 128 byte writes.
-#
-# Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
-# This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution.  The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#------------------------------------------------------------------------------
-
-#include <AsmMacroIoLib.h>
-
-/**
-  Set Buffer to Value for Size bytes.
-
-  @param  Buffer   Memory to set.
-  @param  Length   Number of bytes to set
-  @param  Value    Value of the set operation.
-
-  @return Buffer
-
-VOID *
-EFIAPI
-InternalMemSetMem (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT8                     Value
-  )
-**/
-ASM_FUNC(InternalMemSetMem)
-  stmfd  sp!, {r4-r7, lr}
-  tst    r0, #3
-  movne  r3, #0
-  moveq  r3, #1
-  cmp    r1, #127
-  movls lr, #0
-  andhi  lr, r3, #1
-  cmp    lr, #0
-  mov    r12, r0
-  bne    L31
-L32:
-  mov    r3, #0
-  b      L43
-L31:
-  vdup.8  q0,r2
-  vmov    q1,q0
-  vmov    q2,q0
-  vmov    q3,q0
-  vmov    q4,q0
-  vmov    q5,q0
-  vmov    q6,q0
-  vmov    q7,q0
-  b        L32
-L34:
-  cmp      lr, #0
-  streqb  r2, [r12], #1
-  subeq    r1, r1, #1
-  beq      L43
-  sub      r1, r1, #128
-  cmp      r1, #127
-  cmp      r1, #31
-  movls    lr, r3
-  vstm    r12!, {d0-d15}
-L43:
-  cmp      r1, #0
-  bne      L34
-  ldmfd    sp!, {pc}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/Arm/SetMem.asm b/ArmPkg/Library/BaseMemoryLibVstm/Arm/SetMem.asm
deleted file mode 100644
index c4a7c2b72008..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/Arm/SetMem.asm
+++ /dev/null
@@ -1,78 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; SetMem() worker for ARM
-;
-; This file started out as C code that did 64 bit moves if the buffer was
-; 32-bit aligned, else it does a byte copy. It also does a byte copy for
-; any trailing bytes. Update to use VSTM/VLDM to do 128 byte writes.
-;
-; Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
-; This program and the accompanying materials
-; are licensed and made available under the terms and conditions of the BSD License
-; which accompanies this distribution.  The full text of the license may be found at
-; http://opensource.org/licenses/bsd-license.php
-;
-; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-;
-
-/**
-  Set Buffer to Value for Size bytes.
-
-  @param  Buffer   Memory to set.
-  @param  Length   Number of bytes to set
-  @param  Value    Value of the set operation.
-
-  @return Buffer
-
-VOID *
-EFIAPI
-InternalMemSetMem (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT8                     Value
-  )
-**/
-
-
-    INCLUDE AsmMacroExport.inc
-
- RVCT_ASM_EXPORT InternalMemSetMem
-  stmfd  sp!, {lr}
-  tst    r0, #3
-  movne  r3, #0
-  moveq  r3, #1
-  cmp    r1, #127
-  movls lr, #0
-  andhi  lr, r3, #1
-  cmp    lr, #0
-  mov    r12, r0
-  bne    L31
-L32
-  mov    r3, #0
-  b      L43
-L31
-  vdup.8  q0,r2
-  vmov    q1,q0
-  vmov    q2,q0
-  vmov    q3,q0
-  vmov    q4,q0
-  vmov    q5,q0
-  vmov    q6,q0
-  vmov    q7,q0
-  b        L32
-L34
-  cmp      lr, #0
-  streqb  r2, [r12], #1
-  subeq    r1, r1, #1
-  beq      L43
-  sub      r1, r1, #128
-  cmp      r1, #127
-  movls    lr, r3
-  vstm    r12!, {d0-d15}
-L43
-  cmp      r1, #0
-  bne      L34
-  ldmfd    sp!, {pc}
-
-  END
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/BaseMemoryLibVstm.inf b/ArmPkg/Library/BaseMemoryLibVstm/BaseMemoryLibVstm.inf
deleted file mode 100644
index 4c388fa8984d..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/BaseMemoryLibVstm.inf
+++ /dev/null
@@ -1,70 +0,0 @@
-## @file
-#  Instance of Base Memory Library with some ARM vldm/vstm assembly.
-#
-#  This is a copy of the MdePkg BaseMemoryLib with the CopyMem and
-#  SetMem worker functions replaced with assembler that uses
-#  vldm/vstm (part of NEON SIMD, optional in ARMv7-A).
-#
-#  Note: You need to enable NEON in SEC to use this library
-#  // Enable NEON register in case folks want to use them for optimizations (CopyMem)
-#  mrc     p15, 0, r0, c1, c0, 2
-#  orr     r0, r0, #0x00f00000   // Enable VPF access (V* instructions)
-#  mcr     p15, 0, r0, c1, c0, 2
-#  mov     r0, #0x40000000       // Set EN bit in FPEXC
-#  msr     FPEXC,r0
-#
-#  Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
-#  Portions copyright (c) 2010, Apple Inc. All rights reserved.<BR>
-#
-#  This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution. The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = BaseMemoryLibVstm
-  FILE_GUID                      = 09EE1E8D-7A2E-4573-8117-68A18569C1F5
-  MODULE_TYPE                    = BASE
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = BaseMemoryLib
-
-
-#
-#  VALID_ARCHITECTURES           = ARM
-#
-
-[Sources.ARM]
-  ScanMem64Wrapper.c
-  ScanMem32Wrapper.c
-  ScanMem16Wrapper.c
-  ScanMem8Wrapper.c
-  ZeroMemWrapper.c
-  CompareMemWrapper.c
-  SetMem64Wrapper.c
-  SetMem32Wrapper.c
-  SetMem16Wrapper.c
-  SetMemWrapper.c
-  CopyMemWrapper.c
-  MemLibGeneric.c
-  MemLibGuid.c
-  MemLibInternals.h
-  Arm/CopyMem.asm
-  Arm/CopyMem.S
-  Arm/SetMem.asm
-  Arm/SetMem.S
-
-
-[Packages]
-  MdePkg/MdePkg.dec
-  ArmPkg/ArmPkg.dec
-
-[LibraryClasses]
-  DebugLib
-  BaseLib
-
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/CompareMemWrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/CompareMemWrapper.c
deleted file mode 100644
index c83988f59ecb..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/CompareMemWrapper.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/** @file
-  CompareMem() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution.  The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Compares the contents of two buffers.
-
-  This function compares Length bytes of SourceBuffer to Length bytes of DestinationBuffer.
-  If all Length bytes of the two buffers are identical, then 0 is returned.  Otherwise, the
-  value returned is the first mismatched byte in SourceBuffer subtracted from the first
-  mismatched byte in DestinationBuffer.
-
-  If Length > 0 and DestinationBuffer is NULL, then ASSERT().
-  If Length > 0 and SourceBuffer is NULL, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then ASSERT().
-  If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT().
-
-  @param  DestinationBuffer Pointer to the destination buffer to compare.
-  @param  SourceBuffer      Pointer to the source buffer to compare.
-  @param  Length            Number of bytes to compare.
-
-  @return 0                 All Length bytes of the two buffers are identical.
-  @retval Non-zero          The first mismatched byte in SourceBuffer subtracted from the first
-                            mismatched byte in DestinationBuffer.
-
-**/
-INTN
-EFIAPI
-CompareMem (
-  IN CONST VOID  *DestinationBuffer,
-  IN CONST VOID  *SourceBuffer,
-  IN UINTN       Length
-  )
-{
-  if (Length == 0 || DestinationBuffer == SourceBuffer) {
-    return 0;
-  }
-  ASSERT (DestinationBuffer != NULL);
-  ASSERT (SourceBuffer != NULL);
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)DestinationBuffer));
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)SourceBuffer));
-
-  return InternalMemCompareMem (DestinationBuffer, SourceBuffer, Length);
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/CopyMem.c b/ArmPkg/Library/BaseMemoryLibVstm/CopyMem.c
deleted file mode 100644
index b30faed5607d..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/CopyMem.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/** @file
-  Implementation of the InternalMemCopyMem routine. This function is broken
-  out into its own source file so that it can be excluded from a build for a
-  particular platform easily if an optimized version is desired.
-
-  Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-
-
-#include "MemLibInternals.h"
-
-/**
-  Copy Length bytes from Source to Destination.
-
-  @param  DestinationBuffer Target of copy
-  @param  SourceBuffer      Place to copy from
-  @param  Length            Number of bytes to copy
-
-  @return Destination
-
-**/
-VOID *
-EFIAPI
-InternalMemCopyMem (
-  OUT     VOID                      *DestinationBuffer,
-  IN      CONST VOID                *SourceBuffer,
-  IN      UINTN                     Length
-  )
-{
-  //
-  // Declare the local variables that actually move the data elements as
-  // volatile to prevent the optimizer from replacing this function with
-  // the intrinsic memcpy()
-  //
-  volatile UINT8                    *Destination8;
-  CONST UINT8                       *Source8;
-
-  if (SourceBuffer > DestinationBuffer) {
-    Destination8 = (UINT8*)DestinationBuffer;
-    Source8 = (CONST UINT8*)SourceBuffer;
-    while (Length-- != 0) {
-      *(Destination8++) = *(Source8++);
-    }
-  } else if (SourceBuffer < DestinationBuffer) {
-    Destination8 = (UINT8*)DestinationBuffer + Length;
-    Source8 = (CONST UINT8*)SourceBuffer + Length;
-    while (Length-- != 0) {
-      *(--Destination8) = *(--Source8);
-    }
-  }
-  return DestinationBuffer;
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/CopyMemWrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/CopyMemWrapper.c
deleted file mode 100644
index 2adfb3114910..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/CopyMemWrapper.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/** @file
-  CopyMem() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Copies a source buffer to a destination buffer, and returns the destination buffer.
-
-  This function copies Length bytes from SourceBuffer to DestinationBuffer, and returns
-  DestinationBuffer.  The implementation must be reentrant, and it must handle the case
-  where SourceBuffer overlaps DestinationBuffer.
-
-  If Length is greater than (MAX_ADDRESS - DestinationBuffer + 1), then ASSERT().
-  If Length is greater than (MAX_ADDRESS - SourceBuffer + 1), then ASSERT().
-
-  @param  DestinationBuffer   Pointer to the destination buffer of the memory copy.
-  @param  SourceBuffer        Pointer to the source buffer of the memory copy.
-  @param  Length              Number of bytes to copy from SourceBuffer to DestinationBuffer.
-
-  @return DestinationBuffer.
-
-**/
-VOID *
-EFIAPI
-CopyMem (
-  OUT VOID       *DestinationBuffer,
-  IN CONST VOID  *SourceBuffer,
-  IN UINTN       Length
-  )
-{
-  if (Length == 0) {
-    return DestinationBuffer;
-  }
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)DestinationBuffer));
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)SourceBuffer));
-
-  if (DestinationBuffer == SourceBuffer) {
-    return DestinationBuffer;
-  }
-  return InternalMemCopyMem (DestinationBuffer, SourceBuffer, Length);
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/MemLibGeneric.c b/ArmPkg/Library/BaseMemoryLibVstm/MemLibGeneric.c
deleted file mode 100644
index 54c27012955f..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/MemLibGeneric.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/** @file
-  Architecture Independent Base Memory Library Implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-    BaseMemoryLib
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Fills a target buffer with a 16-bit value, and returns the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to fill.
-  @param  Length  Count of 16-bit value to fill.
-  @param  Value   Value with which to fill Length bytes of Buffer.
-
-  @return Buffer
-
-**/
-VOID *
-EFIAPI
-InternalMemSetMem16 (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT16                    Value
-  )
-{
-  do {
-    ((UINT16*)Buffer)[--Length] = Value;
-  } while (Length != 0);
-  return Buffer;
-}
-
-/**
-  Fills a target buffer with a 32-bit value, and returns the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to fill.
-  @param  Length  Count of 32-bit value to fill.
-  @param  Value   Value with which to fill Length bytes of Buffer.
-
-  @return Buffer
-
-**/
-VOID *
-EFIAPI
-InternalMemSetMem32 (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT32                    Value
-  )
-{
-  do {
-    ((UINT32*)Buffer)[--Length] = Value;
-  } while (Length != 0);
-  return Buffer;
-}
-
-/**
-  Fills a target buffer with a 64-bit value, and returns the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to fill.
-  @param  Length  Count of 64-bit value to fill.
-  @param  Value   Value with which to fill Length bytes of Buffer.
-
-  @return Buffer
-
-**/
-VOID *
-EFIAPI
-InternalMemSetMem64 (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT64                    Value
-  )
-{
-  do {
-    ((UINT64*)Buffer)[--Length] = Value;
-  } while (Length != 0);
-  return Buffer;
-}
-
-/**
-  Set Buffer to 0 for Size bytes.
-
-  @param  Buffer Memory to set.
-  @param  Length Number of bytes to set
-
-  @return Buffer
-
-**/
-VOID *
-EFIAPI
-InternalMemZeroMem (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length
-  )
-{
-  return InternalMemSetMem (Buffer, Length, 0);
-}
-
-/**
-  Compares two memory buffers of a given length.
-
-  @param  DestinationBuffer First memory buffer
-  @param  SourceBuffer      Second memory buffer
-  @param  Length            Length of DestinationBuffer and SourceBuffer memory
-                            regions to compare. Must be non-zero.
-
-  @return 0                 All Length bytes of the two buffers are identical.
-  @retval Non-zero          The first mismatched byte in SourceBuffer subtracted from the first
-                            mismatched byte in DestinationBuffer.
-
-**/
-INTN
-EFIAPI
-InternalMemCompareMem (
-  IN      CONST VOID                *DestinationBuffer,
-  IN      CONST VOID                *SourceBuffer,
-  IN      UINTN                     Length
-  )
-{
-  while ((--Length != 0) &&
-         (*(INT8*)DestinationBuffer == *(INT8*)SourceBuffer)) {
-    DestinationBuffer = (INT8*)DestinationBuffer + 1;
-    SourceBuffer = (INT8*)SourceBuffer + 1;
-  }
-  return (INTN)*(UINT8*)DestinationBuffer - (INTN)*(UINT8*)SourceBuffer;
-}
-
-/**
-  Scans a target buffer for an 8-bit value, and returns a pointer to the
-  matching 8-bit value in the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to scan.
-  @param  Length  Count of 8-bit value to scan. Must be non-zero.
-  @param  Value   Value to search for in the target buffer.
-
-  @return Pointer to the first occurrence or NULL if not found.
-
-**/
-CONST VOID *
-EFIAPI
-InternalMemScanMem8 (
-  IN      CONST VOID                *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT8                     Value
-  )
-{
-  CONST UINT8                       *Pointer;
-
-  Pointer = (CONST UINT8*)Buffer;
-  do {
-    if (*Pointer == Value) {
-      return Pointer;
-    }
-    Pointer++;
-  } while (--Length != 0);
-  return NULL;
-}
-
-/**
-  Scans a target buffer for a 16-bit value, and returns a pointer to the
-  matching 16-bit value in the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to scan.
-  @param  Length  Count of 16-bit value to scan. Must be non-zero.
-  @param  Value   Value to search for in the target buffer.
-
-  @return Pointer to the first occurrence or NULL if not found.
-
-**/
-CONST VOID *
-EFIAPI
-InternalMemScanMem16 (
-  IN      CONST VOID                *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT16                    Value
-  )
-{
-  CONST UINT16                      *Pointer;
-
-  Pointer = (CONST UINT16*)Buffer;
-  do {
-    if (*Pointer == Value) {
-      return Pointer;
-    }
-    Pointer++;
-  } while (--Length != 0);
-  return NULL;
-}
-
-/**
-  Scans a target buffer for a 32-bit value, and returns a pointer to the
-  matching 32-bit value in the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to scan.
-  @param  Length  Count of 32-bit value to scan. Must be non-zero.
-  @param  Value   Value to search for in the target buffer.
-
-  @return Pointer to the first occurrence or NULL if not found.
-
-**/
-CONST VOID *
-EFIAPI
-InternalMemScanMem32 (
-  IN      CONST VOID                *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT32                    Value
-  )
-{
-  CONST UINT32                      *Pointer;
-
-  Pointer = (CONST UINT32*)Buffer;
-  do {
-    if (*Pointer == Value) {
-      return Pointer;
-    }
-    Pointer++;
-  } while (--Length != 0);
-  return NULL;
-}
-
-/**
-  Scans a target buffer for a 64-bit value, and returns a pointer to the
-  matching 64-bit value in the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to scan.
-  @param  Length  Count of 64-bit value to scan. Must be non-zero.
-  @param  Value   Value to search for in the target buffer.
-
-  @return Pointer to the first occurrence or NULL if not found.
-
-**/
-CONST VOID *
-EFIAPI
-InternalMemScanMem64 (
-  IN      CONST VOID                *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT64                    Value
-  )
-{
-  CONST UINT64                      *Pointer;
-
-  Pointer = (CONST UINT64*)Buffer;
-  do {
-    if (*Pointer == Value) {
-      return Pointer;
-    }
-    Pointer++;
-  } while (--Length != 0);
-  return NULL;
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/MemLibGuid.c b/ArmPkg/Library/BaseMemoryLibVstm/MemLibGuid.c
deleted file mode 100644
index dc9e2c319ba9..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/MemLibGuid.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/** @file
-  Implementation of GUID functions.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Copies a source GUID to a destination GUID.
-
-  This function copies the contents of the 128-bit GUID specified by SourceGuid to
-  DestinationGuid, and returns DestinationGuid.
-
-  If DestinationGuid is NULL, then ASSERT().
-  If SourceGuid is NULL, then ASSERT().
-
-  @param  DestinationGuid   Pointer to the destination GUID.
-  @param  SourceGuid        Pointer to the source GUID.
-
-  @return DestinationGuid.
-
-**/
-GUID *
-EFIAPI
-CopyGuid (
-  OUT GUID       *DestinationGuid,
-  IN CONST GUID  *SourceGuid
-  )
-{
-  WriteUnaligned64 (
-    (UINT64*)DestinationGuid,
-    ReadUnaligned64 ((CONST UINT64*)SourceGuid)
-    );
-  WriteUnaligned64 (
-    (UINT64*)DestinationGuid + 1,
-    ReadUnaligned64 ((CONST UINT64*)SourceGuid + 1)
-    );
-  return DestinationGuid;
-}
-
-/**
-  Compares two GUIDs.
-
-  This function compares Guid1 to Guid2.  If the GUIDs are identical then TRUE is returned.
-  If there are any bit differences in the two GUIDs, then FALSE is returned.
-
-  If Guid1 is NULL, then ASSERT().
-  If Guid2 is NULL, then ASSERT().
-
-  @param  Guid1       A pointer to a 128 bit GUID.
-  @param  Guid2       A pointer to a 128 bit GUID.
-
-  @retval TRUE        Guid1 and Guid2 are identical.
-  @retval FALSE       Guid1 and Guid2 are not identical.
-
-**/
-BOOLEAN
-EFIAPI
-CompareGuid (
-  IN CONST GUID  *Guid1,
-  IN CONST GUID  *Guid2
-  )
-{
-  return (CompareMem(Guid1, Guid2, sizeof(GUID) == 0)) ? TRUE : FALSE;
-}
-
-/**
-  Scans a target buffer for a GUID, and returns a pointer to the matching GUID
-  in the target buffer.
-
-  This function searches the target buffer specified by Buffer and Length from
-  the lowest address to the highest address at 128-bit increments for the 128-bit
-  GUID value that matches Guid.  If a match is found, then a pointer to the matching
-  GUID in the target buffer is returned.  If no match is found, then NULL is returned.
-  If Length is 0, then NULL is returned.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Buffer is not aligned on a 32-bit boundary, then ASSERT().
-  If Length is not aligned on a 128-bit boundary, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-
-  @param  Buffer  Pointer to the target buffer to scan.
-  @param  Length  Number of bytes in Buffer to scan.
-  @param  Guid    Value to search for in the target buffer.
-
-  @return A pointer to the matching Guid in the target buffer or NULL otherwise.
-
-**/
-VOID *
-EFIAPI
-ScanGuid (
-  IN CONST VOID  *Buffer,
-  IN UINTN       Length,
-  IN CONST GUID  *Guid
-  )
-{
-  CONST GUID                        *GuidPtr;
-
-  ASSERT (((UINTN)Buffer & (sizeof (Guid->Data1) - 1)) == 0);
-  ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));
-  ASSERT ((Length & (sizeof (*GuidPtr) - 1)) == 0);
-
-  GuidPtr = (GUID*)Buffer;
-  Buffer  = GuidPtr + Length / sizeof (*GuidPtr);
-  while (GuidPtr < (CONST GUID*)Buffer) {
-    if (CompareGuid (GuidPtr, Guid)) {
-      return (VOID*)GuidPtr;
-    }
-    GuidPtr++;
-  }
-  return NULL;
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/MemLibInternals.h b/ArmPkg/Library/BaseMemoryLibVstm/MemLibInternals.h
deleted file mode 100644
index 10c741f2c311..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/MemLibInternals.h
+++ /dev/null
@@ -1,234 +0,0 @@
-/** @file
-  Declaration of internal functions for Base Memory Library.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#ifndef __MEM_LIB_INTERNALS__
-#define __MEM_LIB_INTERNALS__
-
-#include <Base.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-
-/**
-  Copy Length bytes from Source to Destination.
-
-  @param  DestinationBuffer Target of copy
-  @param  SourceBuffer      Place to copy from
-  @param  Length            Number of bytes to copy
-
-  @return Destination
-
-**/
-VOID *
-EFIAPI
-InternalMemCopyMem (
-  OUT     VOID                      *DestinationBuffer,
-  IN      CONST VOID                *SourceBuffer,
-  IN      UINTN                     Length
-  );
-
-/**
-  Set Buffer to Value for Size bytes.
-
-  @param  Buffer   Memory to set.
-  @param  Length   Number of bytes to set
-  @param  Value    Value of the set operation.
-
-  @return Buffer
-
-**/
-VOID *
-EFIAPI
-InternalMemSetMem (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT8                     Value
-  );
-
-/**
-  Fills a target buffer with a 16-bit value, and returns the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to fill.
-  @param  Length  Count of 16-bit value to fill.
-  @param  Value   Value with which to fill Length bytes of Buffer.
-
-  @return Buffer
-
-**/
-VOID *
-EFIAPI
-InternalMemSetMem16 (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT16                    Value
-  );
-
-/**
-  Fills a target buffer with a 32-bit value, and returns the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to fill.
-  @param  Length  Count of 32-bit value to fill.
-  @param  Value   Value with which to fill Length bytes of Buffer.
-
-  @return Buffer
-
-**/
-VOID *
-EFIAPI
-InternalMemSetMem32 (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT32                    Value
-  );
-
-/**
-  Fills a target buffer with a 64-bit value, and returns the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to fill.
-  @param  Length  Count of 64-bit value to fill.
-  @param  Value   Value with which to fill Length bytes of Buffer.
-
-  @return Buffer
-
-**/
-VOID *
-EFIAPI
-InternalMemSetMem64 (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT64                    Value
-  );
-
-/**
-  Set Buffer to 0 for Size bytes.
-
-  @param  Buffer Memory to set.
-  @param  Length Number of bytes to set
-
-  @return Buffer
-
-**/
-VOID *
-EFIAPI
-InternalMemZeroMem (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length
-  );
-
-/**
-  Compares two memory buffers of a given length.
-
-  @param  DestinationBuffer First memory buffer
-  @param  SourceBuffer      Second memory buffer
-  @param  Length            Length of DestinationBuffer and SourceBuffer memory
-                            regions to compare. Must be non-zero.
-
-  @return 0                 All Length bytes of the two buffers are identical.
-  @retval Non-zero          The first mismatched byte in SourceBuffer subtracted from the first
-                            mismatched byte in DestinationBuffer.
-
-**/
-INTN
-EFIAPI
-InternalMemCompareMem (
-  IN      CONST VOID                *DestinationBuffer,
-  IN      CONST VOID                *SourceBuffer,
-  IN      UINTN                     Length
-  );
-
-/**
-  Scans a target buffer for an 8-bit value, and returns a pointer to the
-  matching 8-bit value in the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to scan.
-  @param  Length  Count of 8-bit value to scan. Must be non-zero.
-  @param  Value   Value to search for in the target buffer.
-
-  @return Pointer to the first occurrence or NULL if not found.
-
-**/
-CONST VOID *
-EFIAPI
-InternalMemScanMem8 (
-  IN      CONST VOID                *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT8                     Value
-  );
-
-/**
-  Scans a target buffer for a 16-bit value, and returns a pointer to the
-  matching 16-bit value in the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to scan.
-  @param  Length  Count of 16-bit value to scan. Must be non-zero.
-  @param  Value   Value to search for in the target buffer.
-
-  @return Pointer to the first occurrence or NULL if not found.
-
-**/
-CONST VOID *
-EFIAPI
-InternalMemScanMem16 (
-  IN      CONST VOID                *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT16                    Value
-  );
-
-/**
-  Scans a target buffer for a 32-bit value, and returns a pointer to the
-  matching 32-bit value in the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to scan.
-  @param  Length  Count of 32-bit value to scan. Must be non-zero.
-  @param  Value   Value to search for in the target buffer.
-
-  @return Pointer to the first occurrence or NULL if not found.
-
-**/
-CONST VOID *
-EFIAPI
-InternalMemScanMem32 (
-  IN      CONST VOID                *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT32                    Value
-  );
-
-/**
-  Scans a target buffer for a 64-bit value, and returns a pointer to the
-  matching 64-bit value in the target buffer.
-
-  @param  Buffer  Pointer to the target buffer to scan.
-  @param  Length  Count of 64-bit value to scan. Must be non-zero.
-  @param  Value   Value to search for in the target buffer.
-
-  @return Pointer to the first occurrence or NULL if not found.
-
-**/
-CONST VOID *
-EFIAPI
-InternalMemScanMem64 (
-  IN      CONST VOID                *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT64                    Value
-  );
-
-#endif
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/ScanMem16Wrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/ScanMem16Wrapper.c
deleted file mode 100644
index 1c727b3e8077..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/ScanMem16Wrapper.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/** @file
-  ScanMem16() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Scans a target buffer for a 16-bit value, and returns a pointer to the matching 16-bit value
-  in the target buffer.
-
-  This function searches the target buffer specified by Buffer and Length from the lowest
-  address to the highest address for a 16-bit value that matches Value.  If a match is found,
-  then a pointer to the matching byte in the target buffer is returned.  If no match is found,
-  then NULL is returned.  If Length is 0, then NULL is returned.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Buffer is not aligned on a 16-bit boundary, then ASSERT().
-  If Length is not aligned on a 16-bit boundary, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-
-  @param  Buffer      Pointer to the target buffer to scan.
-  @param  Length      Number of bytes in Buffer to scan.
-  @param  Value       Value to search for in the target buffer.
-
-  @return A pointer to the matching byte in the target buffer or NULL otherwise.
-
-**/
-VOID *
-EFIAPI
-ScanMem16 (
-  IN CONST VOID  *Buffer,
-  IN UINTN       Length,
-  IN UINT16      Value
-  )
-{
-  if (Length == 0) {
-    return NULL;
-  }
-
-  ASSERT (Buffer != NULL);
-  ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0);
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
-  ASSERT ((Length & (sizeof (Value) - 1)) == 0);
-
-  return (VOID*)InternalMemScanMem16 (Buffer, Length / sizeof (Value), Value);
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/ScanMem32Wrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/ScanMem32Wrapper.c
deleted file mode 100644
index 79ab60ced84c..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/ScanMem32Wrapper.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/** @file
-  ScanMem32() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Scans a target buffer for a 32-bit value, and returns a pointer to the matching 32-bit value
-  in the target buffer.
-
-  This function searches the target buffer specified by Buffer and Length from the lowest
-  address to the highest address for a 32-bit value that matches Value.  If a match is found,
-  then a pointer to the matching byte in the target buffer is returned.  If no match is found,
-  then NULL is returned.  If Length is 0, then NULL is returned.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Buffer is not aligned on a 32-bit boundary, then ASSERT().
-  If Length is not aligned on a 32-bit boundary, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-
-  @param  Buffer      Pointer to the target buffer to scan.
-  @param  Length      Number of bytes in Buffer to scan.
-  @param  Value       Value to search for in the target buffer.
-
-  @return A pointer to the matching byte in the target buffer or NULL otherwise.
-
-**/
-VOID *
-EFIAPI
-ScanMem32 (
-  IN CONST VOID  *Buffer,
-  IN UINTN       Length,
-  IN UINT32      Value
-  )
-{
-  if (Length == 0) {
-    return NULL;
-  }
-
-  ASSERT (Buffer != NULL);
-  ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0);
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
-  ASSERT ((Length & (sizeof (Value) - 1)) == 0);
-
-  return (VOID*)InternalMemScanMem32 (Buffer, Length / sizeof (Value), Value);
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/ScanMem64Wrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/ScanMem64Wrapper.c
deleted file mode 100644
index d11e50b9d5f6..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/ScanMem64Wrapper.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/** @file
-  ScanMem64() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Scans a target buffer for a 64-bit value, and returns a pointer to the matching 64-bit value
-  in the target buffer.
-
-  This function searches the target buffer specified by Buffer and Length from the lowest
-  address to the highest address for a 64-bit value that matches Value.  If a match is found,
-  then a pointer to the matching byte in the target buffer is returned.  If no match is found,
-  then NULL is returned.  If Length is 0, then NULL is returned.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Buffer is not aligned on a 64-bit boundary, then ASSERT().
-  If Length is not aligned on a 64-bit boundary, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-
-  @param  Buffer      Pointer to the target buffer to scan.
-  @param  Length      Number of bytes in Buffer to scan.
-  @param  Value       Value to search for in the target buffer.
-
-  @return A pointer to the matching byte in the target buffer or NULL otherwise.
-
-**/
-VOID *
-EFIAPI
-ScanMem64 (
-  IN CONST VOID  *Buffer,
-  IN UINTN       Length,
-  IN UINT64      Value
-  )
-{
-  if (Length == 0) {
-    return NULL;
-  }
-
-  ASSERT (Buffer != NULL);
-  ASSERT (((UINTN)Buffer & (sizeof (Value) - 1)) == 0);
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
-  ASSERT ((Length & (sizeof (Value) - 1)) == 0);
-
-  return (VOID*)InternalMemScanMem64 (Buffer, Length / sizeof (Value), Value);
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/ScanMem8Wrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/ScanMem8Wrapper.c
deleted file mode 100644
index c6c6d5f39ba4..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/ScanMem8Wrapper.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/** @file
-  ScanMem8() and ScanMemN() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Scans a target buffer for an 8-bit value, and returns a pointer to the matching 8-bit value
-  in the target buffer.
-
-  This function searches the target buffer specified by Buffer and Length from the lowest
-  address to the highest address for an 8-bit value that matches Value.  If a match is found,
-  then a pointer to the matching byte in the target buffer is returned.  If no match is found,
-  then NULL is returned.  If Length is 0, then NULL is returned.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-
-  @param  Buffer      Pointer to the target buffer to scan.
-  @param  Length      Number of bytes in Buffer to scan.
-  @param  Value       Value to search for in the target buffer.
-
-  @return A pointer to the matching byte in the target buffer or NULL otherwise.
-
-**/
-VOID *
-EFIAPI
-ScanMem8 (
-  IN CONST VOID  *Buffer,
-  IN UINTN       Length,
-  IN UINT8       Value
-  )
-{
-  if (Length == 0) {
-    return NULL;
-  }
-  ASSERT (Buffer != NULL);
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
-
-  return (VOID*)InternalMemScanMem8 (Buffer, Length, Value);
-}
-
-/**
-  Scans a target buffer for a UINTN sized value, and returns a pointer to the matching
-  UINTN sized value in the target buffer.
-
-  This function searches the target buffer specified by Buffer and Length from the lowest
-  address to the highest address for a UINTN sized value that matches Value.  If a match is found,
-  then a pointer to the matching byte in the target buffer is returned.  If no match is found,
-  then NULL is returned.  If Length is 0, then NULL is returned.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Buffer is not aligned on a UINTN boundary, then ASSERT().
-  If Length is not aligned on a UINTN boundary, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-
-  @param  Buffer      Pointer to the target buffer to scan.
-  @param  Length      Number of bytes in Buffer to scan.
-  @param  Value       Value to search for in the target buffer.
-
-  @return A pointer to the matching byte in the target buffer or NULL otherwise.
-
-**/
-VOID *
-EFIAPI
-ScanMemN (
-  IN CONST VOID  *Buffer,
-  IN UINTN       Length,
-  IN UINTN       Value
-  )
-{
-  if (sizeof (UINTN) == sizeof (UINT64)) {
-    return ScanMem64 (Buffer, Length, (UINT64)Value);
-  } else {
-    return ScanMem32 (Buffer, Length, (UINT32)Value);
-  }
-}
-
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/SetMem.c b/ArmPkg/Library/BaseMemoryLibVstm/SetMem.c
deleted file mode 100644
index 5c30e9b45f76..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/SetMem.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/** @file
-  Implementation of the EfiSetMem routine. This function is broken
-  out into its own source file so that it can be excluded from a
-  build for a particular platform easily if an optimized version
-  is desired.
-
-  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-
-
-
-#include "MemLibInternals.h"
-
-/**
-  Set Buffer to Value for Size bytes.
-
-  @param  Buffer   Memory to set.
-  @param  Length   Number of bytes to set
-  @param  Value    Value of the set operation.
-
-  @return Buffer
-
-**/
-VOID *
-EFIAPI
-InternalMemSetMem (
-  OUT     VOID                      *Buffer,
-  IN      UINTN                     Length,
-  IN      UINT8                     Value
-  )
-{
-  //
-  // Declare the local variables that actually move the data elements as
-  // volatile to prevent the optimizer from replacing this function with
-  // the intrinsic memset()
-  //
-  volatile UINT8                    *Pointer;
-
-  Pointer = (UINT8*)Buffer;
-  while (Length-- > 0) {
-    *(Pointer++) = Value;
-  }
-  return Buffer;
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/SetMem16Wrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/SetMem16Wrapper.c
deleted file mode 100644
index 8129d21e0dbe..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/SetMem16Wrapper.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/** @file
-  SetMem16() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Fills a target buffer with a 16-bit value, and returns the target buffer.
-
-  This function fills Length bytes of Buffer with the 16-bit value specified by
-  Value, and returns Buffer. Value is repeated every 16-bits in for Length
-  bytes of Buffer.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-  If Buffer is not aligned on a 16-bit boundary, then ASSERT().
-  If Length is not aligned on a 16-bit boundary, then ASSERT().
-
-  @param  Buffer  Pointer to the target buffer to fill.
-  @param  Length  Number of bytes in Buffer to fill.
-  @param  Value   Value with which to fill Length bytes of Buffer.
-
-  @return Buffer.
-
-**/
-VOID *
-EFIAPI
-SetMem16 (
-  OUT VOID   *Buffer,
-  IN UINTN   Length,
-  IN UINT16  Value
-  )
-{
-  if (Length == 0) {
-    return Buffer;
-  }
-
-  ASSERT (Buffer != NULL);
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
-  ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
-  ASSERT ((Length & (sizeof (Value) - 1)) == 0);
-
-  return InternalMemSetMem16 (Buffer, Length / sizeof (Value), Value);
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/SetMem32Wrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/SetMem32Wrapper.c
deleted file mode 100644
index b57ba4057af6..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/SetMem32Wrapper.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/** @file
-  SetMem32() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Fills a target buffer with a 32-bit value, and returns the target buffer.
-
-  This function fills Length bytes of Buffer with the 32-bit value specified by
-  Value, and returns Buffer. Value is repeated every 32-bits in for Length
-  bytes of Buffer.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-  If Buffer is not aligned on a 32-bit boundary, then ASSERT().
-  If Length is not aligned on a 32-bit boundary, then ASSERT().
-
-  @param  Buffer  Pointer to the target buffer to fill.
-  @param  Length  Number of bytes in Buffer to fill.
-  @param  Value   Value with which to fill Length bytes of Buffer.
-
-  @return Buffer.
-
-**/
-VOID *
-EFIAPI
-SetMem32 (
-  OUT VOID   *Buffer,
-  IN UINTN   Length,
-  IN UINT32  Value
-  )
-{
-  if (Length == 0) {
-    return Buffer;
-  }
-
-  ASSERT (Buffer != NULL);
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
-  ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
-  ASSERT ((Length & (sizeof (Value) - 1)) == 0);
-
-  return InternalMemSetMem32 (Buffer, Length / sizeof (Value), Value);
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/SetMem64Wrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/SetMem64Wrapper.c
deleted file mode 100644
index f979580b1739..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/SetMem64Wrapper.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/** @file
-  SetMem64() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Fills a target buffer with a 64-bit value, and returns the target buffer.
-
-  This function fills Length bytes of Buffer with the 64-bit value specified by
-  Value, and returns Buffer. Value is repeated every 64-bits in for Length
-  bytes of Buffer.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-  If Buffer is not aligned on a 64-bit boundary, then ASSERT().
-  If Length is not aligned on a 64-bit boundary, then ASSERT().
-
-  @param  Buffer  Pointer to the target buffer to fill.
-  @param  Length  Number of bytes in Buffer to fill.
-  @param  Value   Value with which to fill Length bytes of Buffer.
-
-  @return Buffer.
-
-**/
-VOID *
-EFIAPI
-SetMem64 (
-  OUT VOID   *Buffer,
-  IN UINTN   Length,
-  IN UINT64  Value
-  )
-{
-  if (Length == 0) {
-    return Buffer;
-  }
-
-  ASSERT (Buffer != NULL);
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
-  ASSERT ((((UINTN)Buffer) & (sizeof (Value) - 1)) == 0);
-  ASSERT ((Length & (sizeof (Value) - 1)) == 0);
-
-  return InternalMemSetMem64 (Buffer, Length / sizeof (Value), Value);
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/SetMemWrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/SetMemWrapper.c
deleted file mode 100644
index 9240c89e8b87..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/SetMemWrapper.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/** @file
-  SetMem() and SetMemN() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Fills a target buffer with a byte value, and returns the target buffer.
-
-  This function fills Length bytes of Buffer with Value, and returns Buffer.
-
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-
-  @param  Buffer    Memory to set.
-  @param  Length    Number of bytes to set.
-  @param  Value     Value with which to fill Length bytes of Buffer.
-
-  @return Buffer.
-
-**/
-VOID *
-EFIAPI
-SetMem (
-  OUT VOID  *Buffer,
-  IN UINTN  Length,
-  IN UINT8  Value
-  )
-{
-  if (Length == 0) {
-    return Buffer;
-  }
-
-  ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)Buffer));
-
-  return InternalMemSetMem (Buffer, Length, Value);
-}
-
-/**
-  Fills a target buffer with a value that is size UINTN, and returns the target buffer.
-
-  This function fills Length bytes of Buffer with the UINTN sized value specified by
-  Value, and returns Buffer. Value is repeated every sizeof(UINTN) bytes for Length
-  bytes of Buffer.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-  If Buffer is not aligned on a UINTN boundary, then ASSERT().
-  If Length is not aligned on a UINTN boundary, then ASSERT().
-
-  @param  Buffer  Pointer to the target buffer to fill.
-  @param  Length  Number of bytes in Buffer to fill.
-  @param  Value   Value with which to fill Length bytes of Buffer.
-
-  @return Buffer.
-
-**/
-VOID *
-EFIAPI
-SetMemN (
-  OUT VOID  *Buffer,
-  IN UINTN  Length,
-  IN UINTN  Value
-  )
-{
-  if (sizeof (UINTN) == sizeof (UINT64)) {
-    return SetMem64 (Buffer, Length, (UINT64)Value);
-  } else {
-    return SetMem32 (Buffer, Length, (UINT32)Value);
-  }
-}
diff --git a/ArmPkg/Library/BaseMemoryLibVstm/ZeroMemWrapper.c b/ArmPkg/Library/BaseMemoryLibVstm/ZeroMemWrapper.c
deleted file mode 100644
index d6c6279f682f..000000000000
--- a/ArmPkg/Library/BaseMemoryLibVstm/ZeroMemWrapper.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/** @file
-  ZeroMem() implementation.
-
-  The following BaseMemoryLib instances contain the same copy of this file:
-
-    BaseMemoryLib
-    BaseMemoryLibMmx
-    BaseMemoryLibSse2
-    BaseMemoryLibRepStr
-    BaseMemoryLibOptDxe
-    BaseMemoryLibOptPei
-    PeiMemoryLib
-    UefiMemoryLib
-
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
-  This program and the accompanying materials
-  are licensed and made available under the terms and conditions of the BSD License
-  which accompanies this distribution.  The full text of the license may be found at
-  http://opensource.org/licenses/bsd-license.php
-
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "MemLibInternals.h"
-
-/**
-  Fills a target buffer with zeros, and returns the target buffer.
-
-  This function fills Length bytes of Buffer with zeros, and returns Buffer.
-
-  If Length > 0 and Buffer is NULL, then ASSERT().
-  If Length is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT().
-
-  @param  Buffer      Pointer to the target buffer to fill with zeros.
-  @param  Length      Number of bytes in Buffer to fill with zeros.
-
-  @return Buffer.
-
-**/
-VOID *
-EFIAPI
-ZeroMem (
-  OUT VOID  *Buffer,
-  IN UINTN  Length
-  )
-{
-  ASSERT (!(Buffer == NULL && Length > 0));
-  ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));
-  return InternalMemZeroMem (Buffer, Length);
-}
