Decoding references. Otherwise, buggy code works only on stack refs.

Now, we handle not only SIRT (stack stuff), but because now we call
DecodeJObject(), we can also handle Globals, Global Weak, and Local.

Change-Id: Ibaf2f6ff81765bda6c14491b35ea088a5bf2bb27
diff --git a/src/calling_convention.cc b/src/calling_convention.cc
index 12dab2e..83f7a00 100644
--- a/src/calling_convention.cc
+++ b/src/calling_convention.cc
@@ -29,6 +29,9 @@
     itr_longs_and_doubles_++;
     itr_slots_++;
   }
+  if (IsCurrentParamAReference()) {
+    itr_refs_++;
+  }
   itr_args_++;
   itr_slots_++;
 }
@@ -84,6 +87,9 @@
       itr_slots_++;
     }
   }
+  if (IsCurrentParamAReference()) {
+    itr_refs_++;
+  }
   itr_args_++;
   itr_slots_++;
 }
@@ -108,15 +114,7 @@
   CHECK_GT(SirtLinkOffset(), SirtNumRefsOffset());
   // Address of 1st SIRT entry
   int result = SirtLinkOffset().Int32Value() + kPointerSize;
-  if (itr_args_ != kObjectOrClass) {
-    const Method *method = GetMethod();
-    int arg_pos = itr_args_ - NumberOfExtraArgumentsForJni(method);
-    int previous_refs = GetMethod()->NumReferenceArgsBefore(arg_pos);
-    if (method->IsStatic()) {
-      previous_refs++;  // account for jclass
-    }
-    result += previous_refs * kPointerSize;
-  }
+  result += itr_refs_ * kPointerSize;
   CHECK_GT(result, SirtLinkOffset().Int32Value());
   return FrameOffset(result);
 }