Merge "Fix runtime_support_llvm for ART_USE_LLVM_COMPILER." into dalvik-dev
diff --git a/src/oat/runtime/arm/runtime_support_arm.S b/src/oat/runtime/arm/runtime_support_arm.S
index 09b26b9..1978a73 100644
--- a/src/oat/runtime/arm/runtime_support_arm.S
+++ b/src/oat/runtime/arm/runtime_support_arm.S
@@ -177,8 +177,10 @@
SETUP_REF_AND_ARGS_CALLEE_SAVE_FRAME @ save callee saves in case allocation triggers GC
ldr r2, [sp, #48] @ pass caller Method*
mov r3, r9 @ pass Thread::Current
- str sp, [sp, #0] @ pass SP
+ mov r12, sp
+ str r12, [sp, #-16]! @ expand the frame and pass SP
bl \cxx_name @ (method_idx, this, caller, Thread*, SP)
+ add sp, #16 @ strip the extra frame
mov r12, r1 @ save Method*->code_
RESTORE_REF_AND_ARGS_CALLEE_SAVE_FRAME
cmp r0, #0 @ did we find the target?
@@ -440,8 +442,10 @@
SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
ldr r2, [sp, #32] @ pass referrer
mov r3, r9 @ pass Thread::Current
- str sp, [sp, #0] @ pass SP
+ mov r12, sp
+ str r12, [sp, #-16]! @ expand the frame and pass SP
bl artGet32InstanceFromCode @ (field_idx, Object*, referrer, Thread*, SP)
+ add sp, #16 @ strip the extra frame
ldr r12, [r9, #THREAD_EXCEPTION_OFFSET] @ load Thread::Current()->exception_
RESTORE_REF_ONLY_CALLEE_SAVE_FRAME
cmp r12, #0 @ success if no exception is pending
@@ -458,8 +462,10 @@
SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
ldr r2, [sp, #32] @ pass referrer
mov r3, r9 @ pass Thread::Current
- str sp, [sp, #0] @ pass SP
+ mov r12, sp
+ str r12, [sp, #-16]! @ expand the frame and pass SP
bl artGet64InstanceFromCode @ (field_idx, Object*, referrer, Thread*, SP)
+ add sp, #16 @ strip the extra frame
ldr r12, [r9, #THREAD_EXCEPTION_OFFSET] @ load Thread::Current()->exception_
RESTORE_REF_ONLY_CALLEE_SAVE_FRAME
cmp r12, #0 @ success if no exception is pending
@@ -476,8 +482,10 @@
SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
ldr r2, [sp, #32] @ pass referrer
mov r3, r9 @ pass Thread::Current
- str sp, [sp, #0] @ pass SP
+ mov r12, sp
+ str r12, [sp, #-16]! @ expand the frame and pass SP
bl artGetObjInstanceFromCode @ (field_idx, Object*, referrer, Thread*, SP)
+ add sp, #16 @ strip the extra frame
ldr r12, [r9, #THREAD_EXCEPTION_OFFSET] @ load Thread::Current()->exception_
RESTORE_REF_ONLY_CALLEE_SAVE_FRAME
cmp r12, #0 @ success if no exception is pending
@@ -494,8 +502,10 @@
SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
ldr r2, [sp, #32] @ pass referrer
mov r3, r9 @ pass Thread::Current
- str sp, [sp, #0] @ pass SP
+ mov r12, sp
+ str r12, [sp, #-16]! @ expand the frame and pass SP
bl artSet32StaticFromCode @ (field_idx, new_val, referrer, Thread*, SP)
+ add sp, #16 @ strip the extra frame
RESTORE_REF_ONLY_CALLEE_SAVE_FRAME
cmp r0, #0 @ success if result is 0
bxeq lr @ return on success
@@ -533,8 +543,10 @@
SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
ldr r2, [sp, #32] @ pass referrer
mov r3, r9 @ pass Thread::Current
- str sp, [sp, #0] @ pass SP
+ mov r12, sp
+ str r12, [sp, #-16]! @ expand the frame and pass SP
bl artSetObjStaticFromCode @ (field_idx, new_val, referrer, Thread*, SP)
+ add sp, #16 @ strip the extra frame
RESTORE_REF_ONLY_CALLEE_SAVE_FRAME
cmp r0, #0 @ success if result is 0
bxeq lr @ return on success
@@ -658,9 +670,11 @@
art_alloc_array_from_code:
SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
mov r3, r9 @ pass Thread::Current
- str sp, [sp, #0] @ pass SP
+ mov r12, sp
+ str r12, [sp, #-16]! @ expand the frame and pass SP
@ artAllocArrayFromCode(uint32_t type_idx, Method* method, int32_t component_count, Thread*, SP)
bl artAllocArrayFromCode
+ add sp, #16 @ strip the extra frame
RESTORE_REF_ONLY_CALLEE_SAVE_FRAME
cmp r0, #0 @ success if result is non-null
bxne lr @ return on success
@@ -676,9 +690,11 @@
art_alloc_array_from_code_with_access_check:
SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
mov r3, r9 @ pass Thread::Current
- str sp, [sp, #0] @ pass SP
+ mov r12, sp
+ str r12, [sp, #-16]! @ expand the frame and pass SP
@ artAllocArrayFromCodeWithAccessCheck(type_idx, method, component_count, Thread*, SP)
bl artAllocArrayFromCodeWithAccessCheck
+ add sp, #16 @ strip the extra frame
RESTORE_REF_ONLY_CALLEE_SAVE_FRAME
cmp r0, #0 @ success if result is non-null
bxne lr @ return on success
@@ -693,9 +709,11 @@
art_check_and_alloc_array_from_code:
SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
mov r3, r9 @ pass Thread::Current
- str sp, [sp, #0] @ pass SP
+ mov r12, sp
+ str r12, [sp, #-16]! @ expand the frame and pass SP
@ artCheckAndAllocArrayFromCode(uint32_t type_idx, Method* method, int32_t count, Thread* , SP)
bl artCheckAndAllocArrayFromCode
+ add sp, #16 @ strip the extra frame
RESTORE_REF_ONLY_CALLEE_SAVE_FRAME
cmp r0, #0 @ success if result is non-null
bxne lr @ return on success
@@ -710,9 +728,11 @@
art_check_and_alloc_array_from_code_with_access_check:
SETUP_REF_ONLY_CALLEE_SAVE_FRAME @ save callee saves in case of GC
mov r3, r9 @ pass Thread::Current
- str sp, [sp, #0] @ pass SP
+ mov r12, sp
+ str r12, [sp, #-16]! @ expand the frame and pass SP
@ artCheckAndAllocArrayFromCodeWithAccessCheck(type_idx, method, count, Thread* , SP)
bl artCheckAndAllocArrayFromCodeWithAccessCheck
+ add sp, #16 @ strip the extra frame
RESTORE_REF_ONLY_CALLEE_SAVE_FRAME
cmp r0, #0 @ success if result is non-null
bxne lr @ return on success