Merge pull request #3931 from Sonicadvance1/move_hostfeatures_init

FEXCore: Pass HostFeatures in to CreateNewContext directly
This commit is contained in:
Ryan Houdek 2024-08-09 20:30:17 -07:00 committed by GitHub
commit 0ecfc651b6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 14 additions and 31 deletions

View File

@ -19,8 +19,8 @@ void InitializeStaticTables(OperatingMode Mode) {
IR::InstallOpcodeHandlers(Mode);
}
fextl::unique_ptr<FEXCore::Context::Context> FEXCore::Context::Context::CreateNewContext() {
return fextl::make_unique<FEXCore::Context::ContextImpl>();
fextl::unique_ptr<FEXCore::Context::Context> FEXCore::Context::Context::CreateNewContext(const FEXCore::HostFeatures& Features) {
return fextl::make_unique<FEXCore::Context::ContextImpl>(Features);
}
void FEXCore::Context::ContextImpl::SetExitHandler(ExitHandler handler) {
@ -43,10 +43,6 @@ void FEXCore::Context::ContextImpl::SetCustomCPUBackendFactory(CustomCPUFactoryT
CustomCPUFactory = std::move(Factory);
}
void FEXCore::Context::ContextImpl::SetHostFeatures(const FEXCore::HostFeatures& Features) {
HostFeatures = Features;
}
void FEXCore::Context::ContextImpl::SetSignalDelegator(FEXCore::SignalDelegator* _SignalDelegation) {
SignalDelegation = _SignalDelegation;
}

View File

@ -96,8 +96,6 @@ public:
void SetCustomCPUBackendFactory(CustomCPUFactoryType Factory) override;
void SetHostFeatures(const FEXCore::HostFeatures& Features) override;
void HandleCallback(FEXCore::Core::InternalThreadState* Thread, uint64_t RIP) override;
uint64_t RestoreRIPFromHostPC(FEXCore::Core::InternalThreadState* Thread, uint64_t HostPC) override;
@ -264,7 +262,7 @@ public:
SignalDelegator* SignalDelegation {};
X86GeneratedCode X86CodeGen;
ContextImpl();
ContextImpl(const FEXCore::HostFeatures& Features);
~ContextImpl();
static void ThreadRemoveCodeEntry(FEXCore::Core::InternalThreadState* Thread, uint64_t GuestRIP);

View File

@ -74,8 +74,9 @@ $end_info$
#include <xxhash.h>
namespace FEXCore::Context {
ContextImpl::ContextImpl()
: CPUID {this}
ContextImpl::ContextImpl(const FEXCore::HostFeatures& Features)
: HostFeatures {Features}
, CPUID {this}
, IRCaptureCache {this} {
#ifdef BLOCKSTATS
BlockData = std::make_unique<FEXCore::BlockSamplingData>();

View File

@ -119,7 +119,7 @@ public:
*
* @return a new context object
*/
FEX_DEFAULT_VISIBILITY static fextl::unique_ptr<FEXCore::Context::Context> CreateNewContext();
FEX_DEFAULT_VISIBILITY static fextl::unique_ptr<FEXCore::Context::Context> CreateNewContext(const FEXCore::HostFeatures& Features);
/**
* @brief Allows setting up in memory code and other things prior to launchign code execution
@ -164,13 +164,6 @@ public:
*/
FEX_DEFAULT_VISIBILITY virtual void SetCustomCPUBackendFactory(CustomCPUFactoryType Factory) = 0;
/**
* @brief Informs the context what features the host supports.
*
* @param Features Filled out HostFeatures structure to copy
*/
FEX_DEFAULT_VISIBILITY virtual void SetHostFeatures(const FEXCore::HostFeatures& Features) = 0;
FEX_DEFAULT_VISIBILITY virtual void HandleCallback(FEXCore::Core::InternalThreadState* Thread, uint64_t RIP) = 0;
///< State reconstruction helpers

View File

@ -597,11 +597,10 @@ int main(int argc, char** argv, char** const envp) {
FEXCore::Context::InitializeStaticTables(TestHeaderData->Bitness == 64 ? FEXCore::Context::MODE_64BIT : FEXCore::Context::MODE_32BIT);
// Create FEXCore context.
auto CTX = FEXCore::Context::Context::CreateNewContext();
fextl::unique_ptr<FEXCore::Context::Context> CTX;
{
auto HostFeatures = FEX::FetchHostFeatures();
CTX->SetHostFeatures(HostFeatures);
CTX = FEXCore::Context::Context::CreateNewContext(HostFeatures);
}
auto SignalDelegation = FEX::DummyHandlers::CreateSignalDelegator();

View File

@ -453,11 +453,10 @@ int main(int argc, char** argv, char** const envp) {
// System allocator is now system allocator or FEX
FEXCore::Context::InitializeStaticTables(Loader.Is64BitMode() ? FEXCore::Context::MODE_64BIT : FEXCore::Context::MODE_32BIT);
auto CTX = FEXCore::Context::Context::CreateNewContext();
fextl::unique_ptr<FEXCore::Context::Context> CTX;
{
auto HostFeatures = FEX::FetchHostFeatures();
CTX->SetHostFeatures(HostFeatures);
CTX = FEXCore::Context::Context::CreateNewContext(HostFeatures);
}
// Setup TSO hardware emulation immediately after initializing the context.

View File

@ -256,8 +256,7 @@ int main(int argc, char** argv, char** const envp) {
FEXCore::Context::InitializeStaticTables(Loader.Is64BitMode() ? FEXCore::Context::MODE_64BIT : FEXCore::Context::MODE_32BIT);
auto HostFeatures = FEX::FetchHostFeatures();
auto CTX = FEXCore::Context::Context::CreateNewContext();
CTX->SetHostFeatures(HostFeatures);
auto CTX = FEXCore::Context::Context::CreateNewContext(HostFeatures);
#ifndef _WIN32
auto SignalDelegation = FEX::HLE::CreateSignalDelegator(CTX.get(), {});

View File

@ -503,10 +503,9 @@ NTSTATUS ProcessInit() {
SyscallHandler = fextl::make_unique<ECSyscallHandler>();
Exception::HandlerConfig.emplace();
CTX = FEXCore::Context::Context::CreateNewContext();
{
auto HostFeatures = FEX::FetchHostFeatures();
CTX->SetHostFeatures(HostFeatures);
CTX = FEXCore::Context::Context::CreateNewContext(HostFeatures);
}
CTX->SetSignalDelegator(SignalDelegator.get());

View File

@ -436,10 +436,9 @@ void BTCpuProcessInit() {
SyscallHandler = fextl::make_unique<WowSyscallHandler>();
Context::HandlerConfig.emplace();
CTX = FEXCore::Context::Context::CreateNewContext();
{
auto HostFeatures = FEX::FetchHostFeatures();
CTX->SetHostFeatures(HostFeatures);
CTX = FEXCore::Context::Context::CreateNewContext(HostFeatures);
}
CTX->SetSignalDelegator(SignalDelegator.get());