diff options
| author | 2012-05-31 08:03:26 -0700 | |
|---|---|---|
| committer | 2012-06-03 09:02:22 -0700 | |
| commit | de479be99328d2113bf483e082c9ecf235a34d69 (patch) | |
| tree | 7a51b8512e12561b9b05238f489d98c1d4a4fdb9 /src/compiler_llvm/jni_compiler.cc | |
| parent | af543476661966c83a1e1c4db4fbef0d9a2d3afa (diff) | |
Refactor runtime support builder.
Also, add inline assembly for load offset from current thread.
Change-Id: I5c32c04a5ab9a8574acbaf8ee3e08761ebe33d4f
Diffstat (limited to 'src/compiler_llvm/jni_compiler.cc')
| -rw-r--r-- | src/compiler_llvm/jni_compiler.cc | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/src/compiler_llvm/jni_compiler.cc b/src/compiler_llvm/jni_compiler.cc index e66674cfe8..838c89da81 100644 --- a/src/compiler_llvm/jni_compiler.cc +++ b/src/compiler_llvm/jni_compiler.cc @@ -109,7 +109,7 @@ CompiledMethod* JniCompiler::Compile() { } // Get thread object - llvm::Value* thread_object_addr = irb_.CreateCall(irb_.GetRuntime(GetCurrentThread)); + llvm::Value* thread_object_addr = irb_.Runtime().EmitGetCurrentThread(); // Shadow stack llvm::StructType* shadow_frame_type = irb_.getShadowFrameTy(sirt_size); @@ -124,21 +124,18 @@ CompiledMethod* JniCompiler::Compile() { // Push the shadow frame llvm::Value* shadow_frame_upcast = irb_.CreateConstGEP2_32(shadow_frame_, 0, 0); llvm::Value* old_shadow_frame = - irb_.CreateCall3(irb_.GetRuntime(PushShadowFrame), - shadow_frame_upcast, method_object_addr, irb_.getInt32(sirt_size)); + irb_.Runtime().EmitPushShadowFrame(shadow_frame_upcast, method_object_addr, sirt_size); // Get JNIEnv llvm::Value* jni_env_object_addr = - irb_.LoadFromObjectOffset(thread_object_addr, - Thread::JniEnvOffset().Int32Value(), - irb_.getJObjectTy(), - kTBAAJRuntime); + irb_.Runtime().EmitLoadFromThreadOffset(Thread::JniEnvOffset().Int32Value(), + irb_.getJObjectTy(), + kTBAAJRuntime); // Set thread state to kNative - irb_.StoreToObjectOffset(thread_object_addr, - Thread::StateOffset().Int32Value(), - irb_.getInt32(kNative), - kTBAARuntimeInfo); + irb_.Runtime().EmitStoreToThreadOffset(Thread::StateOffset().Int32Value(), + irb_.getInt32(kNative), + kTBAARuntimeInfo); // Get callee code_addr llvm::Value* code_addr = @@ -227,13 +224,12 @@ CompiledMethod* JniCompiler::Compile() { } // Set thread state to kRunnable - irb_.StoreToObjectOffset(thread_object_addr, - Thread::StateOffset().Int32Value(), - irb_.getInt32(kRunnable), - kTBAARuntimeInfo); + irb_.Runtime().EmitStoreToThreadOffset(Thread::StateOffset().Int32Value(), + irb_.getInt32(kRunnable), + kTBAARuntimeInfo); // Do a suspend check - irb_.CreateCall(irb_.GetRuntime(TestSuspend), thread_object_addr); + irb_.Runtime().EmitTestSuspend(); if (return_shorty == 'L') { // If the return value is reference, it may point to SIRT, we should decode it. @@ -260,7 +256,7 @@ CompiledMethod* JniCompiler::Compile() { kTBAARuntimeInfo); // Pop the shadow frame - irb_.CreateCall(irb_.GetRuntime(PopShadowFrame), old_shadow_frame); + irb_.Runtime().EmitPopShadowFrame(old_shadow_frame); // Return! if (return_shorty != 'V') { |