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/RallocUtil.cc b/src/compiler/codegen/RallocUtil.cc
index d6e0bbc..5951ad4 100644
--- a/src/compiler/codegen/RallocUtil.cc
+++ b/src/compiler/codegen/RallocUtil.cc
@@ -640,26 +640,16 @@
     if (rl.location == kLocPhysReg) {
         RegisterInfo* infoLo = getRegInfo(cUnit, rl.lowReg);
         RegisterInfo* infoHi = getRegInfo(cUnit, rl.highReg);
-        if (!infoLo->pair) {
-            dumpRegPool(cUnit->regPool->coreRegs,
-                        cUnit->regPool->numCoreRegs);
-            assert(infoLo->pair);
+        if (infoLo->isTemp) {
+            infoLo->pair = false;
+            infoLo->defStart = NULL;
+            infoLo->defEnd = NULL;
         }
-        if (!infoHi->pair) {
-            dumpRegPool(cUnit->regPool->coreRegs,
-                        cUnit->regPool->numCoreRegs);
-            assert(infoHi->pair);
+        if (infoHi->isTemp) {
+            infoHi->pair = false;
+            infoHi->defStart = NULL;
+            infoHi->defEnd = NULL;
         }
-        assert(infoLo->pair);
-        assert(infoHi->pair);
-        assert(infoLo->partner == infoHi->reg);
-        assert(infoHi->partner == infoLo->reg);
-        infoLo->pair = false;
-        infoHi->pair = false;
-        infoLo->defStart = NULL;
-        infoLo->defEnd = NULL;
-        infoHi->defStart = NULL;
-        infoHi->defEnd = NULL;
     }
     rl.wide = false;
     return rl;