mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
Eliminate the dependency of ExecutionEngine on the JIT/Interpreter libraries.
Now you can build a tool with just the JIT or just the interpreter. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26946 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -13,8 +13,6 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#define DEBUG_TYPE "jit"
|
||||
#include "Interpreter/Interpreter.h"
|
||||
#include "JIT/JIT.h"
|
||||
#include "llvm/Constants.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/Module.h"
|
||||
@ -26,6 +24,7 @@
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/System/DynamicLibrary.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
#include <iostream>
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
@ -33,6 +32,9 @@ namespace {
|
||||
Statistic<> NumGlobals ("lli", "Number of global vars initialized");
|
||||
}
|
||||
|
||||
ExecutionEngine::EECtorFn ExecutionEngine::JITCtor = 0;
|
||||
ExecutionEngine::EECtorFn ExecutionEngine::InterpCtor = 0;
|
||||
|
||||
ExecutionEngine::ExecutionEngine(ModuleProvider *P) :
|
||||
CurMod(*P->getModule()), MP(P) {
|
||||
assert(P && "ModuleProvider is null?");
|
||||
@ -163,24 +165,12 @@ ExecutionEngine *ExecutionEngine::create(ModuleProvider *MP,
|
||||
ExecutionEngine *EE = 0;
|
||||
|
||||
// Unless the interpreter was explicitly selected, try making a JIT.
|
||||
if (!ForceInterpreter)
|
||||
EE = JIT::create(MP, IL);
|
||||
if (!ForceInterpreter && JITCtor)
|
||||
EE = JITCtor(MP, IL);
|
||||
|
||||
// If we can't make a JIT, make an interpreter instead.
|
||||
if (EE == 0) {
|
||||
try {
|
||||
Module *M = MP->materializeModule();
|
||||
try {
|
||||
EE = Interpreter::create(M, IL);
|
||||
} catch (...) {
|
||||
std::cerr << "Error creating the interpreter!\n";
|
||||
}
|
||||
} catch (std::string& errmsg) {
|
||||
std::cerr << "Error reading the bytecode file: " << errmsg << "\n";
|
||||
} catch (...) {
|
||||
std::cerr << "Error reading the bytecode file!\n";
|
||||
}
|
||||
}
|
||||
if (EE == 0 && InterpCtor)
|
||||
EE = InterpCtor(MP, IL);
|
||||
|
||||
if (EE == 0)
|
||||
delete IL;
|
||||
|
Reference in New Issue
Block a user