Custom codegen for small frameless methods.

Added a general mechanism that will allow pattern matching of
small methods and (generally) frameless code generation.  Prevously,
all frames were at least 16 bytes, not you can have zero-length
frames (and thus some old asserts had to go).

Change-Id: Ic786940a602e25b48cbc317ac601ac84cc307762
diff --git a/src/compiler/codegen/GenCommon.cc b/src/compiler/codegen/GenCommon.cc
index c5b28b3..f63ad4c 100644
--- a/src/compiler/codegen/GenCommon.cc
+++ b/src/compiler/codegen/GenCommon.cc
@@ -931,6 +931,17 @@
     setupResourceMasks(lir);
 }
 
+bool fastInstance(CompilationUnit* cUnit,  uint32_t fieldIdx,
+                  int& fieldOffset, bool& isVolatile, bool isPut)
+{
+    OatCompilationUnit mUnit(cUnit->class_loader, cUnit->class_linker,
+                             *cUnit->dex_file, *cUnit->dex_cache,
+                             cUnit->code_item, cUnit->method_idx,
+                             cUnit->access_flags);
+    return cUnit->compiler->ComputeInstanceFieldInfo(fieldIdx, &mUnit,
+                     fieldOffset, isVolatile, isPut);
+}
+
 void genIGet(CompilationUnit* cUnit, MIR* mir, OpSize size,
              RegLocation rlDest, RegLocation rlObj,
                     bool isLongOrDouble, bool isObject)
@@ -939,13 +950,8 @@
     bool isVolatile;
     uint32_t fieldIdx = mir->dalvikInsn.vC;
 
-    OatCompilationUnit mUnit(cUnit->class_loader, cUnit->class_linker,
-                             *cUnit->dex_file, *cUnit->dex_cache,
-                             cUnit->code_item, cUnit->method_idx,
-                             cUnit->access_flags);
-
-    bool fastPath = cUnit->compiler->ComputeInstanceFieldInfo(fieldIdx, &mUnit,
-                    fieldOffset, isVolatile, false);
+    bool fastPath = fastInstance(cUnit, fieldIdx, fieldOffset, isVolatile,
+                                 false);
 
     if (fastPath && !SLOW_FIELD_PATH) {
         RegLocation rlResult;
@@ -1006,13 +1012,8 @@
     bool isVolatile;
     uint32_t fieldIdx = mir->dalvikInsn.vC;
 
-    OatCompilationUnit mUnit(cUnit->class_loader, cUnit->class_linker,
-                             *cUnit->dex_file, *cUnit->dex_cache,
-                             cUnit->code_item, cUnit->method_idx,
-                             cUnit->access_flags);
-
-    bool fastPath = cUnit->compiler->ComputeInstanceFieldInfo(fieldIdx, &mUnit,
-                    fieldOffset, isVolatile, true);
+    bool fastPath = fastInstance(cUnit, fieldIdx, fieldOffset, isVolatile,
+                                 true);
     if (fastPath && !SLOW_FIELD_PATH) {
         RegisterClass regClass = oatRegClassBySize(size);
         DCHECK_GE(fieldOffset, 0);