Index: trunk/src/VBox/VMM/VMMAll/HMVMXAll.cpp
===================================================================
--- trunk/src/VBox/VMM/VMMAll/HMVMXAll.cpp	(revision 74016)
+++ trunk/src/VBox/VMM/VMMAll/HMVMXAll.cpp	(revision 74017)
@@ -34,95 +34,100 @@
 {
     /* Internal processing errors. */
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_1                 , "Ipe_1"         ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_2                 , "Ipe_2"         ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_3                 , "Ipe_3"         ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_4                 , "Ipe_4"         ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_5                 , "Ipe_5"         ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_6                 , "Ipe_6"         ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_7                 , "Ipe_7"         ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_8                 , "Ipe_8"         ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_9                 , "Ipe_9"         ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_1                 , "Ipe_1"          ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_2                 , "Ipe_2"          ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_3                 , "Ipe_3"          ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_4                 , "Ipe_4"          ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_5                 , "Ipe_5"          ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_6                 , "Ipe_6"          ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_7                 , "Ipe_7"          ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_8                 , "Ipe_8"          ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Ipe_9                 , "Ipe_9"          ),
     /* VMXON. */
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_A20M            , "A20M"          ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cpl             , "Cpl"           ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cr0Fixed0       , "Cr0Fixed0"     ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cr4Fixed0       , "Cr4Fixed0"     ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Intercept       , "Intercept"     ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_LongModeCS      , "LongModeCS"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_MsrFeatCtl      , "MsrFeatCtl"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrAbnormal     , "PtrAbnormal"   ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrAlign        , "PtrAlign"      ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrMap          , "PtrMap"        ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrPhysRead     , "PtrPhysRead"   ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrWidth        , "PtrWidth"      ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_RealOrV86Mode   , "RealOrV86Mode" ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Success         , "Success"       ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_ShadowVmcs      , "ShadowVmcs"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmxAlreadyRoot  , "VmxAlreadyRoot"),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Vmxe            , "Vmxe"          ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmcsRevId       , "VmcsRevId"     ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmxRootCpl      , "VmxRootCpl"    ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_A20M            , "A20M"           ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cpl             , "Cpl"            ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cr0Fixed0       , "Cr0Fixed0"      ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Cr4Fixed0       , "Cr4Fixed0"      ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Intercept       , "Intercept"      ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_LongModeCS      , "LongModeCS"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_MsrFeatCtl      , "MsrFeatCtl"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrAbnormal     , "PtrAbnormal"    ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrAlign        , "PtrAlign"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrMap          , "PtrMap"         ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrPhysRead     , "PtrPhysRead"    ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_PtrWidth        , "PtrWidth"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_RealOrV86Mode   , "RealOrV86Mode"  ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Success         , "Success"        ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_ShadowVmcs      , "ShadowVmcs"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmxAlreadyRoot  , "VmxAlreadyRoot" ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_Vmxe            , "Vmxe"           ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmcsRevId       , "VmcsRevId"      ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxon_VmxRootCpl      , "VmxRootCpl"     ),
     /* VMXOFF. */
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Cpl            , "Cpl"           ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Intercept      , "Intercept"     ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_LongModeCS     , "LongModeCS"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_RealOrV86Mode  , "RealOrV86Mode" ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Success        , "Success"       ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Vmxe           , "Vmxe"          ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_VmxRoot        , "VmxRoot"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Cpl            , "Cpl"            ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Intercept      , "Intercept"      ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_LongModeCS     , "LongModeCS"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_RealOrV86Mode  , "RealOrV86Mode"  ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Success        , "Success"        ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_Vmxe           , "Vmxe"           ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmxoff_VmxRoot        , "VmxRoot"        ),
     /* VMPTRLD. */
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_Cpl           , "Cpl"           ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_LongModeCS    , "LongModeCS"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrAbnormal   , "PtrAbnormal"   ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrAlign      , "PtrAlign"      ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrMap        , "PtrMap"        ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrReadPhys   , "PtrReadPhys"   ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrVmxon      , "PtrVmxon"      ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrWidth      , "PtrWidth"      ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_RealOrV86Mode , "RealOrV86Mode" ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_ShadowVmcs    , "ShadowVmcs"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_Success       , "Success"       ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_VmcsRevId     , "VmcsRevId"     ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_VmxRoot       , "VmxRoot"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_Cpl           , "Cpl"            ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_LongModeCS    , "LongModeCS"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrAbnormal   , "PtrAbnormal"    ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrAlign      , "PtrAlign"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrMap        , "PtrMap"         ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrReadPhys   , "PtrReadPhys"    ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrVmxon      , "PtrVmxon"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_PtrWidth      , "PtrWidth"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_RealOrV86Mode , "RealOrV86Mode"  ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_ShadowVmcs    , "ShadowVmcs"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_Success       , "Success"        ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_VmcsRevId     , "VmcsRevId"      ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrld_VmxRoot       , "VmxRoot"        ),
     /* VMPTRST. */
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_Cpl           , "Cpl"           ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_LongModeCS    , "LongModeCS"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_PtrMap        , "PtrMap"        ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_RealOrV86Mode , "RealOrV86Mode" ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_Success       , "Success"       ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_VmxRoot       , "VmxRoot"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_Cpl           , "Cpl"            ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_LongModeCS    , "LongModeCS"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_PtrMap        , "PtrMap"         ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_RealOrV86Mode , "RealOrV86Mode"  ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_Success       , "Success"        ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmptrst_VmxRoot       , "VmxRoot"        ),
     /* VMCLEAR. */
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_Cpl           , "Cpl"           ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_LongModeCS    , "LongModeCS"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrAbnormal   , "PtrAbnormal"   ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrAlign      , "PtrAlign"      ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrMap        , "PtrMap"        ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrReadPhys   , "PtrReadPhys"   ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrVmxon      , "PtrVmxon"      ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrWidth      , "PtrWidth"      ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_RealOrV86Mode , "RealOrV86Mode" ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_Success       , "Success"       ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_VmxRoot       , "VmxRoot"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_Cpl           , "Cpl"            ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_LongModeCS    , "LongModeCS"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrAbnormal   , "PtrAbnormal"    ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrAlign      , "PtrAlign"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrMap        , "PtrMap"         ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrReadPhys   , "PtrReadPhys"    ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrVmxon      , "PtrVmxon"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_PtrWidth      , "PtrWidth"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_RealOrV86Mode , "RealOrV86Mode"  ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_Success       , "Success"        ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmclear_VmxRoot       , "VmxRoot"        ),
     /* VMWRITE. */
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_Cpl           , "Cpl"           ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_FieldInvalid  , "FieldInvalid"  ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_FieldRo       , "FieldRo"       ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_LinkPtrInvalid, "LinkPtrInvalid"),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_LongModeCS    , "LongModeCS"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_PtrInvalid    , "PtrInvalid"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_PtrMap        , "PtrMap"        ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_RealOrV86Mode , "RealOrV86Mode" ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_Success       , "Success"       ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_VmxRoot       , "VmxRoot"       ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_Cpl           , "Cpl"            ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_FieldInvalid  , "FieldInvalid"   ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_FieldRo       , "FieldRo"        ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_LinkPtrInvalid, "LinkPtrInvalid" ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_LongModeCS    , "LongModeCS"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_PtrInvalid    , "PtrInvalid"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_PtrMap        , "PtrMap"         ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_RealOrV86Mode , "RealOrV86Mode"  ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_Success       , "Success"        ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmwrite_VmxRoot       , "VmxRoot"        ),
     /* VMREAD. */
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_Cpl            , "Cpl"           ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_FieldInvalid   , "FieldInvalid"  ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_LinkPtrInvalid , "LinkPtrInvalid"),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_LongModeCS     , "LongModeCS"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_PtrInvalid     , "PtrInvalid"    ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_PtrMap         , "PtrMap"        ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_RealOrV86Mode  , "RealOrV86Mode" ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_Success        , "Success"       ),
-    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_VmxRoot        , "VmxRoot"       )
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_Cpl            , "Cpl"            ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_FieldInvalid   , "FieldInvalid"   ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_LinkPtrInvalid , "LinkPtrInvalid" ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_LongModeCS     , "LongModeCS"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_PtrInvalid     , "PtrInvalid"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_PtrMap         , "PtrMap"         ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_RealOrV86Mode  , "RealOrV86Mode"  ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_Success        , "Success"        ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmread_VmxRoot        , "VmxRoot"        ),
+    /* VMLAUNCH. */
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmlaunch_Cpl          , "Cpl"            ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmlaunch_LongModeCS   , "LongModeCS"     ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmlaunch_RealOrV86Mode, "RealOrV86Mode"  ),
+    VMX_INSTR_DIAG_DESC(kVmxVInstrDiag_Vmlaunch_VmxRoot      , "VmxRoot"        )
     /* kVmxVInstrDiag_Last */
 };
Index: trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h
===================================================================
--- trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h	(revision 74016)
+++ trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h	(revision 74017)
@@ -1949,4 +1949,38 @@
 
 /**
+ * VMLAUNCH instruction execution worker.
+ *
+ * @param   pVCpu           The cross context virtual CPU structure.
+ * @param   cbInstr         The instruction length.
+ * @param   pExitInfo       Pointer to the VM-exit instruction information struct.
+ *                          Optional, can  be NULL.
+ *
+ * @remarks Common VMX instruction checks are already expected to by the caller,
+ *          i.e. CR4.VMXE, Real/V86 mode, EFER/CS.L checks.
+ */
+IEM_STATIC VBOXSTRICTRC iemVmxVmlaunch(PVMCPU pVCpu, uint8_t cbInstr, PCVMXVEXITINFO pExitInfo)
+{
+    if (IEM_IS_VMX_NON_ROOT_MODE(pVCpu))
+    {
+        RT_NOREF(pExitInfo);
+        /** @todo NSTVMX: intercept. */
+    }
+    Assert(IEM_IS_VMX_ROOT_MODE(pVCpu));
+
+    /* CPL. */
+    if (CPUMGetGuestCPL(pVCpu) > 0)
+    {
+        Log(("vmlaunch: CPL %u -> #GP(0)\n", pVCpu->iem.s.uCpl));
+        pVCpu->cpum.GstCtx.hwvirt.vmx.enmInstrDiag = kVmxVInstrDiag_Vmlaunch_Cpl;
+        return iemRaiseGeneralProtectionFault0(pVCpu);
+    }
+
+    /** @todo NSTVMX: VMLAUNCH impl.   */
+    iemRegAddToRipAndClearRF(pVCpu, cbInstr);
+    return VERR_IEM_IPE_2;
+}
+
+
+/**
  * Implements 'VMXON'.
  */
@@ -1959,4 +1993,7 @@
 /**
  * Implements 'VMXOFF'.
+ *
+ * @remarks Common VMX instruction checks are already expected to by the caller,
+ *          i.e. CR4.VMXE, Real/V86 mode, EFER/CS.L checks.
  */
 IEM_CIMPL_DEF_0(iemCImpl_vmxoff)
@@ -1966,7 +2003,4 @@
     return VINF_EM_RAW_EMULATE_INSTR;
 # else
-    IEM_VMX_IN_VMX_OPERATION(pVCpu, "vmxoff", kVmxVInstrDiag_Vmxoff);
-    IEM_VMX_INSTR_CHECKS(pVCpu, "vmxoff", kVmxVInstrDiag_Vmxoff);
-
     if (IEM_IS_VMX_NON_ROOT_MODE(pVCpu))
     {
@@ -2019,7 +2053,5 @@
 IEM_CIMPL_DEF_0(iemCImpl_vmlaunch)
 {
-    RT_NOREF2(pVCpu, cbInstr);
-    /** @todo NSTVMX: VMLAUNCH impl. */
-    return VERR_IEM_IPE_2;
+    return iemVmxVmlaunch(pVCpu, cbInstr, NULL /* pExitInfo */);
 }
 
Index: trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
===================================================================
--- trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h	(revision 74016)
+++ trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h	(revision 74017)
@@ -252,4 +252,6 @@
 {
     IEMOP_MNEMONIC(vmlaunch, "vmlaunch");
+    IEMOP_HLP_IN_VMX_OPERATION("vmlaunch", kVmxVInstrDiag_Vmlaunch);
+    IEMOP_HLP_VMX_INSTR("vmalunch", kVmxVInstrDiag_Vmlaunch);
     IEMOP_HLP_DONE_DECODING();
     return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_vmlaunch);
@@ -277,4 +279,6 @@
 {
     IEMOP_MNEMONIC(vmxoff, "vmxoff");
+    IEMOP_HLP_IN_VMX_OPERATION("vmxoff", kVmxVInstrDiag_Vmxoff);
+    IEMOP_HLP_VMX_INSTR("vmxoff", kVmxVInstrDiag_Vmxoff);
     IEMOP_HLP_DONE_DECODING();
     return IEM_MC_DEFER_TO_CIMPL_0(iemCImpl_vmxoff);
