@@ -450,24 +450,24 @@ void alc_initconfig()
450450 ERR (" Unhandled context suspend behavior setting: \" {}\" " , *suspendmode);
451451 }
452452
453- auto capfilter = 0 ;
453+ auto capfilter = CPUCapBitset{} ;
454454#if HAVE_NEON
455- capfilter |= CPU_CAP_NEON ;
455+ capfilter. set (CPUCap:: NEON ) ;
456456#endif
457457#if HAVE_SSE4_1
458- capfilter |= CPU_CAP_SSE | CPU_CAP_SSE2 | CPU_CAP_SSE3 | CPU_CAP_SSE4_1 ;
458+ capfilter. set (CPUCap:: SSE ). set (CPUCap:: SSE2 ). set (CPUCap:: SSE3 ). set (CPUCap:: SSE4_1 ) ;
459459#elif HAVE_SSE3
460- capfilter |= CPU_CAP_SSE | CPU_CAP_SSE2 | CPU_CAP_SSE3 ;
460+ capfilter. set (CPUCap:: SSE ). set (CPUCap:: SSE2 ). set (CPUCap:: SSE3 ) ;
461461#elif HAVE_SSE2
462- capfilter |= CPU_CAP_SSE | CPU_CAP_SSE2 ;
462+ capfilter. set (CPUCap:: SSE ). set (CPUCap:: SSE2 ) ;
463463#elif HAVE_SSE
464- capfilter |= CPU_CAP_SSE ;
464+ capfilter. set (CPUCap:: SSE ) ;
465465#endif
466466 if (auto cpuopt = ConfigValueStr ({}, {}, " disable-cpu-exts" sv))
467467 {
468468 if (auto const cpulist = std::string_view{*cpuopt};
469469 is_eq (al::case_compare (cpulist, " all" sv)))
470- capfilter = 0 ;
470+ capfilter. reset () ;
471471 else
472472 {
473473 std::ranges::for_each (cpulist | std::views::split (' ,' ),
@@ -482,15 +482,15 @@ void alc_initconfig()
482482 return ;
483483
484484 if (is_eq (al::case_compare (entry, " sse" sv)))
485- capfilter &= ~ CPU_CAP_SSE ;
485+ capfilter. reset (CPUCap:: SSE ) ;
486486 else if (is_eq (al::case_compare (entry, " sse2" sv)))
487- capfilter &= ~ CPU_CAP_SSE2 ;
487+ capfilter. reset (CPUCap:: SSE2 ) ;
488488 else if (is_eq (al::case_compare (entry, " sse3" sv)))
489- capfilter &= ~ CPU_CAP_SSE3 ;
489+ capfilter. reset (CPUCap:: SSE3 ) ;
490490 else if (is_eq (al::case_compare (entry, " sse4.1" sv)))
491- capfilter &= ~ CPU_CAP_SSE4_1 ;
491+ capfilter. reset (CPUCap:: SSE4_1 ) ;
492492 else if (is_eq (al::case_compare (entry, " neon" sv)))
493- capfilter &= ~ CPU_CAP_NEON ;
493+ capfilter. reset (CPUCap:: NEON ) ;
494494 else
495495 WARN (" Invalid CPU extension \" {}\" " , entry);
496496 });
@@ -504,13 +504,18 @@ void alc_initconfig()
504504 TRACE (" Name: \" {}\" " , cpuopt->mName );
505505 }
506506 auto const caps = cpuopt->mCaps ;
507+ auto do_test = [capfilter, caps](CPUCap const cap, std::string_view const on,
508+ std::string_view const off) -> std::string_view
509+ {
510+ return capfilter.test (cap) ? caps.test (cap) ? on : off : " " sv;
511+ };
507512 TRACE (" Extensions:{}{}{}{}{}{}" ,
508- ((capfilter& CPU_CAP_SSE ) ?(caps& CPU_CAP_SSE ) ? " +SSE" sv : " -SSE" sv : " " sv),
509- ((capfilter& CPU_CAP_SSE2 ) ?(caps& CPU_CAP_SSE2 ) ? " +SSE2" sv : " -SSE2" sv : " " sv),
510- ((capfilter& CPU_CAP_SSE3 ) ?(caps& CPU_CAP_SSE3 ) ? " +SSE3" sv : " -SSE3" sv : " " sv),
511- ((capfilter& CPU_CAP_SSE4_1 )?(caps& CPU_CAP_SSE4_1 )? " +SSE4.1 " sv : " -SSE4.1 " sv : " " sv),
512- ((capfilter& CPU_CAP_NEON ) ?(caps& CPU_CAP_NEON ) ? " +NEON" sv : " -NEON" sv : " " sv),
513- (! capfilter) ? " -none-" sv : " " sv);
513+ do_test (CPUCap:: SSE , " +SSE" sv, " -SSE" sv),
514+ do_test (CPUCap:: SSE2 , " +SSE2" sv, " -SSE2" sv),
515+ do_test (CPUCap:: SSE3 , " +SSE3" sv, " -SSE3" sv),
516+ do_test (CPUCap:: SSE4_1 , " +SSE4_1 " sv, " -SSE4_1 " sv),
517+ do_test (CPUCap:: NEON , " +NEON" sv, " -NEON" sv),
518+ capfilter. none ( ) ? " -none-" sv : " " sv);
514519 CPUCapFlags = caps & capfilter;
515520 }
516521
0 commit comments