MCPcopy Create free account
hub / github.com/FEX-Emu/FEX / OverrideFeatures

Function OverrideFeatures

Source/Common/HostFeatures.cpp:397–460  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

395#endif
396
397static void OverrideFeatures(FEXCore::HostFeatures* Features, uint64_t ForceSVEWidth) {
398 // Override features if the user has specifically called for it.
399 FEX_CONFIG_OPT(HostFeatures, HOSTFEATURES);
400 if (!HostFeatures()) {
401 // Early exit if no features are overriden.
402 return;
403 }
404
405#define ENABLE_DISABLE_OPTION(FeatureName, name, enum_name) \
406 do { \
407 const bool Disable##name = (HostFeatures() & FEXCore::Config::HostFeatures::DISABLE##enum_name) != 0; \
408 const bool Enable##name = (HostFeatures() & FEXCore::Config::HostFeatures::ENABLE##enum_name) != 0; \
409 LogMan::Throw::AFmt(!(Disable##name && Enable##name), "Disabling and Enabling CPU feature (" #name ") is mutually exclusive"); \
410 const bool AlreadyEnabled = Features->FeatureName; \
411 const bool Result = (AlreadyEnabled | Enable##name) & !Disable##name; \
412 Features->FeatureName = Result; \
413 } while (0)
414
415#define GET_SINGLE_OPTION(name, enum_name) \
416 const bool Disable##name = (HostFeatures() & FEXCore::Config::HostFeatures::DISABLE##enum_name) != 0; \
417 const bool Enable##name = (HostFeatures() & FEXCore::Config::HostFeatures::ENABLE##enum_name) != 0; \
418 LogMan::Throw::AFmt(!(Disable##name && Enable##name), "Disabling and Enabling CPU feature (" #name ") is mutually exclusive");
419
420 ENABLE_DISABLE_OPTION(SupportsAVX, AVX, AVX);
421 ENABLE_DISABLE_OPTION(SupportsSVE128, SVE, SVE);
422 ENABLE_DISABLE_OPTION(SupportsAFP, AFP, AFP);
423 ENABLE_DISABLE_OPTION(SupportsRCPC, LRCPC, LRCPC);
424 ENABLE_DISABLE_OPTION(SupportsTSOImm9, LRCPC2, LRCPC2);
425 ENABLE_DISABLE_OPTION(SupportsCSSC, CSSC, CSSC);
426 ENABLE_DISABLE_OPTION(SupportsPMULL_128Bit, PMULL128, PMULL128);
427 ENABLE_DISABLE_OPTION(SupportsRAND, RNG, RNG);
428 ENABLE_DISABLE_OPTION(SupportsCLZERO, CLZERO, CLZERO);
429 ENABLE_DISABLE_OPTION(SupportsAtomics, Atomics, ATOMICS);
430 ENABLE_DISABLE_OPTION(SupportsFCMA, FCMA, FCMA);
431 ENABLE_DISABLE_OPTION(SupportsFlagM, FlagM, FLAGM);
432 ENABLE_DISABLE_OPTION(SupportsFlagM2, FlagM2, FLAGM2);
433 ENABLE_DISABLE_OPTION(SupportsFRINTTS, FRINTTS, FRINTTS);
434 ENABLE_DISABLE_OPTION(SupportsRPRES, RPRES, RPRES);
435 ENABLE_DISABLE_OPTION(SupportsSVEBitPerm, SVEBITPERM, SVEBITPERM);
436 ENABLE_DISABLE_OPTION(SupportsPreserveAllABI, PRESERVEALLABI, PRESERVEALLABI);
437 ENABLE_DISABLE_OPTION(SupportsWFXT, WFXT, WFXT);
438 ENABLE_DISABLE_OPTION(Supports3DNow, 3DNOW, 3DNOW);
439 GET_SINGLE_OPTION(Crypto, CRYPTO);
440
441#undef ENABLE_DISABLE_OPTION
442#undef GET_SINGLE_OPTION
443
444 if (EnableCrypto) {
445 Features->SupportsAES = true;
446 Features->SupportsCRC = true;
447 Features->SupportsSHA = true;
448 Features->SupportsPMULL_128Bit = true;
449 Features->SupportsAES256 = true;
450 } else if (DisableCrypto) {
451 Features->SupportsAES = false;
452 Features->SupportsCRC = false;
453 Features->SupportsSHA = false;
454 Features->SupportsPMULL_128Bit = false;

Callers 1

FetchHostFeaturesFunction · 0.85

Calls 1

HostFeaturesEnum · 0.50

Tested by

no test coverage detected