#undef FIELD
#undef FLAG
+/* Uses of CPUID_INTERNAL_REG_* (set above) are of type CpuidReg. */
+#define CPUID_FEAT_REG(name) ((CpuidReg)CPUID_INTERNAL_REG_##name)
+
/*
* CPUID_MASK --
* CPUID_SHIFT --
#define CPUID_MASK(eaxIn, reg, flag) \
({ \
ASSERT_ON_COMPILE(eaxIn == CPUID_INTERNAL_EAXIN_##flag && \
- CPUID_REG_##reg == (CpuidReg)CPUID_INTERNAL_REG_##flag); \
+ CPUID_REG_##reg == CPUID_FEAT_REG(flag)); \
CPUID_INTERNAL_MASK_##flag; \
})
#define CPUID_SHIFT(eaxIn, reg, flag) \
({ \
ASSERT_ON_COMPILE(eaxIn == CPUID_INTERNAL_EAXIN_##flag && \
- CPUID_REG_##reg == (CpuidReg)CPUID_INTERNAL_REG_##flag); \
+ CPUID_REG_##reg == CPUID_FEAT_REG(flag)); \
CPUID_INTERNAL_SHIFT_##flag; \
})
#define CPUID_ISSET(eaxIn, reg, flag, data) \
({ \
ASSERT_ON_COMPILE(eaxIn == CPUID_INTERNAL_EAXIN_##flag && \
- CPUID_REG_##reg == (CpuidReg)CPUID_INTERNAL_REG_##flag); \
+ CPUID_REG_##reg == CPUID_FEAT_REG(flag)); \
(((data) & CPUID_INTERNAL_MASK_##flag) != 0); \
})
#define CPUID_GET(eaxIn, reg, field, data) \
({ \
ASSERT_ON_COMPILE(eaxIn == CPUID_INTERNAL_EAXIN_##field && \
- CPUID_REG_##reg == (CpuidReg)CPUID_INTERNAL_REG_##field); \
+ CPUID_REG_##reg == CPUID_FEAT_REG(field)); \
(((uint32)(data) & CPUID_INTERNAL_MASK_##field) >> \
CPUID_INTERNAL_SHIFT_##field); \
})
#define CPUID_MASK(eaxIn, reg, flag) \
CPUIDCheck(eaxIn, CPUID_INTERNAL_EAXIN_##flag, \
- CPUID_REG_##reg, (CpuidReg)CPUID_INTERNAL_REG_##flag, \
+ CPUID_REG_##reg, CPUID_FEAT_REG(flag), \
CPUID_INTERNAL_MASK_##flag)
#define CPUID_SHIFT(eaxIn, reg, flag) \
CPUIDCheck(eaxIn, CPUID_INTERNAL_EAXIN_##flag, \
- CPUID_REG_##reg, (CpuidReg)CPUID_INTERNAL_REG_##flag, \
+ CPUID_REG_##reg, CPUID_FEAT_REG(flag), \
CPUID_INTERNAL_SHIFT_##flag)
#define CPUID_ISSET(eaxIn, reg, flag, data) \
(CPUIDCheck(eaxIn, CPUID_INTERNAL_EAXIN_##flag, \
- CPUID_REG_##reg, (CpuidReg)CPUID_INTERNAL_REG_##flag, \
+ CPUID_REG_##reg, CPUID_FEAT_REG(flag), \
CPUID_INTERNAL_MASK_##flag & (data)) != 0)
#define CPUID_GET(eaxIn, reg, field, data) \
CPUIDCheck(eaxIn, CPUID_INTERNAL_EAXIN_##field, \
- CPUID_REG_##reg, (CpuidReg)CPUID_INTERNAL_REG_##field, \
+ CPUID_REG_##reg, CPUID_FEAT_REG(field), \
((uint32)(data) & CPUID_INTERNAL_MASK_##field) >> \
CPUID_INTERNAL_SHIFT_##field)
do { \
ASSERT_ON_COMPILE( \
(uint32)eaxIn == (uint32)CPUID_INTERNAL_EAXIN_##flag && \
- CPUID_REG_##reg == (CpuidReg)CPUID_INTERNAL_REG_##flag); \
+ CPUID_REG_##reg == CPUID_FEAT_REG(flag)); \
*(dataPtr) |= CPUID_INTERNAL_MASK_##flag; \
} while (0)
do { \
ASSERT_ON_COMPILE( \
(uint32)eaxIn == (uint32)CPUID_INTERNAL_EAXIN_##flag && \
- CPUID_REG_##reg == (CpuidReg)CPUID_INTERNAL_REG_##flag); \
+ CPUID_REG_##reg == CPUID_FEAT_REG(flag)); \
*(dataPtr) &= ~CPUID_INTERNAL_MASK_##flag; \
} while (0)
uint32 *_d = dataPtr; \
ASSERT_ON_COMPILE( \
(uint32)eaxIn == (uint32)CPUID_INTERNAL_EAXIN_##field && \
- CPUID_REG_##reg == (CpuidReg)CPUID_INTERNAL_REG_##field); \
+ CPUID_REG_##reg == CPUID_FEAT_REG(field)); \
*_d = (*_d & ~CPUID_INTERNAL_MASK_##field) | \
(_v << CPUID_INTERNAL_SHIFT_##field); \
ASSERT(_v == (*_d & CPUID_INTERNAL_MASK_##field) >> \