return (level & 0xffffff00) == 0x40000000;
}
+
/*
*----------------------------------------------------------------------
*
- * CPUID_LevelUsesEcx --
+ * CPUID_LevelMaxRsvd --
*
- * Returns TRUE for leaves that support input ECX != 0 (subleaves).
+ * Returns maximum number of reserved sub-leaves for a given CPUID leaf.
*
*----------------------------------------------------------------------
*/
-static INLINE Bool
-CPUID_LevelUsesEcx(uint32 level) {
+static INLINE uint32
+CPUID_LevelMaxRsvd(uint32 level) {
switch (level)
{
-#define CPUIDLEVEL(t, s, v, c, h) \
- case v: \
- return c != 0;
+#define CPUIDLEVEL(t, s, v, c, h) \
+ case v: \
+ return c;
CPUID_KNOWN_LEVELS
#undef CPUIDLEVEL
-
- default:
- return FALSE;
}
+ return 0;
+}
+
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * CPUID_LevelUsesEcx --
+ *
+ * Returns TRUE for leaves that support input ECX != 0 (subleaves).
+ *
+ *----------------------------------------------------------------------
+ */
+
+static INLINE Bool
+CPUID_LevelUsesEcx(uint32 level) {
+ return CPUID_LevelMaxRsvd(level) != 0;
}
#ifdef _MSC_VER