summaryrefslogtreecommitdiff
path: root/src/compiler_llvm/method_compiler.cc
diff options
context:
space:
mode:
author TDYa127 <tdy@google.com> 2012-04-19 12:24:26 -0700
committer Shih-wei Liao <sliao@google.com> 2012-04-21 15:09:24 -0700
commit706e9b62e1bac8a774466937ab32fcd655f5b723 (patch)
tree6555a296ce8cfade1c5078d27c1e3877b10c4f68 /src/compiler_llvm/method_compiler.cc
parentc8dc101f8e89feb588de3326bd9be0b84228ca2a (diff)
Add more Thread to runtime support llvm.
Change-Id: I0ee7c841f7b287126fa1ba8db5983a9fa2a1f04f
Diffstat (limited to 'src/compiler_llvm/method_compiler.cc')
-rw-r--r--src/compiler_llvm/method_compiler.cc20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/compiler_llvm/method_compiler.cc b/src/compiler_llvm/method_compiler.cc
index e16d522334..b12869302d 100644
--- a/src/compiler_llvm/method_compiler.cc
+++ b/src/compiler_llvm/method_compiler.cc
@@ -1442,13 +1442,15 @@ llvm::Value* MethodCompiler::EmitLoadConstantClass(uint32_t dex_pc,
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
+ llvm::Value* thread_object_addr = irb_.CreateCall(irb_.GetRuntime(GetCurrentThread));
+
llvm::Function* runtime_func =
irb_.GetRuntime(InitializeTypeAndVerifyAccess);
EmitUpdateDexPC(dex_pc);
llvm::Value* type_object_addr =
- irb_.CreateCall2(runtime_func, type_idx_value, method_object_addr);
+ irb_.CreateCall3(runtime_func, type_idx_value, method_object_addr, thread_object_addr);
EmitGuard_ExceptionLandingPad(dex_pc);
@@ -1488,10 +1490,12 @@ llvm::Value* MethodCompiler::EmitLoadConstantClass(uint32_t dex_pc,
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
+ llvm::Value* thread_object_addr = irb_.CreateCall(irb_.GetRuntime(GetCurrentThread));
+
EmitUpdateDexPC(dex_pc);
llvm::Value* loaded_type_object_addr =
- irb_.CreateCall2(runtime_func, type_idx_value, method_object_addr);
+ irb_.CreateCall3(runtime_func, type_idx_value, method_object_addr, thread_object_addr);
EmitGuard_ExceptionLandingPad(dex_pc);
@@ -1537,7 +1541,9 @@ void MethodCompiler::EmitInsn_MonitorEnter(uint32_t dex_pc,
EmitUpdateDexPC(dex_pc);
- irb_.CreateCall(irb_.GetRuntime(LockObject), object_addr);
+ llvm::Value* thread_object_addr = irb_.CreateCall(irb_.GetRuntime(GetCurrentThread));
+
+ irb_.CreateCall2(irb_.GetRuntime(LockObject), object_addr, thread_object_addr);
EmitGuard_ExceptionLandingPad(dex_pc);
irb_.CreateBr(GetNextBasicBlock(dex_pc));
@@ -1556,7 +1562,9 @@ void MethodCompiler::EmitInsn_MonitorExit(uint32_t dex_pc,
EmitUpdateDexPC(dex_pc);
- irb_.CreateCall(irb_.GetRuntime(UnlockObject), object_addr);
+ llvm::Value* thread_object_addr = irb_.CreateCall(irb_.GetRuntime(GetCurrentThread));
+
+ irb_.CreateCall2(irb_.GetRuntime(UnlockObject), object_addr, thread_object_addr);
EmitGuard_ExceptionLandingPad(dex_pc);
irb_.CreateBr(GetNextBasicBlock(dex_pc));
@@ -2541,10 +2549,12 @@ llvm::Value* MethodCompiler::EmitLoadStaticStorage(uint32_t dex_pc,
llvm::Value* method_object_addr = EmitLoadMethodObjectAddr();
+ llvm::Value* thread_object_addr = irb_.CreateCall(irb_.GetRuntime(GetCurrentThread));
+
EmitUpdateDexPC(dex_pc);
llvm::Value* loaded_storage_object_addr =
- irb_.CreateCall2(runtime_func, type_idx_value, method_object_addr);
+ irb_.CreateCall3(runtime_func, type_idx_value, method_object_addr, thread_object_addr);
EmitGuard_ExceptionLandingPad(dex_pc);