Dx fit to prevent method arguments from being overwritten by temps.

This change keeps code debuggable by preventing method arguments from
being reused to hold temporary values. This was a problem especially for
static methods.

Change-Id: I999013858501e7de3df27f82199d377fb1d034ea
diff --git a/dx/src/com/android/dx/ssa/back/FirstFitLocalCombiningAllocator.java b/dx/src/com/android/dx/ssa/back/FirstFitLocalCombiningAllocator.java
index 0cffcfa..e44c555 100644
--- a/dx/src/com/android/dx/ssa/back/FirstFitLocalCombiningAllocator.java
+++ b/dx/src/com/android/dx/ssa/back/FirstFitLocalCombiningAllocator.java
@@ -232,7 +232,7 @@
      */
     private void handleLocalAssociatedOther() {
         for (ArrayList<RegisterSpec> specs : localVariables.values()) {
-            int ropReg = 0;
+            int ropReg = paramRangeEnd;
 
             boolean done;
             do {
@@ -361,13 +361,7 @@
      * @return {@code >= 0;} start of available register range.
      */
     private int findNextUnreservedRopReg(int startReg, int width) {
-        if (minimizeRegisters && !isThisPointerReg(startReg)) {
-            return startReg;
-        }
-
-        int reg;
-
-        reg = reservedRopRegs.nextClearBit(startReg);
+        int reg = reservedRopRegs.nextClearBit(startReg);
 
         while (true) {
             int i = 1;
@@ -394,13 +388,7 @@
      * @return {@code >= 0;} start of available register range.
      */
     private int findRopRegForLocal(int startReg, int width) {
-        if (minimizeRegisters && !isThisPointerReg(startReg)) {
-            return startReg;
-        }
-
-        int reg;
-
-        reg = usedRopRegs.nextClearBit(startReg);
+        int reg = usedRopRegs.nextClearBit(startReg);
 
         while (true) {
             int i = 1;
@@ -480,7 +468,7 @@
             int checkReg = checkRegSpec.getReg();
 
             // Assume none of the register is mapped yet
-            int ropReg = 0;
+            int ropReg = paramRangeEnd;
 
             /**
              * See if either register is already mapped. Most likely the move
@@ -522,7 +510,7 @@
 
             int category = ssaSpec.getCategory();
             // Find a rop reg that does not interfere
-            int ropReg = findNextUnreservedRopReg(0, category);
+            int ropReg = findNextUnreservedRopReg(paramRangeEnd, category);
             while (!canMapReg(ssaSpec, ropReg)) {
                 ropReg = findNextUnreservedRopReg(ropReg + 1, category);
             }
@@ -830,7 +818,7 @@
      */
     private int findAnyFittingRange(NormalSsaInsn insn, int rangeLength,
             int[] categoriesForIndex, BitSet outMovesRequired) {
-        int rangeStart = 0;
+        int rangeStart = paramRangeEnd;
         while (true) {
             rangeStart = findNextUnreservedRopReg(rangeStart, rangeLength);
             int fitWidth