diff --git a/Scripts/json_config_parse.py b/Scripts/json_config_parse.py index 340c51cc9..1eff3a97e 100644 --- a/Scripts/json_config_parse.py +++ b/Scripts/json_config_parse.py @@ -74,6 +74,7 @@ class HostFeatures(Flag) : FEATURE_BMI2 = (1 << 7) FEATURE_CLWB = (1 << 8) FEATURE_LINUX = (1 << 9) + FEATURE_AVX2 = (1 << 10) RegStringLookup = { "NONE": Regs.REG_NONE, @@ -147,6 +148,7 @@ HostFeaturesLookup = { "BMI2" : HostFeatures.FEATURE_BMI2, "CLWB" : HostFeatures.FEATURE_CLWB, "LINUX" : HostFeatures.FEATURE_LINUX, + "AVX2" : HostFeatures.FEATURE_AVX2, } def parse_hexstring(s): diff --git a/Source/Tools/FEXLoader/HarnessHelpers.h b/Source/Tools/FEXLoader/HarnessHelpers.h index 489ebd5e1..7e310c6c1 100644 --- a/Source/Tools/FEXLoader/HarnessHelpers.h +++ b/Source/Tools/FEXLoader/HarnessHelpers.h @@ -372,12 +372,13 @@ namespace FEX::HarnessHelper { FEATURE_BMI2 = (1 << 7), FEATURE_CLWB = (1 << 8), FEATURE_LINUX = (1 << 9), - + FEATURE_AVX2 = (1 << 10), }; bool Requires3DNow() const { return BaseConfig.OptionHostFeatures & HostFeatures::FEATURE_3DNOW; } bool RequiresSSE4A() const { return BaseConfig.OptionHostFeatures & HostFeatures::FEATURE_SSE4A; } bool RequiresAVX() const { return BaseConfig.OptionHostFeatures & HostFeatures::FEATURE_AVX; } + bool RequiresAVX2() const { return BaseConfig.OptionHostFeatures & HostFeatures::FEATURE_AVX2; } bool RequiresRAND() const { return BaseConfig.OptionHostFeatures & HostFeatures::FEATURE_RAND; } bool RequiresSHA() const { return BaseConfig.OptionHostFeatures & HostFeatures::FEATURE_SHA; } bool RequiresCLZERO() const { return BaseConfig.OptionHostFeatures & HostFeatures::FEATURE_CLZERO; } @@ -527,6 +528,7 @@ namespace FEX::HarnessHelper { bool Requires3DNow() const { return Config.Requires3DNow(); } bool RequiresSSE4A() const { return Config.RequiresSSE4A(); } bool RequiresAVX() const { return Config.RequiresAVX(); } + bool RequiresAVX2() const { return Config.RequiresAVX2(); } bool RequiresRAND() const { return Config.RequiresRAND(); } bool RequiresSHA() const { return Config.RequiresSHA(); } bool RequiresCLZERO() const { return Config.RequiresCLZERO(); } diff --git a/Source/Tools/FEXLoader/TestHarnessRunner.cpp b/Source/Tools/FEXLoader/TestHarnessRunner.cpp index 891939829..7efdc6a68 100644 --- a/Source/Tools/FEXLoader/TestHarnessRunner.cpp +++ b/Source/Tools/FEXLoader/TestHarnessRunner.cpp @@ -234,6 +234,7 @@ int main(int argc, char **argv, char **const envp) { #endif bool SupportsAVX = false; + bool SupportsAVX2 = false; FEXCore::Core::CPUState State; FEXCore::Context::InitializeStaticTables(Loader.Is64BitMode() ? FEXCore::Context::MODE_64BIT : FEXCore::Context::MODE_32BIT); @@ -255,11 +256,13 @@ int main(int argc, char **argv, char **const envp) { // Skip any tests that the host doesn't support features for auto HostFeatures = CTX->GetHostFeatures(); SupportsAVX = HostFeatures.SupportsAVX; + SupportsAVX2 = HostFeatures.SupportsAVX2; bool TestUnsupported = (!HostFeatures.Supports3DNow && Loader.Requires3DNow()) || (!HostFeatures.SupportsSSE4A && Loader.RequiresSSE4A()) || (!SupportsAVX && Loader.RequiresAVX()) || + (!SupportsAVX2 && Loader.RequiresAVX2()) || (!HostFeatures.SupportsRAND && Loader.RequiresRAND()) || (!HostFeatures.SupportsSHA && Loader.RequiresSHA()) || (!HostFeatures.SupportsCLZERO && Loader.RequiresCLZERO()) ||