diff options
| author | 2012-04-19 12:24:26 -0700 | |
|---|---|---|
| committer | 2012-04-21 15:09:24 -0700 | |
| commit | 706e9b62e1bac8a774466937ab32fcd655f5b723 (patch) | |
| tree | 6555a296ce8cfade1c5078d27c1e3877b10c4f68 /src/compiler_llvm/method_compiler.cc | |
| parent | c8dc101f8e89feb588de3326bd9be0b84228ca2a (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.cc | 20 |
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); |