@@ -49,48 +49,58 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
49
49
#define test_cpu_cap (c , bit ) \
50
50
test_bit(bit, (unsigned long *)((c)->x86_capability))
51
51
52
- #define REQUIRED_MASK_BIT_SET (bit ) \
53
- ( (((bit)>>5)==0 && (1UL<<((bit)&31) & REQUIRED_MASK0 )) || \
54
- (((bit)>>5)==1 && (1UL<<((bit)&31) & REQUIRED_MASK1 )) || \
55
- (((bit)>>5)==2 && (1UL<<((bit)&31) & REQUIRED_MASK2 )) || \
56
- (((bit)>>5)==3 && (1UL<<((bit)&31) & REQUIRED_MASK3 )) || \
57
- (((bit)>>5)==4 && (1UL<<((bit)&31) & REQUIRED_MASK4 )) || \
58
- (((bit)>>5)==5 && (1UL<<((bit)&31) & REQUIRED_MASK5 )) || \
59
- (((bit)>>5)==6 && (1UL<<((bit)&31) & REQUIRED_MASK6 )) || \
60
- (((bit)>>5)==7 && (1UL<<((bit)&31) & REQUIRED_MASK7 )) || \
61
- (((bit)>>5)==8 && (1UL<<((bit)&31) & REQUIRED_MASK8 )) || \
62
- (((bit)>>5)==9 && (1UL<<((bit)&31) & REQUIRED_MASK9 )) || \
63
- (((bit)>>5)==10 && (1UL<<((bit)&31) & REQUIRED_MASK10)) || \
64
- (((bit)>>5)==11 && (1UL<<((bit)&31) & REQUIRED_MASK11)) || \
65
- (((bit)>>5)==12 && (1UL<<((bit)&31) & REQUIRED_MASK12)) || \
66
- (((bit)>>5)==13 && (1UL<<((bit)&31) & REQUIRED_MASK13)) || \
67
- (((bit)>>5)==14 && (1UL<<((bit)&31) & REQUIRED_MASK14)) || \
68
- (((bit)>>5)==15 && (1UL<<((bit)&31) & REQUIRED_MASK15)) || \
69
- (((bit)>>5)==16 && (1UL<<((bit)&31) & REQUIRED_MASK16)) || \
70
- (((bit)>>5)==17 && (1UL<<((bit)&31) & REQUIRED_MASK17)) || \
71
- REQUIRED_MASK_CHECK || \
52
+ /*
53
+ * There are 32 bits/features in each mask word. The high bits
54
+ * (selected with (bit>>5) give us the word number and the low 5
55
+ * bits give us the bit/feature number inside the word.
56
+ * (1UL<<((bit)&31) gives us a mask for the feature_bit so we can
57
+ * see if it is set in the mask word.
58
+ */
59
+ #define CHECK_BIT_IN_MASK_WORD (maskname , word , bit ) \
60
+ (((bit)>>5)==(word) && (1UL<<((bit)&31) & maskname##word ))
61
+
62
+ #define REQUIRED_MASK_BIT_SET (feature_bit ) \
63
+ ( CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 0, feature_bit) || \
64
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 1, feature_bit) || \
65
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 2, feature_bit) || \
66
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 3, feature_bit) || \
67
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 4, feature_bit) || \
68
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 5, feature_bit) || \
69
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 6, feature_bit) || \
70
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 7, feature_bit) || \
71
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 8, feature_bit) || \
72
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 9, feature_bit) || \
73
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 10, feature_bit) || \
74
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 11, feature_bit) || \
75
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 12, feature_bit) || \
76
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 13, feature_bit) || \
77
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 14, feature_bit) || \
78
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 15, feature_bit) || \
79
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 16, feature_bit) || \
80
+ CHECK_BIT_IN_MASK_WORD(REQUIRED_MASK, 17, feature_bit) || \
81
+ REQUIRED_MASK_CHECK || \
72
82
BUILD_BUG_ON_ZERO(NCAPINTS != 18))
73
83
74
- #define DISABLED_MASK_BIT_SET (bit ) \
75
- ( (((bit)>>5)==0 && (1UL<<((bit)&31) & DISABLED_MASK0 ) ) || \
76
- (((bit)>>5)==1 && (1UL<<((bit)&31) & DISABLED_MASK1 ) ) || \
77
- (((bit)>>5)==2 && (1UL<<((bit)&31) & DISABLED_MASK2 ) ) || \
78
- (((bit)>>5)==3 && (1UL<<((bit)&31) & DISABLED_MASK3 ) ) || \
79
- (((bit)>>5)==4 && (1UL<<((bit)&31) & DISABLED_MASK4 ) ) || \
80
- (((bit)>>5)==5 && (1UL<<((bit)&31) & DISABLED_MASK5 ) ) || \
81
- (((bit)>>5)==6 && (1UL<<((bit)&31) & DISABLED_MASK6 ) ) || \
82
- (((bit)>>5)==7 && (1UL<<((bit)&31) & DISABLED_MASK7 ) ) || \
83
- (((bit)>>5)==8 && (1UL<<((bit)&31) & DISABLED_MASK8 ) ) || \
84
- (((bit)>>5)==9 && (1UL<<((bit)&31) & DISABLED_MASK9 ) ) || \
85
- (((bit)>>5)==10 && (1UL<<((bit)&31) & DISABLED_MASK10) ) || \
86
- (((bit)>>5)==11 && (1UL<<((bit)&31) & DISABLED_MASK11) ) || \
87
- (((bit)>>5)==12 && (1UL<<((bit)&31) & DISABLED_MASK12) ) || \
88
- (((bit)>>5)==13 && (1UL<<((bit)&31) & DISABLED_MASK13) ) || \
89
- (((bit)>>5)==14 && (1UL<<((bit)&31) & DISABLED_MASK14) ) || \
90
- (((bit)>>5)==15 && (1UL<<((bit)&31) & DISABLED_MASK15) ) || \
91
- (((bit)>>5)==16 && (1UL<<((bit)&31) & DISABLED_MASK16) ) || \
92
- (((bit)>>5)==17 && (1UL<<((bit)&31) & DISABLED_MASK17) ) || \
93
- DISABLED_MASK_CHECK || \
84
+ #define DISABLED_MASK_BIT_SET (feature_bit ) \
85
+ ( CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 0, feature_bit ) || \
86
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 1, feature_bit ) || \
87
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 2, feature_bit ) || \
88
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 3, feature_bit ) || \
89
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 4, feature_bit ) || \
90
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 5, feature_bit ) || \
91
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 6, feature_bit ) || \
92
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 7, feature_bit ) || \
93
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 8, feature_bit ) || \
94
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 9, feature_bit ) || \
95
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 10, feature_bit ) || \
96
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 11, feature_bit ) || \
97
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 12, feature_bit ) || \
98
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 13, feature_bit ) || \
99
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 14, feature_bit ) || \
100
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 15, feature_bit ) || \
101
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 16, feature_bit ) || \
102
+ CHECK_BIT_IN_MASK_WORD(DISABLED_MASK, 17, feature_bit ) || \
103
+ DISABLED_MASK_CHECK || \
94
104
BUILD_BUG_ON_ZERO(NCAPINTS != 18))
95
105
96
106
#define cpu_has (c , bit ) \
0 commit comments