Lines Matching refs:CPUFeatures
112 CPUFeatures AA64PFR0::GetCPUFeatures() const {
113 CPUFeatures f;
114 if (Get(kFP) >= 0) f.Combine(CPUFeatures::kFP);
115 if (Get(kFP) >= 1) f.Combine(CPUFeatures::kFPHalf);
116 if (Get(kAdvSIMD) >= 0) f.Combine(CPUFeatures::kNEON);
117 if (Get(kAdvSIMD) >= 1) f.Combine(CPUFeatures::kNEONHalf);
118 if (Get(kRAS) >= 1) f.Combine(CPUFeatures::kRAS);
119 if (Get(kSVE) >= 1) f.Combine(CPUFeatures::kSVE);
120 if (Get(kDIT) >= 1) f.Combine(CPUFeatures::kDIT);
121 if (Get(kCSV2) >= 1) f.Combine(CPUFeatures::kCSV2);
122 if (Get(kCSV2) >= 2) f.Combine(CPUFeatures::kSCXTNUM);
123 if (Get(kCSV3) >= 1) f.Combine(CPUFeatures::kCSV3);
127 CPUFeatures AA64PFR1::GetCPUFeatures() const {
128 CPUFeatures f;
129 if (Get(kBT) >= 1) f.Combine(CPUFeatures::kBTI);
130 if (Get(kSSBS) >= 1) f.Combine(CPUFeatures::kSSBS);
131 if (Get(kSSBS) >= 2) f.Combine(CPUFeatures::kSSBSControl);
132 if (Get(kMTE) >= 1) f.Combine(CPUFeatures::kMTEInstructions);
133 if (Get(kMTE) >= 2) f.Combine(CPUFeatures::kMTE);
134 if (Get(kMTE) >= 3) f.Combine(CPUFeatures::kMTE3);
135 if (Get(kSME) >= 1) f.Combine(CPUFeatures::kSME);
139 CPUFeatures AA64ISAR0::GetCPUFeatures() const {
140 CPUFeatures f;
141 if (Get(kAES) >= 1) f.Combine(CPUFeatures::kAES);
142 if (Get(kAES) >= 2) f.Combine(CPUFeatures::kPmull1Q);
143 if (Get(kSHA1) >= 1) f.Combine(CPUFeatures::kSHA1);
144 if (Get(kSHA2) >= 1) f.Combine(CPUFeatures::kSHA2);
145 if (Get(kSHA2) >= 2) f.Combine(CPUFeatures::kSHA512);
146 if (Get(kCRC32) >= 1) f.Combine(CPUFeatures::kCRC32);
147 if (Get(kAtomic) >= 1) f.Combine(CPUFeatures::kAtomics);
148 if (Get(kRDM) >= 1) f.Combine(CPUFeatures::kRDM);
149 if (Get(kSHA3) >= 1) f.Combine(CPUFeatures::kSHA3);
150 if (Get(kSM3) >= 1) f.Combine(CPUFeatures::kSM3);
151 if (Get(kSM4) >= 1) f.Combine(CPUFeatures::kSM4);
152 if (Get(kDP) >= 1) f.Combine(CPUFeatures::kDotProduct);
153 if (Get(kFHM) >= 1) f.Combine(CPUFeatures::kFHM);
154 if (Get(kTS) >= 1) f.Combine(CPUFeatures::kFlagM);
155 if (Get(kTS) >= 2) f.Combine(CPUFeatures::kAXFlag);
156 if (Get(kRNDR) >= 1) f.Combine(CPUFeatures::kRNG);
160 CPUFeatures AA64ISAR1::GetCPUFeatures() const {
161 CPUFeatures f;
162 if (Get(kDPB) >= 1) f.Combine(CPUFeatures::kDCPoP);
163 if (Get(kDPB) >= 2) f.Combine(CPUFeatures::kDCCVADP);
164 if (Get(kJSCVT) >= 1) f.Combine(CPUFeatures::kJSCVT);
165 if (Get(kFCMA) >= 1) f.Combine(CPUFeatures::kFcma);
166 if (Get(kLRCPC) >= 1) f.Combine(CPUFeatures::kRCpc);
167 if (Get(kLRCPC) >= 2) f.Combine(CPUFeatures::kRCpcImm);
168 if (Get(kFRINTTS) >= 1) f.Combine(CPUFeatures::kFrintToFixedSizedInt);
169 if (Get(kSB) >= 1) f.Combine(CPUFeatures::kSB);
170 if (Get(kSPECRES) >= 1) f.Combine(CPUFeatures::kSPECRES);
171 if (Get(kBF16) >= 1) f.Combine(CPUFeatures::kBF16);
172 if (Get(kBF16) >= 2) f.Combine(CPUFeatures::kEBF16);
173 if (Get(kDGH) >= 1) f.Combine(CPUFeatures::kDGH);
174 if (Get(kI8MM) >= 1) f.Combine(CPUFeatures::kI8MM);
180 f.Combine(CPUFeatures::kPAuth);
182 if (Get(kAPA) >= 1) f.Combine(CPUFeatures::kPAuthQARMA);
183 if (apx == 0b0010) f.Combine(CPUFeatures::kPAuthEnhancedPAC);
184 if (apx >= 0b0011) f.Combine(CPUFeatures::kPAuthEnhancedPAC2);
185 if (apx >= 0b0100) f.Combine(CPUFeatures::kPAuthFPAC);
186 if (apx >= 0b0101) f.Combine(CPUFeatures::kPAuthFPACCombined);
189 if (Get(kGPI) >= 1) f.Combine(CPUFeatures::kPAuthGeneric);
191 f.Combine(CPUFeatures::kPAuthGeneric, CPUFeatures::kPAuthGenericQARMA);
196 CPUFeatures AA64ISAR2::GetCPUFeatures() const {
197 CPUFeatures f;
198 if (Get(kWFXT) >= 2) f.Combine(CPUFeatures::kWFXT);
199 if (Get(kRPRES) >= 1) f.Combine(CPUFeatures::kRPRES);
200 if (Get(kMOPS) >= 1) f.Combine(CPUFeatures::kMOPS);
201 if (Get(kCSSC) >= 1) f.Combine(CPUFeatures::kCSSC);
205 CPUFeatures AA64MMFR0::GetCPUFeatures() const {
206 CPUFeatures f;
207 if (Get(kECV) >= 1) f.Combine(CPUFeatures::kECV);
211 CPUFeatures AA64MMFR1::GetCPUFeatures() const {
212 CPUFeatures f;
213 if (Get(kLO) >= 1) f.Combine(CPUFeatures::kLORegions);
214 if (Get(kAFP) >= 1) f.Combine(CPUFeatures::kAFP);
218 CPUFeatures AA64MMFR2::GetCPUFeatures() const {
219 CPUFeatures f;
220 if (Get(kAT) >= 1) f.Combine(CPUFeatures::kUSCAT);
224 CPUFeatures AA64ZFR0::GetCPUFeatures() const {
227 CPUFeatures f;
228 if (Get(kF64MM) >= 1) f.Combine(CPUFeatures::kSVEF64MM);
229 if (Get(kF32MM) >= 1) f.Combine(CPUFeatures::kSVEF32MM);
230 if (Get(kI8MM) >= 1) f.Combine(CPUFeatures::kSVEI8MM);
231 if (Get(kSM4) >= 1) f.Combine(CPUFeatures::kSVESM4);
232 if (Get(kSHA3) >= 1) f.Combine(CPUFeatures::kSVESHA3);
233 if (Get(kBF16) >= 1) f.Combine(CPUFeatures::kSVEBF16);
234 if (Get(kBF16) >= 2) f.Combine(CPUFeatures::kSVE_EBF16);
235 if (Get(kBitPerm) >= 1) f.Combine(CPUFeatures::kSVEBitPerm);
236 if (Get(kAES) >= 1) f.Combine(CPUFeatures::kSVEAES);
237 if (Get(kAES) >= 2) f.Combine(CPUFeatures::kSVEPmull128);
238 if (Get(kSVEver) >= 1) f.Combine(CPUFeatures::kSVE2);
242 CPUFeatures AA64SMFR0::GetCPUFeatures() const {
243 CPUFeatures f;
244 if (Get(kSMEf32f32) >= 1) f.Combine(CPUFeatures::kSMEf32f32);
245 if (Get(kSMEb16f32) >= 1) f.Combine(CPUFeatures::kSMEb16f32);
246 if (Get(kSMEf16f32) >= 1) f.Combine(CPUFeatures::kSMEf16f32);
247 if (Get(kSMEi8i32) >= 15) f.Combine(CPUFeatures::kSMEi8i32);
248 if (Get(kSMEf64f64) >= 1) f.Combine(CPUFeatures::kSMEf64f64);
249 if (Get(kSMEi16i64) >= 15) f.Combine(CPUFeatures::kSMEi16i64);
250 if (Get(kSMEfa64) >= 1) f.Combine(CPUFeatures::kSMEfa64);
269 CPUFeatures CPU::InferCPUFeaturesFromIDRegisters() {
270 CPUFeatures f;
278 CPUFeatures CPU::InferCPUFeaturesFromOS(
279 CPUFeatures::QueryIDRegistersOption option) {
280 CPUFeatures features;
286 static const CPUFeatures::Feature kFeatureBitsLow[] =
288 CPUFeatures::kFP,
289 CPUFeatures::kNEON,
290 CPUFeatures::kNone, // "EVTSTRM", which VIXL doesn't track.
291 CPUFeatures::kAES,
292 CPUFeatures::kPmull1Q,
293 CPUFeatures::kSHA1,
294 CPUFeatures::kSHA2,
295 CPUFeatures::kCRC32,
297 CPUFeatures::kAtomics,
298 CPUFeatures::kFPHalf,
299 CPUFeatures::kNEONHalf,
300 CPUFeatures::kIDRegisterEmulation,
301 CPUFeatures::kRDM,
302 CPUFeatures::kJSCVT,
303 CPUFeatures::kFcma,
304 CPUFeatures::kRCpc,
306 CPUFeatures::kDCPoP,
307 CPUFeatures::kSHA3,
308 CPUFeatures::kSM3,
309 CPUFeatures::kSM4,
310 CPUFeatures::kDotProduct,
311 CPUFeatures::kSHA512,
312 CPUFeatures::kSVE,
313 CPUFeatures::kFHM,
315 CPUFeatures::kDIT,
316 CPUFeatures::kUSCAT,
317 CPUFeatures::kRCpcImm,
318 CPUFeatures::kFlagM,
319 CPUFeatures::kSSBSControl,
320 CPUFeatures::kSB,
321 CPUFeatures::kPAuth,
322 CPUFeatures::kPAuthGeneric};
325 static const CPUFeatures::Feature kFeatureBitsHigh[] =
327 CPUFeatures::kDCCVADP,
328 CPUFeatures::kSVE2,
329 CPUFeatures::kSVEAES,
330 CPUFeatures::kSVEPmull128,
331 CPUFeatures::kSVEBitPerm,
332 CPUFeatures::kSVESHA3,
333 CPUFeatures::kSVESM4,
334 CPUFeatures::kAXFlag,
336 CPUFeatures::kFrintToFixedSizedInt,
337 CPUFeatures::kSVEI8MM,
338 CPUFeatures::kSVEF32MM,
339 CPUFeatures::kSVEF64MM,
340 CPUFeatures::kSVEBF16,
341 CPUFeatures::kI8MM,
342 CPUFeatures::kBF16,
343 CPUFeatures::kDGH,
345 CPUFeatures::kRNG,
346 CPUFeatures::kBTI,
347 CPUFeatures::kMTE,
348 CPUFeatures::kECV,
349 CPUFeatures::kAFP,
350 CPUFeatures::kRPRES,
351 CPUFeatures::kMTE3,
352 CPUFeatures::kSME,
354 CPUFeatures::kSMEi16i64,
355 CPUFeatures::kSMEf64f64,
356 CPUFeatures::kSMEi8i32,
357 CPUFeatures::kSMEf16f32,
358 CPUFeatures::kSMEb16f32,
359 CPUFeatures::kSMEf32f32,
360 CPUFeatures::kSMEfa64,
361 CPUFeatures::kWFXT,
363 CPUFeatures::kEBF16,
364 CPUFeatures::kSVE_EBF16};
368 const CPUFeatures::Feature* feature_array,
382 if (features.Has(CPUFeatures::kMTE)) {
383 features.Combine(CPUFeatures::kMTEInstructions);
387 if ((option == CPUFeatures::kQueryIDRegistersIfAvailable) &&
388 (features.Has(CPUFeatures::kIDRegisterEmulation))) {
460 // Query the SVE vector length. This requires CPUFeatures::kSVE.