Index: /trunk/include/VBox/cpum.h
===================================================================
--- /trunk/include/VBox/cpum.h	(revision 9211)
+++ /trunk/include/VBox/cpum.h	(revision 9212)
@@ -313,12 +313,12 @@
      * @{ */
     uint64_t        msrEFER;
-    uint64_t        msrSTAR;
+    uint64_t        msrSTAR;        /* legacy syscall eip, cs & ss */
     uint64_t        msrPAT;
-    uint64_t        msrLSTAR;
-    uint64_t        msrCSTAR;
-    uint64_t        msrSFMASK;
+    uint64_t        msrLSTAR;       /* 64 bits mode syscall rip */
+    uint64_t        msrCSTAR;       /* compatibility mode syscall rip */
+    uint64_t        msrSFMASK;      /* syscall flag mask */
     uint64_t        msrFSBASE;
     uint64_t        msrGSBASE;
-    uint64_t        msrKERNELGSBASE;
+    uint64_t        msrKERNELGSBASE;/* swapgs exchange value */
     /** @} */
 
@@ -398,16 +398,16 @@
 CPUMDECL(RTSEL)     CPUMGetGuestGS(PVM pVM);
 CPUMDECL(RTSEL)     CPUMGetGuestSS(PVM pVM);
-CPUMDECL(RTUINTREG) CPUMGetGuestDR0(PVM pVM);
-CPUMDECL(RTUINTREG) CPUMGetGuestDR1(PVM pVM);
-CPUMDECL(RTUINTREG) CPUMGetGuestDR2(PVM pVM);
-CPUMDECL(RTUINTREG) CPUMGetGuestDR3(PVM pVM);
-CPUMDECL(RTUINTREG) CPUMGetGuestDR6(PVM pVM);
-CPUMDECL(RTUINTREG) CPUMGetGuestDR7(PVM pVM);
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR0(PVM pVM);
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR1(PVM pVM);
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR2(PVM pVM);
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR3(PVM pVM);
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR6(PVM pVM);
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR7(PVM pVM);
 CPUMDECL(int)       CPUMGetGuestDRx(PVM pVM, uint32_t iReg, uint32_t *pValue);
 CPUMDECL(void)      CPUMGetGuestCpuId(PVM pVM, uint32_t iLeaf, uint32_t *pEax, uint32_t *pEbx, uint32_t *pEcx, uint32_t *pEdx);
-CPUMDECL(GCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdStdGCPtr(PVM pVM);
-CPUMDECL(GCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdExtGCPtr(PVM pVM);
-CPUMDECL(GCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdCentaurGCPtr(PVM pVM);
-CPUMDECL(GCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdDefGCPtr(PVM pVM);
+CPUMDECL(RCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdStdGCPtr(PVM pVM);
+CPUMDECL(RCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdExtGCPtr(PVM pVM);
+CPUMDECL(RCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdCentaurGCPtr(PVM pVM);
+CPUMDECL(RCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdDefGCPtr(PVM pVM);
 CPUMDECL(uint32_t)  CPUMGetGuestCpuIdStdMax(PVM pVM);
 CPUMDECL(uint32_t)  CPUMGetGuestCpuIdExtMax(PVM pVM);
@@ -882,5 +882,5 @@
  * @param   ppCtx       Receives the CPUMCTX GC pointer when successful.
  */
-CPUMR3DECL(int) CPUMR3QueryGuestCtxGCPtr(PVM pVM, GCPTRTYPE(PCPUMCTX) *ppCtx);
+CPUMR3DECL(int) CPUMR3QueryGuestCtxGCPtr(PVM pVM, RCPTRTYPE(PCPUMCTX) *ppCtx);
 
 
@@ -930,5 +930,5 @@
  *
  */
-DECLASM(void) CPUMGCCallGuestTrapHandler(PCPUMCTXCORE pRegFrame, uint32_t selCS, RTGCPTR pHandler, uint32_t eflags, uint32_t selSS, RTGCPTR pEsp);
+DECLASM(void) CPUMGCCallGuestTrapHandler(PCPUMCTXCORE pRegFrame, uint32_t selCS, RTGCPTR32 pHandler, uint32_t eflags, uint32_t selSS, RTGCPTR32 pEsp);
 
 /**
Index: /trunk/include/VBox/dbgf.h
===================================================================
--- /trunk/include/VBox/dbgf.h	(revision 9211)
+++ /trunk/include/VBox/dbgf.h	(revision 9212)
@@ -62,5 +62,5 @@
  * @param   uDr6        The DR6 register value.
  */
-DBGFGCDECL(int) DBGFGCTrap01Handler(PVM pVM, PCPUMCTXCORE pRegFrame, RTUINTREG uDr6);
+DBGFGCDECL(int) DBGFGCTrap01Handler(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCUINTREG uDr6);
 
 /**
@@ -96,5 +96,5 @@
  * @param   uDr6        The DR6 register value.
  */
-DBGFR0DECL(int) DBGFR0Trap01Handler(PVM pVM, PCPUMCTXCORE pRegFrame, RTUINTREG uDr6);
+DBGFR0DECL(int) DBGFR0Trap01Handler(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCUINTREG uDr6);
 
 /**
Index: /trunk/include/VBox/em.h
===================================================================
--- /trunk/include/VBox/em.h	(revision 9211)
+++ /trunk/include/VBox/em.h	(revision 9212)
@@ -319,5 +319,5 @@
 EMDECL(uint32_t) EMEmulateDec(uint32_t *pu32Param1, size_t cb);
 EMDECL(uint32_t) EMEmulateOr(uint32_t *pu32Param1, uint32_t u32Param2, size_t cb);
-EMDECL(int)      EMEmulateLockOr(RTGCPTR GCPtrParam1, RTGCUINTREG Param2, size_t cbSize, uint32_t *pf);
+EMDECL(int)      EMEmulateLockOr(RTGCPTR GCPtrParam1, RTGCUINTREG Param2, size_t cbSize, RTGCUINTREG32 *pf);
 EMDECL(uint32_t) EMEmulateXor(uint32_t *pu32Param1, uint32_t u32Param2, size_t cb);
 EMDECL(uint32_t) EMEmulateAdd(uint32_t *pu32Param1, uint32_t u32Param2, size_t cb);
@@ -325,5 +325,5 @@
 EMDECL(uint32_t) EMEmulateAdcWithCarrySet(uint32_t *pu32Param1, uint32_t u32Param2, size_t cb);
 EMDECL(uint32_t) EMEmulateBtr(uint32_t *pu32Param1, uint32_t u32Param2);
-EMDECL(int)      EMEmulateLockBtr(RTGCPTR GCPtrParam1, RTGCUINTREG Param2, uint32_t *pf);
+EMDECL(int)      EMEmulateLockBtr(RTGCPTR GCPtrParam1, RTGCUINTREG Param2, RTGCUINTREG32 *pf);
 EMDECL(uint32_t) EMEmulateBts(uint32_t *pu32Param1, uint32_t u32Param2);
 EMDECL(uint32_t) EMEmulateBtc(uint32_t *pu32Param1, uint32_t u32Param2);
Index: /trunk/include/VBox/iom.h
===================================================================
--- /trunk/include/VBox/iom.h	(revision 9211)
+++ /trunk/include/VBox/iom.h	(revision 9212)
@@ -240,6 +240,6 @@
                                       const char *pszDesc);
 IOMR3DECL(int)  IOMR3IOPortRegisterGC(PVM pVM, PPDMDEVINS pDevIns, RTIOPORT PortStart, RTUINT cPorts, RTGCPTR pvUser,
-                                      GCPTRTYPE(PFNIOMIOPORTOUT) pfnOutCallback, GCPTRTYPE(PFNIOMIOPORTIN) pfnInCallback,
-                                      GCPTRTYPE(PFNIOMIOPORTOUTSTRING) pfnOutStrCallback, GCPTRTYPE(PFNIOMIOPORTINSTRING) pfnInStrCallback,
+                                      RCPTRTYPE(PFNIOMIOPORTOUT) pfnOutCallback, RCPTRTYPE(PFNIOMIOPORTIN) pfnInCallback,
+                                      RCPTRTYPE(PFNIOMIOPORTOUTSTRING) pfnOutStrCallback, RCPTRTYPE(PFNIOMIOPORTINSTRING) pfnInStrCallback,
                                       const char *pszDesc);
 IOMR3DECL(int)  IOMR3IOPortRegisterR0(PVM pVM, PPDMDEVINS pDevIns, RTIOPORT PortStart, RTUINT cPorts, RTR0PTR pvUser,
@@ -258,7 +258,7 @@
                                     R0PTRTYPE(PFNIOMMMIOFILL)  pfnFillCallback);
 IOMR3DECL(int)  IOMR3MMIORegisterGC(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTUINT cbRange, RTGCPTR pvUser,
-                                    GCPTRTYPE(PFNIOMMMIOWRITE) pfnWriteCallback,
-                                    GCPTRTYPE(PFNIOMMMIOREAD)  pfnReadCallback,
-                                    GCPTRTYPE(PFNIOMMMIOFILL)  pfnFillCallback);
+                                    RCPTRTYPE(PFNIOMMMIOWRITE) pfnWriteCallback,
+                                    RCPTRTYPE(PFNIOMMMIOREAD)  pfnReadCallback,
+                                    RCPTRTYPE(PFNIOMMMIOFILL)  pfnFillCallback);
 IOMR3DECL(int)  IOMR3MMIODeregister(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTUINT cbRange);
 /** @} */
Index: /trunk/include/VBox/mm.h
===================================================================
--- /trunk/include/VBox/mm.h	(revision 9211)
+++ /trunk/include/VBox/mm.h	(revision 9212)
@@ -239,5 +239,5 @@
 {
     NOREF(pVM);
-    return GCPtr;
+    return (void *)GCPtr;
 }
 #endif
@@ -264,10 +264,10 @@
 
 #ifndef IN_GC
-MMDECL(RTGCPTR)     MMHyperCCToGC(PVM pVM, void *pv);
-#else
-DECLINLINE(RTGCPTR) MMHyperCCToGC(PVM pVM, void *pv)
-{
-    NOREF(pVM);
-    return pv;
+MMDECL(RCPTRTYPE(void *))     MMHyperCCToGC(PVM pVM, void *pv);
+#else
+DECLINLINE(RCPTRTYPE(void *)) MMHyperCCToGC(PVM pVM, void *pv)
+{
+    NOREF(pVM);
+    return (RCPTRTYPE(void *))pv;
 }
 #endif
@@ -285,15 +285,15 @@
 
 #ifndef IN_GC
-MMDECL(RTGCPTR)     MMHyper2GC(PVM pVM, uintptr_t Ptr);
-#else
-DECLINLINE(RTGCPTR) MMHyper2GC(PVM pVM, uintptr_t Ptr)
-{
-    NOREF(pVM);
-    return (RTGCPTR)Ptr;
-}
-#endif
-
-MMDECL(RTGCPTR)     MMHyperHC2GC(PVM pVM, RTHCPTR HCPtr);
-MMDECL(RTHCPTR)     MMHyperGC2HC(PVM pVM, RTGCPTR GCPtr);
+MMDECL(RCPTRTYPE(void *))     MMHyper2GC(PVM pVM, uintptr_t Ptr);
+#else
+DECLINLINE(RCPTRTYPE(void *)) MMHyper2GC(PVM pVM, uintptr_t Ptr)
+{
+    NOREF(pVM);
+    return (RCPTRTYPE(void *))Ptr;
+}
+#endif
+
+MMDECL(RCPTRTYPE(void *))     MMHyperHC2GC(PVM pVM, RTHCPTR HCPtr);
+MMDECL(RTHCPTR)     MMHyperGC2HC(PVM pVM, RCPTRTYPE(void *) GCPtr);
 MMDECL(int)         MMHyperAlloc(PVM pVM, size_t cb, uint32_t uAlignment, MMTAG enmTag, void **ppv);
 MMDECL(int)         MMHyperFree(PVM pVM, void *pv);
Index: /trunk/include/VBox/patm.h
===================================================================
--- /trunk/include/VBox/patm.h	(revision 9211)
+++ /trunk/include/VBox/patm.h	(revision 9212)
@@ -186,5 +186,5 @@
  * @param   pVM         The VM to operate on.
  */
-PATMDECL(GCPTRTYPE(PPATMGCSTATE)) PATMQueryGCState(PVM pVM);
+PATMDECL(RCPTRTYPE(PPATMGCSTATE)) PATMQueryGCState(PVM pVM);
 
 /**
@@ -551,5 +551,5 @@
  *
  */
-PATMR3DECL(RTGCPTR) PATMR3GuestGCPtrToPatchGCPtr(PVM pVM, GCPTRTYPE(uint8_t*) pInstrGC);
+PATMR3DECL(RTGCPTR) PATMR3GuestGCPtrToPatchGCPtr(PVM pVM, RCPTRTYPE(uint8_t*) pInstrGC);
 
 /**
Index: /trunk/include/VBox/pdmdev.h
===================================================================
--- /trunk/include/VBox/pdmdev.h	(revision 9211)
+++ /trunk/include/VBox/pdmdev.h	(revision 9212)
@@ -554,7 +554,7 @@
 } PDMPCIHLPGC;
 /** Pointer to PCI helpers. */
-typedef GCPTRTYPE(PDMPCIHLPGC *) PPDMPCIHLPGC;
+typedef RCPTRTYPE(PDMPCIHLPGC *) PPDMPCIHLPGC;
 /** Pointer to const PCI helpers. */
-typedef GCPTRTYPE(const PDMPCIHLPGC *) PCPDMPCIHLPGC;
+typedef RCPTRTYPE(const PDMPCIHLPGC *) PCPDMPCIHLPGC;
 
 /** Current PDMPCIHLPR3 version number. */
@@ -799,7 +799,7 @@
 
 /** Pointer to PIC GC helpers. */
-typedef GCPTRTYPE(PDMPICHLPGC *) PPDMPICHLPGC;
+typedef RCPTRTYPE(PDMPICHLPGC *) PPDMPICHLPGC;
 /** Pointer to const PIC GC helpers. */
-typedef GCPTRTYPE(const PDMPICHLPGC *) PCPDMPICHLPGC;
+typedef RCPTRTYPE(const PDMPICHLPGC *) PCPDMPICHLPGC;
 
 /** Current PDMPICHLPGC version number. */
@@ -1092,7 +1092,7 @@
 } PDMAPICHLPGC;
 /** Pointer to APIC GC helpers. */
-typedef GCPTRTYPE(PDMAPICHLPGC *) PPDMAPICHLPGC;
+typedef RCPTRTYPE(PDMAPICHLPGC *) PPDMAPICHLPGC;
 /** Pointer to const APIC helpers. */
-typedef GCPTRTYPE(const PDMAPICHLPGC *) PCPDMAPICHLPGC;
+typedef RCPTRTYPE(const PDMAPICHLPGC *) PCPDMAPICHLPGC;
 
 /** Current PDMAPICHLPGC version number. */
@@ -1153,5 +1153,5 @@
 } PDMAPICHLPR0;
 /** Pointer to APIC GC helpers. */
-typedef GCPTRTYPE(PDMAPICHLPR0 *) PPDMAPICHLPR0;
+typedef RCPTRTYPE(PDMAPICHLPR0 *) PPDMAPICHLPR0;
 /** Pointer to const APIC helpers. */
 typedef R0PTRTYPE(const PDMAPICHLPR0 *) PCPDMAPICHLPR0;
@@ -1321,7 +1321,7 @@
 } PDMIOAPICHLPGC;
 /** Pointer to IOAPIC GC helpers. */
-typedef GCPTRTYPE(PDMAPICHLPGC *)PPDMIOAPICHLPGC;
+typedef RCPTRTYPE(PDMAPICHLPGC *)PPDMIOAPICHLPGC;
 /** Pointer to const IOAPIC helpers. */
-typedef GCPTRTYPE(const PDMIOAPICHLPGC *) PCPDMIOAPICHLPGC;
+typedef RCPTRTYPE(const PDMIOAPICHLPGC *) PCPDMIOAPICHLPGC;
 
 /** Current PDMIOAPICHLPGC version number. */
@@ -2806,7 +2806,7 @@
 } PDMDEVHLPGC;
 /** Pointer PDM Device GC API. */
-typedef GCPTRTYPE(struct PDMDEVHLPGC *) PPDMDEVHLPGC;
+typedef RCPTRTYPE(struct PDMDEVHLPGC *) PPDMDEVHLPGC;
 /** Pointer PDM Device GC API. */
-typedef GCPTRTYPE(const struct PDMDEVHLPGC *) PCPDMDEVHLPGC;
+typedef RCPTRTYPE(const struct PDMDEVHLPGC *) PCPDMDEVHLPGC;
 
 /** Current PDMDEVHLP version number. */
@@ -2980,7 +2980,7 @@
     R0PTRTYPE(void *)           pvInstanceDataR0;
     /** Pointer the GC PDM Device API. */
-    GCPTRTYPE(PCPDMDEVHLPGC)    pDevHlpGC;
+    RCPTRTYPE(PCPDMDEVHLPGC)    pDevHlpGC;
     /** Pointer to device instance data. */
-    GCPTRTYPE(void *)           pvInstanceDataGC;
+    RCPTRTYPE(void *)           pvInstanceDataGC;
     /* padding to make achInstanceData aligned at 32 byte boundrary. */
     uint32_t                    au32Padding[HC_ARCH_BITS == 32 ? 1 : 6];
@@ -3039,5 +3039,5 @@
  * Converts a PDM Device instance pointer a GC PDM Device instance pointer.
  */
-#define PDMDEVINS_2_GCPTR(pDevIns)  ( (GCPTRTYPE(PPDMDEVINS))((RTGCUINTPTR)(pDevIns)->pvInstanceDataGC - RT_OFFSETOF(PDMDEVINS, achInstanceData)) )
+#define PDMDEVINS_2_GCPTR(pDevIns)  ( (RCPTRTYPE(PPDMDEVINS))((RTGCUINTPTR)(pDevIns)->pvInstanceDataGC - RT_OFFSETOF(PDMDEVINS, achInstanceData)) )
 
 /** @def PDMDEVINS_2_R3PTR
Index: /trunk/include/VBox/pdmqueue.h
===================================================================
--- /trunk/include/VBox/pdmqueue.h	(revision 9211)
+++ /trunk/include/VBox/pdmqueue.h	(revision 9212)
@@ -54,5 +54,5 @@
     R3R0PTRTYPE(PPDMQUEUEITEMCORE)  pNextHC;
     /** Pointer to the next item in the pending list - GC Pointer. */
-    GCPTRTYPE(PPDMQUEUEITEMCORE)    pNextGC;
+    RCPTRTYPE(PPDMQUEUEITEMCORE)    pNextGC;
 #if HC_ARCH_BITS == 64 && GC_ARCH_BITS == 32
     uint32_t                        Alignment0;
@@ -280,5 +280,5 @@
  * @param   pQueue          The queue handle.
  */
-PDMDECL(GCPTRTYPE(PPDMQUEUE)) PDMQueueGCPtr(PPDMQUEUE pQueue);
+PDMDECL(RCPTRTYPE(PPDMQUEUE)) PDMQueueGCPtr(PPDMQUEUE pQueue);
 
 /** @} */
Index: /trunk/include/VBox/pgm.h
===================================================================
--- /trunk/include/VBox/pgm.h	(revision 9211)
+++ /trunk/include/VBox/pgm.h	(revision 9212)
@@ -344,5 +344,5 @@
                                              R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnHandlerR3, RTR3PTR pvUserR3,
                                              R0PTRTYPE(PFNPGMR0PHYSHANDLER) pfnHandlerR0, RTR0PTR pvUserR0,
-                                             GCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RTGCPTR pvUserGC,
+                                             RCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RCPTRTYPE(void *) pvUserGC,
                                              R3PTRTYPE(const char *) pszDesc);
 PGMDECL(int)    PGMHandlerPhysicalModify(PVM pVM, RTGCPHYS GCPhysCurrent, RTGCPHYS GCPhys, RTGCPHYS GCPhysLast);
@@ -351,5 +351,5 @@
                                                   R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnHandlerR3, RTR3PTR pvUserR3,
                                                   R0PTRTYPE(PFNPGMR0PHYSHANDLER) pfnHandlerR0, RTR0PTR pvUserR0,
-                                                  GCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RTGCPTR pvUserGC,
+                                                  RCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RCPTRTYPE(void *) pvUserGC,
                                                   R3PTRTYPE(const char *) pszDesc);
 PGMDECL(int)    PGMHandlerPhysicalSplit(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS GCPhysSplit);
@@ -483,5 +483,5 @@
                                       R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnHandlerR3, RTR3PTR pvUserR3,
                                       R0PTRTYPE(PFNPGMR0PHYSHANDLER) pfnHandlerR0, RTR0PTR pvUserR0,
-                                      GCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RTGCPTR pvUserGC,
+                                      RCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RTGCPTR pvUserGC,
                                       R3PTRTYPE(const char *) pszDesc);
 PDMR3DECL(int)  PGMR3PhysMMIODeregister(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cb);
Index: /trunk/include/VBox/selm.h
===================================================================
--- /trunk/include/VBox/selm.h	(revision 9211)
+++ /trunk/include/VBox/selm.h	(revision 9212)
@@ -65,5 +65,5 @@
  * @param   esp     Ring1 ESP register value.
  */
-SELMDECL(void) SELMSetRing1Stack(PVM pVM, uint32_t ss, uint32_t esp);
+SELMDECL(void) SELMSetRing1Stack(PVM pVM, uint32_t ss, RTGCPTR32 esp);
 
 /**
@@ -75,5 +75,5 @@
  * @param   pEsp    Ring1 ESP register value.
  */
-SELMDECL(int) SELMGetRing1Stack(PVM pVM, uint32_t *pSS, uint32_t *pEsp);
+SELMDECL(int) SELMGetRing1Stack(PVM pVM, uint32_t *pSS, PRTGCPTR32 pEsp);
 
 /**
Index: /trunk/include/VBox/types.h
===================================================================
--- /trunk/include/VBox/types.h	(revision 9211)
+++ /trunk/include/VBox/types.h	(revision 9212)
@@ -83,5 +83,5 @@
 typedef R3PTRTYPE(struct VM *)  PVMR3;
 /** Pointer to a VM - GC Ptr. */
-typedef GCPTRTYPE(struct VM *)  PVMGC;
+typedef RCPTRTYPE(struct VM *)  PVMGC;
 
 /** Pointer to a ring-0 (global) VM structure. */
@@ -139,5 +139,5 @@
 typedef R0PTRTYPE(PPDMDEVINS) PPDMDEVINSR0;
 /** GC pointer to a PDM Device Instance. */
-typedef GCPTRTYPE(PPDMDEVINS) PPDMDEVINSGC;
+typedef RCPTRTYPE(PPDMDEVINS) PPDMDEVINSGC;
 
 /** Pointer to a PDM USB Device Instance. */
@@ -167,5 +167,5 @@
 
 /** GC pointer to a timer. */
-typedef GCPTRTYPE(struct TMTIMER *) PTMTIMERGC;
+typedef RCPTRTYPE(struct TMTIMER *) PTMTIMERGC;
 /** Pointer to a GC pointer to a timer. */
 typedef PTMTIMERGC *PPTMTIMERGC;
Index: /trunk/include/VBox/vm.h
===================================================================
--- /trunk/include/VBox/vm.h	(revision 9211)
+++ /trunk/include/VBox/vm.h	(revision 9212)
@@ -280,5 +280,5 @@
     R0PTRTYPE(struct VM *)      pVMR0;
     /** Guest Context VM Pointer. */
-    GCPTRTYPE(struct VM *)      pVMGC;
+    RCPTRTYPE(struct VM *)      pVMGC;
 
     /** The GVM VM handle. Only the GVM should modify this field. */
@@ -513,5 +513,5 @@
         struct TM   s;
 #endif
-        char        padding[1312];      /* multiple of 32 */
+        char        padding[1344];      /* multiple of 32 */
     } tm;
 
@@ -522,5 +522,5 @@
         struct DBGF s;
 #endif
-        char        padding[HC_ARCH_BITS == 32 ? 1920 : 1952];      /* multiple of 32 */
+        char        padding[2368];      /* multiple of 32 */
     } dbgf;
 
@@ -549,5 +549,9 @@
         struct REM  s;
 #endif
+#if GC_ARCH_BITS == 32
         char        padding[HC_ARCH_BITS == 32 ? 0x6f00 : 0xbf00];    /* multiple of 32 */
+#else
+        char        padding[HC_ARCH_BITS == 32 ? 0x8f00 : 0xdf00];    /* multiple of 32 */
+#endif
     } rem;
 } VM;
Index: /trunk/include/VBox/vm.mac
===================================================================
--- /trunk/include/VBox/vm.mac	(revision 9211)
+++ /trunk/include/VBox/vm.mac	(revision 9212)
@@ -49,16 +49,16 @@
     .enmVMState         resd 1
     .fForcedActions     resd 1
-    .paVMPagesR3        RTR3PTR_RES 1
-    .pSession           RTR0PTR_RES 1
-    .pUVM               RTR3PTR_RES 1
-    .pVMR3              RTR3PTR_RES 1
-    .pVMR0              RTR0PTR_RES 1
-    .pVMGC              RTGCPTR_RES 1
+    .paVMPagesR3        RTR3PTR_RES   1
+    .pSession           RTR0PTR_RES   1
+    .pUVM               RTR3PTR_RES   1
+    .pVMR3              RTR3PTR_RES   1
+    .pVMR0              RTR0PTR_RES   1
+    .pVMGC              RTGCPTR32_RES 1
     .hSelf              resd 1
     .u32Reserved        resd 1
 
-    .pfnVMMGCGuestToHostAsmGuestCtx RTGCPTR_RES 1
-    .pfnVMMGCGuestToHostAsmHyperCtx RTGCPTR_RES 1
-    .pfnVMMGCGuestToHostAsm         RTGCPTR_RES 1
+    .pfnVMMGCGuestToHostAsmGuestCtx RTGCPTR32_RES 1
+    .pfnVMMGCGuestToHostAsmHyperCtx RTGCPTR32_RES 1
+    .pfnVMMGCGuestToHostAsm         RTGCPTR32_RES 1
 
     .ThreadEMT          RTHCPTR_RES 1
Index: /trunk/include/iprt/asm.h
===================================================================
--- /trunk/include/iprt/asm.h	(revision 9211)
+++ /trunk/include/iprt/asm.h	(revision 9212)
@@ -3860,5 +3860,5 @@
 
 #  elif RT_INLINE_ASM_GNU_STYLE
-    RTUINTREG uDummy;
+    RTCCUINTREG uDummy;
 #   ifdef RT_ARCH_AMD64
     __asm__ __volatile__ ("rep stosq"
@@ -4129,5 +4129,5 @@
 # else /* !RT_ARCH_AMD64 */
 #  if RT_INLINE_ASM_GNU_STYLE
-    RTUINTREG uDummy;
+    RTCCUINTREG uDummy;
     __asm__ __volatile__("divl %3"
                          : "=a" (u32), "=d"(uDummy)
@@ -4163,5 +4163,5 @@
 # else /* !RT_ARCH_AMD64 */
 #  if RT_INLINE_ASM_GNU_STYLE
-    RTUINTREG iDummy;
+    RTCCUINTREG iDummy;
     __asm__ __volatile__("idivl %3"
                          : "=a" (i32), "=d"(iDummy)
Index: /trunk/include/iprt/asmdefs.mac
===================================================================
--- /trunk/include/iprt/asmdefs.mac	(revision 9211)
+++ /trunk/include/iprt/asmdefs.mac	(revision 9212)
@@ -429,4 +429,7 @@
 %endif
 
+%define RTGCPTR32_RES   resd
+%define RTGCPTR64_RES   resq
+
 ;; @def RTGCPTR_PRE
 ; The memory operand prefix used for a pointer in the guest context.
@@ -504,5 +507,5 @@
 %define RTGCPHYS_DEF    dq
 
-;; @def RTGCPTR_RES
+;; @def RTGCPHYS_RES
 ; The pesudo-instruction used to declare (=reserve space for) an uninitialized
 ; guest physical address variable
Index: /trunk/include/iprt/cdefs.h
===================================================================
--- /trunk/include/iprt/cdefs.h	(revision 9211)
+++ /trunk/include/iprt/cdefs.h	(revision 9212)
@@ -217,5 +217,5 @@
  * @param   R3Type  The R3 type.
  * @param   R0Type  The R0 type.
- * @remark  For pointers used only in one context use GCPTRTYPE(), R3R0PTRTYPE(), R3PTRTYPE() or R0PTRTYPE().
+ * @remark  For pointers used only in one context use RCPTRTYPE(), R3R0PTRTYPE(), R3PTRTYPE() or R0PTRTYPE().
  */
 #ifdef IN_GC
@@ -232,9 +232,9 @@
  * @param   GCType  The GC type.
  * @param   HCType  The HC type.
- * @remark  For pointers used only in one context use GCPTRTYPE(), R3R0PTRTYPE(), R3PTRTYPE() or R0PTRTYPE().
+ * @remark  For pointers used only in one context use RCPTRTYPE(), R3R0PTRTYPE(), R3PTRTYPE() or R0PTRTYPE().
  */
 #define GCTYPE(GCType, HCType)  CTXTYPE(GCType, HCType, HCType)
 
-/** @def GCPTRTYPE
+/** @def RCPTRTYPE
  * Declare a pointer which is used in GC but appears in structure(s) used by
  * both HC and GC. The main purpose is to make sure structures have the same
@@ -243,5 +243,5 @@
  * @param   GCType  The GC type.
  */
-#define GCPTRTYPE(GCType)       CTXTYPE(GCType, RTGCPTR32, RTGCPTR32)
+#define RCPTRTYPE(GCType)       CTXTYPE(GCType, RTGCPTR32, RTGCPTR32)
 
 /** @def R3R0PTRTYPE
Index: /trunk/include/iprt/log.h
===================================================================
--- /trunk/include/iprt/log.h	(revision 9211)
+++ /trunk/include/iprt/log.h	(revision 9212)
@@ -193,5 +193,5 @@
 typedef DECLCALLBACK(void) FNRTLOGFLUSHGC(PRTLOGGERGC pLogger);
 /** Pointer to logger function. */
-typedef GCPTRTYPE(FNRTLOGFLUSHGC *) PFNRTLOGFLUSHGC;
+typedef RCPTRTYPE(FNRTLOGFLUSHGC *) PFNRTLOGFLUSHGC;
 
 
@@ -212,5 +212,5 @@
      * instance pointer onto the stack before jumping to the real logger function.
      * A very unfortunate hack to work around the missing variadic macro support in C++. */
-    GCPTRTYPE(PFNRTLOGGER)  pfnLogger;
+    RCPTRTYPE(PFNRTLOGGER)  pfnLogger;
     /** Pointer to the flush function. */
     PFNRTLOGFLUSHGC         pfnFlush;
Index: /trunk/include/iprt/spinlock.h
===================================================================
--- /trunk/include/iprt/spinlock.h	(revision 9211)
+++ /trunk/include/iprt/spinlock.h	(revision 9212)
@@ -56,5 +56,5 @@
 # elif defined(RT_OS_WINDOWS)
     /** The saved [R|E]FLAGS. */
-    RTUINTREG       uFlags;
+    RTCCUINTREG       uFlags;
     /** The KIRQL. */
     unsigned char   uchIrqL;
@@ -68,10 +68,10 @@
 # elif defined(RT_OS_DARWIN)
     /** The saved [R|E]FLAGS. */
-    RTUINTREG       uFlags;
+    RTCCUINTREG       uFlags;
 #  define RTSPINLOCKTMP_INITIALIZER { 0 }
 
 # elif defined(RT_OS_OS2) || defined(RT_OS_FREEBSD) || defined(RT_OS_SOLARIS)
     /** The saved [R|E]FLAGS. (dummy) */
-    RTUINTREG       uFlags;
+    RTCCUINTREG       uFlags;
 #  define RTSPINLOCKTMP_INITIALIZER { 0 }
 
@@ -79,5 +79,5 @@
 #  error "Your OS is not supported.\n"
     /** The saved [R|E]FLAGS. */
-    RTUINTREG       uFlags;
+    RTCCUINTREG       uFlags;
 # endif
 
@@ -85,5 +85,5 @@
     /** The saved [R|E]FLAGS.
      * (RT spinlocks will by definition disable interrupts.) */
-    RTUINTREG       uFlags;
+    RTCCUINTREG       uFlags;
 # define RTSPINLOCKTMP_INITIALIZER { 0 }
 #endif /* !IN_RING0 */
Index: /trunk/include/iprt/time.h
===================================================================
--- /trunk/include/iprt/time.h	(revision 9211)
+++ /trunk/include/iprt/time.h	(revision 9212)
@@ -842,8 +842,8 @@
 typedef struct RTTIMENANOTSDATAGC
 {
-    GCPTRTYPE(uint64_t volatile  *) pu64Prev;
+    RCPTRTYPE(uint64_t volatile  *) pu64Prev;
     DECLGCCALLBACKMEMBER(void, pfnBad,(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS));
     DECLGCCALLBACKMEMBER(uint64_t, pfnRediscover,(PRTTIMENANOTSDATA pData));
-    RTGCPTR             pvDummy;
+    RCPTRTYPE(void *)   pvDummy;
     uint32_t            c1nsSteps;
     uint32_t            cExpired;
Index: /trunk/include/iprt/types.h
===================================================================
--- /trunk/include/iprt/types.h	(revision 9211)
+++ /trunk/include/iprt/types.h	(revision 9212)
@@ -707,5 +707,9 @@
 
 /** Natural signed integer in the GC. */
+#if GC_ARCH_BITS == 32
 typedef int32_t         RTGCINT;
+#elif GC_ARCH_BITS == 64
+typedef int64_t         RTGCINT;
+#endif
 /** Pointer to natural signed interger in GC. */
 typedef RTGCINT        *PRTGCINT;
@@ -713,9 +717,13 @@
 typedef const RTGCINT  *PCRTGCINT;
 
-/** Natural signed uninteger in the GC. */
+/** Natural unsigned integer in the GC. */
+#if GC_ARCH_BITS == 32
 typedef uint32_t        RTGCUINT;
-/** Pointer to natural unsigned interger in GC. */
+#elif GC_ARCH_BITS == 64
+typedef uint64_t        RTGCUINT;
+#endif
+/** Pointer to natural unsigned integer in GC. */
 typedef RTGCUINT       *PRTGCUINT;
-/** Pointer to const natural unsigned interger in GC. */
+/** Pointer to const natural unsigned integer in GC. */
 typedef const RTGCUINT *PCRTGCUINT;
 
@@ -725,6 +733,4 @@
 #elif GC_ARCH_BITS == 64
 typedef int64_t         RTGCINTPTR;
-#else
-#  error Unsupported GC_ARCH_BITS value.
 #endif
 /** Pointer to signed interger which can contain a GC pointer. */
@@ -808,9 +814,5 @@
  * HC and void pointer in GC.
  */
-#ifdef IN_GC
-typedef void           *RTGCPTR32;
-#else
 typedef RTGCUINTPTR32   RTGCPTR32;
-#endif
 /** Pointer to a guest context pointer. */
 typedef RTGCPTR32      *PRTGCPTR32;
@@ -863,8 +865,20 @@
 
 /** Unsigned integer register in the guest context. */
+typedef uint32_t              RTGCUINTREG32;
+/** Pointer to an unsigned integer register in the guest context. */
+typedef RTGCUINTREG32        *PRTGCUINTREG32;
+/** Pointer to a const unsigned integer register in the guest context. */
+typedef const RTGCUINTREG32  *PCRTGCUINTREG32;
+
+typedef uint64_t              RTGCUINTREG64;
+/** Pointer to an unsigned integer register in the guest context. */
+typedef RTGCUINTREG64        *PRTGCUINTREG64;
+/** Pointer to a const unsigned integer register in the guest context. */
+typedef const RTGCUINTREG64  *PCRTGCUINTREG64;
+
 #if GC_ARCH_BITS == 64
-typedef uint64_t            RTGCUINTREG;
+typedef RTGCUINTREG64       RTGCUINTREG;
 #elif GC_ARCH_BITS == 32
-typedef uint32_t            RTGCUINTREG;
+typedef RTGCUINTREG32       RTGCUINTREG;
 #else
 # error "Unsupported GC_ARCH_BITS!"
@@ -904,23 +918,34 @@
 #endif
 
+/** Unsigned integer register in the current 32 bits context. */
+typedef uint32_t              RTCCUINTREG32;
+/** Pointer to an unsigned integer register in the current context. */
+typedef RTCCUINTREG32        *PRTCCUINTREG32;
+/** Pointer to a const unsigned integer register in the current context. */
+typedef const RTCCUINTREG32  *PCRTCCUINTREG32;
+
+/** Unsigned integer register in the current 64 bits context. */
+typedef uint64_t              RTCCUINTREG64;
+/** Pointer to an unsigned integer register in the current context. */
+typedef RTCCUINTREG64        *PRTCCUINTREG64;
+/** Pointer to a const unsigned integer register in the current context. */
+typedef const RTCCUINTREG64  *PCRTCCUINTREG64;
+
 /** Unsigned integer register in the current context. */
 #if ARCH_BITS == 32
-typedef uint32_t            RTCCUINTREG;
+typedef RTCCUINTREG32         RTCCUINTREG;
+/** Pointer to an unsigned integer register in the current context. */
+typedef PRTCCUINTREG32        PRTCCUINTREG;
+/** Pointer to a const unsigned integer register in the current context. */
+typedef PCRTCCUINTREG32       PCRTCCUINTREG;
 #elif ARCH_BITS == 64
-typedef uint64_t            RTCCUINTREG;
+typedef RTCCUINTREG64         RTCCUINTREG;
+/** Pointer to an unsigned integer register in the current context. */
+typedef PRTCCUINTREG64      PRTCCUINTREG;
+/** Pointer to a const unsigned integer register in the current context. */
+typedef PCRTCCUINTREG64     PCRTCCUINTREG;
 #else
 # error "Unsupported ARCH_BITS!"
 #endif
-/** Pointer to an unsigned integer register in the current context. */
-typedef RTCCUINTREG        *PRTCCUINTREG;
-/** Pointer to a const unsigned integer register in the current context. */
-typedef const RTCCUINTREG  *PCRTCCUINTREG;
-
-/** @deprecated */
-typedef RTCCUINTREG         RTUINTREG;
-/** @deprecated */
-typedef RTCCUINTREG        *PRTUINTREG;
-/** @deprecated */
-typedef const RTCCUINTREG  *PCRTUINTREG;
 
 /** @} */
Index: /trunk/src/VBox/Devices/Graphics/DevVGA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA.cpp	(revision 9211)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA.cpp	(revision 9212)
@@ -5231,6 +5231,9 @@
     AssertMsgRC(rc, ("PDMDevHlpMMIO2Register(%#x,) -> %Rrc\n", pData->vram_size, rc));
 
-    rc = PDMDevHlpMMHyperMapMMIO2(pDevIns, 0 /* iRegion */, 0 /* off */,  VGA_MAPPING_SIZE, "VGA VRam", &pData->vram_ptrGC);
+    RTGCPTR pGCMapping = 0;
+    rc = PDMDevHlpMMHyperMapMMIO2(pDevIns, 0 /* iRegion */, 0 /* off */,  VGA_MAPPING_SIZE, "VGA VRam", &pGCMapping);
     AssertMsgRC(rc, ("MMR3HyperMapGCPhys(%#x,) -> %Rrc\n", pData->vram_size, rc));
+    Assert(!(pGCMapping >> 32ULL));
+    pData->vram_ptrGC = pGCMapping;
 
     /*
Index: /trunk/src/VBox/Devices/Graphics/DevVGA.h
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA.h	(revision 9211)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA.h	(revision 9212)
@@ -251,5 +251,5 @@
     RTGCPHYS32                  GCPhysVRAM;
     /** Pointer to GC vram mapping. */
-    GCPTRTYPE(uint8_t *)        vram_ptrGC;
+    RCPTRTYPE(uint8_t *)        vram_ptrGC;
 /** @todo r=bird: bool not RTUINT (my fault I guess). */
     /** LFB was updated flag. */
@@ -260,5 +260,5 @@
     RTUINT                      fR0Enabled;
     /** Pointer to vgaGCLFBAccessHandler(). */
-    RTGCPTR                     GCPtrLFBHandler;
+    RTGCPTR32                   GCPtrLFBHandler;
     /** Flag indicating that there are dirty bits. This is used to optimize the handler resetting. */
     bool                        fHaveDirtyBits;
@@ -268,5 +268,5 @@
     R3R0PTRTYPE(PPDMDEVINS)     pDevInsHC;
     /* * Pointer to the device instance - GC Ptr. */
-    /*GCPTRTYPE(PPDMDEVINS)   pDevInsGC;*/
+    /*RCPTRTYPE(PPDMDEVINS)   pDevInsGC;*/
 
     /** The display port base interface. */
Index: /trunk/src/VBox/Devices/Network/DevPCNet.cpp
===================================================================
--- /trunk/src/VBox/Devices/Network/DevPCNet.cpp	(revision 9211)
+++ /trunk/src/VBox/Devices/Network/DevPCNet.cpp	(revision 9212)
@@ -114,5 +114,5 @@
     R3R0PTRTYPE(PTMTIMER)               pTimerPollHC;
     /** Poll timer (address for guest context) */
-    GCPTRTYPE(PTMTIMER)                 pTimerPollGC;
+    RCPTRTYPE(PTMTIMER)                 pTimerPollGC;
 #endif
 
@@ -124,5 +124,5 @@
     R3R0PTRTYPE(PTMTIMER)               pTimerSoftIntHC;
     /** Software Interrupt timer (address for guest context) */
-    GCPTRTYPE(PTMTIMER)                 pTimerSoftIntGC;
+    RCPTRTYPE(PTMTIMER)                 pTimerSoftIntGC;
 
     /** Register Address Pointer */
@@ -166,12 +166,12 @@
 
     /** Transmit signaller */
-    GCPTRTYPE(PPDMQUEUE)                pXmitQueueGC;
+    RCPTRTYPE(PPDMQUEUE)                pXmitQueueGC;
     R3R0PTRTYPE(PPDMQUEUE)              pXmitQueueHC;
 
     /** Receive signaller */
     R3R0PTRTYPE(PPDMQUEUE)              pCanRxQueueHC;
-    GCPTRTYPE(PPDMQUEUE)                pCanRxQueueGC;
+    RCPTRTYPE(PPDMQUEUE)                pCanRxQueueGC;
     /** Pointer to the device instance. */
-    GCPTRTYPE(PPDMDEVINS)               pDevInsGC;
+    RCPTRTYPE(PPDMDEVINS)               pDevInsGC;
     /** Pointer to the device instance. */
     R3R0PTRTYPE(PPDMDEVINS)             pDevInsHC;
@@ -241,5 +241,5 @@
     R3R0PTRTYPE(PPCNETGUESTSHAREDMEMORY) pSharedMMIOHC;
     /** The hypervisor/guest context of the shared memory used for the private interface. */
-    GCPTRTYPE(PPCNETGUESTSHAREDMEMORY)  pSharedMMIOGC;
+    RCPTRTYPE(PPCNETGUESTSHAREDMEMORY)  pSharedMMIOGC;
 
 #if HC_ARCH_BITS == 64
@@ -4745,4 +4745,6 @@
     if (fPrivIfEnabled)
     {
+        RTGCPTR pGCMapping;
+
         /*
          * Initialize shared memory between host and guest for descriptors and RX buffers. Most guests
@@ -4753,8 +4755,9 @@
             return PDMDevHlpVMSetError(pDevIns, rc, RT_SRC_POS,
                                        N_("Failed to allocate %u bytes of memory for the PCNet device"), PCNET_GUEST_SHARED_MEMORY_SIZE);
-        rc = PDMDevHlpMMHyperMapMMIO2(pDevIns, 2, 0, 8192, "PCNetShMem", &pData->pSharedMMIOGC);
+        rc = PDMDevHlpMMHyperMapMMIO2(pDevIns, 2, 0, 8192, "PCNetShMem", &pGCMapping);
         if (VBOX_FAILURE(rc))
             return PDMDevHlpVMSetError(pDevIns, rc, RT_SRC_POS,
                                        N_("Failed to map 8192 bytes of memory for the PCNet device into the hyper memory"));
+        pData->pSharedMMIOGC = pGCMapping;
         pcnetInitSharedMemory(pData);
         rc = PDMDevHlpPCIIORegionRegister(pDevIns, 2, PCNET_GUEST_SHARED_MEMORY_SIZE,
Index: /trunk/src/VBox/Devices/PC/DevACPI.cpp
===================================================================
--- /trunk/src/VBox/Devices/PC/DevACPI.cpp	(revision 9211)
+++ /trunk/src/VBox/Devices/PC/DevACPI.cpp	(revision 9212)
@@ -162,5 +162,5 @@
     int64_t             pm_timer_initial;
     R3R0PTRTYPE(PTMTIMER) tsHC;
-    GCPTRTYPE(PTMTIMER)   tsGC;
+    RCPTRTYPE(PTMTIMER)   tsGC;
 
     uint32_t            gpe0_en;
Index: /trunk/src/VBox/Devices/PC/DevPIC.cpp
===================================================================
--- /trunk/src/VBox/Devices/PC/DevPIC.cpp	(revision 9211)
+++ /trunk/src/VBox/Devices/PC/DevPIC.cpp	(revision 9212)
@@ -119,5 +119,5 @@
     R3R0PTRTYPE(PPDMDEVINS) pDevInsHC;
     /** Pointer to the device instance, GCPtr. */
-    GCPTRTYPE(PPDMDEVINS)   pDevInsGC;
+    RCPTRTYPE(PPDMDEVINS)   pDevInsGC;
 #if HC_ARCH_BITS == 64 && GC_ARCH_BITS != 64
     RTGCPTR                 Alignment0;
@@ -139,5 +139,5 @@
     PCPDMPICHLPGC           pPicHlpGC;
     /** Pointer to the device instance - GC Ptr. */
-    GCPTRTYPE(PPDMDEVINS)   pDevInsGC;
+    RCPTRTYPE(PPDMDEVINS)   pDevInsGC;
     /** Pointer to the device instance - GC Ptr. */
     R3R0PTRTYPE(PPDMDEVINS) pDevInsHC;
@@ -455,5 +455,5 @@
 {
     R3R0PTRTYPE(PPDMDEVINS) pDevInsHC = s->pDevInsHC;
-    GCPTRTYPE(PPDMDEVINS) pDevInsGC = s->pDevInsGC;
+    RCPTRTYPE(PPDMDEVINS) pDevInsGC = s->pDevInsGC;
     int tmp, tmp2;
 
Index: /trunk/src/VBox/Devices/PC/DevPit-i8254.cpp
===================================================================
--- /trunk/src/VBox/Devices/PC/DevPit-i8254.cpp	(revision 9211)
+++ /trunk/src/VBox/Devices/PC/DevPit-i8254.cpp	(revision 9212)
@@ -87,5 +87,5 @@
     R3R0PTRTYPE(PTMTIMER)           pTimerHC;
     /** Pointer to the instance data - GCPtr. */
-    GCPTRTYPE(struct PITState *)    pPitGC;
+    RCPTRTYPE(struct PITState *)    pPitGC;
     /** The timer - HCPtr. */
     PTMTIMERGC                      pTimerGC;
Index: /trunk/src/VBox/Devices/PC/DevRTC.cpp
===================================================================
--- /trunk/src/VBox/Devices/PC/DevRTC.cpp	(revision 9211)
+++ /trunk/src/VBox/Devices/PC/DevRTC.cpp	(revision 9212)
@@ -125,5 +125,5 @@
     int32_t irq;
     /* periodic timer */
-    GCPTRTYPE(PTMTIMER)   pPeriodicTimerGC;
+    RCPTRTYPE(PTMTIMER)   pPeriodicTimerGC;
     R3R0PTRTYPE(PTMTIMER) pPeriodicTimerHC;
     int64_t next_periodic_time;
@@ -131,6 +131,6 @@
     int64_t next_second_time;
     R3R0PTRTYPE(PTMTIMER) pSecondTimerHC;
-    GCPTRTYPE(PTMTIMER)   pSecondTimerGC;
-    GCPTRTYPE(PTMTIMER)   pSecondTimer2GC;
+    RCPTRTYPE(PTMTIMER)   pSecondTimerGC;
+    RCPTRTYPE(PTMTIMER)   pSecondTimer2GC;
     R3R0PTRTYPE(PTMTIMER) pSecondTimer2HC;
     /** Pointer to the device instance - HC Ptr. */
Index: /trunk/src/VBox/Devices/Parallel/DevParallel.cpp
===================================================================
--- /trunk/src/VBox/Devices/Parallel/DevParallel.cpp	(revision 9211)
+++ /trunk/src/VBox/Devices/Parallel/DevParallel.cpp	(revision 9212)
@@ -95,5 +95,5 @@
     R3R0PTRTYPE(PPDMDEVINS)             pDevInsHC;
     /** Pointer to the device instance. */
-    GCPTRTYPE(PPDMDEVINS)               pDevInsGC;
+    RCPTRTYPE(PPDMDEVINS)               pDevInsGC;
 #if HC_ARCH_BITS == 64 && GC_ARCH_BITS != 64
     RTGCPTR                             Alignment0;
Index: /trunk/src/VBox/Devices/Serial/DevSerial.cpp
===================================================================
--- /trunk/src/VBox/Devices/Serial/DevSerial.cpp	(revision 9211)
+++ /trunk/src/VBox/Devices/Serial/DevSerial.cpp	(revision 9212)
@@ -123,5 +123,5 @@
     R3PTRTYPE(PPDMDEVINS)           pDevInsHC;
     /** Pointer to the device instance. */
-    GCPTRTYPE(PPDMDEVINS)           pDevInsGC;
+    RCPTRTYPE(PPDMDEVINS)           pDevInsGC;
 #if HC_ARCH_BITS == 64 && GC_ARCH_BITS != 64
     RTGCPTR                         Alignment0;
Index: /trunk/src/VBox/Devices/Storage/DevATA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/DevATA.cpp	(revision 9211)
+++ /trunk/src/VBox/Devices/Storage/DevATA.cpp	(revision 9212)
@@ -177,5 +177,5 @@
     R3R0PTRTYPE(uint8_t *) pbIOBufferHC;
     /** Pointer to the I/O buffer. */
-    GCPTRTYPE(uint8_t *) pbIOBufferGC;
+    RCPTRTYPE(uint8_t *) pbIOBufferGC;
 #if HC_ARCH_BITS == 64 && GC_ARCH_BITS != 64
     RTGCPTR Aligmnent0; /**< Align the statistics at an 8-byte boundrary. */
@@ -245,7 +245,7 @@
     R3R0PTRTYPE(struct ATACONTROLLER *) pControllerHC;
     /** Pointer to device instance. */
-    GCPTRTYPE(PPDMDEVINS)               pDevInsGC;
+    RCPTRTYPE(PPDMDEVINS)               pDevInsGC;
     /** Pointer to controller instance. */
-    GCPTRTYPE(struct ATACONTROLLER *)   pControllerGC;
+    RCPTRTYPE(struct ATACONTROLLER *)   pControllerGC;
 } ATADevState;
 
@@ -340,5 +340,5 @@
     R3R0PTRTYPE(PPDMDEVINS)         pDevInsHC;
     /** Pointer to device instance. */
-    GCPTRTYPE(PPDMDEVINS)           pDevInsGC;
+    RCPTRTYPE(PPDMDEVINS)           pDevInsGC;
 
     /** Set when the destroying the device instance and the thread must exit. */
@@ -416,6 +416,6 @@
 PDMBOTHCBDECL(int) ataIOPortWrite1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
 PDMBOTHCBDECL(int) ataIOPortRead1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *u32, unsigned cb);
-PDMBOTHCBDECL(int) ataIOPortWriteStr1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, RTGCPTR *pGCPtrSrc, unsigned *pcTransfer, unsigned cb);
-PDMBOTHCBDECL(int) ataIOPortReadStr1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, RTGCPTR *pGCPtrDst, unsigned *pcTransfer, unsigned cb);
+PDMBOTHCBDECL(int) ataIOPortWriteStr1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, RTGCPTR *pGCPtrSrc, PRTGCUINTREG pcTransfer, unsigned cb);
+PDMBOTHCBDECL(int) ataIOPortReadStr1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, RTGCPTR *pGCPtrDst, PRTGCUINTREG pcTransfer, unsigned cb);
 PDMBOTHCBDECL(int) ataIOPortWrite2(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t u32, unsigned cb);
 PDMBOTHCBDECL(int) ataIOPortRead2(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, uint32_t *u32, unsigned cb);
@@ -4993,5 +4993,5 @@
  * @see FNIOMIOPORTINSTRING for details.
  */
-PDMBOTHCBDECL(int) ataIOPortReadStr1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, RTGCPTR *pGCPtrDst, unsigned *pcTransfer, unsigned cb)
+PDMBOTHCBDECL(int) ataIOPortReadStr1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, RTGCPTR *pGCPtrDst, PRTGCUINTREG pcTransfer, unsigned cb)
 {
     uint32_t       i = (uint32_t)(uintptr_t)pvUser;
@@ -5050,5 +5050,5 @@
  * @see FNIOMIOPORTOUTSTRING for details.
  */
-PDMBOTHCBDECL(int) ataIOPortWriteStr1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, RTGCPTR *pGCPtrSrc, unsigned *pcTransfer, unsigned cb)
+PDMBOTHCBDECL(int) ataIOPortWriteStr1(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT Port, RTGCPTR *pGCPtrSrc, PRTGCUINTREG pcTransfer, unsigned cb)
 {
     uint32_t       i = (uint32_t)(uintptr_t)pvUser;
Index: /trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c	(revision 9211)
+++ /trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c	(revision 9212)
@@ -2990,6 +2990,6 @@
 static void supdrvIdtWrite(volatile void *pvIdtEntry, const SUPDRVIDTE *pNewIDTEntry)
 {
-    RTUINTREG   uCR0;
-    RTUINTREG   uFlags;
+    RTR0UINTREG   uCR0;
+    RTR0UINTREG   uFlags;
 
     /*
@@ -3006,8 +3006,8 @@
     /* Save & Clear interrupt flag; Save & clear WP. */
     uFlags = ASMGetFlags();
-    ASMSetFlags(uFlags & ~(RTUINTREG)(1 << 9)); /*X86_EFL_IF*/
+    ASMSetFlags(uFlags & ~(RTR0UINTREG)(1 << 9)); /*X86_EFL_IF*/
     Assert(!(ASMGetFlags() & (1 << 9)));
     uCR0 = ASMGetCR0();
-    ASMSetCR0(uCR0 & ~(RTUINTREG)(1 << 16));    /*X86_CR0_WP*/
+    ASMSetCR0(uCR0 & ~(RTR0UINTREG)(1 << 16));    /*X86_CR0_WP*/
 
     /* Update IDT Entry */
@@ -3623,10 +3623,10 @@
     SUPPAGINGMODE enmMode;
 
-    RTUINTREG cr0 = ASMGetCR0();
+    RTR0UINTREG cr0 = ASMGetCR0();
     if ((cr0 & (X86_CR0_PG | X86_CR0_PE)) != (X86_CR0_PG | X86_CR0_PE))
         enmMode = SUPPAGINGMODE_INVALID;
     else
     {
-        RTUINTREG cr4 = ASMGetCR4();
+        RTR0UINTREG cr4 = ASMGetCR4();
         uint32_t fNXEPlusLMA = 0;
         if (cr4 & X86_CR4_PAE)
Index: /trunk/src/VBox/Runtime/common/misc/sanity.h
===================================================================
--- /trunk/src/VBox/Runtime/common/misc/sanity.h	(revision 9211)
+++ /trunk/src/VBox/Runtime/common/misc/sanity.h	(revision 9212)
@@ -46,11 +46,11 @@
 # error "defined(IN_RING0) && ARCH_BITS != R0_ARCH_BITS"
 #endif
-#if defined(IN_GC) && ARCH_BITS != GC_ARCH_BITS
-# error "defined(IN_GC) && ARCH_BITS != GC_ARCH_BITS"
+#if defined(IN_GC) && ARCH_BITS != 32
+# error "defined(IN_GC) && ARCH_BITS != 32"
 #endif
 #if (defined(IN_RING0) || defined(IN_RING3)) && HC_ARCH_BITS != ARCH_BITS
 # error "(defined(IN_RING0) || defined(IN_RING3)) && HC_ARCH_BITS != ARCH_BITS"
 #endif
-#if defined(IN_GC) && GC_ARCH_BITS != ARCH_BITS
+#if defined(IN_GC) && GC_ARCH_BITS != 64 && GC_ARCH_BITS != ARCH_BITS
 # error "defined(IN_GC) && GC_ARCH_BITS != ARCH_BITS"
 #endif
@@ -124,6 +124,6 @@
 #if GC_ARCH_BITS == 64
 
-AssertCompileSize(RTGCINT, 4);
-AssertCompileSize(RTGCUINT, 4);
+AssertCompileSize(RTGCINT, 8);
+AssertCompileSize(RTGCUINT, 8);
 AssertCompileSize(RTGCINTPTR, 8);
 AssertCompileSize(RTGCUINTPTR, 8);
@@ -133,5 +133,6 @@
 # ifdef IN_GC
 /*AssertCompileSize(RTCCINTREG, 8);*/
-AssertCompileSize(RTCCUINTREG, 8);
+/* Hack alert: there is no such thing as a GC context when GC_ARCH_BITS == 64; it's still 32 bits */
+AssertCompileSize(RTCCUINTREG, 4);
 # endif
 
Index: /trunk/src/VBox/Runtime/common/string/strformatrt.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/string/strformatrt.cpp	(revision 9211)
+++ /trunk/src/VBox/Runtime/common/string/strformatrt.cpp	(revision 9212)
@@ -54,5 +54,5 @@
  *      - \%RTproc          - Takes a #RTPROCESS value.
  *      - \%RTptr           - Takes a #RTINTPTR or #RTUINTPTR value (but not void *).
- *      - \%RTreg           - Takes a #RTUINTREG value.
+ *      - \%RTreg           - Takes a #RTCCUINTREG value.
  *      - \%RTsel           - Takes a #RTSEL value.
  *      - \%RTsem           - Takes a #RTSEMEVENT, #RTSEMEVENTMULTI, #RTSEMMUTEX, #RTSEMFASTMUTEX, or #RTSEMRW value.
@@ -245,5 +245,5 @@
                     { STRMEM("Tproc"),   sizeof(RTPROCESS),      16, RTSF_INTW,  0 },
                     { STRMEM("Tptr"),    sizeof(RTUINTPTR),      16, RTSF_INTW,  0 },
-                    { STRMEM("Treg"),    sizeof(RTUINTREG),      16, RTSF_INTW,  0 },
+                    { STRMEM("Treg"),    sizeof(RTCCUINTREG),    16, RTSF_INTW,  0 },
                     { STRMEM("Tsel"),    sizeof(RTSEL),          16, RTSF_INTW,  0 },
                     { STRMEM("Tsem"),    sizeof(RTSEMEVENT),     16, RTSF_INTW,  0 },
Index: /trunk/src/VBox/Runtime/testcase/tstStrFormat.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstStrFormat.cpp	(revision 9211)
+++ /trunk/src/VBox/Runtime/testcase/tstStrFormat.cpp	(revision 9212)
@@ -294,16 +294,16 @@
     }
 
-    if (sizeof(RTUINTREG) == 8)
-    {
-        CHECK42("%RTreg", (RTUINTREG)0, "0000000000000000");
-        CHECK42("%RTreg", ~(RTUINTREG)0, "ffffffffffffffff");
-        CHECK42("%RTreg", (RTUINTREG)0x84342134, "0000000084342134");
-        CHECK42("%RTreg", (RTUINTREG)0x23484342134ULL, "0000023484342134");
+    if (sizeof(RTCCUINTREG) == 8)
+    {
+        CHECK42("%RTreg", (RTCCUINTREG)0, "0000000000000000");
+        CHECK42("%RTreg", ~(RTCCUINTREG)0, "ffffffffffffffff");
+        CHECK42("%RTreg", (RTCCUINTREG)0x84342134, "0000000084342134");
+        CHECK42("%RTreg", (RTCCUINTREG)0x23484342134ULL, "0000023484342134");
     }
     else
     {
-        CHECK42("%RTreg", (RTUINTREG)0, "00000000");
-        CHECK42("%RTreg", ~(RTUINTREG)0, "ffffffff");
-        CHECK42("%RTreg", (RTUINTREG)0x84342134, "84342134");
+        CHECK42("%RTreg", (RTCCUINTREG)0, "00000000");
+        CHECK42("%RTreg", ~(RTCCUINTREG)0, "ffffffff");
+        CHECK42("%RTreg", (RTCCUINTREG)0x84342134, "84342134");
     }
 
Index: /trunk/src/VBox/VMM/CPUM.cpp
===================================================================
--- /trunk/src/VBox/VMM/CPUM.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/CPUM.cpp	(revision 9212)
@@ -460,5 +460,5 @@
  * @param   ppCtx       Receives the CPUMCTX GC pointer when successful.
  */
-CPUMR3DECL(int) CPUMR3QueryGuestCtxGCPtr(PVM pVM, GCPTRTYPE(PCPUMCTX) *ppCtx)
+CPUMR3DECL(int) CPUMR3QueryGuestCtxGCPtr(PVM pVM, RCPTRTYPE(PCPUMCTX) *ppCtx)
 {
     LogFlow(("CPUMR3QueryGuestCtxGCPtr\n"));
Index: /trunk/src/VBox/VMM/CPUMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/CPUMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/CPUMInternal.h	(revision 9212)
@@ -262,5 +262,5 @@
     RTUINT          offVM;
     /** Pointer to CPU structure in GC. */
-    GCPTRTYPE(struct CPUM *) pCPUMGC;
+    RCPTRTYPE(struct CPUM *) pCPUMGC;
     /** Pointer to CPU structure in HC. */
     R3R0PTRTYPE(struct CPUM *) pCPUMHC;
@@ -293,5 +293,5 @@
     R0PTRTYPE(PCPUMCTXCORE) pHyperCoreR0;
     /** Pointer to the current hypervisor core context - GCPtr. */
-    GCPTRTYPE(PCPUMCTXCORE) pHyperCoreGC;
+    RCPTRTYPE(PCPUMCTXCORE) pHyperCoreGC;
 
     /** Use flags.
Index: /trunk/src/VBox/VMM/CPUMInternal.mac
===================================================================
--- /trunk/src/VBox/VMM/CPUMInternal.mac	(revision 9211)
+++ /trunk/src/VBox/VMM/CPUMInternal.mac	(revision 9212)
@@ -50,7 +50,7 @@
 
 struc CPUM
-    .offVM          resd    1
-    .pCPUMGC        RTGCPTR_RES  1          ; Guest Context pointer
-    .pCPUMHC        RTHCPTR_RES  1          ; Host Context pointer
+    .offVM          resd           1
+    .pCPUMGC        RTGCPTR32_RES  1          ; Guest Context pointer
+    .pCPUMHC        RTHCPTR_RES    1          ; Host Context pointer
 
 
@@ -404,7 +404,7 @@
     alignb 32
     ; hypervisor core context.
-    .pHyperCoreR3         RTR3PTR_RES 1
-    .pHyperCoreR0         RTR0PTR_RES 1
-    .pHyperCoreGC         RTGCPTR_RES 1
+    .pHyperCoreR3         RTR3PTR_RES   1
+    .pHyperCoreR0         RTR0PTR_RES   1
+    .pHyperCoreGC         RTGCPTR32_RES 1
     ;...
     .fUseFlags            resd    1
Index: /trunk/src/VBox/VMM/EM.cpp
===================================================================
--- /trunk/src/VBox/VMM/EM.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/EM.cpp	(revision 9212)
@@ -2043,5 +2043,5 @@
             {
                 uint8_t         u8Interrupt;
-                uint32_t        uErrorCode;
+                RTGCUINT        uErrorCode;
                 TRPMERRORCODE   enmError = TRPM_TRAP_NO_ERRORCODE;
 
Index: /trunk/src/VBox/VMM/EMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/EMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/EMInternal.h	(revision 9212)
@@ -285,4 +285,7 @@
     R3R0PTRTYPE(PCPUMCTX)     pCtx;
 
+#if GC_ARCH_BITS == 64
+    RTGCPTR                   aPadding1;
+#endif
 
     union
@@ -333,5 +336,5 @@
     R3R0PTRTYPE(PEMSTATS)   pStatsHC;
     /** More statistics (GC). */
-    GCPTRTYPE(PEMSTATS)     pStatsGC;
+    RCPTRTYPE(PEMSTATS)     pStatsGC;
 #if HC_ARCH_BITS != GC_ARCH_BITS && GC_ARCH_BITS == 32
     RTGCPTR                 padding0;
Index: /trunk/src/VBox/VMM/IOM.cpp
===================================================================
--- /trunk/src/VBox/VMM/IOM.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/IOM.cpp	(revision 9212)
@@ -618,6 +618,6 @@
  */
 IOMR3DECL(int)  IOMR3IOPortRegisterGC(PVM pVM, PPDMDEVINS pDevIns, RTIOPORT PortStart, RTUINT cPorts, RTGCPTR pvUser,
-                                      GCPTRTYPE(PFNIOMIOPORTOUT) pfnOutCallback, GCPTRTYPE(PFNIOMIOPORTIN) pfnInCallback,
-                                      GCPTRTYPE(PFNIOMIOPORTOUTSTRING) pfnOutStrCallback, GCPTRTYPE(PFNIOMIOPORTINSTRING) pfnInStrCallback, const char *pszDesc)
+                                      RCPTRTYPE(PFNIOMIOPORTOUT) pfnOutCallback, RCPTRTYPE(PFNIOMIOPORTIN) pfnInCallback,
+                                      RCPTRTYPE(PFNIOMIOPORTOUTSTRING) pfnOutStrCallback, RCPTRTYPE(PFNIOMIOPORTINSTRING) pfnInStrCallback, const char *pszDesc)
 {
     LogFlow(("IOMR3IOPortRegisterGC: pDevIns=%p PortStart=%#x cPorts=%#x pvUser=%VGv pfnOutCallback=%VGv pfnInCallback=%VGv pfnOutStrCallback=%VGv  pfnInStrCallback=%VGv pszDesc=%s\n",
@@ -1493,6 +1493,6 @@
  */
 IOMR3DECL(int)  IOMR3MMIORegisterGC(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, RTUINT cbRange, RTGCPTR pvUser,
-                                    GCPTRTYPE(PFNIOMMMIOWRITE) pfnWriteCallback, GCPTRTYPE(PFNIOMMMIOREAD) pfnReadCallback,
-                                    GCPTRTYPE(PFNIOMMMIOFILL) pfnFillCallback)
+                                    RCPTRTYPE(PFNIOMMMIOWRITE) pfnWriteCallback, RCPTRTYPE(PFNIOMMMIOREAD) pfnReadCallback,
+                                    RCPTRTYPE(PFNIOMMMIOFILL) pfnFillCallback)
 {
     LogFlow(("IOMR3MMIORegisterGC: pDevIns=%p GCPhysStart=%VGp cbRange=%#x pvUser=%VGv pfnWriteCallback=%#x pfnReadCallback=%#x pfnFillCallback=%#x\n",
Index: /trunk/src/VBox/VMM/IOMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/IOMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/IOMInternal.h	(revision 9212)
@@ -78,13 +78,13 @@
 
     /** Pointer to user argument. */
-    RTGCPTR                     pvUserGC;
+    RCPTRTYPE(void *)           pvUserGC;
     /** Pointer to device instance. */
     PPDMDEVINSGC                pDevInsGC;
     /** Pointer to write callback function. */
-    GCPTRTYPE(PFNIOMMMIOWRITE)  pfnWriteCallbackGC;
+    RCPTRTYPE(PFNIOMMMIOWRITE)  pfnWriteCallbackGC;
     /** Pointer to read callback function. */
-    GCPTRTYPE(PFNIOMMMIOREAD)   pfnReadCallbackGC;
+    RCPTRTYPE(PFNIOMMMIOREAD)   pfnReadCallbackGC;
     /** Pointer to fill (memset) callback function. */
-    GCPTRTYPE(PFNIOMMMIOFILL)   pfnFillCallbackGC;
+    RCPTRTYPE(PFNIOMMMIOFILL)   pfnFillCallbackGC;
     RTGCPTR                     GCPtrAlignment; /**< Alignment padding */
 
@@ -219,15 +219,15 @@
     uint16_t                    cPorts;
     /** Pointer to user argument. */
-    RTGCPTR                     pvUser;
+    RCPTRTYPE(void *)           pvUser;
     /** Pointer to the associated device instance. */
-    GCPTRTYPE(PPDMDEVINS)       pDevIns;
+    RCPTRTYPE(PPDMDEVINS)       pDevIns;
     /** Pointer to OUT callback function. */
-    GCPTRTYPE(PFNIOMIOPORTOUT)  pfnOutCallback;
+    RCPTRTYPE(PFNIOMIOPORTOUT)  pfnOutCallback;
     /** Pointer to IN callback function. */
-    GCPTRTYPE(PFNIOMIOPORTIN)   pfnInCallback;
+    RCPTRTYPE(PFNIOMIOPORTIN)   pfnInCallback;
     /** Pointer to string OUT callback function. */
-    GCPTRTYPE(PFNIOMIOPORTOUTSTRING) pfnOutStrCallback;
+    RCPTRTYPE(PFNIOMIOPORTOUTSTRING) pfnOutStrCallback;
     /** Pointer to string IN callback function. */
-    GCPTRTYPE(PFNIOMIOPORTINSTRING) pfnInStrCallback;
+    RCPTRTYPE(PFNIOMIOPORTINSTRING) pfnInStrCallback;
 #if HC_ARCH_BITS == 64 && GC_ARCH_BITS == 32
     RTGCPTR                     GCPtrAlignment; /**< pszDesc is 8 byte aligned. */
@@ -333,5 +333,5 @@
 
     /** Pointer to the trees - GC ptr. */
-    GCPTRTYPE(PIOMTREES)            pTreesGC;
+    RCPTRTYPE(PIOMTREES)            pTreesGC;
     /** Pointer to the trees - HC ptr. */
     R3R0PTRTYPE(PIOMTREES)          pTreesHC;
@@ -340,5 +340,5 @@
     R0PTRTYPE(PFNPGMR0PHYSHANDLER)  pfnMMIOHandlerR0;
     /** The GC address of IOMMMIOHandler. */
-    GCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnMMIOHandlerGC;
+    RCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnMMIOHandlerGC;
     RTGCPTR                         Alignment;
 
@@ -360,10 +360,10 @@
     R0PTRTYPE(PIOMMMIOSTATS)        pMMIOStatsLastR0;
 
-    GCPTRTYPE(PIOMIOPORTRANGEGC)    pRangeLastReadGC;
-    GCPTRTYPE(PIOMIOPORTRANGEGC)    pRangeLastWriteGC;
-    GCPTRTYPE(PIOMIOPORTSTATS)      pStatsLastReadGC;
-    GCPTRTYPE(PIOMIOPORTSTATS)      pStatsLastWriteGC;
-    GCPTRTYPE(PIOMMMIORANGE)        pMMIORangeLastGC;
-    GCPTRTYPE(PIOMMMIOSTATS)        pMMIOStatsLastGC;
+    RCPTRTYPE(PIOMIOPORTRANGEGC)    pRangeLastReadGC;
+    RCPTRTYPE(PIOMIOPORTRANGEGC)    pRangeLastWriteGC;
+    RCPTRTYPE(PIOMIOPORTSTATS)      pStatsLastReadGC;
+    RCPTRTYPE(PIOMIOPORTSTATS)      pStatsLastWriteGC;
+    RCPTRTYPE(PIOMMMIORANGE)        pMMIORangeLastGC;
+    RCPTRTYPE(PIOMMMIOSTATS)        pMMIOStatsLastGC;
     /** @} */
 
Index: /trunk/src/VBox/VMM/MMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/MMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/MMInternal.h	(revision 9212)
@@ -250,7 +250,7 @@
     R3R0PTRTYPE(uint8_t *)  pbHeapHC;
     /** The GC address of the heap. */
-    GCPTRTYPE(uint8_t *)    pbHeapGC;
+    RCPTRTYPE(uint8_t *)    pbHeapGC;
     /** The GC address of the VM. */
-    GCPTRTYPE(PVM)          pVMGC;
+    RCPTRTYPE(PVM)          pVMGC;
     /** The amount of free memory in the heap. */
     uint32_t                cbFree;
@@ -675,5 +675,5 @@
 
     /** The hypervisor heap (GC Ptr). */
-    GCPTRTYPE(PMMHYPERHEAP)     pHyperHeapGC;
+    RCPTRTYPE(PMMHYPERHEAP)     pHyperHeapGC;
     /** The hypervisor heap (HC Ptr). */
     R3R0PTRTYPE(PMMHYPERHEAP)   pHyperHeapHC;
Index: /trunk/src/VBox/VMM/PATM/CSAM.cpp
===================================================================
--- /trunk/src/VBox/VMM/PATM/CSAM.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/PATM/CSAM.cpp	(revision 9212)
@@ -80,5 +80,5 @@
 static int          csamReinit(PVM pVM);
 static void         csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTGCPTR pInstr, uint32_t opsize, bool fScanned);
-static int          csamAnalyseCodeStream(PVM pVM, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, bool fCode32,
+static int          csamAnalyseCodeStream(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, bool fCode32,
                                           PFN_CSAMR3ANALYSE pfnCSAMR3Analyse, void *pUserData, PCSAMP2GLOOKUPREC pCacheRec);
 
@@ -555,5 +555,5 @@
  *
  */
-static R3PTRTYPE(void *) CSAMGCVirtToHCVirt(PVM pVM, PCSAMP2GLOOKUPREC pCacheRec, GCPTRTYPE(uint8_t *) pGCPtr)
+static R3PTRTYPE(void *) CSAMGCVirtToHCVirt(PVM pVM, PCSAMP2GLOOKUPREC pCacheRec, RCPTRTYPE(uint8_t *) pGCPtr)
 {
     int rc;
@@ -668,5 +668,5 @@
  *
  */
-static int CSAMR3AnalyseCallback(PVM pVM, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC,
+static int CSAMR3AnalyseCallback(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC,
                                  PCSAMP2GLOOKUPREC pCacheRec, void *pUserData)
 {
@@ -864,5 +864,5 @@
  *
  */
-static int csamAnalyseCallCodeStream(PVM pVM, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, bool fCode32,
+static int csamAnalyseCallCodeStream(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, bool fCode32,
                                      PFN_CSAMR3ANALYSE pfnCSAMR3Analyse, void *pUserData, PCSAMP2GLOOKUPREC pCacheRec)
 {
@@ -941,5 +941,5 @@
                 STAM_COUNTER_ADD(&pVM->csam.s.StatNrBytesRead, opsize);
 
-                GCPTRTYPE(uint8_t *) addr = 0;
+                RCPTRTYPE(uint8_t *) addr = 0;
                 PCSAMPAGE pJmpPage = NULL;
 
@@ -1068,5 +1068,5 @@
  *
  */
-static int csamAnalyseCodeStream(PVM pVM, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, bool fCode32,
+static int csamAnalyseCodeStream(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, bool fCode32,
                                    PFN_CSAMR3ANALYSE pfnCSAMR3Analyse, void *pUserData, PCSAMP2GLOOKUPREC pCacheRec)
 {
@@ -1154,5 +1154,5 @@
         csamMarkCode(pVM, pPage, pCurInstrGC, opsize, true);
 
-        GCPTRTYPE(uint8_t *) addr = 0;
+        RCPTRTYPE(uint8_t *) addr = 0;
         PCSAMPAGE pJmpPage = NULL;
 
@@ -1911,5 +1911,5 @@
  * @param   cbBuf           How much it's reading/writing.
  */
-static DECLCALLBACK(void) CSAMDelayedWriteHandler(PVM pVM, RTGCPTR GCPtr, size_t cbBuf)
+static DECLCALLBACK(void) CSAMDelayedWriteHandler(PVM pVM, RTGCPTR32 GCPtr, size_t cbBuf)
 {
     int rc = PATMR3PatchWrite(pVM, GCPtr, cbBuf);
@@ -1951,7 +1951,7 @@
          */
         Log(("CSAMCodePageWriteHandler: delayed write!\n"));
-        AssertCompileSize(RTGCPTR, 4);
+        AssertCompileSize(RTGCPTR32, 4);
         rc = VMR3ReqCallEx(pVM, NULL, 0, VMREQFLAGS_NO_WAIT | VMREQFLAGS_VOID,
-                           (PFNRT)CSAMDelayedWriteHandler, 3, pVM, GCPtr, cbBuf);
+                           (PFNRT)CSAMDelayedWriteHandler, 3, pVM, (RTGCPTR32)GCPtr, cbBuf);
     }
     AssertRC(rc);
Index: /trunk/src/VBox/VMM/PATM/CSAMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/PATM/CSAMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/PATM/CSAMInternal.h	(revision 9212)
@@ -68,5 +68,5 @@
 typedef struct
 {
-  RTGCPTR           pInstrAfterRetGC[CSAM_MAX_CALLEXIT_RET];
+  RTGCPTR32         pInstrAfterRetGC[CSAM_MAX_CALLEXIT_RET];
   uint32_t          cInstrAfterRet;
 } CSAMCALLEXITREC, *PCSAMCALLEXITREC;
@@ -76,5 +76,5 @@
     R3PTRTYPE(uint8_t *) pPageLocStartHC;
     R3PTRTYPE(uint8_t *) pPageLocEndHC;
-    GCPTRTYPE(uint8_t *) pGuestLoc;
+    RCPTRTYPE(uint8_t *) pGuestLoc;
     uint32_t             depth;  //call/jump depth
 
@@ -84,5 +84,5 @@
 typedef struct
 {
-    RTGCPTR         pPageGC;
+    RTGCPTR32       pPageGC;
     RTGCPHYS        GCPhys;
     uint64_t        fFlags;
@@ -103,5 +103,5 @@
 {
     // GC Patch pointer
-    RTGCPTR         pInstrGC;
+    RTGCPTR32       pInstrGC;
 
     // Disassembly state for original instruction
@@ -155,12 +155,12 @@
      * switch back to ring 3 each time we encounter them in GC.
      */
-    RTGCPTR             aDangerousInstr[CSAM_MAX_DANGR_INSTR];
+    RTGCPTR32           aDangerousInstr[CSAM_MAX_DANGR_INSTR];
     uint32_t            cDangerousInstr;
     uint32_t            iDangerousInstr;
 
-    GCPTRTYPE(RTGCPTR *)  pPDBitmapGC;
-    GCPTRTYPE(RTHCPTR *)  pPDHCBitmapGC;
-    R3PTRTYPE(uint8_t **) pPDBitmapHC;
-    R3PTRTYPE(RTGCPTR  *) pPDGCBitmapHC;
+    RCPTRTYPE(RTGCPTR32 *)  pPDBitmapGC;
+    RCPTRTYPE(RTHCPTR *)    pPDHCBitmapGC;
+    R3PTRTYPE(uint8_t **)   pPDBitmapHC;
+    R3PTRTYPE(RTGCPTR32  *) pPDGCBitmapHC;
 
     /* Temporary storage during load/save state */
@@ -174,13 +174,13 @@
     /* To keep track of dirty pages */
     uint32_t            cDirtyPages;
-    RTGCPTR             pvDirtyBasePage[CSAM_MAX_DIRTY_PAGES];
-    RTGCPTR             pvDirtyFaultPage[CSAM_MAX_DIRTY_PAGES];
+    RTGCPTR32           pvDirtyBasePage[CSAM_MAX_DIRTY_PAGES];
+    RTGCPTR32           pvDirtyFaultPage[CSAM_MAX_DIRTY_PAGES];
 
     /* To keep track of possible code pages */
     uint32_t            cPossibleCodePages;
-    RTGCPTR             pvPossibleCodePage[CSAM_MAX_CODE_PAGES_FLUSH];
+    RTGCPTR32           pvPossibleCodePage[CSAM_MAX_CODE_PAGES_FLUSH];
 
     /* call addresses reported by the recompiler */
-    RTGCPTR             pvCallInstruction[16];
+    RTGCPTR32           pvCallInstruction[16];
     RTUINT              iCallInstruction;
 
@@ -243,5 +243,5 @@
  *
  */
-typedef int (VBOXCALL *PFN_CSAMR3ANALYSE)(PVM pVM, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, PCSAMP2GLOOKUPREC pCacheRec, void *pUserData);
+typedef int (VBOXCALL *PFN_CSAMR3ANALYSE)(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, PCSAMP2GLOOKUPREC pCacheRec, void *pUserData);
 
 /**
Index: /trunk/src/VBox/VMM/PATM/PATM.cpp
===================================================================
--- /trunk/src/VBox/VMM/PATM/PATM.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/PATM/PATM.cpp	(revision 9212)
@@ -126,5 +126,5 @@
 
     /* PATM stack page for call instruction execution. (2 parts: one for our private stack and one to store the original return address */
-    pVM->patm.s.pGCStackHC  = (RTGCPTR *)(pVM->patm.s.pPatchMemHC + PATCH_MEMORY_SIZE + PAGE_SIZE);
+    pVM->patm.s.pGCStackHC  = (RTGCPTR32 *)(pVM->patm.s.pPatchMemHC + PATCH_MEMORY_SIZE + PAGE_SIZE);
     pVM->patm.s.pGCStackGC  = MMHyperHC2GC(pVM, pVM->patm.s.pGCStackHC);
 
@@ -978,5 +978,5 @@
  *
  */
-R3PTRTYPE(uint8_t *) PATMGCVirtToHCVirt(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pGCPtr)
+R3PTRTYPE(uint8_t *) PATMGCVirtToHCVirt(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pGCPtr)
 {
     int rc;
@@ -1029,6 +1029,6 @@
     while (true)
     {
-        GCPTRTYPE(uint8_t *) pInstrGC;
-        GCPTRTYPE(uint8_t *) pBranchTargetGC = 0;
+        RCPTRTYPE(uint8_t *) pInstrGC;
+        RCPTRTYPE(uint8_t *) pBranchTargetGC = 0;
 
         pRec = (PJUMPREC)RTAvlPVRemoveBestFit(&pPatch->JumpTree, 0, true);
@@ -1282,5 +1282,5 @@
  *
  */
-static int patmAnalyseBlockCallback(PVM pVM, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData)
+static int patmAnalyseBlockCallback(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData)
 {
     PPATCHINFO pPatch = (PPATCHINFO)pUserData;
@@ -1441,5 +1441,5 @@
  *
  */
-static int patmAnalyseFunctionCallback(PVM pVM, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData)
+static int patmAnalyseFunctionCallback(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData)
 {
     PPATCHINFO pPatch = (PPATCHINFO)pUserData;
@@ -1546,5 +1546,5 @@
  *
  */
-static int patmRecompileCallback(PVM pVM, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData)
+static int patmRecompileCallback(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData)
 {
     PPATCHINFO pPatch = (PPATCHINFO)pUserData;
@@ -1606,5 +1606,5 @@
         && (OP_PARM_VTYPE(pCpu->pCurInstr->param1) == OP_PARM_J))
     {
-        GCPTRTYPE(uint8_t *) pTargetGC = PATMResolveBranch(pCpu, pCurInstrGC);
+        RCPTRTYPE(uint8_t *) pTargetGC = PATMResolveBranch(pCpu, pCurInstrGC);
         if (pTargetGC == 0)
         {
@@ -1708,5 +1708,5 @@
             unsigned    opsize;
             int         disret;
-            GCPTRTYPE(uint8_t *) pNextInstrGC, pReturnInstrGC;
+            RCPTRTYPE(uint8_t *) pNextInstrGC, pReturnInstrGC;
             R3PTRTYPE(uint8_t *) pNextInstrHC;
 
@@ -2023,5 +2023,5 @@
  *
  */
-int patmr3DisasmCallback(PVM pVM, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData)
+int patmr3DisasmCallback(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData)
 {
     PPATCHINFO pPatch = (PPATCHINFO)pUserData;
@@ -2081,5 +2081,5 @@
  *
  */
-int patmr3DisasmCode(PVM pVM, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, PFN_PATMR3ANALYSE pfnPATMR3Disasm, void *pUserData)
+int patmr3DisasmCode(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, PFN_PATMR3ANALYSE pfnPATMR3Disasm, void *pUserData)
 {
     DISCPUSTATE cpu;
@@ -2208,5 +2208,5 @@
  *
  */
-int patmr3DisasmCodeStream(PVM pVM, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, PFN_PATMR3ANALYSE pfnPATMR3Disasm, void *pUserData)
+int patmr3DisasmCodeStream(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, PFN_PATMR3ANALYSE pfnPATMR3Disasm, void *pUserData)
 {
     PPATCHINFO pPatch = (PPATCHINFO)pUserData;
@@ -2252,5 +2252,5 @@
  *
  */
-static int patmRecompileCodeStream(PVM pVM, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, PFN_PATMR3ANALYSE pfnPATMR3Recompile, void *pUserData)
+static int patmRecompileCodeStream(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, PFN_PATMR3ANALYSE pfnPATMR3Recompile, void *pUserData)
 {
     DISCPUSTATE cpu;
@@ -2370,5 +2370,5 @@
            )
         {
-            GCPTRTYPE(uint8_t *) addr = PATMResolveBranch(&cpu, pCurInstrGC);
+            RCPTRTYPE(uint8_t *) addr = PATMResolveBranch(&cpu, pCurInstrGC);
             if (addr == 0)
             {
@@ -5625,5 +5625,5 @@
  * @param   pPatchGC    GC address in patch block
  */
-RTGCPTR patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pPatchGC)
+RTGCPTR patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pPatchGC)
 {
     Assert(pPatch->Patch2GuestAddrTree);
@@ -5644,5 +5644,5 @@
  *
  */
-RTGCPTR patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t*) pInstrGC)
+RTGCPTR patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC)
 {
     if (pPatch->Guest2PatchAddrTree)
@@ -5664,5 +5664,5 @@
  *
  */
-RTGCPTR patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t*) pInstrGC)
+RTGCPTR patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC)
 {
         PRECGUESTTOPATCH pGuestToPatchRec = (PRECGUESTTOPATCH)RTAvlGCPtrGetBestFit(&pPatch->Guest2PatchAddrTree, pInstrGC, false);
@@ -5680,5 +5680,5 @@
  *
  */
-PATMR3DECL(RTGCPTR) PATMR3GuestGCPtrToPatchGCPtr(PVM pVM, GCPTRTYPE(uint8_t*) pInstrGC)
+PATMR3DECL(RTGCPTR) PATMR3GuestGCPtrToPatchGCPtr(PVM pVM, RCPTRTYPE(uint8_t*) pInstrGC)
 {
     PPATMPATCHREC pPatchRec = (PPATMPATCHREC)RTAvloGCPtrGetBestFit(&pVM->patm.s.PatchLookupTreeHC->PatchTree, pInstrGC, false);
Index: /trunk/src/VBox/VMM/PATM/PATMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/PATM/PATMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/PATM/PATMInternal.h	(revision 9212)
@@ -136,6 +136,6 @@
     uint32_t        uType;
     R3PTRTYPE(uint8_t *) pRelocPos;
-    RTGCPTR         pSource;
-    RTGCPTR         pDest;
+    RTGCPTR32       pSource;
+    RTGCPTR32       pDest;
 } RELOCREC, *PRELOCREC;
 
@@ -144,5 +144,5 @@
     R3PTRTYPE(uint8_t *) pPatchLocStartHC;
     R3PTRTYPE(uint8_t *) pPatchLocEndHC;
-    GCPTRTYPE(uint8_t *) pGuestLoc;
+    RCPTRTYPE(uint8_t *) pGuestLoc;
     uint32_t             opsize;
 } P2GLOOKUPREC, *PP2GLOOKUPREC;
@@ -154,5 +154,5 @@
 
     R3PTRTYPE(uint8_t *) pJumpHC;
-    GCPTRTYPE(uint8_t *) pTargetGC;
+    RCPTRTYPE(uint8_t *) pTargetGC;
     uint32_t            offDispl;
     uint32_t            opcode;
@@ -176,5 +176,5 @@
     AVLU32NODECORE   Core;
 
-    RTGCPTR          pOrgInstrGC;
+    RTGCPTR32        pOrgInstrGC;
     PATM_LOOKUP_TYPE enmType;
     bool             fDirty;
@@ -213,8 +213,8 @@
 
     /** Last original guest instruction pointer; used for disassmebly log. */
-    RTGCPTR                     pLastDisasmInstrGC;
+    RTGCPTR32                   pLastDisasmInstrGC;
 
     /** Keeping track of multiple ret instructions. */
-    RTGCPTR                     pPatchRetInstrGC;
+    RTGCPTR32                 pPatchRetInstrGC;
     uint32_t                    uPatchRetParam1;
 } PATCHINFOTEMP, *PPATCHINFOTEMP;
@@ -226,5 +226,5 @@
     DISCPUMODE      uOpMode;
 
-    GCPTRTYPE(uint8_t *)  pPrivInstrGC;    //GC pointer of privileged instruction
+    RCPTRTYPE(uint8_t *)  pPrivInstrGC;    //GC pointer of privileged instruction
     R3PTRTYPE(uint8_t *)  pPrivInstrHC;    //HC pointer of privileged instruction
     uint8_t         aPrivInstr[MAX_INSTR_SIZE];
@@ -234,5 +234,5 @@
 
     /* Only valid for PATMFL_JUMP_CONFLICT patches */
-    RTGCPTR         pPatchJumpDestGC;
+    RTGCPTR32       pPatchJumpDestGC;
 
     RTGCUINTPTR     pPatchBlockOffset;
@@ -248,6 +248,6 @@
      * Lowest and highest patched GC instruction address. To optimize searches.
      */
-    RTGCPTR                   pInstrGCLowest;
-    RTGCPTR                   pInstrGCHighest;
+    RTGCPTR32                 pInstrGCLowest;
+    RTGCPTR32                 pInstrGCHighest;
 
     /* Tree of fixup records for the patch. */
@@ -320,6 +320,6 @@
     AVLOGCPTRNODECORE  Core;
     /** Region to monitor. */
-    RTGCPTR            pLowestAddrGC;
-    RTGCPTR            pHighestAddrGC;
+    RTGCPTR32          pLowestAddrGC;
+    RTGCPTR32          pHighestAddrGC;
     /** Number of patches for this page. */
     uint32_t           cCount;
@@ -363,5 +363,5 @@
     RTINT                   offVM;
 
-    GCPTRTYPE(uint8_t *)    pPatchMemGC;
+    RCPTRTYPE(uint8_t *)    pPatchMemGC;
     R3PTRTYPE(uint8_t *)    pPatchMemHC;
     uint32_t                cbPatchMem;
@@ -373,15 +373,15 @@
     /* GC PATM state pointers */
     R3PTRTYPE(PPATMGCSTATE) pGCStateHC;
-    GCPTRTYPE(PPATMGCSTATE) pGCStateGC;
+    RCPTRTYPE(PPATMGCSTATE) pGCStateGC;
 
     /** PATM stack page for call instruction execution. (2 parts: one for our private stack and one to store the original return address */
-    GCPTRTYPE(RTGCPTR *)    pGCStackGC;
-    R3PTRTYPE(RTGCPTR *)    pGCStackHC;
+    RCPTRTYPE(RTGCPTR32 *)    pGCStackGC;
+    R3PTRTYPE(RTGCPTR32 *)    pGCStackHC;
 
     /** GC pointer to CPUMCTX structure. */
-    GCPTRTYPE(PCPUMCTX)     pCPUMCtxGC;
+    RCPTRTYPE(PCPUMCTX)     pCPUMCtxGC;
 
     /* GC statistics pointers */
-    GCPTRTYPE(PSTAMRATIOU32) pStatsGC;
+    RCPTRTYPE(PSTAMRATIOU32) pStatsGC;
     R3PTRTYPE(PSTAMRATIOU32) pStatsHC;
 
@@ -398,19 +398,19 @@
      * Lowest and highest patched GC instruction addresses. To optimize searches.
      */
-    RTGCPTR                   pPatchedInstrGCLowest;
-    RTGCPTR                   pPatchedInstrGCHighest;
+    RTGCPTR32                 pPatchedInstrGCLowest;
+    RTGCPTR32                 pPatchedInstrGCHighest;
 
     /** Pointer to the patch tree for instructions replaced by 'int 3'. */
-    GCPTRTYPE(PPATMTREES)   PatchLookupTreeGC;
+    RCPTRTYPE(PPATMTREES)   PatchLookupTreeGC;
     R3PTRTYPE(PPATMTREES)   PatchLookupTreeHC;
 
     /** Global PATM lookup and call function (used by call patches). */
-    RTGCPTR                 pfnHelperCallGC;
+    RTGCPTR32               pfnHelperCallGC;
     /** Global PATM return function (used by ret patches). */
-    RTGCPTR                 pfnHelperRetGC;
+    RTGCPTR32               pfnHelperRetGC;
     /** Global PATM jump function (used by indirect jmp patches). */
-    RTGCPTR                 pfnHelperJumpGC;
+    RTGCPTR32               pfnHelperJumpGC;
     /** Global PATM return function (used by iret patches). */
-    RTGCPTR                 pfnHelperIretGC;
+    RTGCPTR32               pfnHelperIretGC;
 
     /** Fake patch record for global functions. */
@@ -418,12 +418,12 @@
 
     /** Pointer to original sysenter handler */
-    RTGCPTR                 pfnSysEnterGC;
+    RTGCPTR32               pfnSysEnterGC;
     /** Pointer to sysenter handler trampoline */
-    RTGCPTR                 pfnSysEnterPatchGC;
+    RTGCPTR32               pfnSysEnterPatchGC;
     /** Sysenter patch index (for stats only) */
     uint32_t                uSysEnterPatchIdx;
 
     // GC address of fault in monitored page (set by PATMGCMonitorPage, used by PATMR3HandleMonitoredPage)
-    RTGCPTR                 pvFaultMonitor;
+    RTGCPTR32               pvFaultMonitor;
 
     /* Temporary information for pending MMIO patch. Set in GC or R0 context. */
@@ -431,7 +431,7 @@
     {
         RTGCPHYS            GCPhys;
-        RTGCPTR             pCachedData;
+        RTGCPTR32           pCachedData;
 #if GC_ARCH_BITS == 32
-        RTGCPTR             Alignment0; /**< Align the structure size on a 8-byte boundrary. */
+        RTGCPTR32           Alignment0; /**< Align the structure size on a 8-byte boundrary. */
 #endif
     } mmio;
@@ -529,7 +529,7 @@
 
 #ifdef IN_RING3
-RTGCPTR patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pPatchGC);
-RTGCPTR patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t*) pInstrGC);
-RTGCPTR patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t*) pInstrGC);
+RTGCPTR patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pPatchGC);
+RTGCPTR patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC);
+RTGCPTR patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC);
 #endif
 
@@ -594,5 +594,5 @@
  *
  */
-typedef int (VBOXCALL *PFN_PATMR3ANALYSE)(PVM pVM, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData);
+typedef int (VBOXCALL *PFN_PATMR3ANALYSE)(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData);
 
 /**
@@ -620,5 +620,5 @@
  *
  */
-R3PTRTYPE(uint8_t *) PATMGCVirtToHCVirt(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pGCPtr);
+R3PTRTYPE(uint8_t *) PATMGCVirtToHCVirt(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pGCPtr);
 
 
@@ -820,7 +820,7 @@
 
 #ifdef DEBUG
-int patmr3DisasmCallback(PVM pVM, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData);
-int patmr3DisasmCodeStream(PVM pVM, GCPTRTYPE(uint8_t *) pInstrGC, GCPTRTYPE(uint8_t *) pCurInstrGC, PFN_PATMR3ANALYSE pfnPATMR3Analyse, void *pUserData);
-#endif
-
-#endif
+int patmr3DisasmCallback(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, void *pUserData);
+int patmr3DisasmCodeStream(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, PFN_PATMR3ANALYSE pfnPATMR3Analyse, void *pUserData);
+#endif
+
+#endif
Index: /trunk/src/VBox/VMM/PATM/PATMPatch.cpp
===================================================================
--- /trunk/src/VBox/VMM/PATM/PATMPatch.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/PATM/PATMPatch.cpp	(revision 9212)
@@ -128,5 +128,5 @@
 
 
-static uint32_t patmPatchGenCode(PVM pVM, PPATCHINFO pPatch, uint8_t *pPB, PPATCHASMRECORD pAsmRecord, GCPTRTYPE(uint8_t *) pReturnAddrGC, bool fGenJump,
+static uint32_t patmPatchGenCode(PVM pVM, PPATCHINFO pPatch, uint8_t *pPB, PPATCHASMRECORD pAsmRecord, RCPTRTYPE(uint8_t *) pReturnAddrGC, bool fGenJump,
                                  PPATMCALLINFO pCallInfo = 0)
 {
@@ -147,5 +147,5 @@
             if (*(uint32_t*)&pPB[j] == pAsmRecord->uReloc[i])
             {
-                GCPTRTYPE(uint32_t *) dest;
+                RCPTRTYPE(uint32_t *) dest;
 
 #ifdef VBOX_STRICT
@@ -415,5 +415,5 @@
 }
 
-int patmPatchGenDuplicate(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pCurInstrGC)
+int patmPatchGenDuplicate(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pCurInstrGC)
 {
     int rc = VINF_SUCCESS;
@@ -472,5 +472,5 @@
 
 
-int patmPatchGenPopf(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pReturnAddrGC, bool fSizeOverride, bool fGenJumpBack)
+int patmPatchGenPopf(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pReturnAddrGC, bool fSizeOverride, bool fGenJumpBack)
 {
     uint32_t        size;
@@ -527,5 +527,5 @@
 }
 
-int patmPatchGenLoop(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride)
+int patmPatchGenLoop(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride)
 {
     uint32_t size = 0;
@@ -572,5 +572,5 @@
 }
 
-int patmPatchGenRelJump(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride)
+int patmPatchGenRelJump(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride)
 {
     uint32_t offset = 0;
@@ -843,5 +843,5 @@
  *
  */
-int patmPatchGenRet(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pCurInstrGC)
+int patmPatchGenRet(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pCurInstrGC)
 {
     int size = 0, rc;
@@ -1555,5 +1555,5 @@
  * @param   fClearInhibitIRQs   Clear inhibit irq flag
  */
-int patmPatchGenJumpToGuest(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pReturnAddrGC, bool fClearInhibitIRQs)
+int patmPatchGenJumpToGuest(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pReturnAddrGC, bool fClearInhibitIRQs)
 {
     int rc = VINF_SUCCESS;
@@ -1583,5 +1583,5 @@
  * Relative jump from patch code to patch code (no fixup required)
  */
-int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, GCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord)
+int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord)
 {
     int32_t displ;
Index: /trunk/src/VBox/VMM/PATM/PATMPatch.h
===================================================================
--- /trunk/src/VBox/VMM/PATM/PATMPatch.h	(revision 9211)
+++ /trunk/src/VBox/VMM/PATM/PATMPatch.h	(revision 9212)
@@ -31,13 +31,13 @@
 int patmPatchGenMovDebug(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu);
 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC);
-int patmPatchGenRelJump(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride);
-int patmPatchGenLoop(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride);
+int patmPatchGenRelJump(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride);
+int patmPatchGenLoop(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride);
 int patmPatchGenPushf(PVM pVM, PPATCHINFO pPatch, bool fSizeOverride);
-int patmPatchGenPopf(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pReturnAddrGC, bool fSizeOverride, bool fGenJumpBack);
+int patmPatchGenPopf(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pReturnAddrGC, bool fSizeOverride, bool fGenJumpBack);
 int patmPatchGenSti(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RTGCPTR pNextInstrGC);
 
 int patmPatchGenCli(PVM pVM, PPATCHINFO pPatch);
 int patmPatchGenIret(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, bool fSizeOverride);
-int patmPatchGenDuplicate(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pCurInstrGC);
+int patmPatchGenDuplicate(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pCurInstrGC);
 int patmPatchGenPushCS(PVM pVM, PPATCHINFO pPatch);
 
@@ -45,7 +45,7 @@
 
 int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pInstrGC, RTGCPTR pTargetGC, bool fIndirect);
-int patmPatchGenRet(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, GCPTRTYPE(uint8_t *) pCurInstrGC);
+int patmPatchGenRet(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pCurInstrGC);
 
-int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, GCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord = true);
+int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord = true);
 
 /**
@@ -89,5 +89,5 @@
  * @param   fClearInhibitIRQs   Clear inhibit irq flag
  */
-int patmPatchGenJumpToGuest(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *) pReturnAddrGC, bool fClearInhibitIRQs = false);
+int patmPatchGenJumpToGuest(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pReturnAddrGC, bool fClearInhibitIRQs = false);
 
 /**
Index: /trunk/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp	(revision 9212)
@@ -92,5 +92,5 @@
     Assert(bit < PAGE_SIZE);
 
-    return pVM->csam.s.CTXSUFF(pPDBitmap)[pgdir] && ASMBitTest(pVM->csam.s.CTXSUFF(pPDBitmap)[pgdir], bit);
+    return pVM->csam.s.CTXSUFF(pPDBitmap)[pgdir] && ASMBitTest((void *)pVM->csam.s.CTXSUFF(pPDBitmap)[pgdir], bit);
 }
 
@@ -138,5 +138,5 @@
         }
 #ifdef IN_GC
-        pVM->csam.s.pPDHCBitmapGC[pgdir] = MMHyperGC2HC(pVM, pVM->csam.s.pPDBitmapGC[pgdir]);
+        pVM->csam.s.pPDHCBitmapGC[pgdir] = MMHyperGC2HC(pVM, (RCPTRTYPE(void*))pVM->csam.s.pPDBitmapGC[pgdir]);
         if (!pVM->csam.s.pPDHCBitmapGC[pgdir])
         {
@@ -154,7 +154,7 @@
     }
     if(fScanned)
-        ASMBitSet(pVM->csam.s.CTXSUFF(pPDBitmap)[pgdir], bit);
+        ASMBitSet((void *)pVM->csam.s.CTXSUFF(pPDBitmap)[pgdir], bit);
     else
-        ASMBitClear(pVM->csam.s.CTXSUFF(pPDBitmap)[pgdir], bit);
+        ASMBitClear((void *)pVM->csam.s.CTXSUFF(pPDBitmap)[pgdir], bit);
 
     return VINF_SUCCESS;
@@ -204,5 +204,5 @@
     if (pVM->csam.s.cPossibleCodePages < RT_ELEMENTS(pVM->csam.s.pvPossibleCodePage))
     {
-        pVM->csam.s.pvPossibleCodePage[pVM->csam.s.cPossibleCodePages++] = GCPtr;
+        pVM->csam.s.pvPossibleCodePage[pVM->csam.s.cPossibleCodePages++] = (RTGCPTR32)GCPtr;
         VM_FF_SET(pVM, VM_FF_CSAM_PENDING_ACTION);
     }
@@ -251,5 +251,5 @@
     for (uint32_t i=0;i<pVM->csam.s.cDangerousInstr;i++)
     {
-        if (pVM->csam.s.aDangerousInstr[i] == GCPtr)
+        if (pVM->csam.s.aDangerousInstr[i] == (RTGCPTR32)GCPtr)
         {
             STAM_COUNTER_INC(&pVM->csam.s.StatInstrCacheHit);
@@ -258,5 +258,5 @@
     }
     /* Record that we're about to process it in ring 3. */
-    pVM->csam.s.aDangerousInstr[pVM->csam.s.iDangerousInstr++] = GCPtr;
+    pVM->csam.s.aDangerousInstr[pVM->csam.s.iDangerousInstr++] = (RTGCPTR32)GCPtr;
     pVM->csam.s.iDangerousInstr &= CSAM_MAX_DANGR_INSTR_MASK;
 
Index: /trunk/src/VBox/VMM/PATM/VMMAll/PATMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/PATM/VMMAll/PATMAll.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/PATM/VMMAll/PATMAll.cpp	(revision 9212)
@@ -60,5 +60,5 @@
     register uint32_t efl = pCtxCore->eflags.u32;
     CTXSUFF(pVM->patm.s.pGCState)->uVMFlags = efl & PATM_VIRTUAL_FLAGS_MASK;
-    AssertMsg((efl & X86_EFL_IF) || PATMShouldUseRawMode(pVM, (RTGCPTR)pCtxCore->eip), ("X86_EFL_IF is clear and PATM is disabled! (eip=%VGv eflags=%08x fPATM=%d pPATMGC=%VGv-%VGv\n", pCtxCore->eip, pCtxCore->eflags.u32, PATMIsEnabled(pVM), pVM->patm.s.pPatchMemGC, pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem));
+    AssertMsg((efl & X86_EFL_IF) || PATMShouldUseRawMode(pVM, (RTGCPTR32)pCtxCore->eip), ("X86_EFL_IF is clear and PATM is disabled! (eip=%VGv eflags=%08x fPATM=%d pPATMGC=%VGv-%VGv\n", pCtxCore->eip, pCtxCore->eflags.u32, PATMIsEnabled(pVM), pVM->patm.s.pPatchMemGC, pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem));
 
     AssertReleaseMsg(CTXSUFF(pVM->patm.s.pGCState)->fPIF || fPatchCode, ("fPIF=%d eip=%VGv\n", CTXSUFF(pVM->patm.s.pGCState)->fPIF, pCtxCore->eip));
@@ -249,5 +249,5 @@
 {
     return (    PATMIsEnabled(pVM)
-            && ((pAddrGC >= pVM->patm.s.pPatchMemGC && pAddrGC < pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem))) ? true : false;
+            && ((pAddrGC >= (RTGCPTR)pVM->patm.s.pPatchMemGC && pAddrGC < (RTGCPTR)pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem))) ? true : false;
 }
 
@@ -258,5 +258,5 @@
  * @param   pVM         The VM to operate on.
  */
-PATMDECL(GCPTRTYPE(PPATMGCSTATE)) PATMQueryGCState(PVM pVM)
+PATMDECL(RCPTRTYPE(PPATMGCSTATE)) PATMQueryGCState(PVM pVM)
 {
     return pVM->patm.s.pGCStateGC;
@@ -272,5 +272,7 @@
 PATMDECL(bool) PATMIsPatchGCAddr(PVM pVM, RTGCPTR pAddrGC)
 {
-    return (PATMIsEnabled(pVM) && pAddrGC >= pVM->patm.s.pPatchMemGC && pAddrGC < pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem) ? true : false;
+    RTGCPTR32 pAddrGG32 = (RTGCPTR32)pAddrGC;
+
+    return (PATMIsEnabled(pVM) && pAddrGG32 >= (RTGCPTR)pVM->patm.s.pPatchMemGC && pAddrGG32 < (RTGCPTR)pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem) ? true : false;
 }
 
@@ -286,5 +288,5 @@
 {
     pVM->patm.s.mmio.GCPhys = GCPhys;
-    pVM->patm.s.mmio.pCachedData = pCachedData;
+    pVM->patm.s.mmio.pCachedData = (RTGCPTR32)pCachedData;
 
     return VINF_SUCCESS;
@@ -400,5 +402,5 @@
             ||  (pRegFrame->cs & X86_SEL_RPL) != 3
             ||  pVM->patm.s.pfnSysEnterPatchGC == 0
-            ||  pVM->patm.s.pfnSysEnterGC != (RTGCPTR)pCtx->SysEnter.eip
+            ||  pVM->patm.s.pfnSysEnterGC != (RTGCPTR32)pCtx->SysEnter.eip
             ||  !(PATMRawGetEFlags(pVM, pRegFrame) & X86_EFL_IF))
             goto end;
Index: /trunk/src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp
===================================================================
--- /trunk/src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp	(revision 9212)
@@ -87,5 +87,5 @@
         int rc = PGMShwModifyPage(pVM, pvFault, 1, X86_PTE_RW, ~(uint64_t)X86_PTE_RW);
         AssertMsgRC(rc, ("PGMShwModifyPage -> rc=%Vrc\n", rc));
-        ASMInvalidatePage(pvFault);
+        ASMInvalidatePage((void *)pvFault);
         return VINF_SUCCESS;
     }
@@ -117,6 +117,6 @@
 
     /* Note that pvFault might be a different address in case of aliases. So use pvRange + offset instead!. */
-    pVM->csam.s.pvDirtyBasePage[pVM->csam.s.cDirtyPages] = (RTGCPTR)((RTGCUINTPTR)pvRange + offRange);
-    pVM->csam.s.pvDirtyFaultPage[pVM->csam.s.cDirtyPages] = (RTGCPTR)((RTGCUINTPTR)pvRange + offRange);
+    pVM->csam.s.pvDirtyBasePage[pVM->csam.s.cDirtyPages] = (RTGCPTR32)((RTGCUINTPTR)pvRange + offRange);
+    pVM->csam.s.pvDirtyFaultPage[pVM->csam.s.cDirtyPages] = (RTGCPTR32)((RTGCUINTPTR)pvRange + offRange);
     if (++pVM->csam.s.cDirtyPages == CSAM_MAX_DIRTY_PAGES)
         return VINF_CSAM_PENDING_ACTION;
@@ -128,5 +128,5 @@
     rc = PGMShwModifyPage(pVM, pvFault, 1, X86_PTE_RW, ~(uint64_t)X86_PTE_RW);
     AssertMsgRC(rc, ("PGMShwModifyPage -> rc=%Vrc\n", rc));
-    ASMInvalidatePage(pvFault);
+    ASMInvalidatePage((void *)pvFault);
 
     STAM_COUNTER_INC(&pVM->csam.s.StatCodePageModified);
Index: /trunk/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp
===================================================================
--- /trunk/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp	(revision 9212)
@@ -65,5 +65,5 @@
 PATMGCDECL(int) PATMGCMonitorPage(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, void *pvFault, void *pvRange, uintptr_t offRange)
 {
-    pVM->patm.s.pvFaultMonitor = pvFault;
+    pVM->patm.s.pvFaultMonitor = (RTGCPTR32)pvFault;
     return VINF_PATM_CHECK_PATCH_PAGE;
 }
@@ -112,6 +112,6 @@
     if (pPatchPage)
     {
-        if (    pPatchPage->pLowestAddrGC  > (RTGCPTR)((RTGCUINTPTR)GCPtr + cbWrite - 1)
-            ||  pPatchPage->pHighestAddrGC < GCPtr)
+        if (    pPatchPage->pLowestAddrGC  > (RTGCPTR32)((RTGCUINTPTR)GCPtr + cbWrite - 1)
+            ||  pPatchPage->pHighestAddrGC < (RTGCPTR32)GCPtr)
         {
             /* This part of the page was not patched; try to emulate the instruction. */
Index: /trunk/src/VBox/VMM/PDM.cpp
===================================================================
--- /trunk/src/VBox/VMM/PDM.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/PDM.cpp	(revision 9212)
@@ -312,5 +312,5 @@
      * Devices.
      */
-    GCPTRTYPE(PCPDMDEVHLPGC) pDevHlpGC;
+    RCPTRTYPE(PCPDMDEVHLPGC) pDevHlpGC;
     int rc = PDMR3GetSymbolGC(pVM, NULL, "g_pdmGCDevHlp", &pDevHlpGC);
     AssertReleaseMsgRC(rc, ("rc=%Vrc when resolving g_pdmGCDevHlp\n", rc));
Index: /trunk/src/VBox/VMM/PDMDevice.cpp
===================================================================
--- /trunk/src/VBox/VMM/PDMDevice.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/PDMDevice.cpp	(revision 9212)
@@ -609,5 +609,5 @@
      * Get the GC & R0 devhlps and create the devhlp R3 task queue.
      */
-    GCPTRTYPE(PCPDMDEVHLPGC) pDevHlpGC;
+    RCPTRTYPE(PCPDMDEVHLPGC) pDevHlpGC;
     int rc = PDMR3GetSymbolGC(pVM, NULL, "g_pdmGCDevHlp", &pDevHlpGC);
     AssertReleaseRCReturn(rc, rc);
Index: /trunk/src/VBox/VMM/PDMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/PDMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/PDMInternal.h	(revision 9212)
@@ -105,9 +105,9 @@
 
     /** GC pointer to associated PCI device structure. */
-    GCPTRTYPE(struct PCIDevice *)   pPciDeviceGC;
+    RCPTRTYPE(struct PCIDevice *)   pPciDeviceGC;
     /** Pointer to the VM this instance was created for - GC Ptr. */
-    GCPTRTYPE(PVM)                  pVMGC;
+    RCPTRTYPE(PVM)                  pVMGC;
     /** GC pointer to associated PCI bus structure. */
-    GCPTRTYPE(PPDMPCIBUS)           pPciBusGC;
+    RCPTRTYPE(PPDMPCIBUS)           pPciBusGC;
 #if GC_ARCH_BITS == 32
     uint32_t                        Alignment0;
@@ -200,5 +200,5 @@
     R0PTRTYPE(PVM)      pVMR0;
     /** Pointer to the VM - GCPtr. */
-    GCPTRTYPE(PVM)      pVMGC;
+    RCPTRTYPE(PVM)      pVMGC;
 #if HC_ARCH_BITS == 64 && GC_ARCH_BITS == 32
     uint32_t            padding;
@@ -370,5 +370,5 @@
 
     /** Pointer to the PIC device instance - GC. */
-    GCPTRTYPE(PPDMDEVINS)   pDevInsGC;
+    RCPTRTYPE(PPDMDEVINS)   pDevInsGC;
     /** @copydoc PDMPICREG::pfnSetIrqHC */
     DECLGCCALLBACKMEMBER(void, pfnSetIrqGC,(PPDMDEVINS pDevIns, int iIrq, int iLevel));
@@ -653,7 +653,7 @@
      * If this is NULL, the queue cannot be used in GC.
      */
-    GCPTRTYPE(PVM)                          pVMGC;
+    RCPTRTYPE(PVM)                          pVMGC;
     /** LIFO of pending items - GC. */
-    GCPTRTYPE(PPDMQUEUEITEMCORE)            pPendingGC;
+    RCPTRTYPE(PPDMQUEUEITEMCORE)            pPendingGC;
     /** Item size (bytes). */
     RTUINT                                  cbItem;
@@ -670,5 +670,5 @@
         R3R0PTRTYPE(PPDMQUEUEITEMCORE) volatile pItemHC;
         /** Pointer to the free item - GC Ptr. */
-        GCPTRTYPE(PPDMQUEUEITEMCORE) volatile   pItemGC;
+        RCPTRTYPE(PPDMQUEUEITEMCORE) volatile   pItemGC;
 #if HC_ARCH_BITS == 64 && GC_ARCH_BITS == 32
         uint32_t                              Alignment0;
@@ -810,5 +810,5 @@
     R3R0PTRTYPE(PPDMQUEUE)          pDevHlpQueueHC;
     /** Queue in which devhlp tasks are queued for R3 execution - GC Ptr. */
-    GCPTRTYPE(PPDMQUEUE)            pDevHlpQueueGC;
+    RCPTRTYPE(PPDMQUEUE)            pDevHlpQueueGC;
 
     /** The number of entries in the apQueuedCritSectsLeaves table that's currnetly in use. */
@@ -826,5 +826,5 @@
     R3R0PTRTYPE(struct PDMQUEUE *)  pQueueFlushHC;
     /** Pointer to the queue which should be manually flushed - GCPtr. */
-    GCPTRTYPE(struct PDMQUEUE *)    pQueueFlushGC;
+    RCPTRTYPE(struct PDMQUEUE *)    pQueueFlushGC;
 #if HC_ARCH_BITS == 64
     uint32_t                        padding0;
Index: /trunk/src/VBox/VMM/PGMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/PGMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/PGMInternal.h	(revision 9212)
@@ -311,5 +311,5 @@
     R0PTRTYPE(struct PGMMAPPING *)  pNextR0;
     /** Pointer to next entry. */
-    GCPTRTYPE(struct PGMMAPPING *)  pNextGC;
+    RCPTRTYPE(struct PGMMAPPING *)  pNextGC;
     /** Start Virtual address. */
     RTGCUINTPTR                     GCPtr;
@@ -346,7 +346,7 @@
         R3PTRTYPE(PX86PTPAE)    paPaePTsR3;
         /** The GC virtual address of the 32-bit page table. */
-        GCPTRTYPE(PX86PT)       pPTGC;
+        RCPTRTYPE(PX86PT)       pPTGC;
         /** The GC virtual address of the two PAE page table. */
-        GCPTRTYPE(PX86PTPAE)    paPaePTsGC;
+        RCPTRTYPE(PX86PTPAE)    paPaePTsGC;
         /** The GC virtual address of the 32-bit page table. */
         R0PTRTYPE(PX86PT)       pPTR0;
@@ -381,7 +381,7 @@
     R0PTRTYPE(void *)                   pvUserR0;
     /** Pointer to GC callback function. */
-    GCPTRTYPE(PFNPGMGCPHYSHANDLER)      pfnHandlerGC;
+    RCPTRTYPE(PFNPGMGCPHYSHANDLER)      pfnHandlerGC;
     /** User argument for GC handlers. */
-    GCPTRTYPE(void *)                   pvUserGC;
+    RCPTRTYPE(void *)                   pvUserGC;
     /** Description / Name. For easing debugging. */
     R3PTRTYPE(const char *)             pszDesc;
@@ -449,5 +449,5 @@
     RTGCUINTPTR                         cb;
     /** Pointer to the GC callback function. */
-    GCPTRTYPE(PFNPGMGCVIRTHANDLER)      pfnHandlerGC;
+    RCPTRTYPE(PFNPGMGCVIRTHANDLER)      pfnHandlerGC;
     /** Pointer to the HC callback function for invalidation. */
     R3PTRTYPE(PFNPGMHCVIRTINVALIDATE)   pfnInvalidateHC;
@@ -909,5 +909,5 @@
     R0PTRTYPE(struct PGMRAMRANGE *)     pNextR0;
     /** Pointer to the next RAM range - for GC. */
-    GCPTRTYPE(struct PGMRAMRANGE *)     pNextGC;
+    RCPTRTYPE(struct PGMRAMRANGE *)     pNextGC;
 #if GC_ARCH_BITS == 32
     /** Pointer alignment. */
@@ -926,5 +926,5 @@
 #else
     /** HC virtual lookup ranges for chunks. Currently only used with MM_RAM_FLAGS_DYNAMIC_ALLOC ranges. */
-    GCPTRTYPE(PRTHCPTR)                 pavHCChunkGC;
+    RCPTRTYPE(PRTHCPTR)                 pavHCChunkGC;
     /** HC virtual lookup ranges for chunks. Currently only used with MM_RAM_FLAGS_DYNAMIC_ALLOC ranges. */
     R3R0PTRTYPE(PRTHCPTR)               pavHCChunkHC;
@@ -995,5 +995,5 @@
     R0PTRTYPE(struct PGMROMRANGE *) pNextR0;
     /** Pointer to the next range - GC. */
-    GCPTRTYPE(struct PGMROMRANGE *) pNextGC;
+    RCPTRTYPE(struct PGMROMRANGE *) pNextGC;
 #if GC_ARCH_BITS == 32
     RTGCPTR                         GCPtrAlignment; /**< Pointer alignment. */
@@ -1468,5 +1468,5 @@
     R3R0PTRTYPE(PVM) pVMHC;
     /** The VM handle - GC Ptr. */
-    GCPTRTYPE(PVM)  pVMGC;
+    RCPTRTYPE(PVM)  pVMGC;
     /** The max pool size. This includes the special IDs.  */
     uint16_t        cMaxPages;
@@ -1485,5 +1485,5 @@
     uint32_t        cPresent;
     /** Pointer to the array of user nodes - GC pointer. */
-    GCPTRTYPE(PPGMPOOLUSER) paUsersGC;
+    RCPTRTYPE(PPGMPOOLUSER) paUsersGC;
     /** Pointer to the array of user nodes - HC pointer. */
     R3R0PTRTYPE(PPGMPOOLUSER) paUsersHC;
@@ -1495,5 +1495,5 @@
     uint16_t        cMaxPhysExts;
     /** Pointer to the array of physical xref extent - GC pointer. */
-    GCPTRTYPE(PPGMPOOLPHYSEXT) paPhysExtsGC;
+    RCPTRTYPE(PPGMPOOLPHYSEXT) paPhysExtsGC;
     /** Pointer to the array of physical xref extent nodes - HC pointer. */
     R3R0PTRTYPE(PPGMPOOLPHYSEXT) paPhysExtsHC;
@@ -1515,5 +1515,5 @@
     uint16_t        cModifiedPages;
     /** Access handler, GC. */
-    GCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnAccessHandlerGC;
+    RCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnAccessHandlerGC;
     /** Access handler, R0. */
     R0PTRTYPE(PFNPGMR0PHYSHANDLER)  pfnAccessHandlerR0;
@@ -1814,6 +1814,6 @@
     DECLGCCALLBACKMEMBER(int,  pfnGCGstMapCR3,(PVM pVM, RTGCPHYS GCPhysCR3));
     DECLGCCALLBACKMEMBER(int,  pfnGCGstUnmapCR3,(PVM pVM));
-    GCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnGCGstWriteHandlerCR3;
-    GCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnGCGstPAEWriteHandlerCR3;
+    RCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnGCGstWriteHandlerCR3;
+    RCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnGCGstPAEWriteHandlerCR3;
 
     DECLR0CALLBACKMEMBER(int,  pfnR0GstGetPage,(PVM pVM, RTGCUINTPTR GCPtr, uint64_t *pfFlags, PRTGCPHYS pGCPhys));
@@ -1891,7 +1891,7 @@
 
     /** Pointer to the page table entries for the dynamic page mapping area - GCPtr. */
-    GCPTRTYPE(PX86PTE)          paDynPageMap32BitPTEsGC;
+    RCPTRTYPE(PX86PTE)          paDynPageMap32BitPTEsGC;
     /** Pointer to the page table entries for the dynamic page mapping area - GCPtr. */
-    GCPTRTYPE(PX86PTEPAE)       paDynPageMapPaePTEsGC;
+    RCPTRTYPE(PX86PTEPAE)       paDynPageMapPaePTEsGC;
 
     /** The host paging mode. (This is what SUPLib reports.) */
@@ -1920,5 +1920,5 @@
     R3R0PTRTYPE(PX86PD)         pGuestPDHC;
     /** The guest's page directory, static GC mapping. */
-    GCPTRTYPE(PX86PD)           pGuestPDGC;
+    RCPTRTYPE(PX86PD)           pGuestPDGC;
     /** @} */
 
@@ -1926,5 +1926,5 @@
      * @{ */
     /** The guest's page directory pointer table, static GC mapping. */
-    GCPTRTYPE(PX86PDPT)         pGstPaePDPTGC;
+    RCPTRTYPE(PX86PDPT)         pGstPaePDPTGC;
     /** The guest's page directory pointer table, HC pointer. */
     R3R0PTRTYPE(PX86PDPT)       pGstPaePDPTHC;
@@ -1936,5 +1936,5 @@
      * Unlike the HC array the first entry can be accessed as a 2048 entry PD.
      * These don't have to be up-to-date - use pgmGstGetPaePD() to access them. */
-    GCPTRTYPE(PX86PDPAE)        apGstPaePDsGC[4];
+    RCPTRTYPE(PX86PDPAE)        apGstPaePDsGC[4];
     /** The physical addresses of the guest page directories (PAE) pointed to by apGstPagePDsHC/GC. */
     RTGCPHYS                    aGCPhysGstPaePDs[4];
@@ -1954,5 +1954,5 @@
     R3R0PTRTYPE(PX86PD)         pHC32BitPD;
     /** The 32-Bit PD - GC Ptr. */
-    GCPTRTYPE(PX86PD)           pGC32BitPD;
+    RCPTRTYPE(PX86PD)           pGC32BitPD;
 #if HC_ARCH_BITS == 64 && GC_ARCH_BITS == 32
     uint32_t                    u32Padding1; /**< alignment padding. */
@@ -1970,5 +1970,5 @@
     /** The four PDs for the low 4GB - GC Ptr.
      * Same kind of mapping as apHCPaePDs. */
-    GCPTRTYPE(PX86PDPAE)        apGCPaePDs[4];
+    RCPTRTYPE(PX86PDPAE)        apGCPaePDs[4];
     /** The Physical Address (HC) of the four PDs for the low 4GB.
      * These are *NOT* 4 contiguous pages. */
@@ -1979,5 +1979,5 @@
     RTHCPHYS                    HCPhysPaePDPT;
     /** The PAE PDPT - GC Ptr. */
-    GCPTRTYPE(PX86PDPT)         pGCPaePDPT;
+    RCPTRTYPE(PX86PDPT)         pGCPaePDPT;
     /** @} */
 
@@ -2034,6 +2034,6 @@
     DECLGCCALLBACKMEMBER(int,  pfnGCGstMapCR3,(PVM pVM, RTGCPHYS GCPhysCR3));
     DECLGCCALLBACKMEMBER(int,  pfnGCGstUnmapCR3,(PVM pVM));
-    GCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnGCGstWriteHandlerCR3;
-    GCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnGCGstPAEWriteHandlerCR3;
+    RCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnGCGstWriteHandlerCR3;
+    RCPTRTYPE(PFNPGMGCPHYSHANDLER)  pfnGCGstPAEWriteHandlerCR3;
 #if GC_ARCH_BITS == 32 && HC_ARCH_BITS == 64
     RTGCPTR                         alignment3; /**< structure size alignment. */
@@ -2093,5 +2093,5 @@
     R0PTRTYPE(PPGMRAMRANGE)         pRamRangesR0;
     /** GC pointer corresponding to PGM::pRamRangesR3. */
-    GCPTRTYPE(PPGMRAMRANGE)         pRamRangesGC;
+    RCPTRTYPE(PPGMRAMRANGE)         pRamRangesGC;
     /** The configured RAM size. */
     RTUINT                          cbRamSize;
@@ -2103,5 +2103,5 @@
     R0PTRTYPE(PPGMRAMRANGE)         pRomRangesR0;
     /** GC pointer corresponding to PGM::pRomRangesR3. */
-    GCPTRTYPE(PPGMRAMRANGE)         pRomRangesGC;
+    RCPTRTYPE(PPGMRAMRANGE)         pRomRangesGC;
     /** Alignment padding. */
     RTGCPTR                         GCPtrPadding2;
@@ -2114,10 +2114,10 @@
     R3R0PTRTYPE(PPGMTREES)          pTreesHC;
     /** PGM offset based trees - GC Ptr. */
-    GCPTRTYPE(PPGMTREES)            pTreesGC;
+    RCPTRTYPE(PPGMTREES)            pTreesGC;
 
     /** Linked list of GC mappings - for GC.
      * The list is sorted ascending on address.
      */
-    GCPTRTYPE(PPGMMAPPING)          pMappingsGC;
+    RCPTRTYPE(PPGMMAPPING)          pMappingsGC;
     /** Linked list of GC mappings - for HC.
      * The list is sorted ascending on address.
@@ -2171,5 +2171,5 @@
      * The array is MM_HYPER_DYNAMIC_SIZE bytes big.
      */
-    GCPTRTYPE(uint8_t *)            pbDynPageMapBaseGC;
+    RCPTRTYPE(uint8_t *)            pbDynPageMapBaseGC;
     /** The index of the last entry used in the dynamic page mapping area. */
     RTUINT                          iDynPageMapLast;
@@ -2200,5 +2200,5 @@
     R3R0PTRTYPE(PPGMPOOL)           pPoolHC;
     /** Shadow Page Pool - GC Ptr. */
-    GCPTRTYPE(PPGMPOOL)             pPoolGC;
+    RCPTRTYPE(PPGMPOOL)             pPoolGC;
 
     /** We're not in a state which permits writes to guest memory.
@@ -2282,5 +2282,5 @@
 #ifdef VBOX_WITH_STATISTICS
     /** GC: Which statistic this \#PF should be attributed to. */
-    GCPTRTYPE(PSTAMPROFILE)   pStatTrap0eAttributionGC;
+    RCPTRTYPE(PSTAMPROFILE)   pStatTrap0eAttributionGC;
     RTGCPTR                   padding0;
     /** HC: Which statistic this \#PF should be attributed to. */
Index: /trunk/src/VBox/VMM/PGMPhys.cpp
===================================================================
--- /trunk/src/VBox/VMM/PGMPhys.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/PGMPhys.cpp	(revision 9212)
@@ -409,5 +409,5 @@
                                      R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnHandlerR3, RTR3PTR pvUserR3,
                                      R0PTRTYPE(PFNPGMR0PHYSHANDLER) pfnHandlerR0, RTR0PTR pvUserR0,
-                                     GCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RTGCPTR pvUserGC,
+                                     RCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RTGCPTR pvUserGC,
                                      R3PTRTYPE(const char *) pszDesc)
 {
Index: /trunk/src/VBox/VMM/REMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/REMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/REMInternal.h	(revision 9212)
@@ -242,5 +242,10 @@
 #endif
 
+#if GC_ARCH_BITS == 32
 #define REM_ENV_SIZE        (HC_ARCH_BITS == 32 ? 0x6440 : 0xb4a0)
+#else
+#define REM_ENV_SIZE        (HC_ARCH_BITS == 32 ? 0x8440 : 0xd4a0)
+#endif
+
     /** Recompiler CPU state. */
 #ifdef REM_INCLUDE_CPU_H
Index: /trunk/src/VBox/VMM/SELMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/SELMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/SELMInternal.h	(revision 9212)
@@ -93,5 +93,5 @@
      * This is not initialized until the first relocation because it's used to
      * check if the shadow GDT virtual handler requires deregistration. */
-    GCPTRTYPE(PVBOXDESC)    paGdtGC;
+    RCPTRTYPE(PVBOXDESC)    paGdtGC;
     /** Current (last) Guest's GDTR. */
     VBOXGDTR                GuestGdtr;
@@ -102,5 +102,5 @@
     R3PTRTYPE(void *)       HCPtrLdt;
     /** GC Pointer to the LDT shadow area placed in Hypervisor memory arena. */
-    GCPTRTYPE(void *)       GCPtrLdt;
+    RCPTRTYPE(void *)       GCPtrLdt;
     /** GC Pointer to the current Guest's LDT. */
     RTGCPTR                 GCPtrGuestLdt;
@@ -110,5 +110,5 @@
     RTUINT                  offLdtHyper;
 
-#if HC_ARCH_BITS == 32
+#if HC_ARCH_BITS == 32 || GC_ARCH_BITS == 64
     /** TSS alignment padding. */
     RTUINT                  auPadding[2];
Index: /trunk/src/VBox/VMM/TMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/TMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/TMInternal.h	(revision 9212)
@@ -347,7 +347,7 @@
     R0PTRTYPE(PFNTIMENANOTSINTERNAL) pfnVirtualGetRawR0;
     /** Pointer to the ring-3 tmVirtualGetRawNanoTS worker function. */
-    GCPTRTYPE(PFNTIMENANOTSINTERNAL) pfnVirtualGetRawGC;
+    RCPTRTYPE(PFNTIMENANOTSINTERNAL) pfnVirtualGetRawGC;
     /** Alignment. */
-    RTGCPTR                     AlignmentGCPtr;
+    RTGCPTR32                   AlignmentGCPtr;
     /** The guest virtual timer synchronous time when fVirtualSyncTicking is cleared. */
     uint64_t volatile           u64VirtualSync;
@@ -393,8 +393,8 @@
     R0PTRTYPE(PTMTIMERQUEUE)    paTimerQueuesR0;
     /** Timer queues for the different clock types - GC Ptr */
-    GCPTRTYPE(PTMTIMERQUEUE)    paTimerQueuesGC;
+    RCPTRTYPE(PTMTIMERQUEUE)    paTimerQueuesGC;
 
     /** Pointer to our GC mapping of the GIP. */
-    GCPTRTYPE(void *)           pvGIPGC;
+    RCPTRTYPE(void *)           pvGIPGC;
     /** Pointer to our R3 mapping of the GIP. */
     R3PTRTYPE(void *)           pvGIPR3;
Index: /trunk/src/VBox/VMM/TRPMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/TRPMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/TRPMInternal.h	(revision 9212)
@@ -139,6 +139,9 @@
 
     /** Padding to get the IDTs at a 16 byte alignement. */
+#if GC_ARCH_BITS == 32
     uint8_t         abPadding1[6];
-
+#else
+    uint8_t         abPadding1[14];
+#endif
     /** IDTs. Aligned at 16 byte offset for speed. */
     VBOXIDTE        aIdt[256];
@@ -186,5 +189,5 @@
     R0PTRTYPE(PSTAMCOUNTER) paStatForwardedIRQR0;
     /* GC: Statistics for interrupt handlers (allocated on the hypervisor heap). */
-    GCPTRTYPE(PSTAMCOUNTER) paStatForwardedIRQGC;
+    RCPTRTYPE(PSTAMCOUNTER) paStatForwardedIRQGC;
 } TRPM;
 #pragma pack()
Index: /trunk/src/VBox/VMM/TRPMInternal.mac
===================================================================
--- /trunk/src/VBox/VMM/TRPMInternal.mac	(revision 9211)
+++ /trunk/src/VBox/VMM/TRPMInternal.mac	(revision 9212)
@@ -20,4 +20,5 @@
 ;
 
+%include "VBox/asmdefs.mac"
 %include "VBox/stam.mac"
 
@@ -31,24 +32,27 @@
 %define TRPM_TRAP_IN_HYPER      RT_BIT(31)
 
-
 struc TRPM
     .offVM              resd 1
     .uActiveVector      resd 1
     .enmActiveType      resd 1
-    .uActiveErrorCode   resd 1
-    .uActiveCR2         resd 1
-    .uSavedVector       resd 1
+    .uActiveErrorCode   RTGCPTR_RES 1
+    .uActiveCR2         RTGCPTR_RES 1
+    .uSavedVector       RTGCPTR_RES 1
     .enmSavedType       resd 1
-    .uSavedErrorCode    resd 1
-    .uSavedCR2          resd 1
-    .uPrevVector        resd 1
+    .uSavedErrorCode    RTGCPTR_RES 1
+    .uSavedCR2          RTGCPTR_RES 1
+    .uPrevVector        RTGCPTR_RES 1
     .fDisableMonitoring resb 1
     .fSafeToDropGuestIDTMonitoring resb 1
+%if GC_ARCH_BITS == 32
     .abPadding1         resb 6
+%else
+    .abPadding1         resb 14
+%endif
     .aIdt               resd 512
     .au32IdtPatched     resd 8
-    .aTmpTrapHandlers   resd 256
+    .aTmpTrapHandlers   RTGCPTR32_RES 256
 
-    .GCPtrIdt           resd 1
+    .GCPtrIdt           RTGCPTR32_RES 1
     .GuestIdtr          resb 6
     .au8Padding         resb 2
@@ -73,5 +77,5 @@
     .paStatForwardedIRQR3  RTR3PTR_RES 1
     .paStatForwardedIRQR0  RTR0PTR_RES 1
-    .paStatForwardedIRQGC  RTGCPTR_RES 1
+    .paStatForwardedIRQGC  RTGCPTR32_RES 1
 endstruc
 
Index: /trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp	(revision 9212)
@@ -64,5 +64,5 @@
         pVM->cpum.s.pHyperCoreR3 = (R3PTRTYPE(PCPUMCTXCORE))VM_R3_ADDR(pVM, pCtxCore);
         pVM->cpum.s.pHyperCoreR0 = (R0PTRTYPE(PCPUMCTXCORE))VM_R0_ADDR(pVM, pCtxCore);
-        pVM->cpum.s.pHyperCoreGC = (GCPTRTYPE(PCPUMCTXCORE))VM_GUEST_ADDR(pVM, pCtxCore);
+        pVM->cpum.s.pHyperCoreGC = (RCPTRTYPE(PCPUMCTXCORE))VM_GUEST_ADDR(pVM, pCtxCore);
     }
     else
@@ -70,5 +70,5 @@
         pVM->cpum.s.pHyperCoreR3 = (R3PTRTYPE(PCPUMCTXCORE))MMHyperCCToR3(pVM, pCtxCore);
         pVM->cpum.s.pHyperCoreR0 = (R0PTRTYPE(PCPUMCTXCORE))MMHyperCCToR0(pVM, pCtxCore);
-        pVM->cpum.s.pHyperCoreGC = (GCPTRTYPE(PCPUMCTXCORE))MMHyperCCToGC(pVM, pCtxCore);
+        pVM->cpum.s.pHyperCoreGC = (RCPTRTYPE(PCPUMCTXCORE))MMHyperCCToGC(pVM, pCtxCore);
     }
 }
@@ -798,30 +798,30 @@
 }
 
-CPUMDECL(RTUINTREG) CPUMGetGuestDR0(PVM pVM)
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR0(PVM pVM)
 {
     return pVM->cpum.s.Guest.dr0;
 }
 
-CPUMDECL(RTUINTREG) CPUMGetGuestDR1(PVM pVM)
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR1(PVM pVM)
 {
     return pVM->cpum.s.Guest.dr1;
 }
 
-CPUMDECL(RTUINTREG) CPUMGetGuestDR2(PVM pVM)
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR2(PVM pVM)
 {
     return pVM->cpum.s.Guest.dr2;
 }
 
-CPUMDECL(RTUINTREG) CPUMGetGuestDR3(PVM pVM)
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR3(PVM pVM)
 {
     return pVM->cpum.s.Guest.dr3;
 }
 
-CPUMDECL(RTUINTREG) CPUMGetGuestDR6(PVM pVM)
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR6(PVM pVM)
 {
     return pVM->cpum.s.Guest.dr6;
 }
 
-CPUMDECL(RTUINTREG) CPUMGetGuestDR7(PVM pVM)
+CPUMDECL(RTGCUINTREG) CPUMGetGuestDR7(PVM pVM)
 {
     return pVM->cpum.s.Guest.dr7;
@@ -903,7 +903,7 @@
  * @remark  Intended for PATM.
  */
-CPUMDECL(GCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdStdGCPtr(PVM pVM)
-{
-    return GCPTRTYPE(PCCPUMCPUID)VM_GUEST_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdStd[0]);
+CPUMDECL(RCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdStdGCPtr(PVM pVM)
+{
+    return RCPTRTYPE(PCCPUMCPUID)VM_GUEST_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdStd[0]);
 }
 
@@ -917,7 +917,7 @@
  * @remark  Intended for PATM.
  */
-CPUMDECL(GCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdExtGCPtr(PVM pVM)
-{
-    return GCPTRTYPE(PCCPUMCPUID)VM_GUEST_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdExt[0]);
+CPUMDECL(RCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdExtGCPtr(PVM pVM)
+{
+    return RCPTRTYPE(PCCPUMCPUID)VM_GUEST_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdExt[0]);
 }
 
@@ -931,7 +931,7 @@
  * @remark  Intended for PATM.
  */
-CPUMDECL(GCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdCentaurGCPtr(PVM pVM)
-{
-    return GCPTRTYPE(PCCPUMCPUID)VM_GUEST_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdCentaur[0]);
+CPUMDECL(RCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdCentaurGCPtr(PVM pVM)
+{
+    return RCPTRTYPE(PCCPUMCPUID)VM_GUEST_ADDR(pVM, &pVM->cpum.s.aGuestCpuIdCentaur[0]);
 }
 
@@ -943,7 +943,7 @@
  * @remark  Intended for PATM.
  */
-CPUMDECL(GCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdDefGCPtr(PVM pVM)
-{
-    return GCPTRTYPE(PCCPUMCPUID)VM_GUEST_ADDR(pVM, &pVM->cpum.s.GuestCpuIdDef);
+CPUMDECL(RCPTRTYPE(PCCPUMCPUID)) CPUMGetGuestCpuIdDefGCPtr(PVM pVM)
+{
+    return RCPTRTYPE(PCCPUMCPUID)VM_GUEST_ADDR(pVM, &pVM->cpum.s.GuestCpuIdDef);
 }
 
Index: /trunk/src/VBox/VMM/VMMAll/EMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/EMAll.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/EMAll.cpp	(revision 9212)
@@ -55,7 +55,7 @@
 typedef DECLCALLBACK(uint32_t) PFN_EMULATE_PARAM2(uint32_t *pu32Param1, size_t val2);
 typedef DECLCALLBACK(uint32_t) PFN_EMULATE_PARAM3(uint32_t *pu32Param1, uint32_t val2, size_t val3);
-typedef DECLCALLBACK(int)      FNEMULATELOCKPARAM2(RTGCPTR GCPtrParam1, RTGCUINTREG Val2, uint32_t *pf);
+typedef DECLCALLBACK(int)      FNEMULATELOCKPARAM2(RTGCPTR GCPtrParam1, RTGCUINTREG Val2, RTGCUINTREG32 *pf);
 typedef FNEMULATELOCKPARAM2 *PFNEMULATELOCKPARAM2;
-typedef DECLCALLBACK(int)      FNEMULATELOCKPARAM3(RTGCPTR GCPtrParam1, RTGCUINTREG Val2, size_t cb, uint32_t *pf);
+typedef DECLCALLBACK(int)      FNEMULATELOCKPARAM3(RTGCPTR GCPtrParam1, RTGCUINTREG Val2, size_t cb, RTGCUINTREG32 *pf);
 typedef FNEMULATELOCKPARAM3 *PFNEMULATELOCKPARAM3;
 
@@ -291,5 +291,5 @@
 {
 #ifdef IN_GC
-    int rc = MMGCRamRead(pVM, pDest, GCSrc, cb);
+    int rc = MMGCRamRead(pVM, pDest, (void *)GCSrc, cb);
     if (RT_LIKELY(rc != VERR_ACCESS_DENIED))
         return rc;
@@ -312,5 +312,5 @@
 {
 #ifdef IN_GC
-    int rc = MMGCRamWrite(pVM, GCDest, pSrc, cb);
+    int rc = MMGCRamWrite(pVM, (void *)GCDest, pSrc, cb);
     if (RT_LIKELY(rc != VERR_ACCESS_DENIED))
         return rc;
@@ -816,5 +816,5 @@
     Log2(("%s %RGv imm%d=%RGr\n", emGetMnemonic(pCpu), GCPtrPar1, pCpu->param2.size*8, ValPar2));
 
-    RTGCUINTREG eflags = 0;
+    RTGCUINTREG32 eflags = 0;
     MMGCRamRegisterTrapHandler(pVM);
     rc = pfnEmulate(GCPtrPar1, ValPar2, pCpu->param2.size, &eflags);
@@ -1090,5 +1090,5 @@
 
     /* Try emulate it with a one-shot #PF handler in place. */
-    RTGCUINTREG eflags = 0;
+    RTGCUINTREG32 eflags = 0;
     MMGCRamRegisterTrapHandler(pVM);
     rc = pfnEmulate(GCPtrPar1, ValPar2, &eflags);
Index: /trunk/src/VBox/VMM/VMMAll/IOMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/IOMAll.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/IOMAll.cpp	(revision 9212)
@@ -279,5 +279,5 @@
     }
 #ifdef IN_GC
-    Assert(!pRange || MMHyperIsInsideArea(pVM, pRange)); /** @todo r=bird: there is a macro for this which skips the #if'ing. */
+    Assert(!pRange || MMHyperIsInsideArea(pVM, (RTGCPTR)pRange)); /** @todo r=bird: there is a macro for this which skips the #if'ing. */
 #endif
 
@@ -426,5 +426,5 @@
     }
 #ifdef IN_GC
-    Assert(!pRange || MMHyperIsInsideArea(pVM, pRange)); /** @todo r=bird: there is a macro for this which skips the #if'ing. */
+    Assert(!pRange || MMHyperIsInsideArea(pVM, (RTGCPTR)pRange)); /** @todo r=bird: there is a macro for this which skips the #if'ing. */
 #endif
 
@@ -549,5 +549,5 @@
     }
 #ifdef IN_GC
-    Assert(!pRange || MMHyperIsInsideArea(pVM, pRange));
+    Assert(!pRange || MMHyperIsInsideArea(pVM, (RTGCPTR)pRange));
 #endif
 
@@ -673,5 +673,5 @@
     }
 #ifdef IN_GC
-    Assert(!pRange || MMHyperIsInsideArea(pVM, pRange)); /** @todo r=bird: there is a macro for this which skips the #if'ing. */
+    Assert(!pRange || MMHyperIsInsideArea(pVM, (RTGCPTR)pRange)); /** @todo r=bird: there is a macro for this which skips the #if'ing. */
 #endif
 
Index: /trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp	(revision 9212)
@@ -250,5 +250,5 @@
 {
 #ifdef IN_GC
-    return MMGCRamReadNoTrapHandler(pDest, GCSrc, cb);
+    return MMGCRamReadNoTrapHandler(pDest, (void *)GCSrc, cb);
 #else
     return PGMPhysReadGCPtrSafe(pVM, pDest, GCSrc, cb);
@@ -261,5 +261,5 @@
 {
 #ifdef IN_GC
-    return MMGCRamWriteNoTrapHandler(GCDest, pSrc, cb);
+    return MMGCRamWriteNoTrapHandler((void *)GCDest, pSrc, cb);
 #else
     return PGMPhysWriteGCPtrSafe(pVM, GCDest, pSrc, cb);
Index: /trunk/src/VBox/VMM/VMMAll/MMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/MMAll.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/MMAll.cpp	(revision 9212)
@@ -174,5 +174,5 @@
 {
 #ifdef IN_GC
-    return mmHyperLookupGC(pVM, pv, poff);
+    return mmHyperLookupGC(pVM, (RTGCPTR)pv, poff);
 #elif defined(IN_RING0)
     return mmHyperLookupR0(pVM, pv, poff);
@@ -254,5 +254,5 @@
 {
 #ifdef IN_GC
-    return mmHyperLookupCalcGC(pVM, pLookup, off);
+    return (void *)mmHyperLookupCalcGC(pVM, pLookup, off);
 #elif defined(IN_RING0)
     return mmHyperLookupCalcR0(pLookup, off);
@@ -494,5 +494,5 @@
  */
 #ifndef IN_GC
-MMDECL(RTGCPTR) MMHyperCCToGC(PVM pVM, void *pv)
+MMDECL(RCPTRTYPE(void *)) MMHyperCCToGC(PVM pVM, void *pv)
 {
     uint32_t off;
@@ -516,5 +516,5 @@
  * @deprecated
  */
-MMDECL(RTGCPTR) MMHyperHC2GC(PVM pVM, RTHCPTR HCPtr)
+MMDECL(RCPTRTYPE(void *)) MMHyperHC2GC(PVM pVM, RTHCPTR HCPtr)
 {
     PMMLOOKUPHYPER  pLookup = (PMMLOOKUPHYPER)((char*)CTXSUFF(pVM->mm.s.pHyperHeap) + pVM->mm.s.offLookupHyper);
@@ -527,5 +527,5 @@
                 unsigned    off = (RTHCUINTPTR)HCPtr - (RTHCUINTPTR)pLookup->u.Locked.pvHC;
                 if (off < pLookup->cb)
-                    return (RTGCPTR)((RTGCUINTPTR)pVM->mm.s.pvHyperAreaGC + pLookup->off + off);
+                    return (RCPTRTYPE(void *))((RTGCUINTPTR)pVM->mm.s.pvHyperAreaGC + pLookup->off + off);
                 break;
             }
@@ -535,5 +535,5 @@
                 unsigned    off = (RTHCUINTPTR)HCPtr - (RTHCUINTPTR)pLookup->u.HCPhys.pvHC;
                 if (off < pLookup->cb)
-                    return (RTGCPTR)((RTGCUINTPTR)pVM->mm.s.pvHyperAreaGC + pLookup->off + off);
+                    return (RCPTRTYPE(void *))((RTGCUINTPTR)pVM->mm.s.pvHyperAreaGC + pLookup->off + off);
                 break;
             }
@@ -556,5 +556,5 @@
 
     AssertMsgFailed(("HCPtr=%p is not inside the hypervisor memory area!\n", HCPtr));
-    return (RTGCPTR)0;
+    return (RCPTRTYPE(void *))0;
 }
 
@@ -570,5 +570,5 @@
  * @deprecated
  */
-MMDECL(RTHCPTR) MMHyperGC2HC(PVM pVM, RTGCPTR GCPtr)
+MMDECL(RTHCPTR) MMHyperGC2HC(PVM pVM, RCPTRTYPE(void *) GCPtr)
 {
     unsigned        offGC = (RTGCUINTPTR)GCPtr - (RTGCUINTPTR)pVM->mm.s.pvHyperAreaGC;
@@ -615,5 +615,5 @@
 MMDECL(RTHCPTR) MMHyper2HC(PVM pVM, uintptr_t Ptr)
 {
-    return MMHyperGC2HC(pVM, (RTGCPTR)Ptr);
+    return MMHyperGC2HC(pVM, (RCPTRTYPE(void *))Ptr);
 }
 
@@ -630,5 +630,5 @@
  * @deprecated
  */
-MMDECL(RTGCPTR) MMHyper2GC(PVM pVM, uintptr_t Ptr)
+MMDECL(RCPTRTYPE(void *)) MMHyper2GC(PVM pVM, uintptr_t Ptr)
 {
     return MMHyperHC2GC(pVM, (RTHCPTR)Ptr);
Index: /trunk/src/VBox/VMM/VMMAll/PDMAllQueue.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PDMAllQueue.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/PDMAllQueue.cpp	(revision 9212)
@@ -137,5 +137,5 @@
  * @param   pQueue          The queue handle.
  */
-PDMDECL(GCPTRTYPE(PPDMQUEUE)) PDMQueueGCPtr(PPDMQUEUE pQueue)
+PDMDECL(RCPTRTYPE(PPDMQUEUE)) PDMQueueGCPtr(PPDMQUEUE pQueue)
 {
     Assert(VALID_PTR(pQueue));
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllBth.h	(revision 9212)
@@ -3198,7 +3198,7 @@
 # ifndef IN_RING0
 #  if PGM_GST_TYPE == PGM_TYPE_32BIT
-    rc = PGMShwGetPage(pVM, pPGM->pGuestPDGC, NULL, &HCPhysShw);
+    rc = PGMShwGetPage(pVM, (RTGCPTR)pPGM->pGuestPDGC, NULL, &HCPhysShw);
 #  else
-    rc = PGMShwGetPage(pVM, pPGM->pGstPaePDPTGC, NULL, &HCPhysShw);
+    rc = PGMShwGetPage(pVM, (RTGCPTR)pPGM->pGstPaePDPTGC, NULL, &HCPhysShw);
 #  endif
     AssertRCReturn(rc, 1);
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllGst.h
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllGst.h	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllGst.h	(revision 9212)
@@ -417,10 +417,10 @@
 #if PGM_GST_TYPE == PGM_TYPE_32BIT
             pVM->pgm.s.pGuestPDHC = (R3R0PTRTYPE(PX86PD))HCPtrGuestCR3;
-            pVM->pgm.s.pGuestPDGC = (GCPTRTYPE(PX86PD))pVM->pgm.s.GCPtrCR3Mapping;
+            pVM->pgm.s.pGuestPDGC = (RCPTRTYPE(PX86PD))pVM->pgm.s.GCPtrCR3Mapping;
 
 #elif PGM_GST_TYPE == PGM_TYPE_PAE
             unsigned offset = GCPhysCR3 & GST_CR3_PAGE_MASK & PAGE_OFFSET_MASK;
             pVM->pgm.s.pGstPaePDPTHC = (R3R0PTRTYPE(PX86PDPT)) HCPtrGuestCR3;
-            pVM->pgm.s.pGstPaePDPTGC = (GCPTRTYPE(PX86PDPT))   ((GCPTRTYPE(uint8_t *))pVM->pgm.s.GCPtrCR3Mapping + offset);
+            pVM->pgm.s.pGstPaePDPTGC = (RCPTRTYPE(PX86PDPT))   ((RCPTRTYPE(uint8_t *))pVM->pgm.s.GCPtrCR3Mapping + offset);
             Log(("Cached mapping %VGv\n", pVM->pgm.s.pGstPaePDPTGC));
 
@@ -442,5 +442,5 @@
                         AssertRCReturn(rc, rc);
                         pVM->pgm.s.apGstPaePDsHC[i]     = (R3R0PTRTYPE(PX86PDPAE))HCPtr;
-                        pVM->pgm.s.apGstPaePDsGC[i]     = (GCPTRTYPE(PX86PDPAE))GCPtr;
+                        pVM->pgm.s.apGstPaePDsGC[i]     = (RCPTRTYPE(PX86PDPAE))GCPtr;
                         pVM->pgm.s.aGCPhysGstPaePDs[i]  = GCPhys;
                         PGM_INVL_PG(GCPtr);
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllHandler.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllHandler.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllHandler.cpp	(revision 9212)
@@ -82,5 +82,5 @@
                                           R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnHandlerR3, RTR3PTR pvUserR3,
                                           R0PTRTYPE(PFNPGMR0PHYSHANDLER) pfnHandlerR0, RTR0PTR pvUserR0,
-                                          GCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RTGCPTR pvUserGC,
+                                          RCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RCPTRTYPE(void *) pvUserGC,
                                           R3PTRTYPE(const char *) pszDesc)
 {
@@ -600,5 +600,5 @@
                                                R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnHandlerR3, RTR3PTR pvUserR3,
                                                R0PTRTYPE(PFNPGMR0PHYSHANDLER) pfnHandlerR0, RTR0PTR pvUserR0,
-                                               GCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RTGCPTR pvUserGC,
+                                               RCPTRTYPE(PFNPGMGCPHYSHANDLER) pfnHandlerGC, RCPTRTYPE(void *) pvUserGC,
                                                R3PTRTYPE(const char *) pszDesc)
 {
Index: /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp	(revision 9212)
@@ -211,5 +211,5 @@
 {
 #ifdef IN_GC
-    return (RTGCPTR)((RTGCUINTPTR)pvFault & ~(RTGCUINTPTR)(cbEntry - 1));
+    return (const void *)((RTGCUINTPTR)pvFault & ~(RTGCUINTPTR)(cbEntry - 1));
 
 #elif defined(IN_RING0)
@@ -657,19 +657,15 @@
      * write situation, meaning that it's safe to write here.
      */
+    RTGCUINTPTR pu32 = (RTGCUINTPTR)pvFault;
+    while (pRegFrame->ecx)
+    {
+        pgmPoolMonitorChainChanging(pPool, pPage, GCPhysFault, (RTGCPTR)pu32, NULL);
 #ifdef IN_GC
-    uint32_t *pu32 = (uint32_t *)pvFault;
-#else
-    RTGCPTR pu32 = pvFault;
-#endif
-    while (pRegFrame->ecx)
-    {
-        pgmPoolMonitorChainChanging(pPool, pPage, GCPhysFault, pu32, NULL);
-#ifdef IN_GC
-        *pu32++ = pRegFrame->eax;
+        *(uint32_t *)pu32 = pRegFrame->eax;
 #else
         PGMPhysWriteGCPhys(pVM, GCPhysFault, &pRegFrame->eax, 4);
-        pu32 += 4;
-#endif
-        GCPhysFault += 4;
+#endif
+        pu32           += 4;
+        GCPhysFault    += 4;
         pRegFrame->edi += 4;
         pRegFrame->ecx--;
Index: /trunk/src/VBox/VMM/VMMAll/SELMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/SELMAll.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/SELMAll.cpp	(revision 9212)
@@ -620,8 +620,8 @@
  * @param   esp     Ring1 ESP register value.
  */
-SELMDECL(void) SELMSetRing1Stack(PVM pVM, uint32_t ss, uint32_t esp)
+SELMDECL(void) SELMSetRing1Stack(PVM pVM, uint32_t ss, RTGCPTR32 esp)
 {
     pVM->selm.s.Tss.ss1  = ss;
-    pVM->selm.s.Tss.esp1 = esp;
+    pVM->selm.s.Tss.esp1 = (uint32_t)esp;
 }
 
@@ -635,9 +635,9 @@
  * @param   pEsp    Ring1 ESP register value.
  */
-SELMDECL(int) SELMGetRing1Stack(PVM pVM, uint32_t *pSS, uint32_t *pEsp)
+SELMDECL(int) SELMGetRing1Stack(PVM pVM, uint32_t *pSS, PRTGCPTR32 pEsp)
 {
     if (pVM->selm.s.fSyncTSSRing0Stack)
     {
-        GCPTRTYPE(uint8_t *) GCPtrTss = (GCPTRTYPE(uint8_t *))pVM->selm.s.GCPtrGuestTss;
+        RTGCPTR GCPtrTss = pVM->selm.s.GCPtrGuestTss;
         int     rc;
         VBOXTSS tss;
@@ -649,8 +649,8 @@
 
 l_tryagain:
-        rc  = MMGCRamRead(pVM, &tss.ss0,  GCPtrTss + RT_OFFSETOF(VBOXTSS, ss0), sizeof(tss.ss0));
-        rc |= MMGCRamRead(pVM, &tss.esp0, GCPtrTss + RT_OFFSETOF(VBOXTSS, esp0), sizeof(tss.esp0));
+        rc  = MMGCRamRead(pVM, &tss.ss0,  (RCPTRTYPE(void *))(GCPtrTss + RT_OFFSETOF(VBOXTSS, ss0)), sizeof(tss.ss0));
+        rc |= MMGCRamRead(pVM, &tss.esp0, (RCPTRTYPE(void *))(GCPtrTss + RT_OFFSETOF(VBOXTSS, esp0)), sizeof(tss.esp0));
   #ifdef DEBUG
-        rc |= MMGCRamRead(pVM, &tss.offIoBitmap, GCPtrTss + RT_OFFSETOF(VBOXTSS, offIoBitmap), sizeof(tss.offIoBitmap));
+        rc |= MMGCRamRead(pVM, &tss.offIoBitmap, (RCPTRTYPE(void *))(GCPtrTss + RT_OFFSETOF(VBOXTSS, offIoBitmap)), sizeof(tss.offIoBitmap));
   #endif
 
@@ -662,5 +662,5 @@
                 /** @todo might cross page boundary */
                 fTriedAlready = true;
-                rc = PGMPrefetchPage(pVM, GCPtrTss);
+                rc = PGMPrefetchPage(pVM, (RTGCPTR)GCPtrTss);
                 if (rc != VINF_SUCCESS)
                     return rc;
@@ -692,10 +692,10 @@
 #endif
         /* Update our TSS structure for the guest's ring 1 stack */
-        SELMSetRing1Stack(pVM, tss.ss0 | 1, tss.esp0);
+        SELMSetRing1Stack(pVM, tss.ss0 | 1, (RTGCPTR32)tss.esp0);
         pVM->selm.s.fSyncTSSRing0Stack = false;
     }
 
     *pSS  = pVM->selm.s.Tss.ss1;
-    *pEsp = pVM->selm.s.Tss.esp1;
+    *pEsp = (RTGCPTR32)pVM->selm.s.Tss.esp1;
 
     return VINF_SUCCESS;
@@ -820,5 +820,5 @@
      * without having dependencies on the relocation order.
      */
-    return MMHyperHC2GC(pVM, pVM->selm.s.paGdtHC);
+    return (RTGCPTR)MMHyperHC2GC(pVM, pVM->selm.s.paGdtHC);
 }
 #endif /* IN_RING0 */
Index: /trunk/src/VBox/VMM/VMMAll/TRPMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/TRPMAll.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/TRPMAll.cpp	(revision 9212)
@@ -380,5 +380,5 @@
             RTGCPTR pCallerGC;
 #ifdef IN_GC
-            rc = MMGCRamRead(pVM, &pCallerGC, (RTGCPTR)pRegFrame->esp, sizeof(pCallerGC));
+            rc = MMGCRamRead(pVM, &pCallerGC, (void *)pRegFrame->esp, sizeof(pCallerGC));
 #else
             rc = PGMPhysReadGCPtr(pVM, &pCallerGC, (RTGCPTR)pRegFrame->esp, sizeof(pCallerGC));
@@ -449,5 +449,5 @@
         pIDTEntry = (RTGCPTR)((RTGCUINTPTR)GCPtrIDT + sizeof(VBOXIDTE) * iGate);
 #ifdef IN_GC
-        rc = MMGCRamRead(pVM, &GuestIdte, pIDTEntry, sizeof(GuestIdte));
+        rc = MMGCRamRead(pVM, &GuestIdte, (void *)pIDTEntry, sizeof(GuestIdte));
 #else
         rc = PGMPhysReadGCPtr(pVM, &GuestIdte, pIDTEntry, sizeof(GuestIdte));
@@ -464,5 +464,5 @@
             }
 #ifdef IN_GC
-            rc = MMGCRamRead(pVM, &GuestIdte, pIDTEntry, sizeof(GuestIdte));
+            rc = MMGCRamRead(pVM, &GuestIdte, (void *)pIDTEntry, sizeof(GuestIdte));
 #else
             rc = PGMPhysReadGCPtr(pVM, &GuestIdte, pIDTEntry, sizeof(GuestIdte));
@@ -477,6 +477,6 @@
            )
         {
-            RTGCPTR   pHandler, dummy;
-            GCPTRTYPE(uint32_t *) pTrapStackGC;
+            RTGCPTR pHandler, dummy;
+            RTGCPTR pTrapStackGC;
 
             pHandler = (RTGCPTR)((GuestIdte.Gen.u16OffsetHigh << 16) | GuestIdte.Gen.u16OffsetLow);
@@ -509,5 +509,5 @@
                 pGdtEntry = (RTGCPTR)(uintptr_t)&((VBOXDESC *)gdtr.pGdt)[GuestIdte.Gen.u16SegSel >> X86_SEL_SHIFT]; /// @todo fix this
 #ifdef IN_GC
-                rc = MMGCRamRead(pVM, &Desc, pGdtEntry, sizeof(Desc));
+                rc = MMGCRamRead(pVM, &Desc, (void *)pGdtEntry, sizeof(Desc));
 #else
                 rc = PGMPhysReadGCPtr(pVM, &Desc, pGdtEntry, sizeof(Desc));
@@ -524,5 +524,5 @@
                     }
 #ifdef IN_GC
-                    rc = MMGCRamRead(pVM, &Desc, pGdtEntry, sizeof(Desc));
+                    rc = MMGCRamRead(pVM, &Desc, (void *)pGdtEntry, sizeof(Desc));
 #else
                     rc = PGMPhysReadGCPtr(pVM, &Desc, pGdtEntry, sizeof(Desc));
@@ -588,5 +588,5 @@
                 /* Check maximum amount we need (10 when executing in V86 mode) */
                 rc = PGMVerifyAccess(pVM, (RTGCUINTPTR)pTrapStackGC - 10*sizeof(uint32_t), 10 * sizeof(uint32_t), X86_PTE_RW);
-                pTrapStack = pTrapStackGC;
+                pTrapStack = (uint32_t *)pTrapStackGC;
 #else
                 Assert(eflags.Bits.u1VM || (pRegFrame->ss & X86_SEL_RPL) == 0 || (pRegFrame->ss & X86_SEL_RPL) == 3);
@@ -694,5 +694,5 @@
                         STAM_PROFILE_ADV_STOP(&pVM->trpm.s.aStatGCTraps[iOrgTrap], o);
 
-                    CPUMGCCallGuestTrapHandler(pRegFrame, GuestIdte.Gen.u16SegSel | 1, pVM->trpm.s.aGuestTrapHandler[iGate], eflags.u32, ss_r0, (RTGCPTR)esp_r0);
+                    CPUMGCCallGuestTrapHandler(pRegFrame, GuestIdte.Gen.u16SegSel | 1, pVM->trpm.s.aGuestTrapHandler[iGate], eflags.u32, ss_r0, (RTGCPTR32)esp_r0);
                     /* does not return */
 #else
Index: /trunk/src/VBox/VMM/VMMAll/VMMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/VMMAll.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMAll/VMMAll.cpp	(revision 9212)
@@ -40,5 +40,5 @@
 RTGCPTR VMMGetStackGC(PVM pVM)
 {
-    return pVM->vmm.s.pbGCStackBottom;
+    return (RTGCPTR)pVM->vmm.s.pbGCStackBottom;
 }
 
Index: /trunk/src/VBox/VMM/VMMCodingGuidelines.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMCodingGuidelines.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMCodingGuidelines.cpp	(revision 9212)
@@ -42,6 +42,6 @@
  * The rules:
  *
- *      - When declaring pointers in shared structures use the GCPTRTYPE() and
- *        HCPTRTYPE() macros.
+ *      - When declaring pointers in shared structures use the RCPTRTYPE(), 
+ *        R0PTRTYPE() and R3PTRTYPE() macros.
  *
  *      - Use RTGCPTR and RTHCPTR when dealing with the other context in
Index: /trunk/src/VBox/VMM/VMMGC/DBGFGC.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMGC/DBGFGC.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMGC/DBGFGC.cpp	(revision 9212)
@@ -46,5 +46,5 @@
  * @param   uDr6        The DR6 register value.
  */
-DBGFGCDECL(int) DBGFGCTrap01Handler(PVM pVM, PCPUMCTXCORE pRegFrame, RTUINTREG uDr6)
+DBGFGCDECL(int) DBGFGCTrap01Handler(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCUINTREG uDr6)
 {
     const bool fInHyper = !(pRegFrame->ss & X86_SEL_RPL) && !pRegFrame->eflags.Bits.u1VM;
Index: /trunk/src/VBox/VMM/VMMGC/MMRamGC.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMGC/MMRamGC.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMGC/MMRamGC.cpp	(revision 9212)
@@ -138,5 +138,5 @@
      * And mark the relevant guest page as accessed and dirty.
      */
-    PGMGstModifyPage(pVM, pDst, cb, X86_PTE_A | X86_PTE_D, ~(uint64_t)(X86_PTE_A | X86_PTE_D));
+    PGMGstModifyPage(pVM, (RTGCPTR)pDst, cb, X86_PTE_A | X86_PTE_D, ~(uint64_t)(X86_PTE_A | X86_PTE_D));
 
     return rc;
Index: /trunk/src/VBox/VMM/VMMGC/SELMGC.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMGC/SELMGC.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMGC/SELMGC.cpp	(revision 9212)
@@ -205,5 +205,5 @@
         /** @todo should check if any affected selectors are loaded. */
         uint32_t cb;
-        rc = EMInterpretInstruction(pVM, pRegFrame, pvFault, &cb);
+        rc = EMInterpretInstruction(pVM, pRegFrame, (RTGCPTR)pvFault, &cb);
         if (VBOX_SUCCESS(rc) && cb)
         {
@@ -291,5 +291,5 @@
      */
     uint32_t cb;
-    int rc = EMInterpretInstruction(pVM, pRegFrame, pvFault, &cb);
+    int rc = EMInterpretInstruction(pVM, pRegFrame, (RTGCPTR)pvFault, &cb);
     if (VBOX_SUCCESS(rc) && cb)
     {
@@ -321,5 +321,5 @@
                     {
                         /* Shadow page table might be out of sync */
-                        rc = PGMPrefetchPage(pVM, (uint8_t *)pGuestTSS + offIntRedirBitmap + i*8);
+                        rc = PGMPrefetchPage(pVM, (RTGCPTR)((uint8_t *)pGuestTSS + offIntRedirBitmap + i*8));
                         if (VBOX_FAILURE(rc))
                         {
@@ -404,2 +404,77 @@
 }
 
+
+/**
+ * Gets ss:esp for ring1 in main Hypervisor's TSS.
+ *
+ * @returns VBox status code.
+ * @param   pVM     VM Handle.
+ * @param   pSS     Ring1 SS register value.
+ * @param   pEsp    Ring1 ESP register value.
+ */
+SELMGCDECL(int) SELMGCGetRing1Stack(PVM pVM, uint32_t *pSS, uint32_t *pEsp)
+{
+    if (pVM->selm.s.fSyncTSSRing0Stack)
+    {
+        RCPTRTYPE(uint8_t *) GCPtrTss = (RCPTRTYPE(uint8_t *))pVM->selm.s.GCPtrGuestTss;
+        int     rc;
+        VBOXTSS tss;
+
+        Assert(pVM->selm.s.GCPtrGuestTss && pVM->selm.s.cbMonitoredGuestTss);
+
+#ifdef IN_GC
+        bool    fTriedAlready = false;
+
+l_tryagain:
+        rc  = MMGCRamRead(pVM, &tss.ss0,  GCPtrTss + RT_OFFSETOF(VBOXTSS, ss0), sizeof(tss.ss0));
+        rc |= MMGCRamRead(pVM, &tss.esp0, GCPtrTss + RT_OFFSETOF(VBOXTSS, esp0), sizeof(tss.esp0));
+  #ifdef DEBUG
+        rc |= MMGCRamRead(pVM, &tss.offIoBitmap, GCPtrTss + RT_OFFSETOF(VBOXTSS, offIoBitmap), sizeof(tss.offIoBitmap));
+  #endif
+
+        if (VBOX_FAILURE(rc))
+        {
+            if (!fTriedAlready)
+            {
+                /* Shadow page might be out of sync. Sync and try again */
+                /** @todo might cross page boundary */
+                fTriedAlready = true;
+                rc = PGMPrefetchPage(pVM, (RTGCPTR)GCPtrTss);
+                if (rc != VINF_SUCCESS)
+                    return rc;
+                goto l_tryagain;
+            }
+            AssertMsgFailed(("Unable to read TSS structure at %08X\n", GCPtrTss));
+            return rc;
+        }
+
+#else /* !IN_GC */
+        /* Reading too much. Could be cheaper than two seperate calls though. */
+        rc = PGMPhysReadGCPtr(pVM, &tss, GCPtrTss, sizeof(VBOXTSS));
+        if (VBOX_FAILURE(rc))
+        {
+            AssertReleaseMsgFailed(("Unable to read TSS structure at %08X\n", GCPtrTss));
+            return rc;
+        }
+#endif /* !IN_GC */
+
+#ifdef LOG_ENABLED
+        uint32_t ssr0  = pVM->selm.s.Tss.ss1;
+        uint32_t espr0 = pVM->selm.s.Tss.esp1;
+        ssr0 &= ~1;
+
+        if (ssr0 != tss.ss0 || espr0 != tss.esp0)
+            Log(("SELMGetRing1Stack: Updating TSS ring 0 stack to %04X:%08X\n", tss.ss0, tss.esp0));
+
+        Log(("offIoBitmap=%#x\n", tss.offIoBitmap));
+#endif
+        /* Update our TSS structure for the guest's ring 1 stack */
+        SELMSetRing1Stack(pVM, tss.ss0 | 1, (RTGCPTR32)tss.esp0);
+        pVM->selm.s.fSyncTSSRing0Stack = false;
+    }
+
+    *pSS  = pVM->selm.s.Tss.ss1;
+    *pEsp = pVM->selm.s.Tss.esp1;
+
+    return VINF_SUCCESS;
+}
Index: /trunk/src/VBox/VMM/VMMGC/TRPMGC.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMGC/TRPMGC.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMGC/TRPMGC.cpp	(revision 9212)
@@ -69,5 +69,5 @@
      * Install handler.
      */
-    pVM->trpm.s.aTmpTrapHandlers[iTrap] = (RTGCPTR)(RTGCUINTPTR)pfnHandler;
+    pVM->trpm.s.aTmpTrapHandlers[iTrap] = (RTGCPTR32)(RTGCUINTPTR)pfnHandler;
     return VINF_SUCCESS;
 }
@@ -115,5 +115,5 @@
 
     AssertMsg(offRange < (uint32_t)cbIDT+1, ("pvFault=%VGv GCPtrIDT=%VGv-%VGv pvRange=%VGv\n", pvFault, GCPtrIDT, GCPtrIDTEnd, pvRange));
-    Assert(pvRange == GCPtrIDT);
+    Assert((RTGCPTR)pvRange == GCPtrIDT);
 
 #if 0
Index: /trunk/src/VBox/VMM/VMMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/VMMInternal.h	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMInternal.h	(revision 9212)
@@ -178,5 +178,5 @@
     R0PTRTYPE(PFNVMMSWITCHERHC) pfnR0HostToGuest;
     /** Guest to host switcher entry point. */
-    GCPTRTYPE(PFNVMMSWITCHERGC) pfnGCGuestToHost;
+    RCPTRTYPE(PFNVMMSWITCHERGC) pfnGCGuestToHost;
     /** Call Trampoline. See vmmGCCallTrampoline(). */
     RTGCPTR32                   pfnGCCallTrampoline;
@@ -197,11 +197,11 @@
     R3PTRTYPE(uint8_t *)        pbHCStack;
     /** Pointer to the bottom of the stack - needed for doing relocations. */
-    GCPTRTYPE(uint8_t *)        pbGCStack;
+    RCPTRTYPE(uint8_t *)        pbGCStack;
     /** Pointer to the bottom of the stack - needed for doing relocations. */
-    GCPTRTYPE(uint8_t *)        pbGCStackBottom;
+    RCPTRTYPE(uint8_t *)        pbGCStackBottom;
 
     /** Pointer to the GC logger instance - GC Ptr.
      * This is NULL if logging is disabled. */
-    GCPTRTYPE(PRTLOGGERGC)      pLoggerGC;
+    RCPTRTYPE(PRTLOGGERGC)      pLoggerGC;
     /** Size of the allocated logger instance (pLoggerGC/pLoggerHC). */
     RTUINT                      cbLoggerGC;
@@ -216,5 +216,5 @@
 #ifdef VBOX_WITH_GC_AND_R0_RELEASE_LOG
     /** Pointer to the GC release logger instance - GC Ptr. */
-    GCPTRTYPE(PRTLOGGERGC)      pRelLoggerGC;
+    RCPTRTYPE(PRTLOGGERGC)      pRelLoggerGC;
     /** Size of the allocated release logger instance (pRelLoggerGC/pRelLoggerHC).
      * This may differ from cbLoggerGC. */
Index: /trunk/src/VBox/VMM/VMMR0/DBGFR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/DBGFR0.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMR0/DBGFR0.cpp	(revision 9212)
@@ -45,5 +45,5 @@
  * @param   uDr6        The DR6 register value.
  */
-DBGFR0DECL(int) DBGFR0Trap01Handler(PVM pVM, PCPUMCTXCORE pRegFrame, RTUINTREG uDr6)
+DBGFR0DECL(int) DBGFR0Trap01Handler(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCUINTREG uDr6)
 {
     /** @todo Intel docs say that X86_DR6_BS has the highest priority... */
Index: /trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp	(revision 9212)
@@ -681,6 +681,6 @@
     pVMCB->guest.u64RAX    = pCtx->eax;
 
-    /* vmrun will fail otherwise. */
-    pVMCB->guest.u64EFER   = MSR_K6_EFER_SVME;
+    /* vmrun will fail without MSR_K6_EFER_SVME. */
+    pVMCB->guest.u64EFER   = pCtx->msrEFER | MSR_K6_EFER_SVME;
 
     /** TSC offset. */
@@ -696,11 +696,10 @@
     }
 
-    /** @todo 64 bits stuff (?):
-     * - STAR
-     * - LSTAR
-     * - CSTAR
-     * - SFMASK
-     * - KernelGSBase
-     */
+    /* Sync the various msrs for 64 bits mode. */
+    pVMCB->guest.u64STAR            = pCtx->msrSTAR;            /* legacy syscall eip, cs & ss */
+    pVMCB->guest.u64LSTAR           = pCtx->msrLSTAR;           /* 64 bits mode syscall rip */
+    pVMCB->guest.u64CSTAR           = pCtx->msrCSTAR;           /* compatibility mode syscall rip */
+    pVMCB->guest.u64SFMASK          = pCtx->msrSFMASK;          /* syscall flag mask */
+    pVMCB->guest.u64KernelGSBase    = pCtx->msrKERNELGSBASE;    /* swapgs exchange value */
 
 #ifdef DEBUG
Index: /trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp	(revision 9211)
+++ /trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp	(revision 9212)
@@ -273,20 +273,4 @@
     AssertRC(rc);
 
-    /* VMX_VMCS_CTRL_ENTRY_CONTROLS
-     * Set required bits to one and zero according to the MSR capabilities.
-     */
-    val  = (pVM->hwaccm.s.vmx.msr.vmx_entry & 0xFFFFFFFF);
-    if (pVM->hwaccm.s.cpuid.u32AMDFeatureEDX & X86_CPUID_AMD_FEATURE_EDX_LONG_MODE)
-    {
-        /** @todo 32 bits guest mode only for now. */
-        /* val |= VMX_VMCS_CTRL_ENTRY_CONTROLS_IA64_MODE; */
-    }
-    /* Mask away the bits that the CPU doesn't support */
-    /** @todo make sure they don't conflict with the above requirements. */
-    val &= (pVM->hwaccm.s.vmx.msr.vmx_entry >> 32ULL);
-    /* else Must be zero when AMD64 is not available. */
-    rc = VMXWriteVMCS(VMX_VMCS_CTRL_ENTRY_CONTROLS, val);
-    AssertRC(rc);
-
     /* VMX_VMCS_CTRL_EXIT_CONTROLS
      * Set required bits to one and zero according to the MSR capabilities.
@@ -958,4 +942,20 @@
         STAM_COUNTER_INC(&pVM->hwaccm.s.StatTSCIntercept);
     }
+
+    /* VMX_VMCS_CTRL_ENTRY_CONTROLS
+     * Set required bits to one and zero according to the MSR capabilities.
+     */
+    val = (pVM->hwaccm.s.vmx.msr.vmx_entry & 0xFFFFFFFF);
+
+    /* 64 bits guest mode? */
+    if (pCtx->msrEFER & MSR_K6_EFER_LMA)
+        val |= VMX_VMCS_CTRL_ENTRY_CONTROLS_IA64_MODE;
+
+    /* Mask away the bits that the CPU doesn't support */
+    /** @todo make sure they don't conflict with the above requirements. */
+    val &= (pVM->hwaccm.s.vmx.msr.vmx_entry >> 32ULL);
+    /* else Must be zero when AMD64 is not available. */
+    rc = VMXWriteVMCS(VMX_VMCS_CTRL_ENTRY_CONTROLS, val);
+    AssertRC(rc);
 
     /* Done. */
Index: /trunk/src/recompiler/target-i386/helper.c
===================================================================
--- /trunk/src/recompiler/target-i386/helper.c	(revision 9211)
+++ /trunk/src/recompiler/target-i386/helper.c	(revision 9212)
@@ -1340,5 +1340,5 @@
     }
     if (env->cr[0] & CR0_PE_MASK) {
-#if TARGET_X86_64
+#ifdef TARGET_X86_64
         if (env->hflags & HF_LMA_MASK) {
             do_interrupt64(intno, is_int, error_code, next_eip, is_hw);
