Fixing to allow multiple executions/process.
This commit is contained in:
parent
12d9c3d15e
commit
92a3e19cd9
|
@ -27,20 +27,42 @@ using namespace xe::cpu;
|
||||||
using namespace xe::kernel;
|
using namespace xe::kernel;
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
void InitializeIfNeeded();
|
||||||
|
void CleanupOnShutdown();
|
||||||
|
|
||||||
|
void InitializeIfNeeded() {
|
||||||
|
static bool has_initialized = false;
|
||||||
|
if (has_initialized) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
has_initialized = true;
|
||||||
|
|
||||||
|
// TODO(benvanik): only do this once
|
||||||
|
LLVMLinkInInterpreter();
|
||||||
|
LLVMLinkInJIT();
|
||||||
|
InitializeNativeTarget();
|
||||||
|
|
||||||
|
// TODO(benvanik): only do this once
|
||||||
|
codegen::RegisterEmitCategoryALU();
|
||||||
|
codegen::RegisterEmitCategoryControl();
|
||||||
|
codegen::RegisterEmitCategoryFPU();
|
||||||
|
codegen::RegisterEmitCategoryMemory();
|
||||||
|
|
||||||
|
atexit(CleanupOnShutdown);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CleanupOnShutdown() {
|
||||||
|
llvm_shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Processor::Processor(xe_pal_ref pal, xe_memory_ref memory) {
|
Processor::Processor(xe_pal_ref pal, xe_memory_ref memory) {
|
||||||
pal_ = xe_pal_retain(pal);
|
pal_ = xe_pal_retain(pal);
|
||||||
memory_ = xe_memory_retain(memory);
|
memory_ = xe_memory_retain(memory);
|
||||||
|
|
||||||
// TODO(benvanik): only do this once
|
InitializeIfNeeded();
|
||||||
LLVMLinkInInterpreter();
|
|
||||||
LLVMLinkInJIT();
|
|
||||||
InitializeNativeTarget();
|
|
||||||
|
|
||||||
// TODO(benvanik): only do this once
|
|
||||||
codegen::RegisterEmitCategoryALU();
|
|
||||||
codegen::RegisterEmitCategoryControl();
|
|
||||||
codegen::RegisterEmitCategoryFPU();
|
|
||||||
codegen::RegisterEmitCategoryMemory();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Processor::~Processor() {
|
Processor::~Processor() {
|
||||||
|
@ -51,7 +73,6 @@ Processor::~Processor() {
|
||||||
}
|
}
|
||||||
|
|
||||||
engine_.reset();
|
engine_.reset();
|
||||||
llvm_shutdown();
|
|
||||||
|
|
||||||
xe_memory_release(memory_);
|
xe_memory_release(memory_);
|
||||||
xe_pal_release(pal_);
|
xe_pal_release(pal_);
|
||||||
|
|
Loading…
Reference in New Issue