Codegen for invoke-super, invoke-interface
Completed fast & slow paths for invoke-super and the single path for invoke-interface. Added test
for invoke-super, but invoke-interface is untested (needs runtime-support routines to be fleshed
out).
Some trickiness in the invoke-interface code-generation. Because they are going to be
glacially slow anyway, inline code has been minimized and all interesting work pushed
off to TODO runtime support routines. However, we can't simultaneously pass the arguments
needed by the final destination and the arguments needed by the runtime lookup helpers. So,
I've added a trampoline to save the target args, load the args needed by the helpers, call
the lookup routines, restore the final target arguments and continue on the journey.
More detailed comments in the code.
Change-Id: Ice2343798a91a37da982811fd1c6384f584a3c0b
diff --git a/src/runtime_support.h b/src/runtime_support.h
index 8d65aaa..23126d7 100644
--- a/src/runtime_support.h
+++ b/src/runtime_support.h
@@ -8,6 +8,7 @@
extern "C" uint64_t art_shl_long(uint64_t, uint32_t);
extern "C" uint64_t art_shr_long(uint64_t, uint32_t);
extern "C" uint64_t art_ushr_long(uint64_t, uint32_t);
+ extern "C" void art_invoke_interface_trampoline(void*, void*, void*, void*);
/* Conversions */
extern "C" float __aeabi_i2f(int op1); // OP_INT_TO_FLOAT