Index: /trunk/src/VBox/VMM/VMMR0/HMR0Mixed.mac
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMR0Mixed.mac	(revision 45340)
+++ /trunk/src/VBox/VMM/VMMR0/HMR0Mixed.mac	(revision 45341)
@@ -131,7 +131,11 @@
 
     ; Restore CR2
-    mov     ebx, [xSI + CPUMCTX.cr2]
+    mov     xBX, [xSI + CPUMCTX.cr2]
+    mov     xDX, cr2
+    cmp     xBX, xDX
+    je      .skipcr2write32
     mov     cr2, xBX
 
+.skipcr2write32:
     mov     eax, VMX_VMCS_HOST_RSP
     vmwrite xAX, xSP
@@ -185,4 +189,9 @@
     mov     [ss:xDI + CPUMCTX.esi], esi
     mov     [ss:xDI + CPUMCTX.ebp], ebp
+%ifndef VBOX_WITH_OLD_VTX_CODE
+    mov     xAX, cr2
+    mov     [ss:xDI + CPUMCTX.cr2], xAX
+%endif
+
 %ifdef RT_ARCH_AMD64
     pop     xAX                                 ; the guest edi we pushed above
@@ -233,7 +242,9 @@
 .no_cached_reads:
 
+%ifdef VBOX_WITH_OLD_VTX_CODE
     ; Save CR2 for EPT
     mov     xAX, cr2
     mov     [ss:xDX + VMCSCACHE.cr2], xAX
+%endif
 %endif
 
@@ -440,6 +451,10 @@
     ; Restore CR2
     mov     rbx, qword [xSI + CPUMCTX.cr2]
+    mov     rdx, cr2
+    cmp     rbx, rdx
+    je      .skipcr2write
     mov     cr2, rbx
 
+.skipcr2write:
     mov     eax, VMX_VMCS_HOST_RSP
     vmwrite xAX, xSP
@@ -509,4 +524,8 @@
     mov     qword [xDI + CPUMCTX.r14], r14
     mov     qword [xDI + CPUMCTX.r15], r15
+%ifndef VBOX_WITH_OLD_VTX_CODE
+    mov     rax, cr2
+    mov     qword [xDI + CPUMCTX.cr2], rax
+%endif
 
     pop     xAX                                 ; the guest edi we pushed above
@@ -563,7 +582,9 @@
 .no_cached_reads:
 
+%ifdef VBOX_WITH_OLD_VTX_CODE
     ; Save CR2 for EPT
     mov     xAX, cr2
     mov     [xDX + VMCSCACHE.cr2], xAX
+%endif
 %endif
 
