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();