Fixes for register promotion; enable fast path

Had an off-by-one error in the range argument loading (only mattered when
register promotion is enabled - for range args we do a memory copy and
must ensure that all promoted values are flushed to memory before the
copy.  Also reworked and removed some asserts for sitations that are
legal now that we're promoting.  Enabled fast path code to exercise it
a bit.

Change-Id: Id1acb3dad01d5d1077661150e98e51fd4243b6f1
diff --git a/src/compiler/codegen/arm/MethodCodegenDriver.cc b/src/compiler/codegen/arm/MethodCodegenDriver.cc
index 96f5423..9c87659 100644
--- a/src/compiler/codegen/arm/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/arm/MethodCodegenDriver.cc
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#define FORCE_SLOW 1
+#define FORCE_SLOW 0
 
 static const RegLocation badLoc = {kLocDalvikFrame, 0, 0, INVALID_REG,
                                    INVALID_REG, INVALID_SREG, 0,
@@ -804,7 +804,7 @@
      * frame backing storage.
      */
     // Scan the rest of the args - if in physReg flush to memory
-    for (int i = 4; i < numArgs; i++) {
+    for (int i = 3; i < numArgs; i++) {
         RegLocation loc = oatGetRawSrc(cUnit, mir, i);
         if (loc.wide) {
             loc = oatUpdateLocWide(cUnit, loc);