Fix 044-proxy. Implement proxy for now, working on x86 and ARM.

Already added a TODO to do the assembly code for x86 and ARM for proxy.
Use LLVM .ll for multi-architecture now.

Change-Id: Ibdeeee113dcf284592e9d7769d3044438cb1e453
diff --git a/src/compiler_llvm/jni_compiler.cc b/src/compiler_llvm/jni_compiler.cc
index 252daef..68ce2d8 100644
--- a/src/compiler_llvm/jni_compiler.cc
+++ b/src/compiler_llvm/jni_compiler.cc
@@ -88,9 +88,9 @@
   } else {
     // Load class object
     this_object_or_class_object =
-        LoadFromObjectOffset(method_object_addr,
-                             Method::DeclaringClassOffset().Int32Value(),
-                             irb_.getJObjectTy());
+        irb_.LoadFromObjectOffset(method_object_addr,
+                                  Method::DeclaringClassOffset().Int32Value(),
+                                  irb_.getJObjectTy());
   }
   // Actual argument (ignore method and this object)
   arg_begin = arg_iter;
@@ -126,34 +126,35 @@
   irb_.CreateStore(method_object_addr, method_field_addr);
 
   // Store the line number
-  StoreToObjectOffset(shadow_frame_,
-                      ShadowFrame::LineNumOffset(),
-                      irb_.getInt32(dex_file_->GetLineNumFromPC(method_, 0)));
+  irb_.StoreToObjectOffset(shadow_frame_,
+                           ShadowFrame::LineNumOffset(),
+                           irb_.getInt32(dex_file_->GetLineNumFromPC(method_, 0)));
 
   // Store the number of the pointer slots
-  StoreToObjectOffset(shadow_frame_,
-                      ShadowFrame::NumberOfReferencesOffset(),
-                      irb_.getInt32(sirt_size));
+  irb_.StoreToObjectOffset(shadow_frame_,
+                           ShadowFrame::NumberOfReferencesOffset(),
+                           irb_.getInt32(sirt_size));
 
   // Push the shadow frame
   llvm::Value* shadow_frame_upcast = irb_.CreateConstGEP2_32(shadow_frame_, 0, 0);
   irb_.CreateCall(irb_.GetRuntime(PushShadowFrame), shadow_frame_upcast);
 
   // Get JNIEnv
-  llvm::Value* jni_env_object_addr = LoadFromObjectOffset(thread_object_addr,
-                                                          Thread::JniEnvOffset().Int32Value(),
-                                                          irb_.getJObjectTy());
+  llvm::Value* jni_env_object_addr =
+      irb_.LoadFromObjectOffset(thread_object_addr,
+                                Thread::JniEnvOffset().Int32Value(),
+                                irb_.getJObjectTy());
 
   // Set thread state to kNative
-  StoreToObjectOffset(thread_object_addr,
-                      Thread::StateOffset().Int32Value(),
-                      irb_.getInt32(kNative));
+  irb_.StoreToObjectOffset(thread_object_addr,
+                           Thread::StateOffset().Int32Value(),
+                           irb_.getInt32(kNative));
 
   // Get callee code_addr
   llvm::Value* code_addr =
-      LoadFromObjectOffset(method_object_addr,
-                           Method::NativeMethodOffset().Int32Value(),
-                           GetFunctionType(method_idx_, is_static, true)->getPointerTo());
+      irb_.LoadFromObjectOffset(method_object_addr,
+                                Method::NativeMethodOffset().Int32Value(),
+                                GetFunctionType(method_idx_, is_static, true)->getPointerTo());
 
   // Load actual parameters
   std::vector<llvm::Value*> args;
@@ -230,18 +231,18 @@
 
   // saved_local_ref_cookie = env->local_ref_cookie
   llvm::Value* saved_local_ref_cookie =
-      LoadFromObjectOffset(jni_env_object_addr,
-                           JNIEnvExt::LocalRefCookieOffset().Int32Value(),
-                           irb_.getInt32Ty());
+      irb_.LoadFromObjectOffset(jni_env_object_addr,
+                                JNIEnvExt::LocalRefCookieOffset().Int32Value(),
+                                irb_.getInt32Ty());
 
   // env->local_ref_cookie = env->locals.segment_state
   llvm::Value* segment_state =
-      LoadFromObjectOffset(jni_env_object_addr,
-                           JNIEnvExt::SegmentStateOffset().Int32Value(),
-                           irb_.getInt32Ty());
-  StoreToObjectOffset(jni_env_object_addr,
-                      JNIEnvExt::LocalRefCookieOffset().Int32Value(),
-                      segment_state);
+      irb_.LoadFromObjectOffset(jni_env_object_addr,
+                                JNIEnvExt::SegmentStateOffset().Int32Value(),
+                                irb_.getInt32Ty());
+  irb_.StoreToObjectOffset(jni_env_object_addr,
+                           JNIEnvExt::LocalRefCookieOffset().Int32Value(),
+                           segment_state);
 
 
   // Call!!!
@@ -254,9 +255,9 @@
   }
 
   // Set thread state to kRunnable
-  StoreToObjectOffset(thread_object_addr,
-                      Thread::StateOffset().Int32Value(),
-                      irb_.getInt32(kRunnable));
+  irb_.StoreToObjectOffset(thread_object_addr,
+                           Thread::StateOffset().Int32Value(),
+                           irb_.getInt32(kRunnable));
 
   if (return_shorty == 'L') {
     // If the return value is reference, it may point to SIRT, we should decode it.
@@ -267,17 +268,17 @@
 
   // env->locals.segment_state = env->local_ref_cookie
   llvm::Value* local_ref_cookie =
-      LoadFromObjectOffset(jni_env_object_addr,
-                           JNIEnvExt::LocalRefCookieOffset().Int32Value(),
-                           irb_.getInt32Ty());
-  StoreToObjectOffset(jni_env_object_addr,
-                      JNIEnvExt::SegmentStateOffset().Int32Value(),
-                      local_ref_cookie);
+      irb_.LoadFromObjectOffset(jni_env_object_addr,
+                                JNIEnvExt::LocalRefCookieOffset().Int32Value(),
+                                irb_.getInt32Ty());
+  irb_.StoreToObjectOffset(jni_env_object_addr,
+                           JNIEnvExt::SegmentStateOffset().Int32Value(),
+                           local_ref_cookie);
 
   // env->local_ref_cookie = saved_local_ref_cookie
-  StoreToObjectOffset(jni_env_object_addr,
-                      JNIEnvExt::LocalRefCookieOffset().Int32Value(),
-                      saved_local_ref_cookie);
+  irb_.StoreToObjectOffset(jni_env_object_addr,
+                           JNIEnvExt::LocalRefCookieOffset().Int32Value(),
+                           saved_local_ref_cookie);
 
   // Pop the shadow frame
   irb_.CreateCall(irb_.GetRuntime(PopShadowFrame));
@@ -348,29 +349,5 @@
   return llvm::FunctionType::get(ret_type, args_type, false);
 }
 
-llvm::Value* JniCompiler::LoadFromObjectOffset(llvm::Value* object_addr,
-                                               int32_t offset,
-                                               llvm::Type* type) {
-  // Convert offset to llvm::value
-  llvm::Value* llvm_offset = irb_.getPtrEquivInt(offset);
-  // Calculate the value's address
-  llvm::Value* value_addr = irb_.CreatePtrDisp(object_addr, llvm_offset, type->getPointerTo());
-  // Load
-  return irb_.CreateLoad(value_addr);
-}
-
-void JniCompiler::StoreToObjectOffset(llvm::Value* object_addr,
-                                      int32_t offset,
-                                      llvm::Value* new_value) {
-  // Convert offset to llvm::value
-  llvm::Value* llvm_offset = irb_.getPtrEquivInt(offset);
-  // Calculate the value's address
-  llvm::Value* value_addr = irb_.CreatePtrDisp(object_addr,
-                                               llvm_offset,
-                                               new_value->getType()->getPointerTo());
-  // Store
-  irb_.CreateStore(new_value, value_addr);
-}
-
 } // namespace compiler_llvm
 } // namespace art