Index: /trunk/src/VBox/VMM/EMInternal.h
===================================================================
--- /trunk/src/VBox/VMM/EMInternal.h	(revision 467)
+++ /trunk/src/VBox/VMM/EMInternal.h	(revision 468)
@@ -125,4 +125,5 @@
     STAMCOUNTER             StatGCAdc;
     STAMCOUNTER             StatHCAdc;
+    STAMCOUNTER             StatGCRdtsc;
 
     STAMCOUNTER             StatGCInterpretFailed;
@@ -188,4 +189,5 @@
     STAMCOUNTER             StatGCFailedWbInvd;
     STAMCOUNTER             StatHCFailedWbInvd;
+    STAMCOUNTER             StatGCFailedRdtsc;
 
     STAMCOUNTER             StatGCFailedUserMode;
Index: /trunk/src/VBox/VMM/VMMAll/EMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/EMAll.cpp	(revision 467)
+++ /trunk/src/VBox/VMM/VMMAll/EMAll.cpp	(revision 468)
@@ -36,4 +36,5 @@
 #include <VBox/vm.h>
 #include <VBox/hwaccm.h>
+#include <VBox/tm.h>
 
 #include <VBox/param.h>
@@ -1715,4 +1716,23 @@
 }
 
+#ifdef IN_GC
+/**
+ * RDTSC Emulation.
+ */
+static int emInterpretRdtsc(PVM pVM, PDISCPUSTATE pCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize)
+{
+    unsigned uCR4 = CPUMGetGuestCR4(pVM);
+
+    if (uCR4 & X86_CR4_TSD)
+        return VERR_EM_INTERPRETER; /* genuine #GP */
+
+    uint64_t uTicks = TMCpuTickGet(pVM);
+
+    pRegFrame->eax = uTicks;
+    pRegFrame->edx = (uTicks >> 32ULL);
+
+    return VINF_SUCCESS;
+}
+#endif
 
 /**
@@ -1827,4 +1847,5 @@
         INTERPRET_CASE(OP_SUB,Sub);
 #ifdef IN_GC
+        INTERPRET_CASE(OP_RDTSC,Rdtsc);
         INTERPRET_CASE(OP_STI,Sti);
 #endif
Index: /trunk/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp	(revision 467)
+++ /trunk/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp	(revision 468)
@@ -561,4 +561,5 @@
         case OP_LLDT:
         case OP_STI:
+        case OP_RDTSC:
         {
             uint32_t cbIgnored;
@@ -569,20 +570,4 @@
                 rc = VINF_EM_RAW_EXCEPTION_PRIVILEGED;
             return trpmGCExitTrap(pVM, rc, pRegFrame);
-        }
-
-        case OP_RDTSC:
-        {
-            unsigned uCR4 = CPUMGetGuestCR4(pVM);
-
-            if (uCR4 & X86_CR4_TSD)
-                break; /* genuine #GP */
-
-            uint64_t uTicks = TMCpuTickGet(pVM);
-
-            pRegFrame->eax = uTicks;
-            pRegFrame->edx = (uTicks >> 32ULL);
-
-            pRegFrame->eip += pCpu->opsize;
-            return trpmGCExitTrap(pVM, VINF_SUCCESS, pRegFrame);
         }
     }
