From 358bbb51ff6228101fc9747981a8229b4265054a Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 15 Dec 2023 18:43:23 -0800 Subject: [PATCH] CPUID: Removes Init and just uses constructor No need to wait for initialization on for this anymore. Ever since Init was refactored to do basically no work, this hasn't been necessary. CPUID does need to still be initialized after HostFeatures though, so need to ensure correct member ordering there. --- FEXCore/Source/Interface/Context/Context.h | 4 ++-- FEXCore/Source/Interface/Core/CPUID.cpp | 4 ++-- FEXCore/Source/Interface/Core/CPUID.h | 6 +++--- FEXCore/Source/Interface/Core/Core.cpp | 5 ++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/FEXCore/Source/Interface/Context/Context.h b/FEXCore/Source/Interface/Context/Context.h index d47798845..253206f0b 100644 --- a/FEXCore/Source/Interface/Context/Context.h +++ b/FEXCore/Source/Interface/Context/Context.h @@ -237,8 +237,6 @@ namespace FEXCore::Context { FEX_CONFIG_OPT(DisableVixlIndirectCalls, DISABLE_VIXL_INDIRECT_RUNTIME_CALLS); } Config; - FEXCore::HostFeatures HostFeatures; - std::mutex ThreadCreationMutex; FEXCore::Core::InternalThreadState* ParentThread{}; fextl::vector Threads; @@ -253,6 +251,8 @@ namespace FEXCore::Context { FEXCore::ForkableSharedMutex CodeInvalidationMutex; + FEXCore::HostFeatures HostFeatures; + // CPUID depends on HostFeatures so needs to be initialized after that. FEXCore::CPUIDEmu CPUID; FEXCore::HLE::SyscallHandler *SyscallHandler{}; FEXCore::HLE::SourcecodeResolver *SourcecodeResolver{}; diff --git a/FEXCore/Source/Interface/Core/CPUID.cpp b/FEXCore/Source/Interface/Core/CPUID.cpp index bbafa4a29..0bcc2da07 100644 --- a/FEXCore/Source/Interface/Core/CPUID.cpp +++ b/FEXCore/Source/Interface/Core/CPUID.cpp @@ -1205,8 +1205,8 @@ FEXCore::CPUID::XCRResults CPUIDEmu::XCRFunction_0h() const { return Res; } -void CPUIDEmu::Init(FEXCore::Context::ContextImpl *ctx) { - CTX = ctx; +CPUIDEmu::CPUIDEmu(FEXCore::Context::ContextImpl const *ctx) + : CTX {ctx} { Cores = FEXCore::CPUInfo::CalculateNumberOfCPUs(); // Setup some state tracking diff --git a/FEXCore/Source/Interface/Core/CPUID.h b/FEXCore/Source/Interface/Core/CPUID.h index 59ab4748d..db429bafc 100644 --- a/FEXCore/Source/Interface/Core/CPUID.h +++ b/FEXCore/Source/Interface/Core/CPUID.h @@ -28,12 +28,12 @@ private: constexpr static uint32_t CPUID_VENDOR_AMD3 = 0x444D4163; // "cAMD" public: + CPUIDEmu(FEXCore::Context::ContextImpl const *ctx); + // X86 cacheline size effectively has to be hardcoded to 64 // if we report anything differently then applications are likely to break constexpr static uint64_t CACHELINE_SIZE = 64; - void Init(FEXCore::Context::ContextImpl *ctx); - FEXCore::CPUID::FunctionResults RunFunction(uint32_t Function, uint32_t Leaf) const { if (Function < Primary.size()) { const auto Handler = Primary[Function]; @@ -111,7 +111,7 @@ public: } private: - FEXCore::Context::ContextImpl *CTX; + FEXCore::Context::ContextImpl const *CTX; bool Hybrid{}; uint32_t Cores{}; FEX_CONFIG_OPT(HideHypervisorBit, HIDEHYPERVISORBIT); diff --git a/FEXCore/Source/Interface/Core/Core.cpp b/FEXCore/Source/Interface/Core/Core.cpp index 2316e8642..aa13a7b92 100644 --- a/FEXCore/Source/Interface/Core/Core.cpp +++ b/FEXCore/Source/Interface/Core/Core.cpp @@ -78,7 +78,8 @@ $end_info$ namespace FEXCore::Context { ContextImpl::ContextImpl() - : IRCaptureCache {this} { + : CPUID {this} + , IRCaptureCache {this} { #ifdef BLOCKSTATS BlockData = std::make_unique(); #endif @@ -99,8 +100,6 @@ namespace FEXCore::Context { // Track atomic TSO emulation configuration. UpdateAtomicTSOEmulationConfig(); - - CPUID.Init(this); } ContextImpl::~ContextImpl() {