Move compiler-specific code out of runtime_support_common.

Helpers or utilities such as FindFieldFast are still in
runtime_support_common. But LLVM has different stacks, no callee-saves
and different exception mechanisms. Those won't belong to
runtime_support_common.

Change-Id: Ibc43d7d53316941481a6a21815ddefdc1e6bdde6
diff --git a/src/compiler_llvm/runtime_support_llvm.cc b/src/compiler_llvm/runtime_support_llvm.cc
index 16f9704..013a530 100644
--- a/src/compiler_llvm/runtime_support_llvm.cc
+++ b/src/compiler_llvm/runtime_support_llvm.cc
@@ -204,25 +204,37 @@
   return CheckAndAllocArrayFromCode(type_idx, referrer, length, Thread::Current(), true);
 }
 
+static Method* FindMethodHelper(uint32_t method_idx, Object* this_object, Method* caller_method,
+                                bool access_check, InvokeType type){
+  Method* method = FindMethodFast(method_idx, this_object, caller_method, access_check, type);
+  if (UNLIKELY(method == NULL)) {
+    method = FindMethodFromCode(method_idx, this_object, caller_method,
+                                Thread::Current(), access_check, type);
+    if (UNLIKELY(method == NULL)) {
+      CHECK(Thread::Current()->IsExceptionPending());
+      return 0;  // failure
+    }
+  }
+  DCHECK(!Thread::Current()->IsExceptionPending());
+  return method;
+}
+
 Object* art_find_interface_method_from_code(uint32_t method_idx,
                                             Object* this_object,
                                             Method* referrer) {
-  return _artInvokeCommon(method_idx, this_object, referrer,
-                          Thread::Current(), NULL, true, kInterface);
+  return FindMethodHelper(method_idx, this_object, referrer, true, kInterface);
 }
 
 Object* art_find_virtual_method_from_code(uint32_t method_idx,
                                           Object* this_object,
                                           Method* referrer) {
-  return _artInvokeCommon(method_idx, this_object, referrer,
-                          Thread::Current(), NULL, true, kVirtual);
+  return FindMethodHelper(method_idx, this_object, referrer, true, kVirtual);
 }
 
 Object* art_find_super_method_from_code(uint32_t method_idx,
                                         Object* this_object,
                                         Method* referrer) {
-  return _artInvokeCommon(method_idx, this_object, referrer,
-                          Thread::Current(), NULL, true, kSuper);
+  return FindMethodHelper(method_idx, this_object, referrer, true, kSuper);
 }
 
 Object* art_initialize_static_storage_from_code(uint32_t type_idx, Method* referrer) {
@@ -244,54 +256,174 @@
 }
 
 int32_t art_set32_static_from_code(uint32_t field_idx, Method* referrer, int32_t new_value) {
-  return artSet32StaticFromCode(field_idx, new_value, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(uint32_t));
+  if (LIKELY(field != NULL)) {
+    field->Set32(NULL, new_value);
+    return 0;
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            true, true, true, sizeof(uint32_t));
+  if (LIKELY(field != NULL)) {
+    field->Set32(NULL, new_value);
+    return 0;
+  }
+  return -1;
 }
 
 int32_t art_set64_static_from_code(uint32_t field_idx, Method* referrer, int64_t new_value) {
-  return artSet64StaticFromCode(field_idx, referrer, new_value, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(uint64_t));
+  if (LIKELY(field != NULL)) {
+    field->Set64(NULL, new_value);
+    return 0;
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            true, true, true, sizeof(uint64_t));
+  if (LIKELY(field != NULL)) {
+    field->Set64(NULL, new_value);
+    return 0;
+  }
+  return -1;
 }
 
 int32_t art_set_obj_static_from_code(uint32_t field_idx, Method* referrer, Object* new_value) {
-  return artSetObjStaticFromCode(field_idx, new_value, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, false, true, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    field->SetObj(NULL, new_value);
+    return 0;
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            true, false, true, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    field->SetObj(NULL, new_value);
+    return 0;
+  }
+  return -1;
 }
 
 int32_t art_get32_static_from_code(uint32_t field_idx, Method* referrer) {
-  return artGet32StaticFromCode(field_idx, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(uint32_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get32(NULL);
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            true, true, false, sizeof(uint32_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get32(NULL);
+  }
+  return 0;
 }
 
 int64_t art_get64_static_from_code(uint32_t field_idx, Method* referrer) {
-  return artGet64StaticFromCode(field_idx, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(uint64_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get64(NULL);
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            true, true, false, sizeof(uint64_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get64(NULL);
+  }
+  return 0;
 }
 
 Object* art_get_obj_static_from_code(uint32_t field_idx, Method* referrer) {
-  return artGetObjStaticFromCode(field_idx, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, false, false, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    return field->GetObj(NULL);
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            true, false, false, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    return field->GetObj(NULL);
+  }
+  return 0;
 }
 
 int32_t art_set32_instance_from_code(uint32_t field_idx, Method* referrer,
                                      Object* obj, uint32_t new_value) {
-  return artSet32InstanceFromCode(field_idx, obj, new_value, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(uint32_t));
+  if (LIKELY(field != NULL)) {
+    field->Set32(obj, new_value);
+    return 0;
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            false, true, true, sizeof(uint32_t));
+  if (LIKELY(field != NULL)) {
+    field->Set32(obj, new_value);
+    return 0;
+  }
+  return -1;
 }
 
 int32_t art_set64_instance_from_code(uint32_t field_idx, Method* referrer,
                                      Object* obj, int64_t new_value) {
-  return artSet64InstanceFromCode(field_idx, obj, new_value, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(uint64_t));
+  if (LIKELY(field != NULL)) {
+    field->Set64(obj, new_value);
+    return 0;
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            false, true, true, sizeof(uint64_t));
+  if (LIKELY(field != NULL)) {
+    field->Set64(obj, new_value);
+    return 0;
+  }
+  return -1;
 }
 
 int32_t art_set_obj_instance_from_code(uint32_t field_idx, Method* referrer,
                                        Object* obj, Object* new_value) {
-  return artSetObjInstanceFromCode(field_idx, obj, new_value, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, false, true, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    field->SetObj(obj, new_value);
+    return 0;
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            false, false, true, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    field->SetObj(obj, new_value);
+    return 0;
+  }
+  return -1;
 }
 
 int32_t art_get32_instance_from_code(uint32_t field_idx, Method* referrer, Object* obj) {
-  return artGet32InstanceFromCode(field_idx, obj, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(uint32_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get32(obj);
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            false, true, false, sizeof(uint32_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get32(obj);
+  }
+  return 0;
 }
 
 int64_t art_get64_instance_from_code(uint32_t field_idx, Method* referrer, Object* obj) {
-  return artGet64InstanceFromCode(field_idx, obj, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(uint64_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get64(obj);
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            false, true, false, sizeof(uint64_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get64(obj);
+  }
+  return 0;
 }
 
 Object* art_get_obj_instance_from_code(uint32_t field_idx, Method* referrer, Object* obj) {
-  return artGetObjInstanceFromCode(field_idx, obj, referrer, Thread::Current(), NULL);
+  Field* field = FindFieldFast(field_idx, referrer, false, false, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    return field->GetObj(obj);
+  }
+  field = FindFieldFromCode(field_idx, referrer, Thread::Current(),
+                            false, false, false, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    return field->GetObj(obj);
+  }
+  return 0;
 }
 
 
diff --git a/src/runtime_support.cc b/src/runtime_support.cc
index 9854151..6531eb2 100644
--- a/src/runtime_support.cc
+++ b/src/runtime_support.cc
@@ -29,6 +29,57 @@
 
 namespace art {
 
+extern "C" int art_cmpl_float(float a, float b) {
+    if (a == b) {
+        return 0;
+    } else if (a < b) {
+        return -1;
+    } else if (a > b) {
+        return 1;
+    }
+    return -1;
+}
+
+extern "C" int art_cmpg_float(float a, float b) {
+    if (a == b) {
+        return 0;
+    } else if (a < b) {
+        return -1;
+    } else if (a > b) {
+        return 1;
+    }
+    return 1;
+}
+
+extern "C" int art_cmpl_double(double a, double b) {
+    if (a == b) {
+        return 0;
+    } else if (a < b) {
+        return -1;
+    } else if (a > b) {
+        return 1;
+    }
+    return -1;
+}
+
+extern "C" int art_cmpg_double(double a, double b) {
+    if (a == b) {
+        return 0;
+    } else if (a < b) {
+        return -1;
+    } else if (a > b) {
+        return 1;
+    }
+    return 1;
+}
+
+// Place a special frame at the TOS that will save the callee saves for the given type
+static void  FinishCalleeSaveFrameSetup(Thread* self, Method** sp, Runtime::CalleeSaveType type) {
+  // Be aware the store below may well stomp on an incoming argument
+  *sp = Runtime::Current()->GetCalleeSaveMethod(type);
+  self->SetTopOfStack(sp, 0);
+}
+
 /*
  * Report location to debugger.  Note: dex_pc is the current offset within
  * the method.  However, because the offset alone cannot distinguish between
@@ -529,6 +580,216 @@
   return code;
 }
 
+
+extern "C" uint32_t artGet32StaticFromCode(uint32_t field_idx, const Method* referrer,
+                                           Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(int32_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get32(NULL);
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, true, true, false, sizeof(int32_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get32(NULL);
+  }
+  return 0;  // Will throw exception by checking with Thread::Current
+}
+
+extern "C" uint64_t artGet64StaticFromCode(uint32_t field_idx, const Method* referrer,
+                                           Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(int64_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get64(NULL);
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, true, true, false, sizeof(int64_t));
+  if (LIKELY(field != NULL)) {
+    return field->Get64(NULL);
+  }
+  return 0;  // Will throw exception by checking with Thread::Current
+}
+
+extern "C" Object* artGetObjStaticFromCode(uint32_t field_idx, const Method* referrer,
+                                           Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, false, false, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    return field->GetObj(NULL);
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, true, false, false, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    return field->GetObj(NULL);
+  }
+  return NULL;  // Will throw exception by checking with Thread::Current
+}
+
+extern "C" uint32_t artGet32InstanceFromCode(uint32_t field_idx, Object* obj,
+                                             const Method* referrer, Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(int32_t));
+  if (LIKELY(field != NULL && obj != NULL)) {
+    return field->Get32(obj);
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, false, true, false, sizeof(int32_t));
+  if (LIKELY(field != NULL)) {
+    if (UNLIKELY(obj == NULL)) {
+      ThrowNullPointerExceptionForFieldAccess(self, field, true);
+    } else {
+      return field->Get32(obj);
+    }
+  }
+  return 0;  // Will throw exception by checking with Thread::Current
+}
+
+extern "C" uint64_t artGet64InstanceFromCode(uint32_t field_idx, Object* obj,
+                                             const Method* referrer, Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(int64_t));
+  if (LIKELY(field != NULL && obj != NULL)) {
+    return field->Get64(obj);
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, false, true, false, sizeof(int64_t));
+  if (LIKELY(field != NULL)) {
+    if (UNLIKELY(obj == NULL)) {
+      ThrowNullPointerExceptionForFieldAccess(self, field, true);
+    } else {
+      return field->Get64(obj);
+    }
+  }
+  return 0;  // Will throw exception by checking with Thread::Current
+}
+
+extern "C" Object* artGetObjInstanceFromCode(uint32_t field_idx, Object* obj,
+                                              const Method* referrer, Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, false, false, sizeof(Object*));
+  if (LIKELY(field != NULL && obj != NULL)) {
+    return field->GetObj(obj);
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, false, false, false, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    if (UNLIKELY(obj == NULL)) {
+      ThrowNullPointerExceptionForFieldAccess(self, field, true);
+    } else {
+      return field->GetObj(obj);
+    }
+  }
+  return NULL;  // Will throw exception by checking with Thread::Current
+}
+
+extern "C" int artSet32StaticFromCode(uint32_t field_idx, uint32_t new_value,
+                                      const Method* referrer, Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(int32_t));
+  if (LIKELY(field != NULL)) {
+    field->Set32(NULL, new_value);
+    return 0;  // success
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, true, true, true, sizeof(int32_t));
+  if (LIKELY(field != NULL)) {
+    field->Set32(NULL, new_value);
+    return 0;  // success
+  }
+  return -1;  // failure
+}
+
+extern "C" int artSet64StaticFromCode(uint32_t field_idx, const Method* referrer,
+                                      uint64_t new_value, Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(int64_t));
+  if (LIKELY(field != NULL)) {
+    field->Set64(NULL, new_value);
+    return 0;  // success
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, true, true, true, sizeof(int64_t));
+  if (LIKELY(field != NULL)) {
+    field->Set64(NULL, new_value);
+    return 0;  // success
+  }
+  return -1;  // failure
+}
+
+extern "C" int artSetObjStaticFromCode(uint32_t field_idx, Object* new_value,
+                                       const Method* referrer, Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, false, true, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    if (LIKELY(!FieldHelper(field).IsPrimitiveType())) {
+      field->SetObj(NULL, new_value);
+      return 0;  // success
+    }
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, true, false, true, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    field->SetObj(NULL, new_value);
+    return 0;  // success
+  }
+  return -1;  // failure
+}
+
+extern "C" int artSet32InstanceFromCode(uint32_t field_idx, Object* obj, uint32_t new_value,
+                                        const Method* referrer, Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(int32_t));
+  if (LIKELY(field != NULL && obj != NULL)) {
+    field->Set32(obj, new_value);
+    return 0;  // success
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, false, true, true, sizeof(int32_t));
+  if (LIKELY(field != NULL)) {
+    if (UNLIKELY(obj == NULL)) {
+      ThrowNullPointerExceptionForFieldAccess(self, field, false);
+    } else {
+      field->Set32(obj, new_value);
+      return 0;  // success
+    }
+  }
+  return -1;  // failure
+}
+
+extern "C" int artSet64InstanceFromCode(uint32_t field_idx, Object* obj, uint64_t new_value,
+                                        Thread* self, Method** sp) {
+  Method* callee_save = Runtime::Current()->GetCalleeSaveMethod(Runtime::kRefsOnly);
+  Method* referrer = sp[callee_save->GetFrameSizeInBytes() / sizeof(Method*)];
+  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(int64_t));
+  if (LIKELY(field != NULL  && obj != NULL)) {
+    field->Set64(obj, new_value);
+    return 0;  // success
+  }
+  *sp = callee_save;
+  self->SetTopOfStack(sp, 0);
+  field = FindFieldFromCode(field_idx, referrer, self, false, true, true, sizeof(int64_t));
+  if (LIKELY(field != NULL)) {
+    if (UNLIKELY(obj == NULL)) {
+      ThrowNullPointerExceptionForFieldAccess(self, field, false);
+    } else {
+      field->Set64(obj, new_value);
+      return 0;  // success
+    }
+  }
+  return -1;  // failure
+}
+
+extern "C" int artSetObjInstanceFromCode(uint32_t field_idx, Object* obj, Object* new_value,
+                                         const Method* referrer, Thread* self, Method** sp) {
+  Field* field = FindFieldFast(field_idx, referrer, false, true, sizeof(Object*));
+  if (LIKELY(field != NULL && obj != NULL)) {
+    field->SetObj(obj, new_value);
+    return 0;  // success
+  }
+  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
+  field = FindFieldFromCode(field_idx, referrer, self, false, false, true, sizeof(Object*));
+  if (LIKELY(field != NULL)) {
+    if (UNLIKELY(obj == NULL)) {
+      ThrowNullPointerExceptionForFieldAccess(self, field, false);
+    } else {
+      field->SetObj(obj, new_value);
+      return 0;  // success
+    }
+  }
+  return -1;  // failure
+}
+
 extern "C" Object* artAllocObjectFromCode(uint32_t type_idx, Method* method,
                                           Thread* self, Method** sp) {
   FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
@@ -702,6 +963,30 @@
   return 0;  // Success
 }
 
+static uint64_t artInvokeCommon(uint32_t method_idx, Object* this_object, Method* caller_method,
+                                Thread* self, Method** sp, bool access_check, InvokeType type){
+  Method* method = FindMethodFast(method_idx, this_object, caller_method, access_check, type);
+  if (UNLIKELY(method == NULL)) {
+    FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsAndArgs);
+    if (UNLIKELY(this_object == NULL && type != kDirect && type != kStatic)) {
+      ThrowNullPointerExceptionForMethodAccess(self, caller_method, method_idx, type);
+      return 0;  // failure
+    }
+    method = FindMethodFromCode(method_idx, this_object, caller_method, self, access_check, type);
+    if (UNLIKELY(method == NULL)) {
+      CHECK(self->IsExceptionPending());
+      return 0;  // failure
+    }
+  }
+  DCHECK(!self->IsExceptionPending());
+  const void* code = method->GetCode();
+
+  uint32_t method_uint = reinterpret_cast<uint32_t>(method);
+  uint64_t code_uint = reinterpret_cast<uint32_t>(code);
+  uint64_t result = ((code_uint << 32) | method_uint);
+  return result;
+}
+
 // See comments in runtime_support_asm.S
 extern "C" uint64_t artInvokeInterfaceTrampoline(uint32_t method_idx, Object* this_object,
                                                  Method* caller_method, Thread* self,
diff --git a/src/runtime_support_common.cc b/src/runtime_support_common.cc
index 9309df9..71567a3 100644
--- a/src/runtime_support_common.cc
+++ b/src/runtime_support_common.cc
@@ -229,244 +229,4 @@
   return klass;
 }
 
-extern "C" uint32_t artGet32StaticFromCode(uint32_t field_idx, const Method* referrer,
-                                           Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(int32_t));
-  if (LIKELY(field != NULL)) {
-    return field->Get32(NULL);
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, true, true, false, sizeof(int32_t));
-  if (LIKELY(field != NULL)) {
-    return field->Get32(NULL);
-  }
-  return 0;  // Will throw exception by checking with Thread::Current
-}
-
-extern "C" uint64_t artGet64StaticFromCode(uint32_t field_idx, const Method* referrer,
-                                           Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(int64_t));
-  if (LIKELY(field != NULL)) {
-    return field->Get64(NULL);
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, true, true, false, sizeof(int64_t));
-  if (LIKELY(field != NULL)) {
-    return field->Get64(NULL);
-  }
-  return 0;  // Will throw exception by checking with Thread::Current
-}
-
-extern "C" Object* artGetObjStaticFromCode(uint32_t field_idx, const Method* referrer,
-                                           Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, false, false, sizeof(Object*));
-  if (LIKELY(field != NULL)) {
-    return field->GetObj(NULL);
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, true, false, false, sizeof(Object*));
-  if (LIKELY(field != NULL)) {
-    return field->GetObj(NULL);
-  }
-  return NULL;  // Will throw exception by checking with Thread::Current
-}
-
-extern "C" uint32_t artGet32InstanceFromCode(uint32_t field_idx, Object* obj,
-                                             const Method* referrer, Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(int32_t));
-  if (LIKELY(field != NULL && obj != NULL)) {
-    return field->Get32(obj);
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, false, true, false, sizeof(int32_t));
-  if (LIKELY(field != NULL)) {
-    if (UNLIKELY(obj == NULL)) {
-      ThrowNullPointerExceptionForFieldAccess(self, field, true);
-    } else {
-      return field->Get32(obj);
-    }
-  }
-  return 0;  // Will throw exception by checking with Thread::Current
-}
-
-extern "C" uint64_t artGet64InstanceFromCode(uint32_t field_idx, Object* obj,
-                                             const Method* referrer, Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, true, false, sizeof(int64_t));
-  if (LIKELY(field != NULL && obj != NULL)) {
-    return field->Get64(obj);
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, false, true, false, sizeof(int64_t));
-  if (LIKELY(field != NULL)) {
-    if (UNLIKELY(obj == NULL)) {
-      ThrowNullPointerExceptionForFieldAccess(self, field, true);
-    } else {
-      return field->Get64(obj);
-    }
-  }
-  return 0;  // Will throw exception by checking with Thread::Current
-}
-
-extern "C" Object* artGetObjInstanceFromCode(uint32_t field_idx, Object* obj,
-                                             const Method* referrer, Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, false, false, sizeof(Object*));
-  if (LIKELY(field != NULL && obj != NULL)) {
-    return field->GetObj(obj);
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, false, false, false, sizeof(Object*));
-  if (LIKELY(field != NULL)) {
-    if (UNLIKELY(obj == NULL)) {
-      ThrowNullPointerExceptionForFieldAccess(self, field, true);
-    } else {
-      return field->GetObj(obj);
-    }
-  }
-  return NULL;  // Will throw exception by checking with Thread::Current
-}
-
-extern "C" int artSet32StaticFromCode(uint32_t field_idx, uint32_t new_value,
-                                      const Method* referrer, Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(int32_t));
-  if (LIKELY(field != NULL)) {
-    field->Set32(NULL, new_value);
-    return 0;  // success
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, true, true, true, sizeof(int32_t));
-  if (LIKELY(field != NULL)) {
-    field->Set32(NULL, new_value);
-    return 0;  // success
-  }
-  return -1;  // failure
-}
-
-extern "C" int artSet64StaticFromCode(uint32_t field_idx, const Method* referrer,
-                                      uint64_t new_value, Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(int64_t));
-  if (LIKELY(field != NULL)) {
-    field->Set64(NULL, new_value);
-    return 0;  // success
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, true, true, true, sizeof(int64_t));
-  if (LIKELY(field != NULL)) {
-    field->Set64(NULL, new_value);
-    return 0;  // success
-  }
-  return -1;  // failure
-}
-
-extern "C" int artSetObjStaticFromCode(uint32_t field_idx, Object* new_value,
-                                       const Method* referrer, Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, false, true, sizeof(Object*));
-  if (LIKELY(field != NULL)) {
-    if (LIKELY(!FieldHelper(field).IsPrimitiveType())) {
-      field->SetObj(NULL, new_value);
-      return 0;  // success
-    }
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, true, false, true, sizeof(Object*));
-  if (LIKELY(field != NULL)) {
-    field->SetObj(NULL, new_value);
-    return 0;  // success
-  }
-  return -1;  // failure
-}
-
-extern "C" int artSet32InstanceFromCode(uint32_t field_idx, Object* obj, uint32_t new_value,
-                                        const Method* referrer, Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(int32_t));
-  if (LIKELY(field != NULL && obj != NULL)) {
-    field->Set32(obj, new_value);
-    return 0;  // success
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, false, true, true, sizeof(int32_t));
-  if (LIKELY(field != NULL)) {
-    if (UNLIKELY(obj == NULL)) {
-      ThrowNullPointerExceptionForFieldAccess(self, field, false);
-    } else {
-      field->Set32(obj, new_value);
-      return 0;  // success
-    }
-  }
-  return -1;  // failure
-}
-
-extern "C" int artSet64InstanceFromCode(uint32_t field_idx, Object* obj, uint64_t new_value,
-#if !defined(ART_USE_LLVM_COMPILER)
-                                        Thread* self, Method** sp) {
-#else
-                                        const Method* referrer, Thread* self, Method** sp) {
-#endif
-#if !defined(ART_USE_LLVM_COMPILER)
-  Method* callee_save = Runtime::Current()->GetCalleeSaveMethod(Runtime::kRefsOnly);
-  Method* referrer = sp[callee_save->GetFrameSizeInBytes() / sizeof(Method*)];
-#endif
-  Field* field = FindFieldFast(field_idx, referrer, true, true, sizeof(int64_t));
-  if (LIKELY(field != NULL  && obj != NULL)) {
-    field->Set64(obj, new_value);
-    return 0;  // success
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  *sp = callee_save;
-  self->SetTopOfStack(sp, 0);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, false, true, true, sizeof(int64_t));
-  if (LIKELY(field != NULL)) {
-    if (UNLIKELY(obj == NULL)) {
-      ThrowNullPointerExceptionForFieldAccess(self, field, false);
-    } else {
-      field->Set64(obj, new_value);
-      return 0;  // success
-    }
-  }
-  return -1;  // failure
-}
-
-extern "C" int artSetObjInstanceFromCode(uint32_t field_idx, Object* obj, Object* new_value,
-                                         const Method* referrer, Thread* self, Method** sp) {
-  Field* field = FindFieldFast(field_idx, referrer, false, true, sizeof(Object*));
-  if (LIKELY(field != NULL && obj != NULL)) {
-    field->SetObj(obj, new_value);
-    return 0;  // success
-  }
-#if !defined(ART_USE_LLVM_COMPILER)
-  FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly);
-#endif
-  field = FindFieldFromCode(field_idx, referrer, self, false, false, true, sizeof(Object*));
-  if (LIKELY(field != NULL)) {
-    if (UNLIKELY(obj == NULL)) {
-      ThrowNullPointerExceptionForFieldAccess(self, field, false);
-    } else {
-      field->SetObj(obj, new_value);
-      return 0;  // success
-    }
-  }
-  return -1;  // failure
-}
-
-
 }  // namespace art
diff --git a/src/runtime_support_common.h b/src/runtime_support_common.h
index adab936..8ef9d93 100644
--- a/src/runtime_support_common.h
+++ b/src/runtime_support_common.h
@@ -144,14 +144,6 @@
   return klass->AllocObject();
 }
 
-// Place a special frame at the TOS that will save the callee saves for the given type
-static inline
-void  FinishCalleeSaveFrameSetup(Thread* self, Method** sp, Runtime::CalleeSaveType type) {
-  // Be aware the store below may well stomp on an incoming argument
-  *sp = Runtime::Current()->GetCalleeSaveMethod(type);
-  self->SetTopOfStack(sp, 0);
-}
-
 // Given the context of a calling Method, use its DexCache to resolve a type to an array Class. If
 // it cannot be resolved, throw an error. If it can, use it to create an array.
 // When verification/compiler hasn't been able to verify access, optionally perform an access
@@ -255,44 +247,6 @@
 extern Method* FindMethodFromCode(uint32_t method_idx, Object* this_object, const Method* referrer,
                                   Thread* self, bool access_check, InvokeType type);
 
-static inline
-Method* _artInvokeCommon(uint32_t method_idx, Object* this_object, Method* caller_method,
-                         Thread* self, Method** sp, bool access_check, InvokeType type){
-  Method* method = FindMethodFast(method_idx, this_object, caller_method, access_check, type);
-  if (UNLIKELY(method == NULL)) {
-#if !defined(ART_USE_LLVM_COMPILER)
-    FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsAndArgs);
-    if (UNLIKELY(this_object == NULL && type != kDirect && type != kStatic)) {
-      ThrowNullPointerExceptionForMethodAccess(self, caller_method, method_idx, type);
-      return 0;  // failure
-    }
-#endif
-    method = FindMethodFromCode(method_idx, this_object, caller_method, self, access_check, type);
-    if (UNLIKELY(method == NULL)) {
-      CHECK(self->IsExceptionPending());
-      return 0;  // failure
-    }
-  }
-  DCHECK(!self->IsExceptionPending());
-  return method;
-}
-
-static inline
-uint64_t artInvokeCommon(uint32_t method_idx, Object* this_object, Method* caller_method,
-                         Thread* self, Method** sp, bool access_check, InvokeType type){
-  Method* method = _artInvokeCommon(method_idx, this_object, caller_method,
-                                    self, sp, access_check, type);
-  if (method == NULL) {
-    return 0;  // failure
-  }
-  const void* code = method->GetCode();
-
-  uint32_t method_uint = reinterpret_cast<uint32_t>(method);
-  uint64_t code_uint = reinterpret_cast<uint32_t>(code);
-  uint64_t result = ((code_uint << 32) | method_uint);
-  return result;
-}
-
 extern Class* ResolveVerifyAndClinit(uint32_t type_idx, const Method* referrer, Thread* self,
                                      bool can_run_clinit, bool verify_access);
 
@@ -301,46 +255,6 @@
   return class_linker->ResolveString(string_idx, referrer);
 }
 
-extern "C" uint32_t artGet32StaticFromCode(uint32_t field_idx, const Method* referrer,
-                                           Thread* self, Method** sp);
-
-extern "C" uint64_t artGet64StaticFromCode(uint32_t field_idx, const Method* referrer,
-                                           Thread* self, Method** sp);
-
-extern "C" Object* artGetObjStaticFromCode(uint32_t field_idx, const Method* referrer,
-                                           Thread* self, Method** sp);
-
-extern "C" uint32_t artGet32InstanceFromCode(uint32_t field_idx, Object* obj,
-                                             const Method* referrer, Thread* self, Method** sp);
-
-extern "C" uint64_t artGet64InstanceFromCode(uint32_t field_idx, Object* obj,
-                                             const Method* referrer, Thread* self, Method** sp);
-
-extern "C" Object* artGetObjInstanceFromCode(uint32_t field_idx, Object* obj,
-                                             const Method* referrer, Thread* self, Method** sp);
-
-extern "C" int artSet32StaticFromCode(uint32_t field_idx, uint32_t new_value,
-                                      const Method* referrer, Thread* self, Method** sp);
-
-extern "C" int artSet64StaticFromCode(uint32_t field_idx, const Method* referrer,
-                                      uint64_t new_value, Thread* self, Method** sp);
-
-extern "C" int artSetObjStaticFromCode(uint32_t field_idx, Object* new_value,
-                                       const Method* referrer, Thread* self, Method** sp);
-
-extern "C" int artSet32InstanceFromCode(uint32_t field_idx, Object* obj, uint32_t new_value,
-                                        const Method* referrer, Thread* self, Method** sp);
-
-extern "C" int artSet64InstanceFromCode(uint32_t field_idx, Object* obj, uint64_t new_value,
-#if !defined(ART_USE_LLVM_COMPILER)
-                                        Thread* self, Method** sp);
-#else
-                                        const Method* referrer, Thread* self, Method** sp);
-#endif
-
-extern "C" int artSetObjInstanceFromCode(uint32_t field_idx, Object* obj, Object* new_value,
-                                         const Method* referrer, Thread* self, Method** sp);
-
 }  // namespace art
 
 #endif  // ART_SRC_RUNTIME_SUPPORT_COMMON_H_