Remove use of compiled invoke stubs from portable.

Now the invoke stubs can be safely removed. Tested and working on ARM,
basic testing done on x86/MIPS, but portable is currently broken for them
even without the change.

Change-Id: Ib73f2b7aa9d81f5f0e1e817d16b9bec464c5a5aa
diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc
index 29781bc..91b381c 100644
--- a/src/interpreter/interpreter.cc
+++ b/src/interpreter/interpreter.cc
@@ -74,7 +74,7 @@
     CHECK(c != NULL);
     Object* obj = klass->AllocObject(self);
     CHECK(obj != NULL);
-    EnterInterpreterFromInvoke(self, c, obj, NULL, NULL, NULL);
+    EnterInterpreterFromInvoke(self, c, obj, NULL, NULL);
     result->SetL(obj);
   } else if (name == "java.lang.reflect.Field java.lang.Class.getDeclaredField(java.lang.String)") {
     // Special managed code cut-out to allow field lookup in a un-started runtime that'd fail
@@ -136,7 +136,7 @@
     }
   } else {
     // Not special, continue with regular interpreter execution.
-    EnterInterpreterFromInvoke(self, target_method, receiver, args, result, result);
+    EnterInterpreterFromInvoke(self, target_method, receiver, args, result);
   }
 }
 
@@ -414,14 +414,8 @@
     arg_array.BuildArgArray(shadow_frame, receiver, dec_insn.arg + (type != kStatic ? 1 : 0));
   }
   if (LIKELY(Runtime::Current()->IsStarted())) {
-    JValue unused_result;
-    if (mh.IsReturnFloatOrDouble()) {
-      target_method->Invoke(self, arg_array.GetArray(), arg_array.GetNumBytes(),
-                            &unused_result, result);
-    } else {
-      target_method->Invoke(self, arg_array.GetArray(), arg_array.GetNumBytes(),
-                            result, &unused_result);
-    }
+    target_method->Invoke(self, arg_array.GetArray(), arg_array.GetNumBytes(), result,
+                          mh.GetShorty()[0]);
   } else {
     uint32_t* args = arg_array.GetArray();
     if (type != kStatic) {
@@ -1807,7 +1801,7 @@
 }
 
 void EnterInterpreterFromInvoke(Thread* self, AbstractMethod* method, Object* receiver,
-                                uint32_t* args, JValue* result, JValue* float_result) {
+                                uint32_t* args, JValue* result) {
   DCHECK_EQ(self, Thread::Current());
   if (__builtin_frame_address(0) < self->GetStackEnd()) {
     ThrowStackOverflowError(self);
@@ -1875,28 +1869,16 @@
   }
   if (LIKELY(!method->IsNative())) {
     JValue r = Execute(self, mh, code_item, *shadow_frame.get(), JValue());
-    if (result != NULL && float_result != NULL) {
-      if (mh.IsReturnFloatOrDouble()) {
-        *float_result = r;
-      } else {
-        *result = r;
-      }
+    if (result != NULL) {
+      *result = r;
     }
   } else {
     // We don't expect to be asked to interpret native code (which is entered via a JNI compiler
     // generated stub) except during testing and image writing.
     if (!Runtime::Current()->IsStarted()) {
-      if (mh.IsReturnFloatOrDouble()) {
-        UnstartedRuntimeJni(self, method, receiver, args, float_result);
-      } else {
-        UnstartedRuntimeJni(self, method, receiver, args, result);
-      }
+      UnstartedRuntimeJni(self, method, receiver, args, result);
     } else {
-      if (mh.IsReturnFloatOrDouble()) {
-        InterpreterJni(self, method, shorty, receiver, args, float_result);
-      } else {
-        InterpreterJni(self, method, shorty, receiver, args, result);
-      }
+      InterpreterJni(self, method, shorty, receiver, args, result);
     }
   }
   self->PopShadowFrame();
diff --git a/src/interpreter/interpreter.h b/src/interpreter/interpreter.h
index 91816c9..556b044 100644
--- a/src/interpreter/interpreter.h
+++ b/src/interpreter/interpreter.h
@@ -34,8 +34,7 @@
 namespace interpreter {
 
 extern void EnterInterpreterFromInvoke(Thread* self, mirror::AbstractMethod* method,
-                                       mirror::Object* receiver, uint32_t* args,
-                                       JValue* result, JValue* float_result)
+                                       mirror::Object* receiver, uint32_t* args, JValue* result)
     SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
 extern JValue EnterInterpreterFromDeoptimize(Thread* self, ShadowFrame& shadow_frame,