|
@@ -207,8 +207,7 @@ extern const char * const x86_power_flags[32];
|
|
|
#define test_cpu_cap(c, bit) \
|
|
|
test_bit(bit, (unsigned long *)((c)->x86_capability))
|
|
|
|
|
|
-#define cpu_has(c, bit) \
|
|
|
- (__builtin_constant_p(bit) && \
|
|
|
+#define REQUIRED_MASK_BIT_SET(bit) \
|
|
|
( (((bit)>>5)==0 && (1UL<<((bit)&31) & REQUIRED_MASK0)) || \
|
|
|
(((bit)>>5)==1 && (1UL<<((bit)&31) & REQUIRED_MASK1)) || \
|
|
|
(((bit)>>5)==2 && (1UL<<((bit)&31) & REQUIRED_MASK2)) || \
|
|
@@ -218,10 +217,16 @@ extern const char * const x86_power_flags[32];
|
|
|
(((bit)>>5)==6 && (1UL<<((bit)&31) & REQUIRED_MASK6)) || \
|
|
|
(((bit)>>5)==7 && (1UL<<((bit)&31) & REQUIRED_MASK7)) || \
|
|
|
(((bit)>>5)==8 && (1UL<<((bit)&31) & REQUIRED_MASK8)) || \
|
|
|
- (((bit)>>5)==9 && (1UL<<((bit)&31) & REQUIRED_MASK9)) ) \
|
|
|
- ? 1 : \
|
|
|
+ (((bit)>>5)==9 && (1UL<<((bit)&31) & REQUIRED_MASK9)) )
|
|
|
+
|
|
|
+#define cpu_has(c, bit) \
|
|
|
+ (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 : \
|
|
|
test_cpu_cap(c, bit))
|
|
|
|
|
|
+#define this_cpu_has(bit) \
|
|
|
+ (__builtin_constant_p(bit) && REQUIRED_MASK_BIT_SET(bit) ? 1 : \
|
|
|
+ x86_this_cpu_test_bit(bit, (unsigned long *)&cpu_info.x86_capability))
|
|
|
+
|
|
|
#define boot_cpu_has(bit) cpu_has(&boot_cpu_data, bit)
|
|
|
|
|
|
#define set_cpu_cap(c, bit) set_bit(bit, (unsigned long *)((c)->x86_capability))
|