Lines Matching refs:CPUFeatures

194   CPUFeatures f1(CPUFeatures::kFP, CPUFeatures::kNEON);
195 CPUFeatures f2(CPUFeatures::kFP, CPUFeatures::kNEON, CPUFeatures::kCRC32);
196 CPUFeatures f3;
198 typedef CPUFeatures::const_iterator It;
201 It it1_neon(&f1, CPUFeatures::kNEON);
202 It it2_neon(&f2, CPUFeatures::kNEON);
203 It it2_crc32(&f2, CPUFeatures::kCRC32);
239 VIXL_CHECK(*it0 == CPUFeatures::kNone);
240 VIXL_CHECK(*it1_neon == CPUFeatures::kNEON);
241 VIXL_CHECK(*it2_neon == CPUFeatures::kNEON);
242 VIXL_CHECK(*it2_crc32 == CPUFeatures::kCRC32);
243 VIXL_CHECK(*it3 == CPUFeatures::kNone);
254 VIXL_CHECK(test0 == It(NULL, CPUFeatures::kNone));
255 VIXL_CHECK(test1 == It(&f1, CPUFeatures::kNEON));
256 VIXL_CHECK(test2 == It(&f2, CPUFeatures::kNEON));
260 VIXL_CHECK(test2 == It(&f2, CPUFeatures::kCRC32));
263 // - Incrementing has no effect on an empty CPUFeatures.
264 VIXL_CHECK(*it3++ == CPUFeatures::kNone);
265 VIXL_CHECK(*(++it3) == CPUFeatures::kNone);
266 VIXL_CHECK(it3 == It(&f3, CPUFeatures::kNone));
269 VIXL_CHECK(*it2_neon++ == CPUFeatures::kNEON);
270 VIXL_CHECK(*it2_neon++ == CPUFeatures::kCRC32);
271 VIXL_CHECK(*it2_neon++ == CPUFeatures::kNone);
272 VIXL_CHECK(*it2_neon++ == CPUFeatures::kFP);
273 VIXL_CHECK(it2_neon == It(&f2, CPUFeatures::kNEON));
274 VIXL_CHECK(*(++it2_crc32) == CPUFeatures::kNone);
275 VIXL_CHECK(*(++it2_crc32) == CPUFeatures::kFP);
276 VIXL_CHECK(*(++it2_crc32) == CPUFeatures::kNEON);
277 VIXL_CHECK(*(++it2_crc32) == CPUFeatures::kCRC32);
278 VIXL_CHECK(it2_crc32 == It(&f2, CPUFeatures::kCRC32));
286 CPUFeatures f1(CPUFeatures::kFP, CPUFeatures::kNEON);
287 CPUFeatures f2(CPUFeatures::kFP, CPUFeatures::kNEON, CPUFeatures::kCRC32);
288 CPUFeatures f3;
292 std::vector<CPUFeatures::Feature> f1_list;
293 for (CPUFeatures::const_iterator it = f1.begin(); it != f1.end(); ++it) {
297 VIXL_CHECK(f1_list[0] == CPUFeatures::kFP);
298 VIXL_CHECK(f1_list[1] == CPUFeatures::kNEON);
300 std::vector<CPUFeatures::Feature> f2_list;
301 for (CPUFeatures::const_iterator it = f2.begin(); it != f2.end(); ++it) {
305 VIXL_CHECK(f2_list[0] == CPUFeatures::kFP);
306 VIXL_CHECK(f2_list[1] == CPUFeatures::kNEON);
307 VIXL_CHECK(f2_list[2] == CPUFeatures::kCRC32);
309 std::vector<CPUFeatures::Feature> f3_list;
310 for (CPUFeatures::const_iterator it = f3.begin(); it != f3.end(); ++it) {
315 std::vector<CPUFeatures::Feature> f2_list_cxx11;
320 VIXL_CHECK(f2_list_cxx11[0] == CPUFeatures::kFP);
321 VIXL_CHECK(f2_list_cxx11[1] == CPUFeatures::kNEON);
322 VIXL_CHECK(f2_list_cxx11[2] == CPUFeatures::kCRC32);
324 std::vector<CPUFeatures::Feature> f3_list_cxx11;
333 // A default-constructed CPUFeatures has no features enabled.
334 CPUFeatures features;
345 const CPUFeatures& features) {
361 CPUFeaturesFormatHelper("", CPUFeatures(CPUFeatures::kNone));
362 CPUFeaturesFormatHelper("FP", CPUFeatures(CPUFeatures::kFP));
363 CPUFeaturesFormatHelper("NEON", CPUFeatures(CPUFeatures::kNEON));
364 CPUFeaturesFormatHelper("AES", CPUFeatures(CPUFeatures::kAES));
365 CPUFeaturesFormatHelper("Pmull1Q", CPUFeatures(CPUFeatures::kPmull1Q));
366 CPUFeaturesFormatHelper("SHA1", CPUFeatures(CPUFeatures::kSHA1));
367 CPUFeaturesFormatHelper("SHA2", CPUFeatures(CPUFeatures::kSHA2));
368 CPUFeaturesFormatHelper("CRC32", CPUFeatures(CPUFeatures::kCRC32));
372 CPUFeatures f(CPUFeatures::kFP, CPUFeatures::kNEON);
374 f.Combine(CPUFeatures::kCRC32);
376 f.Combine(CPUFeatures::kFcma);
378 f.Combine(CPUFeatures::kSHA1);
384 const std::set<CPUFeatures::Feature>& unexpected,
385 const std::set<CPUFeatures::Feature>& expected) {
404 CPUFeatures features = CPUFeatures::AArch64LegacyBaseline();
405 std::set<CPUFeatures::Feature> unexpected;
406 std::set<CPUFeatures::Feature> expected;
407 expected.insert(CPUFeatures::kFP);
408 expected.insert(CPUFeatures::kNEON);
409 expected.insert(CPUFeatures::kCRC32);
419 CPUFeatures features = CPUFeatures::All();
420 std::set<CPUFeatures::Feature> found;
425 VIXL_CHECK(found.size() == CPUFeatures::kNumberOfFeatures);
430 // implements `CPUFeatures* GetCPUFeatures()`. This is normally something like
434 explicit GetCPUFeaturesWrapper(CPUFeatures* cpu_features)
437 CPUFeatures* GetCPUFeatures() const { return cpu_features_; }
440 CPUFeatures* cpu_features_;
446 CPUFeatures cpu(CPUFeatures::kCRC32, CPUFeatures::kSHA1, CPUFeatures::kAES);
449 const CPUFeatures original_outer = cpu;
452 CPUFeaturesScope outer(&top_level, CPUFeatures::kSHA2, CPUFeatures::kAES);
454 VIXL_CHECK(cpu.Has(CPUFeatures::kCRC32,
455 CPUFeatures::kSHA1,
456 CPUFeatures::kSHA2,
457 CPUFeatures::kAES));
461 cpu.Combine(CPUFeatures::kSHA1, CPUFeatures::kAtomics);
462 VIXL_CHECK(cpu.Has(CPUFeatures::kCRC32,
463 CPUFeatures::kSHA1,
464 CPUFeatures::kSHA2,
465 CPUFeatures::kAES));
466 VIXL_CHECK(cpu.Has(CPUFeatures::kAtomics));
468 cpu.Remove(CPUFeatures::kSHA2, CPUFeatures::kAES);
469 VIXL_CHECK(!cpu.Has(CPUFeatures::kSHA2, CPUFeatures::kAES));
470 VIXL_CHECK(cpu.Has(CPUFeatures::kCRC32,
471 CPUFeatures::kSHA1,
472 CPUFeatures::kAtomics));
474 const CPUFeatures original_inner = cpu;
478 // A CPUFeaturesScope can be constructed from a CPUFeatures*, or any
479 // (non-local) object that implements `CPUFeatures* GetCPUFeatures()`.
484 CPUFeatures auth(CPUFeatures::kPAuth,
485 CPUFeatures::kPAuthQARMA,
486 CPUFeatures::kPAuthGeneric,
487 CPUFeatures::kPAuthGenericQARMA,
488 CPUFeatures::kPAuthEnhancedPAC2,
489 CPUFeatures::kPAuthFPAC,
490 CPUFeatures::kPAuthFPACCombined);
494 VIXL_CHECK(cpu.Has(auth.With(CPUFeatures::kCRC32,
495 CPUFeatures::kSHA1,
496 CPUFeatures::kAtomics)));
514 // Test that CPUFeatures::InferFromOS functions on supported platforms.
515 CPUFeatures os;
517 os = CPUFeatures::InferFromOS();
522 std::cout << "Warning: CPUFeatures::InferFromOS() returned no results.\n";
524 std::cout << "CPUFeatures::InferFromOS():\n {" << os << "}\n";
525 VIXL_CHECK(os.Has(CPUFeatures::kFP));
526 VIXL_CHECK(os.Has(CPUFeatures::kNEON));
531 CPUFeatures os_only =
532 CPUFeatures::InferFromOS(CPUFeatures::kDontQueryIDRegisters);
533 std::cout << "CPUFeatures::InferFromOS(kDontQueryIDRegisters):\n {"
535 if (os_only.Has(CPUFeatures::kIDRegisterEmulation)) {
536 CPUFeatures id_regs = CPUFeatures::InferFromIDRegisters();
537 std::cout << "CPUFeatures::InferFromIDRegisters():\n {" << id_regs
546 CPUFeatures os_auto = CPUFeatures::InferFromOS();
547 CPUFeatures os_with_id_regs = os_only.With(id_regs);
555 << CPUFeatures::kIDRegisterEmulation << " }\n";
558 << CPUFeatures::kIDRegisterEmulation << "\n";