Index: /trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp	(revision 26634)
+++ /trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp	(revision 26635)
@@ -1721,4 +1721,8 @@
 VMMDECL(bool) CPUMIsGuestPageSizeExtEnabled(PVMCPU pVCpu)
 {
+    /* PAE or AMD64 implies support for big pages regardless of CR4.PSE */
+    if (pVCpu->cpum.s.Guest.cr4 & X86_CR4_PAE)
+        return true;
+
     return !!(pVCpu->cpum.s.Guest.cr4 & X86_CR4_PSE);
 }
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h	(revision 26634)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h	(revision 26635)
@@ -376,5 +376,5 @@
 #  if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE)
         if (    PdeSrc.b.u1Size
-#   if PGM_GST_TYPE != PGM_TYPE_AMD64
+#   if PGM_GST_TYPE == PGM_TYPE_32BIT
             &&  CPUMIsGuestPageSizeExtEnabled(pVCpu)
 #   endif
@@ -1095,8 +1095,8 @@
 # endif /* PGM_GST_TYPE != PGM_TYPE_32BIT */
 
-# if PGM_GST_TYPE == PGM_TYPE_AMD64
+# if PGM_GST_TYPE == PGM_TYPE_32BIT
+    const bool      fIsBigPage  = PdeSrc.b.u1Size && CPUMIsGuestPageSizeExtEnabled(pVCpu);
+# else
     const bool      fIsBigPage  = PdeSrc.b.u1Size;
-# else
-    const bool      fIsBigPage  = PdeSrc.b.u1Size && CPUMIsGuestPageSizeExtEnabled(pVCpu);
 # endif
 
@@ -1639,8 +1639,8 @@
      * Check that the page is present and that the shadow PDE isn't out of sync.
      */
-# if PGM_GST_TYPE == PGM_TYPE_AMD64
+# if PGM_GST_TYPE == PGM_TYPE_32BIT
+    const bool      fBigPage = PdeSrc.b.u1Size && CPUMIsGuestPageSizeExtEnabled(pVCpu);
+# else
     const bool      fBigPage = PdeSrc.b.u1Size;
-# else
-    const bool      fBigPage = PdeSrc.b.u1Size && CPUMIsGuestPageSizeExtEnabled(pVCpu);
 # endif
     RTGCPHYS        GCPhys;
@@ -2099,5 +2099,5 @@
      */
     if (   pPdeSrc->b.u1Size
-#  if PGM_GST_TYPE != PGM_TYPE_AMD64
+#  if PGM_GST_TYPE == PGM_TYPE_32BIT
         && CPUMIsGuestPageSizeExtEnabled(pVCpu)
 #  endif
@@ -2206,5 +2206,5 @@
         /* Check the present bit as the shadow tables can cause different error codes by being out of sync. */
         if (   pPdeSrc->b.u1Size
-#  if PGM_GST_TYPE != PGM_TYPE_AMD64
+#  if PGM_GST_TYPE == PGM_TYPE_32BIT
             && CPUMIsGuestPageSizeExtEnabled(pVCpu)
 #  endif
@@ -2244,8 +2244,8 @@
 PGM_BTH_DECL(int, CheckDirtyPageFault)(PVMCPU pVCpu, uint32_t uErr, PSHWPDE pPdeDst, PGSTPDE pPdeSrc, RTGCPTR GCPtrPage)
 {
-# if PGM_GST_TYPE == PGM_TYPE_AMD64
+# if PGM_GST_TYPE == PGM_TYPE_32BIT
+    const bool fBigPagesSupported = CPUMIsGuestPageSizeExtEnabled(pVCpu);
+# else
     const bool fBigPagesSupported = true;
-# else
-    const bool fBigPagesSupported = !!(CPUMGetGuestCR4(pVCpu) & X86_CR4_PSE);
 # endif
     PVM pVM = pVCpu->CTX_SUFF(pVM);
@@ -2526,8 +2526,8 @@
          */
         PSHWPT          pPTDst;
-# if PGM_GST_TYPE == PGM_TYPE_AMD64
+# if PGM_GST_TYPE == PGM_TYPE_32BIT
+        const bool      fPageTable = !PdeSrc.b.u1Size || !CPUMIsGuestPageSizeExtEnabled(pVCpu);
+# else
         const bool      fPageTable = !PdeSrc.b.u1Size;
-# else
-        const bool      fPageTable = !PdeSrc.b.u1Size || !CPUMIsGuestPageSizeExtEnabled(pVCpu);
 # endif
         PPGMPOOLPAGE    pShwPage;
@@ -3478,8 +3478,8 @@
     || PGM_GST_TYPE == PGM_TYPE_AMD64
 
-# if PGM_GST_TYPE == PGM_TYPE_AMD64
+# if PGM_GST_TYPE == PGM_TYPE_32BIT
+    bool            fBigPagesSupported = CPUMIsGuestPageSizeExtEnabled(pVCpu);
+# else
     bool            fBigPagesSupported = true;
-# else
-    bool            fBigPagesSupported = CPUMIsGuestPageSizeExtEnabled(pVCpu);
 # endif
     PPGMCPU         pPGM = &pVCpu->pgm.s;
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllGst.h
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllGst.h	(revision 26634)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllGst.h	(revision 26635)
@@ -104,5 +104,5 @@
 
     if (    !Pde.b.u1Size
-# if PGM_GST_TYPE != PGM_TYPE_AMD64
+# if PGM_GST_TYPE == PGM_TYPE_32BIT
         ||  !CPUMIsGuestPageSizeExtEnabled(pVCpu)
 # endif
@@ -221,5 +221,5 @@
 
         if (    !Pde.b.u1Size
-# if PGM_GST_TYPE != PGM_TYPE_AMD64
+# if PGM_GST_TYPE == PGM_TYPE_32BIT
             ||  !CPUMIsGuestPageSizeExtEnabled(pVCpu)
 # endif
@@ -362,5 +362,5 @@
         {
             if (    !Pde.b.u1Size
-# if PGM_GST_TYPE != PGM_TYPE_AMD64
+# if PGM_GST_TYPE == PGM_TYPE_32BIT
                 ||  !(pState->cr4 & X86_CR4_PSE)
 # endif
