diff --git a/MdeModulePkg/Core/Pei/Image/Image.c b/MdeModulePkg/Core/Pei/Image/Image.c
index 0130d77342..0906548ede 100644
--- a/MdeModulePkg/Core/Pei/Image/Image.c
+++ b/MdeModulePkg/Core/Pei/Image/Image.c
@@ -116,15 +116,13 @@ GetImageReadFunction (
   VOID*  MemoryBuffer;
 
   Private = PEI_CORE_INSTANCE_FROM_PS_THIS (GetPeiServicesTablePointer ());
-
-  if (!Private->PeiMemoryInstalled || (Private->HobList.HandoffInformationTable->BootMode == BOOT_ON_S3_RESUME) || 
-      EFI_IMAGE_MACHINE_TYPE_SUPPORTED(EFI_IMAGE_MACHINE_IA64) || EFI_IMAGE_MACHINE_TYPE_SUPPORTED(EFI_IMAGE_MACHINE_ARMTHUMB_MIXED)) {
+  
+  if ((Private->PeiMemoryInstalled  && !(Private->HobList.HandoffInformationTable->BootMode == BOOT_ON_S3_RESUME))  &&
+      (EFI_IMAGE_MACHINE_TYPE_SUPPORTED(EFI_IMAGE_MACHINE_X64) || EFI_IMAGE_MACHINE_TYPE_SUPPORTED(EFI_IMAGE_MACHINE_IA32))) {
+    // 
+    // Shadow algorithm makes lots of non ANSI C assumptions and only works for IA32 and X64 
+    //  compilers that have been tested
     //
-    // Point to ROM version if memory is not installed, we are in an S3.
-    // The shadow code is not ANSI C so skip on IA64 and ARM architectures. 
-    //
-    ImageContext->ImageRead = PeiImageRead;
-  } else {
     if (Private->ShadowedImageRead == NULL) {
       MemoryBuffer = AllocatePages (0x400 / EFI_PAGE_SIZE + 1);
       ASSERT (MemoryBuffer != NULL);
@@ -133,6 +131,8 @@ GetImageReadFunction (
     }
 
     ImageContext->ImageRead = Private->ShadowedImageRead;
+  } else {
+    ImageContext->ImageRead = PeiImageRead;
   }
 
   return EFI_SUCCESS;