mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-12-30 15:17:27 +00:00
51 lines
918 B
C
51 lines
918 B
C
|
#pragma once
|
||
|
|
||
|
#ifdef LLVM_AVAILABLE
|
||
|
|
||
|
#include <memory>
|
||
|
#include <string>
|
||
|
#include <unordered_map>
|
||
|
|
||
|
#include "types.h"
|
||
|
|
||
|
#ifdef _MSC_VER
|
||
|
#pragma warning(push, 0)
|
||
|
#endif
|
||
|
#include "llvm/IR/LLVMContext.h"
|
||
|
#include "llvm/IR/Module.h"
|
||
|
#include "llvm/ExecutionEngine/ExecutionEngine.h"
|
||
|
#ifdef _MSC_VER
|
||
|
#pragma warning(pop)
|
||
|
#endif
|
||
|
|
||
|
extern llvm::LLVMContext g_llvm_ctx;
|
||
|
|
||
|
// Temporary compiler interface
|
||
|
class jit_compiler final
|
||
|
{
|
||
|
// Execution instance
|
||
|
std::unique_ptr<llvm::ExecutionEngine> m_engine;
|
||
|
|
||
|
// Compiled functions
|
||
|
std::unordered_map<std::string, std::uintptr_t> m_map;
|
||
|
|
||
|
public:
|
||
|
jit_compiler(std::unique_ptr<llvm::Module>&&, std::unordered_map<std::string, std::uintptr_t>&&);
|
||
|
~jit_compiler();
|
||
|
|
||
|
// Get compiled function address
|
||
|
std::uintptr_t get(const std::string& name) const
|
||
|
{
|
||
|
const auto found = m_map.find(name);
|
||
|
|
||
|
if (found != m_map.end())
|
||
|
{
|
||
|
return found->second;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
#endif
|