Index: /trunk/include/VBox/vmm/nem.h
===================================================================
--- /trunk/include/VBox/vmm/nem.h	(revision 92448)
+++ /trunk/include/VBox/vmm/nem.h	(revision 92449)
@@ -187,5 +187,16 @@
  */
 VMM_INT_DECL(bool) NEMHCIsLongModeAllowed(PVMCC pVM);
+VMM_INT_DECL(uint32_t) NEMHCGetFeatures(PVMCC pVM);
 VMM_INT_DECL(int)  NEMImportStateOnDemand(PVMCPUCC pVCpu, uint64_t fWhat);
+
+/** @name NEM_FEAT_F_XXX - Features supported by the NEM backend
+ * @{ */
+/** NEM backend uses nested paging for the guest. */
+#define NEM_FEAT_F_NESTED_PAGING    RT_BIT(0)
+/** NEM backend uses full (unrestricted) guest execution. */
+#define NEM_FEAT_F_FULL_GST_EXEC    RT_BIT(1)
+/** NEM backend offers an xsave/xrstor interface. */
+#define NEM_FEAT_F_XSAVE_XRSTOR     RT_BIT(2)
+/** @} */
 
 VMM_INT_DECL(void) NEMHCNotifyHandlerPhysicalRegister(PVMCC pVM, PGMPHYSHANDLERKIND enmKind, RTGCPHYS GCPhys, RTGCPHYS cb);
Index: /trunk/src/VBox/VMM/VMMAll/NEMAll.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/NEMAll.cpp	(revision 92448)
+++ /trunk/src/VBox/VMM/VMMAll/NEMAll.cpp	(revision 92449)
@@ -89,4 +89,13 @@
 
 #ifndef VBOX_WITH_NATIVE_NEM
+VMM_INT_DECL(uint32_t) NEMHCGetFeatures(PVMCC pVM)
+{
+    RT_NOREF(pVM);
+    return 0;
+}
+#endif
+
+
+#ifndef VBOX_WITH_NATIVE_NEM
 VMM_INT_DECL(int) NEMImportStateOnDemand(PVMCPUCC pVCpu, uint64_t fWhat)
 {
Index: /trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h	(revision 92448)
+++ /trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h	(revision 92449)
@@ -5118,2 +5118,17 @@
 }
 
+
+/**
+ * Returns features supported by the NEM backend.
+ *
+ * @returns Flags of features supported by the native NEM backend.
+ * @param   pVM             The cross context VM structure.
+ */
+VMM_INT_DECL(uint32_t) NEMHCGetFeatures(PVMCC pVM)
+{
+    RT_NOREF(pVM);
+    /** @todo Make use of the WHvGetVirtualProcessorXsaveState/WHvSetVirtualProcessorXsaveState
+     * interface added in 2019 to enable passthrough of xsave/xrstor (and depending) features to the guest. */
+    /** @todo Is NEM_FEAT_F_FULL_GST_EXEC always true? */
+    return NEM_FEAT_F_NESTED_PAGING | NEM_FEAT_F_FULL_GST_EXEC;
+}
Index: /trunk/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp	(revision 92448)
+++ /trunk/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp	(revision 92449)
@@ -4324,5 +4324,7 @@
     bool const fMayHaveXSave = fNestedPagingAndFullGuestExec
                             && pVM->cpum.s.HostFeatures.fXSaveRstor
-                            && pVM->cpum.s.HostFeatures.fOpSysXSaveRstor;
+                            && pVM->cpum.s.HostFeatures.fOpSysXSaveRstor
+                            && (   !VM_IS_NEM_ENABLED(pVM)
+                                || (NEMHCGetFeatures(pVM) & NEM_FEAT_F_XSAVE_XRSTOR));
     uint64_t const fXStateHostMask = pVM->cpum.s.fXStateHostMask;
 
@@ -4525,5 +4527,9 @@
     RT_ZERO(Config);
 
-    int rc = cpumR3CpuIdReadConfig(pVM, &Config, pCpumCfg, HMAreNestedPagingAndFullGuestExecEnabled(pVM));
+    bool const fNestedPagingAndFullGuestExec =   VM_IS_NEM_ENABLED(pVM)
+                                               ?     ((NEMHCGetFeatures(pVM) & (NEM_FEAT_F_NESTED_PAGING | NEM_FEAT_F_FULL_GST_EXEC))
+                                                  == (NEM_FEAT_F_NESTED_PAGING | NEM_FEAT_F_FULL_GST_EXEC))
+                                               : HMAreNestedPagingAndFullGuestExecEnabled(pVM);
+    int rc = cpumR3CpuIdReadConfig(pVM, &Config, pCpumCfg, fNestedPagingAndFullGuestExec);
     AssertRCReturn(rc, rc);
 
