diff --git a/CMakeLists.txt b/CMakeLists.txt index a8aac4f3c..437fa7c56 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -254,7 +254,9 @@ check_cxx_source_compiles( HAS_CLANG_PRESERVE_ALL) unset(CMAKE_REQUIRED_FLAGS) if (HAS_CLANG_PRESERVE_ALL) - if (MINGW) + message(STATUS "Clang version ${CMAKE_CXX_COMPILER_VERSION}") + set(CLANG_MINIMUM_VERSION 22.1) + if (MINGW AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${CLANG_MINIMUM_VERSION}) message(STATUS "Ignoring broken clang::preserve_all support") set(HAS_CLANG_PRESERVE_ALL FALSE) else() diff --git a/FEXCore/include/FEXCore/Core/HostFeatures.h b/FEXCore/include/FEXCore/Core/HostFeatures.h index 80897b5a3..03654a449 100644 --- a/FEXCore/include/FEXCore/Core/HostFeatures.h +++ b/FEXCore/include/FEXCore/Core/HostFeatures.h @@ -67,44 +67,44 @@ struct HostFeatures { } // Affects codegen and is basically machine description. - uint32_t DCacheLineLog2 : 4 {}; - uint32_t SupportsCacheMaintenanceOps : 1 {}; - uint32_t SupportsAES : 1 {}; - uint32_t SupportsCRC : 1 {}; - uint32_t SupportsCLZERO : 1 {}; - uint32_t SupportsAtomics : 1 {}; - uint32_t SupportsRCPC : 1 {}; - uint32_t SupportsTSOImm9 : 1 {}; - uint32_t SupportsRAND : 1 {}; - uint32_t SupportsAVX : 1 {}; - uint32_t SupportsSVE128 : 1 {}; - uint32_t SupportsSVE256 : 1 {}; - uint32_t SupportsSHA : 1 {}; - uint32_t SupportsPMULL_128Bit : 1 {}; - uint32_t SupportsCSSC : 1 {}; - uint32_t SupportsFCMA : 1 {}; - uint32_t SupportsFlagM : 1 {}; - uint32_t SupportsFlagM2 : 1 {}; - uint32_t SupportsRPRES : 1 {}; - uint32_t SupportsPreserveAllABI : 1 {}; - uint32_t SupportsAES256 : 1 {}; - uint32_t SupportsSVEBitPerm : 1 {}; - uint32_t SupportsCPUIndexInTPIDRRO : 1 {}; - uint32_t SupportsFRINTTS : 1 {}; - uint32_t SupportsECV : 1 {}; - uint32_t SupportsWFXT : 1 {}; - uint32_t Supports3DNow : 1 {}; - uint32_t SupportsSSE4a : 1 {}; - uint32_t SupportsMOPS : 1 {}; - uint32_t SupportsI8MM : 1 {}; - uint32_t SupportsDotProd : 1 {}; - uint32_t PreferZVAForVZero : 1 {}; - uint32_t SupportsAFP : 1 {}; - uint32_t SupportsFloatExceptions : 1 {}; - uint32_t SupportsBF16 : 1 {}; + uint32_t DCacheLineLog2 : 4 {}; // [3:0] + uint32_t SupportsCacheMaintenanceOps : 1 {}; // [4] + uint32_t SupportsAES : 1 {}; // [5] + uint32_t SupportsCRC : 1 {}; // [6] + uint32_t SupportsCLZERO : 1 {}; // [7] + uint32_t SupportsAtomics : 1 {}; // [8] + uint32_t SupportsRCPC : 1 {}; // [9] + uint32_t SupportsTSOImm9 : 1 {}; // [10] + uint32_t SupportsRAND : 1 {}; // [11] + uint32_t SupportsAVX : 1 {}; // [12] // Not enabled on wine? + uint32_t SupportsSVE128 : 1 {}; // [13] + uint32_t SupportsSVE256 : 1 {}; // [14] + uint32_t SupportsSHA : 1 {}; // [15] + uint32_t SupportsPMULL_128Bit : 1 {}; // [16] + uint32_t SupportsCSSC : 1 {}; // [17] + uint32_t SupportsFCMA : 1 {}; // [18] + uint32_t SupportsFlagM : 1 {}; // [19] + uint32_t SupportsFlagM2 : 1 {}; // [20] + uint32_t SupportsRPRES : 1 {}; // [21] + uint32_t SupportsPreserveAllABI : 1 {}; // [22] // Not enabled on wine + uint32_t SupportsAES256 : 1 {}; // [23] + uint32_t SupportsSVEBitPerm : 1 {}; // [24] + uint32_t SupportsCPUIndexInTPIDRRO : 1 {}; // [25] + uint32_t SupportsFRINTTS : 1 {}; // [26] + uint32_t SupportsECV : 1 {}; // [27] + uint32_t SupportsWFXT : 1 {}; // [28] + uint32_t Supports3DNow : 1 {}; // [29] + uint32_t SupportsSSE4a : 1 {}; // [30] + uint32_t SupportsMOPS : 1 {}; // [31] + uint32_t SupportsI8MM : 1 {}; // [32] + uint32_t SupportsDotProd : 1 {}; // [33] + uint32_t PreferZVAForVZero : 1 {}; // [34] + uint32_t SupportsAFP : 1 {}; // [35] + uint32_t SupportsFloatExceptions : 1 {}; // [36] + uint32_t SupportsBF16 : 1 {}; // [37] // Flag if this is InstCountCI - uint32_t IsInstCountCI : 1 {}; - uint32_t pad : 25 {}; + uint32_t IsInstCountCI : 1 {}; // [38] + uint32_t pad : 25 {}; // [63:39] // This affects codegen, but it isn't machine state ProcessFeaturesHash ProcessFeatures {}; diff --git a/Source/Windows/ARM64EC/Module.cpp b/Source/Windows/ARM64EC/Module.cpp index 250beed9e..3be7e465a 100644 --- a/Source/Windows/ARM64EC/Module.cpp +++ b/Source/Windows/ARM64EC/Module.cpp @@ -789,7 +789,7 @@ NTSTATUS ProcessInit() { { auto HostFeatures = - FEX::Windows::CPUFeatures::FetchHostFeatures(IsWine, FEXCore::HostFeatures::HostTypeEnum::Wow64, FEX::Windows::UnixLib::GetPID()); + FEX::Windows::CPUFeatures::FetchHostFeatures(IsWine, FEXCore::HostFeatures::HostTypeEnum::Arm64ec, FEX::Windows::UnixLib::GetPID()); CTX = FEXCore::Context::Context::CreateNewContext(HostFeatures); } diff --git a/Source/Windows/Common/CPUFeatures.cpp b/Source/Windows/Common/CPUFeatures.cpp index 3d51d1406..e7b8e2d77 100644 --- a/Source/Windows/Common/CPUFeatures.cpp +++ b/Source/Windows/Common/CPUFeatures.cpp @@ -76,7 +76,7 @@ FEXCore::HostFeatures CPUFeatures::FetchHostFeatures(bool IsWine, FEXCore::HostF RegCloseKey(Key); } - FEX::FetchHostFeatures(Features, HostFeatures, !IsWine, CTR, MIDR); + FEX::FetchHostFeatures(Features, HostFeatures, IsWine, CTR, MIDR); // Force-disable SVE until wine/windows gain support for SVE context save/restore HostFeatures.SupportsSVE128 = false;