/** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2013 Ben Vanik. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** */ #include #include #include #include #include #include #include #include #include using namespace llvm; using namespace xe; using namespace xe::cpu; using namespace xe::cpu::llvmbe; namespace { void InitializeIfNeeded(); void CleanupOnShutdown(); void InitializeIfNeeded() { static bool has_initialized = false; if (has_initialized) { return; } has_initialized = true; LLVMLinkInInterpreter(); LLVMLinkInJIT(); InitializeNativeTarget(); llvm_start_multithreaded(); llvmbe::RegisterEmitCategoryALU(); llvmbe::RegisterEmitCategoryControl(); llvmbe::RegisterEmitCategoryFPU(); llvmbe::RegisterEmitCategoryMemory(); atexit(CleanupOnShutdown); } void CleanupOnShutdown() { llvm_shutdown(); } } LLVMBackend::LLVMBackend() : Backend() { InitializeIfNeeded(); } LLVMBackend::~LLVMBackend() { } CodeUnitBuilder* LLVMBackend::CreateCodeUnitBuilder() { return NULL; } LibraryLoader* LLVMBackend::CreateLibraryLoader() { return NULL; } JIT* LLVMBackend::CreateJIT(xe_memory_ref memory, FunctionTable* fn_table) { return new LLVMJIT(memory, fn_table); }