From 42e0e1594f9b6c20f62469832bdd0b8b2d06df41 Mon Sep 17 00:00:00 2001 From: Logan Chien Date: Fri, 13 Jan 2012 15:42:36 +0800 Subject: Add art runtime support declaration. Change-Id: I909ac29ef4ffbcbe93c7809e2d396ed4672f5892 --- src/compiler_llvm/ir_builder.cc | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'src/compiler_llvm/ir_builder.cc') diff --git a/src/compiler_llvm/ir_builder.cc b/src/compiler_llvm/ir_builder.cc index 24fac1a46d..b2c795b9c4 100644 --- a/src/compiler_llvm/ir_builder.cc +++ b/src/compiler_llvm/ir_builder.cc @@ -15,6 +15,7 @@ */ #include "ir_builder.h" +#include "runtime_support_func.h" #include @@ -30,9 +31,45 @@ IRBuilder::IRBuilder(llvm::LLVMContext& context, llvm::Module& module) : LLVMIRBuilder(context) { // Get java object type from module - llvm::Type* jobject_struct_type = - llvm::StructType::create(context, "JavaObject"); + llvm::Type* jobject_struct_type = module.getTypeByName("JavaObject"); + CHECK_NE(jobject_struct_type, static_cast(NULL)); jobject_type_ = jobject_struct_type->getPointerTo(); + + // Load the runtime support function declaration from module + InitRuntimeSupportFuncDecl(module); +} + + +//---------------------------------------------------------------------------- +// Runtime Helper Function +//---------------------------------------------------------------------------- + +void IRBuilder::InitRuntimeSupportFuncDecl(llvm::Module& module) { + using namespace runtime_support; + +#define GET_RUNTIME_SUPPORT_FUNC_DECL(ID, NAME) \ + do { \ + llvm::Function* fn = module.getFunction(NAME); \ + DCHECK_NE(fn, (void*)NULL) << "Function not found: " << NAME; \ + runtime_support_func_decls_[ID] = fn; \ + } while (0); + +#include "runtime_support_func_list.h" + RUNTIME_SUPPORT_FUNC_LIST(GET_RUNTIME_SUPPORT_FUNC_DECL) +#undef RUNTIME_SUPPORT_FUNC_LIST +#undef GET_RUNTIME_SUPPORT_FUNC_DECL +} + + +llvm::Function* IRBuilder::GetRuntime(runtime_support::RuntimeId rt) const { + using namespace runtime_support; + + if (rt >= 0 && rt < MAX_ID){ + return runtime_support_func_decls_[rt]; + } else { + LOG(ERROR) << "Unknown runtime function id: " << rt; + return NULL; + } } -- cgit v1.2.3-59-g8ed1b