diff options
| author | 2012-04-01 15:24:56 -0700 | |
|---|---|---|
| committer | 2012-04-07 10:33:12 -0700 | |
| commit | 8532191c4fc8e005f7d432fec40fd9f2936275c6 (patch) | |
| tree | 2173082a31163332c22b262331fe98470583cd12 /src/compiler_llvm/jni_compiler.cc | |
| parent | b12c3017e619747ab26ba56d935401a7e45b59cd (diff) | |
Late method resolution.
Change-Id: Ic35348022391c3c11a1d4984b9add7b6ef53aa4c
Diffstat (limited to 'src/compiler_llvm/jni_compiler.cc')
| -rw-r--r-- | src/compiler_llvm/jni_compiler.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/compiler_llvm/jni_compiler.cc b/src/compiler_llvm/jni_compiler.cc index 285caaba26..071c0bd4e7 100644 --- a/src/compiler_llvm/jni_compiler.cc +++ b/src/compiler_llvm/jni_compiler.cc @@ -145,11 +145,20 @@ CompiledMethod* JniCompiler::Compile() { irb_.getInt32(Thread::kNative)); // Get callee code_addr - llvm::Value* code_addr = + llvm::Value* code_addr_ = LoadFromObjectOffset(method_object_addr, Method::NativeMethodOffset().Int32Value(), GetFunctionType(method_idx_, is_static, true)->getPointerTo()); - + llvm::Value* code_addr; + llvm::FunctionType* method_type = GetFunctionType(method_idx_, is_static, true); + + // TODO: Inline check + llvm::Value* runtime_func = irb_.GetRuntime(runtime_support::EnsureInitialized); + llvm::Value* result = irb_.CreateCall2(runtime_func, + method_object_addr, + irb_.CreatePointerCast(code_addr_, + irb_.getJObjectTy())); + code_addr = irb_.CreatePointerCast(result, method_type->getPointerTo()); // Load actual parameters std::vector<llvm::Value*> args; |