ART: Fix ARM invoke stub, run Generic JNI in jni_compiler_test
On devices which support it, run all jni compiler tests also with
the Generic JNI infrastructure.
Fix art_quick_invoke_stub for ARM32 to enforce 16B stack alignment.
As the native convention does not require as much, the previous
code would keep it unaligned.
Bug: 17107929
Change-Id: Ibce423949846e447d2b0246d07973b6b717691ac
diff --git a/runtime/arch/arm/quick_entrypoints_arm.S b/runtime/arch/arm/quick_entrypoints_arm.S
index b4194f5..1b30c9c 100644
--- a/runtime/arch/arm/quick_entrypoints_arm.S
+++ b/runtime/arch/arm/quick_entrypoints_arm.S
@@ -308,9 +308,12 @@
#ifdef ARM_R4_SUSPEND_FLAG
mov r4, #SUSPEND_CHECK_INTERVAL @ reset r4 to suspend check interval
#endif
- add r5, r2, #16 @ create space for method pointer in frame
- and r5, #0xFFFFFFF0 @ align frame size to 16 bytes
- sub sp, r5 @ reserve stack space for argument array
+ add r5, r2, #4 @ create space for method pointer in frame
+
+ sub r5, sp, r5 @ reserve & align *stack* to 16 bytes: native calling
+ and r5, #0xFFFFFFF0 @ convention only aligns to 8B, so we have to ensure ART
+ mov sp, r5 @ 16B alignment ourselves.
+
add r0, sp, #4 @ pass stack pointer + method ptr as dest for memcpy
bl memcpy @ memcpy (dest, src, bytes)
ldr r0, [r11] @ restore method*