Files
FEX-Emu--FEX/Source/Interface/Core/CPUID.h
T
Ryan Houdek c7c5d8bdd7 Cleanup the CPUID interface
I saw LLVM using CPUID function 0x14 so I decided to fill out the map
with the basic leafs
2020-03-06 07:56:16 +02:00

42 lines
1.0 KiB
C++

#pragma once
#include <functional>
#include <unordered_map>
#include "LogManager.h"
namespace FEXCore {
class CPUIDEmu final {
public:
void Init();
struct FunctionResults {
// Results in registers EAX, EBX, EDX, ECX respectively
uint32_t Res[4];
};
FunctionResults RunFunction(uint32_t Function) {
LogMan::Throw::A(FunctionHandlers.find(Function) != FunctionHandlers.end(), "Don't have a CPUID handler for 0x%08x", Function);
return FunctionHandlers[Function]();
}
private:
using FunctionHandler = std::function<FunctionResults()>;
void RegisterFunction(uint32_t Function, FunctionHandler Handler) {
FunctionHandlers[Function] = Handler;
}
std::unordered_map<uint32_t, FunctionHandler> FunctionHandlers;
// Functions
FunctionResults Function_0h();
FunctionResults Function_01h();
FunctionResults Function_07h();
FunctionResults Function_8000_0000h();
FunctionResults Function_8000_0001h();
FunctionResults Function_8000_0007h();
FunctionResults Function_Reserved();
};
}