Complete direct, static & virtual invoke

Reworked direct/static invoke to use code_and_method_ structure.  Removed
slow/fast path distinction for direct/static (because there is only
a single path).  Added fast and reworked slow path for virtual invokes.

Change-Id: I037aee26b63244d03ac2bd8720d8c55e256b9b4d
diff --git a/src/object.h b/src/object.h
index 5a47c46..046f74e 100644
--- a/src/object.h
+++ b/src/object.h
@@ -903,6 +903,18 @@
     return OFFSET_OF_OBJECT_MEMBER(Method, invoke_stub_);
   }
 
+  static MemberOffset GetDexCacheCodeAndDirectMethodsOffset() {
+    return OFFSET_OF_OBJECT_MEMBER(Method, dex_cache_code_and_direct_methods_);
+  }
+
+  static MemberOffset GetDexCacheResolvedMethodsOffset() {
+    return OFFSET_OF_OBJECT_MEMBER(Method, dex_cache_resolved_methods_);
+  }
+
+  static MemberOffset GetMethodIndexOffset() {
+    return OFFSET_OF_OBJECT_MEMBER(Method, method_index_);
+  }
+
   void SetInvokeStub(const InvokeStub* new_invoke_stub) {
     SetFieldPtr<const InvokeStub*>(
         OFFSET_OF_OBJECT_MEMBER(Method, invoke_stub_), new_invoke_stub, false);