Index: /trunk/Config.kmk
===================================================================
--- /trunk/Config.kmk	(revision 56606)
+++ /trunk/Config.kmk	(revision 56607)
@@ -388,4 +388,6 @@
 # Enables the second step using IEM (the interpreter).
 #VBOX_WITH_2ND_IEM_STEP = 1
+# Enables the third step using IEM (the interpreter).
+#VBOX_WITH_3RD_IEM_STEP = 1
 ## @}
 
@@ -4294,5 +4296,5 @@
  	$(PATH_TOOL_$(TEMPLATE_VBOXR3HARDENEDEXE_TOOL.win.x86)_LIB)/chkstk.obj
  TEMPLATE_VBOXR3HARDENEDEXE_CXXFLAGS      = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CXXFLAGS)) -GS-
- TEMPLATE_VBOXR3HARDENEDEXE_CXXFLAGS.debug= $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)) -GS- -O2 -Oy-
+ TEMPLATE_VBOXR3HARDENEDEXE_CXXFLAGS.debug= $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CXXFLAGS.debug)) -GS- #-O2 -Oy-
  TEMPLATE_VBOXR3HARDENEDEXE_CFLAGS        = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CFLAGS)) -GS-
  TEMPLATE_VBOXR3HARDENEDEXE_CFLAGS.debug  = $(filter-out -RTC% -GZ -GS,$(TEMPLATE_VBOXR3EXE_CFLAGS.debug)) -GS- -O2 -Oy-
Index: /trunk/src/VBox/VMM/Makefile.kmk
===================================================================
--- /trunk/src/VBox/VMM/Makefile.kmk	(revision 56606)
+++ /trunk/src/VBox/VMM/Makefile.kmk	(revision 56607)
@@ -35,4 +35,7 @@
 ifdef VBOX_WITH_2ND_IEM_STEP
  VMM_COMMON_DEFS += VBOX_WITH_2ND_IEM_STEP
+endif
+ifdef VBOX_WITH_3RD_IEM_STEP
+ VMM_COMMON_DEFS += VBOX_WITH_3RD_IEM_STEP
 endif
 #ifdef VBOX_WITH_IEM
Index: /trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp	(revision 56606)
+++ /trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp	(revision 56607)
@@ -45,4 +45,16 @@
 #include <iprt/asm.h>
 #include <iprt/string.h>
+
+/*******************************************************************************
+*   Defined Constants And Macros                                               *
+*******************************************************************************/
+/** @def IEM_USE_IEM_INSTEAD
+ * Use IEM instead of IOM for interpreting MMIO accesses.
+ * Because of PATM/CSAM issues in raw-mode, we've split this up into 2nd and 3rd
+ * IEM deployment step. */
+#if  ((defined(IN_RING3) || defined(IN_RING0)) && defined(VBOX_WITH_2ND_IEM_STEP)) \
+  || defined(VBOX_WITH_3RD_IEM_STEP)
+# define IEM_USE_IEM_INSTEAD
+#endif
 
 
@@ -720,5 +732,5 @@
 
 
-#ifndef VBOX_WITH_2ND_IEM_STEP
+#ifndef IEM_USE_IEM_INSTEAD
 
 /**
@@ -1647,5 +1659,5 @@
 }
 
-#endif /* !VBOX_WITH_2ND_IEM_STEP */
+#endif /* !IEM_USE_IEM_INSTEAD */
 
 /**
@@ -1737,5 +1749,5 @@
     }
 
-#ifdef VBOX_WITH_2ND_IEM_STEP
+#ifdef IEM_USE_IEM_INSTEAD
 
     /*
@@ -1896,5 +1908,5 @@
     iomMmioReleaseRange(pVM, pRange);
     return rc;
-#endif /* !VBOX_WITH_2ND_IEM_STEP */
+#endif /* !IEM_USE_IEM_INSTEAD */
 }
 
@@ -2257,5 +2269,5 @@
 
 #endif /* IN_RING3 - only used by REM. */
-#ifndef VBOX_WITH_2ND_IEM_STEP
+#ifndef IEM_USE_IEM_INSTEAD
 
 /**
@@ -2579,5 +2591,5 @@
 }
 
-#endif /* !VBOX_WITH_2ND_IEM_STEP */
+#endif /* !IEM_USE_IEM_INSTEAD */
 
 
Index: /trunk/src/VBox/VMM/VMMRC/IOMRC.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMRC/IOMRC.cpp	(revision 56606)
+++ /trunk/src/VBox/VMM/VMMRC/IOMRC.cpp	(revision 56607)
@@ -43,5 +43,5 @@
 
 
-#ifdef VBOX_WITH_2ND_IEM_STEP
+#ifdef VBOX_WITH_3RD_IEM_STEP
 /**
  * Converts disassembler mode to IEM mode.
@@ -200,5 +200,5 @@
 static VBOXSTRICTRC iomRCInterpretINS(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, PDISCPUSTATE pCpu)
 {
-#ifdef VBOX_WITH_2ND_IEM_STEP
+#ifdef VBOX_WITH_3RD_IEM_STEP
     uint8_t cbValue = pCpu->pCurInstr->uOpcode == OP_INSB ? 1
                     : pCpu->uOpMode == DISCPUMODE_16BIT ? 2 : 4;       /* dword in both 32 & 64 bits mode */
@@ -254,5 +254,5 @@
 static VBOXSTRICTRC iomRCInterpretOUTS(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, PDISCPUSTATE pCpu)
 {
-#ifdef VBOX_WITH_2ND_IEM_STEP
+#ifdef VBOX_WITH_3RD_IEM_STEP
     uint8_t cbValue = pCpu->pCurInstr->uOpcode == OP_OUTSB ? 1
                     : pCpu->uOpMode == DISCPUMODE_16BIT ? 2 : 4;       /* dword in both 32 & 64 bits mode */
