Enter interpreter stub.
Untested code that when set as the code for a AbstractMethod* will force the
next invocation of the Method to transition into the interpreter.
Change-Id: I557bca3a2caf4a78551b39aa5ac4ffb4c486105b
diff --git a/src/oat/runtime/mips/runtime_support_mips.S b/src/oat/runtime/mips/runtime_support_mips.S
index efd3ede..b49d5a5 100644
--- a/src/oat/runtime/mips/runtime_support_mips.S
+++ b/src/oat/runtime/mips/runtime_support_mips.S
@@ -852,7 +852,7 @@
SETUP_REF_AND_ARGS_CALLEE_SAVE_FRAME
sw $a0, 0($sp) # place proxy method at bottom of frame
move $a2, rSELF # pass Thread::Current
- jal artProxyInvokeHandler # (Method* proxy method, receiver, Thread*, args...)
+ jal artProxyInvokeHandler # (Method* proxy method, receiver, Thread*, SP)
move $a3, $sp # pass $sp
lw $t0, THREAD_EXCEPTION_OFFSET(rSELF) # load Thread::Current()->exception_
lw $ra, 44($sp) # restore $ra
@@ -863,6 +863,25 @@
1:
DELIVER_PENDING_EXCEPTION
+ .global art_interpreter_entry
+ .extern artInterpreterEntry
+ ALIGN_FUNCTION_ENTRY
+art_interpreter_entry:
+ GENERATE_GLOBAL_POINTER
+ SETUP_REF_AND_ARGS_CALLEE_SAVE_FRAME
+ sw $a0, 0($sp) # place proxy method at bottom of frame
+ move $a1, rSELF # pass Thread::Current
+ jal artInterpreterEntry # (Method* method, Thread*, SP)
+ move $a2, $sp # pass $sp
+ lw $t0, THREAD_EXCEPTION_OFFSET(rSELF) # load Thread::Current()->exception_
+ lw $ra, 44($sp) # restore $ra
+ bnez $t0, 1f
+ addiu $sp, $sp, 48 # pop frame
+ jr $ra
+ nop
+1:
+ DELIVER_PENDING_EXCEPTION
+
.global art_instrumentation_entry_from_code
.global art_instrumentation_exit_from_code
.extern artInstrumentationMethodEntryFromCode